rrenkert@333: #include "administratorwindow.h" rrenkert@333: rrenkert@333: #include rrenkert@333: #include rrenkert@333: #include rrenkert@333: #include rrenkert@333: #include rrenkert@333: #include rrenkert@333: #include rrenkert@333: #include rrenkert@333: #include rrenkert@333: #include rrenkert@333: #include rrenkert@333: #include rrenkert@335: #include rrenkert@344: #include rrenkert@394: #include rrenkert@398: #include rrenkert@333: rrenkert@348: #include "certificatetabledelegate.h" rrenkert@362: #include "createinstallerdialog.h" rrenkert@368: #include "createcertlistdialog.h" rrenkert@348: rrenkert@333: AdministratorWindow::AdministratorWindow() { rrenkert@394: QString path = QStandardPaths::locate( rrenkert@394: QStandardPaths::DataLocation, QString("certlist_last.txt")); rrenkert@394: certList.readList(path.toLocal8Bit()); rrenkert@333: createActions(); rrenkert@333: createMenuBar(); rrenkert@333: createContent(); rrenkert@394: loadCertificateTable(); rrenkert@400: resize(1190, 700); rrenkert@333: } rrenkert@333: rrenkert@333: void AdministratorWindow::createActions() rrenkert@333: { rrenkert@333: } rrenkert@333: rrenkert@333: void AdministratorWindow::createMenuBar() rrenkert@333: { rrenkert@333: menuBar = new QMenuBar(this); rrenkert@333: QMenu *menu = new QMenu(tr("Menu"), menuBar); rrenkert@333: menuBar->addMenu(menu); rrenkert@333: QAction *createInstaller = menu->addAction(tr("Create Installer")); rrenkert@333: QAction *settings = menu->addAction(tr("Settings")); rrenkert@333: menu->addSeparator(); rrenkert@333: QAction *help = menu->addAction(tr("Help")); rrenkert@333: QAction *about = menu->addAction(tr("About")); rrenkert@333: menu->addSeparator(); rrenkert@333: QAction *quit = menu->addAction(tr("Quit")); rrenkert@333: connect(createInstaller, SIGNAL(triggered()), this, SLOT(createInstaller())); rrenkert@333: connect(settings, SIGNAL(triggered()), this, SLOT(showSettings())); rrenkert@333: connect(help, SIGNAL(triggered()), this, SLOT(showHelp())); rrenkert@333: connect(about, SIGNAL(triggered()), this, SLOT(showAbout())); rrenkert@333: connect(quit, SIGNAL(triggered()), qApp, SLOT(quit())); rrenkert@333: setMenuBar(menuBar); rrenkert@333: } rrenkert@333: rrenkert@333: void AdministratorWindow::createContent() rrenkert@333: { rrenkert@333: // Create a central widget containing the main layout. rrenkert@333: QWidget *base = new QWidget; rrenkert@333: rrenkert@333: // Layouts and Container rrenkert@333: QVBoxLayout *mainLayout = new QVBoxLayout; rrenkert@333: QVBoxLayout *certLayout = new QVBoxLayout; rrenkert@333: QHBoxLayout *headerLayout = new QHBoxLayout; rrenkert@333: QVBoxLayout *headerTextLayout = new QVBoxLayout; rrenkert@333: QHBoxLayout *bottomLayout = new QHBoxLayout; rrenkert@333: rrenkert@333: // The certificate list rrenkert@333: QGroupBox *certBox = new QGroupBox(tr("Managed Certificates")); rrenkert@335: certificateView = new QTableView; rrenkert@343: certificateModel = new CertificateTabelModel(); rrenkert@398: QSortFilterProxyModel *filterModel = new QSortFilterProxyModel(this); rrenkert@398: filterModel->setSourceModel(certificateModel); rrenkert@348: CertificateTableDelegate *delegate = new CertificateTableDelegate(certificateView); rrenkert@398: certificateView->setModel(filterModel); rrenkert@348: certificateView->setItemDelegate(delegate); rrenkert@395: certificateView->resizeColumnsToContents(); rrenkert@395: certificateView->setColumnWidth(0, 60); rrenkert@343: certificateView->setSelectionBehavior(QAbstractItemView::SelectRows); rrenkert@376: connect(certificateView, SIGNAL(clicked(const QModelIndex&)), this, rrenkert@376: SLOT(clickedCertificate(const QModelIndex&))); rrenkert@343: certificateView->verticalHeader()->setVisible(false); rrenkert@398: certificateView->setSortingEnabled(true); rrenkert@335: certLayout->addWidget(certificateView); rrenkert@333: certBox->setLayout(certLayout); rrenkert@333: rrenkert@333: // The header (icon, about text) rrenkert@333: QImage *logoImage = new QImage(":/img/logo.png"); rrenkert@333: QLabel *logo = new QLabel; rrenkert@333: logo->setBackgroundRole(QPalette::Base); rrenkert@333: logo->setPixmap(QPixmap::fromImage(*logoImage)); rrenkert@333: QLabel *title = new QLabel("

" + tr("Administrator Application") + "

