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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1464 - (show annotations) (download)
Thu Nov 1 17:14:21 2007 UTC (16 years, 5 months ago) by capela
File size: 14696 byte(s)
- Qt4 migration: missing copyright headers update.

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 <qcombobox.h>
27
28 #include <lscp/client.h>
29
30 #ifdef CONFIG_LIBGIG
31 #include <gig.h>
32 #endif
33
34
35 //-------------------------------------------------------------------------
36 // qsamplerOptions - Prototype settings structure.
37 //
38
39 // Constructor.
40 qsamplerOptions::qsamplerOptions (void)
41 {
42 // Begin master key group.
43 m_settings.beginGroup("/qsampler");
44
45 // And go into general options group.
46 m_settings.beginGroup("/Options");
47
48 // Load server options...
49 m_settings.beginGroup("/Server");
50 sServerHost = m_settings.readEntry("/ServerHost", "localhost");
51 iServerPort = m_settings.readNumEntry("/ServerPort", 8888);
52 iServerTimeout = m_settings.readNumEntry("/ServerTimeout", 1000);
53 bServerStart = m_settings.readBoolEntry("/ServerStart", true);
54 sServerCmdLine = m_settings.readEntry("/ServerCmdLine", "linuxsampler");
55 iStartDelay = m_settings.readNumEntry("/StartDelay", 3);
56 m_settings.endGroup();
57
58 // Load display options...
59 m_settings.beginGroup("/Display");
60 sDisplayFont = m_settings.readEntry("/DisplayFont", QString::null);
61 bDisplayEffect = m_settings.readBoolEntry("/DisplayEffect", true);
62 bAutoRefresh = m_settings.readBoolEntry("/AutoRefresh", true);
63 iAutoRefreshTime = m_settings.readNumEntry("/AutoRefreshTime", 1000);
64 iMaxVolume = m_settings.readNumEntry("/MaxVolume", 100);
65 sMessagesFont = m_settings.readEntry("/MessagesFont", QString::null);
66 bMessagesLimit = m_settings.readBoolEntry("/MessagesLimit", true);
67 iMessagesLimitLines = m_settings.readNumEntry("/MessagesLimitLines", 1000);
68 bConfirmRemove = m_settings.readBoolEntry("/ConfirmRemove", true);
69 bKeepOnTop = m_settings.readBoolEntry("/KeepOnTop", true);
70 bStdoutCapture = m_settings.readBoolEntry("/StdoutCapture", true);
71 bCompletePath = m_settings.readBoolEntry("/CompletePath", true);
72 iMaxRecentFiles = m_settings.readNumEntry("/MaxRecentFiles", 5);
73 bInstrumentNames = m_settings.readBoolEntry("/InstrumentNames", false);
74 m_settings.endGroup();
75
76 // And go into view options group.
77 m_settings.beginGroup("/View");
78 bMenubar = m_settings.readBoolEntry("/Menubar", true);
79 bToolbar = m_settings.readBoolEntry("/Toolbar", true);
80 bStatusbar = m_settings.readBoolEntry("/Statusbar", true);
81 bAutoArrange = m_settings.readBoolEntry("/AutoArrange", true);
82 m_settings.endGroup();
83
84 m_settings.endGroup(); // Options group.
85
86 // Recent file list.
87 m_settings.beginGroup("/RecentFiles");
88 recentFiles.clear();
89 for (int i = 0; i < iMaxRecentFiles; i++) {
90 QString sFilename = m_settings.readEntry("/File" + QString::number(i + 1), QString::null);
91 if (!sFilename.isEmpty())
92 recentFiles.append(sFilename);
93 }
94 m_settings.endGroup();
95
96 // Last but not least, get the default directories.
97 m_settings.beginGroup("/Default");
98 sSessionDir = m_settings.readEntry("/SessionDir", QString::null);
99 sInstrumentDir = m_settings.readEntry("/InstrumentDir", QString::null);
100 sEngineName = m_settings.readEntry("/EngineName", QString::null);
101 sAudioDriver = m_settings.readEntry("/AudioDriver", QString::null);
102 sMidiDriver = m_settings.readEntry("/MidiDriver", QString::null);
103 iMidiMap = m_settings.readNumEntry("/MidiMap", 0);
104 iMidiBank = m_settings.readNumEntry("/MidiBank", 0);
105 iMidiProg = m_settings.readNumEntry("/MidiProg", 0);
106 iVolume = m_settings.readNumEntry("/Volume", 100);
107 iLoadMode = m_settings.readNumEntry("/Loadmode", 0);
108 m_settings.endGroup();
109 }
110
111
112 // Default Destructor.
113 qsamplerOptions::~qsamplerOptions (void)
114 {
115 // Make program version available in the future.
116 m_settings.beginGroup("/Program");
117 m_settings.writeEntry("/Version", QSAMPLER_VERSION);
118 m_settings.endGroup();
119
120 // And go into general options group.
121 m_settings.beginGroup("/Options");
122
123 // Save server options.
124 m_settings.beginGroup("/Server");
125 m_settings.writeEntry("/ServerHost", sServerHost);
126 m_settings.writeEntry("/ServerPort", iServerPort);
127 m_settings.writeEntry("/ServerTimeout", iServerTimeout);
128 m_settings.writeEntry("/ServerStart", bServerStart);
129 m_settings.writeEntry("/ServerCmdLine", sServerCmdLine);
130 m_settings.writeEntry("/StartDelay", iStartDelay);
131 m_settings.endGroup();
132
133 // Save display options.
134 m_settings.beginGroup("/Display");
135 m_settings.writeEntry("/DisplayFont", sDisplayFont);
136 m_settings.writeEntry("/DisplayEffect", bDisplayEffect);
137 m_settings.writeEntry("/AutoRefresh", bAutoRefresh);
138 m_settings.writeEntry("/AutoRefreshTime", iAutoRefreshTime);
139 m_settings.writeEntry("/MaxVolume", iMaxVolume);
140 m_settings.writeEntry("/MessagesFont", sMessagesFont);
141 m_settings.writeEntry("/MessagesLimit", bMessagesLimit);
142 m_settings.writeEntry("/MessagesLimitLines", iMessagesLimitLines);
143 m_settings.writeEntry("/ConfirmRemove", bConfirmRemove);
144 m_settings.writeEntry("/KeepOnTop", bKeepOnTop);
145 m_settings.writeEntry("/StdoutCapture", bStdoutCapture);
146 m_settings.writeEntry("/CompletePath", bCompletePath);
147 m_settings.writeEntry("/MaxRecentFiles", iMaxRecentFiles);
148 m_settings.writeEntry("/InstrumentNames", bInstrumentNames);
149 m_settings.endGroup();
150
151 // View options group.
152 m_settings.beginGroup("/View");
153 m_settings.writeEntry("/Menubar", bMenubar);
154 m_settings.writeEntry("/Toolbar", bToolbar);
155 m_settings.writeEntry("/Statusbar", bStatusbar);
156 m_settings.writeEntry("/AutoArrange", bAutoArrange);
157 m_settings.endGroup();
158
159 m_settings.endGroup(); // Options group.
160
161 // Recent file list.
162 m_settings.beginGroup("/RecentFiles");
163 for (int i = 0; i < (int) recentFiles.count(); i++)
164 m_settings.writeEntry("/File" + QString::number(i + 1), recentFiles[i]);
165 m_settings.endGroup();
166
167 // Default directories.
168 m_settings.beginGroup("/Default");
169 m_settings.writeEntry("/SessionDir", sSessionDir);
170 m_settings.writeEntry("/InstrumentDir", sInstrumentDir);
171 m_settings.writeEntry("/EngineName", sEngineName);
172 m_settings.writeEntry("/AudioDriver", sAudioDriver);
173 m_settings.writeEntry("/MidiDriver", sMidiDriver);
174 m_settings.writeEntry("/MidiMap", iMidiMap);
175 m_settings.writeEntry("/MidiBank", iMidiBank);
176 m_settings.writeEntry("/MidiProg", iMidiProg);
177 m_settings.writeEntry("/Volume", iVolume);
178 m_settings.writeEntry("/Loadmode", iLoadMode);
179 m_settings.endGroup();
180
181 m_settings.endGroup();
182 }
183
184 //-------------------------------------------------------------------------
185 // Settings accessor.
186 //
187
188 QSettings& qsamplerOptions::settings (void)
189 {
190 return m_settings;
191 }
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 const QString sEot = "\n\t";
202 const QString sEol = "\n\n";
203
204 fprintf(stderr, QObject::tr("Usage") + ": %s [" + QObject::tr("options") + "] [" +
205 QObject::tr("session-file") + "]" + sEol, arg0);
206 fprintf(stderr, QSAMPLER_TITLE " - " + QObject::tr(QSAMPLER_SUBTITLE) + sEol);
207 fprintf(stderr, QObject::tr("Options") + ":" + sEol);
208 fprintf(stderr, " -s, --start" + sEot +
209 QObject::tr("Start linuxsampler server locally") + sEol);
210 fprintf(stderr, " -h, --hostname" + sEot +
211 QObject::tr("Specify linuxsampler server hostname") + sEol);
212 fprintf(stderr, " -p, --port" + sEot +
213 QObject::tr("Specify linuxsampler server port number") + sEol);
214 fprintf(stderr, " -?, --help" + sEot +
215 QObject::tr("Show help about command line options") + sEol);
216 fprintf(stderr, " -v, --version" + sEot +
217 QObject::tr("Show version information") + sEol);
218 }
219
220
221 // Parse command line arguments into m_settings.
222 bool qsamplerOptions::parse_args ( int argc, char **argv )
223 {
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.find("=");
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 fprintf(stderr, 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 fprintf(stderr, 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 fprintf(stderr, "Qt: %s\n", qVersion());
273 #ifdef CONFIG_LIBGIG
274 fprintf(stderr, "%s: %s\n", gig::libraryName().c_str(), gig::libraryVersion().c_str());
275 #endif
276 fprintf(stderr, "%s: %s\n", ::lscp_client_package(), ::lscp_client_version());
277 fprintf(stderr, "qsampler: %s\n", QSAMPLER_VERSION);
278 return false;
279 }
280 else {
281 // If we don't have one by now,
282 // this will be the startup sesion file...
283 sSessionFile += sArg;
284 iCmdArgs++;
285 }
286 }
287
288 // Alright with argument parsing.
289 return true;
290 }
291
292
293 //---------------------------------------------------------------------------
294 // Widget geometry persistence helper methods.
295
296 void qsamplerOptions::loadWidgetGeometry ( QWidget *pWidget )
297 {
298 // Try to restore old form window positioning.
299 if (pWidget) {
300 QPoint fpos;
301 QSize fsize;
302 bool bVisible;
303 m_settings.beginGroup("/Geometry/" + QString(pWidget->name()));
304 fpos.setX(m_settings.readNumEntry("/x", -1));
305 fpos.setY(m_settings.readNumEntry("/y", -1));
306 fsize.setWidth(m_settings.readNumEntry("/width", -1));
307 fsize.setHeight(m_settings.readNumEntry("/height", -1));
308 bVisible = m_settings.readBoolEntry("/visible", false);
309 m_settings.endGroup();
310 if (fpos.x() > 0 && fpos.y() > 0)
311 pWidget->move(fpos);
312 if (fsize.width() > 0 && fsize.height() > 0)
313 pWidget->resize(fsize);
314 else
315 pWidget->adjustSize();
316 if (bVisible)
317 pWidget->show();
318 else
319 pWidget->hide();
320 }
321 }
322
323
324 void qsamplerOptions::saveWidgetGeometry ( QWidget *pWidget )
325 {
326 // Try to save form window position...
327 // (due to X11 window managers ideossincrasies, we better
328 // only save the form geometry while its up and visible)
329 if (pWidget) {
330 m_settings.beginGroup("/Geometry/" + QString(pWidget->name()));
331 bool bVisible = pWidget->isVisible();
332 if (bVisible) {
333 QPoint fpos = pWidget->pos();
334 QSize fsize = pWidget->size();
335 m_settings.writeEntry("/x", fpos.x());
336 m_settings.writeEntry("/y", fpos.y());
337 m_settings.writeEntry("/width", fsize.width());
338 m_settings.writeEntry("/height", fsize.height());
339 }
340 m_settings.writeEntry("/visible", bVisible);
341 m_settings.endGroup();
342 }
343 }
344
345
346 //---------------------------------------------------------------------------
347 // Combo box history persistence helper implementation.
348
349 void qsamplerOptions::add2ComboBoxHistory ( QComboBox *pComboBox, const QString& sNewText, int iLimit, int iIndex )
350 {
351 int iCount = pComboBox->count();
352 for (int i = 0; i < iCount; i++) {
353 QString sText = pComboBox->text(i);
354 if (sText == sNewText) {
355 pComboBox->removeItem(i);
356 iCount--;
357 break;
358 }
359 }
360 while (iCount >= iLimit)
361 pComboBox->removeItem(--iCount);
362 pComboBox->insertItem(sNewText, iIndex);
363 }
364
365
366 void qsamplerOptions::loadComboBoxHistory ( QComboBox *pComboBox, int iLimit )
367 {
368 pComboBox->setUpdatesEnabled(false);
369 pComboBox->setDuplicatesEnabled(false);
370
371 m_settings.beginGroup("/History/" + QString(pComboBox->name()));
372 for (int i = 0; i < iLimit; i++) {
373 QString sText = m_settings.readEntry("/Item" + QString::number(i + 1), QString::null);
374 if (sText.isEmpty())
375 break;
376 add2ComboBoxHistory(pComboBox, sText, iLimit);
377 }
378 m_settings.endGroup();
379
380 pComboBox->setUpdatesEnabled(true);
381 }
382
383
384 void qsamplerOptions::saveComboBoxHistory ( QComboBox *pComboBox, int iLimit )
385 {
386 add2ComboBoxHistory(pComboBox, pComboBox->currentText(), iLimit, 0);
387
388 m_settings.beginGroup("/History/" + QString(pComboBox->name()));
389 for (int i = 0; i < iLimit && i < pComboBox->count(); i++) {
390 QString sText = pComboBox->text(i);
391 if (sText.isEmpty())
392 break;
393 m_settings.writeEntry("/Item" + QString::number(i + 1), sText);
394 }
395 m_settings.endGroup();
396 }
397
398
399 // end of qsamplerOptions.cpp

  ViewVC Help
Powered by ViewVC