├── CMakeLists.txt ├── COPYING ├── README.md ├── dbus └── org.freedesktop.Notifications.xml ├── resources ├── icons.qrc ├── images │ └── default.svg ├── nm-tray-autostart.desktop ├── nm-tray.conf └── nm-tray.desktop ├── src ├── connectioninfo.cpp ├── connectioninfo.h ├── connectioninfo.ui ├── icons.cpp ├── icons.h ├── log.cpp ├── log.h ├── main.cpp ├── menuview.cpp ├── menuview.h ├── nmlist.cpp ├── nmlist.h ├── nmlist.ui ├── nmmodel.cpp ├── nmmodel.h ├── nmmodel_p.h ├── nmproxy.cpp ├── nmproxy.h ├── translate.cpp ├── tray.cpp ├── tray.h ├── windowmenu.cpp └── windowmenu.h └── translations ├── nm-tray.ts ├── nm-tray_ca.ts ├── nm-tray_cs.ts ├── nm-tray_da.ts ├── nm-tray_de.ts ├── nm-tray_eo.ts ├── nm-tray_es.ts ├── nm-tray_et.ts ├── nm-tray_fa.ts ├── nm-tray_fi.ts ├── nm-tray_fr.ts ├── nm-tray_he.ts ├── nm-tray_hi.ts ├── nm-tray_hr.ts ├── nm-tray_hu.ts ├── nm-tray_is.ts ├── nm-tray_it.ts ├── nm-tray_ja.ts ├── nm-tray_lt.ts ├── nm-tray_nb_NO.ts ├── nm-tray_nl.ts ├── nm-tray_pa.ts ├── nm-tray_pl.ts ├── nm-tray_pt.ts ├── nm-tray_pt_BR.ts ├── nm-tray_ro.ts ├── nm-tray_ru.ts ├── nm-tray_sk.ts ├── nm-tray_sv.ts ├── nm-tray_ta.ts ├── nm-tray_tr.ts └── nm-tray_zh_Hans.ts /CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.6.0 FATAL_ERROR) 2 | 3 | project(nm-tray) 4 | 5 | cmake_policy(SET CMP0071 NEW) 6 | 7 | set(NM_TRAY_VERSION "0.5.1") 8 | 9 | set(QT_MIN_VERSION "6.6.2") 10 | set(KF6_MIN_VERSION "6.5.0") 11 | 12 | set(CMAKE_AUTOMOC on) 13 | set(CMAKE_AUTOUIC on) 14 | set(CMAKE_AUTORCC on) 15 | set(CMAKE_INCLUDE_CURRENT_DIR ON) 16 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra") 17 | 18 | find_package(Qt6 ${QT_MIN_VERSION} REQUIRED COMPONENTS 19 | Widgets 20 | Gui 21 | Network 22 | DBus 23 | 24 | LinguistTools 25 | ) 26 | find_package(KF6NetworkManagerQt ${KF6_MIN_VERSION} REQUIRED) 27 | include(GNUInstallDirs) 28 | 29 | set(TRANSLATION_DIR "${CMAKE_INSTALL_FULL_DATADIR}/${PROJECT_NAME}") 30 | add_definitions(-DQT_NO_SIGNALS_SLOTS_KEYWORDS "-DTRANSLATION_DIR=\"${TRANSLATION_DIR}\"" "-DNM_TRAY_VERSION=\"${NM_TRAY_VERSION}\"") 31 | if (NOT NM_TRAY_XDG_AUTOSTART_DIR) 32 | #Note: we need the default to be /etc... (not the ${CMAKE_INSTALL_PREFIX}/etc) 33 | set(NM_TRAY_XDG_AUTOSTART_DIR "${CMAKE_INSTALL_SYSCONFDIR}/xdg/autostart") 34 | endif () 35 | 36 | message(STATUS "Translations destination dir: ${TRANSLATION_DIR}") 37 | message(STATUS "Autostart .desktop entry destination dir: ${NM_TRAY_XDG_AUTOSTART_DIR}\n (can be overriden by setting the NM_TRAY_XDG_AUTOSTART_DIR cmake variable)") 38 | 39 | set(SRCS 40 | src/log.cpp 41 | src/icons.cpp 42 | src/nmmodel.cpp 43 | src/nmproxy.cpp 44 | src/connectioninfo.cpp 45 | src/nmlist.cpp 46 | src/menuview.cpp 47 | src/windowmenu.cpp 48 | src/tray.cpp 49 | src/translate.cpp 50 | src/main.cpp 51 | ) 52 | 53 | set(RESOURCES 54 | resources/icons.qrc 55 | ) 56 | 57 | file(GLOB TSS "translations/${PROJECT_NAME}_*.ts") 58 | if (UPDATE_TRANSLATIONS) 59 | message(WARNING "!! Disable updating translation after make (-DUPDATE_TRANSLATIONS=no) to avoid 'make clean' delete them !!") 60 | qt6_create_translation(QMS "translations/${PROJECT_NAME}.ts" ${TSS} "src") 61 | else () 62 | qt6_add_translation(QMS ${TSS}) 63 | endif() 64 | 65 | qt6_add_dbus_interface(SRCS 66 | dbus/org.freedesktop.Notifications.xml 67 | dbus/org.freedesktop.Notifications 68 | ) 69 | 70 | add_executable(nm-tray 71 | ${SRCS} 72 | ${QMS} 73 | ${RESOURCES} 74 | ) 75 | 76 | set_property(TARGET nm-tray PROPERTY CXX_STANDARD 17) 77 | set_property(TARGET nm-tray PROPERTY CXX_STANDARD_REQUIRED on) 78 | 79 | target_link_libraries(nm-tray 80 | Qt6::Widgets 81 | Qt6::Gui 82 | KF6::NetworkManagerQt 83 | ) 84 | 85 | if (WITH_MODEMMANAGER_SUPPORT) 86 | find_package(Qt6 ${QT_MIN_VERSION} REQUIRED COMPONENTS Xml) 87 | find_package(KF6ModemManagerQt ${KF6_MIN_VERSION} REQUIRED) 88 | target_link_libraries(nm-tray KF6::ModemManagerQt) 89 | endif() 90 | 91 | install(TARGETS nm-tray RUNTIME DESTINATION "${CMAKE_INSTALL_FULL_BINDIR}" COMPONENT runtime) 92 | install(FILES ${QMS} DESTINATION "${TRANSLATION_DIR}" COMPONENT translations) 93 | install(FILES "resources/nm-tray.desktop" DESTINATION "${CMAKE_INSTALL_FULL_DATAROOTDIR}/applications" COMPONENT data) 94 | install(FILES "resources/nm-tray-autostart.desktop" DESTINATION "${NM_TRAY_XDG_AUTOSTART_DIR}" COMPONENT data) 95 | install(FILES "resources/nm-tray.conf" DESTINATION "${CMAKE_INSTALL_FULL_DATADIR}/${PROJECT_NAME}" COMPONENT data) 96 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # nm-tray 2 | 3 | **nm-tray** is a simple [NetworkManager](https://wiki.gnome.org/Projects/NetworkManager) front end with information icon residing in system tray (like e.g. nm-applet). 4 | It's a pure Qt application. For interaction with *NetworkManager* it uses API provided by [**KF5::NetworkManagerQt**](https://projects.kde.org/projects/frameworks/networkmanager-qt) -> plain DBus communication. 5 | 6 | ## License 7 | 8 | This software is licensed under [GNU GPLv2 or later](https://www.gnu.org/licenses/old-licenses/gpl-2.0.html) 9 | 10 | ## Build example 11 | 12 | git clone https://github.com/palinek/nm-tray.git 13 | cd nm-tray 14 | mkdir build 15 | cd build 16 | cmake .. 17 | make 18 | ./nm-tray 19 | 20 | ## Packages 21 | 22 | ### arch 23 | For [arch users](https://www.archlinux.org/) there is an AUR package [nm-tray-git](https://aur.archlinux.org/packages/nm-tray-git/) (thanks to [pmattern](https://github.com/pmattern)). 24 | 25 | ### openSUSE 26 | nm-tray is in the official repository of [openSUSE](https://www.opensuse.org/) since Leap 15.0. There is a also a [git package](https://build.opensuse.org/package/show/X11:LXQt:git/nm-tray) in the [X11:LXQt:git](https://build.opensuse.org/project/show/X11:LXQt:git) devel project of OBS. 27 | 28 | ### debian 29 | Thanks to [agaida](https://github.com/agaida) nm-tray is now in official debian repositories ([nm-tray](https://packages.debian.org/sid/nm-tray)). 30 | 31 | ## Translations 32 | 33 | Thanks to [Weblate](https://weblate.org/) anyone can help us to localize nm-tray by using the [hosted weblate service](https://hosted.weblate.org/projects/nm-tray/translations/). 34 | -------------------------------------------------------------------------------- /dbus/org.freedesktop.Notifications.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /resources/icons.qrc: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | images/default.svg 5 | 6 | 7 | -------------------------------------------------------------------------------- /resources/images/default.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /resources/nm-tray-autostart.desktop: -------------------------------------------------------------------------------- 1 | [Desktop Entry] 2 | Type=Application 3 | Name=nm-tray 4 | TryExec=nm-tray 5 | Exec=nm-tray 6 | NotShowIn=KDE;GNOME; 7 | X-LXQt-Need-Tray=true 8 | -------------------------------------------------------------------------------- /resources/nm-tray.conf: -------------------------------------------------------------------------------- 1 | [General] 2 | connectionsEditor=xterm, -e, nmtui-edit 3 | enableNotifications=true 4 | -------------------------------------------------------------------------------- /resources/nm-tray.desktop: -------------------------------------------------------------------------------- 1 | [Desktop Entry] 2 | Type=Application 3 | Name=nm-tray 4 | Comment=NetworkManager frontend (tray icon) 5 | Icon=network-transmit 6 | TryExec=nm-tray 7 | Exec=nm-tray 8 | Categories=System;Monitor;Qt; 9 | -------------------------------------------------------------------------------- /src/connectioninfo.cpp: -------------------------------------------------------------------------------- 1 | /*COPYRIGHT_HEADER 2 | 3 | This file is a part of nm-tray. 4 | 5 | Copyright (c) 6 | 2015~now Palo Kisa 7 | 8 | nm-tray is free software; you can redistribute it and/or 9 | modify it under the terms of the GNU General Public License 10 | as published by the Free Software Foundation; either version 2 11 | of the License, or (at your option) any later version. 12 | 13 | This program is distributed in the hope that it will be useful, 14 | but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 | GNU General Public License for more details. 17 | 18 | You should have received a copy of the GNU General Public License 19 | along with this program; if not, write to the Free Software 20 | Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 21 | 22 | COPYRIGHT_HEADER*/ 23 | #include "connectioninfo.h" 24 | #include "ui_connectioninfo.h" 25 | #include "nmproxy.h" 26 | #include 27 | #include 28 | #include 29 | #include 30 | #include 31 | 32 | ConnectionInfo::ConnectionInfo(NmModel * model, QWidget *parent) 33 | : QDialog{parent} 34 | , ui{new Ui::ConnectionInfo} 35 | , mModel{model} 36 | , mActive{new NmProxy} 37 | , mSorted{new QSortFilterProxyModel} 38 | 39 | { 40 | setAttribute(Qt::WA_DeleteOnClose); 41 | ui->setupUi(this); 42 | 43 | mActive->setNmModel(mModel, NmModel::ActiveConnectionType); 44 | mSorted->setSortCaseSensitivity(Qt::CaseInsensitive); 45 | mSorted->sort(0); 46 | mSorted->setSourceModel(mActive.data()); 47 | for (int i = 0, row_cnt = mSorted->rowCount(); i < row_cnt; ++i) 48 | { 49 | addTab(mSorted->index(i, 0)); 50 | } 51 | 52 | connect(mSorted.data(), &QAbstractItemModel::rowsInserted, [this] (QModelIndex const & parent, int first, int last) { 53 | ui->tabWidget->setUpdatesEnabled(false); 54 | for (int i = first; i <= last; ++i) 55 | addTab(mSorted->index(i, 0, parent)); 56 | ui->tabWidget->setUpdatesEnabled(true); 57 | }); 58 | connect(mSorted.data(), &QAbstractItemModel::rowsAboutToBeRemoved, [this] (QModelIndex const & parent, int first, int last) { 59 | ui->tabWidget->setUpdatesEnabled(false); 60 | for (int i = first; i <= last; ++i) 61 | removeTab(mSorted->index(i, 0, parent)); 62 | ui->tabWidget->setUpdatesEnabled(true); 63 | }); 64 | connect(mSorted.data(), &QAbstractItemModel::dataChanged, [this] (const QModelIndex & topLeft, const QModelIndex & bottomRight, const QVector & /*roles*/) { 65 | ui->tabWidget->setUpdatesEnabled(false); 66 | for (auto const & i : QItemSelection{topLeft, bottomRight}.indexes()) 67 | changeTab(i); 68 | ui->tabWidget->setUpdatesEnabled(true); 69 | }); 70 | } 71 | 72 | ConnectionInfo::~ConnectionInfo() 73 | { 74 | } 75 | 76 | void ConnectionInfo::addTab(QModelIndex const & index) 77 | { 78 | QScrollArea * content = new QScrollArea; 79 | QLabel * l = new QLabel{mSorted->data(index, NmModel::ActiveConnectionInfoRole).toString()}; 80 | content->setWidget(l); 81 | //QTabWidget takes ownership of the page (if we will not take it back) 82 | ui->tabWidget->insertTab(index.row(), content, mSorted->data(index, NmModel::IconRole).value(), mSorted->data(index, NmModel::NameRole).toString()); 83 | } 84 | 85 | void ConnectionInfo::removeTab(QModelIndex const & index) 86 | { 87 | const int i = index.row(); 88 | QWidget * w = ui->tabWidget->widget(i); 89 | ui->tabWidget->removeTab(i); 90 | w->deleteLater(); 91 | } 92 | 93 | void ConnectionInfo::changeTab(QModelIndex const & index) 94 | { 95 | const int i = index.row(); 96 | QScrollArea * content = qobject_cast(ui->tabWidget->widget(i)); 97 | Q_ASSERT(nullptr != content); 98 | // Note: the text is HTML formatted and the QLabel probably creates some DOM internal represntation. 99 | // Should the DOM structure change, the QLabel will not update correctly upon the plain setText() 100 | content->setWidget(new QLabel{mSorted->data(index, NmModel::ActiveConnectionInfoRole).toString()}); 101 | ui->tabWidget->tabBar()->setTabText(i, mSorted->data(index, NmModel::NameRole).toString()); 102 | ui->tabWidget->tabBar()->setTabIcon(i, mSorted->data(index, NmModel::IconRole).value()); 103 | } 104 | -------------------------------------------------------------------------------- /src/connectioninfo.h: -------------------------------------------------------------------------------- 1 | /*COPYRIGHT_HEADER 2 | 3 | This file is a part of nm-tray. 4 | 5 | Copyright (c) 6 | 2015~now Palo Kisa 7 | 8 | nm-tray is free software; you can redistribute it and/or 9 | modify it under the terms of the GNU General Public License 10 | as published by the Free Software Foundation; either version 2 11 | of the License, or (at your option) any later version. 12 | 13 | This program is distributed in the hope that it will be useful, 14 | but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 | GNU General Public License for more details. 17 | 18 | You should have received a copy of the GNU General Public License 19 | along with this program; if not, write to the Free Software 20 | Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 21 | 22 | COPYRIGHT_HEADER*/ 23 | #ifndef CONNECTIONINFO_H 24 | #define CONNECTIONINFO_H 25 | 26 | #include 27 | 28 | namespace Ui { 29 | class ConnectionInfo; 30 | } 31 | 32 | class NmModel; 33 | class NmProxy; 34 | class QSortFilterProxyModel; 35 | 36 | class ConnectionInfo : public QDialog 37 | { 38 | Q_OBJECT 39 | 40 | public: 41 | explicit ConnectionInfo(NmModel * model, QWidget *parent = nullptr); 42 | ~ConnectionInfo(); 43 | 44 | private: 45 | void addTab(QModelIndex const & index); 46 | void removeTab(QModelIndex const & index); 47 | void changeTab(QModelIndex const & index); 48 | 49 | private: 50 | QScopedPointer ui; 51 | NmModel * mModel; 52 | QScopedPointer mActive; 53 | QScopedPointer mSorted; 54 | }; 55 | 56 | #endif // CONNECTIONINFO_H 57 | -------------------------------------------------------------------------------- /src/connectioninfo.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | ConnectionInfo 4 | 5 | 6 | 7 | 0 8 | 0 9 | 570 10 | 614 11 | 12 | 13 | 14 | Connection information 15 | 16 | 17 | 18 | 19 | 20 | -1 21 | 22 | 23 | 24 | 32 25 | 32 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /src/icons.cpp: -------------------------------------------------------------------------------- 1 | /*COPYRIGHT_HEADER 2 | 3 | This file is a part of nm-tray. 4 | 5 | Copyright (c) 6 | 2015~now Palo Kisa 7 | 8 | nm-tray is free software; you can redistribute it and/or 9 | modify it under the terms of the GNU General Public License 10 | as published by the Free Software Foundation; either version 2 11 | of the License, or (at your option) any later version. 12 | 13 | This program is distributed in the hope that it will be useful, 14 | but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 | GNU General Public License for more details. 17 | 18 | You should have received a copy of the GNU General Public License 19 | along with this program; if not, write to the Free Software 20 | Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 21 | 22 | COPYRIGHT_HEADER*/ 23 | #include "icons.h" 24 | 25 | #include 26 | #include 27 | 28 | namespace icons 29 | { 30 | namespace 31 | { 32 | class FallbackIcon : public QIcon 33 | { 34 | public: 35 | FallbackIcon() 36 | { 37 | static const QIcon fallback{QStringLiteral(":/images/default.svg")}; 38 | // Note: using pixmap icon as the vector/svg one is not correctly transferred via the 39 | // D-Bus StatusNotifierItem interface 40 | addPixmap(fallback.pixmap({16, 16})); 41 | addPixmap(fallback.pixmap({32, 32})); 42 | addPixmap(fallback.pixmap({64, 64})); 43 | addPixmap(fallback.pixmap({128, 128})); 44 | addPixmap(fallback.pixmap({256, 256})); 45 | } 46 | }; 47 | } 48 | 49 | QIcon getIcon(Icon ico, bool useSymbolic) 50 | { 51 | // final, bundled fallback 52 | static const FallbackIcon fallback; 53 | static const QStringList i_empty; 54 | QStringList const * icon_names = &i_empty; 55 | switch (ico) 56 | { 57 | case NETWORK_OFFLINE: 58 | static const QStringList i_network_offline = { QStringLiteral("network-offline") }; 59 | icon_names = &i_network_offline; 60 | break; 61 | case NETWORK_WIRED: 62 | static const QStringList i_network_wired = { QStringLiteral("network-wired") }; 63 | icon_names = &i_network_wired; 64 | break; 65 | case NETWORK_WIRED_DISCONNECTED: 66 | static const QStringList i_network_wired_disconnected = { QStringLiteral("network-wired-disconnected") }; 67 | icon_names = &i_network_wired_disconnected; 68 | break; 69 | case NETWORK_WIFI_DISCONNECTED: 70 | static const QStringList i_wifi_disconnected = { QStringLiteral("network-wireless-disconnected") }; 71 | icon_names = &i_wifi_disconnected; 72 | break; 73 | case NETWORK_WIFI_ACQUIRING: 74 | static const QStringList i_wifi_acquiring = { QStringLiteral("network-wireless-acquiring") }; 75 | icon_names = &i_wifi_acquiring; 76 | break; 77 | case NETWORK_WIFI_NONE: 78 | static const QStringList i_wifi_none = { QStringLiteral("network-wireless-signal-none"), QStringLiteral("network-wireless-connected-00") }; 79 | icon_names = &i_wifi_none; 80 | break; 81 | case NETWORK_WIFI_WEAK: 82 | static const QStringList i_wifi_weak = { QStringLiteral("network-wireless-signal-weak"), QStringLiteral("network-wireless-connected-25") }; 83 | icon_names = &i_wifi_weak; 84 | break; 85 | case NETWORK_WIFI_OK: 86 | static const QStringList i_wifi_ok = { QStringLiteral("network-wireless-signal-ok"), QStringLiteral("network-wireless-connected-50") }; 87 | icon_names = &i_wifi_ok; 88 | break; 89 | case NETWORK_WIFI_GOOD: 90 | static const QStringList i_wifi_good = { QStringLiteral("network-wireless-signal-good"), QStringLiteral("network-wireless-connected-75") }; 91 | icon_names = &i_wifi_good; 92 | break; 93 | case NETWORK_WIFI_EXCELENT: 94 | static const QStringList i_wifi_excelent = { QStringLiteral("network-wireless-signal-excellent"), QStringLiteral("network-wireless-connected-100") }; 95 | icon_names = &i_wifi_excelent; 96 | break; 97 | case NETWORK_VPN: 98 | static const QStringList i_network_vpn = { QStringLiteral("network-vpn") }; 99 | icon_names = &i_network_vpn; 100 | break; 101 | case SECURITY_LOW: 102 | static const QStringList i_security_low = { QStringLiteral("security-low") }; 103 | icon_names = &i_security_low; 104 | break; 105 | case SECURITY_HIGH: 106 | static const QStringList i_security_high = { QStringLiteral("security-high") }; 107 | icon_names = &i_security_high; 108 | break; 109 | case PREFERENCES_NETWORK: 110 | static const QStringList i_preferences_network = { QStringLiteral("preferences-system-network") }; 111 | icon_names = &i_preferences_network; 112 | break; 113 | }; 114 | for (auto const & name : *icon_names) 115 | { 116 | QIcon icon{QIcon::fromTheme(useSymbolic ? name % QStringLiteral("-symbolic") : name)}; 117 | if (!icon.isNull()) 118 | return icon; 119 | } 120 | return QIcon::fromTheme(QStringLiteral("network-transmit"), fallback); 121 | } 122 | 123 | Icon wifiSignalIcon(const int signal) 124 | { 125 | if (0 >= signal) 126 | return icons::NETWORK_WIFI_NONE; 127 | else if (25 >= signal) 128 | return icons::NETWORK_WIFI_WEAK; 129 | else if (50 >= signal) 130 | return icons::NETWORK_WIFI_OK; 131 | else if (75 >= signal) 132 | return icons::NETWORK_WIFI_GOOD; 133 | else 134 | return icons::NETWORK_WIFI_EXCELENT; 135 | } 136 | } 137 | -------------------------------------------------------------------------------- /src/icons.h: -------------------------------------------------------------------------------- 1 | /*COPYRIGHT_HEADER 2 | 3 | This file is a part of nm-tray. 4 | 5 | Copyright (c) 6 | 2015~now Palo Kisa 7 | 8 | nm-tray is free software; you can redistribute it and/or 9 | modify it under the terms of the GNU General Public License 10 | as published by the Free Software Foundation; either version 2 11 | of the License, or (at your option) any later version. 12 | 13 | This program is distributed in the hope that it will be useful, 14 | but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 | GNU General Public License for more details. 17 | 18 | You should have received a copy of the GNU General Public License 19 | along with this program; if not, write to the Free Software 20 | Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 21 | 22 | COPYRIGHT_HEADER*/ 23 | #if !defined(ICONS_H) 24 | #define ICONS_H 25 | 26 | #include 27 | 28 | namespace icons 29 | { 30 | enum Icon { 31 | NETWORK_OFFLINE 32 | , NETWORK_WIRED 33 | , NETWORK_WIRED_DISCONNECTED 34 | , NETWORK_WIFI_ACQUIRING 35 | , NETWORK_WIFI_NONE 36 | , NETWORK_WIFI_WEAK 37 | , NETWORK_WIFI_OK 38 | , NETWORK_WIFI_GOOD 39 | , NETWORK_WIFI_EXCELENT 40 | , NETWORK_WIFI_DISCONNECTED 41 | , NETWORK_VPN 42 | 43 | , SECURITY_LOW 44 | , SECURITY_HIGH 45 | 46 | , PREFERENCES_NETWORK 47 | }; 48 | 49 | QIcon getIcon(Icon ico, bool useSymbolic); 50 | Icon wifiSignalIcon(const int signal); 51 | } 52 | 53 | #endif 54 | -------------------------------------------------------------------------------- /src/log.cpp: -------------------------------------------------------------------------------- 1 | /*COPYRIGHT_HEADER 2 | 3 | This file is a part of nm-tray. 4 | 5 | Copyright (c) 6 | 2015~now Palo Kisa 7 | 8 | nm-tray is free software; you can redistribute it and/or 9 | modify it under the terms of the GNU General Public License 10 | as published by the Free Software Foundation; either version 2 11 | of the License, or (at your option) any later version. 12 | 13 | This program is distributed in the hope that it will be useful, 14 | but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 | GNU General Public License for more details. 17 | 18 | You should have received a copy of the GNU General Public License 19 | along with this program; if not, write to the Free Software 20 | Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 21 | 22 | COPYRIGHT_HEADER*/ 23 | #include "log.h" 24 | #include 25 | 26 | #if defined(NDEBUG) 27 | Q_LOGGING_CATEGORY(NM_TRAY, "nm-tray", QtInfoMsg) 28 | #else 29 | Q_LOGGING_CATEGORY(NM_TRAY, "nm-tray") 30 | #endif 31 | 32 | -------------------------------------------------------------------------------- /src/log.h: -------------------------------------------------------------------------------- 1 | /*COPYRIGHT_HEADER 2 | 3 | This file is a part of nm-tray. 4 | 5 | Copyright (c) 6 | 2015~now Palo Kisa 7 | 8 | nm-tray is free software; you can redistribute it and/or 9 | modify it under the terms of the GNU General Public License 10 | as published by the Free Software Foundation; either version 2 11 | of the License, or (at your option) any later version. 12 | 13 | This program is distributed in the hope that it will be useful, 14 | but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 | GNU General Public License for more details. 17 | 18 | You should have received a copy of the GNU General Public License 19 | along with this program; if not, write to the Free Software 20 | Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 21 | 22 | COPYRIGHT_HEADER*/ 23 | #if !defined(LOG_H) 24 | #define LOG_H 25 | 26 | #include 27 | 28 | Q_DECLARE_LOGGING_CATEGORY(NM_TRAY) 29 | 30 | #endif //LOG_H 31 | 32 | -------------------------------------------------------------------------------- /src/main.cpp: -------------------------------------------------------------------------------- 1 | /*COPYRIGHT_HEADER 2 | 3 | This file is a part of nm-tray. 4 | 5 | Copyright (c) 6 | 2015~now Palo Kisa 7 | 8 | nm-tray is free software; you can redistribute it and/or 9 | modify it under the terms of the GNU General Public License 10 | as published by the Free Software Foundation; either version 2 11 | of the License, or (at your option) any later version. 12 | 13 | This program is distributed in the hope that it will be useful, 14 | but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 | GNU General Public License for more details. 17 | 18 | You should have received a copy of the GNU General Public License 19 | along with this program; if not, write to the Free Software 20 | Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 21 | 22 | COPYRIGHT_HEADER*/ 23 | #include 24 | 25 | #include "tray.h" 26 | 27 | #include "icons.h" 28 | 29 | int main(int argc, char * argv[]) 30 | { 31 | QApplication app{argc, argv}; 32 | app.setOrganizationName(QStringLiteral("nm-tray")); 33 | app.setApplicationName(QStringLiteral("nm-tray")); 34 | app.setWindowIcon(icons::getIcon(icons::PREFERENCES_NETWORK, true)); 35 | app.setQuitOnLastWindowClosed(false); 36 | 37 | Tray tray; 38 | 39 | return app.exec(); 40 | } 41 | -------------------------------------------------------------------------------- /src/menuview.cpp: -------------------------------------------------------------------------------- 1 | /*COPYRIGHT_HEADER 2 | 3 | This file is a part of nm-tray. 4 | 5 | Copyright (c) 6 | 2016~now Palo Kisa 7 | 8 | nm-tray is free software; you can redistribute it and/or 9 | modify it under the terms of the GNU General Public License 10 | as published by the Free Software Foundation; either version 2 11 | of the License, or (at your option) any later version. 12 | 13 | This program is distributed in the hope that it will be useful, 14 | but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 | GNU General Public License for more details. 17 | 18 | You should have received a copy of the GNU General Public License 19 | along with this program; if not, write to the Free Software 20 | Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 21 | 22 | COPYRIGHT_HEADER*/ 23 | 24 | #include "menuview.h" 25 | #include "nmmodel.h" 26 | 27 | #include 28 | #include 29 | #include 30 | #include 31 | #include 32 | #include 33 | #include 34 | 35 | namespace 36 | { 37 | class SingleActivateStyle : public QProxyStyle 38 | { 39 | public: 40 | using QProxyStyle::QProxyStyle; 41 | virtual int styleHint(StyleHint hint, const QStyleOption * option = 0, const QWidget * widget = 0, QStyleHintReturn * returnData = 0) const override 42 | { 43 | if(hint == QStyle::SH_ItemView_ActivateItemOnSingleClick) 44 | return 1; 45 | return QProxyStyle::styleHint(hint, option, widget, returnData); 46 | 47 | } 48 | }; 49 | 50 | class MultiIconDelegate : public QStyledItemDelegate 51 | { 52 | public: 53 | using QStyledItemDelegate::QStyledItemDelegate; 54 | void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const override 55 | { 56 | Q_ASSERT(index.isValid()); 57 | 58 | QStyleOptionViewItem opt = option; 59 | initStyleOption(&opt, index); 60 | 61 | //add the security overlay icon 62 | QIcon sec_icon = qvariant_cast(index.data(NmModel::IconSecurityRole)); 63 | if (!sec_icon.isNull()) 64 | { 65 | QPixmap res_pixmap = opt.icon.pixmap(opt.decorationSize); 66 | QPainter p{&res_pixmap}; 67 | QSize sec_size = res_pixmap.size(); 68 | sec_size /= 2; 69 | QPoint sec_pos = res_pixmap.rect().bottomRight(); 70 | sec_pos -= QPoint{sec_size.width(), sec_size.height()}; 71 | p.drawPixmap(sec_pos, sec_icon.pixmap(sec_size)); 72 | 73 | opt.icon = QIcon{res_pixmap}; 74 | 75 | } 76 | QStyle *style = option.widget ? option.widget->style() : QApplication::style(); 77 | style->drawControl(QStyle::CE_ItemViewItem, &opt, painter, option.widget); 78 | } 79 | }; 80 | 81 | } 82 | 83 | MenuView::MenuView(QAbstractItemModel * model, QWidget * parent /*= nullptr*/) 84 | : QListView(parent) 85 | , mProxy{new QSortFilterProxyModel{this}} 86 | , mMaxItemsToShow(10) 87 | , mCurrentReleaseButton{Qt::NoButton} 88 | { 89 | setEditTriggers(NoEditTriggers); 90 | setSizeAdjustPolicy(AdjustToContents); 91 | setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); 92 | setSelectionBehavior(SelectRows); 93 | setSelectionMode(NoSelection); 94 | setFrameShape(QFrame::HLine); 95 | setFrameShadow(QFrame::Plain); 96 | 97 | setStyle(new SingleActivateStyle); 98 | mProxy->setSourceModel(model); 99 | mProxy->setDynamicSortFilter(true); 100 | mProxy->setFilterRole(Qt::DisplayRole); 101 | mProxy->setFilterCaseSensitivity(Qt::CaseInsensitive); 102 | mProxy->setSortRole(Qt::DisplayRole); 103 | mProxy->setSortCaseSensitivity(Qt::CaseInsensitive); 104 | mProxy->sort(0); 105 | { 106 | QScopedPointer guard{selectionModel()}; 107 | setModel(mProxy); 108 | } 109 | { 110 | QScopedPointer guard{itemDelegate()}; 111 | setItemDelegate(new MultiIconDelegate{this}); 112 | } 113 | connect(this, &QAbstractItemView::activated, this, [this](const QModelIndex & index) { 114 | if (mCurrentReleaseButton == Qt::NoButton || mCurrentReleaseButton == Qt::LeftButton) 115 | emit activatedNoMiddleRight(index); 116 | }); 117 | } 118 | 119 | void MenuView::setFilter(QString const & filter) 120 | { 121 | mProxy->setFilterFixedString(filter); 122 | const int count = mProxy->rowCount(); 123 | if (0 < count) 124 | { 125 | if (count > mMaxItemsToShow) 126 | { 127 | setCurrentIndex(mProxy->index(mMaxItemsToShow - 1, 0)); 128 | verticalScrollBar()->triggerAction(QScrollBar::SliderToMinimum); 129 | } else 130 | { 131 | setCurrentIndex(mProxy->index(count - 1, 0)); 132 | } 133 | } 134 | } 135 | 136 | void MenuView::setMaxItemsToShow(int max) 137 | { 138 | mMaxItemsToShow = max; 139 | } 140 | 141 | void MenuView::activateCurrent() 142 | { 143 | QModelIndex const index = currentIndex(); 144 | if (index.isValid()) 145 | emit activated(index); 146 | } 147 | 148 | QSize MenuView::viewportSizeHint() const 149 | { 150 | const int count = mProxy->rowCount(); 151 | QSize s{0, 0}; 152 | if (0 < count) 153 | { 154 | const bool scrollable = mMaxItemsToShow < count; 155 | s.setWidth(sizeHintForColumn(0) + (scrollable ? verticalScrollBar()->sizeHint().width() : 0)); 156 | s.setHeight(sizeHintForRow(0) * (scrollable ? mMaxItemsToShow : count)); 157 | } 158 | return s; 159 | } 160 | 161 | QSize MenuView::minimumSizeHint() const 162 | { 163 | return QSize{0, 0}; 164 | } 165 | 166 | void MenuView::mouseReleaseEvent(QMouseEvent *e) 167 | { 168 | mCurrentReleaseButton = e->button(); 169 | QListView::mouseReleaseEvent(e); 170 | mCurrentReleaseButton = Qt::NoButton; 171 | } 172 | -------------------------------------------------------------------------------- /src/menuview.h: -------------------------------------------------------------------------------- 1 | /*COPYRIGHT_HEADER 2 | 3 | This file is a part of nm-tray. 4 | 5 | Copyright (c) 6 | 2016~now Palo Kisa 7 | 8 | nm-tray is free software; you can redistribute it and/or 9 | modify it under the terms of the GNU General Public License 10 | as published by the Free Software Foundation; either version 2 11 | of the License, or (at your option) any later version. 12 | 13 | This program is distributed in the hope that it will be useful, 14 | but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 | GNU General Public License for more details. 17 | 18 | You should have received a copy of the GNU General Public License 19 | along with this program; if not, write to the Free Software 20 | Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 21 | 22 | COPYRIGHT_HEADER*/ 23 | 24 | #if !defined(MENU_VIEW_H) 25 | #define MENU_VIEW_H 26 | 27 | #include 28 | 29 | class QAbstractItemModel; 30 | class QSortFilterProxyModel; 31 | 32 | class MenuView : public QListView 33 | { 34 | Q_OBJECT 35 | public: 36 | MenuView(QAbstractItemModel * model, QWidget * parent = nullptr); 37 | 38 | /*! \brief Sets the filter for entries to be presented 39 | */ 40 | void setFilter(QString const & filter); 41 | /*! \brief Set the maximum number of items/results to show 42 | */ 43 | void setMaxItemsToShow(int max); 44 | /*! \brief Set the maximum width of item to show 45 | */ 46 | void setMaxItemWidth(int max); 47 | 48 | public Q_SLOTS: 49 | /*! \brief Trigger action on currently active item 50 | */ 51 | void activateCurrent(); 52 | 53 | Q_SIGNALS: 54 | /*! \brief Signal emitted on the same conditions as parent's activated() 55 | * signal except for middle & right click. 56 | */ 57 | void activatedNoMiddleRight(const QModelIndex & index); 58 | 59 | protected: 60 | virtual QSize viewportSizeHint() const override; 61 | virtual QSize minimumSizeHint() const override; 62 | virtual void mouseReleaseEvent(QMouseEvent *e) override; 63 | 64 | private: 65 | QSortFilterProxyModel * mProxy; 66 | int mMaxItemsToShow; 67 | Qt::MouseButton mCurrentReleaseButton; 68 | }; 69 | 70 | #endif //MENU_VIEW_H 71 | -------------------------------------------------------------------------------- /src/nmlist.cpp: -------------------------------------------------------------------------------- 1 | /*COPYRIGHT_HEADER 2 | 3 | This file is a part of nm-tray. 4 | 5 | Copyright (c) 6 | 2015~now Palo Kisa 7 | 8 | nm-tray is free software; you can redistribute it and/or 9 | modify it under the terms of the GNU General Public License 10 | as published by the Free Software Foundation; either version 2 11 | of the License, or (at your option) any later version. 12 | 13 | This program is distributed in the hope that it will be useful, 14 | but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 | GNU General Public License for more details. 17 | 18 | You should have received a copy of the GNU General Public License 19 | along with this program; if not, write to the Free Software 20 | Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 21 | 22 | COPYRIGHT_HEADER*/ 23 | #include "nmlist.h" 24 | #include "ui_nmlist.h" 25 | #include "nmmodel.h" 26 | #include "nmproxy.h" 27 | #include 28 | 29 | template 30 | void installDblClick(QAbstractItemView * view, QAbstractItemModel * m) 31 | { 32 | T * net_model = qobject_cast(m); 33 | if (net_model) 34 | { 35 | QAbstractProxyModel * proxy = qobject_cast(view->model()); 36 | Q_ASSERT(nullptr != proxy && proxy->sourceModel() == net_model); 37 | QObject::connect(view, &QAbstractItemView::doubleClicked, [net_model, proxy] (QModelIndex const & i) { 38 | QModelIndex source_i = proxy->mapToSource(i); 39 | switch (static_cast(net_model->data(source_i, NmModel::ItemTypeRole).toInt())) 40 | { 41 | case NmModel::ActiveConnectionType: 42 | net_model->deactivateConnection(source_i); 43 | break; 44 | case NmModel::WifiNetworkType: 45 | case NmModel::ConnectionType: 46 | net_model->activateConnection(source_i); 47 | break; 48 | default: 49 | //do nothing 50 | break; 51 | } 52 | }); 53 | } 54 | } 55 | 56 | NmList::NmList(QString const & title, QAbstractItemModel * m, QWidget *parent) 57 | : QDialog(parent) 58 | , ui{new Ui::NmList} 59 | { 60 | ui->setupUi(this); 61 | setWindowTitle(title); 62 | 63 | Q_ASSERT(qobject_cast(m)); 64 | QSortFilterProxyModel * proxy_sort = new QSortFilterProxyModel{this}; 65 | proxy_sort->setSortCaseSensitivity(Qt::CaseInsensitive); 66 | proxy_sort->sort(0); 67 | proxy_sort->setSourceModel(m); 68 | ui->treeView->setModel(proxy_sort); 69 | installDblClick(ui->treeView, m); 70 | 71 | NmProxy * proxy = new NmProxy(this); 72 | proxy->setNmModel(qobject_cast(m), NmModel::ActiveConnectionType); 73 | proxy_sort = new QSortFilterProxyModel{this}; 74 | proxy_sort->setSortCaseSensitivity(Qt::CaseInsensitive); 75 | proxy_sort->sort(0); 76 | proxy_sort->setSourceModel(proxy); 77 | ui->listActive->setModel(proxy_sort); 78 | installDblClick(ui->listActive, proxy); 79 | 80 | proxy = new NmProxy(this); 81 | proxy->setNmModel(qobject_cast(m), NmModel::WifiNetworkType); 82 | proxy_sort = new QSortFilterProxyModel{this}; 83 | proxy_sort->setSortCaseSensitivity(Qt::CaseInsensitive); 84 | proxy_sort->sort(0); 85 | proxy_sort->setSourceModel(proxy); 86 | ui->listWifi->setModel(proxy_sort); 87 | installDblClick(ui->listWifi, proxy); 88 | } 89 | 90 | NmList::~NmList() 91 | { 92 | } 93 | -------------------------------------------------------------------------------- /src/nmlist.h: -------------------------------------------------------------------------------- 1 | /*COPYRIGHT_HEADER 2 | 3 | This file is a part of nm-tray. 4 | 5 | Copyright (c) 6 | 2015~now Palo Kisa 7 | 8 | nm-tray is free software; you can redistribute it and/or 9 | modify it under the terms of the GNU General Public License 10 | as published by the Free Software Foundation; either version 2 11 | of the License, or (at your option) any later version. 12 | 13 | This program is distributed in the hope that it will be useful, 14 | but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 | GNU General Public License for more details. 17 | 18 | You should have received a copy of the GNU General Public License 19 | along with this program; if not, write to the Free Software 20 | Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 21 | 22 | COPYRIGHT_HEADER*/ 23 | #ifndef NMLIST_H 24 | #define NMLIST_H 25 | 26 | #include 27 | #include 28 | 29 | namespace Ui { 30 | class NmList; 31 | } 32 | 33 | class QAbstractItemModel; 34 | 35 | class NmList : public QDialog 36 | { 37 | Q_OBJECT 38 | 39 | public: 40 | explicit NmList(QString const & title, QAbstractItemModel * m, QWidget *parent = nullptr); 41 | ~NmList(); 42 | 43 | private: 44 | std::unique_ptr ui; 45 | }; 46 | 47 | #endif // NMLIST_H 48 | -------------------------------------------------------------------------------- /src/nmlist.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | NmList 4 | 5 | 6 | 7 | 0 8 | 0 9 | 565 10 | 507 11 | 12 | 13 | 14 | 15 | 16 | 17 | All information 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | Active connections 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | Available wireless 38 | 39 | 40 | 41 | 42 | 43 | 44 | false 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | -------------------------------------------------------------------------------- /src/nmmodel.h: -------------------------------------------------------------------------------- 1 | /*COPYRIGHT_HEADER 2 | 3 | This file is a part of nm-tray. 4 | 5 | Copyright (c) 6 | 2015~now Palo Kisa 7 | 8 | nm-tray is free software; you can redistribute it and/or 9 | modify it under the terms of the GNU General Public License 10 | as published by the Free Software Foundation; either version 2 11 | of the License, or (at your option) any later version. 12 | 13 | This program is distributed in the hope that it will be useful, 14 | but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 | GNU General Public License for more details. 17 | 18 | You should have received a copy of the GNU General Public License 19 | along with this program; if not, write to the Free Software 20 | Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 21 | 22 | COPYRIGHT_HEADER*/ 23 | #if !defined(NMMODEL_H) 24 | #define NMMODEL_H 25 | 26 | #include 27 | 28 | class NmModelPrivate; 29 | 30 | class NmModel : public QAbstractItemModel 31 | { 32 | Q_OBJECT 33 | 34 | public: 35 | enum ItemType 36 | { 37 | HelperType 38 | , ActiveConnectionType 39 | , ConnectionType 40 | , DeviceType 41 | , WifiNetworkType 42 | }; 43 | enum ItemRole 44 | { 45 | ItemTypeRole = Qt::UserRole + 1 46 | , NameRole 47 | 48 | , IconTypeRole 49 | , IconRole 50 | , ConnectionTypeRole 51 | , ActiveConnectionTypeRole = ConnectionTypeRole 52 | , ConnectionTypeStringRole 53 | , ActiveConnectionTypeStringRole = ConnectionTypeStringRole 54 | , ConnectionUuidRole 55 | , ActiveConnectionUuidRole = ConnectionUuidRole 56 | , ConnectionPathRole 57 | , ActiveConnectionPathRole = ConnectionPathRole 58 | , ActiveConnectionInfoRole 59 | , ActiveConnectionStateRole 60 | , ActiveConnectionMasterRole 61 | , ActiveConnectionDevicesRole 62 | , IconSecurityTypeRole 63 | , IconSecurityRole 64 | 65 | , SignalRole 66 | }; 67 | 68 | public: 69 | explicit NmModel(QObject * parent = nullptr); 70 | ~NmModel(); 71 | 72 | //QAbstractItemModel methods 73 | virtual int rowCount(const QModelIndex &parent = QModelIndex()) const override; 74 | virtual int columnCount(const QModelIndex &parent = QModelIndex()) const override; 75 | 76 | virtual QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const override; 77 | virtual QModelIndex parent(const QModelIndex &index) const override; 78 | 79 | virtual QVariant data(const QModelIndex &index, int role) const override; 80 | 81 | QModelIndex indexTypeRoot(ItemType type) const; 82 | 83 | public Q_SLOTS: 84 | //NetworkManager management methods 85 | void activateConnection(QModelIndex const & index); 86 | void deactivateConnection(QModelIndex const & index); 87 | void requestScan(QModelIndex const & index) const; 88 | void requestAllWifiScan() const; 89 | 90 | private: 91 | bool isValidDataIndex(const QModelIndex & index) const; 92 | template 93 | QVariant dataRole(const QModelIndex & index) const; 94 | 95 | private: 96 | QScopedPointer d; 97 | }; 98 | 99 | 100 | #endif //NMMODEL_H 101 | -------------------------------------------------------------------------------- /src/nmmodel_p.h: -------------------------------------------------------------------------------- 1 | /*COPYRIGHT_HEADER 2 | 3 | This file is a part of nm-tray. 4 | 5 | Copyright (c) 6 | 2015~now Palo Kisa 7 | 8 | nm-tray is free software; you can redistribute it and/or 9 | modify it under the terms of the GNU General Public License 10 | as published by the Free Software Foundation; either version 2 11 | of the License, or (at your option) any later version. 12 | 13 | This program is distributed in the hope that it will be useful, 14 | but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 | GNU General Public License for more details. 17 | 18 | You should have received a copy of the GNU General Public License 19 | along with this program; if not, write to the Free Software 20 | Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 21 | 22 | COPYRIGHT_HEADER*/ 23 | #if !defined(NMMODEL_P_H) 24 | #define NMMODEL_P_H 25 | 26 | #include 27 | #include 28 | #include 29 | 30 | class NmModelPrivate : public QObject 31 | { 32 | Q_OBJECT 33 | public: 34 | NmModelPrivate(); 35 | ~NmModelPrivate(); 36 | 37 | void removeActiveConnection(int pos); 38 | void clearActiveConnections(); 39 | void insertActiveConnections(); 40 | void addActiveConnection(NetworkManager::ActiveConnection::Ptr conn); 41 | 42 | void removeConnection(int pos); 43 | void clearConnections(); 44 | void insertConnections(); 45 | void addConnection(NetworkManager::Connection::Ptr conn); 46 | 47 | void removeDevice(int pos); 48 | void clearDevices(); 49 | void insertDevices(); 50 | void addDevice(NetworkManager::Device::Ptr conn); 51 | 52 | void removeWifiNetwork(int pos); 53 | void clearWifiNetworks(); 54 | void insertWifiNetworks(); 55 | void addWifiNetwork(NetworkManager::WirelessNetwork::Ptr net); 56 | 57 | NetworkManager::ActiveConnection::Ptr findActiveConnection(QString const & path); 58 | template 59 | NetworkManager::Device::Ptr findDevice(Predicate const & pred); 60 | NetworkManager::Device::Ptr findDeviceUni(QString const & uni); 61 | NetworkManager::Device::Ptr findDeviceInterface(QString const & interfaceName); 62 | NetworkManager::WirelessNetwork::Ptr findWifiNetwork(QString const & ssid, QString const & devUni); 63 | 64 | void requestScan(NetworkManager::WirelessDevice * dev); 65 | 66 | Q_SIGNALS: 67 | void connectionAdd(NetworkManager::Connection::Ptr conn); 68 | void connectionUpdate(NetworkManager::Connection * conn); 69 | void connectionRemove(NetworkManager::Connection * conn); 70 | void activeConnectionAdd(NetworkManager::ActiveConnection::Ptr conn); 71 | void activeConnectionUpdate(NetworkManager::ActiveConnection * conn); 72 | void activeConnectionRemove(NetworkManager::ActiveConnection * conn); 73 | void activeConnectionsReset(); 74 | void deviceAdd(NetworkManager::Device::Ptr dev); 75 | void deviceUpdate(NetworkManager::Device * dev); 76 | void deviceRemove(NetworkManager::Device * dev); 77 | void wifiNetworkAdd(NetworkManager::Device * dev, QString const & ssid); 78 | void wifiNetworkUpdate(NetworkManager::WirelessNetwork * net); 79 | void wifiNetworkRemove(NetworkManager::Device * dev, QString const & ssid); 80 | 81 | 82 | private Q_SLOT: 83 | //connection 84 | void onConnectionUpdated(); 85 | void onConnectionRemoved(); 86 | 87 | //active connection 88 | void onActiveConnectionUpdated(); 89 | 90 | //device 91 | void onDeviceUpdated(); 92 | void onWifiNetworkAppeared(QString const & ssid); 93 | void onWifiNetworkDisappeared(QString const & ssid); 94 | 95 | //wifi network 96 | void onWifiNetworkUpdated(); 97 | 98 | //notifier 99 | void onDeviceAdded(QString const & uni); 100 | void onDeviceRemoved(QString const & uni); 101 | void onActiveConnectionAdded(QString const & path); 102 | void onActiveConnectionRemoved(QString const & path); 103 | void onActiveConnectionsChanged(); 104 | 105 | //settings notifier 106 | void onConnectionAdded(QString const & path); 107 | void onConnectionRemoved(QString const & path); 108 | 109 | public: 110 | NetworkManager::ActiveConnection::List mActiveConns; 111 | NetworkManager::Connection::List mConnections; 112 | NetworkManager::Device::List mDevices; 113 | NetworkManager::WirelessNetwork::List mWifiNets; 114 | 115 | }; 116 | 117 | 118 | enum ItemId 119 | { 120 | ITEM_ROOT = 0x0 121 | , ITEM_ACTIVE = 0x01 122 | , ITEM_ACTIVE_LEAF = 0x11 123 | , ITEM_CONNECTION = 0x2 124 | , ITEM_CONNECTION_LEAF = 0x21 125 | , ITEM_DEVICE = 0x3 126 | , ITEM_DEVICE_LEAF = 0x31 127 | , ITEM_WIFINET = 0x4 128 | , ITEM_WIFINET_LEAF = 0x41 129 | }; 130 | 131 | #endif //NMMODEL_P_H 132 | -------------------------------------------------------------------------------- /src/nmproxy.cpp: -------------------------------------------------------------------------------- 1 | /*COPYRIGHT_HEADER 2 | 3 | This file is a part of nm-tray. 4 | 5 | Copyright (c) 6 | 2015~now Palo Kisa 7 | 8 | nm-tray is free software; you can redistribute it and/or 9 | modify it under the terms of the GNU General Public License 10 | as published by the Free Software Foundation; either version 2 11 | of the License, or (at your option) any later version. 12 | 13 | This program is distributed in the hope that it will be useful, 14 | but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 | GNU General Public License for more details. 17 | 18 | You should have received a copy of the GNU General Public License 19 | along with this program; if not, write to the Free Software 20 | Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 21 | 22 | COPYRIGHT_HEADER*/ 23 | #include "nmproxy.h" 24 | #include "log.h" 25 | 26 | void NmProxy::setSourceModel(QAbstractItemModel * sourceModel) 27 | { 28 | //we operate only on our known model 29 | Q_ASSERT(sourceModel->metaObject() == &NmModel::staticMetaObject); 30 | Q_ASSERT(root.isValid()); 31 | beginResetModel(); 32 | 33 | if (nullptr != this->sourceModel()) 34 | { 35 | disconnect(this->sourceModel(), &QAbstractItemModel::dataChanged, this, &NmProxy::onSourceDataChanged); 36 | disconnect(this->sourceModel(), &QAbstractItemModel::headerDataChanged, this, &NmProxy::onSourceHeaderDataChanged); 37 | disconnect(this->sourceModel(), &QAbstractItemModel::rowsAboutToBeInserted, this, &NmProxy::onSourceRowsAboutToBeInserted); 38 | disconnect(this->sourceModel(), &QAbstractItemModel::rowsInserted, this, &NmProxy::onSourceRowsInserted); 39 | disconnect(this->sourceModel(), &QAbstractItemModel::rowsAboutToBeRemoved, this, &NmProxy::onSourceRowsAboutToBeRemoved); 40 | disconnect(this->sourceModel(), &QAbstractItemModel::rowsRemoved, this, &NmProxy::onSourceRowsRemoved); 41 | disconnect(this->sourceModel(), &QAbstractItemModel::columnsAboutToBeInserted, this, &NmProxy::onSourceColumnsAboutToBeInserted); 42 | disconnect(this->sourceModel(), &QAbstractItemModel::columnsInserted, this, &NmProxy::onSourceColumnsInserted); 43 | disconnect(this->sourceModel(), &QAbstractItemModel::columnsAboutToBeRemoved, this, &NmProxy::onSourceColumnsAboutToBeRemoved); 44 | disconnect(this->sourceModel(), &QAbstractItemModel::columnsRemoved, this, &NmProxy::onSourceColumnsRemoved); 45 | disconnect(this->sourceModel(), &QAbstractItemModel::modelAboutToBeReset, this, &NmProxy::onSourceModelAboutToBeReset); 46 | disconnect(this->sourceModel(), &QAbstractItemModel::modelReset, this, &NmProxy::onSourceModelReset); 47 | disconnect(this->sourceModel(), &QAbstractItemModel::rowsAboutToBeMoved, this, &NmProxy::onSourceRowsAboutToBeMoved); 48 | disconnect(this->sourceModel(), &QAbstractItemModel::rowsMoved, this, &NmProxy::onSourceRowsMoved); 49 | disconnect(this->sourceModel(), &QAbstractItemModel::columnsAboutToBeMoved, this, &NmProxy::onSourceColumnsAboutToBeMoved); 50 | disconnect(this->sourceModel(), &QAbstractItemModel::columnsMoved, this, &NmProxy::onSourceColumnsMoved); 51 | } 52 | 53 | QAbstractProxyModel::setSourceModel(sourceModel); 54 | 55 | connect(sourceModel, &QAbstractItemModel::dataChanged, this, &NmProxy::onSourceDataChanged); 56 | connect(sourceModel, &QAbstractItemModel::headerDataChanged, this, &NmProxy::onSourceHeaderDataChanged); 57 | connect(sourceModel, &QAbstractItemModel::rowsAboutToBeInserted, this, &NmProxy::onSourceRowsAboutToBeInserted); 58 | connect(sourceModel, &QAbstractItemModel::rowsInserted, this, &NmProxy::onSourceRowsInserted); 59 | connect(sourceModel, &QAbstractItemModel::rowsAboutToBeRemoved, this, &NmProxy::onSourceRowsAboutToBeRemoved); 60 | connect(sourceModel, &QAbstractItemModel::rowsRemoved, this, &NmProxy::onSourceRowsRemoved); 61 | connect(sourceModel, &QAbstractItemModel::columnsAboutToBeInserted, this, &NmProxy::onSourceColumnsAboutToBeInserted); 62 | connect(sourceModel, &QAbstractItemModel::columnsInserted, this, &NmProxy::onSourceColumnsInserted); 63 | connect(sourceModel, &QAbstractItemModel::columnsAboutToBeRemoved, this, &NmProxy::onSourceColumnsAboutToBeRemoved); 64 | connect(sourceModel, &QAbstractItemModel::columnsRemoved, this, &NmProxy::onSourceColumnsRemoved); 65 | connect(sourceModel, &QAbstractItemModel::modelAboutToBeReset, this, &NmProxy::onSourceModelAboutToBeReset); 66 | connect(sourceModel, &QAbstractItemModel::modelReset, this, &NmProxy::onSourceModelReset); 67 | connect(sourceModel, &QAbstractItemModel::rowsAboutToBeMoved, this, &NmProxy::onSourceRowsAboutToBeMoved); 68 | connect(sourceModel, &QAbstractItemModel::rowsMoved, this, &NmProxy::onSourceRowsMoved); 69 | connect(sourceModel, &QAbstractItemModel::columnsAboutToBeMoved, this, &NmProxy::onSourceColumnsAboutToBeMoved); 70 | connect(sourceModel, &QAbstractItemModel::columnsMoved, this, &NmProxy::onSourceColumnsMoved); 71 | 72 | endResetModel(); 73 | } 74 | 75 | void NmProxy::setNmModel(NmModel * model, NmModel::ItemType shownType) 76 | { 77 | root = model->indexTypeRoot(shownType); 78 | setSourceModel(model); 79 | //qCDebug(NM_TRAY) << __FUNCTION__ << model->indexTypeRoot(shownType) << "->" << root; 80 | } 81 | 82 | QModelIndex NmProxy::index(int row, int column, const QModelIndex & proxyParent) const 83 | { 84 | QModelIndex i; 85 | if (hasIndex(row, column, proxyParent)) 86 | i = createIndex(row, column); 87 | //qCDebug(NM_TRAY) << __FUNCTION__ << row << column << proxyParent << "->" << i; 88 | return i; 89 | } 90 | 91 | QModelIndex NmProxy::parent(const QModelIndex &/*proxyIndex*/) const 92 | { 93 | //showing only one level/list: leaf -> invalid, root -> invalid 94 | QModelIndex i; 95 | //qCDebug(NM_TRAY) << __FUNCTION__ << proxyIndex << "->" << i; 96 | return i; 97 | } 98 | 99 | int NmProxy::rowCount(const QModelIndex &proxyParent) const 100 | { 101 | //showing only one level/list: leaf -> source root rowcount, root -> 0 102 | if (proxyParent.isValid()) 103 | return 0; 104 | else 105 | return sourceModel()->rowCount(root); 106 | } 107 | 108 | int NmProxy::columnCount(const QModelIndex &proxyParent) const 109 | { 110 | return sourceModel()->columnCount(mapToSource(proxyParent)); 111 | } 112 | 113 | void NmProxy::activateConnection(QModelIndex const & index) const 114 | { 115 | qobject_cast(sourceModel())->activateConnection(mapToSource(index)); 116 | } 117 | 118 | void NmProxy::deactivateConnection(QModelIndex const & index) const 119 | { 120 | qobject_cast(sourceModel())->deactivateConnection(mapToSource(index)); 121 | } 122 | 123 | QModelIndex NmProxy::mapToSource(const QModelIndex & proxyIndex) const 124 | { 125 | QModelIndex i; 126 | if (proxyIndex.isValid()) 127 | i = sourceModel()->index(proxyIndex.row(), proxyIndex.column(), root); 128 | //qCDebug(NM_TRAY) << __FUNCTION__ << proxyIndex << "->" << i; 129 | return i; 130 | } 131 | 132 | QModelIndex NmProxy::mapFromSource(const QModelIndex & sourceIndex) const 133 | { 134 | QModelIndex i; 135 | if (sourceIndex.isValid() && root != sourceIndex) 136 | i = createIndex(sourceIndex.row(), sourceIndex.column()); 137 | //qCDebug(NM_TRAY) << __FUNCTION__ << sourceIndex << "->" << i; 138 | return i; 139 | } 140 | 141 | void NmProxy::onSourceDataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight, const QVector &roles) 142 | { 143 | if (root == topLeft.parent()) 144 | emit dataChanged(mapFromSource(topLeft), mapFromSource(bottomRight), roles); 145 | } 146 | 147 | void NmProxy::onSourceHeaderDataChanged(Qt::Orientation orientation, int first, int last) 148 | { 149 | emit headerDataChanged(orientation, first, last); 150 | } 151 | 152 | void NmProxy::onSourceRowsAboutToBeInserted(const QModelIndex &parent, int first, int last) 153 | { 154 | if (root == parent) 155 | beginInsertRows(mapFromSource(parent), first, last); 156 | } 157 | 158 | void NmProxy::onSourceRowsInserted(const QModelIndex &parent, int, int) 159 | { 160 | if (root == parent) 161 | endInsertRows(); 162 | } 163 | 164 | void NmProxy::onSourceRowsAboutToBeRemoved(const QModelIndex &parent, int first, int last) 165 | { 166 | if (root == parent) 167 | beginRemoveRows(mapFromSource(parent), first, last); 168 | } 169 | 170 | void NmProxy::onSourceRowsRemoved(const QModelIndex &parent, int, int) 171 | { 172 | if (root == parent) 173 | endRemoveRows(); 174 | } 175 | 176 | void NmProxy::onSourceColumnsAboutToBeInserted(const QModelIndex &parent, int first, int last) 177 | { 178 | if (root == parent) 179 | beginInsertColumns(mapFromSource(parent), first, last); 180 | } 181 | 182 | void NmProxy::onSourceColumnsInserted(const QModelIndex &parent, int, int) 183 | { 184 | if (root == parent) 185 | endInsertColumns(); 186 | } 187 | 188 | 189 | void NmProxy::onSourceColumnsAboutToBeRemoved(const QModelIndex &parent, int first, int last) 190 | { 191 | if (root == parent) 192 | beginRemoveColumns(mapFromSource(parent), first, last); 193 | } 194 | 195 | void NmProxy::onSourceColumnsRemoved(const QModelIndex &parent, int, int) 196 | { 197 | if (root == parent) 198 | endRemoveColumns(); 199 | } 200 | 201 | void NmProxy::onSourceModelAboutToBeReset() 202 | { 203 | beginResetModel(); 204 | } 205 | 206 | void NmProxy::onSourceModelReset() 207 | { 208 | endResetModel(); 209 | } 210 | 211 | void NmProxy::onSourceRowsAboutToBeMoved( const QModelIndex &sourceParent, int sourceStart, int sourceEnd, const QModelIndex &destinationParent, int destinationRow) 212 | { 213 | if (root == sourceParent) 214 | { 215 | if (root == destinationParent) 216 | beginMoveRows(mapFromSource(sourceParent), sourceStart, sourceEnd, destinationParent, destinationRow); 217 | else 218 | beginRemoveRows(mapFromSource(sourceParent), sourceStart, sourceEnd); 219 | } else if (root == destinationParent) 220 | beginInsertRows(mapFromSource(destinationParent), destinationRow, destinationRow + (sourceEnd - sourceStart)); 221 | } 222 | 223 | void NmProxy::onSourceRowsMoved( const QModelIndex &sourceParent, int, int, const QModelIndex &destinationParent, int) 224 | { 225 | if (root == sourceParent) 226 | { 227 | if (root == destinationParent) 228 | endMoveRows(); 229 | else 230 | endRemoveRows(); 231 | } else if (root == destinationParent) 232 | endInsertRows(); 233 | } 234 | 235 | 236 | void NmProxy::onSourceColumnsAboutToBeMoved( const QModelIndex &sourceParent, int sourceStart, int sourceEnd, const QModelIndex &destinationParent, int destinationColumn) 237 | { 238 | if (root == sourceParent) 239 | { 240 | if (root == destinationParent) 241 | beginMoveColumns(mapFromSource(sourceParent), sourceStart, sourceEnd, destinationParent, destinationColumn); 242 | else 243 | beginRemoveColumns(mapFromSource(sourceParent), sourceStart, sourceEnd); 244 | } else if (root == destinationParent) 245 | beginInsertColumns(mapFromSource(destinationParent), destinationColumn, destinationColumn + (sourceEnd - sourceStart)); 246 | } 247 | 248 | void NmProxy::onSourceColumnsMoved( const QModelIndex &sourceParent, int, int, const QModelIndex &destinationParent, int) 249 | { 250 | if (root == sourceParent) 251 | { 252 | if (root == destinationParent) 253 | endMoveColumns(); 254 | else 255 | endRemoveColumns(); 256 | } else if (root == destinationParent) 257 | endInsertColumns(); 258 | } 259 | 260 | -------------------------------------------------------------------------------- /src/nmproxy.h: -------------------------------------------------------------------------------- 1 | /*COPYRIGHT_HEADER 2 | 3 | This file is a part of nm-tray. 4 | 5 | Copyright (c) 6 | 2015~now Palo Kisa 7 | 8 | nm-tray is free software; you can redistribute it and/or 9 | modify it under the terms of the GNU General Public License 10 | as published by the Free Software Foundation; either version 2 11 | of the License, or (at your option) any later version. 12 | 13 | This program is distributed in the hope that it will be useful, 14 | but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 | GNU General Public License for more details. 17 | 18 | You should have received a copy of the GNU General Public License 19 | along with this program; if not, write to the Free Software 20 | Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 21 | 22 | COPYRIGHT_HEADER*/ 23 | #if !defined(NMPROXY_H) 24 | #define NMPROXY_H 25 | 26 | #include 27 | #include "nmmodel.h" 28 | 29 | class NmProxy : public QAbstractProxyModel 30 | { 31 | Q_OBJECT 32 | public: 33 | using QAbstractProxyModel::QAbstractProxyModel; 34 | virtual void setSourceModel(QAbstractItemModel * sourceModel) override; 35 | void setNmModel(NmModel * model, NmModel::ItemType shownType); 36 | 37 | virtual QModelIndex index(int row, int column, const QModelIndex & parent = QModelIndex()) const override; 38 | virtual QModelIndex parent(const QModelIndex &index) const override; 39 | 40 | virtual int rowCount(const QModelIndex &parent = QModelIndex()) const override; 41 | virtual int columnCount(const QModelIndex &parent = QModelIndex()) const override; 42 | 43 | void activateConnection(QModelIndex const & index) const; 44 | void deactivateConnection(QModelIndex const & index) const; 45 | 46 | protected: 47 | virtual QModelIndex mapToSource(const QModelIndex & proxyIndex) const override; 48 | virtual QModelIndex mapFromSource(const QModelIndex & sourceIndex) const override; 49 | 50 | private Q_SLOTS: 51 | void onSourceDataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight, const QVector &roles = QVector()); 52 | void onSourceHeaderDataChanged(Qt::Orientation orientation, int first, int last); 53 | 54 | void onSourceRowsAboutToBeInserted(const QModelIndex &parent, int first, int last); 55 | void onSourceRowsInserted(const QModelIndex &parent, int first, int last); 56 | 57 | void onSourceRowsAboutToBeRemoved(const QModelIndex &parent, int first, int last); 58 | void onSourceRowsRemoved(const QModelIndex &parent, int first, int last); 59 | 60 | void onSourceColumnsAboutToBeInserted(const QModelIndex &parent, int first, int last); 61 | void onSourceColumnsInserted(const QModelIndex &parent, int first, int last); 62 | 63 | void onSourceColumnsAboutToBeRemoved(const QModelIndex &parent, int first, int last); 64 | void onSourceColumnsRemoved(const QModelIndex &parent, int first, int last); 65 | 66 | void onSourceModelAboutToBeReset(); 67 | void onSourceModelReset(); 68 | 69 | void onSourceRowsAboutToBeMoved( const QModelIndex &sourceParent, int sourceStart, int sourceEnd, const QModelIndex &destinationParent, int destinationRow); 70 | void onSourceRowsMoved( const QModelIndex &parent, int start, int end, const QModelIndex &destination, int row); 71 | 72 | void onSourceColumnsAboutToBeMoved( const QModelIndex &sourceParent, int sourceStart, int sourceEnd, const QModelIndex &destinationParent, int destinationColumn); 73 | void onSourceColumnsMoved( const QModelIndex &parent, int start, int end, const QModelIndex &destination, int column); 74 | 75 | private: 76 | QModelIndex root; 77 | }; 78 | 79 | #endif //NMPROXY_H 80 | -------------------------------------------------------------------------------- /src/translate.cpp: -------------------------------------------------------------------------------- 1 | /*COPYRIGHT_HEADER 2 | 3 | This file is a part of nm-tray. 4 | 5 | Copyright (c) 6 | 2015~now Palo Kisa 7 | 8 | nm-tray is free software; you can redistribute it and/or 9 | modify it under the terms of the GNU General Public License 10 | as published by the Free Software Foundation; either version 2 11 | of the License, or (at your option) any later version. 12 | 13 | This program is distributed in the hope that it will be useful, 14 | but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 | GNU General Public License for more details. 17 | 18 | You should have received a copy of the GNU General Public License 19 | along with this program; if not, write to the Free Software 20 | Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 21 | 22 | COPYRIGHT_HEADER*/ 23 | #include 24 | #include 25 | #include 26 | #include 27 | #include 28 | 29 | #if !defined(TRANSLATION_DIR) 30 | #define TRANSLATION_DIR "/usr/share/nm-tray" 31 | #endif 32 | 33 | void translate() 34 | { 35 | const QString locale = QLocale::system().name(); 36 | auto qt_trans = std::make_unique(qApp); 37 | if (qt_trans->load(QLatin1String("qt_") + locale, QLibraryInfo::path(QLibraryInfo::TranslationsPath))) 38 | qApp->installTranslator(qt_trans.release()); 39 | 40 | QString trans_dir = qgetenv("NM_TRAY_TRANSLATION_DIR").constData(); 41 | auto my_trans = std::make_unique(qApp); 42 | if (my_trans->load(QLatin1String("nm-tray_") + locale, trans_dir.isEmpty() ? TRANSLATION_DIR : trans_dir)) 43 | qApp->installTranslator(my_trans.release()); 44 | } 45 | 46 | Q_COREAPP_STARTUP_FUNCTION(translate) 47 | -------------------------------------------------------------------------------- /src/tray.h: -------------------------------------------------------------------------------- 1 | /*COPYRIGHT_HEADER 2 | 3 | This file is a part of nm-tray. 4 | 5 | Copyright (c) 6 | 2015~now Palo Kisa 7 | 8 | nm-tray is free software; you can redistribute it and/or 9 | modify it under the terms of the GNU General Public License 10 | as published by the Free Software Foundation; either version 2 11 | of the License, or (at your option) any later version. 12 | 13 | This program is distributed in the hope that it will be useful, 14 | but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 | GNU General Public License for more details. 17 | 18 | You should have received a copy of the GNU General Public License 19 | along with this program; if not, write to the Free Software 20 | Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 21 | 22 | COPYRIGHT_HEADER*/ 23 | #if !defined(TRAY_H) 24 | #define TRAY_H 25 | 26 | #include 27 | #include 28 | #include 29 | 30 | class TrayPrivate; 31 | 32 | class Tray : public QObject 33 | { 34 | Q_OBJECT 35 | 36 | public: 37 | Tray(QObject *parent = nullptr); 38 | ~Tray(); 39 | 40 | protected: 41 | virtual bool eventFilter(QObject * object, QEvent * event) override; 42 | 43 | private Q_SLOTS: 44 | //menu 45 | void onEditConnectionsTriggered(); 46 | void onAboutTriggered(); 47 | void onQuitTriggered(); 48 | void onActivated(const QSystemTrayIcon::ActivationReason reason); 49 | 50 | //NetworkManager 51 | void setActionsStates(); 52 | void onPrimaryConnectionChanged(QString const & uni); 53 | 54 | private: 55 | QScopedPointer d; 56 | }; 57 | 58 | 59 | #endif //TRAY_H 60 | -------------------------------------------------------------------------------- /src/windowmenu.cpp: -------------------------------------------------------------------------------- 1 | /*COPYRIGHT_HEADER 2 | 3 | This file is a part of nm-tray. 4 | 5 | Copyright (c) 6 | 2016~now Palo Kisa 7 | 8 | nm-tray is free software; you can redistribute it and/or 9 | modify it under the terms of the GNU General Public License 10 | as published by the Free Software Foundation; either version 2 11 | of the License, or (at your option) any later version. 12 | 13 | This program is distributed in the hope that it will be useful, 14 | but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 | GNU General Public License for more details. 17 | 18 | You should have received a copy of the GNU General Public License 19 | along with this program; if not, write to the Free Software 20 | Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 21 | 22 | COPYRIGHT_HEADER*/ 23 | 24 | #include "windowmenu.h" 25 | #include "nmmodel.h" 26 | #include "nmproxy.h" 27 | #include "menuview.h" 28 | 29 | #include 30 | #include 31 | #include 32 | 33 | class WindowMenuPrivate 34 | { 35 | public: 36 | NmModel * mNmModel; 37 | 38 | QScopedPointer mWirelessModel; 39 | QWidgetAction * mWirelessAction; 40 | 41 | QScopedPointer mActiveModel; 42 | QWidgetAction * mActiveAction; 43 | 44 | QScopedPointer mConnectionModel; 45 | QWidgetAction * mConnectionAction; 46 | 47 | QAction * mMakeDirtyAction; 48 | QTimer mDelaySizeRefreshTimer; 49 | 50 | WindowMenuPrivate(WindowMenu * q); 51 | template 52 | void onActivated(QModelIndex const & index 53 | , QAbstractItemModel const * topParent 54 | , F const & functor); 55 | void forceSizeRefresh(); 56 | void onViewRowChange(QAction * viewAction, QAbstractItemModel const * model); 57 | private: 58 | WindowMenu * q_ptr; 59 | Q_DECLARE_PUBLIC(WindowMenu); 60 | }; 61 | 62 | WindowMenuPrivate::WindowMenuPrivate(WindowMenu * q) 63 | : q_ptr{q} 64 | { 65 | } 66 | 67 | template 68 | void WindowMenuPrivate::onActivated(QModelIndex const & index 69 | , QAbstractItemModel const * topParent 70 | , F const & functor) 71 | { 72 | QModelIndex i = index; 73 | for (QAbstractProxyModel const * proxy = qobject_cast(index.model()) 74 | ; nullptr != proxy && topParent != proxy 75 | ; proxy = qobject_cast(proxy->sourceModel()) 76 | ) 77 | { 78 | i = proxy->mapToSource(i); 79 | } 80 | functor(i); 81 | } 82 | 83 | void WindowMenuPrivate::forceSizeRefresh() 84 | { 85 | Q_Q(WindowMenu); 86 | if (!q->isVisible()) 87 | { 88 | return; 89 | } 90 | 91 | const QSize old_size = q->size(); 92 | //TODO: how to force the menu to recalculate it's size in a more elegant way? 93 | q->addAction(mMakeDirtyAction); 94 | q->removeAction(mMakeDirtyAction); 95 | // ensure to be visible (should the resize make it out of screen) 96 | if (old_size != q->size()) 97 | { 98 | q->popup(q->geometry().topLeft()); 99 | } 100 | } 101 | 102 | void WindowMenuPrivate::onViewRowChange(QAction * viewAction, QAbstractItemModel const * model) 103 | { 104 | viewAction->setVisible(model->rowCount(QModelIndex{}) > 0); 105 | mDelaySizeRefreshTimer.start(); 106 | } 107 | 108 | 109 | 110 | 111 | WindowMenu::WindowMenu(NmModel * nmModel, QWidget * parent /*= nullptr*/) 112 | : QMenu{parent} 113 | , d_ptr{new WindowMenuPrivate{this}} 114 | { 115 | Q_D(WindowMenu); 116 | d->mNmModel = nmModel; 117 | 118 | //active proxy & widgets 119 | d->mActiveModel.reset(new NmProxy); 120 | d->mActiveModel->setNmModel(d->mNmModel, NmModel::ActiveConnectionType); 121 | MenuView * active_view = new MenuView{d->mActiveModel.data()}; 122 | connect(active_view, &MenuView::activatedNoMiddleRight, [this, d] (const QModelIndex & index) { 123 | d->onActivated(index, d->mActiveModel.data(), std::bind(&NmProxy::deactivateConnection, d->mActiveModel.data(), std::placeholders::_1)); 124 | close(); 125 | }); 126 | 127 | d->mActiveAction = new QWidgetAction{this}; 128 | d->mActiveAction->setDefaultWidget(active_view); 129 | connect(d->mActiveModel.data(), &QAbstractItemModel::modelReset, [d] { d->onViewRowChange(d->mActiveAction, d->mActiveModel.data()); }); 130 | connect(d->mActiveModel.data(), &QAbstractItemModel::rowsInserted, [d] { d->onViewRowChange(d->mActiveAction, d->mActiveModel.data()); }); 131 | connect(d->mActiveModel.data(), &QAbstractItemModel::rowsRemoved, [d] { d->onViewRowChange(d->mActiveAction, d->mActiveModel.data()); }); 132 | 133 | //wireless proxy & widgets 134 | d->mWirelessModel.reset(new NmProxy); 135 | d->mWirelessModel->setNmModel(d->mNmModel, NmModel::WifiNetworkType); 136 | MenuView * wifi_view = new MenuView{d->mWirelessModel.data()}; 137 | connect(wifi_view, &MenuView::activatedNoMiddleRight, [this, d] (const QModelIndex & index) { 138 | d->onActivated(index, d->mWirelessModel.data(), std::bind(&NmProxy::activateConnection, d->mWirelessModel.data(), std::placeholders::_1)); 139 | close(); 140 | }); 141 | 142 | d->mWirelessAction = new QWidgetAction{this}; 143 | d->mWirelessAction->setDefaultWidget(wifi_view); 144 | connect(d->mWirelessModel.data(), &QAbstractItemModel::modelReset, [d] { d->onViewRowChange(d->mWirelessAction, d->mWirelessModel.data()); }); 145 | connect(d->mWirelessModel.data(), &QAbstractItemModel::rowsInserted, [d] { d->onViewRowChange(d->mWirelessAction, d->mWirelessModel.data()); }); 146 | connect(d->mWirelessModel.data(), &QAbstractItemModel::rowsRemoved, [d] { d->onViewRowChange(d->mWirelessAction, d->mWirelessModel.data()); }); 147 | 148 | //connection proxy & widgets 149 | d->mConnectionModel.reset(new NmProxy); 150 | d->mConnectionModel->setNmModel(d->mNmModel, NmModel::ConnectionType); 151 | MenuView * connection_view = new MenuView{d->mConnectionModel.data()}; 152 | connect(connection_view, &MenuView::activatedNoMiddleRight, [this, d] (const QModelIndex & index) { 153 | d->onActivated(index, d->mConnectionModel.data(), std::bind(&NmProxy::activateConnection, d->mConnectionModel.data(), std::placeholders::_1)); 154 | close(); 155 | }); 156 | 157 | d->mConnectionAction = new QWidgetAction{this}; 158 | d->mConnectionAction->setDefaultWidget(connection_view); 159 | connect(d->mConnectionModel.data(), &QAbstractItemModel::modelReset, [d] { d->onViewRowChange(d->mConnectionAction, d->mConnectionModel.data()); }); 160 | connect(d->mConnectionModel.data(), &QAbstractItemModel::rowsInserted, [d] { d->onViewRowChange(d->mConnectionAction, d->mConnectionModel.data()); }); 161 | connect(d->mConnectionModel.data(), &QAbstractItemModel::rowsRemoved, [d] { d->onViewRowChange(d->mConnectionAction, d->mConnectionModel.data()); }); 162 | 163 | addAction(tr("Active connection(s)"))->setEnabled(false); 164 | addAction(d->mActiveAction); 165 | addAction(tr("Wi-Fi network(s)"))->setEnabled(false); 166 | addAction(d->mWirelessAction); 167 | addAction(tr("Known connection(s)"))->setEnabled(false); 168 | addAction(d->mConnectionAction); 169 | 170 | d->mMakeDirtyAction = new QAction{this}; 171 | d->mDelaySizeRefreshTimer.setInterval(200); 172 | d->mDelaySizeRefreshTimer.setSingleShot(true); 173 | connect(&d->mDelaySizeRefreshTimer, &QTimer::timeout, [d] { d->forceSizeRefresh(); }); 174 | 175 | d->onViewRowChange(d->mActiveAction, d->mActiveModel.data()); 176 | d->onViewRowChange(d->mWirelessAction, d->mWirelessModel.data()); 177 | d->onViewRowChange(d->mConnectionAction, d->mConnectionModel.data()); 178 | } 179 | 180 | WindowMenu::~WindowMenu() 181 | { 182 | } 183 | -------------------------------------------------------------------------------- /src/windowmenu.h: -------------------------------------------------------------------------------- 1 | /*COPYRIGHT_HEADER 2 | 3 | This file is a part of nm-tray. 4 | 5 | Copyright (c) 6 | 2016~now Palo Kisa 7 | 8 | nm-tray is free software; you can redistribute it and/or 9 | modify it under the terms of the GNU General Public License 10 | as published by the Free Software Foundation; either version 2 11 | of the License, or (at your option) any later version. 12 | 13 | This program is distributed in the hope that it will be useful, 14 | but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 | GNU General Public License for more details. 17 | 18 | You should have received a copy of the GNU General Public License 19 | along with this program; if not, write to the Free Software 20 | Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 21 | 22 | COPYRIGHT_HEADER*/ 23 | 24 | #if !defined(WINDOW_MENU_H) 25 | #define WINDOW_MENU_H 26 | 27 | #include 28 | 29 | class WindowMenuPrivate; 30 | class NmModel; 31 | 32 | class WindowMenu : public QMenu 33 | { 34 | Q_OBJECT 35 | public: 36 | WindowMenu(NmModel * nmModel, QWidget * parent = nullptr); 37 | ~WindowMenu(); 38 | 39 | private: 40 | QScopedPointer d_ptr; 41 | Q_DECLARE_PRIVATE(WindowMenu); 42 | }; 43 | 44 | 45 | #endif //WINDOW_MENU_H 46 | 47 | -------------------------------------------------------------------------------- /translations/nm-tray.ts: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | ConnectionInfo 6 | 7 | 8 | Connection information 9 | 10 | 11 | 12 | 13 | NmList 14 | 15 | 16 | All information 17 | 18 | 19 | 20 | 21 | Active connections 22 | 23 | 24 | 25 | 26 | Available wireless 27 | 28 | 29 | 30 | 31 | NmModel 32 | 33 | 34 | nm-tray - wireless password 35 | 36 | 37 | 38 | 39 | Password is needed for connection to '%1': 40 | 41 | 42 | 43 | 44 | root 45 | 46 | 47 | 48 | 49 | active connection(s) 50 | 51 | 52 | 53 | 54 | connection(s) 55 | 56 | 57 | 58 | 59 | device(s) 60 | 61 | 62 | 63 | 64 | wifi network(s) 65 | 66 | 67 | 68 | 69 | unknown 70 | hardware address 71 | 72 | 73 | 74 | 75 | General 76 | Active connection information 77 | 78 | 79 | 80 | 81 | Interface 82 | Active connection information 83 | 84 | 85 | 86 | 87 | Hardware Address 88 | Active connection information 89 | 90 | 91 | 92 | 93 | Driver 94 | Active connection information 95 | 96 | 97 | 98 | 99 | Speed 100 | Active connection information 101 | 102 | 103 | 104 | 105 | Kb/s 106 | 107 | 108 | 109 | 110 | Mb/s 111 | 112 | 113 | 114 | 115 | Gb/s 116 | 117 | 118 | 119 | 120 | Tb/s 121 | 122 | 123 | 124 | 125 | unknown 126 | Speed 127 | 128 | 129 | 130 | 131 | Security 132 | Active connection information 133 | 134 | 135 | 136 | 137 | IPv4 138 | Active connection information 139 | 140 | 141 | 142 | 143 | IPv6 144 | Active connection information 145 | 146 | 147 | 148 | 149 | IP Address 150 | Active connection information 151 | 152 | 153 | 154 | 155 | Subnet Mask 156 | Active connection information 157 | 158 | 159 | 160 | 161 | Default route 162 | Active connection information 163 | 164 | 165 | 166 | 167 | DNS(%1) 168 | Active connection information 169 | 170 | 171 | 172 | 173 | Tray 174 | 175 | 176 | <pre>Connection <strong>%1</strong>(%2) active</pre> 177 | 178 | 179 | 180 | 181 | <pre>No active connection</pre> 182 | 183 | 184 | 185 | 186 | Connection lost 187 | 188 | 189 | 190 | 191 | No longer connected to %1 '%2'. 192 | 193 | 194 | 195 | 196 | Connection established 197 | 198 | 199 | 200 | 201 | Now connected to %1 '%2'. 202 | 203 | 204 | 205 | 206 | NetworkManager(nm-tray) 207 | 208 | 209 | 210 | 211 | Enable Networking 212 | 213 | 214 | 215 | 216 | Enable Wi-Fi 217 | 218 | 219 | 220 | 221 | Enable notifications 222 | 223 | 224 | 225 | 226 | Connection information 227 | 228 | 229 | 230 | 231 | Debug information 232 | 233 | 234 | 235 | 236 | Wifi - request scan 237 | 238 | 239 | 240 | 241 | Edit connections... 242 | 243 | 244 | 245 | 246 | About 247 | 248 | 249 | 250 | 251 | Quit 252 | 253 | 254 | 255 | 256 | nm-tray info 257 | 258 | 259 | 260 | 261 | %1 about 262 | 263 | 264 | 265 | 266 | <strong><a href="https://github.com/palinek/nm-tray">nm-tray</a></strong> is a simple Qt based frontend for <a href="https://wiki.gnome.org/Projects/NetworkManager">NetworkManager</a>.<br/><br/>Version: %1 267 | 268 | 269 | 270 | 271 | WindowMenu 272 | 273 | 274 | Active connection(s) 275 | 276 | 277 | 278 | 279 | Wi-Fi network(s) 280 | 281 | 282 | 283 | 284 | Known connection(s) 285 | 286 | 287 | 288 | 289 | -------------------------------------------------------------------------------- /translations/nm-tray_cs.ts: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | ConnectionInfo 6 | 7 | 8 | Connection information 9 | Informace o spojení 10 | 11 | 12 | 13 | NmList 14 | 15 | 16 | All information 17 | Všechny informace 18 | 19 | 20 | 21 | Active connections 22 | Aktivní připojení 23 | 24 | 25 | 26 | Available wireless 27 | Bezdrátové sítě k dispozici 28 | 29 | 30 | 31 | NmModel 32 | 33 | 34 | nm-tray - wireless password 35 | nm-tray – heslo k bezdrátové síti 36 | 37 | 38 | 39 | Password is needed for connection to '%1': 40 | Pro připojení k „%1“ je třeba heslo: 41 | 42 | 43 | 44 | root 45 | 46 | 47 | 48 | 49 | active connection(s) 50 | aktivní spojení 51 | 52 | 53 | 54 | connection(s) 55 | spojení 56 | 57 | 58 | 59 | device(s) 60 | zařízení 61 | 62 | 63 | 64 | wifi network(s) 65 | WiFi sítě 66 | 67 | 68 | 69 | unknown 70 | hardware address 71 | neznámé 72 | 73 | 74 | 75 | General 76 | Active connection information 77 | Obecné 78 | 79 | 80 | 81 | Interface 82 | Active connection information 83 | Rozhraní 84 | 85 | 86 | 87 | Hardware Address 88 | Active connection information 89 | Hardwarová (MAC) adresa 90 | 91 | 92 | 93 | Driver 94 | Active connection information 95 | Ovladač 96 | 97 | 98 | 99 | Speed 100 | Active connection information 101 | Rychlost 102 | 103 | 104 | 105 | Kb/s 106 | Kb/s 107 | 108 | 109 | 110 | Mb/s 111 | Mb/s 112 | 113 | 114 | 115 | Gb/s 116 | Gb/s 117 | 118 | 119 | 120 | Tb/s 121 | Tb/s 122 | 123 | 124 | 125 | unknown 126 | Speed 127 | neznámá 128 | 129 | 130 | 131 | Security 132 | Active connection information 133 | Zabezpečení 134 | 135 | 136 | 137 | IPv4 138 | Active connection information 139 | 140 | 141 | 142 | 143 | IPv6 144 | Active connection information 145 | 146 | 147 | 148 | 149 | IP Address 150 | Active connection information 151 | IP Adresa 152 | 153 | 154 | 155 | Subnet Mask 156 | Active connection information 157 | Maska sítě 158 | 159 | 160 | 161 | Default route 162 | Active connection information 163 | Výchozí trasa 164 | 165 | 166 | 167 | DNS(%1) 168 | Active connection information 169 | 170 | 171 | 172 | 173 | Tray 174 | 175 | 176 | <pre>Connection <strong>%1</strong>(%2) active</pre> 177 | <pre>Spojení <strong>%1</strong>(%2) aktivní</pre> 178 | 179 | 180 | 181 | <pre>No active connection</pre> 182 | <pre>Žádné aktivní spojení</pre> 183 | 184 | 185 | 186 | Connection lost 187 | Spojení ztraceno 188 | 189 | 190 | 191 | No longer connected to %1 '%2'. 192 | Nadále už nepřipojeno k %1 „%2“. 193 | 194 | 195 | 196 | Connection established 197 | Spojení navázáno 198 | 199 | 200 | 201 | Now connected to %1 '%2'. 202 | Nyní připojeno k %1 „%2“. 203 | 204 | 205 | 206 | NetworkManager(nm-tray) 207 | 208 | 209 | 210 | 211 | Enable Networking 212 | Zapnout síť 213 | 214 | 215 | 216 | Enable Wi-Fi 217 | Zapnout WiFi 218 | 219 | 220 | 221 | Enable notifications 222 | Zapnout oznamování 223 | 224 | 225 | 226 | Connection information 227 | Informace o připojení 228 | 229 | 230 | 231 | Debug information 232 | Ladící informace 233 | 234 | 235 | 236 | Wifi - request scan 237 | Wifi – vyžádat sken 238 | 239 | 240 | 241 | Edit connections... 242 | Upravit připojení… 243 | 244 | 245 | 246 | About 247 | O aplikaci 248 | 249 | 250 | 251 | Quit 252 | Ukončit 253 | 254 | 255 | 256 | nm-tray info 257 | nm-tray informace 258 | 259 | 260 | 261 | %1 about 262 | o %1 263 | 264 | 265 | 266 | <strong><a href="https://github.com/palinek/nm-tray">nm-tray</a></strong> is a simple Qt based frontend for <a href="https://wiki.gnome.org/Projects/NetworkManager">NetworkManager</a>.<br/><br/>Version: %1 267 | <strong><a href="https://github.com/palinek/nm-tray">nm-tray</a></strong> je jednoduchá nadstavba pro <a href="https://wiki.gnome.org/Projects/NetworkManager">NetworkManager</a>, založená na Qt.<br/><br/>Verze: %1 268 | 269 | 270 | 271 | WindowMenu 272 | 273 | 274 | Active connection(s) 275 | Aktivní připojení 276 | 277 | 278 | 279 | Wi-Fi network(s) 280 | WiFi sítě 281 | 282 | 283 | 284 | Known connection(s) 285 | Známá připojení 286 | 287 | 288 | 289 | -------------------------------------------------------------------------------- /translations/nm-tray_da.ts: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | ConnectionInfo 6 | 7 | 8 | Connection information 9 | Forbindelsesinformation 10 | 11 | 12 | 13 | NmList 14 | 15 | 16 | All information 17 | Al information 18 | 19 | 20 | 21 | Active connections 22 | Aktive forbindelser 23 | 24 | 25 | 26 | Available wireless 27 | Tilgængelige trådløse 28 | 29 | 30 | 31 | NmModel 32 | 33 | 34 | nm-tray - wireless password 35 | nm-tray - adgangskode til trådløs 36 | 37 | 38 | 39 | Password is needed for connection to '%1': 40 | Der kræves adgangskode for at oprette forbindelse til '%1': 41 | 42 | 43 | 44 | root 45 | rod 46 | 47 | 48 | 49 | active connection(s) 50 | aktive forbindelser 51 | 52 | 53 | 54 | connection(s) 55 | forbindelse(r) 56 | 57 | 58 | 59 | device(s) 60 | enhed(er) 61 | 62 | 63 | 64 | wifi network(s) 65 | wifi-netværk 66 | 67 | 68 | 69 | unknown 70 | hardware address 71 | ukendt 72 | 73 | 74 | 75 | General 76 | Active connection information 77 | Generelt 78 | 79 | 80 | 81 | Interface 82 | Active connection information 83 | Grænseflade 84 | 85 | 86 | 87 | Hardware Address 88 | Active connection information 89 | Hardwareadresse 90 | 91 | 92 | 93 | Driver 94 | Active connection information 95 | 96 | 97 | 98 | 99 | Speed 100 | Active connection information 101 | Hastighed 102 | 103 | 104 | 105 | Kb/s 106 | Kb/s 107 | 108 | 109 | 110 | Mb/s 111 | Mb/s 112 | 113 | 114 | 115 | Gb/s 116 | Gb/s 117 | 118 | 119 | 120 | Tb/s 121 | Tb/s 122 | 123 | 124 | 125 | unknown 126 | Speed 127 | ukendt 128 | 129 | 130 | 131 | Security 132 | Active connection information 133 | Sikkerhed 134 | 135 | 136 | 137 | IPv4 138 | Active connection information 139 | 140 | 141 | 142 | 143 | IPv6 144 | Active connection information 145 | 146 | 147 | 148 | 149 | IP Address 150 | Active connection information 151 | IP-adresse 152 | 153 | 154 | 155 | Subnet Mask 156 | Active connection information 157 | Subnetmaske 158 | 159 | 160 | 161 | Default route 162 | Active connection information 163 | Standardrute 164 | 165 | 166 | 167 | DNS(%1) 168 | Active connection information 169 | 170 | 171 | 172 | 173 | Tray 174 | 175 | 176 | <pre>Connection <strong>%1</strong>(%2) active</pre> 177 | <pre>Forbindelse <strong>%1</strong>(%2) aktiv</pre> 178 | 179 | 180 | 181 | <pre>No active connection</pre> 182 | <pre>Ingen aktiv forbindelse</pre> 183 | 184 | 185 | 186 | Connection lost 187 | Forbindelse mistet 188 | 189 | 190 | 191 | No longer connected to %1 '%2'. 192 | Ikke længere forbundet til %1 '%2'. 193 | 194 | 195 | 196 | Connection established 197 | Forbindelse etableret 198 | 199 | 200 | 201 | Now connected to %1 '%2'. 202 | Nu forbundet til %1 '%2'. 203 | 204 | 205 | 206 | NetworkManager(nm-tray) 207 | 208 | 209 | 210 | 211 | Enable Networking 212 | Aktivér netværk 213 | 214 | 215 | 216 | Enable Wi-Fi 217 | Aktivér Wi-Fi 218 | 219 | 220 | 221 | Enable notifications 222 | Aktivér underretninger 223 | 224 | 225 | 226 | Connection information 227 | Forbindelsesinformation 228 | 229 | 230 | 231 | Debug information 232 | Fejlretningsinformation 233 | 234 | 235 | 236 | Wifi - request scan 237 | Wifi - anmod om skanning 238 | 239 | 240 | 241 | Edit connections... 242 | Rediger forbindelser ... 243 | 244 | 245 | 246 | About 247 | Om 248 | 249 | 250 | 251 | Quit 252 | Afslut 253 | 254 | 255 | 256 | nm-tray info 257 | nm-tray-info 258 | 259 | 260 | 261 | %1 about 262 | %1 om 263 | 264 | 265 | 266 | <strong><a href="https://github.com/palinek/nm-tray">nm-tray</a></strong> is a simple Qt based frontend for <a href="https://wiki.gnome.org/Projects/NetworkManager">NetworkManager</a>.<br/><br/>Version: %1 267 | <strong><a href="https://github.com/palinek/nm-tray">nm-tray</a></strong> er en simpel Qt-baseret frontend til <a href="https://wiki.gnome.org/Projects/NetworkManager">NetworkManager</a>.<br/><br/>Version: %1 268 | 269 | 270 | 271 | WindowMenu 272 | 273 | 274 | Active connection(s) 275 | Aktive forbindelser 276 | 277 | 278 | 279 | Wi-Fi network(s) 280 | Wi-Fi-netværk 281 | 282 | 283 | 284 | Known connection(s) 285 | Kendte forbindelser 286 | 287 | 288 | 289 | -------------------------------------------------------------------------------- /translations/nm-tray_et.ts: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | ConnectionInfo 6 | 7 | 8 | Connection information 9 | Võrguühenduse teave 10 | 11 | 12 | 13 | NmList 14 | 15 | 16 | All information 17 | Kõik teave 18 | 19 | 20 | 21 | Active connections 22 | Aktiivsed võrguühendused 23 | 24 | 25 | 26 | Available wireless 27 | Saadavalolevad traadita võrguühendused 28 | 29 | 30 | 31 | NmModel 32 | 33 | 34 | nm-tray - wireless password 35 | nm-tray - traadita võrgu salasõna 36 | 37 | 38 | 39 | Password is needed for connection to '%1': 40 | „%1“ ühendus eeldab ligipääsuks salasõna: 41 | 42 | 43 | 44 | root 45 | juur 46 | 47 | 48 | 49 | active connection(s) 50 | aktiivsed ühendused 51 | 52 | 53 | 54 | connection(s) 55 | ühendus(ed) 56 | 57 | 58 | 59 | device(s) 60 | seadmed 61 | 62 | 63 | 64 | wifi network(s) 65 | WiFi-võrgud 66 | 67 | 68 | 69 | unknown 70 | hardware address 71 | teadmata 72 | 73 | 74 | 75 | General 76 | Active connection information 77 | Üldist 78 | 79 | 80 | 81 | Interface 82 | Active connection information 83 | Võrguliides 84 | 85 | 86 | 87 | Hardware Address 88 | Active connection information 89 | Raudvara aadress 90 | 91 | 92 | 93 | Driver 94 | Active connection information 95 | Draiver 96 | 97 | 98 | 99 | Speed 100 | Active connection information 101 | Kiirus 102 | 103 | 104 | 105 | Kb/s 106 | Kb/s 107 | 108 | 109 | 110 | Mb/s 111 | Mb/s 112 | 113 | 114 | 115 | Gb/s 116 | Gb/s 117 | 118 | 119 | 120 | Tb/s 121 | Tb/s 122 | 123 | 124 | 125 | unknown 126 | Speed 127 | teadmata 128 | 129 | 130 | 131 | Security 132 | Active connection information 133 | Turvalisus 134 | 135 | 136 | 137 | IPv4 138 | Active connection information 139 | IPv4 140 | 141 | 142 | 143 | IPv6 144 | Active connection information 145 | IPv6 146 | 147 | 148 | 149 | IP Address 150 | Active connection information 151 | IP-aaddress 152 | 153 | 154 | 155 | Subnet Mask 156 | Active connection information 157 | Alamvõrgumask 158 | 159 | 160 | 161 | Default route 162 | Active connection information 163 | Vaikimisi marsruut 164 | 165 | 166 | 167 | DNS(%1) 168 | Active connection information 169 | Nimeserver(id) (%1) 170 | 171 | 172 | 173 | Tray 174 | 175 | 176 | <pre>Connection <strong>%1</strong>(%2) active</pre> 177 | <pre>Ühendus <strong>%1</strong>(%2) aktiivne</pre> 178 | 179 | 180 | 181 | <pre>No active connection</pre> 182 | <pre>Aktiivset ühendust pole</pre> 183 | 184 | 185 | 186 | Connection lost 187 | Ühendus on katkenud 188 | 189 | 190 | 191 | No longer connected to %1 '%2'. 192 | Ühendus on hetkel katkenud: %1 „%2“. 193 | 194 | 195 | 196 | Connection established 197 | Ühendus on loodud 198 | 199 | 200 | 201 | Now connected to %1 '%2'. 202 | Ühendus on loodud: %1 „%2“. 203 | 204 | 205 | 206 | NetworkManager(nm-tray) 207 | NetworkManager (nm-tray) 208 | 209 | 210 | 211 | Enable Networking 212 | Lülita võrguteenused sisse 213 | 214 | 215 | 216 | Enable Wi-Fi 217 | Lülita WiFi sisse 218 | 219 | 220 | 221 | Enable notifications 222 | Võta teavitused kasutusele 223 | 224 | 225 | 226 | Connection information 227 | Ühenduse teave 228 | 229 | 230 | 231 | Debug information 232 | Silumisteave 233 | 234 | 235 | 236 | Wifi - request scan 237 | Alusta WiFi võrgu otsingut 238 | 239 | 240 | 241 | Edit connections... 242 | Muuda ühendusi... 243 | 244 | 245 | 246 | About 247 | Rakenduse teave 248 | 249 | 250 | 251 | Quit 252 | Välju 253 | 254 | 255 | 256 | nm-tray info 257 | nm-tray teave 258 | 259 | 260 | 261 | %1 about 262 | Rakenduse teave: %1 263 | 264 | 265 | 266 | <strong><a href="https://github.com/palinek/nm-tray">nm-tray</a></strong> is a simple Qt based frontend for <a href="https://wiki.gnome.org/Projects/NetworkManager">NetworkManager</a>.<br/><br/>Version: %1 267 | <strong><a href="https://github.com/palinek/nm-tray">nm-tray</a></strong> on lihtne Qt-põhine graafiline kasutajaliides <a href="https://wiki.gnome.org/Projects/NetworkManager">NetworkManager</a>i jaoks.<br/><br/>Versioon: %1 268 | 269 | 270 | 271 | WindowMenu 272 | 273 | 274 | Active connection(s) 275 | Aktiivsed ühendused 276 | 277 | 278 | 279 | Wi-Fi network(s) 280 | WiFi-võrgud 281 | 282 | 283 | 284 | Known connection(s) 285 | Teadaolevad ühendused 286 | 287 | 288 | 289 | -------------------------------------------------------------------------------- /translations/nm-tray_fa.ts: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | ConnectionInfo 6 | 7 | 8 | Connection information 9 | اطلاعات اتصال 10 | 11 | 12 | 13 | NmList 14 | 15 | 16 | All information 17 | همه‌ی اطلاعات 18 | 19 | 20 | 21 | Active connections 22 | اتصال فعال 23 | 24 | 25 | 26 | Available wireless 27 | بی سیم در دسترس 28 | 29 | 30 | 31 | NmModel 32 | 33 | 34 | nm-tray - wireless password 35 | nm -tray - رمز عبور بی سیم 36 | 37 | 38 | 39 | Password is needed for connection to '%1': 40 | رمز عبور برای اتصال به '٪1' مورد نیاز است: 41 | 42 | 43 | 44 | root 45 | ریشه 46 | 47 | 48 | 49 | active connection(s) 50 | اتصال(های) فعال 51 | 52 | 53 | 54 | connection(s) 55 | اتصال(ها) 56 | 57 | 58 | 59 | device(s) 60 | دستگاه(ها) 61 | 62 | 63 | 64 | wifi network(s) 65 | شبکه(های) بی‌سیم 66 | 67 | 68 | 69 | unknown 70 | hardware address 71 | ناشناخته 72 | 73 | 74 | 75 | General 76 | Active connection information 77 | عمومی 78 | 79 | 80 | 81 | Interface 82 | Active connection information 83 | رابط 84 | 85 | 86 | 87 | Hardware Address 88 | Active connection information 89 | ادرس سخت افزار 90 | 91 | 92 | 93 | Driver 94 | Active connection information 95 | درایور 96 | 97 | 98 | 99 | Speed 100 | Active connection information 101 | سرعت 102 | 103 | 104 | 105 | Kb/s 106 | Kb/s 107 | 108 | 109 | 110 | Mb/s 111 | Mb/s 112 | 113 | 114 | 115 | Gb/s 116 | Gb/s 117 | 118 | 119 | 120 | Tb/s 121 | Tb/s 122 | 123 | 124 | Kb/s 125 | کیلوبایت بر ثانیه 126 | 127 | 128 | 129 | unknown 130 | Speed 131 | ناشناخته 132 | 133 | 134 | 135 | Security 136 | Active connection information 137 | امنیت 138 | 139 | 140 | 141 | IPv4 142 | Active connection information 143 | IPv4 144 | 145 | 146 | 147 | IPv6 148 | Active connection information 149 | IPv6 150 | 151 | 152 | 153 | IP Address 154 | Active connection information 155 | ادرس IP 156 | 157 | 158 | 159 | Subnet Mask 160 | Active connection information 161 | Subnet Mask 162 | 163 | 164 | 165 | Default route 166 | Active connection information 167 | مسیر پیش‌فرض 168 | 169 | 170 | 171 | DNS(%1) 172 | Active connection information 173 | DNS(%1) 174 | 175 | 176 | 177 | Tray 178 | 179 | 180 | <pre>Connection <strong>%1</strong>(%2) active</pre> 181 | <pre>اتصال <strong>%1</strong>(%2) فعال</pre> 182 | 183 | 184 | 185 | <pre>No active connection</pre> 186 | <pre>صفر اتصال فعال</pre> 187 | 188 | 189 | 190 | Connection lost 191 | اتصال از دست رفت 192 | 193 | 194 | 195 | No longer connected to %1 '%2'. 196 | دیگر به %1 '%2' متصل نیست. 197 | 198 | 199 | 200 | Connection established 201 | اتصال برقرار است 202 | 203 | 204 | 205 | Now connected to %1 '%2'. 206 | الان به %1 '%2' متصل است. 207 | 208 | 209 | 210 | NetworkManager(nm-tray) 211 | مدیرشبکه (nm-tray) 212 | 213 | 214 | 215 | Enable Networking 216 | فعال کردن شبکه 217 | 218 | 219 | 220 | Enable Wi-Fi 221 | فعال سازی بی سیم 222 | 223 | 224 | 225 | Enable notifications 226 | فعال سازی اطلاع‌رسانی 227 | 228 | 229 | 230 | Connection information 231 | اطلاعات اتصال 232 | 233 | 234 | 235 | Debug information 236 | اطلاعات اشکال‌زدایی 237 | 238 | 239 | 240 | Wifi - request scan 241 | بی‌سیم - درخواست اسکن 242 | 243 | 244 | 245 | Edit connections... 246 | ویرایش اتصالات.. 247 | 248 | 249 | 250 | About 251 | درباره 252 | 253 | 254 | 255 | Quit 256 | خروج 257 | 258 | 259 | 260 | nm-tray info 261 | اطلاعات nm-tray 262 | 263 | 264 | 265 | %1 about 266 | درباره %1 267 | 268 | 269 | 270 | <strong><a href="https://github.com/palinek/nm-tray">nm-tray</a></strong> is a simple Qt based frontend for <a href="https://wiki.gnome.org/Projects/NetworkManager">NetworkManager</a>.<br/><br/>Version: %1 271 | <strong><a href="https://github.com/palinek/nm-tray">nm-tray</a></strong> یک رویه ساده برپایه Qt برای <a href="https://wiki.gnome.org/Projects/NetworkManager">NetworkManager</a>.<br/><br/>نسخه: %1 272 | 273 | 274 | 275 | WindowMenu 276 | 277 | 278 | Active connection(s) 279 | اتصال(های) فعال 280 | 281 | 282 | 283 | Wi-Fi network(s) 284 | شبکه (های) بی‌سیم 285 | 286 | 287 | 288 | Known connection(s) 289 | اتصالات شناخته شده 290 | 291 | 292 | 293 | -------------------------------------------------------------------------------- /translations/nm-tray_fi.ts: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | ConnectionInfo 6 | 7 | 8 | Connection information 9 | Yhteystiedot 10 | 11 | 12 | 13 | NmList 14 | 15 | 16 | All information 17 | Kaikki tiedot 18 | 19 | 20 | 21 | Active connections 22 | Aktiiviset yhteydet 23 | 24 | 25 | 26 | Available wireless 27 | Saatavilla olevat langattomat verkot 28 | 29 | 30 | 31 | NmModel 32 | 33 | 34 | nm-tray - wireless password 35 | nm-tray – WLAN-salasana 36 | 37 | 38 | 39 | Password is needed for connection to '%1': 40 | Yhteys ”%1” vaatii salasanan: 41 | 42 | 43 | 44 | root 45 | juuri 46 | 47 | 48 | 49 | active connection(s) 50 | aktiiviset yhteydet 51 | 52 | 53 | 54 | connection(s) 55 | yhteydet 56 | 57 | 58 | 59 | device(s) 60 | laitteet 61 | 62 | 63 | 64 | wifi network(s) 65 | WLAN-verkot 66 | 67 | 68 | 69 | unknown 70 | hardware address 71 | tuntematon 72 | 73 | 74 | 75 | General 76 | Active connection information 77 | Yleistä 78 | 79 | 80 | 81 | Interface 82 | Active connection information 83 | Liitäntä 84 | 85 | 86 | 87 | Hardware Address 88 | Active connection information 89 | Laiteosoite 90 | 91 | 92 | 93 | Driver 94 | Active connection information 95 | Ajuri 96 | 97 | 98 | 99 | Speed 100 | Active connection information 101 | Nopeus 102 | 103 | 104 | 105 | Kb/s 106 | Kb/s 107 | 108 | 109 | 110 | Mb/s 111 | Mb/s 112 | 113 | 114 | 115 | Gb/s 116 | Gb/s 117 | 118 | 119 | 120 | Tb/s 121 | Tb/s 122 | 123 | 124 | Kb/s 125 | kt/s 126 | 127 | 128 | 129 | unknown 130 | Speed 131 | tuntematon 132 | 133 | 134 | 135 | Security 136 | Active connection information 137 | Tietoturva 138 | 139 | 140 | 141 | IPv4 142 | Active connection information 143 | IPv4 144 | 145 | 146 | 147 | IPv6 148 | Active connection information 149 | IPv6 150 | 151 | 152 | 153 | IP Address 154 | Active connection information 155 | IP-osoite 156 | 157 | 158 | 159 | Subnet Mask 160 | Active connection information 161 | Aliverkon peite 162 | 163 | 164 | 165 | Default route 166 | Active connection information 167 | Oletusreitti 168 | 169 | 170 | 171 | DNS(%1) 172 | Active connection information 173 | DNS (%1) 174 | 175 | 176 | 177 | Tray 178 | 179 | 180 | <pre>Connection <strong>%1</strong>(%2) active</pre> 181 | <pre>Yhteys <strong>%1</strong> (%2) aktiivinen</pre> 182 | 183 | 184 | 185 | <pre>No active connection</pre> 186 | <pre>Ei aktiivista yhteyttä</pre> 187 | 188 | 189 | 190 | Connection lost 191 | Yhteys menetetty 192 | 193 | 194 | 195 | No longer connected to %1 '%2'. 196 | Ei enää yhteyttä: %1 ”%2”. 197 | 198 | 199 | 200 | Connection established 201 | Yhteys muodostettu 202 | 203 | 204 | 205 | Now connected to %1 '%2'. 206 | Nyt yhdistetty: %1 ”%2”. 207 | 208 | 209 | 210 | NetworkManager(nm-tray) 211 | NetworkManager (nm-tray) 212 | 213 | 214 | 215 | Enable Networking 216 | Ota verkko käyttöön 217 | 218 | 219 | 220 | Enable Wi-Fi 221 | Ota langaton verkko käyttöön 222 | 223 | 224 | 225 | Enable notifications 226 | Ota ilmoitukset käyttöön 227 | 228 | 229 | 230 | Connection information 231 | Yhteystiedot 232 | 233 | 234 | 235 | Debug information 236 | Vianjäljitystiedot 237 | 238 | 239 | 240 | Wifi - request scan 241 | Langaton verkko – etsi 242 | 243 | 244 | 245 | Edit connections... 246 | Muokkaa yhteyksiä… 247 | 248 | 249 | 250 | About 251 | Tietoa 252 | 253 | 254 | 255 | Quit 256 | Lopeta 257 | 258 | 259 | 260 | nm-tray info 261 | Tietoa nm-traystä 262 | 263 | 264 | 265 | %1 about 266 | Tietoa – %1 267 | 268 | 269 | 270 | <strong><a href="https://github.com/palinek/nm-tray">nm-tray</a></strong> is a simple Qt based frontend for <a href="https://wiki.gnome.org/Projects/NetworkManager">NetworkManager</a>.<br/><br/>Version: %1 271 | <strong><a href="https://github.com/palinek/nm-tray">nm-tray</a></strong> on yksinkertainen Qt-pohjainen käyttöliittymä <a href="https:// wiki.gnome.org/Projects/NetworkManager">NetworkManager</a>.<br/><br/>Versio: %1 272 | 273 | 274 | 275 | WindowMenu 276 | 277 | 278 | Active connection(s) 279 | Aktiiviset yhteydet 280 | 281 | 282 | 283 | Wi-Fi network(s) 284 | Langattomat verkot 285 | 286 | 287 | 288 | Known connection(s) 289 | Tunnetut yhteydet 290 | 291 | 292 | 293 | -------------------------------------------------------------------------------- /translations/nm-tray_he.ts: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | ConnectionInfo 6 | 7 | 8 | Connection information 9 | פרטי החיבור 10 | 11 | 12 | 13 | NmList 14 | 15 | Dialog 16 | תיבת דו־שיח 17 | 18 | 19 | 20 | All information 21 | כל הפרטים 22 | 23 | 24 | 25 | Active connections 26 | חיבורים פעילים 27 | 28 | 29 | 30 | Available wireless 31 | אלחוטיות זמינות 32 | 33 | 34 | 35 | NmModel 36 | 37 | 38 | root 39 | 40 | 41 | 42 | 43 | active connection(s) 44 | חיבורים פעילים 45 | 46 | 47 | 48 | connection(s) 49 | חיבורים 50 | 51 | 52 | 53 | device(s) 54 | התקנים 55 | 56 | 57 | 58 | wifi network(s) 59 | רשתות אלחוטיות 60 | 61 | 62 | 63 | unknown 64 | hardware address 65 | לא ידוע 66 | 67 | 68 | 69 | nm-tray - wireless password 70 | nm-tray - ססמה לרשת אלחוטית 71 | 72 | 73 | 74 | Password is needed for connection to '%1': 75 | נדרשת ססמה כדי להתחבר אל ‚%1’: 76 | 77 | 78 | 79 | General 80 | Active connection information 81 | כללי 82 | 83 | 84 | 85 | Interface 86 | Active connection information 87 | מנשק 88 | 89 | 90 | 91 | Hardware Address 92 | Active connection information 93 | כתובת חומרה 94 | 95 | 96 | 97 | Driver 98 | Active connection information 99 | מנהל התקן 100 | 101 | 102 | 103 | Speed 104 | Active connection information 105 | מהירות 106 | 107 | 108 | Kb/s 109 | קסל״ש 110 | 111 | 112 | 113 | Kb/s 114 | קסל״ש 115 | 116 | 117 | 118 | Mb/s 119 | מסל״ש 120 | 121 | 122 | 123 | Gb/s 124 | גסל״ש 125 | 126 | 127 | 128 | Tb/s 129 | טסל״ש 130 | 131 | 132 | 133 | unknown 134 | Speed 135 | לא ידועה 136 | 137 | 138 | 139 | Security 140 | Active connection information 141 | אבטחה 142 | 143 | 144 | 145 | IPv4 146 | Active connection information 147 | 148 | 149 | 150 | 151 | IPv6 152 | Active connection information 153 | 154 | 155 | 156 | 157 | IP Address 158 | Active connection information 159 | כתובת IP 160 | 161 | 162 | 163 | Subnet Mask 164 | Active connection information 165 | מסכת רשת 166 | 167 | 168 | 169 | Default route 170 | Active connection information 171 | נתיב בררת מחדל 172 | 173 | 174 | 175 | DNS(%1) 176 | Active connection information 177 | 178 | 179 | 180 | 181 | Tray 182 | 183 | 184 | Connection lost 185 | החיבור נותק 186 | 187 | 188 | 189 | Connection established 190 | החיבור הצליח 191 | 192 | 193 | 194 | NetworkManager(nm-tray) 195 | 196 | 197 | 198 | 199 | Enable Networking 200 | הפעלת קישוריות רשת 201 | 202 | 203 | 204 | <pre>Connection <strong>%1</strong>(%2) active</pre> 205 | <pre>החיבור <strong>%1</strong>(%2) פעיל</pre> 206 | 207 | 208 | 209 | <pre>No active connection</pre> 210 | <pre>אין חיבורים פעילים</pre> 211 | 212 | 213 | 214 | No longer connected to %1 '%2'. 215 | החיבור אל %1 נותק ‚%2’. 216 | 217 | 218 | 219 | Now connected to %1 '%2'. 220 | הצלחנו להתחבר אל %1 ‚%2’. 221 | 222 | 223 | 224 | Enable Wi-Fi 225 | הפעלת חיבור אלחוטי 226 | 227 | 228 | 229 | Enable notifications 230 | הפעלת התרעות 231 | 232 | 233 | 234 | Connection information 235 | פרטי החיבור 236 | 237 | 238 | 239 | Debug information 240 | פרטים לניפוי שגיאות 241 | 242 | 243 | 244 | Wifi - request scan 245 | רשת אלחוטית - בקשת סריקה 246 | 247 | 248 | 249 | Edit connections... 250 | עריכת חיבורים… 251 | 252 | 253 | 254 | About 255 | על אודות 256 | 257 | 258 | 259 | Quit 260 | יציאה 261 | 262 | 263 | 264 | %1 about 265 | על אודות %1 266 | 267 | 268 | 269 | <strong><a href="https://github.com/palinek/nm-tray">nm-tray</a></strong> is a simple Qt based frontend for <a href="https://wiki.gnome.org/Projects/NetworkManager">NetworkManager</a>.<br/><br/>Version: %1 270 | <strong><a href="https://github.com/palinek/nm-tray">nm-tray</a></strong> הוא מנשק מבוסס Qt עבור <a href="https://wiki.gnome.org/Projects/NetworkManager">NetworkManager</a>.<br/><br/>גרסה: %1 271 | 272 | 273 | 274 | nm-tray info 275 | פרטי nm-tray 276 | 277 | 278 | 279 | WindowMenu 280 | 281 | 282 | Active connection(s) 283 | חיבורים פעילים 284 | 285 | 286 | 287 | Wi-Fi network(s) 288 | רשתות אלחוטיות 289 | 290 | 291 | 292 | Known connection(s) 293 | חיבורים מוכרים 294 | 295 | 296 | 297 | -------------------------------------------------------------------------------- /translations/nm-tray_hi.ts: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | ConnectionInfo 6 | 7 | 8 | Connection information 9 | कनेक्शन की जानकारी 10 | 11 | 12 | 13 | NmList 14 | 15 | 16 | All information 17 | संपूर्ण जानकारी 18 | 19 | 20 | 21 | Active connections 22 | सक्रिय कनेक्शन 23 | 24 | 25 | 26 | Available wireless 27 | उपलब्ध वायरलेस 28 | 29 | 30 | 31 | NmModel 32 | 33 | 34 | nm-tray - wireless password 35 | nm-tray - वायरलेस पासवर्ड 36 | 37 | 38 | 39 | Password is needed for connection to '%1': 40 | '%1' से कनेक्शन के लिए पासवर्ड आवश्यक है: 41 | 42 | 43 | 44 | root 45 | root 46 | 47 | 48 | 49 | active connection(s) 50 | सक्रिय कनेक्शन 51 | 52 | 53 | 54 | connection(s) 55 | कनेक्शन 56 | 57 | 58 | 59 | device(s) 60 | डिवाइस 61 | 62 | 63 | 64 | wifi network(s) 65 | wifi नेटवर्क 66 | 67 | 68 | 69 | unknown 70 | hardware address 71 | अज्ञात 72 | 73 | 74 | 75 | General 76 | Active connection information 77 | जनरल 78 | 79 | 80 | 81 | Interface 82 | Active connection information 83 | इंटरफेस 84 | 85 | 86 | 87 | Hardware Address 88 | Active connection information 89 | हार्डवेयर पता 90 | 91 | 92 | 93 | Driver 94 | Active connection information 95 | ड्राइवर 96 | 97 | 98 | 99 | Speed 100 | Active connection information 101 | गति 102 | 103 | 104 | 105 | Kb/s 106 | Kb/s 107 | 108 | 109 | 110 | Mb/s 111 | Mb/s 112 | 113 | 114 | 115 | Gb/s 116 | Gb/s 117 | 118 | 119 | 120 | Tb/s 121 | Tb/s 122 | 123 | 124 | 125 | unknown 126 | Speed 127 | अज्ञात 128 | 129 | 130 | 131 | Security 132 | Active connection information 133 | सुरक्षा 134 | 135 | 136 | 137 | IPv4 138 | Active connection information 139 | IPv4 140 | 141 | 142 | 143 | IPv6 144 | Active connection information 145 | IPv6 146 | 147 | 148 | 149 | IP Address 150 | Active connection information 151 | IP पता 152 | 153 | 154 | 155 | Subnet Mask 156 | Active connection information 157 | सबनेट मास्क 158 | 159 | 160 | 161 | Default route 162 | Active connection information 163 | डिफ़ॉल्ट मार्ग 164 | 165 | 166 | 167 | DNS(%1) 168 | Active connection information 169 | DNS(%1) 170 | 171 | 172 | 173 | Tray 174 | 175 | 176 | <pre>Connection <strong>%1</strong>(%2) active</pre> 177 | <pre>कनेक्शन <strong>%1</strong>(%2) सक्रिय</pre> 178 | 179 | 180 | 181 | <pre>No active connection</pre> 182 | <pre>कोई सक्रिय कनेक्शन नहीं</pre> 183 | 184 | 185 | 186 | Connection lost 187 | कनेक्शन टूट गया 188 | 189 | 190 | 191 | No longer connected to %1 '%2'. 192 | अब %1 '%2' से कनेक्ट नहीं है। 193 | 194 | 195 | 196 | Connection established 197 | कनेक्शन स्थापित 198 | 199 | 200 | 201 | Now connected to %1 '%2'. 202 | अब %1 '%2' से जुड़ा है। 203 | 204 | 205 | 206 | NetworkManager(nm-tray) 207 | NetworkManager(nm-tray) 208 | 209 | 210 | 211 | Enable Networking 212 | नेटवर्किंग सक्षम करें 213 | 214 | 215 | 216 | Enable Wi-Fi 217 | Wi-Fi सक्षम करें 218 | 219 | 220 | 221 | Enable notifications 222 | सूचनाएं सक्षम करें 223 | 224 | 225 | 226 | Connection information 227 | कनेक्शन की जानकारी 228 | 229 | 230 | 231 | Debug information 232 | डीबग जानकारी 233 | 234 | 235 | 236 | Wifi - request scan 237 | Wifi - स्कैन अनुरोध 238 | 239 | 240 | 241 | Edit connections... 242 | कनेक्शन संपादित करें… 243 | 244 | 245 | 246 | About 247 | बारे में 248 | 249 | 250 | 251 | Quit 252 | छोड़ें 253 | 254 | 255 | 256 | nm-tray info 257 | nm-tray जानकारी 258 | 259 | 260 | 261 | %1 about 262 | %1 के बारे में 263 | 264 | 265 | 266 | <strong><a href="https://github.com/palinek/nm-tray">nm-tray</a></strong> is a simple Qt based frontend for <a href="https://wiki.gnome.org/Projects/NetworkManager">NetworkManager</a>.<br/><br/>Version: %1 267 | <strong><a href="https://github.com/palinek/nm-tray">nm-tray</a></strong> <a href="https://wiki.gnome.org/Projects/NetworkManager">NetworkManager</a>.<br/><br/>संस्करण: %1 के लिए एक सरल Qt आधारित फ्रंटएंड है 268 | 269 | 270 | 271 | WindowMenu 272 | 273 | 274 | Active connection(s) 275 | सक्रिय कनेक्शन 276 | 277 | 278 | 279 | Wi-Fi network(s) 280 | Wi-Fi नेटवर्क 281 | 282 | 283 | 284 | Known connection(s) 285 | ज्ञात कनेक्शन 286 | 287 | 288 | 289 | -------------------------------------------------------------------------------- /translations/nm-tray_hr.ts: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | ConnectionInfo 6 | 7 | 8 | Connection information 9 | Podaci veze 10 | 11 | 12 | 13 | NmList 14 | 15 | 16 | All information 17 | Sve informacije 18 | 19 | 20 | 21 | Active connections 22 | Aktivne veze 23 | 24 | 25 | 26 | Available wireless 27 | Dostupne bežične veze 28 | 29 | 30 | 31 | NmModel 32 | 33 | 34 | nm-tray - wireless password 35 | nm-tray – lozinka za bežičnu vezu 36 | 37 | 38 | 39 | Password is needed for connection to '%1': 40 | Potrebna je lozinka za vezu „%1”: 41 | 42 | 43 | 44 | root 45 | root 46 | 47 | 48 | 49 | active connection(s) 50 | aktivne veze 51 | 52 | 53 | 54 | connection(s) 55 | veze 56 | 57 | 58 | 59 | device(s) 60 | uređaji 61 | 62 | 63 | 64 | wifi network(s) 65 | wi-fi mreže 66 | 67 | 68 | 69 | unknown 70 | hardware address 71 | nepoznato 72 | 73 | 74 | 75 | General 76 | Active connection information 77 | Opće 78 | 79 | 80 | 81 | Interface 82 | Active connection information 83 | Sučelje 84 | 85 | 86 | 87 | Hardware Address 88 | Active connection information 89 | Adresa hardvera 90 | 91 | 92 | 93 | Driver 94 | Active connection information 95 | Upravljački program 96 | 97 | 98 | 99 | Speed 100 | Active connection information 101 | Brzina 102 | 103 | 104 | 105 | Kb/s 106 | Kb/s 107 | 108 | 109 | 110 | Mb/s 111 | Mb/s 112 | 113 | 114 | 115 | Gb/s 116 | Gb/s 117 | 118 | 119 | 120 | Tb/s 121 | Tb/s 122 | 123 | 124 | Kb/s 125 | Kb/s 126 | 127 | 128 | 129 | unknown 130 | Speed 131 | nepoznato 132 | 133 | 134 | 135 | Security 136 | Active connection information 137 | Sigurnost 138 | 139 | 140 | 141 | IPv4 142 | Active connection information 143 | IPv4 144 | 145 | 146 | 147 | IPv6 148 | Active connection information 149 | IPv6 150 | 151 | 152 | 153 | IP Address 154 | Active connection information 155 | IP adresa 156 | 157 | 158 | 159 | Subnet Mask 160 | Active connection information 161 | Maska podmreže 162 | 163 | 164 | 165 | Default route 166 | Active connection information 167 | Standardni prolaz 168 | 169 | 170 | 171 | DNS(%1) 172 | Active connection information 173 | DNS(%1) 174 | 175 | 176 | 177 | Tray 178 | 179 | 180 | <pre>Connection <strong>%1</strong>(%2) active</pre> 181 | <pre>Veza <strong>%1</strong>(%2) aktivna</pre> 182 | 183 | 184 | 185 | <pre>No active connection</pre> 186 | <pre>Nema aktivne veze</pre> 187 | 188 | 189 | 190 | Connection lost 191 | Veza izgubljena 192 | 193 | 194 | 195 | No longer connected to %1 '%2'. 196 | Više ne postoji veza s %1 „%2”. 197 | 198 | 199 | 200 | Connection established 201 | Veza uspostavljena 202 | 203 | 204 | 205 | Now connected to %1 '%2'. 206 | Povezano s %1 „%2”. 207 | 208 | 209 | 210 | NetworkManager(nm-tray) 211 | Upravljač mrežama (nm-tray) 212 | 213 | 214 | 215 | Enable Networking 216 | Aktiviraj mrežni rad 217 | 218 | 219 | 220 | Enable Wi-Fi 221 | Aktiviraj Wi-Fi 222 | 223 | 224 | 225 | Enable notifications 226 | Aktiviraj obavijesti 227 | 228 | 229 | 230 | Connection information 231 | Informacije o vezi 232 | 233 | 234 | 235 | Debug information 236 | Informacije o ispravljanju grešaka 237 | 238 | 239 | 240 | Wifi - request scan 241 | Wifi – pretraži 242 | 243 | 244 | 245 | Edit connections... 246 | Uredi veze ... 247 | 248 | 249 | 250 | About 251 | Informacije 252 | 253 | 254 | 255 | Quit 256 | Zatvori 257 | 258 | 259 | 260 | nm-tray info 261 | nm-tray informacije 262 | 263 | 264 | 265 | %1 about 266 | %1 informacije 267 | 268 | 269 | 270 | <strong><a href="https://github.com/palinek/nm-tray">nm-tray</a></strong> is a simple Qt based frontend for <a href="https://wiki.gnome.org/Projects/NetworkManager">NetworkManager</a>.<br/><br/>Version: %1 271 | <strong><a href="https://github.com/palinek/nm-tray">nm-tray</a></strong> je jednostavno Qt-bazirano sučelje za <a href="https://wiki.gnome.org/Projects/NetworkManager">Upravljač mrežama</a>.<br/><br/>Verzija: %1 272 | 273 | 274 | 275 | WindowMenu 276 | 277 | 278 | Active connection(s) 279 | Aktivne veze 280 | 281 | 282 | 283 | Wi-Fi network(s) 284 | Wi-Fi mreže 285 | 286 | 287 | 288 | Known connection(s) 289 | Poznate veze 290 | 291 | 292 | 293 | -------------------------------------------------------------------------------- /translations/nm-tray_ja.ts: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | ConnectionInfo 6 | 7 | 8 | Connection information 9 | 接続情報 10 | 11 | 12 | 13 | NmList 14 | 15 | 16 | All information 17 | すべての情報 18 | 19 | 20 | 21 | Active connections 22 | アクティブな接続 23 | 24 | 25 | 26 | Available wireless 27 | 利用可能なワイヤレス 28 | 29 | 30 | 31 | NmModel 32 | 33 | 34 | nm-tray - wireless password 35 | nm-tray - ワイヤレスのパスワード 36 | 37 | 38 | 39 | Password is needed for connection to '%1': 40 | '%1' へ接続するパスワード: 41 | 42 | 43 | 44 | root 45 | ルート 46 | 47 | 48 | 49 | active connection(s) 50 | アクティブな接続 51 | 52 | 53 | 54 | connection(s) 55 | 接続 56 | 57 | 58 | 59 | device(s) 60 | デバイス 61 | 62 | 63 | 64 | wifi network(s) 65 | Wi-Fi ネットワーク 66 | 67 | 68 | 69 | unknown 70 | hardware address 71 | 不明 72 | 73 | 74 | 75 | General 76 | Active connection information 77 | 全般 78 | 79 | 80 | 81 | Interface 82 | Active connection information 83 | インターフェイス 84 | 85 | 86 | 87 | Hardware Address 88 | Active connection information 89 | ハードウェアのアドレス 90 | 91 | 92 | 93 | Driver 94 | Active connection information 95 | ドライバー 96 | 97 | 98 | 99 | Speed 100 | Active connection information 101 | 速度 102 | 103 | 104 | 105 | Kb/s 106 | Kb/s 107 | 108 | 109 | 110 | Mb/s 111 | Mb/s 112 | 113 | 114 | 115 | Gb/s 116 | Gb/s 117 | 118 | 119 | 120 | Tb/s 121 | Tb/s 122 | 123 | 124 | Kb/s 125 | Kb/s 126 | 127 | 128 | 129 | unknown 130 | Speed 131 | 不明 132 | 133 | 134 | 135 | Security 136 | Active connection information 137 | セキュリティ 138 | 139 | 140 | 141 | IPv4 142 | Active connection information 143 | IPv4 144 | 145 | 146 | 147 | IPv6 148 | Active connection information 149 | IPv6 150 | 151 | 152 | 153 | IP Address 154 | Active connection information 155 | IP アドレス 156 | 157 | 158 | 159 | Subnet Mask 160 | Active connection information 161 | サブネットマスク 162 | 163 | 164 | 165 | Default route 166 | Active connection information 167 | デフォルトルート 168 | 169 | 170 | 171 | DNS(%1) 172 | Active connection information 173 | DNS (%1) 174 | 175 | 176 | 177 | Tray 178 | 179 | 180 | <pre>Connection <strong>%1</strong>(%2) active</pre> 181 | <pre><strong>%1</strong> (%2) へ接続中です</pre> 182 | 183 | 184 | 185 | <pre>No active connection</pre> 186 | <pre>アクティブな接続がありません</pre> 187 | 188 | 189 | 190 | Connection lost 191 | 接続切断 192 | 193 | 194 | 195 | No longer connected to %1 '%2'. 196 | %2 (%1) への接続が切れました。 197 | 198 | 199 | 200 | Connection established 201 | 接続確立 202 | 203 | 204 | 205 | Now connected to %1 '%2'. 206 | %2 (%1) へ接続しました。 207 | 208 | 209 | 210 | NetworkManager(nm-tray) 211 | NetworkManager (nm-tray) 212 | 213 | 214 | 215 | Enable Networking 216 | ネットワークを有効にする 217 | 218 | 219 | 220 | Enable Wi-Fi 221 | Wi-Fi を有効にする 222 | 223 | 224 | 225 | Enable notifications 226 | 通知を有効にする 227 | 228 | 229 | 230 | Connection information 231 | 接続情報 232 | 233 | 234 | 235 | Debug information 236 | デバッグ情報 237 | 238 | 239 | 240 | Wifi - request scan 241 | Wi-Fi - スキャンする 242 | 243 | 244 | 245 | Edit connections... 246 | 接続の編集... 247 | 248 | 249 | 250 | About 251 | nm-tray について 252 | 253 | 254 | 255 | Quit 256 | 終了 257 | 258 | 259 | 260 | nm-tray info 261 | nm-tray の情報 262 | 263 | 264 | 265 | %1 about 266 | %1 について 267 | 268 | 269 | 270 | <strong><a href="https://github.com/palinek/nm-tray">nm-tray</a></strong> is a simple Qt based frontend for <a href="https://wiki.gnome.org/Projects/NetworkManager">NetworkManager</a>.<br/><br/>Version: %1 271 | <strong><a href="https://github.com/palinek/nm-tray">nm-tray</a></strong> は <a href="https://wiki.gnome.org/Projects/NetworkManager">NetworkManager</a> のためのシンプルな Qt ベースのフロントエンドです。<br/><br/>Version: %1 272 | 273 | 274 | 275 | WindowMenu 276 | 277 | 278 | Active connection(s) 279 | アクティブな接続 280 | 281 | 282 | 283 | Wi-Fi network(s) 284 | Wi-Fi ネットワーク 285 | 286 | 287 | 288 | Known connection(s) 289 | 既知の接続 290 | 291 | 292 | 293 | -------------------------------------------------------------------------------- /translations/nm-tray_pa.ts: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | ConnectionInfo 6 | 7 | 8 | Connection information 9 | ਕਨੈਕਸ਼ਨ ਜਾਣਕਾਰੀ 10 | 11 | 12 | 13 | NmList 14 | 15 | 16 | All information 17 | ਸਾਰੀ ਜਾਣਕਾਰੀ 18 | 19 | 20 | 21 | Active connections 22 | ਸਰਗਰਮ ਕਨੈਕਸ਼ਨ 23 | 24 | 25 | 26 | Available wireless 27 | ਮੌਜੂਦ ਬੇਤਾਰ 28 | 29 | 30 | 31 | NmModel 32 | 33 | 34 | nm-tray - wireless password 35 | nm-tray - ਬੇਤਾਰ ਪਾਸਵਰਡ 36 | 37 | 38 | 39 | Password is needed for connection to '%1': 40 | '%1' ਨਾਲ ਕਨੈਕਸ਼ਨ ਲਈ ਪਾਸਵਰਡ ਚਾਹੀਦਾ ਹੈ: 41 | 42 | 43 | 44 | root 45 | ਰੂਟ 46 | 47 | 48 | 49 | active connection(s) 50 | ਸਰਗਰਮ ਕਨੈਕਸ਼ਨ 51 | 52 | 53 | 54 | connection(s) 55 | ਕਨੈਕਸ਼ਨ 56 | 57 | 58 | 59 | device(s) 60 | ਡਿਵਾਈਸ 61 | 62 | 63 | 64 | wifi network(s) 65 | ਵਾਈ-ਫਾਈ ਨੈੱਟਵਰਕ 66 | 67 | 68 | 69 | unknown 70 | hardware address 71 | ਅਣਪਛਾਤਾ 72 | 73 | 74 | 75 | General 76 | Active connection information 77 | ਸਧਾਰਨ 78 | 79 | 80 | 81 | Interface 82 | Active connection information 83 | ਇੰਟਰਫੇਸ 84 | 85 | 86 | 87 | Hardware Address 88 | Active connection information 89 | ਹਾਰਡਵੇਅਰ ਸਿਰਨਾਵਾਂ 90 | 91 | 92 | 93 | Driver 94 | Active connection information 95 | ਡਰਾਇਵਰ 96 | 97 | 98 | 99 | Speed 100 | Active connection information 101 | ਗਤੀ 102 | 103 | 104 | 105 | Kb/s 106 | Kb/s 107 | 108 | 109 | 110 | Mb/s 111 | Mb/s 112 | 113 | 114 | 115 | Gb/s 116 | Gb/s 117 | 118 | 119 | 120 | Tb/s 121 | Tb/s 122 | 123 | 124 | Kb/s 125 | Kb/ਸਕਿੰਟ 126 | 127 | 128 | 129 | unknown 130 | Speed 131 | ਅਣਪਛਾਤੀ 132 | 133 | 134 | 135 | Security 136 | Active connection information 137 | ਸੁਰੱਖਿਆ 138 | 139 | 140 | 141 | IPv4 142 | Active connection information 143 | IPv4 144 | 145 | 146 | 147 | IPv6 148 | Active connection information 149 | IPv6 150 | 151 | 152 | 153 | IP Address 154 | Active connection information 155 | IP ਸਿਰਨਾਵਾਂ 156 | 157 | 158 | 159 | Subnet Mask 160 | Active connection information 161 | ਸਬਨੈੱਟ ਮਾਸਕ 162 | 163 | 164 | 165 | Default route 166 | Active connection information 167 | ਡਿਫਾਲਟ ਰਾਊਟ 168 | 169 | 170 | 171 | DNS(%1) 172 | Active connection information 173 | DNS(%1) 174 | 175 | 176 | 177 | Tray 178 | 179 | 180 | <pre>Connection <strong>%1</strong>(%2) active</pre> 181 | <pre>ਕਨੈਕਸ਼ਨ <strong>%1</strong>(%2) ਸਰਗਰਮ</pre> 182 | 183 | 184 | 185 | <pre>No active connection</pre> 186 | <pre>ਕੋਈ ਸਰਗਰਮ ਕਨੈਕਸ਼ਨ ਨਹੀਂ ਹੈ</pre> 187 | 188 | 189 | 190 | Connection lost 191 | ਕਨੈਕਸ਼ਨ ਖ਼ਤਮ ਹੋਇਆ 192 | 193 | 194 | 195 | No longer connected to %1 '%2'. 196 | ਹੁਣ %1 '%2' ਨਾਲ ਕਨੈਕਟ ਨਹੀਂ ਰਹੇ। 197 | 198 | 199 | 200 | Connection established 201 | ਕਨੈਕਸ਼ਨ ਸਥਾਪਿਤ ਕੀਤਾ 202 | 203 | 204 | 205 | Now connected to %1 '%2'. 206 | ਹੁਣ %1 '%2' ਨਾਲ ਕਨੈਕਟ ਹੈ। 207 | 208 | 209 | 210 | NetworkManager(nm-tray) 211 | ਨੈੱਟਵਰਕ-ਮੈਨੇਜਰ(nm-tray) 212 | 213 | 214 | 215 | Enable Networking 216 | ਨੈੱਟਵਰਕਿੰਗ ਸਮਰੱਥ ਹੈ 217 | 218 | 219 | 220 | Enable Wi-Fi 221 | Wi-Fi ਸਮਰੱਥ ਕਰੋ 222 | 223 | 224 | 225 | Enable notifications 226 | ਸੂਚਨਾਵਾਂ ਸਮਰੱਥ ਕਰੋ 227 | 228 | 229 | 230 | Connection information 231 | ਕਨੈਕਸ਼ਨ ਜਾਣਕਾਰੀ 232 | 233 | 234 | 235 | Debug information 236 | ਡੀਬੱਗ ਜਾਣਕਾਰੀ 237 | 238 | 239 | 240 | Wifi - request scan 241 | Wi-Fi - ਸਕੈਨ ਦੀ ਬੇਨਤੀ 242 | 243 | 244 | 245 | Edit connections... 246 | ...ਕਨੈਕਸ਼ਨ ਸੋਧੋ 247 | 248 | 249 | 250 | About 251 | ਇਸ ਬਾਰੇ 252 | 253 | 254 | 255 | Quit 256 | ਬਾਹਰ 257 | 258 | 259 | 260 | nm-tray info 261 | nm-tray ਜਾਣਕਾਰੀ 262 | 263 | 264 | 265 | %1 about 266 | %1 ਬਾਰੇ 267 | 268 | 269 | 270 | <strong><a href="https://github.com/palinek/nm-tray">nm-tray</a></strong> is a simple Qt based frontend for <a href="https://wiki.gnome.org/Projects/NetworkManager">NetworkManager</a>.<br/><br/>Version: %1 271 | <strong><a href="https://github.com/palinek/nm-tray">nm-tray</a></strong> <a href="https://wiki.gnome.org/Projects/NetworkManager">NetworkManager</a> ਲਈ ਸਧਾਰਨ Qt ਅਧਾਰਿਤ ਫਰੰਟ-ਐਂਡ ਹੈ।<br/><br/>ਵਰਜ਼ਨ: %1 272 | 273 | 274 | 275 | WindowMenu 276 | 277 | 278 | Active connection(s) 279 | ਸਰਗਰਮ ਕਨੈਕਸ਼ਨ 280 | 281 | 282 | 283 | Wi-Fi network(s) 284 | Wi-Fi ਨੈੱਟਵਰਕ 285 | 286 | 287 | 288 | Known connection(s) 289 | ਜਾਣੇ-ਪਛਾਣੇ ਕਨੈਕਸ਼ਨ 290 | 291 | 292 | 293 | -------------------------------------------------------------------------------- /translations/nm-tray_zh_Hans.ts: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | ConnectionInfo 6 | 7 | 8 | Connection information 9 | 连接信息 10 | 11 | 12 | 13 | NmList 14 | 15 | 16 | All information 17 | 所有信息 18 | 19 | 20 | 21 | Active connections 22 | 活动连接 23 | 24 | 25 | 26 | Available wireless 27 | 可用的无线连接 28 | 29 | 30 | 31 | NmModel 32 | 33 | 34 | nm-tray - wireless password 35 | nm-tray - 无线密码 36 | 37 | 38 | 39 | Password is needed for connection to '%1': 40 | 需要密码以连接 '%1': 41 | 42 | 43 | 44 | root 45 | 46 | 47 | 48 | 49 | active connection(s) 50 | 活动连接 51 | 52 | 53 | 54 | connection(s) 55 | 连接 56 | 57 | 58 | 59 | device(s) 60 | 设备 61 | 62 | 63 | 64 | wifi network(s) 65 | wifi 网络 66 | 67 | 68 | 69 | unknown 70 | hardware address 71 | 未知 72 | 73 | 74 | 75 | General 76 | Active connection information 77 | 通用 78 | 79 | 80 | 81 | Interface 82 | Active connection information 83 | 接口 84 | 85 | 86 | 87 | Hardware Address 88 | Active connection information 89 | 硬件地址 90 | 91 | 92 | 93 | Driver 94 | Active connection information 95 | 驱动 96 | 97 | 98 | 99 | Speed 100 | Active connection information 101 | 速度 102 | 103 | 104 | 105 | Kb/s 106 | Kb/s 107 | 108 | 109 | 110 | Mb/s 111 | Mb/s 112 | 113 | 114 | 115 | Gb/s 116 | Gb/s 117 | 118 | 119 | 120 | Tb/s 121 | Tb/s 122 | 123 | 124 | Kb/s 125 | Kb/s 126 | 127 | 128 | 129 | unknown 130 | Speed 131 | 未知 132 | 133 | 134 | 135 | Security 136 | Active connection information 137 | 安全 138 | 139 | 140 | 141 | IPv4 142 | Active connection information 143 | IPv4 144 | 145 | 146 | 147 | IPv6 148 | Active connection information 149 | IPv6 150 | 151 | 152 | 153 | IP Address 154 | Active connection information 155 | IP 地址 156 | 157 | 158 | 159 | Subnet Mask 160 | Active connection information 161 | 子网掩码 162 | 163 | 164 | 165 | Default route 166 | Active connection information 167 | 默认路由 168 | 169 | 170 | 171 | DNS(%1) 172 | Active connection information 173 | DNS (%1) 174 | 175 | 176 | 177 | Tray 178 | 179 | 180 | <pre>Connection <strong>%1</strong>(%2) active</pre> 181 | <pre>活动连接 <strong>%1</strong> (%2)</pre> 182 | 183 | 184 | 185 | <pre>No active connection</pre> 186 | <pre>无活动连接</pre> 187 | 188 | 189 | 190 | Connection lost 191 | 连接丢失 192 | 193 | 194 | 195 | No longer connected to %1 '%2'. 196 | 不再连接到 %1 '%2'。 197 | 198 | 199 | 200 | Connection established 201 | 连接已建立 202 | 203 | 204 | 205 | Now connected to %1 '%2'. 206 | 当前连接到 %1 '%2'。 207 | 208 | 209 | 210 | NetworkManager(nm-tray) 211 | NetworkManager (nm-tray) 212 | 213 | 214 | 215 | Enable Networking 216 | 启用网络 217 | 218 | 219 | 220 | Enable Wi-Fi 221 | 启用 Wi-Fi 222 | 223 | 224 | 225 | Enable notifications 226 | 启用通知 227 | 228 | 229 | 230 | Connection information 231 | 连接信息 232 | 233 | 234 | 235 | Debug information 236 | 调试信息 237 | 238 | 239 | 240 | Wifi - request scan 241 | Wifi - 需要扫描 242 | 243 | 244 | 245 | Edit connections... 246 | 编辑连接... 247 | 248 | 249 | 250 | About 251 | 关于 252 | 253 | 254 | 255 | Quit 256 | 退出 257 | 258 | 259 | 260 | nm-tray info 261 | nm-tray 信息 262 | 263 | 264 | 265 | %1 about 266 | %1 关于 267 | 268 | 269 | 270 | <strong><a href="https://github.com/palinek/nm-tray">nm-tray</a></strong> is a simple Qt based frontend for <a href="https://wiki.gnome.org/Projects/NetworkManager">NetworkManager</a>.<br/><br/>Version: %1 271 | <strong><a href="https://github.com/palinek/nm-tray">nm-tray</a></strong> 是 <a href="https://wiki.gnome.org/Projects/NetworkManager">NetworkManager</a> 基于 Qt 的简单前端。<br/><br/>版本: %1 272 | 273 | 274 | 275 | WindowMenu 276 | 277 | 278 | Active connection(s) 279 | 活动连接 280 | 281 | 282 | 283 | Wi-Fi network(s) 284 | Wi-Fi 网络 285 | 286 | 287 | 288 | Known connection(s) 289 | 已知连接 290 | 291 | 292 | 293 | --------------------------------------------------------------------------------