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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 341 - (show annotations) (download)
Tue Jan 18 11:29:01 2005 UTC (19 years, 2 months ago) by capela
File size: 13791 byte(s)
* Actual instrument names are now optionally retrieved
  from the instrument file, even though libgig is available,
  avoiding excessively annoying load times while on the
  channel dialog, when huge instrument files are selected.

1 // qsamplerOptions.cpp
2 //
3 /****************************************************************************
4 Copyright (C) 2003-2004, rncbc aka Rui Nuno Capela. All rights reserved.
5
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 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software
18 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
19
20 *****************************************************************************/
21
22 #include "qsamplerOptions.h"
23 #include "qsamplerAbout.h"
24
25 #include <qcombobox.h>
26
27 #include <lscp/client.h>
28
29 #include "config.h"
30
31
32 //-------------------------------------------------------------------------
33 // qsamplerOptions - Prototype settings structure.
34 //
35
36 // Constructor.
37 qsamplerOptions::qsamplerOptions (void)
38 {
39 // Begin master key group.
40 m_settings.beginGroup("/qsampler");
41
42 // And go into general options group.
43 m_settings.beginGroup("/Options");
44
45 // Load server options...
46 m_settings.beginGroup("/Server");
47 sServerHost = m_settings.readEntry("/ServerHost", "localhost");
48 iServerPort = m_settings.readNumEntry("/ServerPort", 8888);
49 iServerTimeout = m_settings.readNumEntry("/ServerTimeout", 500);
50 bServerStart = m_settings.readBoolEntry("/ServerStart", true);
51 sServerCmdLine = m_settings.readEntry("/ServerCmdLine", "linuxsampler");
52 iStartDelay = m_settings.readNumEntry("/StartDelay", 2);
53 m_settings.endGroup();
54
55 // Load display options...
56 m_settings.beginGroup("/Display");
57 sDisplayFont = m_settings.readEntry("/DisplayFont", QString::null);
58 bDisplayEffect = m_settings.readBoolEntry("/DisplayEffect", true);
59 bAutoRefresh = m_settings.readBoolEntry("/AutoRefresh", true);
60 iAutoRefreshTime = m_settings.readNumEntry("/AutoRefreshTime", 1000);
61 iMaxVolume = m_settings.readNumEntry("/MaxVolume", 100);
62 sMessagesFont = m_settings.readEntry("/MessagesFont", QString::null);
63 bMessagesLimit = m_settings.readBoolEntry("/MessagesLimit", true);
64 iMessagesLimitLines = m_settings.readNumEntry("/MessagesLimitLines", 1000);
65 bConfirmRemove = m_settings.readBoolEntry("/ConfirmRemove", true);
66 bStdoutCapture = m_settings.readBoolEntry("/StdoutCapture", true);
67 bCompletePath = m_settings.readBoolEntry("/CompletePath", true);
68 iMaxRecentFiles = m_settings.readNumEntry("/MaxRecentFiles", 5);
69 bInstrumentNames = m_settings.readBoolEntry("/InstrumentNames", false);
70 m_settings.endGroup();
71
72 // And go into view options group.
73 m_settings.beginGroup("/View");
74 bMenubar = m_settings.readBoolEntry("/Menubar", true);
75 bToolbar = m_settings.readBoolEntry("/Toolbar", true);
76 bStatusbar = m_settings.readBoolEntry("/Statusbar", true);
77 bAutoArrange = m_settings.readBoolEntry("/AutoArrange", true);
78 m_settings.endGroup();
79
80 m_settings.endGroup(); // Options group.
81
82 // Recent file list.
83 m_settings.beginGroup("/RecentFiles");
84 recentFiles.clear();
85 for (int i = 0; i < iMaxRecentFiles; i++) {
86 QString sFilename = m_settings.readEntry("/File" + QString::number(i + 1), QString::null);
87 if (!sFilename.isEmpty())
88 recentFiles.append(sFilename);
89 }
90 m_settings.endGroup();
91
92 // Last but not least, get the default directories.
93 m_settings.beginGroup("/Default");
94 sSessionDir = m_settings.readEntry("/SessionDir", QString::null);
95 sInstrumentDir = m_settings.readEntry("/InstrumentDir", QString::null);
96 sEngineName = m_settings.readEntry("/EngineName", QString::null);
97 sAudioDriver = m_settings.readEntry("/AudioDriver", QString::null);
98 sMidiDriver = m_settings.readEntry("/MidiDriver", QString::null);
99 m_settings.endGroup();
100 }
101
102
103 // Default Destructor.
104 qsamplerOptions::~qsamplerOptions (void)
105 {
106 // Make program version available in the future.
107 m_settings.beginGroup("/Program");
108 m_settings.writeEntry("/Version", QSAMPLER_VERSION);
109 m_settings.endGroup();
110
111 // And go into general options group.
112 m_settings.beginGroup("/Options");
113
114 // Save server options.
115 m_settings.beginGroup("/Server");
116 m_settings.writeEntry("/ServerHost", sServerHost);
117 m_settings.writeEntry("/ServerPort", iServerPort);
118 m_settings.writeEntry("/ServerTimeout", iServerTimeout);
119 m_settings.writeEntry("/ServerStart", bServerStart);
120 m_settings.writeEntry("/ServerCmdLine", sServerCmdLine);
121 m_settings.writeEntry("/StartDelay", iStartDelay);
122 m_settings.endGroup();
123
124 // Save display options.
125 m_settings.beginGroup("/Display");
126 m_settings.writeEntry("/DisplayFont", sDisplayFont);
127 m_settings.writeEntry("/DisplayEffect", bDisplayEffect);
128 m_settings.writeEntry("/AutoRefresh", bAutoRefresh);
129 m_settings.writeEntry("/AutoRefreshTime", iAutoRefreshTime);
130 m_settings.writeEntry("/MaxVolume", iMaxVolume);
131 m_settings.writeEntry("/MessagesFont", sMessagesFont);
132 m_settings.writeEntry("/MessagesLimit", bMessagesLimit);
133 m_settings.writeEntry("/MessagesLimitLines", iMessagesLimitLines);
134 m_settings.writeEntry("/ConfirmRemove", bConfirmRemove);
135 m_settings.writeEntry("/StdoutCapture", bStdoutCapture);
136 m_settings.writeEntry("/CompletePath", bCompletePath);
137 m_settings.writeEntry("/MaxRecentFiles", iMaxRecentFiles);
138 m_settings.writeEntry("/InstrumentNames", bInstrumentNames);
139 m_settings.endGroup();
140
141 // View options group.
142 m_settings.beginGroup("/View");
143 m_settings.writeEntry("/Menubar", bMenubar);
144 m_settings.writeEntry("/Toolbar", bToolbar);
145 m_settings.writeEntry("/Statusbar", bStatusbar);
146 m_settings.writeEntry("/AutoArrange", bAutoArrange);
147 m_settings.endGroup();
148
149 m_settings.endGroup(); // Options group.
150
151 // Recent file list.
152 m_settings.beginGroup("/RecentFiles");
153 for (int i = 0; i < (int) recentFiles.count(); i++)
154 m_settings.writeEntry("/File" + QString::number(i + 1), recentFiles[i]);
155 m_settings.endGroup();
156
157 // Default directories.
158 m_settings.beginGroup("/Default");
159 m_settings.writeEntry("/SessionDir", sSessionDir);
160 m_settings.writeEntry("/InstrumentDir", sInstrumentDir);
161 m_settings.writeEntry("/EngineName", sEngineName);
162 m_settings.writeEntry("/AudioDriver", sAudioDriver);
163 m_settings.writeEntry("/MidiDriver", sMidiDriver);
164 m_settings.endGroup();
165
166 m_settings.endGroup();
167 }
168
169 //-------------------------------------------------------------------------
170 // Settings accessor.
171 //
172
173 QSettings& qsamplerOptions::settings (void)
174 {
175 return m_settings;
176 }
177
178
179 //-------------------------------------------------------------------------
180 // Command-line argument stuff.
181 //
182
183 // Help about command line options.
184 void qsamplerOptions::print_usage ( const char *arg0 )
185 {
186 const QString sEot = "\n\t";
187 const QString sEol = "\n\n";
188
189 fprintf(stderr, QObject::tr("Usage") + ": %s [" + QObject::tr("options") + "] [" +
190 QObject::tr("session-file") + "]" + sEol, arg0);
191 fprintf(stderr, QSAMPLER_TITLE " - " + QObject::tr(QSAMPLER_SUBTITLE) + sEol);
192 fprintf(stderr, QObject::tr("Options") + ":" + sEol);
193 fprintf(stderr, " -s, --start" + sEot +
194 QObject::tr("Start linuxsampler server locally") + sEol);
195 fprintf(stderr, " -h, --hostname" + sEot +
196 QObject::tr("Specify linuxsampler server hostname") + sEol);
197 fprintf(stderr, " -p, --port" + sEot +
198 QObject::tr("Specify linuxsampler server port number") + sEol);
199 fprintf(stderr, " -?, --help" + sEot +
200 QObject::tr("Show help about command line options") + sEol);
201 fprintf(stderr, " -v, --version" + sEot +
202 QObject::tr("Show version information") + sEol);
203 }
204
205
206 // Parse command line arguments into m_settings.
207 bool qsamplerOptions::parse_args ( int argc, char **argv )
208 {
209 const QString sEol = "\n\n";
210 int iCmdArgs = 0;
211
212 for (int i = 1; i < argc; i++) {
213
214 if (iCmdArgs > 0) {
215 sSessionFile += " ";
216 sSessionFile += argv[i];
217 iCmdArgs++;
218 continue;
219 }
220
221 QString sArg = argv[i];
222 QString sVal = QString::null;
223 int iEqual = sArg.find("=");
224 if (iEqual >= 0) {
225 sVal = sArg.right(sArg.length() - iEqual - 1);
226 sArg = sArg.left(iEqual);
227 }
228 else if (i < argc)
229 sVal = argv[i + 1];
230
231 if (sArg == "-s" || sArg == "--start") {
232 bServerStart = true;
233 }
234 else if (sArg == "-h" || sArg == "--hostname") {
235 if (sVal.isNull()) {
236 fprintf(stderr, QObject::tr("Option -h requires an argument (hostname).") + sEol);
237 return false;
238 }
239 sServerHost = sVal;
240 if (iEqual < 0)
241 i++;
242 }
243 else if (sArg == "-p" || sArg == "--port") {
244 if (sVal.isNull()) {
245 fprintf(stderr, QObject::tr("Option -p requires an argument (port).") + sEol);
246 return false;
247 }
248 iServerPort = sVal.toInt();
249 if (iEqual < 0)
250 i++;
251 }
252 else if (sArg == "-?" || sArg == "--help") {
253 print_usage(argv[0]);
254 return false;
255 }
256 else if (sArg == "-v" || sArg == "--version") {
257 fprintf(stderr, "Qt: %s\n", qVersion());
258 fprintf(stderr, "liblscp: %s\n", ::lscp_client_version());
259 fprintf(stderr, "qsampler: %s\n", QSAMPLER_VERSION);
260 return false;
261 }
262 else {
263 // If we don't have one by now,
264 // this will be the startup sesion file...
265 sSessionFile += sArg;
266 iCmdArgs++;
267 }
268 }
269
270 // Alright with argument parsing.
271 return true;
272 }
273
274
275 //---------------------------------------------------------------------------
276 // Widget geometry persistence helper methods.
277
278 void qsamplerOptions::loadWidgetGeometry ( QWidget *pWidget )
279 {
280 // Try to restore old form window positioning.
281 if (pWidget) {
282 QPoint fpos;
283 QSize fsize;
284 bool bVisible;
285 m_settings.beginGroup("/Geometry/" + QString(pWidget->name()));
286 fpos.setX(m_settings.readNumEntry("/x", -1));
287 fpos.setY(m_settings.readNumEntry("/y", -1));
288 fsize.setWidth(m_settings.readNumEntry("/width", -1));
289 fsize.setHeight(m_settings.readNumEntry("/height", -1));
290 bVisible = m_settings.readBoolEntry("/visible", false);
291 m_settings.endGroup();
292 if (fpos.x() > 0 && fpos.y() > 0)
293 pWidget->move(fpos);
294 if (fsize.width() > 0 && fsize.height() > 0)
295 pWidget->resize(fsize);
296 else
297 pWidget->adjustSize();
298 if (bVisible)
299 pWidget->show();
300 else
301 pWidget->hide();
302 }
303 }
304
305
306 void qsamplerOptions::saveWidgetGeometry ( QWidget *pWidget )
307 {
308 // Try to save form window position...
309 // (due to X11 window managers ideossincrasies, we better
310 // only save the form geometry while its up and visible)
311 if (pWidget) {
312 m_settings.beginGroup("/Geometry/" + QString(pWidget->name()));
313 bool bVisible = pWidget->isVisible();
314 if (bVisible) {
315 QPoint fpos = pWidget->pos();
316 QSize fsize = pWidget->size();
317 m_settings.writeEntry("/x", fpos.x());
318 m_settings.writeEntry("/y", fpos.y());
319 m_settings.writeEntry("/width", fsize.width());
320 m_settings.writeEntry("/height", fsize.height());
321 }
322 m_settings.writeEntry("/visible", bVisible);
323 m_settings.endGroup();
324 }
325 }
326
327
328 //---------------------------------------------------------------------------
329 // Combo box history persistence helper implementation.
330
331 void qsamplerOptions::add2ComboBoxHistory ( QComboBox *pComboBox, const QString& sNewText, int iLimit, int iIndex )
332 {
333 int iCount = pComboBox->count();
334 for (int i = 0; i < iCount; i++) {
335 QString sText = pComboBox->text(i);
336 if (sText == sNewText) {
337 pComboBox->removeItem(i);
338 iCount--;
339 break;
340 }
341 }
342 while (iCount >= iLimit)
343 pComboBox->removeItem(--iCount);
344 pComboBox->insertItem(sNewText, iIndex);
345 }
346
347
348 void qsamplerOptions::loadComboBoxHistory ( QComboBox *pComboBox, int iLimit )
349 {
350 pComboBox->setUpdatesEnabled(false);
351 pComboBox->setDuplicatesEnabled(false);
352
353 m_settings.beginGroup("/History/" + QString(pComboBox->name()));
354 for (int i = 0; i < iLimit; i++) {
355 QString sText = m_settings.readEntry("/Item" + QString::number(i + 1), QString::null);
356 if (sText.isEmpty())
357 break;
358 add2ComboBoxHistory(pComboBox, sText, iLimit);
359 }
360 m_settings.endGroup();
361
362 pComboBox->setUpdatesEnabled(true);
363 }
364
365
366 void qsamplerOptions::saveComboBoxHistory ( QComboBox *pComboBox, int iLimit )
367 {
368 add2ComboBoxHistory(pComboBox, pComboBox->currentText(), iLimit, 0);
369
370 m_settings.beginGroup("/History/" + QString(pComboBox->name()));
371 for (int i = 0; i < iLimit && i < pComboBox->count(); i++) {
372 QString sText = pComboBox->text(i);
373 if (sText.isEmpty())
374 break;
375 m_settings.writeEntry("/Item" + QString::number(i + 1), sText);
376 }
377 m_settings.endGroup();
378 }
379
380
381 // end of qsamplerOptions.cpp

  ViewVC Help
Powered by ViewVC