/[svn]/gigedit/trunk/src/dimensionmanager.cpp
ViewVC logotype

Contents of /gigedit/trunk/src/dimensionmanager.cpp

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1107 - (show annotations) (download)
Thu Mar 22 20:00:10 2007 UTC (17 years ago) by schoenebeck
File size: 9386 byte(s)
* added dialog for managing dimensions of a selected region
  (Add and Remove buttons not yet implemented)

1 /* -*- c++ -*-
2 * Copyright (C) 2006, 2007 Andreas Persson
3 *
4 * This program is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU General Public License as
6 * published by the Free Software Foundation; either version 2, or (at
7 * your option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful, but
10 * WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with program; see the file COPYING. If not, write to the Free
16 * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
17 * 02110-1301 USA.
18 */
19
20 #include "dimensionmanager.h"
21
22 #include <gtkmm/stock.h>
23
24 // returns a human readable name of the given dimension type
25 static Glib::ustring __dimTypeAsString(gig::dimension_t d) {
26 char buf[32];
27 switch (d) {
28 case gig::dimension_none:
29 return "None";
30 case gig::dimension_samplechannel:
31 return "Sample Channel";
32 case gig::dimension_layer:
33 return "Layer";
34 case gig::dimension_velocity:
35 return "Velocity";
36 case gig::dimension_channelaftertouch:
37 return "Aftertouch";
38 case gig::dimension_releasetrigger:
39 return "Release Trigger";
40 case gig::dimension_keyboard:
41 return "Keyswitching";
42 case gig::dimension_roundrobin:
43 return "Round Robin";
44 case gig::dimension_random:
45 return "Random Generator";
46 case gig::dimension_smartmidi:
47 return "Smart MIDI";
48 case gig::dimension_roundrobinkeyboard:
49 return "Keyboard Round Robin";
50 case gig::dimension_modwheel:
51 return "Modulation Wheel";
52 case gig::dimension_breath:
53 return "Breath Ctrl.";
54 case gig::dimension_foot:
55 return "Foot Ctrl.";
56 case gig::dimension_portamentotime:
57 return "Portamento Time Ctrl.";
58 case gig::dimension_effect1:
59 return "Effect Ctrl. 1";
60 case gig::dimension_effect2:
61 return "Effect Ctrl. 2";
62 case gig::dimension_genpurpose1:
63 return "General Purpose Ctrl. 1";
64 case gig::dimension_genpurpose2:
65 return "General Purpose Ctrl. 2";
66 case gig::dimension_genpurpose3:
67 return "General Purpose Ctrl. 3";
68 case gig::dimension_genpurpose4:
69 return "General Purpose Ctrl. 4";
70 case gig::dimension_sustainpedal:
71 return "Sustain Pedal";
72 case gig::dimension_portamento:
73 return "Portamento Ctrl.";
74 case gig::dimension_sostenutopedal:
75 return "Sostenuto Pedal";
76 case gig::dimension_softpedal:
77 return "Soft Pedal";
78 case gig::dimension_genpurpose5:
79 return "General Purpose Ctrl. 5";
80 case gig::dimension_genpurpose6:
81 return "General Purpose Ctrl. 6";
82 case gig::dimension_genpurpose7:
83 return "General Purpose Ctrl. 7";
84 case gig::dimension_genpurpose8:
85 return "General Purpose Ctrl. 8";
86 case gig::dimension_effect1depth:
87 return "Effect 1 Depth";
88 case gig::dimension_effect2depth:
89 return "Effect 2 Depth";
90 case gig::dimension_effect3depth:
91 return "Effect 3 Depth";
92 case gig::dimension_effect4depth:
93 return "Effect 4 Depth";
94 case gig::dimension_effect5depth:
95 return "Effect 5 Depth";
96 default:
97 sprintf(buf, "Unknown Type (0x%x) !!!", d);
98 return buf;
99 }
100 }
101
102 // returns a human readable description of the given dimension
103 static Glib::ustring __dimDescriptionAsString(gig::dimension_t d) {
104 switch (d) {
105 case gig::dimension_none:
106 return "Dimension not in use";
107 case gig::dimension_samplechannel:
108 return "If used sample has more than one channel (thus is not mono)";
109 case gig::dimension_layer:
110 return "For layering of up to 8 instruments (and eventually crossfading of 2 or 4 layers";
111 case gig::dimension_velocity:
112 return "Key Velocity (this is the only dimension in gig2 where the ranges can exactly be defined)";
113 case gig::dimension_channelaftertouch:
114 return "Channel Key Pressure";
115 case gig::dimension_releasetrigger:
116 return "Special dimension for triggering samples on releasing a key";
117 case gig::dimension_keyboard:
118 return "Dimension for keyswitching (keyboard)";
119 case gig::dimension_roundrobin:
120 return "Different samples triggered each time a note is played, dimension regions selected in sequence";
121 case gig::dimension_random:
122 return "Different samples triggered each time a note is played, random order";
123 case gig::dimension_smartmidi:
124 return "For MIDI tools like legato and repetition mode";
125 case gig::dimension_roundrobinkeyboard:
126 return "Different samples triggered each time a note is played, any key advances the counter";
127 case gig::dimension_modwheel:
128 return "MIDI Controller 1";
129 case gig::dimension_breath:
130 return "MIDI Controller 2";
131 case gig::dimension_foot:
132 return "MIDI Controller 4";
133 case gig::dimension_portamentotime:
134 return "MIDI Controller 5";
135 case gig::dimension_effect1:
136 return "MIDI Controller 12";
137 case gig::dimension_effect2:
138 return "MIDI Controller 13";
139 case gig::dimension_genpurpose1:
140 return "Slider, MIDI Controller 16";
141 case gig::dimension_genpurpose2:
142 return "Slider, MIDI Controller 17";
143 case gig::dimension_genpurpose3:
144 return "Slider, MIDI Controller 18";
145 case gig::dimension_genpurpose4:
146 return "Slider, MIDI Controller 19";
147 case gig::dimension_sustainpedal:
148 return "MIDI Controller 64";
149 case gig::dimension_portamento:
150 return "MIDI Controller 65";
151 case gig::dimension_sostenutopedal:
152 return "MIDI Controller 66";
153 case gig::dimension_softpedal:
154 return "MIDI Controller 67";
155 case gig::dimension_genpurpose5:
156 return "Button, MIDI Controller 80";
157 case gig::dimension_genpurpose6:
158 return "Button, MIDI Controller 81";
159 case gig::dimension_genpurpose7:
160 return "Button, MIDI Controller 82";
161 case gig::dimension_genpurpose8:
162 return "Button, MIDI Controller 83";
163 case gig::dimension_effect1depth:
164 return "MIDI Controller 91";
165 case gig::dimension_effect2depth:
166 return "MIDI Controller 92";
167 case gig::dimension_effect3depth:
168 return "MIDI Controller 93";
169 case gig::dimension_effect4depth:
170 return "MIDI Controller 94";
171 case gig::dimension_effect5depth:
172 return "MIDI Controller 95";
173 default:
174 return "Please report this !!!";
175 }
176 }
177
178 DimensionManager::DimensionManager() :
179 addButton(Gtk::Stock::ADD), removeButton(Gtk::Stock::REMOVE)
180 {
181 set_title("Dimensions of selected Region");
182 add(vbox);
183 scrolledWindow.add(treeView);
184 vbox.pack_start(scrolledWindow);
185 scrolledWindow.show();
186 vbox.pack_start(buttonBox);
187 buttonBox.set_layout(Gtk::BUTTONBOX_END);
188 buttonBox.set_border_width(5);
189 buttonBox.show();
190 buttonBox.pack_start(addButton);
191 buttonBox.pack_start(removeButton);
192 addButton.show();
193 removeButton.show();
194
195 // setup the table
196 refTableModel = Gtk::ListStore::create(tableModel);
197 treeView.set_model(refTableModel);
198 treeView.append_column("Dimension Type", tableModel.m_dim_type);
199 treeView.append_column_numeric("Bits", tableModel.m_bits, "%d");
200 treeView.append_column_numeric("Zones", tableModel.m_zones, "%d");
201 treeView.append_column("Description", tableModel.m_description);
202 treeView.show();
203
204 addButton.signal_clicked().connect(
205 sigc::mem_fun(*this, &DimensionManager::addDimension)
206 );
207
208 removeButton.signal_clicked().connect(
209 sigc::mem_fun(*this, &DimensionManager::removeDimension)
210 );
211
212 show_all_children();
213 }
214
215 void DimensionManager::show(gig::Region* region) {
216 this->region = region;
217 refTableModel->clear();
218
219 for (int i = 0; i < region->Dimensions; i++) {
220 gig::dimension_def_t dim = region->pDimensionDefinitions[i];
221 Gtk::TreeModel::Row row = *(refTableModel->append());
222 row[tableModel.m_dim_type] = __dimTypeAsString(dim.dimension);
223 row[tableModel.m_bits] = dim.bits;
224 row[tableModel.m_zones] = 1 << dim.bits; //TODO: for now we calculate it here until libgig always ensures 'zones' to be correct
225 row[tableModel.m_description] = __dimDescriptionAsString(dim.dimension);
226 }
227
228 Gtk::Window::show();
229 deiconify();
230 }
231
232 void DimensionManager::addDimension() {
233 //TODO: show a small dialog for adding a new dimension
234 }
235
236 void DimensionManager::removeDimension() {
237 //TODO: remove selected dimension
238 }

  ViewVC Help
Powered by ViewVC