# HG changeset patch # User Raimund Renkert # Date 1403622469 -7200 # Node ID 626507197360418fe2ba0e76e96ab2d0cd25bec9 # Parent c1b35edb097f60b2615544c1146d5335adb7776f Updated mainwindow and handle certificate lists. diff -r c1b35edb097f -r 626507197360 ui/mainwindow.cpp --- a/ui/mainwindow.cpp Tue Jun 24 17:03:59 2014 +0200 +++ b/ui/mainwindow.cpp Tue Jun 24 17:07:49 2014 +0200 @@ -59,6 +59,9 @@ MainWindow::MainWindow(bool trayMode): mTrayMode(trayMode) { + mUpdatesNewSize = 0; + mUpdatesRemoveSize = 0; + mUpdatesManualSize = 0; createActions(); createTrayIcon(); createContent(); @@ -523,14 +526,8 @@ updatesManualLayout->insertStretch(2, 10); mUpdatesManual = new CertificateListWidget(this); mUpdatesManual->hide(); - - updatesCenterLayout->addWidget(updatesTip); - updatesCenterLayout->addLayout(updatesNewLayout); - updatesCenterLayout->addWidget(mUpdatesNew); - updatesCenterLayout->addLayout(updatesRemoveLayout); - updatesCenterLayout->addWidget(mUpdatesRemove); - updatesCenterLayout->addLayout(updatesManualLayout); - updatesCenterLayout->addWidget(mUpdatesManual); + connect(mUpdatesManual, SIGNAL(certChanged(bool, const Certificate&)), + this, SLOT(removeFromManual(bool, const Certificate&))); QHBoxLayout *updatesBottomLayout = new QHBoxLayout; quitButton = new QPushButton(tr("Quit without saving")); @@ -540,6 +537,24 @@ updatesBottomLayout->insertStretch(0, 10); updatesBottomLayout->addWidget(saveButton); updatesBottomLayout->addWidget(quitButton); + updatesBottomLayout->setAlignment(Qt::AlignBottom); + + updatesNewLayout->setAlignment(Qt::AlignTop); + updatesRemoveLayout->setAlignment(Qt::AlignTop); + updatesManualLayout->setAlignment(Qt::AlignTop); + updatesCenterLayout->addWidget(updatesTip, 0, Qt::AlignTop); + updatesCenterLayout->addLayout(updatesNewLayout); +// updatesCenterLayout->setStretchFactor(updatesNewLayout, 100); + updatesCenterLayout->addWidget(mUpdatesNew, 1, Qt::AlignTop); + updatesCenterLayout->addLayout(updatesRemoveLayout); +// updatesCenterLayout->setStretchFactor(updatesRemoveLayout, 100); + updatesCenterLayout->addWidget(mUpdatesRemove, 1, Qt::AlignTop); + updatesCenterLayout->addLayout(updatesManualLayout); +// updatesCenterLayout->setStretchFactor(updatesManualLayout, 100); + updatesCenterLayout->addWidget(mUpdatesManual, 1, Qt::AlignTop); + updatesCenterLayout->insertStretch(7, 0); + updatesCenterLayout->addLayout(updatesBottomLayout); + QFrame *updatesPanelSeparator = new QFrame(); updatesPanelSeparator->setFrameShape(QFrame::HLine); @@ -547,8 +562,9 @@ updatesPanelLayout->addLayout(updatesHeaderLayout); updatesPanelLayout->addWidget(updatesPanelSeparator); updatesPanelLayout->addLayout(updatesCenterLayout); - updatesPanelLayout->insertStretch(3, 10); - updatesPanelLayout->addLayout(updatesBottomLayout); + updatesPanelLayout->setStretchFactor(updatesCenterLayout, 1); + //updatesPanelLayout->insertStretch(3, 2); + //updatesPanelLayout->addLayout(updatesBottomLayout); mUpdatesWidget->setLayout(updatesPanelLayout); mUpdatesWidget->setMinimumSize(QSize(820, 440)); mUpdatesPanel->setWidget(mUpdatesWidget); @@ -574,6 +590,8 @@ " Thunderbird)")); installCenterLayout->addWidget(installCenterText); mInstallList = new CertificateListWidget(this); + connect(mInstallList, SIGNAL(certChanged(bool, const Certificate&)), + this, SLOT(toggleInManual(bool, const Certificate&))); installPanelLayout->addLayout(installHeaderLayout); installPanelLayout->addLayout(installCenterLayout); @@ -598,6 +616,8 @@ " you want to remove. TrustBridge will remove these certificates.")); removeCenterLayout->addWidget(removeCenterText); mRemoveList = new CertificateListWidget(this); + connect(mRemoveList, SIGNAL(certChanged(bool, const Certificate&)), + this, SLOT(toggleInManual(bool, const Certificate&))); removePanelLayout->addLayout(removeHeaderLayout); removePanelLayout->addLayout(removeCenterLayout); @@ -814,7 +834,6 @@ //mCertListWidget->clear(); //int i = 0; - qDebug() << "loading list"; /* TODO: if nothing is available (neither old nor new) add some progress * indication */ mInstallList->clear(); @@ -828,39 +847,36 @@ if (mListToInstall.getCertificates().isEmpty()) { // No new list available, add old certificates. - qDebug() << "no new list..."; foreach (const Certificate &cert, mInstalledList.getCertificates()) { + bool state = !mPreviouslyUnselected.contains(cert.base64Line()); if (cert.isInstallCert()) { oldInstallCerts.append(cert); - mInstallList->addCertificate(cert); + mInstallList->addCertificate(cert, state); } else { oldRemoveCerts.append(cert); - mRemoveList->addCertificate(cert); + mRemoveList->addCertificate(cert, state, !state); } } - qDebug() << "old list date: " << mInstalledList.date().toString(); // Set the date of the old list. // mCurrentListDate->setText(tr("Current List Date: %1") // .arg(mInstalledList.date().toString())); } else { - qDebug() << "new list available"; // Sort and filter both lists. foreach (const Certificate &cert, mListToInstall.getCertificates()) { + bool state = !mPreviouslyUnselected.contains(cert.base64Line()); if (cert.isInstallCert()) { // Certificate with status "install". if (mInstalledList.getCertificates().contains(cert)) { // Was in the old list. oldInstallCerts.append(cert); - qDebug() << "add install"; - mInstallList->addCertificate(cert); + mInstallList->addCertificate(cert, state); } else { // Is a brand new certificate newInstallCerts.append(cert); - qDebug() << "add new install"; - mUpdatesNew->addCertificate(cert); + mUpdatesNew->addCertificate(cert, state); } } else { @@ -868,21 +884,20 @@ if (mInstalledList.getCertificates().contains(cert)) { // Was in the old list. oldRemoveCerts.append(cert); - qDebug() << "add remove"; - mRemoveList->addCertificate(cert); + // Is removed, so set editable to false. + mRemoveList->addCertificate(cert, state, !state); } else { // Was in the old list with status "install" and now has the // status "remove". newRemoveCerts.append(cert); - qDebug() << "add new remove"; - mUpdatesRemove->addCertificate(cert); + mUpdatesRemove->addCertificate(cert, state); } } } mUpdatesHeader->setText("

