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