//#define DEBUGTP // Toolpalette debugging...
#include "mainwin.h"
-#include <QtSql>
-//#include "main.h"
#include "about.h"
+#include "configdialog.h"
#include "logindialog.h"
+#include "newvendordialog.h"
+#include "scmwidget.h"
+#include "sqlsettingsdialog.h"
+#include "vendorclassdialog.h"
MainWindow::MainWindow(): aboutWin(new AboutWindow(this)),
+ scmWidget(new SCMWidget(this)),
+ boldFont(new QFont),
loggedInUID(0)
{
setWindowIcon(QIcon(":/res/schematic.png"));
aboutAct->setStatusTip(tr("Blatant self-promotion"));
connect(aboutAct, SIGNAL(triggered()), this, SLOT(ShowAboutWin()));
+ configAct = new QAction(QIcon(":/res/schematic.png"), tr("&Configure..."), this);
+ configAct->setStatusTip(tr("Configure SCheMatic"));
+ connect(configAct, SIGNAL(triggered()), this, SLOT(HandleConfigDialog()));
+
+ vendorClassAct = new QAction(QIcon(":/res/schematic.png"), tr("&Edit Vendor Classes..."), this);
+ vendorClassAct->setStatusTip(tr("Edit Vendor Classes"));
+ connect(vendorClassAct, SIGNAL(triggered()), this, SLOT(HandleVendorClassDialog()));
+
+ newVendorAct = new QAction(QIcon(":/res/schematic.png"), tr("&Add Vendor..."), this);
+ newVendorAct->setStatusTip(tr("Create a new vendor"));
+ connect(newVendorAct, SIGNAL(triggered()), this, SLOT(HandleNewVendorDialog()));
+
// helpAct = new QAction(QIcon(":/res/vj-icon.png"), tr("&Contents..."), this);
// helpAct->setStatusTip(tr("Help is available, if you should need it"));
// connect(helpAct, SIGNAL(triggered()), this, SLOT(ShowHelpWin()));
// fileMenu->addAction(configAct);
menu->addAction(quitAppAct);
+ menu = menuBar()->addMenu(tr("&Edit"));
+ menu->addAction(configAct);
+ menu->addAction(vendorClassAct);
+ menu->addAction(newVendorAct);
+
menu = menuBar()->addMenu(tr("&Help"));
// menu->addAction(helpAct);
menu->addAction(aboutAct);
statusBar()->showMessage(tr("Ready"));
ReadSettings();
+ boldFont->setBold(true);
// Finally, set up database connection
- QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
- db.setHostName("localhost");
- db.setDatabaseName("schematic");
- db.setUserName("scm_user");
- db.setPassword("scm_user");
- bool ok = db.open();
-
-#warning "!!! NEED TO SET UP DB SETUP DIALOG IF CONNECTION FAILED !!!"
+// db = QSqlDatabase::addDatabase("QMYSQL");
+ db = QSqlDatabase::addDatabase("QODBC");
+ bool ok = false;
+
+ // Prime the SQL Settings dialog (in case we need it)
+
+ SQLSettingsDialog sqlSettings;
+ sqlSettings.edit1->setText(dbDriver);
+ sqlSettings.edit2->setText(dbHostName);
+ sqlSettings.edit3->setText(dbName);
+ sqlSettings.edit4->setText(dbUserName);
+ sqlSettings.edit5->setText(dbPassword);
+
+#if 0
+db = QSqlDatabase::addDatabase("QODBC");
+db.setDatabaseName("Driver={MySQL ODBC 5.1 Driver};DATABASE=agp-dbserver01;");
+db.setUserName("xcdr");
+db.setPassword("xcdr");
+#endif
+ do
+ {
+ // Set up the DB connection with saved settings
+ QString odbc = QString("DRIVER={%1};DATABASE=%2;").arg(dbDriver).arg(dbName);
+ db.setHostName(dbHostName);
+ db.setDatabaseName(odbc);
+ db.setUserName(dbUserName);
+ db.setPassword(dbPassword);
+ ok = db.open();
+
+ // If unsuccessful, run the SQL settings/test dialog
+ if (!ok)
+ {
+//printf("Error: %s\n", db.lastError().databaseText().toAscii().data());
+//printf("Error: %s\n", db.lastError().driverText().toAscii().data());
+ sqlSettings.error1->setText(db.lastError().databaseText());
+ sqlSettings.error2->setText(db.lastError().driverText());
+ if (sqlSettings.exec())
+ {
+ // User thinks this will work (hit OK button), so prime the variables
+ // for the next attempt
+ dbDriver = sqlSettings.edit1->text();
+ dbHostName = sqlSettings.edit2->text();
+ dbName = sqlSettings.edit3->text();
+ dbUserName = sqlSettings.edit4->text();
+ dbPassword = sqlSettings.edit5->text();
+ }
+ else
+ return; // User cancelled the dialog, so quit
+ }
+ }
+ while (!ok);
-// printf("Database connection was %sopened successfully.\n", (ok ? "" : "NOT "));
+ // Check to see how many users are in the system; if less than 2, we don't do a login
+ QSqlQuery query;
+ query.prepare("SELECT COUNT(*) FROM User");
+ query.exec();
+ query.next();
+ if (query.value(0).toInt() > 1)
+ {
// Do Login dialog
- LoginDialog login;
+ LoginDialog loginDlg;
bool done = false;
do
{
- bool accept = login.exec();
+ bool accept = loginDlg.exec();
// Check to see if user cancelled out
if (!accept)
done = true;
else
{
+#if 0
// Search DB for this username/login pair
- QSqlQuery query("SELECT UID FROM User WHERE Login=? AND Password=?");
- query.addBindValue(login.edit1->text());
- query.addBindValue(login.edit2->text());
+ QSqlQuery query("SELECT UID, name, login FROM User WHERE Login=? AND Password=?");
+ query.addBindValue(loginDlg.edit1->text());
+ query.addBindValue(loginDlg.edit2->text());
query.exec();
+#else
+ // Search DB for this username/login pair
+ QSqlQuery query;
+ query.prepare("SELECT UID, name, login FROM User WHERE Login=? AND Password=?");
+ query.addBindValue(loginDlg.edit1->text());
+ query.addBindValue(loginDlg.edit2->text());
+ query.exec();
+#endif
while (query.next())
{
// We have a winner!
loggedInUID = query.value(0).toInt();
+ fullName = query.value(1).toString();
+ login = query.value(2).toString();
done = true;
}
}
}
while (!done);
+ }
+ else
+ {
+ fullName = "Administrator";
+ login = "admin";
+ loggedInUID = 1;
+ }
+
+ QString s = QString("User: %1 (%2)").arg(fullName).arg(login);
+ scmWidget->username->setText(s);
+ setCentralWidget(scmWidget);
}
}
+void MainWindow::HandleConfigDialog(void)
+{
+ ConfigDialog dialog(this);
+ dialog.exec();
+}
+
+
+void MainWindow::HandleVendorClassDialog(void)
+{
+ VendorClassDialog dialog(this);
+
+ if (!dialog.exec())
+ return;
+}
+
+
+void MainWindow::HandleNewVendorDialog(void)
+{
+ NewVendorDialog dialog(this);
+ FillVendorLevelCombo(dialog.combo1);
+ FillContactTypeCombo(dialog.contact->field1);
+ FillVendorClassList(dialog.list);
+
+ if (!dialog.exec())
+ return;
+
+ // Presumably, the user has given us good data, so we try to populate the
+ // database with this new vendor data.
+ QSqlQuery query;
+ query.prepare("INSERT INTO VALUES (?, ?, ?)");
+
+
+}
+
+
+void MainWindow::FillVendorLevelCombo(QComboBox * combo)
+{
+ QSqlQuery query;
+ query.prepare("SELECT VLID, Description FROM VendorLevel");
+ query.exec();
+
+ while (query.next())
+ {
+ int vlid = query.value(0).toInt();
+ QString description = query.value(1).toString();
+
+ combo->addItem(description, vlid);
+ }
+}
+
+
+void MainWindow::FillContactTypeCombo(QComboBox * combo)
+{
+ QSqlQuery query;
+ query.prepare("SELECT CTID, Description FROM ContactType");
+ query.exec();
+
+ while (query.next())
+ {
+ int ctid = query.value(0).toInt();
+ QString description = query.value(1).toString();
+
+ combo->addItem(description, ctid);
+ }
+}
+
+
+void MainWindow::FillVendorClassList(QListWidget * list)
+{
+ std::vector<VendorType> groupList;
+
+ // Pull in definitions from DB for Vendor Classes/Groups
+ QSqlQuery query1;
+ query1.prepare("SELECT vgid, description FROM VendorGroup ORDER BY seqNo");
+ query1.exec();
+
+ while (query1.next())
+ {
+ VendorType v;
+ v.key = query1.value(0).toInt();
+ v.description = query1.value(1).toString();
+ groupList.push_back(v);
+ }
+
+// QSqlQuery query2;
+ query1.prepare("SELECT vtid, vgid, description FROM VendorType ORDER BY seqNo");
+ query1.exec();
+
+ int previousID = -1, groupListIndex = 0;
+ QListWidgetItem * item;
+
+ while (query1.next())
+ {
+// VendorType v;
+ int vtid = query1.value(0).toInt();
+ int vgid = query1.value(1).toInt();
+ QString description = query1.value(2).toString();
+
+ // Check to see if we need to insert new header yet.
+ // If we're not still in same group, push the next group header into the list
+ // and continue
+ if (previousID != vgid)
+ {
+ item = new QListWidgetItem(groupList[groupListIndex].description);
+ item->setData(Qt::UserRole, groupList[groupListIndex++].key);
+ item->setFont(*boldFont);
+ list->addItem(item);
+ previousID = vgid;
+ }
+
+ item = new QListWidgetItem(description);
+ item->setData(Qt::UserRole, vtid);
+ item->setCheckState(Qt::Unchecked);
+ list->addItem(item);
+ }
+}
+
+
void MainWindow::ReadSettings(void)
{
QSettings settings("Underground Software", "SCheMatic");
// size = settings.value("charWndSize", QSize(200, 200)).toSize();
// ((TTEdit *)qApp)->charWnd->resize(size);
// ((TTEdit *)qApp)->charWnd->move(pos);
+
+ dbDriver = settings.value("dbDriver", "myodbc-5.1").toString();
+ dbHostName = settings.value("dbHostName", "localhost").toString();
+ dbName = settings.value("dbName", "schematic").toString();
+ dbUserName = settings.value("dbUserName", "scm_user").toString();
+ dbPassword = settings.value("dbPassword", "scm_user").toString();
}
settings.setValue("size", size());
// settings.setValue("charWndPos", ((TTEdit *)qApp)->charWnd->pos());
// settings.setValue("charWndSize", ((TTEdit *)qApp)->charWnd->size());
+
+ settings.setValue("dbDriver", dbDriver);
+ settings.setValue("dbHostName", dbHostName);
+ settings.setValue("dbName", dbName);
+ settings.setValue("dbUserName", dbUserName);
+ settings.setValue("dbPassword", dbPassword);
}
+