UltraScan III
us_config.cpp
Go to the documentation of this file.
1 #include <QApplication>
3 
4 #include "us_config.h"
5 #include "us_defines.h"
6 #include "us_license.h"
7 #include "us_license_t.h"
8 #include "us_settings.h"
9 #include "us_gui_settings.h"
10 #include "us_constants.h"
11 
12 int main( int argc, char* argv[] )
13 {
14  QApplication application( argc, argv );
15 
16  #include "main1.inc"
17 
18  // License is OK. Start up.
19  US_Config w;
20  w.show();
21  return application.exec();
22 }
23 
25 US_Config::US_Config( QWidget* parent, Qt::WindowFlags flags )
26  : US_Widgets( true, parent, flags )
27 {
28  font = NULL;
29  db = NULL;
30  colors = NULL;
31  admin = NULL;
32  chg_dimport = false;
33  chg_dtmp = false;
34 
35  setWindowTitle( "UltraScan Configuration" );
36  setPalette( US_GuiSettings::frameColor() );
37 
38  // Directories
39 
40  QBoxLayout* topbox = new QVBoxLayout( this );
41  topbox->setContentsMargins ( 2, 2, 2, 2 );
42  topbox->setSpacing ( 2 );
43 
44  QLabel* banner = us_banner( tr("UltraScan %1 Configuration" ).arg( US_Version ) );
45  topbox->addWidget( banner );
46 
47  QLabel* paths = us_banner( tr("Directories" ) );
48  paths->setAlignment ( Qt::AlignVCenter | Qt::AlignLeft );
49  topbox->addWidget( paths );
50 
51  int row = 0;
52  QGridLayout* directories = new QGridLayout();
53 
54  // Calculate width for directory pushbuttons
55  QFont* f = new QFont( US_GuiSettings::fontFamily(),
57  QFontMetrics* fm = new QFontMetrics ( *f );
58  int w = fm->width( tr( "Temporary Directory:" ) ) + 20;
59 
60  // Browser
61  pb_browser = us_pushbutton( tr("WWW Browser:" ) );
62  pb_browser->setFixedWidth( w );
63  directories->addWidget( pb_browser, row, 0 );
64  connect( pb_browser, SIGNAL( clicked() ), this, SLOT( open_browser() ) );
65 
66  // Calculate the minimum width of all the le boxes
67  QString browser = US_Settings::browser();
68  int le_w = fm->width( browser ) + 20;
69 
70  le_browser = us_lineedit( browser, 0 );
71  directories->addWidget( le_browser, row++, 1 );
72 
73  // Base Work Directory
74  pb_workDir = us_pushbutton( tr( "Base Work Directory:" ) );
75  pb_workDir->setFixedWidth( w );
76  directories->addWidget( pb_workDir, row, 0 );
77  connect( pb_workDir, SIGNAL( clicked() ), this, SLOT( open_workDir() ) );
78 
79  QString workDir = US_Settings::workBaseDir();
80  le_w = qMax( fm->width( workDir ) + 20, le_w );
81 
82  le_workDir = us_lineedit( workDir, 0 );
83  directories->addWidget( le_workDir, row++, 1 );
84  connect( le_workDir, SIGNAL( editingFinished() ),
85  this, SLOT( update_workDir() ) );
86 
87  // Imports Directory
88  pb_importDir = us_pushbutton( tr( "Imports Directory:" ) );
89  pb_importDir->setFixedWidth( w );
90  directories->addWidget( pb_importDir, row, 0 );
91  connect( pb_importDir, SIGNAL( clicked() ), this, SLOT( open_importDir() ) );
92 
93  QString importDir = US_Settings::importDir();
94  le_w = qMax( fm->width( importDir ) + 20, le_w );
95 
96  le_importDir = us_lineedit( importDir, 0 );
97  directories->addWidget( le_importDir, row++, 1 );
98  connect( le_importDir, SIGNAL( editingFinished() ),
99  this, SLOT( update_importDir() ) );
100 
101  // Temporary Directory
102  pb_tmpDir = us_pushbutton( tr( "Temporary Directory:" ) );
103  pb_tmpDir->setFixedWidth( w );
104  directories->addWidget( pb_tmpDir, row, 0 );
105  connect( pb_tmpDir, SIGNAL( clicked() ), this, SLOT( open_tmpDir() ) );
106 
107  QString tmpDir = US_Settings::tmpDir();
108  le_w = qMax( fm->width( tmpDir ) + 20, le_w );
109 
110  le_tmpDir = us_lineedit( tmpDir, 0 );
111  directories->addWidget( le_tmpDir, row++, 1 );
112  connect( le_tmpDir, SIGNAL( editingFinished() ),
113  this, SLOT( update_tmpDir() ) );
114 
115  le_browser ->setMinimumWidth( le_w );
116  le_workDir ->setMinimumWidth( le_w );
117  le_importDir ->setMinimumWidth( le_w );
118  le_tmpDir ->setMinimumWidth( le_w );
119 
120  topbox->addLayout( directories );
121 
122  QLabel* misc = us_banner( tr("Miscellaneous Settings" ) );
123  misc->setAlignment ( Qt::AlignVCenter | Qt::AlignLeft );
124  topbox->addWidget( misc );
125 
126  // Misc Settings
127  row = 0;
128  QGridLayout* otherSettings = new QGridLayout();
129 
130  // Disk/DB preference
131  QLabel* lb_disk_db = us_label( "Default Data Location:" );
132  otherSettings->addWidget( lb_disk_db, row, 0 );
133 
135  otherSettings->addLayout( disk_db_control, row++, 1 );
136  connect( disk_db_control, SIGNAL( changed ( bool ) ),
137  SLOT( set_data_location( bool ) ) );
138  // Color Preferences
139  QLabel* color = us_label( "Color Preferences:" );
140  otherSettings->addWidget( color, row, 0 );
141 
142  pb_color = us_pushbutton( tr( "Change" ) );
143  otherSettings->addWidget( pb_color, row++, 1 );
144  connect( pb_color, SIGNAL( clicked() ), this, SLOT( update_colors() ) );
145 
146  // Font Preferences
147  QLabel* font = us_label( "Font Preferences:" );
148  otherSettings->addWidget( font, row, 0 );
149 
150  pb_font = us_pushbutton( tr( "Change" ) );
151  otherSettings->addWidget( pb_font, row++, 1 );
152  connect( pb_font, SIGNAL( clicked() ), this, SLOT( update_font() ) );
153 
154  // Database Preferences
155  QLabel* db = us_label( "Database Preferences:" );
156  otherSettings->addWidget(db, row, 0 );
157 
158  pb_db = us_pushbutton( tr( "Change" ) );
159  otherSettings->addWidget( pb_db, row++, 1 );
160  connect( pb_db, SIGNAL( clicked() ), this, SLOT( update_db() ) );
161 
162  // Master Password
163  QLabel* password = us_label( "Master Password:" );
164  otherSettings->addWidget( password, row, 0 );
165 
166  pb_password = us_pushbutton( tr( "Change" ) );
167  otherSettings->addWidget( pb_password, row++, 1 );
168  connect( pb_password, SIGNAL( clicked() ), this, SLOT( update_password() ) );
169 
170  // Advanced settings
171  QLabel* advanced = us_label( "Advanced Settings:" );
172  otherSettings->addWidget( advanced, row, 0 );
173 
174  pb_advanced = us_pushbutton( tr( "Change" ) );
175  otherSettings->addWidget( pb_advanced, row++, 1 );
176  connect( pb_advanced, SIGNAL( clicked() ), this, SLOT( update_advanced() ) );
177 
178  topbox->addLayout( otherSettings );
179 
180  // Pushbuttons
181  pb_help = us_pushbutton( tr( "Help" ) );
182  connect( pb_help, SIGNAL( clicked() ), this, SLOT( help() ) );
183 
184  pb_save = us_pushbutton( tr( "Save" ) );
185  connect( pb_save, SIGNAL( clicked() ), this, SLOT( save() ) );
186 
187  pb_cancel = us_pushbutton( tr( "Close" ) );
188  connect( pb_cancel, SIGNAL( clicked() ), this, SLOT( close() ) );
189 
190  QBoxLayout* buttons = new QHBoxLayout();
191  buttons->addWidget( pb_save );
192  buttons->addWidget( pb_help );
193  buttons->addWidget( pb_cancel );
194  topbox->addLayout( buttons );
195 }
196 
197 void US_Config::help( void )
198 {
199  showhelp.show_help( "config.html" );
200 }
201 
202 void US_Config::save( void )
203 {
207  US_Settings::set_tmpDir ( le_tmpDir ->text() );
208 
209  // Ensure work directories are properly created
210  QDir dir;
211  dir.mkpath( le_workDir ->text() );
212  dir.mkpath( le_importDir ->text() );
213  dir.mkpath( le_tmpDir ->text() );
214 
215  QMessageBox::information( this,
216  tr( "Settings Saved" ),
217  tr( "The settings were successfully saved" ) );
218 }
219 
221 {
222  if ( disk_db_control->db() )
224  else
226 }
227 
229 {
230  colors = new US_Color; // Automatic delete
231  colors->show();
232 }
233 
235 {
236  font = new US_Font; // Automatic delete
237  font->show();
238 }
239 
241 {
242  db = new US_Database; // Automatic delete
243  db->show();
244 }
245 
247 {
248  admin = new US_Admin; // Automatic delete
249  admin->show();
250 }
251 
253 {
254  advanced = new US_Advanced;
255  advanced->show();
256 }
257 
259 {
260  QString browser = QFileDialog::getOpenFileName( this,
261  tr( "Select desired browser application" ), le_browser->text() );
262 
263  if ( browser != "" ) le_browser->setText( browser );
264 }
265 
266 // Slot to react to file dialog setting of base work directory
268 {
269  QString dir = QFileDialog::getExistingDirectory( this,
270  tr( "Select desired base work directory" ), le_workDir->text() );
271 
272  if ( dir != "" )
273  {
274  le_workDir->setText( dir );
275  update_workDir();
276  }
277 }
278 
279 // Slot to react to file dialog setting of imports directory
281 {
282  QString dir = QFileDialog::getExistingDirectory( this,
283  tr( "Select desired imports directory" ), le_importDir->text() );
284 
285  if ( dir != "" )
286  {
287  le_importDir->setText( dir );
289  }
290 }
291 
292 // Slot to react to file dialog setting of tmp directory
294 {
295  QString dir = QFileDialog::getExistingDirectory( this,
296  tr( "Select desired temporary directory" ), le_tmpDir->text() );
297 
298  if ( dir != "" )
299  {
300  le_tmpDir->setText( dir );
301  update_tmpDir();
302  }
303 }
304 
305 // Slot to react to change in work base directory
307 {
308  QString work_dir = le_workDir->text();
309 
310  if ( !chg_dimport )
311  { // If imports directory wasn't changed already, default using work base
312  le_importDir->setText( work_dir + "/imports" );
313  }
314 
315  if ( !chg_dtmp )
316  { // If tmp directory wasn't changed already, default using work base
317  le_tmpDir ->setText( work_dir + "/tmp" );
318  }
319 }
320 
321 // Slot to react to change in imports directory
323 {
324  // Mark imports directory as having been changed
325  chg_dimport = true;
326 }
327 
328 // Slot to react to change in tmp directory
330 {
331  // Mark tmp directory as having been changed
332  chg_dtmp = true;
333 }
334