/[svn]/qsampler/trunk/src/qsamplerOptions.cpp
ViewVC logotype

Contents of /qsampler/trunk/src/qsamplerOptions.cpp

Parent Directory Parent Directory | Revision Log Revision Log


Revision 980 - (show annotations) (download)
Sun Dec 17 22:29:29 2006 UTC (17 years, 3 months ago) by capela
File size: 14651 byte(s)
* Revised and extended MIDI instrument mapping feature; this time
  two (2) MIDI maps are being implicitly created, ones designated
  as 'Chromatic' (0) and another as 'Drum Kits' (1), which can be
  assigned to each sampler channel. (ATTN: this commit elevates the
  requirements for liblscp >= 0.5.0, also on todays CVS and pending
  proper release very soon).

1 // qsamplerOptions.cpp
2 //
3 /****************************************************************************
4 Copyright (C) 2004-2006, rncbc aka Rui Nuno Capela. All rights reserved.
5
6 This program is free software; you can redistribute it and/or
7 modify it under the terms of the GNU General Public License
8 as published by the Free Software Foundation; either version 2
9 of the License, or (at your option) any later version.
10
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
15
16 You should have received a copy of the GNU General Public License along
17 with this program; if not, write to the Free Software Foundation, Inc.,
18 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
19
20 *****************************************************************************/
21
22 #include "qsamplerAbout.h"
23 #include "qsamplerOptions.h"
24
25 #include <qcombobox.h>
26
27 #include <lscp/client.h>
28
29 #ifdef CONFIG_LIBGIG
30 #include <gig.h>
31 #endif
32
33
34 //-------------------------------------------------------------------------
35 // qsamplerOptions - Prototype settings structure.
36 //
37
38 // Constructor.
39 qsamplerOptions::qsamplerOptions (void)
40 {
41 // Begin master key group.
42 m_settings.beginGroup("/qsampler");
43
44 // And go into general options group.
45 m_settings.beginGroup("/Options");
46
47 // Load server options...
48 m_settings.beginGroup("/Server");
49 sServerHost = m_settings.readEntry("/ServerHost", "localhost");
50 iServerPort = m_settings.readNumEntry("/ServerPort", 8888);
51 iServerTimeout = m_settings.readNumEntry("/ServerTimeout", 1000);
52 bServerStart = m_settings.readBoolEntry("/ServerStart", true);
53 sServerCmdLine = m_settings.readEntry("/ServerCmdLine", "linuxsampler");
54 iStartDelay = m_settings.readNumEntry("/StartDelay", 3);
55 m_settings.endGroup();
56
57 // Load display options...
58 m_settings.beginGroup("/Display");
59 sDisplayFont = m_settings.readEntry("/DisplayFont", QString::null);
60 bDisplayEffect = m_settings.readBoolEntry("/DisplayEffect", true);
61 bAutoRefresh = m_settings.readBoolEntry("/AutoRefresh", true);
62 iAutoRefreshTime = m_settings.readNumEntry("/AutoRefreshTime", 1000);
63 iMaxVolume = m_settings.readNumEntry("/MaxVolume", 100);
64 sMessagesFont = m_settings.readEntry("/MessagesFont", QString::null);
65 bMessagesLimit = m_settings.readBoolEntry("/MessagesLimit", true);
66 iMessagesLimitLines = m_settings.readNumEntry("/MessagesLimitLines", 1000);
67 bConfirmRemove = m_settings.readBoolEntry("/ConfirmRemove", true);
68 bKeepOnTop = m_settings.readBoolEntry("/KeepOnTop", true);
69 bStdoutCapture = m_settings.readBoolEntry("/StdoutCapture", true);
70 bCompletePath = m_settings.readBoolEntry("/CompletePath", true);
71 iMaxRecentFiles = m_settings.readNumEntry("/MaxRecentFiles", 5);
72 bInstrumentNames = m_settings.readBoolEntry("/InstrumentNames", false);
73 m_settings.endGroup();
74
75 // And go into view options group.
76 m_settings.beginGroup("/View");
77 bMenubar = m_settings.readBoolEntry("/Menubar", true);
78 bToolbar = m_settings.readBoolEntry("/Toolbar", true);
79 bStatusbar = m_settings.readBoolEntry("/Statusbar", true);
80 bAutoArrange = m_settings.readBoolEntry("/AutoArrange", true);
81 m_settings.endGroup();
82
83 m_settings.endGroup(); // Options group.
84
85 // Recent file list.
86 m_settings.beginGroup("/RecentFiles");
87 recentFiles.clear();
88 for (int i = 0; i < iMaxRecentFiles; i++) {
89 QString sFilename = m_settings.readEntry("/File" + QString::number(i + 1), QString::null);
90 if (!sFilename.isEmpty())
91 recentFiles.append(sFilename);
92 }
93 m_settings.endGroup();
94
95 // Last but not least, get the default directories.
96 m_settings.beginGroup("/Default");
97 sSessionDir = m_settings.readEntry("/SessionDir", QString::null);
98 sInstrumentDir = m_settings.readEntry("/InstrumentDir", QString::null);
99 sEngineName = m_settings.readEntry("/EngineName", QString::null);
100 sAudioDriver = m_settings.readEntry("/AudioDriver", QString::null);
101 sMidiDriver = m_settings.readEntry("/MidiDriver", QString::null);
102 iMidiMap = m_settings.readNumEntry("/MidiMap", 0);
103 iMidiBank = m_settings.readNumEntry("/MidiBank", 0);
104 iMidiProg = m_settings.readNumEntry("/MidiProg", 0);
105 iVolume = m_settings.readNumEntry("/Volume", 100);
106 iLoadMode = m_settings.readNumEntry("/Loadmode", 0);
107 m_settings.endGroup();
108 }
109
110
111 // Default Destructor.
112 qsamplerOptions::~qsamplerOptions (void)
113 {
114 // Make program version available in the future.
115 m_settings.beginGroup("/Program");
116 m_settings.writeEntry("/Version", QSAMPLER_VERSION);
117 m_settings.endGroup();
118
119 // And go into general options group.
120 m_settings.beginGroup("/Options");
121
122 // Save server options.
123 m_settings.beginGroup("/Server");
124 m_settings.writeEntry("/ServerHost", sServerHost);
125 m_settings.writeEntry("/ServerPort", iServerPort);
126 m_settings.writeEntry("/ServerTimeout", iServerTimeout);
127 m_settings.writeEntry("/ServerStart", bServerStart);
128 m_settings.writeEntry("/ServerCmdLine", sServerCmdLine);
129 m_settings.writeEntry("/StartDelay", iStartDelay);
130 m_settings.endGroup();
131
132 // Save display options.
133 m_settings.beginGroup("/Display");
134 m_settings.writeEntry("/DisplayFont", sDisplayFont);
135 m_settings.writeEntry("/DisplayEffect", bDisplayEffect);
136 m_settings.writeEntry("/AutoRefresh", bAutoRefresh);
137 m_settings.writeEntry("/AutoRefreshTime", iAutoRefreshTime);
138 m_settings.writeEntry("/MaxVolume", iMaxVolume);
139 m_settings.writeEntry("/MessagesFont", sMessagesFont);
140 m_settings.writeEntry("/MessagesLimit", bMessagesLimit);
141 m_settings.writeEntry("/MessagesLimitLines", iMessagesLimitLines);
142 m_settings.writeEntry("/ConfirmRemove", bConfirmRemove);
143 m_settings.writeEntry("/KeepOnTop", bKeepOnTop);
144 m_settings.writeEntry("/StdoutCapture", bStdoutCapture);
145 m_settings.writeEntry("/CompletePath", bCompletePath);
146 m_settings.writeEntry("/MaxRecentFiles", iMaxRecentFiles);
147 m_settings.writeEntry("/InstrumentNames", bInstrumentNames);
148 m_settings.endGroup();
149
150 // View options group.
151 m_settings.beginGroup("/View");
152 m_settings.writeEntry("/Menubar", bMenubar);
153 m_settings.writeEntry("/Toolbar", bToolbar);
154 m_settings.writeEntry("/Statusbar", bStatusbar);
155 m_settings.writeEntry("/AutoArrange", bAutoArrange);
156 m_settings.endGroup();
157
158 m_settings.endGroup(); // Options group.
159
160 // Recent file list.
161 m_settings.beginGroup("/RecentFiles");
162 for (int i = 0; i < (int) recentFiles.count(); i++)
163 m_settings.writeEntry("/File" + QString::number(i + 1), recentFiles[i]);
164 m_settings.endGroup();
165
166 // Default directories.
167 m_settings.beginGroup("/Default");
168 m_settings.writeEntry("/SessionDir", sSessionDir);
169 m_settings.writeEntry("/InstrumentDir", sInstrumentDir);
170 m_settings.writeEntry("/EngineName", sEngineName);
171 m_settings.writeEntry("/AudioDriver", sAudioDriver);
172 m_settings.writeEntry("/MidiDriver", sMidiDriver);
173 m_settings.writeEntry("/MidiMap", iMidiMap);
174 m_settings.writeEntry("/MidiBank", iMidiBank);
175 m_settings.writeEntry("/MidiProg", iMidiProg);
176 m_settings.writeEntry("/Volume", iVolume);
177 m_settings.writeEntry("/Loadmode", iLoadMode);
178 m_settings.endGroup();
179
180 m_settings.endGroup();
181 }
182
183 //-------------------------------------------------------------------------
184 // Settings accessor.
185 //
186
187 QSettings& qsamplerOptions::settings (void)
188 {
189 return m_settings;
190 }
191
192
193 //-------------------------------------------------------------------------
194 // Command-line argument stuff.
195 //
196
197 // Help about command line options.
198 void qsamplerOptions::print_usage ( const char *arg0 )
199 {
200 const QString sEot = "\n\t";
201 const QString sEol = "\n\n";
202
203 fprintf(stderr, QObject::tr("Usage") + ": %s [" + QObject::tr("options") + "] [" +
204 QObject::tr("session-file") + "]" + sEol, arg0);
205 fprintf(stderr, QSAMPLER_TITLE " - " + QObject::tr(QSAMPLER_SUBTITLE) + sEol);
206 fprintf(stderr, QObject::tr("Options") + ":" + sEol);
207 fprintf(stderr, " -s, --start" + sEot +
208 QObject::tr("Start linuxsampler server locally") + sEol);
209 fprintf(stderr, " -h, --hostname" + sEot +
210 QObject::tr("Specify linuxsampler server hostname") + sEol);
211 fprintf(stderr, " -p, --port" + sEot +
212 QObject::tr("Specify linuxsampler server port number") + sEol);
213 fprintf(stderr, " -?, --help" + sEot +
214 QObject::tr("Show help about command line options") + sEol);
215 fprintf(stderr, " -v, --version" + sEot +
216 QObject::tr("Show version information") + sEol);
217 }
218
219
220 // Parse command line arguments into m_settings.
221 bool qsamplerOptions::parse_args ( int argc, char **argv )
222 {
223 const QString sEol = "\n\n";
224 int iCmdArgs = 0;
225
226 for (int i = 1; i < argc; i++) {
227
228 if (iCmdArgs > 0) {
229 sSessionFile += " ";
230 sSessionFile += argv[i];
231 iCmdArgs++;
232 continue;
233 }
234
235 QString sArg = argv[i];
236 QString sVal = QString::null;
237 int iEqual = sArg.find("=");
238 if (iEqual >= 0) {
239 sVal = sArg.right(sArg.length() - iEqual - 1);
240 sArg = sArg.left(iEqual);
241 }
242 else if (i < argc)
243 sVal = argv[i + 1];
244
245 if (sArg == "-s" || sArg == "--start") {
246 bServerStart = true;
247 }
248 else if (sArg == "-h" || sArg == "--hostname") {
249 if (sVal.isNull()) {
250 fprintf(stderr, QObject::tr("Option -h requires an argument (hostname).") + sEol);
251 return false;
252 }
253 sServerHost = sVal;
254 if (iEqual < 0)
255 i++;
256 }
257 else if (sArg == "-p" || sArg == "--port") {
258 if (sVal.isNull()) {
259 fprintf(stderr, QObject::tr("Option -p requires an argument (port).") + sEol);
260 return false;
261 }
262 iServerPort = sVal.toInt();
263 if (iEqual < 0)
264 i++;
265 }
266 else if (sArg == "-?" || sArg == "--help") {
267 print_usage(argv[0]);
268 return false;
269 }
270 else if (sArg == "-v" || sArg == "--version") {
271 fprintf(stderr, "Qt: %s\n", qVersion());
272 #ifdef CONFIG_LIBGIG
273 fprintf(stderr, "%s: %s\n", gig::libraryName().c_str(), gig::libraryVersion().c_str());
274 #endif
275 fprintf(stderr, "%s: %s\n", ::lscp_client_package(), ::lscp_client_version());
276 fprintf(stderr, "qsampler: %s\n", QSAMPLER_VERSION);
277 return false;
278 }
279 else {
280 // If we don't have one by now,
281 // this will be the startup sesion file...
282 sSessionFile += sArg;
283 iCmdArgs++;
284 }
285 }
286
287 // Alright with argument parsing.
288 return true;
289 }
290
291
292 //---------------------------------------------------------------------------
293 // Widget geometry persistence helper methods.
294
295 void qsamplerOptions::loadWidgetGeometry ( QWidget *pWidget )
296 {
297 // Try to restore old form window positioning.
298 if (pWidget) {
299 QPoint fpos;
300 QSize fsize;
301 bool bVisible;
302 m_settings.beginGroup("/Geometry/" + QString(pWidget->name()));
303 fpos.setX(m_settings.readNumEntry("/x", -1));
304 fpos.setY(m_settings.readNumEntry("/y", -1));
305 fsize.setWidth(m_settings.readNumEntry("/width", -1));
306 fsize.setHeight(m_settings.readNumEntry("/height", -1));
307 bVisible = m_settings.readBoolEntry("/visible", false);
308 m_settings.endGroup();
309 if (fpos.x() > 0 && fpos.y() > 0)
310 pWidget->move(fpos);
311 if (fsize.width() > 0 && fsize.height() > 0)
312 pWidget->resize(fsize);
313 else
314 pWidget->adjustSize();
315 if (bVisible)
316 pWidget->show();
317 else
318 pWidget->hide();
319 }
320 }
321
322
323 void qsamplerOptions::saveWidgetGeometry ( QWidget *pWidget )
324 {
325 // Try to save form window position...
326 // (due to X11 window managers ideossincrasies, we better
327 // only save the form geometry while its up and visible)
328 if (pWidget) {
329 m_settings.beginGroup("/Geometry/" + QString(pWidget->name()));
330 bool bVisible = pWidget->isVisible();
331 if (bVisible) {
332 QPoint fpos = pWidget->pos();
333 QSize fsize = pWidget->size();
334 m_settings.writeEntry("/x", fpos.x());
335 m_settings.writeEntry("/y", fpos.y());
336 m_settings.writeEntry("/width", fsize.width());
337 m_settings.writeEntry("/height", fsize.height());
338 }
339 m_settings.writeEntry("/visible", bVisible);
340 m_settings.endGroup();
341 }
342 }
343
344
345 //---------------------------------------------------------------------------
346 // Combo box history persistence helper implementation.
347
348 void qsamplerOptions::add2ComboBoxHistory ( QComboBox *pComboBox, const QString& sNewText, int iLimit, int iIndex )
349 {
350 int iCount = pComboBox->count();
351 for (int i = 0; i < iCount; i++) {
352 QString sText = pComboBox->text(i);
353 if (sText == sNewText) {
354 pComboBox->removeItem(i);
355 iCount--;
356 break;
357 }
358 }
359 while (iCount >= iLimit)
360 pComboBox->removeItem(--iCount);
361 pComboBox->insertItem(sNewText, iIndex);
362 }
363
364
365 void qsamplerOptions::loadComboBoxHistory ( QComboBox *pComboBox, int iLimit )
366 {
367 pComboBox->setUpdatesEnabled(false);
368 pComboBox->setDuplicatesEnabled(false);
369
370 m_settings.beginGroup("/History/" + QString(pComboBox->name()));
371 for (int i = 0; i < iLimit; i++) {
372 QString sText = m_settings.readEntry("/Item" + QString::number(i + 1), QString::null);
373 if (sText.isEmpty())
374 break;
375 add2ComboBoxHistory(pComboBox, sText, iLimit);
376 }
377 m_settings.endGroup();
378
379 pComboBox->setUpdatesEnabled(true);
380 }
381
382
383 void qsamplerOptions::saveComboBoxHistory ( QComboBox *pComboBox, int iLimit )
384 {
385 add2ComboBoxHistory(pComboBox, pComboBox->currentText(), iLimit, 0);
386
387 m_settings.beginGroup("/History/" + QString(pComboBox->name()));
388 for (int i = 0; i < iLimit && i < pComboBox->count(); i++) {
389 QString sText = pComboBox->text(i);
390 if (sText.isEmpty())
391 break;
392 m_settings.writeEntry("/Item" + QString::number(i + 1), sText);
393 }
394 m_settings.endGroup();
395 }
396
397
398 // end of qsamplerOptions.cpp

  ViewVC Help
Powered by ViewVC