X-Git-Url: http://shamusworld.gotdns.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fmainwin.cpp;h=c360a4eaa7a89ad6186716904f5022180a71a781;hb=15ddd5e72395cea4b72d96563ec2ad8169f4c0cf;hp=b7e174818d91a468e5b7156eeeff78a957d6b3c7;hpb=6c9ba10f64c4880fd4c58527c462ef1f7841bf17;p=schematic diff --git a/src/mainwin.cpp b/src/mainwin.cpp index b7e1748..c360a4e 100644 --- a/src/mainwin.cpp +++ b/src/mainwin.cpp @@ -16,13 +16,18 @@ //#define DEBUGTP // Toolpalette debugging... #include "mainwin.h" -#include -//#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")); @@ -41,6 +46,18 @@ MainWindow::MainWindow(): aboutWin(new AboutWindow(this)), 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())); @@ -56,6 +73,11 @@ MainWindow::MainWindow(): aboutWin(new AboutWindow(this)), // 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); @@ -80,49 +102,119 @@ MainWindow::MainWindow(): aboutWin(new AboutWindow(this)), 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(); + +//printf("Error: %s\n", db.lastError().databaseText().toAscii().data()); +//printf("Error: %s\n", db.lastError().driverText().toAscii().data()); + + // If unsuccessful, run the SQL settings/test dialog + if (!ok) + { + 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); } @@ -144,6 +236,124 @@ void MainWindow::ShowAboutWin(void) } +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 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"); @@ -155,6 +365,12 @@ void MainWindow::ReadSettings(void) // 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(); } @@ -165,4 +381,11 @@ void MainWindow::WriteSettings(void) 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); } +