From ec76381a0b68f96840c9cae513d52cb86f4a5a24 Mon Sep 17 00:00:00 2001 From: hypnosis-i2p Date: Fri, 8 Sep 2017 23:07:27 +0800 Subject: [PATCH 1/5] ui beautifying --- qt/i2pd_qt/TunnelPane.cpp | 9 +++++++++ qt/i2pd_qt/TunnelPane.h | 2 +- qt/i2pd_qt/mainwindow.cpp | 30 ++++++++++++++++++++++++++++++ qt/i2pd_qt/mainwindow.h | 3 ++- qt/i2pd_qt/mainwindow.ui | 21 +++++++++++++++------ 5 files changed, 57 insertions(+), 8 deletions(-) diff --git a/qt/i2pd_qt/TunnelPane.cpp b/qt/i2pd_qt/TunnelPane.cpp index bbf5914d..a8baed6f 100644 --- a/qt/i2pd_qt/TunnelPane.cpp +++ b/qt/i2pd_qt/TunnelPane.cpp @@ -231,11 +231,20 @@ void TunnelPane::deleteTunnelForm() { } void TunnelPane::highlightWrongInput(QString warningText, QWidget* controlWithWrongInput) { + bool redVisible = wrongInputPane->isVisible(); wrongInputPane->setVisible(true); wrongInputLabel->setText(warningText); + if(!redVisible)mainWindow->adjustSizesAccordingToWrongLabel(); if(controlWithWrongInput){ mainWindow->ui->tunnelsScrollArea->ensureWidgetVisible(controlWithWrongInput); controlWithWrongInput->setFocus(); } mainWindow->showTunnelsPage(); } + +void TunnelPane::hideWrongInputLabel() const { + bool redVisible = wrongInputPane->isVisible(); + wrongInputPane->setVisible(false); + if(redVisible)mainWindow->adjustSizesAccordingToWrongLabel(); + +} diff --git a/qt/i2pd_qt/TunnelPane.h b/qt/i2pd_qt/TunnelPane.h index 3a647635..d14ba8d0 100644 --- a/qt/i2pd_qt/TunnelPane.h +++ b/qt/i2pd_qt/TunnelPane.h @@ -35,7 +35,7 @@ public: void deleteTunnelForm(); - void hideWrongInputLabel() const { wrongInputPane->setVisible(false); } + void hideWrongInputLabel() const; void highlightWrongInput(QString warningText, QWidget* controlWithWrongInput); virtual ServerTunnelPane* asServerTunnelPane()=0; diff --git a/qt/i2pd_qt/mainwindow.cpp b/qt/i2pd_qt/mainwindow.cpp index aba00cec..6d7e8b20 100644 --- a/qt/i2pd_qt/mainwindow.cpp +++ b/qt/i2pd_qt/mainwindow.cpp @@ -75,6 +75,7 @@ MainWindow::MainWindow(QWidget *parent) : int w = 683; int h = 3060; ui->settingsContents->setFixedSize(w, h); + ui->settingsContents->setGeometry(QRect(0,0,w,h)); /* QPalette pal(palette()); @@ -86,8 +87,10 @@ MainWindow::MainWindow(QWidget *parent) : pal.setColor(QPalette::Background, Qt::red); ui->wrongInputLabel->setAutoFillBackground(true); ui->wrongInputLabel->setPalette(pal); + ui->wrongInputLabel->setMaximumHeight(ui->wrongInputLabel->sizeHint().height()); ui->wrongInputLabel->setVisible(false); + settingsTitleLabelNominalHeight = ui->settingsTitleLabel->height(); #ifndef ANDROID createActions(); createTrayIcon(); @@ -629,7 +632,9 @@ void MainWindow::loadAllConfigs(){ /** returns false iff not valid items present and save was aborted */ bool MainWindow::saveAllConfigs(){ QString cannotSaveSettings = QApplication::tr("Cannot save settings."); + bool redVisible = ui->wrongInputLabel->isVisible(); ui->wrongInputLabel->setVisible(false); + if(redVisible)adjustSizesAccordingToWrongLabel(); programOptionsWriterCurrentSection=""; /*if(!logFileNameOption->lineEdit->text().trimmed().isEmpty())logOption->optionValue=boost::any(std::string("file")); @@ -851,9 +856,34 @@ void MainWindow::backClickedFromChild() { showStatusPage(statusPage); } +void MainWindow::adjustSizesAccordingToWrongLabel() { + if(ui->wrongInputLabel->isVisible()) { + int dh = ui->wrongInputLabel->height()+ui->verticalLayout_7->layout()->spacing(); + ui->verticalLayout_7->invalidate(); + ui->wrongInputLabel->adjustSize(); + ui->stackedWidget->adjustSize(); + ui->stackedWidget->setFixedHeight(531-dh); + ui->settingsPage->setFixedHeight(531-dh); + ui->verticalLayoutWidget_4->setGeometry(QRect(0, 0, 711, 531-dh)); + ui->stackedWidget->setFixedHeight(531-dh); + ui->settingsScrollArea->setFixedHeight(531-dh-settingsTitleLabelNominalHeight-ui->verticalLayout_4->spacing()); + }else{ + ui->verticalLayout_7->invalidate(); + ui->wrongInputLabel->adjustSize(); + ui->stackedWidget->adjustSize(); + ui->stackedWidget->setFixedHeight(531); + ui->settingsPage->setFixedHeight(531); + ui->verticalLayoutWidget_4->setGeometry(QRect(0, 0, 711, 531)); + ui->stackedWidget->setFixedHeight(531); + ui->settingsScrollArea->setFixedHeight(531-settingsTitleLabelNominalHeight-ui->verticalLayout_4->spacing()); + } +} + void MainWindow::highlightWrongInput(QString warningText, QWidget* widgetToFocus) { + bool redVisible = ui->wrongInputLabel->isVisible(); ui->wrongInputLabel->setVisible(true); ui->wrongInputLabel->setText(warningText); + if(!redVisible)adjustSizesAccordingToWrongLabel(); if(widgetToFocus){ui->settingsScrollArea->ensureWidgetVisible(widgetToFocus);widgetToFocus->setFocus();} showSettingsPage(); } diff --git a/qt/i2pd_qt/mainwindow.h b/qt/i2pd_qt/mainwindow.h index df8ab1e8..1b55a6da 100644 --- a/qt/i2pd_qt/mainwindow.h +++ b/qt/i2pd_qt/mainwindow.h @@ -387,7 +387,6 @@ public: //#endif private: - enum StatusPage {main_page, commands, local_destinations, leasesets, tunnels, transit_tunnels, transports, i2p_tunnels, sam_sessions}; private slots: @@ -446,7 +445,9 @@ public: Ui::StatusButtonsForm* statusButtonsUI; Ui::routerCommandsWidget* routerCommandsUI; Ui::GeneralSettingsContentsForm* uiSettings; + void adjustSizesAccordingToWrongLabel(); private: + int settingsTitleLabelNominalHeight; TextBrowserTweaked1 * textBrowser; QWidget * routerCommandsParent; PageWithBackButton * pageWithBackButton; diff --git a/qt/i2pd_qt/mainwindow.ui b/qt/i2pd_qt/mainwindow.ui index b4aaed1d..70c3d361 100644 --- a/qt/i2pd_qt/mainwindow.ui +++ b/qt/i2pd_qt/mainwindow.ui @@ -169,6 +169,9 @@ + + QLayout::SetMinAndMaxSize + @@ -606,7 +609,7 @@ - + 0 0 @@ -624,11 +627,11 @@ - 0 + 1 - + 0 0 @@ -670,7 +673,7 @@ - + 0 0 @@ -686,7 +689,7 @@ - QLayout::SetMaximumSize + QLayout::SetMinAndMaxSize @@ -702,6 +705,12 @@ + + + 0 + 0 + + Qt::ScrollBarAlwaysOn @@ -869,7 +878,7 @@ - + 0 0 From 21de4709eab6c06a84f4122ced003be7ffd3ca58 Mon Sep 17 00:00:00 2001 From: hypnosis-i2p Date: Fri, 8 Sep 2017 23:16:54 +0800 Subject: [PATCH 2/5] ui beautifying more --- qt/i2pd_qt/mainwindow.cpp | 6 ++++++ qt/i2pd_qt/mainwindow.ui | 4 ++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/qt/i2pd_qt/mainwindow.cpp b/qt/i2pd_qt/mainwindow.cpp index 6d7e8b20..217ec958 100644 --- a/qt/i2pd_qt/mainwindow.cpp +++ b/qt/i2pd_qt/mainwindow.cpp @@ -867,6 +867,9 @@ void MainWindow::adjustSizesAccordingToWrongLabel() { ui->verticalLayoutWidget_4->setGeometry(QRect(0, 0, 711, 531-dh)); ui->stackedWidget->setFixedHeight(531-dh); ui->settingsScrollArea->setFixedHeight(531-dh-settingsTitleLabelNominalHeight-ui->verticalLayout_4->spacing()); + ui->settingsTitleLabel->setFixedHeight(settingsTitleLabelNominalHeight); + ui->tunnelsScrollArea->setFixedHeight(531-dh-settingsTitleLabelNominalHeight-ui->horizontalLayout_42->geometry().height()-2*ui->verticalLayout_4->spacing()); + ui->tunnelsTitleLabel->setFixedHeight(settingsTitleLabelNominalHeight); }else{ ui->verticalLayout_7->invalidate(); ui->wrongInputLabel->adjustSize(); @@ -876,6 +879,9 @@ void MainWindow::adjustSizesAccordingToWrongLabel() { ui->verticalLayoutWidget_4->setGeometry(QRect(0, 0, 711, 531)); ui->stackedWidget->setFixedHeight(531); ui->settingsScrollArea->setFixedHeight(531-settingsTitleLabelNominalHeight-ui->verticalLayout_4->spacing()); + ui->settingsTitleLabel->setFixedHeight(settingsTitleLabelNominalHeight); + ui->tunnelsScrollArea->setFixedHeight(531-settingsTitleLabelNominalHeight-ui->horizontalLayout_42->geometry().height()-2*ui->verticalLayout_4->spacing()); + ui->tunnelsTitleLabel->setFixedHeight(settingsTitleLabelNominalHeight); } } diff --git a/qt/i2pd_qt/mainwindow.ui b/qt/i2pd_qt/mainwindow.ui index 70c3d361..9b463f44 100644 --- a/qt/i2pd_qt/mainwindow.ui +++ b/qt/i2pd_qt/mainwindow.ui @@ -627,7 +627,7 @@ - 1 + 2 @@ -759,7 +759,7 @@ QLayout::SetMinAndMaxSize - + 15 From 1947be4957bc2bbb1ab5fccb1fc3e7a2bb3c519e Mon Sep 17 00:00:00 2001 From: hypnosis-i2p Date: Fri, 8 Sep 2017 23:25:25 +0800 Subject: [PATCH 3/5] fixed tunnels invalid ui data handling --- qt/i2pd_qt/TunnelPane.cpp | 2 +- qt/i2pd_qt/mainwindow.cpp | 8 ++++++++ qt/i2pd_qt/mainwindow.h | 1 + 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/qt/i2pd_qt/TunnelPane.cpp b/qt/i2pd_qt/TunnelPane.cpp index a8baed6f..0cd7b741 100644 --- a/qt/i2pd_qt/TunnelPane.cpp +++ b/qt/i2pd_qt/TunnelPane.cpp @@ -186,7 +186,7 @@ void TunnelPane::appendControlsForI2CPParameters(I2CPParameters& i2cpParameters, void TunnelPane::updated() { std::string oldName=tunnelConfig->getName(); //validate and show red if invalid - if(!applyDataFromUIToTunnelConfig())return; + if(!mainWindow->applyTunnelsUiToConfigs())return; tunnelsPageUpdateListener->updated(oldName, tunnelConfig); } diff --git a/qt/i2pd_qt/mainwindow.cpp b/qt/i2pd_qt/mainwindow.cpp index 217ec958..bf26964d 100644 --- a/qt/i2pd_qt/mainwindow.cpp +++ b/qt/i2pd_qt/mainwindow.cpp @@ -756,6 +756,14 @@ void MainWindow::deleteTunnelForms() { tunnelPanes.clear(); } +bool MainWindow::applyTunnelsUiToConfigs() { + for(std::list::iterator it = tunnelPanes.begin(); it != tunnelPanes.end(); ++it) { + TunnelPane* tp = *it; + if(!tp->applyDataFromUIToTunnelConfig())return false; + } + return true; +} + void MainWindow::reloadTunnelsConfigAndUI(std::string tunnelNameToFocus) { deleteTunnelForms(); for (std::map::iterator it=tunnelConfigs.begin(); it!=tunnelConfigs.end(); ++it) { diff --git a/qt/i2pd_qt/mainwindow.h b/qt/i2pd_qt/mainwindow.h index 1b55a6da..3b65d3c2 100644 --- a/qt/i2pd_qt/mainwindow.h +++ b/qt/i2pd_qt/mainwindow.h @@ -446,6 +446,7 @@ public: Ui::routerCommandsWidget* routerCommandsUI; Ui::GeneralSettingsContentsForm* uiSettings; void adjustSizesAccordingToWrongLabel(); + bool applyTunnelsUiToConfigs(); private: int settingsTitleLabelNominalHeight; TextBrowserTweaked1 * textBrowser; From cd3f274763f2fba12f5eaeecb1d13ae35f0b4107 Mon Sep 17 00:00:00 2001 From: hypnosis-i2p Date: Sat, 9 Sep 2017 01:09:31 +0800 Subject: [PATCH 4/5] fixed tunnels invalid ui data handling 2 --- qt/i2pd_qt/TunnelPane.cpp | 1 + qt/i2pd_qt/TunnelPane.h | 1 - qt/i2pd_qt/mainwindow.cpp | 17 ++++++++++------- qt/i2pd_qt/mainwindow.h | 1 + 4 files changed, 12 insertions(+), 8 deletions(-) diff --git a/qt/i2pd_qt/TunnelPane.cpp b/qt/i2pd_qt/TunnelPane.cpp index 0cd7b741..b3cc3bef 100644 --- a/qt/i2pd_qt/TunnelPane.cpp +++ b/qt/i2pd_qt/TunnelPane.cpp @@ -186,6 +186,7 @@ void TunnelPane::appendControlsForI2CPParameters(I2CPParameters& i2cpParameters, void TunnelPane::updated() { std::string oldName=tunnelConfig->getName(); //validate and show red if invalid + hideWrongInputLabel(); if(!mainWindow->applyTunnelsUiToConfigs())return; tunnelsPageUpdateListener->updated(oldName, tunnelConfig); } diff --git a/qt/i2pd_qt/TunnelPane.h b/qt/i2pd_qt/TunnelPane.h index d14ba8d0..a7012810 100644 --- a/qt/i2pd_qt/TunnelPane.h +++ b/qt/i2pd_qt/TunnelPane.h @@ -95,7 +95,6 @@ protected: public: //returns false when invalid data at UI virtual bool applyDataFromUIToTunnelConfig() { - hideWrongInputLabel(); tunnelConfig->setName(nameLineEdit->text().toStdString()); tunnelConfig->setType(readTunnelTypeComboboxData()); I2CPParameters& i2cpParams=tunnelConfig->getI2cpParameters(); diff --git a/qt/i2pd_qt/mainwindow.cpp b/qt/i2pd_qt/mainwindow.cpp index bf26964d..93da099a 100644 --- a/qt/i2pd_qt/mainwindow.cpp +++ b/qt/i2pd_qt/mainwindow.cpp @@ -632,10 +632,6 @@ void MainWindow::loadAllConfigs(){ /** returns false iff not valid items present and save was aborted */ bool MainWindow::saveAllConfigs(){ QString cannotSaveSettings = QApplication::tr("Cannot save settings."); - bool redVisible = ui->wrongInputLabel->isVisible(); - ui->wrongInputLabel->setVisible(false); - if(redVisible)adjustSizesAccordingToWrongLabel(); - programOptionsWriterCurrentSection=""; /*if(!logFileNameOption->lineEdit->text().trimmed().isEmpty())logOption->optionValue=boost::any(std::string("file")); else logOption->optionValue=boost::any(std::string("stdout"));*/ @@ -684,15 +680,22 @@ void FolderChooserItem::pushButtonReleased() { } void BaseStringItem::installListeners(MainWindow *mainWindow) { - QObject::connect(lineEdit, SIGNAL(textChanged(const QString &)), mainWindow, SLOT(saveAllConfigs())); + QObject::connect(lineEdit, SIGNAL(textChanged(const QString &)), mainWindow, SLOT(updated())); } void ComboBoxItem::installListeners(MainWindow *mainWindow) { - QObject::connect(comboBox, SIGNAL(currentIndexChanged(int)), mainWindow, SLOT(saveAllConfigs())); + QObject::connect(comboBox, SIGNAL(currentIndexChanged(int)), mainWindow, SLOT(updated())); } void CheckBoxItem::installListeners(MainWindow *mainWindow) { - QObject::connect(checkBox, SIGNAL(stateChanged(int)), mainWindow, SLOT(saveAllConfigs())); + QObject::connect(checkBox, SIGNAL(stateChanged(int)), mainWindow, SLOT(updated())); } +void MainWindow::updated() { + ui->wrongInputLabel->setVisible(false); + adjustSizesAccordingToWrongLabel(); + + applyTunnelsUiToConfigs(); + saveAllConfigs(); +} void MainWindowItem::installListeners(MainWindow *mainWindow) {} diff --git a/qt/i2pd_qt/mainwindow.h b/qt/i2pd_qt/mainwindow.h index 3b65d3c2..7e55a65f 100644 --- a/qt/i2pd_qt/mainwindow.h +++ b/qt/i2pd_qt/mainwindow.h @@ -390,6 +390,7 @@ private: enum StatusPage {main_page, commands, local_destinations, leasesets, tunnels, transit_tunnels, transports, i2p_tunnels, sam_sessions}; private slots: + void updated(); void handleQuitButton(); void handleGracefulQuitButton(); From d4e16881ff65a4c933ef53a023bf8b25ac1638ca Mon Sep 17 00:00:00 2001 From: hypnosis-i2p Date: Sat, 9 Sep 2017 01:13:42 +0800 Subject: [PATCH 5/5] fixed tunnels invalid ui data handling 3 --- qt/i2pd_qt/TunnelPane.cpp | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/qt/i2pd_qt/TunnelPane.cpp b/qt/i2pd_qt/TunnelPane.cpp index b3cc3bef..fb840276 100644 --- a/qt/i2pd_qt/TunnelPane.cpp +++ b/qt/i2pd_qt/TunnelPane.cpp @@ -200,6 +200,7 @@ void TunnelPane::deleteButtonReleased() { switch (ret) { case QMessageBox::Ok: // OK was clicked + hideWrongInputLabel(); tunnelsPageUpdateListener->needsDeleting(tunnelConfig->getName()); break; case QMessageBox::Cancel: @@ -232,10 +233,9 @@ void TunnelPane::deleteTunnelForm() { } void TunnelPane::highlightWrongInput(QString warningText, QWidget* controlWithWrongInput) { - bool redVisible = wrongInputPane->isVisible(); wrongInputPane->setVisible(true); wrongInputLabel->setText(warningText); - if(!redVisible)mainWindow->adjustSizesAccordingToWrongLabel(); + mainWindow->adjustSizesAccordingToWrongLabel(); if(controlWithWrongInput){ mainWindow->ui->tunnelsScrollArea->ensureWidgetVisible(controlWithWrongInput); controlWithWrongInput->setFocus(); @@ -244,8 +244,6 @@ void TunnelPane::highlightWrongInput(QString warningText, QWidget* controlWithWr } void TunnelPane::hideWrongInputLabel() const { - bool redVisible = wrongInputPane->isVisible(); wrongInputPane->setVisible(false); - if(redVisible)mainWindow->adjustSizesAccordingToWrongLabel(); - + mainWindow->adjustSizesAccordingToWrongLabel(); }