├── .github └── ISSUE_TEMPLATE.md ├── .gitignore ├── AUTHORS ├── CMakeLists.txt ├── COPYING ├── README.md ├── agent.cpp ├── agent.h ├── agentadaptor.cpp ├── agentadaptor.h ├── agentdialog.cpp ├── agentdialog.h ├── agentdialog.ui ├── appletstrings.cpp ├── appletstrings.h ├── connmanobject.cpp ├── connmanobject.h ├── controller.cpp ├── controller.h ├── iconproducer.cpp ├── iconproducer.h ├── iconviewer ├── CMakeLists.txt ├── iconviewer.cpp ├── iconviewer.h ├── iconviewer.ui └── main.cpp ├── itemcontroller.cpp ├── itemcontroller.h ├── lxqt-connman-applet.desktop.in ├── main.cpp ├── resources.qrc ├── resources ├── signal-strength-0.svg ├── signal-strength-1.svg ├── signal-strength-2.svg ├── signal-strength-3.svg ├── signal-strength-4.svg ├── wired-connected.svg └── wired-disconnected.svg ├── serviceswindow.cpp ├── serviceswindow.h ├── serviceswindow.ui └── translations ├── lxqt-connman-applet.ts ├── lxqt-connman-applet_da.ts ├── lxqt-connman-applet_de.ts ├── lxqt-connman-applet_gl.ts ├── lxqt-connman-applet_hr.ts ├── lxqt-connman-applet_lt.ts ├── lxqt-connman-applet_pl.ts ├── lxqt-connman-applet_pt.ts └── lxqt-connman-applet_tr.ts /.github/ISSUE_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | ##### Expected Behavior 10 | 11 | 12 | 13 | ##### Current Behavior 14 | 15 | 16 | 17 | 18 | ##### Possible Solution 19 | 20 | 21 | 22 | ##### Steps to Reproduce (for bugs) 23 | 24 | 25 | 1. 26 | 2. 27 | 3. 28 | 4. 29 | 30 | ##### Context 31 | 32 | 33 | 34 | 35 | ##### System Information 36 | 37 | 38 | * Distribution & Version: 39 | * Kernel: 40 | * Qt Version: 41 | * liblxqt Version: 42 | * Package version: 43 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | build 2 | -------------------------------------------------------------------------------- /AUTHORS: -------------------------------------------------------------------------------- 1 | Copyright: 2 | Copyright (c) 2014-2015 Christian Surlykke 3 | 4 | License: LGPL-2.1+ 5 | The full text of the licenses can be found in the 'COPYING' file. 6 | -------------------------------------------------------------------------------- /CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.1.0 FATAL_ERROR) 2 | # CMP0000: Call the cmake_minimum_required() command at the beginning of the top-level 3 | # CMakeLists.txt file even before calling the project() command. 4 | # The cmake_minimum_required(VERSION) command implicitly invokes the cmake_policy(VERSION) 5 | # command to specify that the current project code is written for the given range of CMake 6 | # versions. 7 | project(lxqt-connman-applet) 8 | 9 | # Minimum Versions 10 | set(LXQT_MINIMUM_VERSION "0.14.0") 11 | set(QT_MINIMUM_VERSION "5.7.1") 12 | set(QTXDG_MINIMUM_VERSION "3.3.0") 13 | 14 | find_package(Qt5Widgets ${QT_MINIMUM_VERSION} REQUIRED) 15 | find_package(Qt5DBus ${QT_MINIMUM_VERSION} REQUIRED) 16 | find_package(Qt5Svg ${QT_MINIMUM_VERSION} REQUIRED) 17 | find_package(Qt5LinguistTools ${QT_MINIMUM_VERSION} REQUIRED) 18 | 19 | find_package(lxqt ${LXQT_MINIMUM_VERSION} REQUIRED) 20 | find_package(Qt5Xdg ${QTXDG_MINIMUM_VERSION} REQUIRED) 21 | 22 | include(LXQtPreventInSourceBuilds) 23 | include(LXQtCompilerSettings NO_POLICY_SCOPE) 24 | include(LXQtTranslate) 25 | 26 | file(GLOB SRCS *.cpp clickableframe.h *.xml *.qrc *ui) 27 | 28 | set(CMAKE_AUTORCC ON) 29 | set(CMAKE_AUTOMOC ON) 30 | set(CMAKE_AUTOUIC ON) 31 | set(CMAKE_INCLUDE_CURRENT_DIR ON) 32 | 33 | add_subdirectory(iconviewer) 34 | 35 | qt5_add_resources(QRCS_GENERATED ${QRCS}) 36 | 37 | include_directories( 38 | ${CMAKE_CURRENT_SOURCE_DIR} 39 | ${CMAKE_CURRENT_BINARY_DIR} 40 | ${QTXDG_INCLUDE_DIRS} 41 | ) 42 | set(APP_SHARE_DIR share/lxqt/${PROJECT_NAME}) 43 | 44 | # Translations ********************************** 45 | file(GLOB TRANSLATE_SOURCES *.ui *.h *.cpp) 46 | lxqt_translate_ts(QM_FILES 47 | UPDATE_TRANSLATIONS ${UPDATE_TRANSLATIONS} 48 | SOURCES 49 | ${TRANSLATE_SOURCES} 50 | INSTALL_DIR 51 | "${LXQT_TRANSLATIONS_DIR}/${PROJECT_NAME}" 52 | ) 53 | 54 | lxqt_app_translation_loader(QM_LOADER ${PROJECT_NAME}) 55 | 56 | lxqt_translate_desktop(DESKTOP_FILES SOURCES lxqt-connman-applet.desktop.in) 57 | 58 | #************************************************ 59 | 60 | add_executable(${PROJECT_NAME} 61 | ${SRCS} 62 | ${QRCS_GENERATED} 63 | ${DBUS_GENERATED} 64 | ${DESKTOP_FILES} 65 | ${QM_FILES} 66 | ${QM_LOADER} 67 | ) 68 | 69 | target_link_libraries(${PROJECT_NAME} 70 | lxqt 71 | Qt5::Core 72 | Qt5::Widgets 73 | Qt5::DBus 74 | Qt5::Svg) 75 | 76 | install(TARGETS ${PROJECT_NAME} RUNTIME DESTINATION bin) 77 | install(FILES ${CONFIG_FILES} DESTINATION ${APP_SHARE_DIR}) 78 | install(FILES ${DESKTOP_FILES} DESTINATION ${LXQT_ETC_XDG_DIR}/autostart) 79 | -------------------------------------------------------------------------------- /COPYING: -------------------------------------------------------------------------------- 1 | 2 | GNU LESSER GENERAL PUBLIC LICENSE 3 | Version 2.1, February 1999 4 | 5 | Copyright (C) 1991, 1999 Free Software Foundation, Inc. 6 | 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA 7 | Everyone is permitted to copy and distribute verbatim copies 8 | of this license document, but changing it is not allowed. 9 | 10 | [This is the first released version of the Lesser GPL. It also counts 11 | as the successor of the GNU Library Public License, version 2, hence 12 | the version number 2.1.] 13 | 14 | Preamble 15 | 16 | The licenses for most software are designed to take away your 17 | freedom to share and change it. By contrast, the GNU General Public 18 | Licenses are intended to guarantee your freedom to share and change 19 | free software--to make sure the software is free for all its users. 20 | 21 | This license, the Lesser General Public License, applies to some 22 | specially designated software packages--typically libraries--of the 23 | Free Software Foundation and other authors who decide to use it. You 24 | can use it too, but we suggest you first think carefully about whether 25 | this license or the ordinary General Public License is the better 26 | strategy to use in any particular case, based on the explanations 27 | below. 28 | 29 | When we speak of free software, we are referring to freedom of use, 30 | not price. Our General Public Licenses are designed to make sure that 31 | you have the freedom to distribute copies of free software (and charge 32 | for this service if you wish); that you receive source code or can get 33 | it if you want it; that you can change the software and use pieces of 34 | it in new free programs; and that you are informed that you can do 35 | these things. 36 | 37 | To protect your rights, we need to make restrictions that forbid 38 | distributors to deny you these rights or to ask you to surrender these 39 | rights. These restrictions translate to certain responsibilities for 40 | you if you distribute copies of the library or if you modify it. 41 | 42 | For example, if you distribute copies of the library, whether gratis 43 | or for a fee, you must give the recipients all the rights that we gave 44 | you. You must make sure that they, too, receive or can get the source 45 | code. If you link other code with the library, you must provide 46 | complete object files to the recipients, so that they can relink them 47 | with the library after making changes to the library and recompiling 48 | it. And you must show them these terms so they know their rights. 49 | 50 | We protect your rights with a two-step method: (1) we copyright the 51 | library, and (2) we offer you this license, which gives you legal 52 | permission to copy, distribute and/or modify the library. 53 | 54 | To protect each distributor, we want to make it very clear that 55 | there is no warranty for the free library. Also, if the library is 56 | modified by someone else and passed on, the recipients should know 57 | that what they have is not the original version, so that the original 58 | author's reputation will not be affected by problems that might be 59 | introduced by others. 60 | 61 | Finally, software patents pose a constant threat to the existence of 62 | any free program. We wish to make sure that a company cannot 63 | effectively restrict the users of a free program by obtaining a 64 | restrictive license from a patent holder. Therefore, we insist that 65 | any patent license obtained for a version of the library must be 66 | consistent with the full freedom of use specified in this license. 67 | 68 | Most GNU software, including some libraries, is covered by the 69 | ordinary GNU General Public License. This license, the GNU Lesser 70 | General Public License, applies to certain designated libraries, and 71 | is quite different from the ordinary General Public License. We use 72 | this license for certain libraries in order to permit linking those 73 | libraries into non-free programs. 74 | 75 | When a program is linked with a library, whether statically or using 76 | a shared library, the combination of the two is legally speaking a 77 | combined work, a derivative of the original library. The ordinary 78 | General Public License therefore permits such linking only if the 79 | entire combination fits its criteria of freedom. The Lesser General 80 | Public License permits more lax criteria for linking other code with 81 | the library. 82 | 83 | We call this license the "Lesser" General Public License because it 84 | does Less to protect the user's freedom than the ordinary General 85 | Public License. It also provides other free software developers Less 86 | of an advantage over competing non-free programs. These disadvantages 87 | are the reason we use the ordinary General Public License for many 88 | libraries. However, the Lesser license provides advantages in certain 89 | special circumstances. 90 | 91 | For example, on rare occasions, there may be a special need to 92 | encourage the widest possible use of a certain library, so that it 93 | becomes a de-facto standard. To achieve this, non-free programs must 94 | be allowed to use the library. A more frequent case is that a free 95 | library does the same job as widely used non-free libraries. In this 96 | case, there is little to gain by limiting the free library to free 97 | software only, so we use the Lesser General Public License. 98 | 99 | In other cases, permission to use a particular library in non-free 100 | programs enables a greater number of people to use a large body of 101 | free software. For example, permission to use the GNU C Library in 102 | non-free programs enables many more people to use the whole GNU 103 | operating system, as well as its variant, the GNU/Linux operating 104 | system. 105 | 106 | Although the Lesser General Public License is Less protective of the 107 | users' freedom, it does ensure that the user of a program that is 108 | linked with the Library has the freedom and the wherewithal to run 109 | that program using a modified version of the Library. 110 | 111 | The precise terms and conditions for copying, distribution and 112 | modification follow. Pay close attention to the difference between a 113 | "work based on the library" and a "work that uses the library". The 114 | former contains code derived from the library, whereas the latter must 115 | be combined with the library in order to run. 116 | 117 | GNU LESSER GENERAL PUBLIC LICENSE 118 | TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 119 | 120 | 0. This License Agreement applies to any software library or other 121 | program which contains a notice placed by the copyright holder or 122 | other authorized party saying it may be distributed under the terms of 123 | this Lesser General Public License (also called "this License"). 124 | Each licensee is addressed as "you". 125 | 126 | A "library" means a collection of software functions and/or data 127 | prepared so as to be conveniently linked with application programs 128 | (which use some of those functions and data) to form executables. 129 | 130 | The "Library", below, refers to any such software library or work 131 | which has been distributed under these terms. A "work based on the 132 | Library" means either the Library or any derivative work under 133 | copyright law: that is to say, a work containing the Library or a 134 | portion of it, either verbatim or with modifications and/or translated 135 | straightforwardly into another language. (Hereinafter, translation is 136 | included without limitation in the term "modification".) 137 | 138 | "Source code" for a work means the preferred form of the work for 139 | making modifications to it. For a library, complete source code means 140 | all the source code for all modules it contains, plus any associated 141 | interface definition files, plus the scripts used to control 142 | compilation and installation of the library. 143 | 144 | Activities other than copying, distribution and modification are not 145 | covered by this License; they are outside its scope. The act of 146 | running a program using the Library is not restricted, and output from 147 | such a program is covered only if its contents constitute a work based 148 | on the Library (independent of the use of the Library in a tool for 149 | writing it). Whether that is true depends on what the Library does 150 | and what the program that uses the Library does. 151 | 152 | 1. You may copy and distribute verbatim copies of the Library's 153 | complete source code as you receive it, in any medium, provided that 154 | you conspicuously and appropriately publish on each copy an 155 | appropriate copyright notice and disclaimer of warranty; keep intact 156 | all the notices that refer to this License and to the absence of any 157 | warranty; and distribute a copy of this License along with the 158 | Library. 159 | 160 | You may charge a fee for the physical act of transferring a copy, 161 | and you may at your option offer warranty protection in exchange for a 162 | fee. 163 | 164 | 2. You may modify your copy or copies of the Library or any portion 165 | of it, thus forming a work based on the Library, and copy and 166 | distribute such modifications or work under the terms of Section 1 167 | above, provided that you also meet all of these conditions: 168 | 169 | a) The modified work must itself be a software library. 170 | 171 | b) You must cause the files modified to carry prominent notices 172 | stating that you changed the files and the date of any change. 173 | 174 | c) You must cause the whole of the work to be licensed at no 175 | charge to all third parties under the terms of this License. 176 | 177 | d) If a facility in the modified Library refers to a function or a 178 | table of data to be supplied by an application program that uses 179 | the facility, other than as an argument passed when the facility 180 | is invoked, then you must make a good faith effort to ensure that, 181 | in the event an application does not supply such function or 182 | table, the facility still operates, and performs whatever part of 183 | its purpose remains meaningful. 184 | 185 | (For example, a function in a library to compute square roots has 186 | a purpose that is entirely well-defined independent of the 187 | application. Therefore, Subsection 2d requires that any 188 | application-supplied function or table used by this function must 189 | be optional: if the application does not supply it, the square 190 | root function must still compute square roots.) 191 | 192 | These requirements apply to the modified work as a whole. If 193 | identifiable sections of that work are not derived from the Library, 194 | and can be reasonably considered independent and separate works in 195 | themselves, then this License, and its terms, do not apply to those 196 | sections when you distribute them as separate works. But when you 197 | distribute the same sections as part of a whole which is a work based 198 | on the Library, the distribution of the whole must be on the terms of 199 | this License, whose permissions for other licensees extend to the 200 | entire whole, and thus to each and every part regardless of who wrote 201 | it. 202 | 203 | Thus, it is not the intent of this section to claim rights or contest 204 | your rights to work written entirely by you; rather, the intent is to 205 | exercise the right to control the distribution of derivative or 206 | collective works based on the Library. 207 | 208 | In addition, mere aggregation of another work not based on the Library 209 | with the Library (or with a work based on the Library) on a volume of 210 | a storage or distribution medium does not bring the other work under 211 | the scope of this License. 212 | 213 | 3. You may opt to apply the terms of the ordinary GNU General Public 214 | License instead of this License to a given copy of the Library. To do 215 | this, you must alter all the notices that refer to this License, so 216 | that they refer to the ordinary GNU General Public License, version 2, 217 | instead of to this License. (If a newer version than version 2 of the 218 | ordinary GNU General Public License has appeared, then you can specify 219 | that version instead if you wish.) Do not make any other change in 220 | these notices. 221 | 222 | Once this change is made in a given copy, it is irreversible for 223 | that copy, so the ordinary GNU General Public License applies to all 224 | subsequent copies and derivative works made from that copy. 225 | 226 | This option is useful when you wish to copy part of the code of 227 | the Library into a program that is not a library. 228 | 229 | 4. You may copy and distribute the Library (or a portion or 230 | derivative of it, under Section 2) in object code or executable form 231 | under the terms of Sections 1 and 2 above provided that you accompany 232 | it with the complete corresponding machine-readable source code, which 233 | must be distributed under the terms of Sections 1 and 2 above on a 234 | medium customarily used for software interchange. 235 | 236 | If distribution of object code is made by offering access to copy 237 | from a designated place, then offering equivalent access to copy the 238 | source code from the same place satisfies the requirement to 239 | distribute the source code, even though third parties are not 240 | compelled to copy the source along with the object code. 241 | 242 | 5. A program that contains no derivative of any portion of the 243 | Library, but is designed to work with the Library by being compiled or 244 | linked with it, is called a "work that uses the Library". Such a 245 | work, in isolation, is not a derivative work of the Library, and 246 | therefore falls outside the scope of this License. 247 | 248 | However, linking a "work that uses the Library" with the Library 249 | creates an executable that is a derivative of the Library (because it 250 | contains portions of the Library), rather than a "work that uses the 251 | library". The executable is therefore covered by this License. 252 | Section 6 states terms for distribution of such executables. 253 | 254 | When a "work that uses the Library" uses material from a header file 255 | that is part of the Library, the object code for the work may be a 256 | derivative work of the Library even though the source code is not. 257 | Whether this is true is especially significant if the work can be 258 | linked without the Library, or if the work is itself a library. The 259 | threshold for this to be true is not precisely defined by law. 260 | 261 | If such an object file uses only numerical parameters, data 262 | structure layouts and accessors, and small macros and small inline 263 | functions (ten lines or less in length), then the use of the object 264 | file is unrestricted, regardless of whether it is legally a derivative 265 | work. (Executables containing this object code plus portions of the 266 | Library will still fall under Section 6.) 267 | 268 | Otherwise, if the work is a derivative of the Library, you may 269 | distribute the object code for the work under the terms of Section 6. 270 | Any executables containing that work also fall under Section 6, 271 | whether or not they are linked directly with the Library itself. 272 | 273 | 6. As an exception to the Sections above, you may also combine or 274 | link a "work that uses the Library" with the Library to produce a 275 | work containing portions of the Library, and distribute that work 276 | under terms of your choice, provided that the terms permit 277 | modification of the work for the customer's own use and reverse 278 | engineering for debugging such modifications. 279 | 280 | You must give prominent notice with each copy of the work that the 281 | Library is used in it and that the Library and its use are covered by 282 | this License. You must supply a copy of this License. If the work 283 | during execution displays copyright notices, you must include the 284 | copyright notice for the Library among them, as well as a reference 285 | directing the user to the copy of this License. Also, you must do one 286 | of these things: 287 | 288 | a) Accompany the work with the complete corresponding 289 | machine-readable source code for the Library including whatever 290 | changes were used in the work (which must be distributed under 291 | Sections 1 and 2 above); and, if the work is an executable linked 292 | with the Library, with the complete machine-readable "work that 293 | uses the Library", as object code and/or source code, so that the 294 | user can modify the Library and then relink to produce a modified 295 | executable containing the modified Library. (It is understood 296 | that the user who changes the contents of definitions files in the 297 | Library will not necessarily be able to recompile the application 298 | to use the modified definitions.) 299 | 300 | b) Use a suitable shared library mechanism for linking with the 301 | Library. A suitable mechanism is one that (1) uses at run time a 302 | copy of the library already present on the user's computer system, 303 | rather than copying library functions into the executable, and (2) 304 | will operate properly with a modified version of the library, if 305 | the user installs one, as long as the modified version is 306 | interface-compatible with the version that the work was made with. 307 | 308 | c) Accompany the work with a written offer, valid for at least 309 | three years, to give the same user the materials specified in 310 | Subsection 6a, above, for a charge no more than the cost of 311 | performing this distribution. 312 | 313 | d) If distribution of the work is made by offering access to copy 314 | from a designated place, offer equivalent access to copy the above 315 | specified materials from the same place. 316 | 317 | e) Verify that the user has already received a copy of these 318 | materials or that you have already sent this user a copy. 319 | 320 | For an executable, the required form of the "work that uses the 321 | Library" must include any data and utility programs needed for 322 | reproducing the executable from it. However, as a special exception, 323 | the materials to be distributed need not include anything that is 324 | normally distributed (in either source or binary form) with the major 325 | components (compiler, kernel, and so on) of the operating system on 326 | which the executable runs, unless that component itself accompanies 327 | the executable. 328 | 329 | It may happen that this requirement contradicts the license 330 | restrictions of other proprietary libraries that do not normally 331 | accompany the operating system. Such a contradiction means you cannot 332 | use both them and the Library together in an executable that you 333 | distribute. 334 | 335 | 7. You may place library facilities that are a work based on the 336 | Library side-by-side in a single library together with other library 337 | facilities not covered by this License, and distribute such a combined 338 | library, provided that the separate distribution of the work based on 339 | the Library and of the other library facilities is otherwise 340 | permitted, and provided that you do these two things: 341 | 342 | a) Accompany the combined library with a copy of the same work 343 | based on the Library, uncombined with any other library 344 | facilities. This must be distributed under the terms of the 345 | Sections above. 346 | 347 | b) Give prominent notice with the combined library of the fact 348 | that part of it is a work based on the Library, and explaining 349 | where to find the accompanying uncombined form of the same work. 350 | 351 | 8. You may not copy, modify, sublicense, link with, or distribute 352 | the Library except as expressly provided under this License. Any 353 | attempt otherwise to copy, modify, sublicense, link with, or 354 | distribute the Library is void, and will automatically terminate your 355 | rights under this License. However, parties who have received copies, 356 | or rights, from you under this License will not have their licenses 357 | terminated so long as such parties remain in full compliance. 358 | 359 | 9. You are not required to accept this License, since you have not 360 | signed it. However, nothing else grants you permission to modify or 361 | distribute the Library or its derivative works. These actions are 362 | prohibited by law if you do not accept this License. Therefore, by 363 | modifying or distributing the Library (or any work based on the 364 | Library), you indicate your acceptance of this License to do so, and 365 | all its terms and conditions for copying, distributing or modifying 366 | the Library or works based on it. 367 | 368 | 10. Each time you redistribute the Library (or any work based on the 369 | Library), the recipient automatically receives a license from the 370 | original licensor to copy, distribute, link with or modify the Library 371 | subject to these terms and conditions. You may not impose any further 372 | restrictions on the recipients' exercise of the rights granted herein. 373 | You are not responsible for enforcing compliance by third parties with 374 | this License. 375 | 376 | 11. If, as a consequence of a court judgment or allegation of patent 377 | infringement or for any other reason (not limited to patent issues), 378 | conditions are imposed on you (whether by court order, agreement or 379 | otherwise) that contradict the conditions of this License, they do not 380 | excuse you from the conditions of this License. If you cannot 381 | distribute so as to satisfy simultaneously your obligations under this 382 | License and any other pertinent obligations, then as a consequence you 383 | may not distribute the Library at all. For example, if a patent 384 | license would not permit royalty-free redistribution of the Library by 385 | all those who receive copies directly or indirectly through you, then 386 | the only way you could satisfy both it and this License would be to 387 | refrain entirely from distribution of the Library. 388 | 389 | If any portion of this section is held invalid or unenforceable under 390 | any particular circumstance, the balance of the section is intended to 391 | apply, and the section as a whole is intended to apply in other 392 | circumstances. 393 | 394 | It is not the purpose of this section to induce you to infringe any 395 | patents or other property right claims or to contest validity of any 396 | such claims; this section has the sole purpose of protecting the 397 | integrity of the free software distribution system which is 398 | implemented by public license practices. Many people have made 399 | generous contributions to the wide range of software distributed 400 | through that system in reliance on consistent application of that 401 | system; it is up to the author/donor to decide if he or she is willing 402 | to distribute software through any other system and a licensee cannot 403 | impose that choice. 404 | 405 | This section is intended to make thoroughly clear what is believed to 406 | be a consequence of the rest of this License. 407 | 408 | 12. If the distribution and/or use of the Library is restricted in 409 | certain countries either by patents or by copyrighted interfaces, the 410 | original copyright holder who places the Library under this License 411 | may add an explicit geographical distribution limitation excluding those 412 | countries, so that distribution is permitted only in or among 413 | countries not thus excluded. In such case, this License incorporates 414 | the limitation as if written in the body of this License. 415 | 416 | 13. The Free Software Foundation may publish revised and/or new 417 | versions of the Lesser General Public License from time to time. 418 | Such new versions will be similar in spirit to the present version, 419 | but may differ in detail to address new problems or concerns. 420 | 421 | Each version is given a distinguishing version number. If the Library 422 | specifies a version number of this License which applies to it and 423 | "any later version", you have the option of following the terms and 424 | conditions either of that version or of any later version published by 425 | the Free Software Foundation. If the Library does not specify a 426 | license version number, you may choose any version ever published by 427 | the Free Software Foundation. 428 | 429 | 14. If you wish to incorporate parts of the Library into other free 430 | programs whose distribution conditions are incompatible with these, 431 | write to the author to ask for permission. For software which is 432 | copyrighted by the Free Software Foundation, write to the Free 433 | Software Foundation; we sometimes make exceptions for this. Our 434 | decision will be guided by the two goals of preserving the free status 435 | of all derivatives of our free software and of promoting the sharing 436 | and reuse of software generally. 437 | 438 | NO WARRANTY 439 | 440 | 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO 441 | WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. 442 | EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR 443 | OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY 444 | KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE 445 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 446 | PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE 447 | LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME 448 | THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 449 | 450 | 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN 451 | WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY 452 | AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU 453 | FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR 454 | CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE 455 | LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING 456 | RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A 457 | FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF 458 | SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH 459 | DAMAGES. 460 | 461 | END OF TERMS AND CONDITIONS 462 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # lxqt-connman-applet 2 | System-tray applet for connman 3 | 4 | 5 | This project isn't maintained anymore. 6 | -------------------------------------------------------------------------------- /agent.cpp: -------------------------------------------------------------------------------- 1 | /* BEGIN_COMMON_COPYRIGHT_HEADER 2 | * (c)LGPL2+ 3 | * 4 | * lxqt-connman-applet - a gui frontend for connman 5 | * 6 | * Copyright: 2014-2015 Christian Surlykke 7 | * 8 | * This program or library is free software; you can redistribute it 9 | * and/or modify it under the terms of the GNU Lesser General Public 10 | * License as published by the Free Software Foundation; either 11 | * version 2.1 of the License, or (at your option) any later version. 12 | * 13 | * This library 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 GNU 16 | * Lesser General Public License for more details. 17 | 18 | * You should have received a copy of the GNU Lesser General 19 | * Public License along with this library; if not, write to the 20 | * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 21 | * Boston, MA 02110-1301 USA 22 | * 23 | * END_COMMON_COPYRIGHT_HEADER */ 24 | 25 | #include 26 | #include 27 | #include "controller.h" 28 | #include "agentdialog.h" 29 | #include "agent.h" 30 | 31 | Agent::Agent() : QObject() 32 | { 33 | } 34 | 35 | void Agent::Release() 36 | { 37 | // Nothing to do 38 | } 39 | 40 | void Agent::Cancel() 41 | { 42 | qDebug() << "Canceled"; 43 | } 44 | 45 | void Agent::ReportError(QDBusObjectPath servicePath, QString errorMessage) 46 | { 47 | // FIXME 48 | } 49 | 50 | void Agent::ReportPeerError(QDBusObjectPath peerPath, QString errorMessage) 51 | { 52 | // FIXME 53 | } 54 | 55 | void Agent::RequestBrowser(QDBusObjectPath servicePath, QString url) 56 | { 57 | // FIXME 58 | } 59 | 60 | QVariantMap Agent::RequestInput(QDBusObjectPath servicePath, QVariantMap fields) 61 | { 62 | QString serviceName = serviceNames.value(servicePath.path(), servicePath.path()); 63 | if (serviceName.isEmpty()) 64 | { 65 | sendErrorReply("net.connman.Agent.Error.Canceled", "Unknown service"); 66 | return QVariantMap(); 67 | } 68 | 69 | AgentDialog agentDialog(serviceName, fields); 70 | connect(this, SIGNAL(operationCanceled()), &agentDialog, SLOT(reject())); 71 | 72 | if (AgentDialog::Rejected == agentDialog.exec()) 73 | { 74 | sendErrorReply("net.connman.Agent.Error.Canceled", "Cancelled"); 75 | return QVariantMap(); 76 | } 77 | return agentDialog.collectedInput(); 78 | } 79 | 80 | QVariantMap Agent::RequestPeerAuthorization(QDBusObjectPath peerPath, QVariantMap fields) 81 | { 82 | return QVariantMap(); // FIXME 83 | } 84 | 85 | -------------------------------------------------------------------------------- /agent.h: -------------------------------------------------------------------------------- 1 | /* BEGIN_COMMON_COPYRIGHT_HEADER 2 | * (c)LGPL2+ 3 | * 4 | * lxqt-connman-applet - a gui frontend for connman 5 | * 6 | * Copyright: 2014-2015 Christian Surlykke 7 | * 8 | * This program or library is free software; you can redistribute it 9 | * and/or modify it under the terms of the GNU Lesser General Public 10 | * License as published by the Free Software Foundation; either 11 | * version 2.1 of the License, or (at your option) any later version. 12 | * 13 | * This library 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 GNU 16 | * Lesser General Public License for more details. 17 | 18 | * You should have received a copy of the GNU Lesser General 19 | * Public License along with this library; if not, write to the 20 | * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 21 | * Boston, MA 02110-1301 USA 22 | * 23 | * END_COMMON_COPYRIGHT_HEADER */ 24 | 25 | #ifndef AGENT_H 26 | #define AGENT_H 27 | 28 | #include 29 | #include 30 | #include 31 | class Controller; 32 | 33 | class Agent : public QObject, public QDBusContext 34 | { 35 | Q_OBJECT 36 | 37 | public: 38 | explicit Agent(); 39 | 40 | void Release(); 41 | void Cancel(); 42 | void ReportError(QDBusObjectPath serviceName, QString errorMessage); 43 | void ReportPeerError(QDBusObjectPath peerName, QString errorMessage); 44 | void RequestBrowser(QDBusObjectPath serviceName, QString url); 45 | QVariantMap RequestInput(QDBusObjectPath serviceName, QVariantMap fields); 46 | QVariantMap RequestPeerAuthorization(QDBusObjectPath peerName, QVariantMap fields); 47 | 48 | QMap serviceNames; 49 | 50 | signals: 51 | void operationCanceled(); 52 | 53 | }; 54 | 55 | #endif // AGENT_H 56 | -------------------------------------------------------------------------------- /agentadaptor.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * This file was generated by qdbusxml2cpp version 0.8 and subsequently hand edited 3 | * 4 | * qdbusxml2cpp is Copyright (C) 2016 The Qt Company Ltd. 5 | * 6 | */ 7 | 8 | #include "agentadaptor.h" 9 | #include 10 | #include 11 | #include 12 | #include 13 | #include 14 | #include 15 | #include 16 | 17 | /* 18 | * Implementation of adaptor class AgentAdaptor 19 | */ 20 | 21 | AgentAdaptor::AgentAdaptor(Agent *parent) 22 | : QDBusAbstractAdaptor(parent) 23 | { 24 | // constructor 25 | setAutoRelaySignals(true); 26 | } 27 | 28 | AgentAdaptor::~AgentAdaptor() 29 | { 30 | // destructor 31 | } 32 | 33 | void AgentAdaptor::Cancel() 34 | { 35 | // handle method call net.connman.Agent.Cancel 36 | parent()->Cancel(); 37 | } 38 | 39 | void AgentAdaptor::Release() 40 | { 41 | // handle method call net.connman.Agent.Release 42 | parent()->Release(); 43 | } 44 | 45 | void AgentAdaptor::ReportError(const QDBusObjectPath &service, const QString &error) 46 | { 47 | // handle method call net.connman.Agent.ReportError 48 | parent()->ReportError(service, error); 49 | } 50 | 51 | void AgentAdaptor::ReportPeerError(const QDBusObjectPath &peer, const QString &error) 52 | { 53 | // handle method call net.connman.Agent.ReportPeerError 54 | parent()->ReportPeerError(peer, error); 55 | } 56 | 57 | void AgentAdaptor::RequestBrowser(const QDBusObjectPath &service, const QString &url) 58 | { 59 | // handle method call net.connman.Agent.RequestBrowser 60 | parent()->RequestBrowser(service, url); 61 | } 62 | 63 | QVariantMap AgentAdaptor::RequestInput(const QDBusObjectPath &service, const QVariantMap &fields) 64 | { 65 | // handle method call net.connman.Agent.RequestInput 66 | return parent()->RequestInput(service, fields); 67 | } 68 | 69 | QVariantMap AgentAdaptor::RequestPeerAuthorization(const QDBusObjectPath &peer, const QVariantMap &fields) 70 | { 71 | // handle method call net.connman.Agent.RequestPeerAuthorization 72 | return parent()->RequestPeerAuthorization(peer, fields); 73 | } 74 | 75 | #include "agentadaptor.moc" 76 | -------------------------------------------------------------------------------- /agentadaptor.h: -------------------------------------------------------------------------------- 1 | /* 2 | * This file was generated by qdbusxml2cpp version 0.8 and subsequently hand edited 3 | * 4 | * qdbusxml2cpp is Copyright (C) 2016 The Qt Company Ltd. 5 | * 6 | */ 7 | 8 | #ifndef AGENTADAPTOR_H 9 | #define AGENTADAPTOR_H 10 | 11 | #include 12 | #include 13 | #include "agent.h" 14 | QT_BEGIN_NAMESPACE 15 | class QByteArray; 16 | template class QList; 17 | template class QMap; 18 | class QString; 19 | class QStringList; 20 | class QVariant; 21 | QT_END_NAMESPACE 22 | 23 | /* 24 | * Adaptor class for interface net.connman.Agent 25 | */ 26 | class AgentAdaptor: public QDBusAbstractAdaptor 27 | { 28 | Q_OBJECT 29 | Q_CLASSINFO("D-Bus Interface", "net.connman.Agent") 30 | Q_CLASSINFO("D-Bus Introspection", "" 31 | " \n" 32 | " \n" 33 | " \n" 34 | " \n" 35 | " \n" 36 | " \n" 37 | " \n" 38 | " \n" 39 | " \n" 40 | " \n" 41 | " \n" 42 | " \n" 43 | " \n" 44 | " \n" 45 | " \n" 46 | " \n" 47 | " \n" 48 | " \n" 49 | " \n" 50 | " \n" 51 | " \n" 52 | " \n" 53 | " \n" 54 | " \n" 55 | " \n" 56 | " \n" 57 | " \n" 58 | " \n" 59 | " \n" 60 | " \n" 61 | "") 62 | public: 63 | AgentAdaptor(Agent *parent); 64 | virtual ~AgentAdaptor(); 65 | 66 | inline Agent *parent() const 67 | { return static_cast(QObject::parent()); } 68 | 69 | public: // PROPERTIES 70 | public Q_SLOTS: // METHODS 71 | void Cancel(); 72 | void Release(); 73 | void ReportError(const QDBusObjectPath &service, const QString &error); 74 | void ReportPeerError(const QDBusObjectPath &peer, const QString &error); 75 | void RequestBrowser(const QDBusObjectPath &service, const QString &url); 76 | QVariantMap RequestInput(const QDBusObjectPath &service, const QVariantMap &fields); 77 | QVariantMap RequestPeerAuthorization(const QDBusObjectPath &peer, const QVariantMap &fields); 78 | Q_SIGNALS: // SIGNALS 79 | }; 80 | 81 | #endif 82 | -------------------------------------------------------------------------------- /agentdialog.cpp: -------------------------------------------------------------------------------- 1 | /* BEGIN_COMMON_COPYRIGHT_HEADER 2 | * (c)LGPL2+ 3 | * 4 | * lxqt-connman-applet - a gui frontend for connman 5 | * 6 | * Copyright: 2014-2015 Christian Surlykke 7 | * 8 | * This program or library is free software; you can redistribute it 9 | * and/or modify it under the terms of the GNU Lesser General Public 10 | * License as published by the Free Software Foundation; either 11 | * version 2.1 of the License, or (at your option) any later version. 12 | * 13 | * This library 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 GNU 16 | * Lesser General Public License for more details. 17 | 18 | * You should have received a copy of the GNU Lesser General 19 | * Public License along with this library; if not, write to the 20 | * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 21 | * Boston, MA 02110-1301 USA 22 | * 23 | * END_COMMON_COPYRIGHT_HEADER */ 24 | 25 | #include 26 | #include 27 | #include 28 | #include 29 | #include "appletstrings.h" 30 | 31 | #include "agentdialog.h" 32 | 33 | AgentDialog::AgentDialog(QString service, QVariantMap request, QWidget *parent) : 34 | QDialog(parent), Ui::Dialog() 35 | { 36 | setupUi(this); 37 | headingLabel->setText(headingLabel->text().arg(service)); 38 | 39 | for (const QString key : request.keys()) 40 | { 41 | QLabel *label = new QLabel(string(key), this); 42 | QLineEdit *lineEdit = new QLineEdit(this); 43 | inputFields[key] = lineEdit; 44 | inputFieldsLayout->addRow(label, lineEdit); 45 | } 46 | } 47 | 48 | AgentDialog::~AgentDialog() 49 | { 50 | } 51 | 52 | QVariantMap AgentDialog::collectedInput() 53 | { 54 | QVariantMap collected; 55 | 56 | for (const QString key : inputFields.keys()) 57 | { 58 | if (!inputFields[key]->text().trimmed().isEmpty()) 59 | { 60 | collected[key] = inputFields[key]->text(); // FIXME Handle bytearrays 61 | } 62 | } 63 | 64 | return collected; 65 | } 66 | 67 | -------------------------------------------------------------------------------- /agentdialog.h: -------------------------------------------------------------------------------- 1 | /* BEGIN_COMMON_COPYRIGHT_HEADER 2 | * (c)LGPL2+ 3 | * 4 | * lxqt-connman-applet - a gui frontend for connman 5 | * 6 | * Copyright: 2014-2015 Christian Surlykke 7 | * 8 | * This program or library is free software; you can redistribute it 9 | * and/or modify it under the terms of the GNU Lesser General Public 10 | * License as published by the Free Software Foundation; either 11 | * version 2.1 of the License, or (at your option) any later version. 12 | * 13 | * This library 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 GNU 16 | * Lesser General Public License for more details. 17 | 18 | * You should have received a copy of the GNU Lesser General 19 | * Public License along with this library; if not, write to the 20 | * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 21 | * Boston, MA 02110-1301 USA 22 | * 23 | * END_COMMON_COPYRIGHT_HEADER */ 24 | 25 | #ifndef AGENTDIALOG_H 26 | #define AGENTDIALOG_H 27 | 28 | #include 29 | #include 30 | 31 | #include "ui_agentdialog.h" 32 | 33 | class QLineEdit; 34 | 35 | namespace Ui { 36 | class Dialog; 37 | } 38 | 39 | class AgentDialog : public QDialog, Ui::Dialog 40 | { 41 | Q_OBJECT 42 | 43 | public: 44 | explicit AgentDialog(QString service, QVariantMap request, QWidget *parent = 0); 45 | ~AgentDialog(); 46 | 47 | QVariantMap collectedInput(); 48 | 49 | private: 50 | QMap inputFields; 51 | }; 52 | 53 | #endif // AGENTDIALOG_H 54 | -------------------------------------------------------------------------------- /agentdialog.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | Dialog 4 | 5 | 6 | 7 | 0 8 | 0 9 | 433 10 | 159 11 | 12 | 13 | 14 | LXQt ConnMan applet 15 | 16 | 17 | 18 | 19 | 20 | 21 | 12 22 | 23 | 24 | 25 | Connect to %1 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | Qt::Horizontal 36 | 37 | 38 | QDialogButtonBox::Cancel|QDialogButtonBox::Ok 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | buttonBox 48 | accepted() 49 | Dialog 50 | accept() 51 | 52 | 53 | 248 54 | 254 55 | 56 | 57 | 157 58 | 274 59 | 60 | 61 | 62 | 63 | buttonBox 64 | rejected() 65 | Dialog 66 | reject() 67 | 68 | 69 | 316 70 | 260 71 | 72 | 73 | 286 74 | 274 75 | 76 | 77 | 78 | 79 | 80 | -------------------------------------------------------------------------------- /appletstrings.cpp: -------------------------------------------------------------------------------- 1 | /* BEGIN_COMMON_COPYRIGHT_HEADER 2 | * (c)LGPL2+ 3 | * 4 | * lxqt-connman-applet - a gui frontend for connman 5 | * 6 | * Copyright: 2014-2015 Christian Surlykke 7 | * 8 | * This program or library is free software; you can redistribute it 9 | * and/or modify it under the terms of the GNU Lesser General Public 10 | * License as published by the Free Software Foundation; either 11 | * version 2.1 of the License, or (at your option) any later version. 12 | * 13 | * This library 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 GNU 16 | * Lesser General Public License for more details. 17 | 18 | * You should have received a copy of the GNU Lesser General 19 | * Public License along with this library; if not, write to the 20 | * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 21 | * Boston, MA 02110-1301 USA 22 | * 23 | * END_COMMON_COPYRIGHT_HEADER */ 24 | 25 | #include "appletstrings.h" 26 | 27 | #include 28 | #include 29 | 30 | QMap buildMap() { 31 | // Map from connman dbus strings to presentation-strings. 32 | // The connman strings are property names, map keys and such. 33 | // This stuff is extracted from connman's dbus api (and surely incomplete..) 34 | QMap map; 35 | 36 | map["name"] = QObject::tr("name", "network name"); 37 | map["Identity"] = QObject::tr("Identity"); 38 | map["Username"] = QObject::tr("Username"); 39 | map["Passphrase"] = QObject::tr("Passphrase"); 40 | map["PreviousPassphrase"] = QObject::tr("Previous passphrase"); 41 | 42 | map["Wired"] = QObject::tr("Wired"); 43 | map["WiFi"] = QObject::tr("Wireless"); 44 | map["P2P"] = QObject::tr("Peer-to-peer"); 45 | map["Bluetooth"] = QObject::tr("Bluetooth"); 46 | 47 | map["out-of-range"] = QObject::tr("Out of range"); 48 | map["pin-missing"] = QObject::tr("Pin code missing"); 49 | map["dhcp-failed"] = QObject::tr("DHCP failed"); 50 | map["connect-failed"] = QObject::tr("Connection failed"); 51 | map["login-failed"] = QObject::tr("Login failed"); 52 | map["auth-failed"] = QObject::tr("Authentication failed"); 53 | map["invalid-key"] = QObject::tr("Invalid key"); 54 | 55 | map["configuration"] = QObject::tr("Configuration"); 56 | map["association"] = QObject::tr("Association"); 57 | 58 | return map; 59 | } 60 | 61 | QString string(QString string) { 62 | static QMap translationMap = buildMap(); 63 | 64 | // If we don't know anything about the string we just return it as it is. 65 | return translationMap.value(string, string); 66 | } 67 | -------------------------------------------------------------------------------- /appletstrings.h: -------------------------------------------------------------------------------- 1 | /* BEGIN_COMMON_COPYRIGHT_HEADER 2 | * (c)LGPL2+ 3 | * 4 | * lxqt-connman-applet - a gui frontend for connman 5 | * 6 | * Copyright: 2014-2015 Christian Surlykke 7 | * 8 | * This program or library is free software; you can redistribute it 9 | * and/or modify it under the terms of the GNU Lesser General Public 10 | * License as published by the Free Software Foundation; either 11 | * version 2.1 of the License, or (at your option) any later version. 12 | * 13 | * This library 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 GNU 16 | * Lesser General Public License for more details. 17 | 18 | * You should have received a copy of the GNU Lesser General 19 | * Public License along with this library; if not, write to the 20 | * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 21 | * Boston, MA 02110-1301 USA 22 | * 23 | * END_COMMON_COPYRIGHT_HEADER */ 24 | 25 | #ifndef STRINGS_H 26 | #define STRINGS_H 27 | 28 | #include 29 | #include 30 | 31 | /*! 32 | * Provides presentation-strings for strings defined by connman. (propertynames, map-keys and such) 33 | * 34 | */ 35 | QString string(QString str); 36 | 37 | 38 | #endif /* STRINGS_H */ 39 | 40 | -------------------------------------------------------------------------------- /connmanobject.cpp: -------------------------------------------------------------------------------- 1 | #include "connmanobject.h" 2 | 3 | bool dbus_types_registered = []() -> bool { 4 | qDBusRegisterMetaType(); 5 | qDBusRegisterMetaType(); 6 | return true; 7 | }(); 8 | 9 | 10 | ConnmanObject::ConnmanObject(const QString& path, const char* interface, const QVariantMap properties) : 11 | QDBusAbstractInterface("net.connman", path, interface, QDBusConnection::systemBus(), 0), 12 | properties(properties) 13 | { 14 | connect(this, &ConnmanObject::PropertyChanged, this, &ConnmanObject::onPropertyChanged); 15 | } 16 | 17 | void ConnmanObject::onPropertyChanged(const QString& name, const QDBusVariant& newValue) 18 | { 19 | properties.insert(name, newValue.variant()); 20 | } 21 | 22 | ConnmanManager::ConnmanManager() : ConnmanObject("/", "net.connman.Manager") 23 | { 24 | } 25 | -------------------------------------------------------------------------------- /connmanobject.h: -------------------------------------------------------------------------------- 1 | /* BEGIN_COMMON_COPYRIGHT_HEADER 2 | * (c)LGPL2+ 3 | * 4 | * lxqt-connman-applet - a gui frontend for connman 5 | * 6 | * Copyright: 2014-2015 Christian Surlykke 7 | * 8 | * This program or library is free software; you can redistribute it 9 | * and/or modify it under the terms of the GNU Lesser General Public 10 | * License as published by the Free Software Foundation; either 11 | * version 2.1 of the License, or (at your option) any later version. 12 | * 13 | * This library 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 GNU 16 | * Lesser General Public License for more details. 17 | 18 | * You should have received a copy of the GNU Lesser General 19 | * Public License along with this library; if not, write to the 20 | * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 21 | * Boston, MA 02110-1301 USA 22 | * 23 | * END_COMMON_COPYRIGHT_HEADER */ 24 | 25 | #ifndef CONNMANOBJECT_H 26 | #define CONNMANOBJECT_H 27 | 28 | #include 29 | #include 30 | #include 31 | #include 32 | #include 33 | #include 34 | #include 35 | 36 | typedef QPair ObjectProperties; 37 | typedef QList ObjectPropertiesList; 38 | 39 | Q_DECLARE_METATYPE(ObjectProperties) 40 | Q_DECLARE_METATYPE(ObjectPropertiesList) 41 | 42 | extern bool dbus_types_registered; 43 | 44 | 45 | class ConnmanObject : public QDBusAbstractInterface 46 | { 47 | Q_OBJECT 48 | 49 | public: 50 | ConnmanObject(const QString& path, const char* interface, const QVariantMap properties = QVariantMap()); 51 | QVariantMap properties; 52 | private slots: 53 | void onPropertyChanged(const QString& name, const QDBusVariant& newValue); 54 | 55 | Q_SIGNALS: 56 | void PropertyChanged(const QString& name, const QDBusVariant& newValue); 57 | }; 58 | 59 | class ConnmanManager : public ConnmanObject 60 | { 61 | Q_OBJECT 62 | 63 | public: 64 | ConnmanManager(); 65 | 66 | Q_SIGNALS: 67 | void TechnologyAdded(const QDBusObjectPath& object, const QVariantMap& properties); 68 | void TechnologyRemoved(const QDBusObjectPath& object); 69 | void ServicesChanged(ObjectPropertiesList added, const QList& removed); 70 | }; 71 | 72 | 73 | #endif // CONNMANOBJECT_H 74 | -------------------------------------------------------------------------------- /controller.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include "iconproducer.h" 5 | #include "agentadaptor.h" 6 | #include "controller.h" 7 | 8 | 9 | Controller::Controller() : 10 | QObject(), 11 | model(), 12 | technologyItemsParent(new QStandardItem("Connection types")), 13 | serviceItemsParent(new QStandardItem("Services")), 14 | technologyItemControllers(), 15 | serviceItemControllers(), 16 | manager(), 17 | agent(), 18 | servicesWindow(), 19 | trayIcon() 20 | { 21 | QDBusObjectPath agentPath("/org/lxqt/lxqt_connman_agent"); 22 | new AgentAdaptor(&agent); 23 | QDBusConnection::systemBus().registerObject(agentPath.path(), &agent); 24 | manager.call("RegisterAgent", QVariant::fromValue(agentPath)); 25 | 26 | model.insertRow(0, technologyItemsParent); 27 | model.insertRow(1, serviceItemsParent); 28 | model.setSortRole(ItemController::OrderRole); 29 | connect(&manager, 30 | SIGNAL(TechnologyAdded(const QDBusObjectPath&, const QVariantMap&)), 31 | SLOT(onTechnologyAdded(const QDBusObjectPath&, const QVariantMap&))); 32 | 33 | connect(&manager, 34 | SIGNAL(TechnologyRemoved(const QDBusObjectPath&)), 35 | SLOT(onTechnologyRemoved(const QDBusObjectPath&))); 36 | 37 | connect(&manager, 38 | SIGNAL(ServicesChanged(ObjectPropertiesList, const QList&)), 39 | SLOT(onServicesUpdated(const ObjectPropertiesList&, const QList&))); 40 | 41 | connect(&manager, SIGNAL(PropertyChanged(const QString&, const QDBusVariant&)), SLOT(updateTrayIcon())); 42 | connect(&IconProducer::instance(), SIGNAL(iconsChanged()), &model, SIGNAL(layoutChanged())); 43 | connect(&IconProducer::instance(), SIGNAL(iconsChanged()), SLOT(updateTrayIcon())); 44 | 45 | connect(&servicesWindow, SIGNAL(activated(const QModelIndex&)), SLOT(onItemActivated(const QModelIndex&))); 46 | 47 | QDBusReply GetTechnologiesReply = manager.call("GetTechnologies");; 48 | for (ObjectProperties op : GetTechnologiesReply.value()) { 49 | onTechnologyAdded(op.first, op.second); 50 | } 51 | 52 | QDBusReply GetServicesReply = manager.call("GetServices"); 53 | onServicesUpdated(GetServicesReply.value(), QList()); 54 | 55 | servicesWindow.setModel(&model); 56 | 57 | QMenu *menu = new QMenu(); 58 | menu->addAction(tr("Services..."), &servicesWindow, SLOT(show())); 59 | menu->addAction(QIcon::fromTheme("help-about"), tr("About"), this, SLOT(about())); 60 | menu->addAction(QIcon::fromTheme("application-exit"), tr("Quit"), qApp, SLOT(quit())); 61 | connect(&trayIcon, SIGNAL(activated(QSystemTrayIcon::ActivationReason)), 62 | SLOT(onTrayIconActivated(QSystemTrayIcon::ActivationReason))); 63 | trayIcon.setContextMenu(menu); 64 | updateTrayIcon(); 65 | trayIcon.show(); 66 | } 67 | 68 | void Controller::onTechnologyAdded(const QDBusObjectPath& path, const QVariantMap& properties) 69 | { 70 | if (technologyItemControllers.contains(path.path())) { 71 | return; 72 | } 73 | TechnologyItemController* item = new TechnologyItemController(technologyItemsParent, path.path(), properties); 74 | technologyItemControllers[path.path()] = item; 75 | technologyItemControllers[path.path()]->update(); 76 | servicesWindow.expandAll(); 77 | } 78 | 79 | 80 | void Controller::onTechnologyRemoved(const QDBusObjectPath& path) 81 | { 82 | if (technologyItemControllers.contains(path.path())) { 83 | technologyItemControllers.take(path.path())->deleteLater(); 84 | } 85 | } 86 | 87 | void Controller::onServicesUpdated(ObjectPropertiesList services, const QList& removed) 88 | { 89 | for (const auto& path : removed) { 90 | if (serviceItemControllers.contains(path.path())) { 91 | serviceItemControllers.take(path.path())->deleteLater(); 92 | } 93 | } 94 | 95 | int count = 0; 96 | for (const auto& op : services) { 97 | QString path = op.first.path(); 98 | QVariantMap properties = op.second; 99 | 100 | if (!serviceItemControllers.contains(path)) { 101 | if (properties.contains("Name") && !properties["Name"].toString().isEmpty()) { 102 | serviceItemControllers[path] = new ServiceItemController(serviceItemsParent, path, properties); 103 | serviceItemControllers[path]->update(); 104 | agent.serviceNames[path] = properties["Name"].toString(); 105 | } 106 | else { 107 | // This would be a hidden essid. We leave them out as we don't (yet) have 108 | // functionality to handle them 109 | continue; 110 | } 111 | } 112 | serviceItemControllers[path]->setOrder(count++); 113 | } 114 | 115 | serviceItemsParent->sortChildren(0); 116 | servicesWindow.expandAll(); 117 | } 118 | 119 | void Controller::onItemActivated(const QModelIndex& index) 120 | { 121 | ItemController *wrapper = model.itemFromIndex(index)->data(ItemController::WrapperRole).value(); 122 | if (wrapper) { 123 | wrapper->activate(); 124 | } 125 | } 126 | 127 | void Controller::updateTrayIcon() 128 | { 129 | for (ServiceItemController* item : serviceItemControllers.values()) { 130 | QString state = item->connmanObject->properties["State"].toString(); 131 | int signalStrength = item->connmanObject->properties["Strength"].toInt(); 132 | 133 | if (state == "ready" || state == "online") { 134 | if (signalStrength > 0) { 135 | trayIcon.setIcon(IconProducer::instance().wireless(signalStrength)); 136 | } 137 | else { 138 | trayIcon.setIcon(IconProducer::instance().wiredConnected()); 139 | } 140 | return; 141 | } 142 | } 143 | 144 | trayIcon.setIcon(IconProducer::instance().disconnected()); 145 | 146 | } 147 | 148 | void Controller::onTrayIconActivated(QSystemTrayIcon::ActivationReason reason) 149 | { 150 | servicesWindow.show(); 151 | } 152 | 153 | void Controller::about() 154 | { 155 | QMessageBox::about(0, 156 | tr("About"), 157 | tr( "

