]> Shamusworld >> Repos - schematic/blob - src/mainwin.cpp
44161ba81c6f6deec3bfffd6e7a82c9c21f2f870
[schematic] / src / mainwin.cpp
1 //
2 // mainwin.cpp - The Supply Chain Manager-O-Matic
3 // by James Hammons
4 // (C) 2012 Underground Software
5 //
6 // JLH = James Hammons <jlhamm@acm.org>
7 //
8 // Who  When        What
9 // ---  ----------  -------------------------------------------------------------
10 // JLH  09/14/2012  Created this file
11 //
12
13 // Uncomment this for debugging...
14 //#define DEBUG
15 //#define DEBUGFOO                              // Various tool debugging...
16 //#define DEBUGTP                               // Toolpalette debugging...
17
18 #include "mainwin.h"
19 #include "about.h"
20 #include "configdialog.h"
21 #include "logindialog.h"
22 #include "newvendordialog.h"
23 #include "sqlsettingsdialog.h"
24 #include "vendorclassdialog.h"
25
26
27 MainWindow::MainWindow(): aboutWin(new AboutWindow(this)),
28         loggedInUID(0)
29 {
30         setWindowIcon(QIcon(":/res/schematic.png"));
31         setWindowTitle("SCheMatic");
32
33         setUnifiedTitleAndToolBarOnMac(true);
34
35         // Create actions
36
37         quitAppAct = new QAction(tr("E&xit"), this);
38         quitAppAct->setShortcut(QKeySequence(tr("Ctrl+q")));
39         quitAppAct->setStatusTip(tr("Quit SCheMatic"));
40         connect(quitAppAct, SIGNAL(triggered()), this, SLOT(close()));
41
42         aboutAct = new QAction(QIcon(":/res/schematic.png"), tr("&About..."), this);
43         aboutAct->setStatusTip(tr("Blatant self-promotion"));
44         connect(aboutAct, SIGNAL(triggered()), this, SLOT(ShowAboutWin()));
45
46         configAct = new QAction(QIcon(":/res/schematic.png"), tr("&Configure..."), this);
47         configAct->setStatusTip(tr("Configure SCheMatic"));
48         connect(configAct, SIGNAL(triggered()), this, SLOT(HandleConfigDialog()));
49
50         vendorClassAct = new QAction(QIcon(":/res/schematic.png"), tr("&Edit Vendor Classes..."), this);
51         vendorClassAct->setStatusTip(tr("Edit Vendor Classes"));
52         connect(vendorClassAct, SIGNAL(triggered()), this, SLOT(HandleVendorClassDialog()));
53
54         newVendorAct = new QAction(QIcon(":/res/schematic.png"), tr("&Add Vendor..."), this);
55         newVendorAct->setStatusTip(tr("Create a new vendor"));
56         connect(newVendorAct, SIGNAL(triggered()), this, SLOT(HandleNewVendorDialog()));
57
58 //      helpAct = new QAction(QIcon(":/res/vj-icon.png"), tr("&Contents..."), this);
59 //      helpAct->setStatusTip(tr("Help is available, if you should need it"));
60 //      connect(helpAct, SIGNAL(triggered()), this, SLOT(ShowHelpWin()));
61
62         // Create menus & toolbars
63
64         QMenu * menu = menuBar()->addMenu(tr("&File"));
65 //      fileMenu->addAction(powerAct);
66 //      fileMenu->addAction(pauseAct);
67 //      fileMenu->addAction(frameAdvanceAct);
68 //      fileMenu->addAction(filePickAct);
69 //      fileMenu->addAction(useCDAct);
70 //      fileMenu->addAction(configAct);
71         menu->addAction(quitAppAct);
72
73         menu = menuBar()->addMenu(tr("&Edit"));
74         menu->addAction(configAct);
75         menu->addAction(vendorClassAct);
76         menu->addAction(newVendorAct);
77
78         menu = menuBar()->addMenu(tr("&Help"));
79 //      menu->addAction(helpAct);
80         menu->addAction(aboutAct);
81
82         QToolBar * toolbar = addToolBar(tr("Stuff"));
83 //      toolbar->addAction(powerAct);
84 //      toolbar->addAction(pauseAct);
85 //      toolbar->addAction(filePickAct);
86 //      toolbar->addAction(useCDAct);
87 //      toolbar->addSeparator();
88 //      toolbar->addAction(x1Act);
89 //      toolbar->addAction(x2Act);
90 //      toolbar->addAction(x3Act);
91 //      toolbar->addSeparator();
92 //      toolbar->addAction(ntscAct);
93 //      toolbar->addAction(palAct);
94 //      toolbar->addSeparator();
95 //      toolbar->addAction(blurAct);
96 //      toolbar->addAction(fullScreenAct);
97
98         //      Create status bar
99         statusBar()->showMessage(tr("Ready"));
100
101         ReadSettings();
102
103         // Finally, set up database connection
104
105         db = QSqlDatabase::addDatabase("QMYSQL");
106         bool ok = false;
107
108         // Prime the SQL Settings dialog (in case we need it)
109
110         SQLSettingsDialog sqlSettings;
111         sqlSettings.edit1->setText(dbHostName);
112         sqlSettings.edit2->setText(dbName);
113         sqlSettings.edit3->setText(dbUserName);
114         sqlSettings.edit4->setText(dbPassword);
115
116         do
117         {
118                 // Set up the DB connection with saved settings
119                 db.setHostName(dbHostName);
120                 db.setDatabaseName(dbName);
121                 db.setUserName(dbUserName);
122                 db.setPassword(dbPassword);
123                 ok = db.open();
124
125                 // If unsuccessful, run the SQL settings/test dialog
126                 if (!ok)
127                 {
128                         if (sqlSettings.exec())
129                         {
130                                 // User thinks this will work (hit OK button), so prime the variables
131                                 // for the next attempt
132                                 dbHostName = sqlSettings.edit1->text();
133                                 dbName = sqlSettings.edit2->text();
134                                 dbUserName = sqlSettings.edit3->text();
135                                 dbPassword = sqlSettings.edit4->text();
136                         }
137                         else
138                                 return;                                         // User cancelled the dialog, so quit
139                 }
140         }
141         while (!ok);
142
143         // Do Login dialog
144         LoginDialog login;
145         bool done = false;
146
147         do
148         {
149                 bool accept = login.exec();
150
151                 // Check to see if user cancelled out
152                 if (!accept)
153                         done = true;
154                 else
155                 {
156                         // Search DB for this username/login pair
157                         QSqlQuery query("SELECT UID FROM User WHERE Login=? AND Password=?");
158                         query.addBindValue(login.edit1->text());
159                         query.addBindValue(login.edit2->text());
160                         query.exec();
161
162                         while (query.next())
163                         {
164                                 // We have a winner!
165                                 loggedInUID = query.value(0).toInt();
166                                 done = true;
167                         }
168                 }
169         }
170         while (!done);
171 }
172
173
174 void MainWindow::closeEvent(QCloseEvent * event)
175 {
176         WriteSettings();
177         event->accept(); // ignore() if can't close for some reason
178 }
179
180
181 void MainWindow::Open(void)
182 {
183 }
184
185
186 void MainWindow::ShowAboutWin(void)
187 {
188         aboutWin->show();
189 }
190
191
192 void MainWindow::HandleConfigDialog(void)
193 {
194         ConfigDialog dialog(this);
195         dialog.exec();
196 }
197
198
199 void MainWindow::HandleVendorClassDialog(void)
200 {
201         VendorClassDialog dialog(this);
202
203         if (!dialog.exec())
204                 return;
205 }
206
207
208 void MainWindow::HandleNewVendorDialog(void)
209 {
210         NewVendorDialog dialog(this);
211
212         if (!dialog.exec())
213                 return;
214 }
215
216
217 void MainWindow::ReadSettings(void)
218 {
219         QSettings settings("Underground Software", "SCheMatic");
220         QPoint pos = settings.value("pos", QPoint(200, 200)).toPoint();
221         QSize size = settings.value("size", QSize(400, 400)).toSize();
222         resize(size);
223         move(pos);
224 //      pos = settings.value("charWndPos", QPoint(0, 0)).toPoint();
225 //      size = settings.value("charWndSize", QSize(200, 200)).toSize();
226 //      ((TTEdit *)qApp)->charWnd->resize(size);
227 //      ((TTEdit *)qApp)->charWnd->move(pos);
228
229         dbHostName = settings.value("dbHostName", "localhost").toString();
230         dbName = settings.value("dbName", "schematic").toString();
231         dbUserName = settings.value("dbUserName", "scm_user").toString();
232         dbPassword = settings.value("dbPassword", "scm_user").toString();
233 }
234
235
236 void MainWindow::WriteSettings(void)
237 {
238         QSettings settings("Underground Software", "SCheMatic");
239         settings.setValue("pos", pos());
240         settings.setValue("size", size());
241 //      settings.setValue("charWndPos", ((TTEdit *)qApp)->charWnd->pos());
242 //      settings.setValue("charWndSize", ((TTEdit *)qApp)->charWnd->size());
243
244         settings.setValue("dbHostName", dbHostName);
245         settings.setValue("dbName", dbName);
246         settings.setValue("dbUserName", dbUserName);
247         settings.setValue("dbPassword", dbPassword);
248 }
249