From e81f7714f97ca46fa2c6745210d98eccaaf83fbf Mon Sep 17 00:00:00 2001 From: arcan1s Date: Thu, 10 Jul 2014 13:48:21 +0400 Subject: [PATCH] added icons changes in the project architecture --- CHANGELOG | 4 +- sources/CMakeLists.txt | 12 +++--- sources/gui/CMakeLists.txt | 2 +- sources/gui/resources/resources.qrc | 6 --- sources/gui/src/mainwindow.cpp | 38 +++++++++++++++++- sources/gui/src/mainwindow.h | 1 + sources/gui/src/mainwindow.ui | 16 +++++--- sources/plasmoid/CMakeLists.txt | 5 ++- sources/plasmoid/netctl.cpp | 13 ++++-- sources/{icons => resources}/CMakeLists.txt | 0 .../{icons => resources}/icon-plasmoid.png | Bin sources/{icons => resources}/icon.png | Bin .../network-idle-64x64.png | Bin .../network-offline-64x64.png | Bin sources/resources/resources.qrc | 10 +++++ .../resources/translations/english.ts | 0 .../resources/translations/russian.ts | 0 sources/resources/wifi.png | Bin 0 -> 4930 bytes 18 files changed, 82 insertions(+), 25 deletions(-) delete mode 100644 sources/gui/resources/resources.qrc rename sources/{icons => resources}/CMakeLists.txt (100%) rename sources/{icons => resources}/icon-plasmoid.png (100%) rename sources/{icons => resources}/icon.png (100%) rename sources/{icons => resources}/network-idle-64x64.png (100%) rename sources/{icons => resources}/network-offline-64x64.png (100%) create mode 100644 sources/resources/resources.qrc rename sources/{gui => }/resources/translations/english.ts (100%) rename sources/{gui => }/resources/translations/russian.ts (100%) create mode 100644 sources/resources/wifi.png diff --git a/CHANGELOG b/CHANGELOG index 4ee9b3d..a484197 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,15 +1,17 @@ Ver.1.2.0: ++ [all] added icons + [gui] added suppoort of macvlan + [gui] added ability to remove profile + [gui] added support of hidden wifi network + [gui] added contextual menu to tables +* [all] small changes in the project architecture * [plasmoid] edited configuration interface Ver.1.1.0 (netctl-1.7 update): + [gui] added frequency + [plasmoid] added menu title -* [gui] changed definition if profile is enabled] * [dataengine] changed definition if profile is enabled +* [gui] changed definition if profile is enabled Ver.1.0.6: * [gui] fix error checking diff --git a/sources/CMakeLists.txt b/sources/CMakeLists.txt index ed3dbf6..9cd01a4 100644 --- a/sources/CMakeLists.txt +++ b/sources/CMakeLists.txt @@ -19,6 +19,9 @@ option (USE_QT5 "Use Qt5 instead of Qt4" ON) option (BUILD_GUI "Build GUI" ON) option (BUILD_DATAENGINE "Build data engine" ON) option (BUILD_PLASMOID "Build plasmoid" ON) +if (BUILD_PLASMOID) + set (BUILD_DATAENGINE ON) +endif () # flags if (CMAKE_COMPILER_IS_GNUCXX) @@ -30,12 +33,11 @@ else () message (STATUS "Unknown compiler") endif () -add_subdirectory (icons) - -if (BUILD_PLASMOID) - set (BUILD_DATAENGINE ON) -endif () +# resources +set (PROJECT_RESOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/resources) +add_subdirectory (${PROJECT_RESOURCE_DIR}) +# components if (BUILD_GUI) add_subdirectory (gui) endif () diff --git a/sources/gui/CMakeLists.txt b/sources/gui/CMakeLists.txt index 78fb3cc..dca2880 100644 --- a/sources/gui/CMakeLists.txt +++ b/sources/gui/CMakeLists.txt @@ -5,7 +5,7 @@ message (STATUS "Subproject ${SUBPROJECT}") # set directories set (SUBPROJECT_BINARY_DIR bin) set (SUBPROJECT_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/src) -set (SUBPROJECT_RESOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/resources) +set (SUBPROJECT_RESOURCE_DIR ${PROJECT_RESOURCE_DIR}) set (SUBPROJECT_TRANSLATION_DIR ${SUBPROJECT_RESOURCE_DIR}/translations) # executable path set (EXECUTABLE_OUTPUT_PATH ${SUBPROJECT_BINARY_DIR}) diff --git a/sources/gui/resources/resources.qrc b/sources/gui/resources/resources.qrc deleted file mode 100644 index e327f49..0000000 --- a/sources/gui/resources/resources.qrc +++ /dev/null @@ -1,6 +0,0 @@ - - - translations/english.qm - translations/russian.qm - - diff --git a/sources/gui/src/mainwindow.cpp b/sources/gui/src/mainwindow.cpp index df0a17f..76519c3 100644 --- a/sources/gui/src/mainwindow.cpp +++ b/sources/gui/src/mainwindow.cpp @@ -90,6 +90,7 @@ MainWindow::MainWindow(QWidget *parent, const bool defaultSettings, const bool d wpaCommand = new WpaSup(this, debug, configuration); createActions(); + setIconsToButtons(); updateTabs(ui->tabWidget->currentIndex()); ui->statusBar->showMessage(QApplication::translate("MainWindow", "Ready")); } @@ -158,7 +159,7 @@ void MainWindow::createActions() connect(ui->actionSettings, SIGNAL(triggered(bool)), settingsWin, SLOT(showWindow())); connect(ui->actionQuit, SIGNAL(triggered(bool)), this, SLOT(close())); - // main page events + // main tab events connect(ui->pushButton_mainRefresh, SIGNAL(clicked(bool)), this, SLOT(updateMainTab())); connect(ui->pushButton_mainRemove, SIGNAL(clicked(bool)), this, SLOT(mainTabRemoveProfile())); connect(ui->pushButton_mainEnable, SIGNAL(clicked(bool)), this, SLOT(mainTabEnableProfile())); @@ -176,7 +177,7 @@ void MainWindow::createActions() connect(ui->pushButton_profileLoad, SIGNAL(clicked(bool)), this, SLOT(profileTabLoadProfile())); connect(generalWid->connectionType, SIGNAL(currentIndexChanged(QString)), this, SLOT(profileTabChangeState(QString))); - // wifi page events + // wifi tab events connect(ui->pushButton_wifiRefresh, SIGNAL(clicked(bool)), this, SLOT(updateWifiTab())); connect(ui->pushButton_wifiStart, SIGNAL(clicked(bool)), this, SLOT(wifiTabStart())); connect(ui->tableWidget_wifi, SIGNAL(itemActivated(QTableWidgetItem *)), this, SLOT(wifiTabStart())); @@ -185,6 +186,32 @@ void MainWindow::createActions() } +void MainWindow::setIconsToButtons() +{ + // tab widget + ui->tabWidget->setTabIcon(0, QIcon(":icon")); + ui->tabWidget->setTabIcon(1, QIcon::fromTheme("document-new")); + ui->tabWidget->setTabIcon(2, QIcon(":wifi")); + + // main tab + ui->pushButton_mainRefresh->setIcon(QIcon::fromTheme("stock-refresh")); + ui->pushButton_mainRemove->setIcon(QIcon::fromTheme("edit-delete")); +// ui->pushButton_mainEnable->setIcon(QIcon("")); +// ui->pushButton_mainRestart->setIcon(QIcon("")); +// ui->pushButton_mainStart->setIcon(QIcon("")); + + // profile tab + ui->pushButton_profileClear->setIcon(QIcon::fromTheme("edit-clear")); + ui->pushButton_profileSave->setIcon(QIcon::fromTheme("document-save")); + ui->pushButton_profileLoad->setIcon(QIcon::fromTheme("document-open")); + + + // wifi tab + ui->pushButton_wifiRefresh->setIcon(QIcon::fromTheme("stock-refresh")); +// ui->pushButton_wifiStart->setIcon(QIcon("")); +} + + // window slots void MainWindow::updateTabs(const int tab) { @@ -317,12 +344,17 @@ void MainWindow::mainTabContextualMenu(const QPoint &pos) // create menu QMenu menu(this); QAction *refreshTable = menu.addAction(QApplication::translate("MainWindow", "Refresh")); + refreshTable->setIcon(QIcon::fromTheme("stock-refresh")); menu.addSeparator(); QAction *startProfile = menu.addAction(QApplication::translate("MainWindow", "Start profile")); +// startProfile->setIcon(QIcon("")); QAction *restartProfile = menu.addAction(QApplication::translate("MainWindow", "Restart profile")); +// restartProfile->setIcon(QIcon("")); QAction *enableProfile = menu.addAction(QApplication::translate("MainWindow", "Enable profile")); +// enableProfile->setIcon(QIcon("")); menu.addSeparator(); QAction *removeProfile = menu.addAction(QApplication::translate("MainWindow", "Remove profile")); + removeProfile->setIcon(QIcon::fromTheme("edit-delete")); // set text QString item = ui->tableWidget_main->item(ui->tableWidget_main->currentItem()->row(), 2)->text(); @@ -961,8 +993,10 @@ void MainWindow::wifiTabContextualMenu(const QPoint &pos) // create menu QMenu menu(this); QAction *refreshTable = menu.addAction(QApplication::translate("MainWindow", "Refresh")); + refreshTable->setIcon(QIcon::fromTheme("stock-refresh")); menu.addSeparator(); QAction *startWifi = menu.addAction(QApplication::translate("MainWindow", "Start WiFi")); +// startWifi->setIcon(QIcon("")); // set text QString item = ui->tableWidget_wifi->item(ui->tableWidget_wifi->currentItem()->row(), 1)->text(); diff --git a/sources/gui/src/mainwindow.h b/sources/gui/src/mainwindow.h index a076167..350db88 100644 --- a/sources/gui/src/mainwindow.h +++ b/sources/gui/src/mainwindow.h @@ -109,6 +109,7 @@ private: bool checkExternalApps(const QString apps); bool checkState(const QString state, const QString item); void createActions(); + void setIconsToButtons(); bool debug; // configuration QMap configuration; diff --git a/sources/gui/src/mainwindow.ui b/sources/gui/src/mainwindow.ui index c94ba33..4b82b90 100644 --- a/sources/gui/src/mainwindow.ui +++ b/sources/gui/src/mainwindow.ui @@ -6,8 +6,8 @@ 0 0 - 489 - 517 + 487 + 515 @@ -203,8 +203,8 @@ 0 0 - 457 - 359 + 96 + 26 @@ -371,7 +371,7 @@ 0 0 - 489 + 487 22 @@ -386,6 +386,9 @@ + + + Settings @@ -394,6 +397,9 @@ + + + Quit diff --git a/sources/plasmoid/CMakeLists.txt b/sources/plasmoid/CMakeLists.txt index bc0a132..1c1f081 100644 --- a/sources/plasmoid/CMakeLists.txt +++ b/sources/plasmoid/CMakeLists.txt @@ -1,6 +1,8 @@ # set project name set (SUBPROJECT plasma_applet_netctl) message (STATUS "Subproject ${SUBPROJECT}") +# find resources +set (RESOURCES ${PROJECT_RESOURCE_DIR}/resources.qrc) # find required libaries find_package (KDE4 REQUIRED) @@ -23,8 +25,9 @@ file (GLOB SUBPROJECT_UI *.ui) configure_file (${SUBPROJECT_DESKTOP_IN} ${CMAKE_CURRENT_BINARY_DIR}/${SUBPROJECT_DESKTOP}) # make +qt4_add_resources (QRC_SOURCES ${RESOURCES}) kde4_add_ui_files (SUBPROJECT_SOURCE ${SUBPROJECT_UI}) -kde4_add_plugin (${PLUGIN_NAME} ${SUBPROJECT_SOURCE}) +kde4_add_plugin (${PLUGIN_NAME} ${SUBPROJECT_SOURCE} ${QRC_SOURCES}) target_link_libraries (${PLUGIN_NAME} ${KDE4_PLASMA_LIBS} ${KDE4_KDEUI_LIBS} ${KDE4_KIO_LIBS}) # install diff --git a/sources/plasmoid/netctl.cpp b/sources/plasmoid/netctl.cpp index be927d6..2dec490 100644 --- a/sources/plasmoid/netctl.cpp +++ b/sources/plasmoid/netctl.cpp @@ -184,14 +184,14 @@ QList Netctl::contextualActions() if (status) { contextMenu[QString("start")]->setText(i18n("Start another profile")); contextMenu[QString("stop")]->setVisible(true); - contextMenu[QString("stop")]->setText(i18n("Stop ") + info[QString("name")]); + contextMenu[QString("stop")]->setText(i18n("Stop %1", info[QString("name")])); contextMenu[QString("restart")]->setVisible(true); - contextMenu[QString("restart")]->setText(i18n("Restart ") + info[QString("name")]); + contextMenu[QString("restart")]->setText(i18n("Restart %1", info[QString("name")])); contextMenu[QString("enable")]->setVisible(true); if (info[QString("status")].contains(QString("enabled"))) - contextMenu[QString("enable")]->setText(i18n("Disable ") + info[QString("name")]); + contextMenu[QString("enable")]->setText(i18n("Disable %1", info[QString("name")])); else - contextMenu[QString("enable")]->setText(i18n("Enable ") + info[QString("name")]); + contextMenu[QString("enable")]->setText(i18n("Enable %1", info[QString("name")])); } else { contextMenu[QString("start")]->setText(i18n("Start profile")); @@ -222,6 +222,7 @@ void Netctl::createActions() menuActions.append(contextMenu[QString("title")]); contextMenu[QString("start")] = new QAction(i18n("Start profile"), this); +// contextMenu[QString("start")]->setIcon(QIcon("")); startProfileMenu = new QMenu(NULL); contextMenu[QString("start")]->setMenu(startProfileMenu); connect(startProfileMenu, SIGNAL(triggered(QAction *)), this, @@ -229,18 +230,22 @@ void Netctl::createActions() menuActions.append(contextMenu[QString("start")]); contextMenu[QString("stop")] = new QAction(i18n("Stop profile"), this); +// contextMenu[QString("stop")]->setIcon(QIcon("")); connect(contextMenu[QString("stop")], SIGNAL(triggered(bool)), this, SLOT(stopProfileSlot())); menuActions.append(contextMenu[QString("stop")]); contextMenu[QString("restart")] = new QAction(i18n("Restart profile"), this); +// contextMenu[QString("restart")]->setIcon(QIcon("")); connect(contextMenu[QString("restart")], SIGNAL(triggered(bool)), this, SLOT(restartProfileSlot())); menuActions.append(contextMenu[QString("restart")]); contextMenu[QString("enable")] = new QAction(i18n("Enable profile"), this); +// contextMenu[QString("enable")]->setIcon(QIcon("")); connect(contextMenu[QString("enable")], SIGNAL(triggered(bool)), this, SLOT(enableProfileSlot())); menuActions.append(contextMenu[QString("enable")]); contextMenu[QString("wifi")] = new QAction(i18n("Show WiFi menu"), this); + contextMenu[QString("wifi")]->setIcon(QIcon(":wifi")); connect(contextMenu[QString("wifi")], SIGNAL(triggered(bool)), this, SLOT(showWifi())); menuActions.append(contextMenu[QString("wifi")]); } diff --git a/sources/icons/CMakeLists.txt b/sources/resources/CMakeLists.txt similarity index 100% rename from sources/icons/CMakeLists.txt rename to sources/resources/CMakeLists.txt diff --git a/sources/icons/icon-plasmoid.png b/sources/resources/icon-plasmoid.png similarity index 100% rename from sources/icons/icon-plasmoid.png rename to sources/resources/icon-plasmoid.png diff --git a/sources/icons/icon.png b/sources/resources/icon.png similarity index 100% rename from sources/icons/icon.png rename to sources/resources/icon.png diff --git a/sources/icons/network-idle-64x64.png b/sources/resources/network-idle-64x64.png similarity index 100% rename from sources/icons/network-idle-64x64.png rename to sources/resources/network-idle-64x64.png diff --git a/sources/icons/network-offline-64x64.png b/sources/resources/network-offline-64x64.png similarity index 100% rename from sources/icons/network-offline-64x64.png rename to sources/resources/network-offline-64x64.png diff --git a/sources/resources/resources.qrc b/sources/resources/resources.qrc new file mode 100644 index 0000000..20ef7fd --- /dev/null +++ b/sources/resources/resources.qrc @@ -0,0 +1,10 @@ + + + + translations/english.qm + translations/russian.qm + + icon.png + wifi.png + + diff --git a/sources/gui/resources/translations/english.ts b/sources/resources/translations/english.ts similarity index 100% rename from sources/gui/resources/translations/english.ts rename to sources/resources/translations/english.ts diff --git a/sources/gui/resources/translations/russian.ts b/sources/resources/translations/russian.ts similarity index 100% rename from sources/gui/resources/translations/russian.ts rename to sources/resources/translations/russian.ts diff --git a/sources/resources/wifi.png b/sources/resources/wifi.png new file mode 100644 index 0000000000000000000000000000000000000000..6f71c9f18c18e4bd07be3dd45ae54ab141f3a1b6 GIT binary patch literal 4930 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 literal 0 HcmV?d00001