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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1527 - (show annotations) (download)
Mon Nov 26 16:00:21 2007 UTC (12 years, 6 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 // qsamplerOptions.cpp
2 //
3 /****************************************************************************
4 Copyright (C) 2004-2007, rncbc aka Rui Nuno Capela. All rights reserved.
5 Copyright (C) 2007, Christian Schoenebeck
6
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 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
21 *****************************************************************************/
22
23 #include "qsamplerAbout.h"
24 #include "qsamplerOptions.h"
25
26 #include <QTextStream>
27 #include <QComboBox>
28
29 #include <lscp/client.h>
30
31 #ifdef CONFIG_LIBGIG
32 #include <gig.h>
33 #endif
34
35
36 //-------------------------------------------------------------------------
37 // qsamplerOptions - Prototype settings structure.
38 //
39
40 // Constructor.
41 qsamplerOptions::qsamplerOptions (void)
42 : m_settings(QSAMPLER_DOMAIN, QSAMPLER_TITLE)
43 {
44 // Begin into general options group.
45 m_settings.beginGroup("/Options");
46
47 // 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
57 // 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 // 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 bInstrumentNames = m_settings.value("/InstrumentNames", false).toBool();
78 #endif
79 m_settings.endGroup();
80
81 // 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
89 m_settings.endGroup(); // Options group.
90
91 // 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
102 // 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 }
116
117
118 // Default Destructor.
119 qsamplerOptions::~qsamplerOptions (void)
120 {
121 // Make program version available in the future.
122 m_settings.beginGroup("/Program");
123 m_settings.setValue("/Version", QSAMPLER_VERSION);
124 m_settings.endGroup();
125
126 // And go into general options group.
127 m_settings.beginGroup("/Options");
128
129 // 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
139 // 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
157 // 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
165 m_settings.endGroup(); // Options group.
166
167 // Recent file list.
168 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
175 // 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 }
189
190 //-------------------------------------------------------------------------
191 // Settings accessor.
192 //
193
194 QSettings& qsamplerOptions::settings (void)
195 {
196 return m_settings;
197 }
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 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 }
218
219
220 // Parse command line arguments into m_settings.
221 bool qsamplerOptions::parse_args ( int argc, char **argv )
222 {
223 QTextStream out(stderr);
224 const QString sEol = "\n\n";
225 int iCmdArgs = 0;
226
227 for (int i = 1; i < argc; i++) {
228
229 if (iCmdArgs > 0) {
230 sSessionFile += " ";
231 sSessionFile += argv[i];
232 iCmdArgs++;
233 continue;
234 }
235
236 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
246 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 out << QObject::tr("Qt: %1\n").arg(qVersion());
273 #ifdef CONFIG_LIBGIG
274 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 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
292 // Alright with argument parsing.
293 return true;
294 }
295
296
297 //---------------------------------------------------------------------------
298 // Widget geometry persistence helper methods.
299
300 void qsamplerOptions::loadWidgetGeometry ( QWidget *pWidget )
301 {
302 // 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 }
326
327
328 void qsamplerOptions::saveWidgetGeometry ( QWidget *pWidget )
329 {
330 // 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 }
346
347
348 //---------------------------------------------------------------------------
349 // Combo box history persistence helper implementation.
350
351 void qsamplerOptions::loadComboBoxHistory ( QComboBox *pComboBox, int iLimit )
352 {
353 // Load combobox list from configuration settings file...
354 m_settings.beginGroup("/History/" + pComboBox->objectName());
355
356 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
370 m_settings.endGroup();
371 }
372
373
374 void qsamplerOptions::saveComboBoxHistory ( QComboBox *pComboBox, int iLimit )
375 {
376 // 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
392 // 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 }
402
403
404 // end of qsamplerOptions.cpp

  ViewVC Help
Powered by ViewVC