" + tr("Updates (%1/%2)") - .arg(newRemoveCerts.size() + newInstallCerts.size()) + .arg(mUpdatesNew->selectedCertCount() + mUpdatesRemove->selectedCertCount()) .arg(newRemoveCerts.size() + newInstallCerts.size()) + "

"); mLastCertUpdate->setText(tr("Last certificate update: %1") .arg(mInstalledList.date().toString())); @@ -1033,10 +1048,25 @@ void MainWindow::installCerts() { QStringList choices; + QStringList unselected; - choices << mUpdatesNew->certificates(); - choices << mUpdatesRemove->certificates(); - choices << mUpdatesManual->certificates(); + choices << mUpdatesNew->selectedCertificates(); + choices << mUpdatesRemove->selectedCertificates(); + + choices << mUpdatesManual->selectedCertificates(); + QStringList unselectedManuals = mUpdatesManual->unselectedCertificates(); + for(int i = 0; i < unselectedManuals.size(); i++) { + if (unselectedManuals.at(i).startsWith("I:")) { + QString certLine = unselectedManuals.at(i); + certLine[0] = 'R'; + choices << certLine; + } + } + + unselected << mUpdatesNew->unselectedCertificates(); + unselected << mUpdatesRemove->unselectedCertificates(); + unselected << mInstallList->unselectedCertificates(); + unselected << mRemoveList->unselectedCertificates(); /* for (int i = 0; i < mCertListWidget->count(); i++) { QListWidgetItem *item = mCertListWidget->item(i); @@ -1073,11 +1103,11 @@ connect(instWrap, SIGNAL(error(const QString &)), this, SLOT(installerError(const QString &))); instWrap->start(); -/* - if (!saveUnselectedCertificates()) { + + if (!saveUnselectedCertificates(unselected)) { qWarning() << "Failed to save previosly unselected certificates."; } -*/ + } void MainWindow::loadUnselectedCertificates() @@ -1091,21 +1121,16 @@ mSettings.endGroup(); } -bool MainWindow::saveUnselectedCertificates() +bool MainWindow::saveUnselectedCertificates(QStringList unselected) { mPreviouslyUnselected.clear(); mSettings.beginGroup("unselected"); mSettings.remove(""); /* Clears old choices */ - for (int i = 0; i < mCertListWidget->count(); i++) { - QListWidgetItem *item = mCertListWidget->item(i); - if (item->checkState() != Qt::Checked && - (item->flags() & Qt::ItemIsUserCheckable)) { - QString key = QString::fromLatin1("cert%1").arg(i); - QString value = - item->data(CertificateItemDelegate::DataRole).value().base64Line(); - mSettings.setValue(key, value); - mPreviouslyUnselected << value; - } + for (int i = 0; i < unselected.size(); i++) { + QString key = QString::fromLatin1("cert%1").arg(i); + QString value = unselected.at(i); + mSettings.setValue(key, value); + mPreviouslyUnselected << value; } mSettings.endGroup(); mSettings.sync(); @@ -1126,9 +1151,40 @@ mSettings.endGroup(); } +void MainWindow::toggleInManual(bool state, const Certificate &cert) +{ + if (!mUpdatesManual->contains(cert)) { + mUpdatesManual->addCertificate(cert, state); + } + else { + mUpdatesManual->removeCertificate(cert); + } + + mUpdatesManualCertificates->setText("