" 158 | " LXQt Connman Client" 159 | "

" 160 | "

" 161 | "Copyright 2014, 2015, 2016" 162 | "

" 163 | "

" 164 | "Christian Surlykke" 165 | "

" 166 | )); 167 | 168 | } 169 | -------------------------------------------------------------------------------- /controller.h: -------------------------------------------------------------------------------- 1 | #ifndef CONTROLLER_H 2 | #define CONTROLLER_H 3 | 4 | #include 5 | #include 6 | #include 7 | #include 8 | #include "connmanobject.h" 9 | #include "serviceswindow.h" 10 | #include "itemcontroller.h" 11 | #include "agent.h" 12 | 13 | class Controller : public QObject 14 | { 15 | Q_OBJECT 16 | public: 17 | Controller(); 18 | 19 | private: 20 | QStandardItemModel model; 21 | QStandardItem* technologyItemsParent; 22 | QStandardItem* serviceItemsParent; 23 | QMap technologyItemControllers; 24 | QMap serviceItemControllers; 25 | 26 | ConnmanManager manager; 27 | Agent agent; 28 | ServicesWindow servicesWindow; 29 | QSystemTrayIcon trayIcon; 30 | 31 | private slots: 32 | void onTechnologyAdded(const QDBusObjectPath& path, const QVariantMap& properties); 33 | void onTechnologyRemoved(const QDBusObjectPath& path); 34 | void onServicesUpdated(ObjectPropertiesList services, const QList& remove); 35 | void onItemActivated(const QModelIndex& index); 36 | void onTrayIconActivated(QSystemTrayIcon::ActivationReason reason); 37 | void updateTrayIcon(); 38 | void about(); 39 | }; 40 | 41 | #endif // CONTROLLER_H 42 | -------------------------------------------------------------------------------- /iconproducer.cpp: -------------------------------------------------------------------------------- 1 | /* BEGIN_COMMON_COPYRIGHT_HEADER 2 | * (c)LGPL2+ 3 | * 4 | * lxqt-connman-applet - a gui frontend for connman 5 | * 6 | * Copyright: 2014-2015 Christian Surlykke 7 | * 8 | * This program or library is free software; you can redistribute it 9 | * and/or modify it under the terms of the GNU Lesser General Public 10 | * License as published by the Free Software Foundation; either 11 | * version 2.1 of the License, or (at your option) any later version. 12 | * 13 | * This library 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 GNU 16 | * Lesser General Public License for more details. 17 | 18 | * You should have received a copy of the GNU Lesser General 19 | * Public License along with this library; if not, write to the 20 | * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 21 | * Boston, MA 02110-1301 USA 22 | * 23 | * END_COMMON_COPYRIGHT_HEADER */ 24 | 25 | #include "iconproducer.h" 26 | #include 27 | #include 28 | #include 29 | #include 30 | #include 31 | #include 32 | 33 | const IconProducer& IconProducer::instance() 34 | { 35 | static IconProducer inst; 36 | return inst; 37 | } 38 | 39 | 40 | IconProducer::IconProducer() 41 | { 42 | mBuiltInDisconnected = buildIcon(":/resources/wired-disconnected.svg"); 43 | mBuiltInWiredConnected = buildIcon(":/resources/wired-connected.svg"); 44 | mBuiltInWirelessNone = buildIcon(":/resources/signal-strength-0.svg"); 45 | mBuiltInWirelessWeak = buildIcon(":/resources/signal-strength-1.svg"); 46 | mBuiltInWirelessOk = buildIcon(":/resources/signal-strength-2.svg"); 47 | mBuiltInWirelessGood = buildIcon(":/resources/signal-strength-3.svg"); 48 | mBuiltInWirelessExcellent = buildIcon(":/resources/signal-strength-4.svg"); 49 | 50 | QPixmap pixmap(30,30); 51 | pixmap.fill(QColor(0,0,0,0)); 52 | mBlanc = QIcon(pixmap); 53 | 54 | connect(LXQt::GlobalSettings::globalSettings(), SIGNAL(iconThemeChanged()), this, SLOT(onIconThemeChanged())); 55 | onIconThemeChanged(); 56 | } 57 | 58 | void IconProducer::onIconThemeChanged() 59 | { 60 | // Oxygen and Breeze has these 61 | if (QIcon::hasThemeIcon("network-wired") && 62 | QIcon::hasThemeIcon("network-connect") && 63 | QIcon::hasThemeIcon("network-wireless-connected-00") && 64 | QIcon::hasThemeIcon("network-wireless-connected-25") && 65 | QIcon::hasThemeIcon("network-wireless-connected-50") && 66 | QIcon::hasThemeIcon("network-wireless-connected-75") && 67 | QIcon::hasThemeIcon("network-wireless-connected-100")) 68 | { 69 | iconThemeType = IconThemeType::oxygen; 70 | } 71 | else if (// Gnome and several other themes has these 72 | QIcon::hasThemeIcon("network-offline") && 73 | QIcon::hasThemeIcon("network-wired") && 74 | QIcon::hasThemeIcon("network-wireless-signal-none-symbolic") && 75 | QIcon::hasThemeIcon("network-wireless-signal-weak-symbolic") && 76 | QIcon::hasThemeIcon("network-wireless-signal-ok-symbolic") && 77 | QIcon::hasThemeIcon("network-wireless-signal-good-symbolic") && 78 | QIcon::hasThemeIcon("network-wireless-signal-excellent-symbolic")) 79 | { 80 | iconThemeType = IconThemeType::gnome; 81 | } 82 | else // Fallback to ugly built-in icons 83 | { 84 | iconThemeType = IconThemeType::none; 85 | } 86 | emit iconsChanged(); 87 | } 88 | 89 | 90 | QIcon IconProducer::buildIcon(QString pathToSvgFile) 91 | { 92 | QFile svgFile(pathToSvgFile); 93 | svgFile.open(QIODevice::ReadOnly); 94 | QByteArray svg = svgFile.readAll(); 95 | 96 | QSvgRenderer render(svg); 97 | QPixmap pixmap(render.defaultSize()); 98 | pixmap.fill(QColor(0,0,0,0)); 99 | QPainter painter(&pixmap); 100 | render.render(&painter); 101 | return QIcon(pixmap); 102 | } 103 | 104 | QIcon IconProducer::disconnected() const 105 | { 106 | switch (iconThemeType) { 107 | case IconThemeType::oxygen: return QIcon::fromTheme("network-wired"); 108 | case IconThemeType::gnome: return QIcon::fromTheme("network-offline"); 109 | case IconThemeType::none: return mBuiltInDisconnected; 110 | } 111 | } 112 | 113 | QIcon IconProducer::wiredConnected() const 114 | { 115 | switch (iconThemeType) { 116 | case IconThemeType::oxygen: return QIcon::fromTheme("network-connect"); 117 | case IconThemeType::gnome: return QIcon::fromTheme("network-wired"); 118 | case IconThemeType::none: return mBuiltInWiredConnected; 119 | } 120 | } 121 | 122 | QIcon IconProducer::wireless(int strength) const 123 | { 124 | switch (iconThemeType) { 125 | case IconThemeType::oxygen: 126 | if (strength < 10) return QIcon::fromTheme("network-wireless-connected-00"); 127 | else if (strength < 37) return QIcon::fromTheme("network-wireless-connected-25"); 128 | else if (strength < 63) return QIcon::fromTheme("network-wireless-connected-50"); 129 | else if (strength < 90) return QIcon::fromTheme("network-wireless-connected-75"); 130 | else return QIcon::fromTheme("network-wireless-connected-100"); 131 | case IconThemeType::gnome: 132 | if (strength < 10) return QIcon::fromTheme("network-wireless-signal-none-symbolic"); 133 | else if (strength < 37) return QIcon::fromTheme("network-wireless-signal-weak-symbolic"); 134 | else if (strength < 63) return QIcon::fromTheme("network-wireless-signal-ok-symbolic"); 135 | else if (strength < 90) return QIcon::fromTheme("network-wireless-signal-good-symbolic"); 136 | else return QIcon::fromTheme("network-wireless-signal-excellent-symbolic"); 137 | case IconThemeType::none: 138 | if (strength < 10) return mBuiltInWirelessNone; 139 | else if (strength < 37) return mBuiltInWirelessWeak; 140 | else if (strength < 63) return mBuiltInWirelessOk; 141 | else if (strength < 90) return mBuiltInWirelessGood; 142 | else return mBuiltInWirelessExcellent; 143 | 144 | } 145 | } 146 | 147 | QIcon IconProducer::blanc() const 148 | { 149 | return mBlanc; 150 | } 151 | -------------------------------------------------------------------------------- /iconproducer.h: -------------------------------------------------------------------------------- 1 | /* BEGIN_COMMON_COPYRIGHT_HEADER 2 | * (c)LGPL2+ 3 | * 4 | * lxqt-connman-applet - a gui frontend for connman 5 | * 6 | * Copyright: 2014-2015 Christian Surlykke 7 | * 8 | * This program or library is free software; you can redistribute it 9 | * and/or modify it under the terms of the GNU Lesser General Public 10 | * License as published by the Free Software Foundation; either 11 | * version 2.1 of the License, or (at your option) any later version. 12 | * 13 | * This library 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 GNU 16 | * Lesser General Public License for more details. 17 | 18 | * You should have received a copy of the GNU Lesser General 19 | * Public License along with this library; if not, write to the 20 | * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 21 | * Boston, MA 02110-1301 USA 22 | * 23 | * END_COMMON_COPYRIGHT_HEADER */ 24 | 25 | #ifndef ICONPRODUCER_H 26 | #define ICONPRODUCER_H 27 | #include 28 | #include 29 | 30 | class IconProducer : public QObject 31 | { 32 | Q_OBJECT 33 | 34 | public: 35 | static const IconProducer& instance(); 36 | 37 | enum class IconThemeType 38 | { 39 | oxygen, 40 | gnome, 41 | none 42 | }; 43 | 44 | QIcon disconnected() const; 45 | QIcon wiredConnected() const; 46 | QIcon wireless(int signalStrength) const; 47 | QIcon blanc() const; 48 | 49 | signals: 50 | void iconsChanged(); 51 | 52 | private slots: 53 | void onIconThemeChanged(); 54 | 55 | private: 56 | IconProducer(); 57 | IconThemeType iconThemeType; 58 | QIcon mBuiltInDisconnected; 59 | QIcon mBuiltInWiredConnected; 60 | QIcon mBuiltInWirelessNone; 61 | QIcon mBuiltInWirelessWeak; 62 | QIcon mBuiltInWirelessOk; 63 | QIcon mBuiltInWirelessGood; 64 | QIcon mBuiltInWirelessExcellent; 65 | QIcon mBlanc; 66 | 67 | QIcon buildIcon(QString pathToSvgFile); 68 | }; 69 | 70 | 71 | 72 | #endif // ICONPRODUCER_H 73 | -------------------------------------------------------------------------------- /iconviewer/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | set(PROJECT_NAME icon-viewer) 2 | project(${PROJECT_NAME}) 3 | 4 | file(GLOB SRCS *.cpp *ui ../iconproducer.cpp) 5 | 6 | qt5_add_resources(QRCS_GENERATED ${QRCS}) 7 | 8 | include_directories( 9 | ${CMAKE_CURRENT_SOURCE_DIR} 10 | ${CMAKE_CURRENT_SOURCE_DIR}/.. 11 | ${CMAKE_CURRENT_BINARY_DIR} 12 | ${QTXDG_INCLUDE_DIRS} 13 | ) 14 | 15 | 16 | add_executable(${PROJECT_NAME} 17 | ${SRCS} 18 | ${QRCS_GENERATED} 19 | ) 20 | 21 | target_link_libraries(${PROJECT_NAME} 22 | lxqt 23 | Qt5::Core 24 | Qt5::Widgets 25 | Qt5::Svg) 26 | -------------------------------------------------------------------------------- /iconviewer/iconviewer.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include "iconproducer.h" 3 | #include "iconviewer.h" 4 | #include "ui_iconviewer.h" 5 | 6 | IconViewer::IconViewer(QWidget *parent): QDialog(parent), ui(new Ui::IconViewer) 7 | { 8 | ui->setupUi(this); 9 | connect(&IconProducer::instance(), SIGNAL(iconsChanged()), this, SLOT(updateIcons())); 10 | updateIcons(); 11 | } 12 | 13 | IconViewer::~IconViewer() 14 | { 15 | delete ui; 16 | } 17 | 18 | void IconViewer::updateIcons() 19 | { 20 | ui->icon_connected->setPixmap(IconProducer::instance().wiredConnected().pixmap(38,38)); 21 | ui->icon_disconnected->setPixmap(IconProducer::instance().disconnected().pixmap(38,38)); 22 | ui->icon_none->setPixmap(IconProducer::instance().wireless(5).pixmap(38,38)); 23 | ui->icon_weak->setPixmap(IconProducer::instance().wireless(30).pixmap(38,38)); 24 | ui->icon_ok->setPixmap(IconProducer::instance().wireless(50).pixmap(38,38)); 25 | ui->icon_good->setPixmap(IconProducer::instance().wireless(80).pixmap(38,38)); 26 | ui->icon_excellent->setPixmap(IconProducer::instance().wireless(98).pixmap(38,38)); 27 | } 28 | -------------------------------------------------------------------------------- /iconviewer/iconviewer.h: -------------------------------------------------------------------------------- 1 | #ifndef ICONVIEWER_H 2 | #define ICONVIEWER_H 3 | 4 | #include 5 | 6 | namespace Ui { 7 | class IconViewer; 8 | } 9 | 10 | class IconViewer : public QDialog 11 | { 12 | Q_OBJECT 13 | 14 | public: 15 | explicit IconViewer(QWidget *parent = 0); 16 | ~IconViewer(); 17 | 18 | public slots: 19 | void updateIcons(); 20 | 21 | private: 22 | Ui::IconViewer *ui; 23 | }; 24 | 25 | #endif // ICONVIEWER_H 26 | -------------------------------------------------------------------------------- /iconviewer/iconviewer.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | IconViewer 4 | 5 | 6 | 7 | 0 8 | 0 9 | 384 10 | 464 11 | 12 | 13 | 14 | Icons 15 | 16 | 17 | 18 | 19 | 20 | 21 | 40 22 | 40 23 | 24 | 25 | 26 | I 27 | 28 | 29 | 30 | 31 | 32 | 33 | Connected 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 40 42 | 40 43 | 44 | 45 | 46 | I 47 | 48 | 49 | 50 | 51 | 52 | 53 | Disconnected 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 40 62 | 40 63 | 64 | 65 | 66 | I 67 | 68 | 69 | 70 | 71 | 72 | 73 | None 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 40 82 | 40 83 | 84 | 85 | 86 | I 87 | 88 | 89 | 90 | 91 | 92 | 93 | Weak 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 40 102 | 40 103 | 104 | 105 | 106 | I 107 | 108 | 109 | 110 | 111 | 112 | 113 | Ok 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 40 122 | 40 123 | 124 | 125 | 126 | I 127 | 128 | 129 | 130 | 131 | 132 | 133 | Good 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 40 142 | 40 143 | 144 | 145 | 146 | I 147 | 148 | 149 | 150 | 151 | 152 | 153 | Excellent 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | -------------------------------------------------------------------------------- /iconviewer/main.cpp: -------------------------------------------------------------------------------- 1 | /* BEGIN_COMMON_COPYRIGHT_HEADER 2 | * (c)LGPL2+ 3 | * 4 | * lxqt-connman-applet - a gui frontend for connman 5 | * 6 | * Copyright: 2014-2015 Christian Surlykke 7 | * 8 | * This program or library is free software; you can redistribute it 9 | * and/or modify it under the terms of the GNU Lesser General Public 10 | * License as published by the Free Software Foundation; either 11 | * version 2.1 of the License, or (at your option) any later version. 12 | * 13 | * This library 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 GNU 16 | * Lesser General Public License for more details. 17 | 18 | * You should have received a copy of the GNU Lesser General 19 | * Public License along with this library; if not, write to the 20 | * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 21 | * Boston, MA 02110-1301 USA 22 | * 23 | * END_COMMON_COPYRIGHT_HEADER */ 24 | 25 | #include 26 | #include "iconviewer.h" 27 | 28 | int main(int argc, char *argv[]) 29 | { 30 | QApplication app(argc, argv); 31 | IconViewer iconViewer; 32 | iconViewer.show(); 33 | return app.exec(); 34 | } 35 | -------------------------------------------------------------------------------- /itemcontroller.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include "iconproducer.h" 3 | #include "appletstrings.h" 4 | #include "itemcontroller.h" 5 | 6 | ItemController::ItemController(QStandardItem* parent, const QString& path, const char* service, const QVariantMap& properties): 7 | QObject(), 8 | connmanObject(new ConnmanObject(path, service, properties)), 9 | item(new QStandardItem()) 10 | { 11 | connect(connmanObject, &ConnmanObject::PropertyChanged, this, &ItemController::onPropertyChanged); 12 | parent->appendRow(item); 13 | item->setData(QVariant::fromValue(this), WrapperRole); 14 | item->setEditable(false); 15 | } 16 | 17 | ItemController::~ItemController() 18 | { 19 | item->parent()->removeRow(item->row()); 20 | connmanObject->deleteLater(); 21 | } 22 | 23 | void ItemController::setOrder(int order) 24 | { 25 | item->setData(order, OrderRole); 26 | } 27 | 28 | void ItemController::onPropertyChanged(const QString& propertyName, const QDBusVariant& newValue) 29 | { 30 | update(); 31 | } 32 | 33 | 34 | ServiceItemController::ServiceItemController(QStandardItem* parent, const QString& path, const QVariantMap& properties) : 35 | ItemController(parent, path, "net.connman.Service", properties) 36 | { 37 | } 38 | 39 | void ServiceItemController::update() 40 | { 41 | QString state = connmanObject->properties["State"].toString(); 42 | QString type = connmanObject->properties["Type"].toString(); 43 | QString name = connmanObject->properties["Name"].toString(); 44 | int strength = connmanObject->properties["Strength"].toInt(); 45 | 46 | item->setData(state == "online" ? name + ' ' + QChar(0x2713) : name, Qt::DisplayRole); 47 | item->setData(state == "ready" || state == "online" ? QFont("", -1, QFont::Bold) : QVariant(), Qt::FontRole); 48 | 49 | if (type == "wifi") { 50 | item->setData(IconProducer::instance().wireless(strength), Qt::DecorationRole); 51 | } 52 | else if (state == "offline") { 53 | item->setData(IconProducer::instance().disconnected(), Qt::DecorationRole); 54 | } 55 | else { 56 | item->setData(IconProducer::instance().wiredConnected(), Qt::DecorationRole); 57 | } 58 | 59 | if (state == "association" || state == "configuration") { 60 | if (item->hasChildren()) { 61 | item->child(0, 0)->setData(string(state), Qt::DisplayRole); 62 | } 63 | else { 64 | QStandardItem* stateItem = new QStandardItem(string(state)); 65 | stateItem->setData(IconProducer::instance().blanc(), Qt::DecorationRole); 66 | stateItem->setData(QFont("", -1, -1, true), Qt::FontRole); 67 | item->appendRow(stateItem); 68 | } 69 | } 70 | else while (item->hasChildren()) { 71 | item->removeRow(0); 72 | } 73 | } 74 | 75 | void ServiceItemController::activate() 76 | { 77 | QString state = connmanObject->properties["State"].toString(); 78 | if (state == "idle" || state == "failure") { 79 | connmanObject->asyncCall("Connect"); 80 | } 81 | else if (state == "association" || state == "configuration" || state == "ready" || state == "online") { 82 | connmanObject->asyncCall("Disconnect"); 83 | } 84 | } 85 | 86 | TechnologyItemController::TechnologyItemController(QStandardItem* parent, const QString& path, const QVariantMap& properties) : 87 | ItemController(parent, path, "net.connman.Technology", properties) 88 | { 89 | } 90 | 91 | void TechnologyItemController::update() 92 | { 93 | QString type = connmanObject->properties["Type"].toString(); 94 | bool powered = connmanObject->properties["Powered"].toBool(); 95 | QString name = connmanObject->properties["Name"].toString(); 96 | 97 | item->setData(name, Qt::DisplayRole); 98 | if (type == "ethernet") { 99 | item->setData(IconProducer::instance().wiredConnected(), Qt::DecorationRole); 100 | } 101 | else if (type == "wifi") { 102 | item->setData(IconProducer::instance().wireless(80), Qt::DecorationRole); 103 | } 104 | else { 105 | item->setData(IconProducer::instance().blanc(), Qt::DecorationRole); 106 | } 107 | item->setData(powered ? QVariant() : QFont("", -1, -1, true), Qt::FontRole); 108 | item->setData(powered ? QVariant() : QColor("lightgrey"), Qt::ForegroundRole); 109 | } 110 | 111 | void TechnologyItemController::activate() 112 | { 113 | bool newPowered = !(connmanObject->properties["Powered"].toBool()); 114 | connmanObject->asyncCall("SetProperty", QVariant("Powered"), QVariant::fromValue(QDBusVariant(newPowered))); 115 | } 116 | 117 | 118 | 119 | -------------------------------------------------------------------------------- /itemcontroller.h: -------------------------------------------------------------------------------- 1 | #ifndef ITEM_H 2 | #define ITEM_H 3 | 4 | #include 5 | #include "agent.h" 6 | #include "connmanobject.h" 7 | 8 | class ItemController : public QObject 9 | { 10 | Q_OBJECT 11 | 12 | public: 13 | enum Role 14 | { 15 | WrapperRole = Qt::UserRole, 16 | OrderRole 17 | }; 18 | 19 | ItemController(QStandardItem* parent, const QString& path, const char* service, const QVariantMap& properties); 20 | virtual ~ItemController(); 21 | virtual void activate() = 0; 22 | virtual void update() = 0; 23 | void setOrder(int order); 24 | ConnmanObject* connmanObject; 25 | QStandardItem* item; 26 | 27 | signals: 28 | void entityNamed(const QString& path, const QString& newName); 29 | 30 | private slots: 31 | virtual void onPropertyChanged(const QString& propertyName, const QDBusVariant& newValue); 32 | }; 33 | 34 | Q_DECLARE_METATYPE(ItemController*) 35 | 36 | class ServiceItemController : public ItemController 37 | { 38 | public: 39 | ServiceItemController(QStandardItem* parent, const QString& path, const QVariantMap& properties); 40 | virtual ~ServiceItemController() {} 41 | virtual void activate(); 42 | virtual void update(); 43 | }; 44 | 45 | class TechnologyItemController : public ItemController 46 | { 47 | public: 48 | TechnologyItemController(QStandardItem* parent, const QString& path, const QVariantMap& properties); 49 | virtual ~TechnologyItemController() {} 50 | virtual void activate(); 51 | virtual void update(); 52 | }; 53 | 54 | #endif // ITEM_H 55 | -------------------------------------------------------------------------------- /lxqt-connman-applet.desktop.in: -------------------------------------------------------------------------------- 1 | [Desktop Entry] 2 | Type=Application 3 | Name=LXQt ConnMan applet 4 | GenericName=Network Management 5 | GenericName[cs]=Správa síťových připojení 6 | Comment=LXQt panel applet to handle ConnMan 7 | Comment[cs]=Applet pro LXQt panel pro zacházení s nástrojem ConnMan 8 | Icon=preferences-system-network 9 | TryExec=lxqt-connman-applet 10 | Exec=lxqt-connman-applet 11 | Categories=Network; 12 | OnlyShowIn=LXQt; 13 | X-LXQt-Need-Tray=true 14 | -------------------------------------------------------------------------------- /main.cpp: -------------------------------------------------------------------------------- 1 | /* BEGIN_COMMON_COPYRIGHT_HEADER 2 | * (c)LGPL2+ 3 | * 4 | * lxqt-connman-applet - a gui frontend for connman 5 | * 6 | * Copyright: 2014-2015 Christian Surlykke 7 | * 8 | * This program or library is free software; you can redistribute it 9 | * and/or modify it under the terms of the GNU Lesser General Public 10 | * License as published by the Free Software Foundation; either 11 | * version 2.1 of the License, or (at your option) any later version. 12 | * 13 | * This library 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 GNU 16 | * Lesser General Public License for more details. 17 | 18 | * You should have received a copy of the GNU Lesser General 19 | * Public License along with this library; if not, write to the 20 | * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 21 | * Boston, MA 02110-1301 USA 22 | * 23 | * END_COMMON_COPYRIGHT_HEADER */ 24 | 25 | #include 26 | #include 27 | 28 | #include "controller.h" 29 | #include "serviceswindow.h" 30 | 31 | int main(int argc, char *argv[]) 32 | { 33 | QApplication a(argc, argv); 34 | a.setQuitOnLastWindowClosed(false); 35 | 36 | Controller controller; 37 | Q_UNUSED(controller) 38 | 39 | return a.exec(); 40 | } 41 | -------------------------------------------------------------------------------- /resources.qrc: -------------------------------------------------------------------------------- 1 | 2 | 3 | resources/signal-strength-0.svg 4 | resources/signal-strength-1.svg 5 | resources/signal-strength-2.svg 6 | resources/signal-strength-3.svg 7 | resources/signal-strength-4.svg 8 | resources/wired-connected.svg 9 | resources/wired-disconnected.svg 10 | 11 | 12 | -------------------------------------------------------------------------------- /resources/signal-strength-0.svg: -------------------------------------------------------------------------------- 1 | 2 | 11 | 12 | 18 | 24 | 25 | 31 | 32 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /resources/signal-strength-1.svg: -------------------------------------------------------------------------------- 1 | 2 | 11 | 12 | 18 | 24 | 25 | 31 | 32 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /resources/signal-strength-2.svg: -------------------------------------------------------------------------------- 1 | 2 | 11 | 12 | 18 | 24 | 25 | 31 | 32 | 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /resources/signal-strength-3.svg: -------------------------------------------------------------------------------- 1 | 2 | 11 | 12 | 18 | 24 | 25 | 31 | 32 | 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /resources/signal-strength-4.svg: -------------------------------------------------------------------------------- 1 | 2 | 11 | 12 | 18 | 24 | 25 | 31 | 32 | 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /resources/wired-connected.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 9 | 17 | 18 | 22 | 23 | -------------------------------------------------------------------------------- /resources/wired-disconnected.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 9 | 17 | 18 | 22 | 23 | -------------------------------------------------------------------------------- /serviceswindow.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include "serviceswindow.h" 5 | #include "ui_serviceswindow.h" 6 | 7 | ServicesWindow::ServicesWindow(QWidget *parent) : 8 | QDialog(parent), 9 | ui(new Ui::ServicesWindow) 10 | { 11 | ui->setupUi(this); 12 | connect(ui->treeView, SIGNAL(activated(const QModelIndex&)), SIGNAL(activated(const QModelIndex&))); 13 | } 14 | 15 | ServicesWindow::~ServicesWindow() 16 | { 17 | delete ui; 18 | } 19 | 20 | void ServicesWindow::setModel(QAbstractItemModel* model) 21 | { 22 | ui->treeView->setModel(model); 23 | ui->treeView->expandAll(); 24 | } 25 | 26 | void ServicesWindow::expandAll() 27 | { 28 | ui->treeView->expandAll(); 29 | } 30 | -------------------------------------------------------------------------------- /serviceswindow.h: -------------------------------------------------------------------------------- 1 | #ifndef SERVICESWINDOW_H 2 | #define SERVICESWINDOW_H 3 | 4 | #include 5 | #include 6 | 7 | namespace Ui { 8 | class ServicesWindow; 9 | } 10 | 11 | class ServicesWindow : public QDialog 12 | { 13 | Q_OBJECT 14 | 15 | public: 16 | explicit ServicesWindow(QWidget *parent = 0); 17 | ~ServicesWindow(); 18 | void setModel(QAbstractItemModel* model); 19 | void expandAll(); 20 | 21 | signals: 22 | void activated(const QModelIndex& index); 23 | 24 | private: 25 | Ui::ServicesWindow *ui; 26 | }; 27 | 28 | #endif // SERVICESWINDOW_H 29 | -------------------------------------------------------------------------------- /serviceswindow.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | ServicesWindow 4 | 5 | 6 | 7 | 0 8 | 0 9 | 493 10 | 493 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | ::branch { background-color: white; } 21 | ::item:selected { 22 | background: transparent; 23 | color: black; 24 | border: 1px solid black; 25 | border-radius: 3px; 26 | } 27 | 28 | 29 | false 30 | 31 | 32 | true 33 | 34 | 35 | false 36 | 37 | 38 | false 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | -------------------------------------------------------------------------------- /translations/lxqt-connman-applet.ts: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Controller 6 | 7 | 8 | Services... 9 | 10 | 11 | 12 | 13 | 14 | About 15 | 16 | 17 | 18 | 19 | Quit 20 | 21 | 22 | 23 | 24 | <p> <b>LXQt Connman Client</b></p><p>Copyright 2014, 2015, 2016</p><p>Christian Surlykke</p> 25 | 26 | 27 | 28 | 29 | Dialog 30 | 31 | 32 | LXQt ConnMan applet 33 | 34 | 35 | 36 | 37 | Connect to %1 38 | 39 | 40 | 41 | 42 | IconViewer 43 | 44 | 45 | Icons 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | I 57 | 58 | 59 | 60 | 61 | Connected 62 | 63 | 64 | 65 | 66 | Disconnected 67 | 68 | 69 | 70 | 71 | None 72 | 73 | 74 | 75 | 76 | Weak 77 | 78 | 79 | 80 | 81 | Ok 82 | 83 | 84 | 85 | 86 | Good 87 | 88 | 89 | 90 | 91 | Excellent 92 | 93 | 94 | 95 | 96 | QObject 97 | 98 | 99 | name 100 | network name 101 | 102 | 103 | 104 | 105 | 106 | Username 107 | 108 | 109 | 110 | 111 | Passphrase 112 | 113 | 114 | 115 | 116 | Previous passphrase 117 | 118 | 119 | 120 | 121 | Wired 122 | 123 | 124 | 125 | 126 | Wireless 127 | 128 | 129 | 130 | 131 | Peer-to-peer 132 | 133 | 134 | 135 | 136 | Bluetooth 137 | 138 | 139 | 140 | 141 | Out of range 142 | 143 | 144 | 145 | 146 | Pin code missing 147 | 148 | 149 | 150 | 151 | DHCP failed 152 | 153 | 154 | 155 | 156 | Connection failed 157 | 158 | 159 | 160 | 161 | Login failed 162 | 163 | 164 | 165 | 166 | Authentication failed 167 | 168 | 169 | 170 | 171 | Invalid key 172 | 173 | 174 | 175 | 176 | Configuration 177 | 178 | 179 | 180 | 181 | Association 182 | 183 | 184 | 185 | 186 | -------------------------------------------------------------------------------- /translations/lxqt-connman-applet_da.ts: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Controller 6 | 7 | 8 | Services... 9 | 10 | 11 | 12 | 13 | 14 | About 15 | 16 | 17 | 18 | 19 | Quit 20 | Afslut 21 | 22 | 23 | 24 | <p> <b>LXQt Connman Client</b></p><p>Copyright 2014, 2015, 2016</p><p>Christian Surlykke</p> 25 | 26 | 27 | 28 | 29 | Dialog 30 | 31 | 32 | LXQt ConnMan applet 33 | LXQt ConnMan applet 34 | 35 | 36 | 37 | Connect to %1 38 | Forbind til %1 39 | 40 | 41 | 42 | IconViewer 43 | 44 | 45 | Icons 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | I 57 | 58 | 59 | 60 | 61 | Connected 62 | 63 | 64 | 65 | 66 | Disconnected 67 | 68 | 69 | 70 | 71 | None 72 | 73 | 74 | 75 | 76 | Weak 77 | 78 | 79 | 80 | 81 | Ok 82 | 83 | 84 | 85 | 86 | Good 87 | 88 | 89 | 90 | 91 | Excellent 92 | 93 | 94 | 95 | 96 | QObject 97 | 98 | 99 | name 100 | network name 101 | Navn 102 | 103 | 104 | 105 | 106 | Username 107 | Brugernavn 108 | 109 | 110 | 111 | Passphrase 112 | adgangskode 113 | 114 | 115 | 116 | Previous passphrase 117 | Tidligere adgangskode 118 | 119 | 120 | 121 | Wired 122 | Kablet 123 | 124 | 125 | 126 | Wireless 127 | Trådløs 128 | 129 | 130 | 131 | Peer-to-peer 132 | Peer-to-peer 133 | 134 | 135 | 136 | Bluetooth 137 | Bluetooth 138 | 139 | 140 | 141 | Out of range 142 | 143 | 144 | 145 | 146 | Pin code missing 147 | 148 | 149 | 150 | 151 | DHCP failed 152 | 153 | 154 | 155 | 156 | Connection failed 157 | 158 | 159 | 160 | 161 | Login failed 162 | 163 | 164 | 165 | 166 | Authentication failed 167 | 168 | 169 | 170 | 171 | Invalid key 172 | 173 | 174 | 175 | 176 | Configuration 177 | 178 | 179 | 180 | 181 | Association 182 | 183 | 184 | 185 | 186 | -------------------------------------------------------------------------------- /translations/lxqt-connman-applet_de.ts: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Controller 6 | 7 | 8 | Services... 9 | 10 | 11 | 12 | 13 | 14 | About 15 | 16 | 17 | 18 | 19 | Quit 20 | Beenden 21 | 22 | 23 | 24 | <p> <b>LXQt Connman Client</b></p><p>Copyright 2014, 2015, 2016</p><p>Christian Surlykke</p> 25 | 26 | 27 | 28 | 29 | Dialog 30 | 31 | 32 | LXQt ConnMan applet 33 | LXQt ConnMan applet 34 | 35 | 36 | 37 | Connect to %1 38 | Verbindung mit %1 39 | 40 | 41 | 42 | IconViewer 43 | 44 | 45 | Icons 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | I 57 | 58 | 59 | 60 | 61 | Connected 62 | 63 | 64 | 65 | 66 | Disconnected 67 | 68 | 69 | 70 | 71 | None 72 | 73 | 74 | 75 | 76 | Weak 77 | 78 | 79 | 80 | 81 | Ok 82 | 83 | 84 | 85 | 86 | Good 87 | 88 | 89 | 90 | 91 | Excellent 92 | 93 | 94 | 95 | 96 | QObject 97 | 98 | 99 | name 100 | network name 101 | Netzwerkname 102 | 103 | 104 | 105 | 106 | Username 107 | Nutzername 108 | 109 | 110 | 111 | Passphrase 112 | Kennwort 113 | 114 | 115 | 116 | Previous passphrase 117 | vorheriges Kennwort 118 | 119 | 120 | 121 | Wired 122 | Ethernet 123 | 124 | 125 | 126 | Wireless 127 | WLAN 128 | 129 | 130 | 131 | Peer-to-peer 132 | peer-to-peer 133 | 134 | 135 | 136 | Bluetooth 137 | Bluetooth 138 | 139 | 140 | 141 | Out of range 142 | 143 | 144 | 145 | 146 | Pin code missing 147 | 148 | 149 | 150 | 151 | DHCP failed 152 | 153 | 154 | 155 | 156 | Connection failed 157 | 158 | 159 | 160 | 161 | Login failed 162 | 163 | 164 | 165 | 166 | Authentication failed 167 | 168 | 169 | 170 | 171 | Invalid key 172 | 173 | 174 | 175 | 176 | Configuration 177 | 178 | 179 | 180 | 181 | Association 182 | 183 | 184 | 185 | 186 | -------------------------------------------------------------------------------- /translations/lxqt-connman-applet_gl.ts: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Dialog 6 | 7 | 8 | LXQt ConnMan applet 9 | Miniaplicativo LXQt ConnMan 10 | 11 | 12 | 13 | Connect to %1 14 | Conectar a %1 15 | 16 | 17 | 18 | QObject 19 | 20 | 21 | name 22 | network name 23 | nome da rede 24 | nome 25 | 26 | 27 | 28 | 29 | Username 30 | Nome de usuario 31 | 32 | 33 | 34 | Passphrase 35 | Contrasinal 36 | 37 | 38 | 39 | Previous passphrase 40 | Contrasinal anterior 41 | 42 | 43 | 44 | Wired 45 | Con fíos 46 | 47 | 48 | 49 | Wireless 50 | Sen fíos 51 | 52 | 53 | 54 | Peer-to-peer 55 | Punto a punto 56 | 57 | 58 | 59 | Bluetooth 60 | Bluetooth 61 | 62 | 63 | 64 | SystemTray 65 | 66 | 67 | Quit 68 | Saír 69 | 70 | 71 | 72 | Technologies: 73 | Tecnoloxías: 74 | 75 | 76 | 77 | Services: 78 | Servizos: 79 | 80 | 81 | 82 | -------------------------------------------------------------------------------- /translations/lxqt-connman-applet_hr.ts: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Controller 6 | 7 | 8 | Services... 9 | Usluge … 10 | 11 | 12 | 13 | 14 | About 15 | Informacije 16 | 17 | 18 | 19 | Quit 20 | Zatvori 21 | 22 | 23 | 24 | <p> <b>LXQt Connman Client</b></p><p>Copyright 2014, 2015, 2016</p><p>Christian Surlykke</p> 25 | <p> <b>LXQt Connman klijent</b></p><p>Copyright 2014., 2015., 2016.</p><p>Christian Surlykke</p> 26 | 27 | 28 | 29 | Dialog 30 | 31 | 32 | LXQt ConnMan applet 33 | LXQt ConnMan programčić 34 | 35 | 36 | 37 | Connect to %1 38 | Poveži se s %1 39 | 40 | 41 | 42 | IconViewer 43 | 44 | 45 | Icons 46 | Ikone 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | I 57 | I 58 | 59 | 60 | 61 | Connected 62 | Povezano 63 | 64 | 65 | 66 | Disconnected 67 | Nepovezano 68 | 69 | 70 | 71 | None 72 | Ništa 73 | 74 | 75 | 76 | Weak 77 | Slabo 78 | 79 | 80 | 81 | Ok 82 | U redu 83 | 84 | 85 | 86 | Good 87 | Dobro 88 | 89 | 90 | 91 | Excellent 92 | Super 93 | 94 | 95 | 96 | QObject 97 | 98 | 99 | name 100 | network name 101 | ime 102 | 103 | 104 | 105 | 106 | Username 107 | Korisničko ime 108 | 109 | 110 | 111 | Passphrase 112 | Lozinka 113 | 114 | 115 | 116 | Previous passphrase 117 | Prethodna lozinka 118 | 119 | 120 | 121 | Wired 122 | Žičano 123 | 124 | 125 | 126 | Wireless 127 | Bežično 128 | 129 | 130 | 131 | Peer-to-peer 132 | Umrežavanje bez poslužitelja 133 | 134 | 135 | 136 | Bluetooth 137 | Bluetooth 138 | 139 | 140 | 141 | Out of range 142 | Nedostupno 143 | 144 | 145 | 146 | Pin code missing 147 | Pin-kod nedostaje 148 | 149 | 150 | 151 | DHCP failed 152 | DHCP neuspjelo 153 | 154 | 155 | 156 | Connection failed 157 | Veza prekinuta 158 | 159 | 160 | 161 | Login failed 162 | Neuspjela prijava 163 | 164 | 165 | 166 | Authentication failed 167 | Neuspjela autentifikacija 168 | 169 | 170 | 171 | Invalid key 172 | Neispravan ključ 173 | 174 | 175 | 176 | Configuration 177 | Konfiguracija 178 | 179 | 180 | 181 | Association 182 | Veza 183 | 184 | 185 | 186 | -------------------------------------------------------------------------------- /translations/lxqt-connman-applet_lt.ts: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Controller 6 | 7 | 8 | Services... 9 | 10 | 11 | 12 | 13 | 14 | About 15 | 16 | 17 | 18 | 19 | Quit 20 | Išeiti 21 | 22 | 23 | 24 | <p> <b>LXQt Connman Client</b></p><p>Copyright 2014, 2015, 2016</p><p>Christian Surlykke</p> 25 | 26 | 27 | 28 | 29 | Dialog 30 | 31 | 32 | LXQt ConnMan applet 33 | LXQt ConnMan programėlė 34 | 35 | 36 | 37 | Connect to %1 38 | Prisijungti prie %1 39 | 40 | 41 | 42 | IconViewer 43 | 44 | 45 | Icons 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | I 57 | 58 | 59 | 60 | 61 | Connected 62 | 63 | 64 | 65 | 66 | Disconnected 67 | 68 | 69 | 70 | 71 | None 72 | 73 | 74 | 75 | 76 | Weak 77 | 78 | 79 | 80 | 81 | Ok 82 | 83 | 84 | 85 | 86 | Good 87 | 88 | 89 | 90 | 91 | Excellent 92 | 93 | 94 | 95 | 96 | QObject 97 | 98 | 99 | name 100 | network name 101 | pavadinimas 102 | 103 | 104 | 105 | 106 | Username 107 | Naudotojo vardas 108 | 109 | 110 | 111 | Passphrase 112 | Slaptafrazė 113 | 114 | 115 | 116 | Previous passphrase 117 | Ankstesnė slaptafrazė 118 | 119 | 120 | 121 | Wired 122 | Laidinis 123 | 124 | 125 | 126 | Wireless 127 | Belaidis 128 | 129 | 130 | 131 | Peer-to-peer 132 | P2P 133 | 134 | 135 | 136 | Bluetooth 137 | Bluetooth 138 | 139 | 140 | 141 | Out of range 142 | 143 | 144 | 145 | 146 | Pin code missing 147 | 148 | 149 | 150 | 151 | DHCP failed 152 | 153 | 154 | 155 | 156 | Connection failed 157 | 158 | 159 | 160 | 161 | Login failed 162 | 163 | 164 | 165 | 166 | Authentication failed 167 | 168 | 169 | 170 | 171 | Invalid key 172 | 173 | 174 | 175 | 176 | Configuration 177 | 178 | 179 | 180 | 181 | Association 182 | 183 | 184 | 185 | 186 | -------------------------------------------------------------------------------- /translations/lxqt-connman-applet_pl.ts: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Controller 6 | 7 | 8 | Services... 9 | 10 | 11 | 12 | 13 | 14 | About 15 | 16 | 17 | 18 | 19 | Quit 20 | Wyjdź 21 | 22 | 23 | 24 | <p> <b>LXQt Connman Client</b></p><p>Copyright 2014, 2015, 2016</p><p>Christian Surlykke</p> 25 | 26 | 27 | 28 | 29 | Dialog 30 | 31 | 32 | LXQt ConnMan applet 33 | Aplet ConnMan dla LXQt 34 | 35 | 36 | 37 | Connect to %1 38 | Połącz z %1 39 | 40 | 41 | 42 | IconViewer 43 | 44 | 45 | Icons 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | I 57 | 58 | 59 | 60 | 61 | Connected 62 | 63 | 64 | 65 | 66 | Disconnected 67 | 68 | 69 | 70 | 71 | None 72 | 73 | 74 | 75 | 76 | Weak 77 | 78 | 79 | 80 | 81 | Ok 82 | 83 | 84 | 85 | 86 | Good 87 | 88 | 89 | 90 | 91 | Excellent 92 | 93 | 94 | 95 | 96 | QObject 97 | 98 | 99 | name 100 | network name 101 | nazwa 102 | 103 | 104 | 105 | 106 | Username 107 | Nazwa użytkownika 108 | 109 | 110 | 111 | Passphrase 112 | Hasło 113 | 114 | 115 | 116 | Previous passphrase 117 | Poprzednie hasło 118 | 119 | 120 | 121 | Wired 122 | Kablowe 123 | 124 | 125 | 126 | Wireless 127 | 128 | 129 | 130 | 131 | Out of range 132 | 133 | 134 | 135 | 136 | Pin code missing 137 | 138 | 139 | 140 | 141 | DHCP failed 142 | 143 | 144 | 145 | 146 | Connection failed 147 | 148 | 149 | 150 | 151 | Login failed 152 | 153 | 154 | 155 | 156 | Authentication failed 157 | 158 | 159 | 160 | 161 | Invalid key 162 | 163 | 164 | 165 | 166 | Configuration 167 | 168 | 169 | 170 | 171 | Association 172 | 173 | 174 | 175 | 176 | Peer-to-peer 177 | P2P 178 | 179 | 180 | 181 | Bluetooth 182 | Bluetooth 183 | 184 | 185 | 186 | -------------------------------------------------------------------------------- /translations/lxqt-connman-applet_pt.ts: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Controller 6 | 7 | 8 | Services... 9 | 10 | 11 | 12 | 13 | 14 | About 15 | 16 | 17 | 18 | 19 | Quit 20 | Sair 21 | 22 | 23 | 24 | <p> <b>LXQt Connman Client</b></p><p>Copyright 2014, 2015, 2016</p><p>Christian Surlykke</p> 25 | 26 | 27 | 28 | 29 | Dialog 30 | 31 | 32 | LXQt ConnMan applet 33 | LXQt ConnMan applet 34 | 35 | 36 | 37 | Connect to %1 38 | Conectando em %1 39 | 40 | 41 | 42 | IconViewer 43 | 44 | 45 | Icons 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | I 57 | 58 | 59 | 60 | 61 | Connected 62 | 63 | 64 | 65 | 66 | Disconnected 67 | 68 | 69 | 70 | 71 | None 72 | 73 | 74 | 75 | 76 | Weak 77 | 78 | 79 | 80 | 81 | Ok 82 | 83 | 84 | 85 | 86 | Good 87 | 88 | 89 | 90 | 91 | Excellent 92 | 93 | 94 | 95 | 96 | QObject 97 | 98 | 99 | name 100 | network name 101 | Nome da rede 102 | 103 | 104 | 105 | 106 | Username 107 | Nome de Usuário 108 | 109 | 110 | 111 | Passphrase 112 | Senha 113 | 114 | 115 | 116 | Previous passphrase 117 | Última senha 118 | 119 | 120 | 121 | Wired 122 | Com fio 123 | 124 | 125 | 126 | Wireless 127 | Wi-fi 128 | 129 | 130 | 131 | Peer-to-peer 132 | ponto-a-ponto (P2P) 133 | 134 | 135 | 136 | Bluetooth 137 | Bluetooth 138 | 139 | 140 | 141 | Out of range 142 | 143 | 144 | 145 | 146 | Pin code missing 147 | 148 | 149 | 150 | 151 | DHCP failed 152 | 153 | 154 | 155 | 156 | Connection failed 157 | 158 | 159 | 160 | 161 | Login failed 162 | 163 | 164 | 165 | 166 | Authentication failed 167 | 168 | 169 | 170 | 171 | Invalid key 172 | 173 | 174 | 175 | 176 | Configuration 177 | 178 | 179 | 180 | 181 | Association 182 | 183 | 184 | 185 | 186 | -------------------------------------------------------------------------------- /translations/lxqt-connman-applet_tr.ts: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Controller 6 | 7 | 8 | Services... 9 | Hizmetler... 10 | 11 | 12 | 13 | 14 | About 15 | Hakkında 16 | 17 | 18 | 19 | Quit 20 | Çık 21 | 22 | 23 | 24 | <p> <b>LXQt Connman Client</b></p><p>Copyright 2014, 2015, 2016</p><p>Christian Surlykke</p> 25 | <p> <b>LXQt Connman İstemcisi</b></p><p>Telif Hakkı 2014, 2015, 2016</p><p>Christian Surlykke</p> 26 | 27 | 28 | 29 | Dialog 30 | 31 | 32 | LXQt ConnMan applet 33 | LXQt ConnMan uygulaması 34 | 35 | 36 | 37 | Connect to %1 38 | %1 ağına bağlandı 39 | 40 | 41 | 42 | IconViewer 43 | 44 | 45 | Icons 46 | Simgeler 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | I 57 | 58 | 59 | 60 | 61 | Connected 62 | Bağlandı 63 | 64 | 65 | 66 | Disconnected 67 | Bağlantı Kesildi 68 | 69 | 70 | 71 | None 72 | Yok 73 | 74 | 75 | 76 | Weak 77 | Güç Yok 78 | 79 | 80 | 81 | Ok 82 | Tamam 83 | 84 | 85 | 86 | Good 87 | İyi 88 | 89 | 90 | 91 | Excellent 92 | Mükemmel 93 | 94 | 95 | 96 | QObject 97 | 98 | 99 | name 100 | network name 101 | ad 102 | 103 | 104 | 105 | 106 | Username 107 | Kullanıcı Adı 108 | 109 | 110 | 111 | Passphrase 112 | Parola 113 | 114 | 115 | 116 | Previous passphrase 117 | Önceki parola 118 | 119 | 120 | 121 | Wired 122 | Kablolu 123 | 124 | 125 | 126 | Wireless 127 | Kablosuz 128 | 129 | 130 | 131 | Peer-to-peer 132 | Eşler arası 133 | 134 | 135 | 136 | Bluetooth 137 | 138 | 139 | 140 | 141 | Out of range 142 | Aralık dışı 143 | 144 | 145 | 146 | Pin code missing 147 | Pin kodu eksik 148 | 149 | 150 | 151 | DHCP failed 152 | DHCP başarısız oldu 153 | 154 | 155 | 156 | Connection failed 157 | Bağlantı başarısız oldu 158 | 159 | 160 | 161 | Login failed 162 | Giriş başarısız oldu 163 | 164 | 165 | 166 | Authentication failed 167 | Kimlik doğrulama başarısız oldu 168 | 169 | 170 | 171 | Invalid key 172 | Geçersiz anahtar 173 | 174 | 175 | 176 | Configuration 177 | Yapılandırma 178 | 179 | 180 | 181 | Association 182 | İlişki 183 | 184 | 185 | 186 | --------------------------------------------------------------------------------