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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 980 - (hide annotations) (download)
Sun Dec 17 22:29:29 2006 UTC (17 years, 4 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 capela 106 // qsamplerOptions.cpp
2     //
3     /****************************************************************************
4 capela 920 Copyright (C) 2004-2006, rncbc aka Rui Nuno Capela. All rights reserved.
5 capela 106
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 capela 920 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 capela 106
20     *****************************************************************************/
21    
22 capela 753 #include "qsamplerAbout.h"
23 capela 106 #include "qsamplerOptions.h"
24    
25     #include <qcombobox.h>
26    
27 capela 264 #include <lscp/client.h>
28 capela 106
29 capela 605 #ifdef CONFIG_LIBGIG
30     #include <gig.h>
31     #endif
32 capela 106
33 capela 605
34 capela 106 //-------------------------------------------------------------------------
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 capela 395 iServerTimeout = m_settings.readNumEntry("/ServerTimeout", 1000);
52 capela 106 bServerStart = m_settings.readBoolEntry("/ServerStart", true);
53     sServerCmdLine = m_settings.readEntry("/ServerCmdLine", "linuxsampler");
54 capela 395 iStartDelay = m_settings.readNumEntry("/StartDelay", 3);
55 capela 106 m_settings.endGroup();
56    
57     // Load display options...
58     m_settings.beginGroup("/Display");
59     sDisplayFont = m_settings.readEntry("/DisplayFont", QString::null);
60 capela 267 bDisplayEffect = m_settings.readBoolEntry("/DisplayEffect", true);
61 capela 106 bAutoRefresh = m_settings.readBoolEntry("/AutoRefresh", true);
62 capela 400 iAutoRefreshTime = m_settings.readNumEntry("/AutoRefreshTime", 1000);
63 capela 119 iMaxVolume = m_settings.readNumEntry("/MaxVolume", 100);
64 capela 106 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 capela 454 bKeepOnTop = m_settings.readBoolEntry("/KeepOnTop", true);
69 capela 106 bStdoutCapture = m_settings.readBoolEntry("/StdoutCapture", true);
70     bCompletePath = m_settings.readBoolEntry("/CompletePath", true);
71     iMaxRecentFiles = m_settings.readNumEntry("/MaxRecentFiles", 5);
72 capela 341 bInstrumentNames = m_settings.readBoolEntry("/InstrumentNames", false);
73 capela 106 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 capela 176 sEngineName = m_settings.readEntry("/EngineName", QString::null);
100     sAudioDriver = m_settings.readEntry("/AudioDriver", QString::null);
101     sMidiDriver = m_settings.readEntry("/MidiDriver", QString::null);
102 capela 980 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 capela 106 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 capela 267 m_settings.writeEntry("/DisplayEffect", bDisplayEffect);
136 capela 106 m_settings.writeEntry("/AutoRefresh", bAutoRefresh);
137     m_settings.writeEntry("/AutoRefreshTime", iAutoRefreshTime);
138 capela 119 m_settings.writeEntry("/MaxVolume", iMaxVolume);
139 capela 106 m_settings.writeEntry("/MessagesFont", sMessagesFont);
140     m_settings.writeEntry("/MessagesLimit", bMessagesLimit);
141     m_settings.writeEntry("/MessagesLimitLines", iMessagesLimitLines);
142     m_settings.writeEntry("/ConfirmRemove", bConfirmRemove);
143 capela 454 m_settings.writeEntry("/KeepOnTop", bKeepOnTop);
144 capela 106 m_settings.writeEntry("/StdoutCapture", bStdoutCapture);
145     m_settings.writeEntry("/CompletePath", bCompletePath);
146     m_settings.writeEntry("/MaxRecentFiles", iMaxRecentFiles);
147 capela 341 m_settings.writeEntry("/InstrumentNames", bInstrumentNames);
148 capela 106 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 capela 176 m_settings.writeEntry("/EngineName", sEngineName);
171     m_settings.writeEntry("/AudioDriver", sAudioDriver);
172     m_settings.writeEntry("/MidiDriver", sMidiDriver);
173 capela 980 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 capela 106 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 capela 605 #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 capela 106 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