"); rrenkert@333: QLabel *subTitle = new QLabel("This Software creates a signed file containing certificates"); rrenkert@333: headerTextLayout->addWidget(title); rrenkert@333: headerTextLayout->addWidget(subTitle); rrenkert@333: headerLayout->addWidget(logo); rrenkert@333: headerLayout->addLayout(headerTextLayout); rrenkert@333: headerLayout->setStretch(0, 0); rrenkert@333: headerLayout->setStretch(1, 10); rrenkert@333: rrenkert@333: // The buttons. rrenkert@333: bottomLayout->setAlignment(Qt::AlignBottom); rrenkert@333: saveButton = new QPushButton(tr("Save")); rrenkert@368: connect(saveButton, SIGNAL(clicked()), this, SLOT(saveCertificateFile())); rrenkert@333: loadButton = new QPushButton(tr("Load")); rrenkert@344: connect(loadButton, SIGNAL(clicked()), this, SLOT(loadCertificateFile())); rrenkert@333: addButton = new QPushButton(tr("Add")); rrenkert@358: connect(addButton, SIGNAL(clicked()), this, SLOT(addCertificates())); rrenkert@333: removeButton = new QPushButton(tr("Remove")); rrenkert@376: removeButton->setEnabled(false); rrenkert@376: connect(removeButton, SIGNAL(clicked()), this, SLOT(removeCertificates())); rrenkert@333: bottomLayout->addWidget(saveButton); rrenkert@333: bottomLayout->addWidget(loadButton); rrenkert@333: bottomLayout->addWidget(addButton); rrenkert@333: bottomLayout->addWidget(removeButton); rrenkert@333: bottomLayout->insertStretch(4, 10); rrenkert@333: rrenkert@333: mainLayout->addLayout(headerLayout); rrenkert@333: mainLayout->addWidget(certBox); rrenkert@333: mainLayout->addLayout(bottomLayout); rrenkert@333: rrenkert@333: rrenkert@333: // QMainWindow allready has a layout. All child layouts and widgets are rrenkert@333: // managed in the central widget. rrenkert@333: base->setLayout(mainLayout); rrenkert@333: setCentralWidget(base); rrenkert@333: } rrenkert@333: rrenkert@344: void AdministratorWindow::loadCertificateFile() rrenkert@344: { rrenkert@401: QString path = QStandardPaths::locate( rrenkert@401: QStandardPaths::DataLocation, QString("certlist_last.txt")); rrenkert@344: QString certFile = QFileDialog::getOpenFileName( rrenkert@401: this, tr("Select certificate file"), path, "*.txt"); rrenkert@344: qDebug() << "selected: " + certFile; rrenkert@344: certList.readList(certFile.toLocal8Bit().constData()); rrenkert@344: if (!certList.isValid()) { rrenkert@344: qDebug() << "Not a valid list."; rrenkert@344: } rrenkert@344: else { rrenkert@396: certificateModel->removeAll(); rrenkert@344: loadCertificateTable(); rrenkert@344: } rrenkert@344: } rrenkert@344: rrenkert@368: void AdministratorWindow::saveCertificateFile() rrenkert@368: { rrenkert@368: CreateCertListDialog *dialog = new CreateCertListDialog(this); rrenkert@368: dialog->show(); rrenkert@368: } rrenkert@368: rrenkert@358: void AdministratorWindow::addCertificates() rrenkert@358: { rrenkert@358: QString certFile = QFileDialog::getOpenFileName( rrenkert@401: this, tr("Select certificate"), QDir::homePath(), "*.pem *.der"); rrenkert@358: QList certs = Certificate::fromFileName(certFile); rrenkert@358: addToCertificateTable(certs); rrenkert@358: } rrenkert@358: rrenkert@376: void AdministratorWindow::removeCertificates() rrenkert@376: { rrenkert@376: QModelIndexList list = certificateView->selectionModel()->selectedRows(); rrenkert@376: for (int i = list.size() -1 ; i >= 0; i--) { rrenkert@376: certificateModel->removeRow(list.at(i).row(), list.at(i)); rrenkert@376: } rrenkert@376: } rrenkert@376: rrenkert@344: void AdministratorWindow::loadCertificateTable() { rrenkert@344: foreach(const Certificate &cert, certList.getCertificates()) { rrenkert@358: certificateModel->addCertificate(cert, true); rrenkert@358: } rrenkert@395: certificateView->resizeColumnsToContents(); rrenkert@395: certificateView->setColumnWidth(0, 60); rrenkert@358: } rrenkert@358: rrenkert@358: void AdministratorWindow::addToCertificateTable(const QList &certs) rrenkert@358: { rrenkert@358: foreach(const Certificate &cert, certs) { rrenkert@358: certificateModel->addCertificate(cert, false); rrenkert@344: } rrenkert@344: } rrenkert@344: rrenkert@333: void AdministratorWindow::showSettings() rrenkert@333: { rrenkert@333: qDebug() << "show settingsdialog"; rrenkert@333: } rrenkert@333: rrenkert@333: void AdministratorWindow::showHelp() rrenkert@333: { rrenkert@333: qDebug() << "show helpdialog"; rrenkert@333: } rrenkert@333: rrenkert@333: void AdministratorWindow::showAbout() rrenkert@333: { rrenkert@333: qDebug() << "show aboutdialog"; rrenkert@333: } rrenkert@333: rrenkert@333: void AdministratorWindow::createInstaller() rrenkert@333: { rrenkert@333: qDebug() << "create Installer"; rrenkert@362: CreateInstallerDialog *dialog = new CreateInstallerDialog(this); rrenkert@362: dialog->show(); rrenkert@333: } rrenkert@333: rrenkert@376: void AdministratorWindow::clickedCertificate(const QModelIndex &index) rrenkert@376: { rrenkert@376: if (index.data(Qt::UserRole).toBool()) { rrenkert@376: removeButton->setEnabled(false); rrenkert@376: } rrenkert@376: else { rrenkert@376: removeButton->setEnabled(true); rrenkert@376: } rrenkert@376: }