view ui/administratorwindow.cpp @ 389:3be838c3e4d8

Handle installation success. Save / load last installed list. This also adds a feature that you can specifiy the download resource when release build is not set so that you can update a list without modifying the server data.
author Andre Heinecke <andre.heinecke@intevation.de>
date Tue, 15 Apr 2014 19:05:49 +0200
parents 9731d28b95af
children 7e0a188d6848
line wrap: on
line source
#include "administratorwindow.h"

#include <QDebug>
#include <QMessageBox>
#include <QAction>
#include <QMenu>
#include <QApplication>
#include <QHBoxLayout>
#include <QVBoxLayout>
#include <QGroupBox>
#include <QSplitter>
#include <QLabel>
#include <QImage>
#include <QCheckBox>
#include <QHeaderView>
#include <QFileDialog>

#include "certificatetabledelegate.h"
#include "createinstallerdialog.h"
#include "createcertlistdialog.h"

AdministratorWindow::AdministratorWindow() {
    createActions();
    createMenuBar();
    createContent();
}

void AdministratorWindow::createActions()
{
}

void AdministratorWindow::createMenuBar()
{
    menuBar = new QMenuBar(this);
    QMenu *menu = new QMenu(tr("Menu"), menuBar);
    menuBar->addMenu(menu);
    QAction *createInstaller = menu->addAction(tr("Create Installer"));
    QAction *settings = menu->addAction(tr("Settings"));
    menu->addSeparator();
    QAction *help = menu->addAction(tr("Help"));
    QAction *about = menu->addAction(tr("About"));
    menu->addSeparator();
    QAction *quit = menu->addAction(tr("Quit"));
    connect(createInstaller, SIGNAL(triggered()), this, SLOT(createInstaller()));
    connect(settings, SIGNAL(triggered()), this, SLOT(showSettings()));
    connect(help, SIGNAL(triggered()), this, SLOT(showHelp()));
    connect(about, SIGNAL(triggered()), this, SLOT(showAbout()));
    connect(quit, SIGNAL(triggered()), qApp, SLOT(quit()));
    setMenuBar(menuBar);
}

void AdministratorWindow::createContent()
{
    // Create a central widget containing the main layout.
    QWidget *base = new QWidget;

    // Layouts and Container
    QVBoxLayout *mainLayout = new QVBoxLayout;
    QVBoxLayout *certLayout = new QVBoxLayout;
    QHBoxLayout *headerLayout = new QHBoxLayout;
    QVBoxLayout *headerTextLayout = new QVBoxLayout;
    QHBoxLayout *bottomLayout = new QHBoxLayout;

    // The certificate list
    QGroupBox *certBox = new QGroupBox(tr("Managed Certificates"));
    certificateView = new QTableView;
    certificateModel = new CertificateTabelModel();
    CertificateTableDelegate *delegate = new CertificateTableDelegate(certificateView);
    certificateView->setModel(certificateModel);
    certificateView->setItemDelegate(delegate);
    certificateView->setColumnWidth(0, 50);
    certificateView->setColumnWidth(2, 130);
    certificateView->setColumnWidth(3, 130);
    certificateView->setColumnWidth(4, 200);
    certificateView->setSelectionBehavior(QAbstractItemView::SelectRows);
    connect(certificateView, SIGNAL(clicked(const QModelIndex&)), this,
        SLOT(clickedCertificate(const QModelIndex&)));
    certificateView->verticalHeader()->setVisible(false);
    certLayout->addWidget(certificateView);
    certBox->setLayout(certLayout);

    // The header (icon, about text)
    QImage *logoImage = new QImage(":/img/logo.png");
    QLabel *logo = new QLabel;
    logo->setBackgroundRole(QPalette::Base);
    logo->setPixmap(QPixmap::fromImage(*logoImage));
    QLabel *title = new QLabel("<h2>" + tr("Administrator Application") + "</h2>");
    QLabel *subTitle = new QLabel("This Software creates a signed file containing certificates");
    headerTextLayout->addWidget(title);
    headerTextLayout->addWidget(subTitle);
    headerLayout->addWidget(logo);
    headerLayout->addLayout(headerTextLayout);
    headerLayout->setStretch(0, 0);
    headerLayout->setStretch(1, 10);

    // The buttons.
    bottomLayout->setAlignment(Qt::AlignBottom);
    saveButton = new QPushButton(tr("Save"));
    connect(saveButton, SIGNAL(clicked()), this, SLOT(saveCertificateFile()));
    loadButton = new QPushButton(tr("Load"));
    connect(loadButton, SIGNAL(clicked()), this, SLOT(loadCertificateFile()));
    addButton = new QPushButton(tr("Add"));
    connect(addButton, SIGNAL(clicked()), this, SLOT(addCertificates()));
    removeButton = new QPushButton(tr("Remove"));
    removeButton->setEnabled(false);
    connect(removeButton, SIGNAL(clicked()), this, SLOT(removeCertificates()));
    bottomLayout->addWidget(saveButton);
    bottomLayout->addWidget(loadButton);
    bottomLayout->addWidget(addButton);
    bottomLayout->addWidget(removeButton);
    bottomLayout->insertStretch(4, 10);

    mainLayout->addLayout(headerLayout);
    mainLayout->addWidget(certBox);
    mainLayout->addLayout(bottomLayout);


    // QMainWindow allready has a layout. All child layouts and widgets are
    // managed in the central widget.
    base->setLayout(mainLayout);
    setCentralWidget(base);
    certificateView->horizontalHeader()->setSectionResizeMode(1,
        QHeaderView::Stretch);
}

