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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1527 - (hide annotations) (download)
Mon Nov 26 16:00:21 2007 UTC (16 years, 4 months ago) by schoenebeck
File size: 13308 byte(s)
* Added recent new support of libgig for retrieving instrument names in a
  very fast way. If libgig provides this feature, then the respective
  name retrieval setting in qsampler is enabled by default.

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

  ViewVC Help
Powered by ViewVC