" + + tr("Manualy changed Certificates (%1)") + .arg(mUpdatesManual->certificates().size()) + + "

"); +} + +void MainWindow::removeFromManual(bool state, const Certificate &cert) +{ + mUpdatesManual->removeCertificate(cert); + + mUpdatesManualCertificates->setText("

" + + tr("Manualy changed Certificates (%1)") + .arg(mUpdatesManual->certificates().size()) + + "

"); + + if (cert.isInstallCert()) { + mInstallList->setCertState(state, cert); + } + else { + mRemoveList->setCertState(state, cert); + } +} + void MainWindow::closeApp() { - //saveUnselectedCertificates(); qApp->quit(); } @@ -1151,8 +1207,11 @@ void MainWindow::toggleUpdatesNew() { QSize old = mUpdatesWidget->size(); if (!mUpdatesNew->isVisible()) { - mUpdatesWidget->resize(old.width(), old.height() + mUpdatesNew->height()); mUpdatesNew->show(); + if (mUpdatesNewSize == 0) { + mUpdatesNewSize = mUpdatesNew->height(); + } + mUpdatesWidget->resize(old.width(), old.height() + mUpdatesNewSize); } else { mUpdatesWidget->resize(old.width(), old.height() - mUpdatesNew->height()); @@ -1163,8 +1222,11 @@ void MainWindow::toggleUpdatesRemove() { QSize old = mUpdatesWidget->size(); if (!mUpdatesRemove->isVisible()) { - mUpdatesWidget->resize(old.width(), old.height() + mUpdatesRemove->height()); mUpdatesRemove->show(); + if (mUpdatesRemoveSize == 0) { + mUpdatesRemoveSize = mUpdatesRemove->height(); + } + mUpdatesWidget->resize(old.width(), old.height() + mUpdatesRemoveSize); } else { mUpdatesWidget->resize(old.width(), old.height() - mUpdatesRemove->height()); @@ -1175,11 +1237,14 @@ void MainWindow::toggleUpdatesManual() { QSize old = mUpdatesWidget->size(); if (!mUpdatesManual->isVisible()) { - mUpdatesWidget->resize(old.width(), old.height() + mUpdatesManual->height()); mUpdatesManual->show(); + if (mUpdatesManualSize == 0) { + mUpdatesManualSize = mUpdatesManual->height(); + } + mUpdatesWidget->resize(old.width(), old.height() + mUpdatesManualSize); } else { + mUpdatesWidget->resize(old.width(), old.height() - mUpdatesManual->height()); mUpdatesManual->hide(); - mUpdatesWidget->resize(old.width(), old.height() - mUpdatesManual->height()); } } diff -r c1b35edb097f -r 626507197360 ui/mainwindow.h --- a/ui/mainwindow.h Tue Jun 24 17:03:59 2014 +0200 +++ b/ui/mainwindow.h Tue Jun 24 17:07:49 2014 +0200 @@ -78,6 +78,8 @@ void installerError(const QString& errMsg); void installerSuccess(); void installCerts(); + void toggleInManual(bool state, const Certificate &cert); + void removeFromManual(bool state, const Certificate &cert); void saveAutoUpdate(int state); void saveAutoStart(int state); @@ -117,7 +119,7 @@ * * Returns false on error. */ - bool saveUnselectedCertificates(); + bool saveUnselectedCertificates(QStringList unselected); /** @brief loads previously unselected certificates from settings * @@ -243,6 +245,9 @@ CertificateListWidget *mUpdatesManual; CertificateListWidget *mInstallList; CertificateListWidget *mRemoveList; + int mUpdatesNewSize; + int mUpdatesRemoveSize; + int mUpdatesManualSize; }; #endif // MAINWINDOW_H