void AdministratorWindow::loadCertificateFile()
{
    QString certFile = QFileDialog::getOpenFileName(
        this, tr("Select certificate file"), "/home/rrenkert/local-home/projects/m13/src/repo/ui/tests/data/", "*.txt");
    qDebug() << "selected: " + certFile;
    certList.readList(certFile.toLocal8Bit().constData());
    if (!certList.isValid()) {
        qDebug() << "Not a valid list.";
    }
    else {
        loadCertificateTable();
    }
}

void AdministratorWindow::saveCertificateFile()
{
    CreateCertListDialog *dialog = new CreateCertListDialog(this);
    dialog->show();
}

void AdministratorWindow::addCertificates()
{
    QString certFile = QFileDialog::getOpenFileName(
        this, tr("Select certificate"), "/home/rrenkert/local-home/projects/m13/src/repo/ui/tests/data/", "*.pem *.der");
    QList<Certificate> certs = Certificate::fromFileName(certFile);
    addToCertificateTable(certs);
}

void AdministratorWindow::removeCertificates()
{
    QModelIndexList list = certificateView->selectionModel()->selectedRows();
    for (int i = list.size() -1 ; i >= 0; i--) {
        certificateModel->removeRow(list.at(i).row(), list.at(i));
    }
}

void AdministratorWindow::loadCertificateTable() {
    foreach(const Certificate &cert, certList.getCertificates()) {
        certificateModel->addCertificate(cert, true);
    }
}

void AdministratorWindow::addToCertificateTable(const QList<Certificate> &certs)
{
    foreach(const Certificate &cert, certs) {
        certificateModel->addCertificate(cert, false);
    }
}

void AdministratorWindow::showSettings()
{
    qDebug() << "show settingsdialog";
}

void AdministratorWindow::showHelp()
{
    qDebug() << "show helpdialog";
}

void AdministratorWindow::showAbout()
{
    qDebug() << "show aboutdialog";
}

void AdministratorWindow::createInstaller()
{
    qDebug() << "create Installer";
    CreateInstallerDialog *dialog = new CreateInstallerDialog(this);
    dialog->show();
}

void AdministratorWindow::clickedCertificate(const QModelIndex &index)
{
    if (index.data(Qt::UserRole).toBool()) {
        removeButton->setEnabled(false);
    }
    else {
        removeButton->setEnabled(true);
    }
}

http://wald.intevation.org/projects/trustbridge/