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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1509 - (hide annotations) (download)
Thu Nov 22 11:10:44 2007 UTC (16 years, 4 months ago) by capela
File size: 13063 byte(s)
* Audio routing table is initially hidden in the dialog, when
  creating a new sampler channel.

* README requirements and configuration notes update.

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     bInstrumentNames = m_settings.value("/InstrumentNames", false).toBool();
73     m_settings.endGroup();
74 capela 106
75 capela 1509 // And go into view options group.
76     m_settings.beginGroup("/View");
77     bMenubar = m_settings.value("/Menubar", true).toBool();
78     bToolbar = m_settings.value("/Toolbar", true).toBool();
79     bStatusbar = m_settings.value("/Statusbar", true).toBool();
80     bAutoArrange = m_settings.value("/AutoArrange", true).toBool();
81     m_settings.endGroup();
82 capela 106
83 capela 1509 m_settings.endGroup(); // Options group.
84 capela 106
85 capela 1499 // Recent file list.
86     recentFiles.clear();
87     m_settings.beginGroup("/RecentFiles");
88     for (int iFile = 0; iFile < iMaxRecentFiles; iFile++) {
89     QString sFilename = m_settings.value(
90     "/File" + QString::number(iFile + 1)).toString();
91     if (!sFilename.isEmpty())
92     recentFiles.append(sFilename);
93     }
94     m_settings.endGroup();
95 capela 106
96 capela 1509 // Last but not least, get the default directories.
97     m_settings.beginGroup("/Default");
98     sSessionDir = m_settings.value("/SessionDir").toString();
99     sInstrumentDir = m_settings.value("/InstrumentDir").toString();
100     sEngineName = m_settings.value("/EngineName").toString();
101     sAudioDriver = m_settings.value("/AudioDriver").toString();
102     sMidiDriver = m_settings.value("/MidiDriver").toString();
103     iMidiMap = m_settings.value("/MidiMap", 0).toInt();
104     iMidiBank = m_settings.value("/MidiBank", 0).toInt();
105     iMidiProg = m_settings.value("/MidiProg", 0).toInt();
106     iVolume = m_settings.value("/Volume", 100).toInt();
107     iLoadMode = m_settings.value("/Loadmode", 0).toInt();
108     m_settings.endGroup();
109 capela 106 }
110    
111    
112     // Default Destructor.
113     qsamplerOptions::~qsamplerOptions (void)
114     {
115 capela 1509 // Make program version available in the future.
116     m_settings.beginGroup("/Program");
117     m_settings.setValue("/Version", QSAMPLER_VERSION);
118     m_settings.endGroup();
119 capela 106
120 capela 1509 // And go into general options group.
121     m_settings.beginGroup("/Options");
122 capela 106
123 capela 1509 // Save server options.
124     m_settings.beginGroup("/Server");
125     m_settings.setValue("/ServerHost", sServerHost);
126     m_settings.setValue("/ServerPort", iServerPort);
127     m_settings.setValue("/ServerTimeout", iServerTimeout);
128     m_settings.setValue("/ServerStart", bServerStart);
129     m_settings.setValue("/ServerCmdLine", sServerCmdLine);
130     m_settings.setValue("/StartDelay", iStartDelay);
131     m_settings.endGroup();
132 capela 106
133 capela 1509 // Save display options.
134     m_settings.beginGroup("/Display");
135     m_settings.setValue("/DisplayFont", sDisplayFont);
136     m_settings.setValue("/DisplayEffect", bDisplayEffect);
137     m_settings.setValue("/AutoRefresh", bAutoRefresh);
138     m_settings.setValue("/AutoRefreshTime", iAutoRefreshTime);
139     m_settings.setValue("/MaxVolume", iMaxVolume);
140     m_settings.setValue("/MessagesFont", sMessagesFont);
141     m_settings.setValue("/MessagesLimit", bMessagesLimit);
142     m_settings.setValue("/MessagesLimitLines", iMessagesLimitLines);
143     m_settings.setValue("/ConfirmRemove", bConfirmRemove);
144     m_settings.setValue("/KeepOnTop", bKeepOnTop);
145     m_settings.setValue("/StdoutCapture", bStdoutCapture);
146     m_settings.setValue("/CompletePath", bCompletePath);
147     m_settings.setValue("/MaxRecentFiles", iMaxRecentFiles);
148     m_settings.setValue("/InstrumentNames", bInstrumentNames);
149     m_settings.endGroup();
150 capela 106
151 capela 1509 // View options group.
152     m_settings.beginGroup("/View");
153     m_settings.setValue("/Menubar", bMenubar);
154     m_settings.setValue("/Toolbar", bToolbar);
155     m_settings.setValue("/Statusbar", bStatusbar);
156     m_settings.setValue("/AutoArrange", bAutoArrange);
157     m_settings.endGroup();
158 capela 106
159 capela 1509 m_settings.endGroup(); // Options group.
160 capela 106
161 capela 1509 // Recent file list.
162 capela 1499 int iFile = 0;
163     m_settings.beginGroup("/RecentFiles");
164     QStringListIterator iter(recentFiles);
165     while (iter.hasNext())
166     m_settings.setValue("/File" + QString::number(++iFile), iter.next());
167     m_settings.endGroup();
168 capela 106
169 capela 1509 // Default directories.
170     m_settings.beginGroup("/Default");
171     m_settings.setValue("/SessionDir", sSessionDir);
172     m_settings.setValue("/InstrumentDir", sInstrumentDir);
173     m_settings.setValue("/EngineName", sEngineName);
174     m_settings.setValue("/AudioDriver", sAudioDriver);
175     m_settings.setValue("/MidiDriver", sMidiDriver);
176     m_settings.setValue("/MidiMap", iMidiMap);
177     m_settings.setValue("/MidiBank", iMidiBank);
178     m_settings.setValue("/MidiProg", iMidiProg);
179     m_settings.setValue("/Volume", iVolume);
180     m_settings.setValue("/Loadmode", iLoadMode);
181     m_settings.endGroup();
182 capela 106 }
183    
184     //-------------------------------------------------------------------------
185     // Settings accessor.
186     //
187    
188     QSettings& qsamplerOptions::settings (void)
189     {
190 capela 1509 return m_settings;
191 capela 106 }
192    
193    
194     //-------------------------------------------------------------------------
195     // Command-line argument stuff.
196     //
197    
198     // Help about command line options.
199     void qsamplerOptions::print_usage ( const char *arg0 )
200     {
201 capela 1499 QTextStream out(stderr);
202     out << QObject::tr("Usage: %1 [options] [session-file]\n\n"
203     QSAMPLER_TITLE " - " QSAMPLER_SUBTITLE "\n\n"
204     "Options:\n\n"
205     " -s, --start\n\tStart linuxsampler server locally\n\n"
206     " -h, --hostname\n\tSpecify linuxsampler server hostname\n\n"
207     " -p, --port\n\tSpecify linuxsampler server port number\n\n"
208     " -?, --help\n\tShow help about command line options\n\n"
209     " -v, --version\n\tShow version information\n\n")
210     .arg(arg0);
211 capela 106 }
212    
213    
214     // Parse command line arguments into m_settings.
215     bool qsamplerOptions::parse_args ( int argc, char **argv )
216     {
217 capela 1499 QTextStream out(stderr);
218 capela 1509 const QString sEol = "\n\n";
219     int iCmdArgs = 0;
220 capela 106
221 capela 1509 for (int i = 1; i < argc; i++) {
222 capela 106
223 capela 1509 if (iCmdArgs > 0) {
224     sSessionFile += " ";
225     sSessionFile += argv[i];
226     iCmdArgs++;
227     continue;
228     }
229 capela 106
230 capela 1509 QString sArg = argv[i];
231     QString sVal = QString::null;
232     int iEqual = sArg.indexOf("=");
233     if (iEqual >= 0) {
234     sVal = sArg.right(sArg.length() - iEqual - 1);
235     sArg = sArg.left(iEqual);
236     }
237     else if (i < argc)
238     sVal = argv[i + 1];
239 capela 106
240 capela 1509 if (sArg == "-s" || sArg == "--start") {
241     bServerStart = true;
242     }
243     else if (sArg == "-h" || sArg == "--hostname") {
244     if (sVal.isNull()) {
245     out << QObject::tr("Option -h requires an argument (hostname).") + sEol;
246     return false;
247     }
248     sServerHost = sVal;
249     if (iEqual < 0)
250     i++;
251     }
252     else if (sArg == "-p" || sArg == "--port") {
253     if (sVal.isNull()) {
254     out << QObject::tr("Option -p requires an argument (port).") + sEol;
255     return false;
256     }
257     iServerPort = sVal.toInt();
258     if (iEqual < 0)
259     i++;
260     }
261     else if (sArg == "-?" || sArg == "--help") {
262     print_usage(argv[0]);
263     return false;
264     }
265     else if (sArg == "-v" || sArg == "--version") {
266 capela 1499 out << QObject::tr("Qt: %1\n").arg(qVersion());
267 capela 605 #ifdef CONFIG_LIBGIG
268 capela 1499 out << QString("%1: %2\n")
269     .arg(gig::libraryName().c_str())
270     .arg(gig::libraryVersion().c_str());
271     #endif
272     out << QString("%1: %2\n")
273     .arg(::lscp_client_package())
274     .arg(::lscp_client_version());
275     out << QObject::tr(QSAMPLER_TITLE ": %1\n").arg(QSAMPLER_VERSION);
276 capela 1509 return false;
277     }
278     else {
279     // If we don't have one by now,
280     // this will be the startup sesion file...
281     sSessionFile += sArg;
282     iCmdArgs++;
283     }
284     }
285 capela 106
286 capela 1509 // Alright with argument parsing.
287     return true;
288 capela 106 }
289    
290    
291     //---------------------------------------------------------------------------
292     // Widget geometry persistence helper methods.
293    
294     void qsamplerOptions::loadWidgetGeometry ( QWidget *pWidget )
295     {
296 capela 1499 // Try to restore old form window positioning.
297     if (pWidget) {
298     QPoint fpos;
299     QSize fsize;
300     bool bVisible;
301     m_settings.beginGroup("/Geometry/" + pWidget->objectName());
302     fpos.setX(m_settings.value("/x", -1).toInt());
303     fpos.setY(m_settings.value("/y", -1).toInt());
304     fsize.setWidth(m_settings.value("/width", -1).toInt());
305     fsize.setHeight(m_settings.value("/height", -1).toInt());
306     bVisible = m_settings.value("/visible", false).toBool();
307     m_settings.endGroup();
308     if (fpos.x() > 0 && fpos.y() > 0)
309     pWidget->move(fpos);
310     if (fsize.width() > 0 && fsize.height() > 0)
311     pWidget->resize(fsize);
312     else
313     pWidget->adjustSize();
314     if (bVisible)
315     pWidget->show();
316     else
317     pWidget->hide();
318     }
319 capela 106 }
320    
321    
322     void qsamplerOptions::saveWidgetGeometry ( QWidget *pWidget )
323     {
324 capela 1499 // Try to save form window position...
325     // (due to X11 window managers ideossincrasies, we better
326     // only save the form geometry while its up and visible)
327     if (pWidget) {
328     m_settings.beginGroup("/Geometry/" + pWidget->objectName());
329     bool bVisible = pWidget->isVisible();
330     const QPoint& fpos = pWidget->pos();
331     const QSize& fsize = pWidget->size();
332     m_settings.setValue("/x", fpos.x());
333     m_settings.setValue("/y", fpos.y());
334     m_settings.setValue("/width", fsize.width());
335     m_settings.setValue("/height", fsize.height());
336     m_settings.setValue("/visible", bVisible);
337     m_settings.endGroup();
338     }
339 capela 106 }
340    
341    
342     //---------------------------------------------------------------------------
343     // Combo box history persistence helper implementation.
344    
345     void qsamplerOptions::loadComboBoxHistory ( QComboBox *pComboBox, int iLimit )
346     {
347 capela 1499 // Load combobox list from configuration settings file...
348     m_settings.beginGroup("/History/" + pComboBox->objectName());
349 capela 106
350 capela 1499 if (m_settings.childKeys().count() > 0) {
351     pComboBox->setUpdatesEnabled(false);
352     pComboBox->setDuplicatesEnabled(false);
353     pComboBox->clear();
354     for (int i = 0; i < iLimit; i++) {
355     const QString& sText = m_settings.value(
356     "/Item" + QString::number(i + 1)).toString();
357     if (sText.isEmpty())
358     break;
359     pComboBox->addItem(sText);
360     }
361     pComboBox->setUpdatesEnabled(true);
362     }
363 capela 106
364 capela 1499 m_settings.endGroup();
365 capela 106 }
366    
367    
368     void qsamplerOptions::saveComboBoxHistory ( QComboBox *pComboBox, int iLimit )
369     {
370 capela 1499 // Add current text as latest item...
371     const QString& sCurrentText = pComboBox->currentText();
372     int iCount = pComboBox->count();
373     for (int i = 0; i < iCount; i++) {
374     const QString& sText = pComboBox->itemText(i);
375     if (sText == sCurrentText) {
376     pComboBox->removeItem(i);
377     iCount--;
378     break;
379     }
380     }
381     while (iCount >= iLimit)
382     pComboBox->removeItem(--iCount);
383     pComboBox->insertItem(0, sCurrentText);
384     iCount++;
385 capela 106
386 capela 1499 // Save combobox list to configuration settings file...
387     m_settings.beginGroup("/History/" + pComboBox->objectName());
388     for (int i = 0; i < iCount; i++) {
389     const QString& sText = pComboBox->itemText(i);
390     if (sText.isEmpty())
391     break;
392     m_settings.setValue("/Item" + QString::number(i + 1), sText);
393     }
394     m_settings.endGroup();
395 capela 106 }
396    
397    
398     // end of qsamplerOptions.cpp

  ViewVC Help
Powered by ViewVC