[
  {
    "path": ".gitignore",
    "content": "theDesk.pro.user\n"
  },
  {
    "path": ".parlance.json",
    "content": "{\n    \"name\": \"theDesk\",\n    \"subprojects\": [\n        {\n            \"name\": \"libthedesk\",\n            \"type\": \"qt\",\n            \"path\": \"/libthedesk/translations/{lang}.ts\",\n            \"baseLang\": \"en_US\"\n        },\n        {\n            \"name\": \"theDesk Desktop\",\n            \"type\": \"qt\",\n            \"path\": \"/desktop/translations/{lang}.ts\",\n            \"baseLang\": \"en_US\"\n        },\n        {\n            \"name\": \"theDesk Platform\",\n            \"type\": \"qt\",\n            \"path\": \"/platform/translations/{lang}.ts\",\n            \"baseLang\": \"en_US\"\n        },\n        {\n            \"name\": \"theDesk Session Manager\",\n            \"type\": \"qt\",\n            \"path\": \"/startdesk/translations/{lang}.ts\",\n            \"baseLang\": \"en_US\"\n        },\n        {\n            \"name\": \"theDesk Polkit\",\n            \"type\": \"qt\",\n            \"path\": \"/polkitagent/translations/{lang}.ts\",\n            \"baseLang\": \"en_US\"\n        },\n        {\n            \"name\": \"theDesk Accessibility\",\n            \"type\": \"qt\",\n            \"path\": \"/plugins/AccessibilityPlugin/translations/{lang}.ts\",\n            \"baseLang\": \"en_US\"\n        },\n        {\n            \"name\": \"theDesk Audio\",\n            \"type\": \"qt\",\n            \"path\": \"/plugins/AudioPlugin/translations/{lang}.ts\",\n            \"baseLang\": \"en_US\"\n        },\n        {\n            \"name\": \"theDesk Bluetooth\",\n            \"type\": \"qt\",\n            \"path\": \"/plugins/BluetoothPlugin/translations/{lang}.ts\",\n            \"baseLang\": \"en_US\"\n        },\n        {\n            \"name\": \"theDesk Brightness\",\n            \"type\": \"qt\",\n            \"path\": \"/plugins/BrightnessPlugin/translations/{lang}.ts\",\n            \"baseLang\": \"en_US\"\n        },\n        {\n            \"name\": \"theDesk Defaults\",\n            \"type\": \"qt\",\n            \"path\": \"/plugins/DefaultsPlugin/translations/{lang}.ts\",\n            \"baseLang\": \"en_US\"\n        },\n        {\n            \"name\": \"theDesk Display\",\n            \"type\": \"qt\",\n            \"path\": \"/plugins/DisplayPlugin/translations/{lang}.ts\",\n            \"baseLang\": \"en_US\"\n        },\n        {\n            \"name\": \"theDesk Input\",\n            \"type\": \"qt\",\n            \"path\": \"/plugins/InputPlugin/translations/{lang}.ts\",\n            \"baseLang\": \"en_US\"\n        },\n        {\n            \"name\": \"theDesk Locale\",\n            \"type\": \"qt\",\n            \"path\": \"/plugins/LocalePlugin/translations/{lang}.ts\",\n            \"baseLang\": \"en_US\"\n        },\n        {\n            \"name\": \"theDesk Network\",\n            \"type\": \"qt\",\n            \"path\": \"/plugins/NetworkPlugin/translations/{lang}.ts\",\n            \"baseLang\": \"en_US\"\n        },\n        {\n            \"name\": \"theDesk Notifications\",\n            \"type\": \"qt\",\n            \"path\": \"/plugins/NotificationsPlugin/translations/{lang}.ts\",\n            \"baseLang\": \"en_US\"\n        },\n        {\n            \"name\": \"theDesk Overview\",\n            \"type\": \"qt\",\n            \"path\": \"/plugins/OverviewPlugin/translations/{lang}.ts\",\n            \"baseLang\": \"en_US\"\n        },\n        {\n            \"name\": \"theDesk Power\",\n            \"type\": \"qt\",\n            \"path\": \"/plugins/PowerPlugin/translations/{lang}.ts\",\n            \"baseLang\": \"en_US\"\n        },\n        {\n            \"name\": \"theDesk Screenshots\",\n            \"type\": \"qt\",\n            \"path\": \"/plugins/ScreenshotPlugin/translations/{lang}.ts\",\n            \"baseLang\": \"en_US\"\n        },\n        {\n            \"name\": \"theDesk Theme\",\n            \"type\": \"qt\",\n            \"path\": \"/plugins/ThemePlugin/translations/{lang}.ts\",\n            \"baseLang\": \"en_US\"\n        },\n        {\n            \"name\": \"theDesk Time and Date\",\n            \"type\": \"qt\",\n            \"path\": \"/plugins/TimeDatePlugin/translations/{lang}.ts\",\n            \"baseLang\": \"en_US\"\n        },\n        {\n            \"name\": \"theDesk Users\",\n            \"type\": \"qt\",\n            \"path\": \"/plugins/UsersPlugin/translations/{lang}.ts\",\n            \"baseLang\": \"en_US\"\n        }\n    ]\n}"
  },
  {
    "path": "CMakeLists.txt",
    "content": "cmake_minimum_required(VERSION 3.24.0)\nset(CMAKE_OSX_DEPLOYMENT_TARGET 10.15)\n\nproject(thedesk VERSION 1.0.0 LANGUAGES CXX)\n\nIF(${CMAKE_SYSTEM_NAME} MATCHES \"Darwin\")\n    link_directories(/usr/local/lib)\nENDIF()\n\nfind_package(QT REQUIRED NAMES Qt6)\nset(KF_VERSION_MAJOR ${QT_VERSION_MAJOR} CACHE STRING \"Major version of KDE Frameworks to link to\")\n\nadd_subdirectory(libthedesk)\nadd_subdirectory(startdesk)\nadd_subdirectory(desktop)\nadd_subdirectory(platform)\nadd_subdirectory(plugins)\nadd_subdirectory(polkitagent)\nadd_subdirectory(locker)\nadd_subdirectory(desktop-portal)\nadd_subdirectory(wayfire-plugins)\n"
  },
  {
    "path": "LICENSE",
    "content": "                    GNU GENERAL PUBLIC LICENSE\n                       Version 3, 29 June 2007\n\n Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>\n Everyone is permitted to copy and distribute verbatim copies\n of this license document, but changing it is not allowed.\n\n                            Preamble\n\n  The GNU General Public License is a free, copyleft license for\nsoftware and other kinds of works.\n\n  The licenses for most software and other practical works are designed\nto take away your freedom to share and change the works.  By contrast,\nthe GNU General Public License is intended to guarantee your freedom to\nshare and change all versions of a program--to make sure it remains free\nsoftware for all its users.  We, the Free Software Foundation, use the\nGNU General Public License for most of our software; it applies also to\nany other work released this way by its authors.  You can apply it to\nyour programs, too.\n\n  When we speak of free software, we are referring to freedom, not\nprice.  Our General Public Licenses are designed to make sure that you\nhave the freedom to distribute copies of free software (and charge for\nthem if you wish), that you receive source code or can get it if you\nwant it, that you can change the software or use pieces of it in new\nfree programs, and that you know you can do these things.\n\n  To protect your rights, we need to prevent others from denying you\nthese rights or asking you to surrender the rights.  Therefore, you have\ncertain responsibilities if you distribute copies of the software, or if\nyou modify it: responsibilities to respect the freedom of others.\n\n  For example, if you distribute copies of such a program, whether\ngratis or for a fee, you must pass on to the recipients the same\nfreedoms that you received.  You must make sure that they, too, receive\nor can get the source code.  And you must show them these terms so they\nknow their rights.\n\n  Developers that use the GNU GPL protect your rights with two steps:\n(1) assert copyright on the software, and (2) offer you this License\ngiving you legal permission to copy, distribute and/or modify it.\n\n  For the developers' and authors' protection, the GPL clearly explains\nthat there is no warranty for this free software.  For both users' and\nauthors' sake, the GPL requires that modified versions be marked as\nchanged, so that their problems will not be attributed erroneously to\nauthors of previous versions.\n\n  Some devices are designed to deny users access to install or run\nmodified versions of the software inside them, although the manufacturer\ncan do so.  This is fundamentally incompatible with the aim of\nprotecting users' freedom to change the software.  The systematic\npattern of such abuse occurs in the area of products for individuals to\nuse, which is precisely where it is most unacceptable.  Therefore, we\nhave designed this version of the GPL to prohibit the practice for those\nproducts.  If such problems arise substantially in other domains, we\nstand ready to extend this provision to those domains in future versions\nof the GPL, as needed to protect the freedom of users.\n\n  Finally, every program is threatened constantly by software patents.\nStates should not allow patents to restrict development and use of\nsoftware on general-purpose computers, but in those that do, we wish to\navoid the special danger that patents applied to a free program could\nmake it effectively proprietary.  To prevent this, the GPL assures that\npatents cannot be used to render the program non-free.\n\n  The precise terms and conditions for copying, distribution and\nmodification follow.\n\n                       TERMS AND CONDITIONS\n\n  0. Definitions.\n\n  \"This License\" refers to version 3 of the GNU General Public License.\n\n  \"Copyright\" also means copyright-like laws that apply to other kinds of\nworks, such as semiconductor masks.\n\n  \"The Program\" refers to any copyrightable work licensed under this\nLicense.  Each licensee is addressed as \"you\".  \"Licensees\" and\n\"recipients\" may be individuals or organizations.\n\n  To \"modify\" a work means to copy from or adapt all or part of the work\nin a fashion requiring copyright permission, other than the making of an\nexact copy.  The resulting work is called a \"modified version\" of the\nearlier work or a work \"based on\" the earlier work.\n\n  A \"covered work\" means either the unmodified Program or a work based\non the Program.\n\n  To \"propagate\" a work means to do anything with it that, without\npermission, would make you directly or secondarily liable for\ninfringement under applicable copyright law, except executing it on a\ncomputer or modifying a private copy.  Propagation includes copying,\ndistribution (with or without modification), making available to the\npublic, and in some countries other activities as well.\n\n  To \"convey\" a work means any kind of propagation that enables other\nparties to make or receive copies.  Mere interaction with a user through\na computer network, with no transfer of a copy, is not conveying.\n\n  An interactive user interface displays \"Appropriate Legal Notices\"\nto the extent that it includes a convenient and prominently visible\nfeature that (1) displays an appropriate copyright notice, and (2)\ntells the user that there is no warranty for the work (except to the\nextent that warranties are provided), that licensees may convey the\nwork under this License, and how to view a copy of this License.  If\nthe interface presents a list of user commands or options, such as a\nmenu, a prominent item in the list meets this criterion.\n\n  1. Source Code.\n\n  The \"source code\" for a work means the preferred form of the work\nfor making modifications to it.  \"Object code\" means any non-source\nform of a work.\n\n  A \"Standard Interface\" means an interface that either is an official\nstandard defined by a recognized standards body, or, in the case of\ninterfaces specified for a particular programming language, one that\nis widely used among developers working in that language.\n\n  The \"System Libraries\" of an executable work include anything, other\nthan the work as a whole, that (a) is included in the normal form of\npackaging a Major Component, but which is not part of that Major\nComponent, and (b) serves only to enable use of the work with that\nMajor Component, or to implement a Standard Interface for which an\nimplementation is available to the public in source code form.  A\n\"Major Component\", in this context, means a major essential component\n(kernel, window system, and so on) of the specific operating system\n(if any) on which the executable work runs, or a compiler used to\nproduce the work, or an object code interpreter used to run it.\n\n  The \"Corresponding Source\" for a work in object code form means all\nthe source code needed to generate, install, and (for an executable\nwork) run the object code and to modify the work, including scripts to\ncontrol those activities.  However, it does not include the work's\nSystem Libraries, or general-purpose tools or generally available free\nprograms which are used unmodified in performing those activities but\nwhich are not part of the work.  For example, Corresponding Source\nincludes interface definition files associated with source files for\nthe work, and the source code for shared libraries and dynamically\nlinked subprograms that the work is specifically designed to require,\nsuch as by intimate data communication or control flow between those\nsubprograms and other parts of the work.\n\n  The Corresponding Source need not include anything that users\ncan regenerate automatically from other parts of the Corresponding\nSource.\n\n  The Corresponding Source for a work in source code form is that\nsame work.\n\n  2. Basic Permissions.\n\n  All rights granted under this License are granted for the term of\ncopyright on the Program, and are irrevocable provided the stated\nconditions are met.  This License explicitly affirms your unlimited\npermission to run the unmodified Program.  The output from running a\ncovered work is covered by this License only if the output, given its\ncontent, constitutes a covered work.  This License acknowledges your\nrights of fair use or other equivalent, as provided by copyright law.\n\n  You may make, run and propagate covered works that you do not\nconvey, without conditions so long as your license otherwise remains\nin force.  You may convey covered works to others for the sole purpose\nof having them make modifications exclusively for you, or provide you\nwith facilities for running those works, provided that you comply with\nthe terms of this License in conveying all material for which you do\nnot control copyright.  Those thus making or running the covered works\nfor you must do so exclusively on your behalf, under your direction\nand control, on terms that prohibit them from making any copies of\nyour copyrighted material outside their relationship with you.\n\n  Conveying under any other circumstances is permitted solely under\nthe conditions stated below.  Sublicensing is not allowed; section 10\nmakes it unnecessary.\n\n  3. Protecting Users' Legal Rights From Anti-Circumvention Law.\n\n  No covered work shall be deemed part of an effective technological\nmeasure under any applicable law fulfilling obligations under article\n11 of the WIPO copyright treaty adopted on 20 December 1996, or\nsimilar laws prohibiting or restricting circumvention of such\nmeasures.\n\n  When you convey a covered work, you waive any legal power to forbid\ncircumvention of technological measures to the extent such circumvention\nis effected by exercising rights under this License with respect to\nthe covered work, and you disclaim any intention to limit operation or\nmodification of the work as a means of enforcing, against the work's\nusers, your or third parties' legal rights to forbid circumvention of\ntechnological measures.\n\n  4. Conveying Verbatim Copies.\n\n  You may convey verbatim copies of the Program's source code as you\nreceive it, in any medium, provided that you conspicuously and\nappropriately publish on each copy an appropriate copyright notice;\nkeep intact all notices stating that this License and any\nnon-permissive terms added in accord with section 7 apply to the code;\nkeep intact all notices of the absence of any warranty; and give all\nrecipients a copy of this License along with the Program.\n\n  You may charge any price or no price for each copy that you convey,\nand you may offer support or warranty protection for a fee.\n\n  5. Conveying Modified Source Versions.\n\n  You may convey a work based on the Program, or the modifications to\nproduce it from the Program, in the form of source code under the\nterms of section 4, provided that you also meet all of these conditions:\n\n    a) The work must carry prominent notices stating that you modified\n    it, and giving a relevant date.\n\n    b) The work must carry prominent notices stating that it is\n    released under this License and any conditions added under section\n    7.  This requirement modifies the requirement in section 4 to\n    \"keep intact all notices\".\n\n    c) You must license the entire work, as a whole, under this\n    License to anyone who comes into possession of a copy.  This\n    License will therefore apply, along with any applicable section 7\n    additional terms, to the whole of the work, and all its parts,\n    regardless of how they are packaged.  This License gives no\n    permission to license the work in any other way, but it does not\n    invalidate such permission if you have separately received it.\n\n    d) If the work has interactive user interfaces, each must display\n    Appropriate Legal Notices; however, if the Program has interactive\n    interfaces that do not display Appropriate Legal Notices, your\n    work need not make them do so.\n\n  A compilation of a covered work with other separate and independent\nworks, which are not by their nature extensions of the covered work,\nand which are not combined with it such as to form a larger program,\nin or on a volume of a storage or distribution medium, is called an\n\"aggregate\" if the compilation and its resulting copyright are not\nused to limit the access or legal rights of the compilation's users\nbeyond what the individual works permit.  Inclusion of a covered work\nin an aggregate does not cause this License to apply to the other\nparts of the aggregate.\n\n  6. Conveying Non-Source Forms.\n\n  You may convey a covered work in object code form under the terms\nof sections 4 and 5, provided that you also convey the\nmachine-readable Corresponding Source under the terms of this License,\nin one of these ways:\n\n    a) Convey the object code in, or embodied in, a physical product\n    (including a physical distribution medium), accompanied by the\n    Corresponding Source fixed on a durable physical medium\n    customarily used for software interchange.\n\n    b) Convey the object code in, or embodied in, a physical product\n    (including a physical distribution medium), accompanied by a\n    written offer, valid for at least three years and valid for as\n    long as you offer spare parts or customer support for that product\n    model, to give anyone who possesses the object code either (1) a\n    copy of the Corresponding Source for all the software in the\n    product that is covered by this License, on a durable physical\n    medium customarily used for software interchange, for a price no\n    more than your reasonable cost of physically performing this\n    conveying of source, or (2) access to copy the\n    Corresponding Source from a network server at no charge.\n\n    c) Convey individual copies of the object code with a copy of the\n    written offer to provide the Corresponding Source.  This\n    alternative is allowed only occasionally and noncommercially, and\n    only if you received the object code with such an offer, in accord\n    with subsection 6b.\n\n    d) Convey the object code by offering access from a designated\n    place (gratis or for a charge), and offer equivalent access to the\n    Corresponding Source in the same way through the same place at no\n    further charge.  You need not require recipients to copy the\n    Corresponding Source along with the object code.  If the place to\n    copy the object code is a network server, the Corresponding Source\n    may be on a different server (operated by you or a third party)\n    that supports equivalent copying facilities, provided you maintain\n    clear directions next to the object code saying where to find the\n    Corresponding Source.  Regardless of what server hosts the\n    Corresponding Source, you remain obligated to ensure that it is\n    available for as long as needed to satisfy these requirements.\n\n    e) Convey the object code using peer-to-peer transmission, provided\n    you inform other peers where the object code and Corresponding\n    Source of the work are being offered to the general public at no\n    charge under subsection 6d.\n\n  A separable portion of the object code, whose source code is excluded\nfrom the Corresponding Source as a System Library, need not be\nincluded in conveying the object code work.\n\n  A \"User Product\" is either (1) a \"consumer product\", which means any\ntangible personal property which is normally used for personal, family,\nor household purposes, or (2) anything designed or sold for incorporation\ninto a dwelling.  In determining whether a product is a consumer product,\ndoubtful cases shall be resolved in favor of coverage.  For a particular\nproduct received by a particular user, \"normally used\" refers to a\ntypical or common use of that class of product, regardless of the status\nof the particular user or of the way in which the particular user\nactually uses, or expects or is expected to use, the product.  A product\nis a consumer product regardless of whether the product has substantial\ncommercial, industrial or non-consumer uses, unless such uses represent\nthe only significant mode of use of the product.\n\n  \"Installation Information\" for a User Product means any methods,\nprocedures, authorization keys, or other information required to install\nand execute modified versions of a covered work in that User Product from\na modified version of its Corresponding Source.  The information must\nsuffice to ensure that the continued functioning of the modified object\ncode is in no case prevented or interfered with solely because\nmodification has been made.\n\n  If you convey an object code work under this section in, or with, or\nspecifically for use in, a User Product, and the conveying occurs as\npart of a transaction in which the right of possession and use of the\nUser Product is transferred to the recipient in perpetuity or for a\nfixed term (regardless of how the transaction is characterized), the\nCorresponding Source conveyed under this section must be accompanied\nby the Installation Information.  But this requirement does not apply\nif neither you nor any third party retains the ability to install\nmodified object code on the User Product (for example, the work has\nbeen installed in ROM).\n\n  The requirement to provide Installation Information does not include a\nrequirement to continue to provide support service, warranty, or updates\nfor a work that has been modified or installed by the recipient, or for\nthe User Product in which it has been modified or installed.  Access to a\nnetwork may be denied when the modification itself materially and\nadversely affects the operation of the network or violates the rules and\nprotocols for communication across the network.\n\n  Corresponding Source conveyed, and Installation Information provided,\nin accord with this section must be in a format that is publicly\ndocumented (and with an implementation available to the public in\nsource code form), and must require no special password or key for\nunpacking, reading or copying.\n\n  7. Additional Terms.\n\n  \"Additional permissions\" are terms that supplement the terms of this\nLicense by making exceptions from one or more of its conditions.\nAdditional permissions that are applicable to the entire Program shall\nbe treated as though they were included in this License, to the extent\nthat they are valid under applicable law.  If additional permissions\napply only to part of the Program, that part may be used separately\nunder those permissions, but the entire Program remains governed by\nthis License without regard to the additional permissions.\n\n  When you convey a copy of a covered work, you may at your option\nremove any additional permissions from that copy, or from any part of\nit.  (Additional permissions may be written to require their own\nremoval in certain cases when you modify the work.)  You may place\nadditional permissions on material, added by you to a covered work,\nfor which you have or can give appropriate copyright permission.\n\n  Notwithstanding any other provision of this License, for material you\nadd to a covered work, you may (if authorized by the copyright holders of\nthat material) supplement the terms of this License with terms:\n\n    a) Disclaiming warranty or limiting liability differently from the\n    terms of sections 15 and 16 of this License; or\n\n    b) Requiring preservation of specified reasonable legal notices or\n    author attributions in that material or in the Appropriate Legal\n    Notices displayed by works containing it; or\n\n    c) Prohibiting misrepresentation of the origin of that material, or\n    requiring that modified versions of such material be marked in\n    reasonable ways as different from the original version; or\n\n    d) Limiting the use for publicity purposes of names of licensors or\n    authors of the material; or\n\n    e) Declining to grant rights under trademark law for use of some\n    trade names, trademarks, or service marks; or\n\n    f) Requiring indemnification of licensors and authors of that\n    material by anyone who conveys the material (or modified versions of\n    it) with contractual assumptions of liability to the recipient, for\n    any liability that these contractual assumptions directly impose on\n    those licensors and authors.\n\n  All other non-permissive additional terms are considered \"further\nrestrictions\" within the meaning of section 10.  If the Program as you\nreceived it, or any part of it, contains a notice stating that it is\ngoverned by this License along with a term that is a further\nrestriction, you may remove that term.  If a license document contains\na further restriction but permits relicensing or conveying under this\nLicense, you may add to a covered work material governed by the terms\nof that license document, provided that the further restriction does\nnot survive such relicensing or conveying.\n\n  If you add terms to a covered work in accord with this section, you\nmust place, in the relevant source files, a statement of the\nadditional terms that apply to those files, or a notice indicating\nwhere to find the applicable terms.\n\n  Additional terms, permissive or non-permissive, may be stated in the\nform of a separately written license, or stated as exceptions;\nthe above requirements apply either way.\n\n  8. Termination.\n\n  You may not propagate or modify a covered work except as expressly\nprovided under this License.  Any attempt otherwise to propagate or\nmodify it is void, and will automatically terminate your rights under\nthis License (including any patent licenses granted under the third\nparagraph of section 11).\n\n  However, if you cease all violation of this License, then your\nlicense from a particular copyright holder is reinstated (a)\nprovisionally, unless and until the copyright holder explicitly and\nfinally terminates your license, and (b) permanently, if the copyright\nholder fails to notify you of the violation by some reasonable means\nprior to 60 days after the cessation.\n\n  Moreover, your license from a particular copyright holder is\nreinstated permanently if the copyright holder notifies you of the\nviolation by some reasonable means, this is the first time you have\nreceived notice of violation of this License (for any work) from that\ncopyright holder, and you cure the violation prior to 30 days after\nyour receipt of the notice.\n\n  Termination of your rights under this section does not terminate the\nlicenses of parties who have received copies or rights from you under\nthis License.  If your rights have been terminated and not permanently\nreinstated, you do not qualify to receive new licenses for the same\nmaterial under section 10.\n\n  9. Acceptance Not Required for Having Copies.\n\n  You are not required to accept this License in order to receive or\nrun a copy of the Program.  Ancillary propagation of a covered work\noccurring solely as a consequence of using peer-to-peer transmission\nto receive a copy likewise does not require acceptance.  However,\nnothing other than this License grants you permission to propagate or\nmodify any covered work.  These actions infringe copyright if you do\nnot accept this License.  Therefore, by modifying or propagating a\ncovered work, you indicate your acceptance of this License to do so.\n\n  10. Automatic Licensing of Downstream Recipients.\n\n  Each time you convey a covered work, the recipient automatically\nreceives a license from the original licensors, to run, modify and\npropagate that work, subject to this License.  You are not responsible\nfor enforcing compliance by third parties with this License.\n\n  An \"entity transaction\" is a transaction transferring control of an\norganization, or substantially all assets of one, or subdividing an\norganization, or merging organizations.  If propagation of a covered\nwork results from an entity transaction, each party to that\ntransaction who receives a copy of the work also receives whatever\nlicenses to the work the party's predecessor in interest had or could\ngive under the previous paragraph, plus a right to possession of the\nCorresponding Source of the work from the predecessor in interest, if\nthe predecessor has it or can get it with reasonable efforts.\n\n  You may not impose any further restrictions on the exercise of the\nrights granted or affirmed under this License.  For example, you may\nnot impose a license fee, royalty, or other charge for exercise of\nrights granted under this License, and you may not initiate litigation\n(including a cross-claim or counterclaim in a lawsuit) alleging that\nany patent claim is infringed by making, using, selling, offering for\nsale, or importing the Program or any portion of it.\n\n  11. Patents.\n\n  A \"contributor\" is a copyright holder who authorizes use under this\nLicense of the Program or a work on which the Program is based.  The\nwork thus licensed is called the contributor's \"contributor version\".\n\n  A contributor's \"essential patent claims\" are all patent claims\nowned or controlled by the contributor, whether already acquired or\nhereafter acquired, that would be infringed by some manner, permitted\nby this License, of making, using, or selling its contributor version,\nbut do not include claims that would be infringed only as a\nconsequence of further modification of the contributor version.  For\npurposes of this definition, \"control\" includes the right to grant\npatent sublicenses in a manner consistent with the requirements of\nthis License.\n\n  Each contributor grants you a non-exclusive, worldwide, royalty-free\npatent license under the contributor's essential patent claims, to\nmake, use, sell, offer for sale, import and otherwise run, modify and\npropagate the contents of its contributor version.\n\n  In the following three paragraphs, a \"patent license\" is any express\nagreement or commitment, however denominated, not to enforce a patent\n(such as an express permission to practice a patent or covenant not to\nsue for patent infringement).  To \"grant\" such a patent license to a\nparty means to make such an agreement or commitment not to enforce a\npatent against the party.\n\n  If you convey a covered work, knowingly relying on a patent license,\nand the Corresponding Source of the work is not available for anyone\nto copy, free of charge and under the terms of this License, through a\npublicly available network server or other readily accessible means,\nthen you must either (1) cause the Corresponding Source to be so\navailable, or (2) arrange to deprive yourself of the benefit of the\npatent license for this particular work, or (3) arrange, in a manner\nconsistent with the requirements of this License, to extend the patent\nlicense to downstream recipients.  \"Knowingly relying\" means you have\nactual knowledge that, but for the patent license, your conveying the\ncovered work in a country, or your recipient's use of the covered work\nin a country, would infringe one or more identifiable patents in that\ncountry that you have reason to believe are valid.\n\n  If, pursuant to or in connection with a single transaction or\narrangement, you convey, or propagate by procuring conveyance of, a\ncovered work, and grant a patent license to some of the parties\nreceiving the covered work authorizing them to use, propagate, modify\nor convey a specific copy of the covered work, then the patent license\nyou grant is automatically extended to all recipients of the covered\nwork and works based on it.\n\n  A patent license is \"discriminatory\" if it does not include within\nthe scope of its coverage, prohibits the exercise of, or is\nconditioned on the non-exercise of one or more of the rights that are\nspecifically granted under this License.  You may not convey a covered\nwork if you are a party to an arrangement with a third party that is\nin the business of distributing software, under which you make payment\nto the third party based on the extent of your activity of conveying\nthe work, and under which the third party grants, to any of the\nparties who would receive the covered work from you, a discriminatory\npatent license (a) in connection with copies of the covered work\nconveyed by you (or copies made from those copies), or (b) primarily\nfor and in connection with specific products or compilations that\ncontain the covered work, unless you entered into that arrangement,\nor that patent license was granted, prior to 28 March 2007.\n\n  Nothing in this License shall be construed as excluding or limiting\nany implied license or other defenses to infringement that may\notherwise be available to you under applicable patent law.\n\n  12. No Surrender of Others' Freedom.\n\n  If conditions are imposed on you (whether by court order, agreement or\notherwise) that contradict the conditions of this License, they do not\nexcuse you from the conditions of this License.  If you cannot convey a\ncovered work so as to satisfy simultaneously your obligations under this\nLicense and any other pertinent obligations, then as a consequence you may\nnot convey it at all.  For example, if you agree to terms that obligate you\nto collect a royalty for further conveying from those to whom you convey\nthe Program, the only way you could satisfy both those terms and this\nLicense would be to refrain entirely from conveying the Program.\n\n  13. Use with the GNU Affero General Public License.\n\n  Notwithstanding any other provision of this License, you have\npermission to link or combine any covered work with a work licensed\nunder version 3 of the GNU Affero General Public License into a single\ncombined work, and to convey the resulting work.  The terms of this\nLicense will continue to apply to the part which is the covered work,\nbut the special requirements of the GNU Affero General Public License,\nsection 13, concerning interaction through a network will apply to the\ncombination as such.\n\n  14. Revised Versions of this License.\n\n  The Free Software Foundation may publish revised and/or new versions of\nthe GNU General Public License from time to time.  Such new versions will\nbe similar in spirit to the present version, but may differ in detail to\naddress new problems or concerns.\n\n  Each version is given a distinguishing version number.  If the\nProgram specifies that a certain numbered version of the GNU General\nPublic License \"or any later version\" applies to it, you have the\noption of following the terms and conditions either of that numbered\nversion or of any later version published by the Free Software\nFoundation.  If the Program does not specify a version number of the\nGNU General Public License, you may choose any version ever published\nby the Free Software Foundation.\n\n  If the Program specifies that a proxy can decide which future\nversions of the GNU General Public License can be used, that proxy's\npublic statement of acceptance of a version permanently authorizes you\nto choose that version for the Program.\n\n  Later license versions may give you additional or different\npermissions.  However, no additional obligations are imposed on any\nauthor or copyright holder as a result of your choosing to follow a\nlater version.\n\n  15. Disclaimer of Warranty.\n\n  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY\nAPPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT\nHOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM \"AS IS\" WITHOUT WARRANTY\nOF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,\nTHE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\nPURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM\nIS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF\nALL NECESSARY SERVICING, REPAIR OR CORRECTION.\n\n  16. Limitation of Liability.\n\n  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING\nWILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS\nTHE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY\nGENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE\nUSE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF\nDATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD\nPARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),\nEVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF\nSUCH DAMAGES.\n\n  17. Interpretation of Sections 15 and 16.\n\n  If the disclaimer of warranty and limitation of liability provided\nabove cannot be given local legal effect according to their terms,\nreviewing courts shall apply local law that most closely approximates\nan absolute waiver of all civil liability in connection with the\nProgram, unless a warranty or assumption of liability accompanies a\ncopy of the Program in return for a fee.\n\n                     END OF TERMS AND CONDITIONS\n\n            How to Apply These Terms to Your New Programs\n\n  If you develop a new program, and you want it to be of the greatest\npossible use to the public, the best way to achieve this is to make it\nfree software which everyone can redistribute and change under these terms.\n\n  To do so, attach the following notices to the program.  It is safest\nto attach them to the start of each source file to most effectively\nstate the exclusion of warranty; and each file should have at least\nthe \"copyright\" line and a pointer to where the full notice is found.\n\n    {one line to give the program's name and a brief idea of what it does.}\n    Copyright (C) {year}  {name of author}\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n\nAlso add information on how to contact you by electronic and paper mail.\n\n  If the program does terminal interaction, make it output a short\nnotice like this when it starts in an interactive mode:\n\n    {project}  Copyright (C) {year}  {fullname}\n    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.\n    This is free software, and you are welcome to redistribute it\n    under certain conditions; type `show c' for details.\n\nThe hypothetical commands `show w' and `show c' should show the appropriate\nparts of the General Public License.  Of course, your program's commands\nmight be different; for a GUI interface, you would use an \"about box\".\n\n  You should also get your employer (if you work as a programmer) or school,\nif any, to sign a \"copyright disclaimer\" for the program, if necessary.\nFor more information on this, and how to apply and follow the GNU GPL, see\n<http://www.gnu.org/licenses/>.\n\n  The GNU General Public License does not permit incorporating your program\ninto proprietary programs.  If your program is a subroutine library, you\nmay consider it more useful to permit linking proprietary applications with\nthe library.  If this is what you want to do, use the GNU Lesser General\nPublic License instead of this License.  But first, please read\n<http://www.gnu.org/philosophy/why-not-lgpl.html>.\n"
  },
  {
    "path": "README.md",
    "content": "<img src=\"readme/splash.svg\" width=\"100%\" />\n\n---\n<p align=\"center\">\n<img src=\"https://img.shields.io/github/v/release/vicr123/thedesk?label=LATEST&style=for-the-badge\">\n<img src=\"https://img.shields.io/github/license/vicr123/thedesk?style=for-the-badge\" />\n</p>\n\ntheDesk is a desktop environment built on Qt libraries.\n\n---\n\n<p align=\"center\">\n<img src=\"readme/screenshots/thedesk.png\" width=45% /> <img src=\"readme/screenshots/overview.png\" width=45% /><br>\n<img src=\"readme/screenshots/desktops.png\" width=45% /> <img src=\"readme/screenshots/thegateway.png\" width=45% /><br>\n<img src=\"readme/videos/desktops.gif\" width=90% />\n</p>\n\n# Dependencies\n- Qt 5\n  - Qt Core\n  - Qt GUI\n  - Qt Widgets\n  - Qt SVG\n- [the-libs](https://github.com/vicr123/the-libs)\n- [libtdesktopenvironment](https://github.com/vicr123/libtdesktopenvironment)\n- Xlib\n- xorg-libinput\n- NetworkManager-Qt\n\n## Recommended Dependencies\n- [contemporary-widgets](https://github.com/vicr123/contemporary-widgets) - the default widget theme\n- [contemporary-icons](https://github.com/vicr123/contemporary-icons) - the default icon theme\n\n## Build\nRun the following commands in your terminal. \n```\nmkdir build\nqmake ../theDesk.pro\nmake\n```\n\n## Install\nOn Linux, run the following command in your terminal (with superuser permissions)\n```\nmake install\n```\n\n---\n\n> © Victor Tran, 2021. This project is licensed under the GNU General Public License, version 3, or at your option, any later version.\n> \n> Check the [LICENSE](LICENSE) file for more information.\n"
  },
  {
    "path": "desktop/CMakeLists.txt",
    "content": "cmake_minimum_required(VERSION 3.24.0)\n\nproject(thedesk VERSION 1.0.0 LANGUAGES CXX)\n\nfind_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets Network DBus Multimedia QuickWidgets)\nfind_package(libcontemporary REQUIRED)\nfind_package(libtdesktopenvironment REQUIRED)\n\nset(SOURCES\n    background/background.cpp\n    bar/barwindow.cpp\n    bar/chunkcontainer.cpp\n    bar/currentappwidget.cpp\n    bar/currentappwidgetmenu.cpp\n    bar/mainbarwidget.cpp\n    bar/taskbarapplicationwidget.cpp\n    bar/taskbardesktopwidget.cpp\n    bar/taskbarwidget.cpp\n    cli/commandline.cpp\n    crash/crashhandling.cpp\n    gateway/appsearchprovider.cpp\n    gateway/appselectionmodel.cpp\n    gateway/appselectionmodellistdelegate.cpp\n    gateway/gateway.cpp\n    gateway/gatewaysearchmodel.cpp\n    gateway/gatewaysearchmodeldelegate.cpp\n    gateway/maingatewaywidget.cpp\n    gateway/searchresultswidget.cpp\n    main.cpp\n    run/rundialog.cpp\n    session/endsession.cpp\n    session/endsessionbutton.cpp\n    statuscenter/leftpanedelegate.cpp\n    statuscenter/statuscenter.cpp\n    statuscenter/statuscenterleftpane.cpp\n    statuscenter/statuscenterquickswitch.cpp\n    systemsettings/about/about.cpp\n    systemsettings/about/acknowledgements.cpp\n    systemsettings/about/changehostnamepopover.cpp\n    systemsettings/pluginmanagement/managepluginpopover.cpp\n    systemsettings/pluginmanagement/pluginitemdelegate.cpp\n    systemsettings/pluginmanagement/pluginmanagement.cpp\n    systemsettings/pluginmanagement/pluginmodel.cpp\n    systemsettings/recovery/recovery.cpp\n    systemsettings/systemsettings.cpp\n    systemsettings/systemsettingsleftpane.cpp\n\n    background/background.ui\n    bar/barwindow.ui\n    bar/chunkcontainer.ui\n    bar/currentappwidget.ui\n    bar/currentappwidgetmenu.ui\n    bar/mainbarwidget.ui\n    bar/taskbardesktopwidget.ui\n    bar/taskbarwidget.ui\n    gateway/gateway.ui\n    gateway/maingatewaywidget.ui\n    gateway/searchresultswidget.ui\n    run/rundialog.ui\n    session/endsession.ui\n    statuscenter/statuscenter.ui\n    statuscenter/statuscenterleftpane.ui\n    statuscenter/statuscenterquickswitch.ui\n    systemsettings/about/about.ui\n    systemsettings/about/acknowledgements.ui\n    systemsettings/about/changehostnamepopover.ui\n    systemsettings/pluginmanagement/managepluginpopover.ui\n    systemsettings/pluginmanagement/pluginmanagement.ui\n    systemsettings/recovery/recovery.ui\n    systemsettings/systemsettings.ui\n    systemsettings/systemsettingsleftpane.ui\n\n    resources.qrc\n)\n\nset(HEADERS\n    background/background.h\n    bar/barwindow.h\n    bar/chunkcontainer.h\n    bar/currentappwidget.h\n    bar/currentappwidgetmenu.h\n    bar/mainbarwidget.h\n    bar/taskbarapplicationwidget.h\n    bar/taskbardesktopwidget.h\n    bar/taskbarwidget.h\n    cli/commandline.h\n    crash/crashhandling.h\n    gateway/appsearchprovider.h\n    gateway/appselectionmodel.h\n    gateway/appselectionmodellistdelegate.h\n    gateway/gateway.h\n    gateway/gatewaysearchmodel.h\n    gateway/gatewaysearchmodeldelegate.h\n    gateway/maingatewaywidget.h\n    gateway/searchresultswidget.h\n    run/rundialog.h\n    session/endsession.h\n    session/endsessionbutton.h\n    statuscenter/leftpanedelegate.h\n    statuscenter/statuscenter.h\n    statuscenter/statuscenterleftpane.h\n    statuscenter/statuscenterquickswitch.h\n    systemsettings/about/about.h\n    systemsettings/about/acknowledgements.h\n    systemsettings/about/changehostnamepopover.h\n    systemsettings/pluginmanagement/managepluginpopover.h\n    systemsettings/pluginmanagement/pluginitemdelegate.h\n    systemsettings/pluginmanagement/pluginmanagement.h\n    systemsettings/pluginmanagement/pluginmodel.h\n    systemsettings/recovery/recovery.h\n    systemsettings/systemsettings.h\n    systemsettings/systemsettingsleftpane.h\n)\n\nadd_executable(thedesk ${SOURCES} ${HEADERS})\n\nset_target_properties(thedesk PROPERTIES\n        MACOSX_BUNDLE TRUE\n        MACOSX_BUNDLE_GUI_IDENTIFIER com.vicr123.thedesk\n        WIN32_EXECUTABLE TRUE\n        CNTP_DATA_SUBDIR thedesk)\n\ncntp_init(thedesk 20)\ncntp_translate(thedesk)\ncntp_target_name(thedesk \"thedesk\")\ncntp_defaults_file(thedesk\n    DEFAULTS_FILE thedesk.conf)\n\ntarget_link_libraries(thedesk Qt::Widgets Qt::Network Qt::DBus Qt::Multimedia Qt::QuickWidgets libcontemporary libtdesktopenvironment libthedesk)\ntarget_include_directories(thedesk PUBLIC ../libthedesk/)\n\ninstall(TARGETS thedesk\n        RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}\n        BUNDLE DESTINATION /Applications)\n\n    # TODO: Port install rules over from qmake\ninstall(DIRECTORY media\n    DESTINATION ${CMAKE_INSTALL_DATADIR}/thedesk\n)\n"
  },
  {
    "path": "desktop/acknowledgements.html",
    "content": "<p>Thanks to the following people who contributed to the development of theDesk in some way:</p>\n\n<p>\nZoomTen for testing and contributing resorces and ideas, such as window borders<br />\n<a href=\"https://github.com/ZoomTen\">GitHub</a>\n</p>\n\n<p>\nThe Pixel Polygon for the welcome cutscene<br />\n<a href=\"https://www.youtube.com/channel/UCf4MnXua8MpkX3ns7nRep6w\">YouTube</a>\n</p>\n\n<p>\nAll the people who contributed translations to theDesk<br />\n<a href=\"https://translate.vicr123.com/\">Translation Website</a>\n</p>\n\n\n<p>\nAll the people that sponsor me (or have ever done so) on GitHub Sponsors:<br />\n<ul>\n<li>techli0n</li>\n<li>Neptunium Fluoride</li>\n<li>JPlexer</li>\n<li>Tomas</li>\n<li>Alee14</li>\n<li>Kommult</li>\n</ul>\n<a href=\"https://github.com/sponsors/vicr123\">GitHub Sponsors</a>\n</p>\n"
  },
  {
    "path": "desktop/background/background.cpp",
    "content": "/****************************************\n *\n *   theShell - Desktop Environment\n *   Copyright (C) 2019 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n\n#include \"background.h\"\n#include \"ui_background.h\"\n\n#include <Background/backgroundcontroller.h>\n#include <Background/backgroundselectionmodel.h>\n#include <QFileDialog>\n#include <QMenu>\n#include <Screens/screendaemon.h>\n#include <Screens/systemscreen.h>\n#include <Wm/desktopwm.h>\n#include <X11/Xlib.h>\n\nstruct BackgroundPrivate {\n        static BackgroundController* bg;\n        static QList<Background*> backgrounds;\n\n        SystemScreen* oldScreen = nullptr;\n        QMetaObject::Connection screenGeometryChangedConnection;\n        QSettings settings;\n\n        bool retrieving = false;\n        bool retrieveAgain = false;\n        BackgroundController::BackgroundData background;\n\n        bool isChangeBackgroundVisible = false;\n        bool communityBackgroundSettingsShown = true;\n};\n\nBackgroundController* BackgroundPrivate::bg = nullptr;\nQList<Background*> BackgroundPrivate::backgrounds = QList<Background*>();\n\nBackground::Background() :\n    QDialog(nullptr),\n    ui(new Ui::Background) {\n    ui->setupUi(this);\n    d = new BackgroundPrivate();\n\n    if (!d->bg) {\n        d->bg = new BackgroundController(BackgroundController::Desktop);\n\n        connect(qApp, &QApplication::screenAdded, &Background::reconfigureBackgrounds);\n        connect(qApp, &QApplication::screenRemoved, &Background::reconfigureBackgrounds);\n        connect(ScreenDaemon::instance(), &ScreenDaemon::screensUpdated, &Background::reconfigureBackgrounds);\n    }\n\n    connect(d->bg, &BackgroundController::currentBackgroundChanged, this, [this](BackgroundController::BackgroundType type) {\n        if (type == BackgroundController::Desktop) this->changeBackground();\n        this->showCommunityBackgroundSettings(d->bg->currentBackgroundName(BackgroundController::Desktop) == \"community\" || d->bg->currentBackgroundName(BackgroundController::LockScreen) == \"community\");\n    });\n    connect(d->bg, &BackgroundController::shouldShowCommunityLabelsChanged, this, [this] {\n        if (d->bg->currentBackgroundName(BackgroundController::Desktop) == \"community\") this->changeBackground();\n    });\n    connect(d->bg, &BackgroundController::stretchTypeChanged, this, [this](BackgroundController::StretchType stretchType) {\n        switch (stretchType) {\n            case BackgroundController::StretchFit:\n                ui->stretchFitButton->setChecked(true);\n                break;\n            case BackgroundController::ZoomCrop:\n                ui->zoomCropButton->setChecked(true);\n                break;\n            case BackgroundController::Center:\n                ui->centerButton->setChecked(true);\n                break;\n            case BackgroundController::Tile:\n                ui->tileButton->setChecked(true);\n                break;\n            case BackgroundController::ZoomFit:\n                ui->zoomFitButton->setChecked(true);\n                break;\n        }\n\n        this->changeBackground();\n    });\n\n    this->showCommunityBackgroundSettings(d->bg->currentBackgroundName(BackgroundController::Desktop) == \"community\" || d->bg->currentBackgroundName(BackgroundController::LockScreen) == \"community\");\n    switch (d->bg->stretchType()) {\n        case BackgroundController::StretchFit:\n            ui->stretchFitButton->setChecked(true);\n            break;\n        case BackgroundController::ZoomCrop:\n            ui->zoomCropButton->setChecked(true);\n            break;\n        case BackgroundController::Center:\n            ui->centerButton->setChecked(true);\n            break;\n        case BackgroundController::Tile:\n            ui->tileButton->setChecked(true);\n            break;\n        case BackgroundController::ZoomFit:\n            ui->zoomFitButton->setChecked(true);\n            break;\n    }\n\n    ui->showImageInformationBox->setChecked(d->bg->shouldShowCommunityLabels());\n\n    ui->stackedWidget->setCurrentWidget(ui->backgroundPage);\n    ui->stackedWidget->setCurrentAnimation(tStackedWidget::Fade);\n    ui->backgroundPage->installEventFilter(this);\n\n    ui->backgroundSelectionWidget->setFixedHeight(0);\n    ui->backgroundList->setModel(new BackgroundSelectionModel());\n    ui->backgroundList->setItemDelegate(new BackgroundSelectionDelegate());\n    ui->backgroundList->setIconSize(QSize(213, 120));\n    ui->backgroundList->setFixedHeight(120);\n\n    this->setWindowFlags(Qt::FramelessWindowHint | Qt::WindowStaysOnBottomHint);\n    this->setAttribute(Qt::WA_ShowWithoutActivating, true);\n\n    changeBackground();\n}\n\nBackground::~Background() {\n    delete d;\n    delete ui;\n}\n\nQCoro::Task<> Background::changeBackground() {\n    if (d->retrieving) {\n        d->retrieveAgain = true;\n        co_return;\n    }\n\n    d->retrieving = true;\n    ui->stackedWidget->setCurrentWidget(ui->loadingBackgroundPage);\n\n    try {\n        auto data = co_await d->bg->getCurrentBackground(this->size());\n        // TODO: what if the backgrounds change?\n        d->background = data;\n\n        if (d->background.extendedInfoAvailable) {\n            QPainter painter(&data.px);\n\n            if (d->settings.value(\"desktop/showLabels\", true).toBool()) {\n                QLinearGradient darkener;\n                darkener.setColorAt(0, QColor::fromRgb(0, 0, 0, 0));\n                darkener.setColorAt(1, QColor::fromRgb(0, 0, 0, 200));\n\n                if (d->settings.value(\"bar/onTop\", true).toBool()) {\n                    darkener.setStart(0, 0);\n                    darkener.setFinalStop(0, data.px.height());\n                } else {\n                    darkener.setStart(0, data.px.height());\n                    darkener.setFinalStop(0, 0);\n                }\n                painter.setBrush(darkener);\n                painter.drawRect(0, 0, data.px.width(), data.px.height());\n\n                painter.setPen(Qt::white);\n                int currentX = 30;\n                int baselineY;\n\n                if (d->settings.value(\"bar/onTop\", true).toBool()) {\n                    baselineY = data.px.height() - 30;\n                } else {\n                    baselineY = 30 + QFontMetrics(QFont(this->font().family(), 20)).ascent();\n                }\n\n                if (!data.name.isEmpty()) {\n                    painter.setFont(QFont(this->font().family(), 20));\n                    int width = painter.fontMetrics().horizontalAdvance(data.name);\n                    painter.drawText(currentX, baselineY, data.name);\n\n                    currentX += width + 9;\n                }\n\n                if (!data.location.isEmpty()) {\n                    painter.setFont(QFont(this->font().family(), 10));\n                    QIcon locationIcon = QIcon::fromTheme(\"gps\");\n                    int height = painter.fontMetrics().height();\n                    int width = painter.fontMetrics().horizontalAdvance(data.location) + height;\n\n                    painter.drawPixmap(currentX, baselineY - height, locationIcon.pixmap(QSize(16, 16)));\n                    painter.drawText(currentX + height + 6, baselineY - painter.fontMetrics().descent(), data.location);\n\n                    currentX += width + 20;\n                }\n\n                if (!data.author.isEmpty()) {\n                    painter.setFont(QFont(this->font().family(), 10));\n                    QString author = tr(\"by %1\").arg(data.author);\n                    int width = painter.fontMetrics().horizontalAdvance(author);\n                    painter.drawText(data.px.width() - width - 30, baselineY, author);\n                }\n            }\n        }\n\n        QTimer::singleShot(1000, this, [this, data] {\n            d->background = data;\n            this->update();\n\n            d->retrieving = false;\n            if (d->retrieveAgain) {\n                d->retrieveAgain = false;\n                this->changeBackground();\n            } else {\n                ui->stackedWidget->setCurrentWidget(ui->backgroundPage);\n            }\n        });\n    } catch (BackgroundException ex) {\n        d->retrieving = false;\n        if (d->retrieveAgain) {\n            d->retrieveAgain = false;\n            this->changeBackground();\n        } else {\n            ui->stackedWidget->setCurrentWidget(ui->backgroundErrorPage);\n        }\n    }\n}\n\nvoid Background::toggleChangeBackground() {\n    d->isChangeBackgroundVisible = !d->isChangeBackgroundVisible;\n    tVariantAnimation* anim = new tVariantAnimation();\n    anim->setStartValue(ui->backgroundSelectionWidget->height());\n    if (d->isChangeBackgroundVisible) {\n        anim->setEndValue(ui->backgroundSelectionWidget->sizeHint().height());\n        // TODO: Hide the bar\n        //        MainWindow::instance()->forceHide();\n    } else {\n        // TODO: Show the bar\n        anim->setEndValue(0);\n        //        MainWindow::instance()->unforceHide();\n    }\n    anim->setDuration(500);\n    anim->setEasingCurve(QEasingCurve::OutCubic);\n    connect(anim, &tVariantAnimation::valueChanged, this, [this](QVariant value) {\n        ui->backgroundSelectionWidget->setFixedHeight(value.toInt());\n    });\n    connect(anim, &tVariantAnimation::finished, this, [this] {\n        if (d->isChangeBackgroundVisible) {\n            ui->backgroundSelectionWidget->setFixedHeight(QWIDGETSIZE_MAX);\n        }\n    });\n    anim->start();\n\n    DesktopWm::setShowDesktop(d->isChangeBackgroundVisible);\n}\n\nvoid Background::showCommunityBackgroundSettings(bool shown) {\n    if (shown == d->communityBackgroundSettingsShown) return;\n    d->communityBackgroundSettingsShown = shown;\n    ui->communityBackgroundSettings->setVisible(shown);\n}\n\nvoid Background::show() {\n    DesktopWm::setSystemWindow(this, DesktopWm::SystemWindowTypeDesktop);\n    QDialog::show();\n}\n\nvoid Background::on_actionChange_Background_triggered() {\n    this->toggleChangeBackground();\n}\n\nvoid Background::reject() {\n}\n\nbool Background::eventFilter(QObject* watched, QEvent* event) {\n    if (watched == ui->backgroundPage) {\n        if (event->type() == QEvent::Paint) {\n            QPainter p(ui->backgroundPage);\n            if (d->retrieving) {\n                p.setPen(Qt::transparent);\n                p.setBrush(Qt::black);\n                p.drawRect(0, 0, this->width(), this->height());\n            } else {\n                p.drawPixmap(0, -ui->backgroundSelectionWidget->height(), d->background.px);\n            }\n        } else if (event->type() == QEvent::MouseButtonPress) {\n            if (d->isChangeBackgroundVisible) toggleChangeBackground();\n        }\n    }\n    return false;\n}\n\nvoid Background::on_Background_customContextMenuRequested(const QPoint& pos) {\n    if (d->isChangeBackgroundVisible) return;\n\n    QMenu* menu = new QMenu(this);\n    menu->addSection(tr(\"For desktop\"));\n    menu->addAction(ui->actionChange_Background);\n\n    connect(menu, &QMenu::aboutToHide, menu, &QMenu::deleteLater);\n    menu->popup(this->mapToGlobal(pos));\n}\n\nvoid Background::paintEvent(QPaintEvent* event) {\n}\n\nvoid Background::resizeEvent(QResizeEvent* event) {\n    this->changeBackground();\n}\n\nvoid Background::resizeToScreen(int screen) {\n    auto s = ScreenDaemon::instance()->screens().at(screen);\n    if (s != d->oldScreen) {\n        if (s != nullptr) disconnect(d->screenGeometryChangedConnection);\n\n        connect(s, &SystemScreen::geometryChanged, this, [this, s] {\n            this->setGeometry(s->geometry());\n        });\n        this->setGeometry(s->geometry());\n        this->show();\n\n        d->oldScreen = s;\n    }\n}\n\nvoid Background::changeBackground(QString background, QList<BackgroundController::BackgroundType> types) {\n    if (background == \"custom\") {\n        // Ask the user to select a background\n        background = QFileDialog::getOpenFileName(this, tr(\"Select Background\"), \"\", \"Images (*.png *.jpg *.jpeg *.bmp *.gif)\");\n        if (background.isEmpty()) return;\n    }\n    for (auto type : types) {\n        d->bg->setBackground(background, type);\n    }\n}\n\nvoid Background::reconfigureBackgrounds() {\n    if (BackgroundPrivate::backgrounds.count() > ScreenDaemon::instance()->screens().count()) {\n        // Remove backgrounds until the correct number of backgrounds have been created\n        int difference = BackgroundPrivate::backgrounds.count() - ScreenDaemon::instance()->screens().count();\n        for (int i = 0; i < difference; i++) {\n            BackgroundPrivate::backgrounds.takeLast()->deleteLater();\n        }\n    }\n\n    if (BackgroundPrivate::backgrounds.count() < ScreenDaemon::instance()->screens().count()) {\n        // Add new backgrounds until the correct number of backgrounds have been created\n        int difference = ScreenDaemon::instance()->screens().count() - BackgroundPrivate::backgrounds.count();\n        for (int i = 0; i < difference; i++) {\n            Background* w = new Background();\n            BackgroundPrivate::backgrounds.append(w);\n        }\n    }\n\n    for (int i = 0; i < ScreenDaemon::instance()->screens().count(); i++) {\n        BackgroundPrivate::backgrounds.at(i)->resizeToScreen(i);\n    }\n}\n\nvoid Background::on_tryReloadBackgroundButton_clicked() {\n    this->changeBackground();\n}\n\nvoid Background::on_backgroundList_clicked(const QModelIndex& index) {\n    QString background = index.data(Qt::UserRole).toString();\n\n    QMenu* menu = new QMenu(this);\n    menu->addSection(tr(\"Set Background\"));\n    menu->addAction(tr(\"Set as Desktop Background\"), this, [this, background] {\n        changeBackground(background, {BackgroundController::Desktop});\n    });\n    menu->addAction(tr(\"Set as Lock Screen Background\"), this, [this, background] {\n        changeBackground(background, {BackgroundController::LockScreen});\n    });\n    menu->addSeparator();\n    menu->addAction(tr(\"Set for both\"), this, [this, background] {\n        changeBackground(background, {BackgroundController::Desktop, BackgroundController::LockScreen});\n    });\n\n    connect(menu, &QMenu::aboutToHide, menu, &QMenu::deleteLater);\n    menu->popup(QCursor::pos());\n}\n\nvoid Background::on_backButton_clicked() {\n    this->toggleChangeBackground();\n}\n\nvoid Background::on_showImageInformationBox_toggled(bool checked) {\n    d->bg->setShouldShowCommunityLabels(checked);\n}\n\nvoid Background::on_stretchFitButton_toggled(bool checked) {\n    if (checked) {\n        d->bg->setStretchType(BackgroundController::StretchFit);\n    }\n}\n\nvoid Background::on_zoomCropButton_toggled(bool checked) {\n    if (checked) {\n        d->bg->setStretchType(BackgroundController::ZoomCrop);\n    }\n}\n\nvoid Background::on_centerButton_toggled(bool checked) {\n    if (checked) {\n        d->bg->setStretchType(BackgroundController::Center);\n    }\n}\n\nvoid Background::on_tileButton_toggled(bool checked) {\n    if (checked) {\n        d->bg->setStretchType(BackgroundController::Tile);\n    }\n}\n\nvoid Background::on_zoomFitButton_toggled(bool checked) {\n    if (checked) {\n        d->bg->setStretchType(BackgroundController::ZoomFit);\n    }\n}\n\nvoid Background::on_actionEndSession_triggered() {\n}\n"
  },
  {
    "path": "desktop/background/background.h",
    "content": "/****************************************\n *\n *   theShell - Desktop Environment\n *   Copyright (C) 2019 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n\n#ifndef BACKGROUND_H\n#define BACKGROUND_H\n\n#include <Background/backgroundcontroller.h>\n#include <QCoroTask>\n#include <QDialog>\n\nclass ChooseBackground;\n\nnamespace Ui {\n    class Background;\n}\n\nstruct BackgroundPrivate;\nclass Background : public QDialog {\n        Q_OBJECT\n\n    public:\n        explicit Background();\n        ~Background();\n\n        void show();\n\n        static void reconfigureBackgrounds();\n\n    public slots:\n        QCoro::Task<> changeBackground();\n\n        void toggleChangeBackground();\n\n        void showCommunityBackgroundSettings(bool shown);\n\n    signals:\n        void setAllBackgrounds(QString background);\n\n        void reloadBackground();\n\n    private slots:\n        void on_actionChange_Background_triggered();\n\n        void on_Background_customContextMenuRequested(const QPoint& pos);\n\n        void on_tryReloadBackgroundButton_clicked();\n\n        void on_backgroundList_clicked(const QModelIndex& index);\n\n        void on_backButton_clicked();\n\n        void on_showImageInformationBox_toggled(bool checked);\n\n        void on_stretchFitButton_toggled(bool checked);\n\n        void on_zoomCropButton_toggled(bool checked);\n\n        void on_centerButton_toggled(bool checked);\n\n        void on_tileButton_toggled(bool checked);\n\n        void on_zoomFitButton_toggled(bool checked);\n\n        void on_actionEndSession_triggered();\n\n    private:\n        Ui::Background* ui;\n        BackgroundPrivate* d;\n\n        void reject();\n\n        bool eventFilter(QObject* watched, QEvent* event);\n        void paintEvent(QPaintEvent* event);\n        void resizeEvent(QResizeEvent* event);\n\n        void resizeToScreen(int screen);\n\n        void changeBackground(QString background, QList<BackgroundController::BackgroundType> types);\n};\n\n#endif // BACKGROUND_H\n"
  },
  {
    "path": "desktop/background/background.ui",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ui version=\"4.0\">\n <class>Background</class>\n <widget class=\"QDialog\" name=\"Background\">\n  <property name=\"geometry\">\n   <rect>\n    <x>0</x>\n    <y>0</y>\n    <width>751</width>\n    <height>517</height>\n   </rect>\n  </property>\n  <property name=\"contextMenuPolicy\">\n   <enum>Qt::CustomContextMenu</enum>\n  </property>\n  <property name=\"windowTitle\">\n   <string notr=\"true\">theShell Background</string>\n  </property>\n  <property name=\"windowIcon\">\n   <iconset>\n    <normaloff>:/icons/icon.svg</normaloff>:/icons/icon.svg</iconset>\n  </property>\n  <layout class=\"QVBoxLayout\" name=\"verticalLayout\">\n   <property name=\"spacing\">\n    <number>0</number>\n   </property>\n   <property name=\"leftMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"topMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"rightMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"bottomMargin\">\n    <number>0</number>\n   </property>\n   <item>\n    <widget class=\"tStackedWidget\" name=\"stackedWidget\">\n     <property name=\"sizePolicy\">\n      <sizepolicy hsizetype=\"Preferred\" vsizetype=\"Expanding\">\n       <horstretch>0</horstretch>\n       <verstretch>0</verstretch>\n      </sizepolicy>\n     </property>\n     <property name=\"palette\">\n      <palette>\n       <active>\n        <colorrole role=\"WindowText\">\n         <brush brushstyle=\"SolidPattern\">\n          <color alpha=\"255\">\n           <red>255</red>\n           <green>255</green>\n           <blue>255</blue>\n          </color>\n         </brush>\n        </colorrole>\n        <colorrole role=\"Base\">\n         <brush brushstyle=\"SolidPattern\">\n          <color alpha=\"255\">\n           <red>0</red>\n           <green>0</green>\n           <blue>0</blue>\n          </color>\n         </brush>\n        </colorrole>\n        <colorrole role=\"Window\">\n         <brush brushstyle=\"SolidPattern\">\n          <color alpha=\"255\">\n           <red>0</red>\n           <green>0</green>\n           <blue>0</blue>\n          </color>\n         </brush>\n        </colorrole>\n       </active>\n       <inactive>\n        <colorrole role=\"WindowText\">\n         <brush brushstyle=\"SolidPattern\">\n          <color alpha=\"255\">\n           <red>255</red>\n           <green>255</green>\n           <blue>255</blue>\n          </color>\n         </brush>\n        </colorrole>\n        <colorrole role=\"Base\">\n         <brush brushstyle=\"SolidPattern\">\n          <color alpha=\"255\">\n           <red>0</red>\n           <green>0</green>\n           <blue>0</blue>\n          </color>\n         </brush>\n        </colorrole>\n        <colorrole role=\"Window\">\n         <brush brushstyle=\"SolidPattern\">\n          <color alpha=\"255\">\n           <red>0</red>\n           <green>0</green>\n           <blue>0</blue>\n          </color>\n         </brush>\n        </colorrole>\n       </inactive>\n       <disabled>\n        <colorrole role=\"WindowText\">\n         <brush brushstyle=\"SolidPattern\">\n          <color alpha=\"127\">\n           <red>255</red>\n           <green>255</green>\n           <blue>255</blue>\n          </color>\n         </brush>\n        </colorrole>\n        <colorrole role=\"Base\">\n         <brush brushstyle=\"SolidPattern\">\n          <color alpha=\"255\">\n           <red>0</red>\n           <green>0</green>\n           <blue>0</blue>\n          </color>\n         </brush>\n        </colorrole>\n        <colorrole role=\"Window\">\n         <brush brushstyle=\"SolidPattern\">\n          <color alpha=\"255\">\n           <red>0</red>\n           <green>0</green>\n           <blue>0</blue>\n          </color>\n         </brush>\n        </colorrole>\n       </disabled>\n      </palette>\n     </property>\n     <property name=\"autoFillBackground\">\n      <bool>true</bool>\n     </property>\n     <widget class=\"QWidget\" name=\"backgroundPage\"/>\n     <widget class=\"QWidget\" name=\"backgroundErrorPage\">\n      <layout class=\"QGridLayout\" name=\"gridLayout_2\">\n       <item row=\"0\" column=\"1\">\n        <spacer name=\"verticalSpacer_4\">\n         <property name=\"orientation\">\n          <enum>Qt::Vertical</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>20</width>\n           <height>37</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n       <item row=\"1\" column=\"0\">\n        <spacer name=\"horizontalSpacer_3\">\n         <property name=\"orientation\">\n          <enum>Qt::Horizontal</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>114</width>\n           <height>20</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n       <item row=\"1\" column=\"1\">\n        <widget class=\"QWidget\" name=\"widget_2\" native=\"true\">\n         <layout class=\"QVBoxLayout\" name=\"verticalLayout_3\">\n          <item>\n           <widget class=\"QLabel\" name=\"label_3\">\n            <property name=\"text\">\n             <string>Sorry, there was a problem displaying the background.</string>\n            </property>\n           </widget>\n          </item>\n          <item>\n           <layout class=\"QHBoxLayout\" name=\"horizontalLayout\">\n            <item>\n             <spacer name=\"horizontalSpacer_5\">\n              <property name=\"orientation\">\n               <enum>Qt::Horizontal</enum>\n              </property>\n              <property name=\"sizeHint\" stdset=\"0\">\n               <size>\n                <width>40</width>\n                <height>20</height>\n               </size>\n              </property>\n             </spacer>\n            </item>\n            <item>\n             <widget class=\"QPushButton\" name=\"tryReloadBackgroundButton\">\n              <property name=\"text\">\n               <string>Try Again</string>\n              </property>\n             </widget>\n            </item>\n            <item>\n             <spacer name=\"horizontalSpacer_6\">\n              <property name=\"orientation\">\n               <enum>Qt::Horizontal</enum>\n              </property>\n              <property name=\"sizeHint\" stdset=\"0\">\n               <size>\n                <width>40</width>\n                <height>20</height>\n               </size>\n              </property>\n             </spacer>\n            </item>\n           </layout>\n          </item>\n         </layout>\n        </widget>\n       </item>\n       <item row=\"1\" column=\"2\">\n        <spacer name=\"horizontalSpacer_4\">\n         <property name=\"orientation\">\n          <enum>Qt::Horizontal</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>113</width>\n           <height>20</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n       <item row=\"2\" column=\"1\">\n        <spacer name=\"verticalSpacer_3\">\n         <property name=\"orientation\">\n          <enum>Qt::Vertical</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>20</width>\n           <height>38</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n      </layout>\n     </widget>\n     <widget class=\"QWidget\" name=\"loadingBackgroundPage\">\n      <layout class=\"QGridLayout\" name=\"gridLayout\">\n       <item row=\"0\" column=\"1\">\n        <spacer name=\"verticalSpacer\">\n         <property name=\"orientation\">\n          <enum>Qt::Vertical</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>20</width>\n           <height>58</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n       <item row=\"1\" column=\"0\">\n        <spacer name=\"horizontalSpacer\">\n         <property name=\"orientation\">\n          <enum>Qt::Horizontal</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>275</width>\n           <height>20</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n       <item row=\"1\" column=\"1\">\n        <widget class=\"tCircularSpinner\" name=\"widget\" native=\"true\"/>\n       </item>\n       <item row=\"1\" column=\"2\">\n        <spacer name=\"horizontalSpacer_2\">\n         <property name=\"orientation\">\n          <enum>Qt::Horizontal</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>274</width>\n           <height>20</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n       <item row=\"2\" column=\"1\">\n        <spacer name=\"verticalSpacer_2\">\n         <property name=\"orientation\">\n          <enum>Qt::Vertical</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>20</width>\n           <height>57</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n      </layout>\n     </widget>\n    </widget>\n   </item>\n   <item>\n    <widget class=\"QWidget\" name=\"backgroundSelectionWidget\" native=\"true\">\n     <layout class=\"QVBoxLayout\" name=\"verticalLayout_2\">\n      <property name=\"spacing\">\n       <number>0</number>\n      </property>\n      <property name=\"leftMargin\">\n       <number>0</number>\n      </property>\n      <property name=\"topMargin\">\n       <number>0</number>\n      </property>\n      <property name=\"rightMargin\">\n       <number>0</number>\n      </property>\n      <property name=\"bottomMargin\">\n       <number>0</number>\n      </property>\n      <item>\n       <widget class=\"Line\" name=\"line\">\n        <property name=\"maximumSize\">\n         <size>\n          <width>16777215</width>\n          <height>1</height>\n         </size>\n        </property>\n        <property name=\"orientation\">\n         <enum>Qt::Horizontal</enum>\n        </property>\n       </widget>\n      </item>\n      <item>\n       <layout class=\"QHBoxLayout\" name=\"horizontalLayout_2\">\n        <property name=\"spacing\">\n         <number>0</number>\n        </property>\n        <item>\n         <widget class=\"QPushButton\" name=\"backButton\">\n          <property name=\"sizePolicy\">\n           <sizepolicy hsizetype=\"Preferred\" vsizetype=\"Preferred\">\n            <horstretch>0</horstretch>\n            <verstretch>0</verstretch>\n           </sizepolicy>\n          </property>\n          <property name=\"text\">\n           <string/>\n          </property>\n          <property name=\"icon\">\n           <iconset theme=\"go-previous\">\n            <normaloff>../statuscenter/PulseaudioPane</normaloff>../statuscenter/PulseaudioPane</iconset>\n          </property>\n          <property name=\"flat\">\n           <bool>true</bool>\n          </property>\n         </widget>\n        </item>\n        <item>\n         <widget class=\"QLabel\" name=\"label\">\n          <property name=\"sizePolicy\">\n           <sizepolicy hsizetype=\"Expanding\" vsizetype=\"Preferred\">\n            <horstretch>0</horstretch>\n            <verstretch>0</verstretch>\n           </sizepolicy>\n          </property>\n          <property name=\"font\">\n           <font>\n            <pointsize>15</pointsize>\n           </font>\n          </property>\n          <property name=\"text\">\n           <string>Background</string>\n          </property>\n          <property name=\"margin\">\n           <number>9</number>\n          </property>\n         </widget>\n        </item>\n       </layout>\n      </item>\n      <item>\n       <widget class=\"Line\" name=\"line_2\">\n        <property name=\"maximumSize\">\n         <size>\n          <width>16777215</width>\n          <height>1</height>\n         </size>\n        </property>\n        <property name=\"orientation\">\n         <enum>Qt::Horizontal</enum>\n        </property>\n       </widget>\n      </item>\n      <item>\n       <layout class=\"QVBoxLayout\" name=\"verticalLayout_5\">\n        <property name=\"spacing\">\n         <number>6</number>\n        </property>\n        <property name=\"leftMargin\">\n         <number>9</number>\n        </property>\n        <property name=\"topMargin\">\n         <number>9</number>\n        </property>\n        <property name=\"rightMargin\">\n         <number>9</number>\n        </property>\n        <property name=\"bottomMargin\">\n         <number>9</number>\n        </property>\n        <item>\n         <widget class=\"QLabel\" name=\"label_6\">\n          <property name=\"font\">\n           <font>\n            <weight>75</weight>\n            <bold>true</bold>\n           </font>\n          </property>\n          <property name=\"text\">\n           <string>IMAGE</string>\n          </property>\n         </widget>\n        </item>\n        <item>\n         <widget class=\"QLabel\" name=\"label_2\">\n          <property name=\"text\">\n           <string>Select an image to display on your background and lock screen</string>\n          </property>\n         </widget>\n        </item>\n       </layout>\n      </item>\n      <item>\n       <widget class=\"QListView\" name=\"backgroundList\">\n        <property name=\"sizePolicy\">\n         <sizepolicy hsizetype=\"Expanding\" vsizetype=\"Preferred\">\n          <horstretch>0</horstretch>\n          <verstretch>0</verstretch>\n         </sizepolicy>\n        </property>\n        <property name=\"frameShape\">\n         <enum>QFrame::NoFrame</enum>\n        </property>\n        <property name=\"movement\">\n         <enum>QListView::Static</enum>\n        </property>\n        <property name=\"isWrapping\" stdset=\"0\">\n         <bool>false</bool>\n        </property>\n        <property name=\"resizeMode\">\n         <enum>QListView::Adjust</enum>\n        </property>\n        <property name=\"viewMode\">\n         <enum>QListView::IconMode</enum>\n        </property>\n       </widget>\n      </item>\n      <item>\n       <widget class=\"QWidget\" name=\"communityBackgroundSettings\" native=\"true\">\n        <layout class=\"QVBoxLayout\" name=\"verticalLayout_4\">\n         <property name=\"spacing\">\n          <number>0</number>\n         </property>\n         <property name=\"leftMargin\">\n          <number>0</number>\n         </property>\n         <property name=\"topMargin\">\n          <number>0</number>\n         </property>\n         <property name=\"rightMargin\">\n          <number>0</number>\n         </property>\n         <property name=\"bottomMargin\">\n          <number>0</number>\n         </property>\n         <item>\n          <widget class=\"Line\" name=\"line_3\">\n           <property name=\"maximumSize\">\n            <size>\n             <width>16777215</width>\n             <height>1</height>\n            </size>\n           </property>\n           <property name=\"orientation\">\n            <enum>Qt::Horizontal</enum>\n           </property>\n          </widget>\n         </item>\n         <item>\n          <layout class=\"QVBoxLayout\" name=\"verticalLayout_7\">\n           <property name=\"spacing\">\n            <number>6</number>\n           </property>\n           <property name=\"leftMargin\">\n            <number>9</number>\n           </property>\n           <property name=\"topMargin\">\n            <number>9</number>\n           </property>\n           <property name=\"rightMargin\">\n            <number>9</number>\n           </property>\n           <property name=\"bottomMargin\">\n            <number>9</number>\n           </property>\n           <item>\n            <widget class=\"QLabel\" name=\"label_4\">\n             <property name=\"font\">\n              <font>\n               <weight>75</weight>\n               <bold>true</bold>\n              </font>\n             </property>\n             <property name=\"text\">\n              <string>COMMUNITY BACKGROUNDS</string>\n             </property>\n            </widget>\n           </item>\n           <item>\n            <widget class=\"QLabel\" name=\"label_5\">\n             <property name=\"text\">\n              <string>Images from the theDesk community will be cycled through every so often.</string>\n             </property>\n            </widget>\n           </item>\n           <item>\n            <widget class=\"QCheckBox\" name=\"showImageInformationBox\">\n             <property name=\"text\">\n              <string>Show image information</string>\n             </property>\n            </widget>\n           </item>\n          </layout>\n         </item>\n        </layout>\n       </widget>\n      </item>\n      <item>\n       <widget class=\"Line\" name=\"line_4\">\n        <property name=\"maximumSize\">\n         <size>\n          <width>16777215</width>\n          <height>1</height>\n         </size>\n        </property>\n        <property name=\"orientation\">\n         <enum>Qt::Horizontal</enum>\n        </property>\n       </widget>\n      </item>\n      <item>\n       <layout class=\"QVBoxLayout\" name=\"verticalLayout_6\">\n        <property name=\"spacing\">\n         <number>6</number>\n        </property>\n        <property name=\"leftMargin\">\n         <number>9</number>\n        </property>\n        <property name=\"topMargin\">\n         <number>9</number>\n        </property>\n        <property name=\"rightMargin\">\n         <number>9</number>\n        </property>\n        <property name=\"bottomMargin\">\n         <number>9</number>\n        </property>\n        <item>\n         <widget class=\"QLabel\" name=\"label_7\">\n          <property name=\"font\">\n           <font>\n            <weight>75</weight>\n            <bold>true</bold>\n           </font>\n          </property>\n          <property name=\"text\">\n           <string>STRETCH</string>\n          </property>\n         </widget>\n        </item>\n        <item>\n         <widget class=\"QLabel\" name=\"label_8\">\n          <property name=\"text\">\n           <string>Select how you'd like the background image to be sized</string>\n          </property>\n         </widget>\n        </item>\n        <item>\n         <layout class=\"QHBoxLayout\" name=\"horizontalLayout_3\">\n          <property name=\"spacing\">\n           <number>0</number>\n          </property>\n          <item>\n           <widget class=\"QToolButton\" name=\"stretchFitButton\">\n            <property name=\"text\">\n             <string>Stretch To Fit</string>\n            </property>\n            <property name=\"icon\">\n             <iconset theme=\"image-stretch-fit\">\n              <normaloff>.</normaloff>.</iconset>\n            </property>\n            <property name=\"iconSize\">\n             <size>\n              <width>64</width>\n              <height>64</height>\n             </size>\n            </property>\n            <property name=\"checkable\">\n             <bool>true</bool>\n            </property>\n            <property name=\"autoExclusive\">\n             <bool>true</bool>\n            </property>\n            <property name=\"toolButtonStyle\">\n             <enum>Qt::ToolButtonTextUnderIcon</enum>\n            </property>\n           </widget>\n          </item>\n          <item>\n           <widget class=\"QToolButton\" name=\"zoomCropButton\">\n            <property name=\"text\">\n             <string>Zoom and Crop</string>\n            </property>\n            <property name=\"icon\">\n             <iconset theme=\"image-stretch-zoom-crop\">\n              <normaloff>.</normaloff>.</iconset>\n            </property>\n            <property name=\"iconSize\">\n             <size>\n              <width>64</width>\n              <height>64</height>\n             </size>\n            </property>\n            <property name=\"checkable\">\n             <bool>true</bool>\n            </property>\n            <property name=\"autoExclusive\">\n             <bool>true</bool>\n            </property>\n            <property name=\"toolButtonStyle\">\n             <enum>Qt::ToolButtonTextUnderIcon</enum>\n            </property>\n           </widget>\n          </item>\n          <item>\n           <widget class=\"QToolButton\" name=\"centerButton\">\n            <property name=\"text\">\n             <string>Center</string>\n            </property>\n            <property name=\"icon\">\n             <iconset theme=\"image-stretch-center\">\n              <normaloff>.</normaloff>.</iconset>\n            </property>\n            <property name=\"iconSize\">\n             <size>\n              <width>64</width>\n              <height>64</height>\n             </size>\n            </property>\n            <property name=\"checkable\">\n             <bool>true</bool>\n            </property>\n            <property name=\"autoExclusive\">\n             <bool>true</bool>\n            </property>\n            <property name=\"toolButtonStyle\">\n             <enum>Qt::ToolButtonTextUnderIcon</enum>\n            </property>\n           </widget>\n          </item>\n          <item>\n           <widget class=\"QToolButton\" name=\"tileButton\">\n            <property name=\"text\">\n             <string>Tile</string>\n            </property>\n            <property name=\"icon\">\n             <iconset theme=\"image-stretch-tile\">\n              <normaloff>.</normaloff>.</iconset>\n            </property>\n            <property name=\"iconSize\">\n             <size>\n              <width>64</width>\n              <height>64</height>\n             </size>\n            </property>\n            <property name=\"checkable\">\n             <bool>true</bool>\n            </property>\n            <property name=\"autoExclusive\">\n             <bool>true</bool>\n            </property>\n            <property name=\"toolButtonStyle\">\n             <enum>Qt::ToolButtonTextUnderIcon</enum>\n            </property>\n           </widget>\n          </item>\n          <item>\n           <widget class=\"QToolButton\" name=\"zoomFitButton\">\n            <property name=\"text\">\n             <string>Zoom To Fit</string>\n            </property>\n            <property name=\"icon\">\n             <iconset theme=\"image-stretch-zoom-fit\">\n              <normaloff>.</normaloff>.</iconset>\n            </property>\n            <property name=\"iconSize\">\n             <size>\n              <width>64</width>\n              <height>64</height>\n             </size>\n            </property>\n            <property name=\"checkable\">\n             <bool>true</bool>\n            </property>\n            <property name=\"autoExclusive\">\n             <bool>true</bool>\n            </property>\n            <property name=\"toolButtonStyle\">\n             <enum>Qt::ToolButtonTextUnderIcon</enum>\n            </property>\n           </widget>\n          </item>\n          <item>\n           <spacer name=\"horizontalSpacer_7\">\n            <property name=\"orientation\">\n             <enum>Qt::Horizontal</enum>\n            </property>\n            <property name=\"sizeHint\" stdset=\"0\">\n             <size>\n              <width>40</width>\n              <height>20</height>\n             </size>\n            </property>\n           </spacer>\n          </item>\n         </layout>\n        </item>\n       </layout>\n      </item>\n     </layout>\n    </widget>\n   </item>\n  </layout>\n  <action name=\"actionChange_Background\">\n   <property name=\"icon\">\n    <iconset theme=\"image\">\n     <normaloff>.</normaloff>.</iconset>\n   </property>\n   <property name=\"text\">\n    <string>Change Background</string>\n   </property>\n  </action>\n  <action name=\"actionEndSession\">\n   <property name=\"icon\">\n    <iconset theme=\"system-shutdown\"/>\n   </property>\n   <property name=\"text\">\n    <string>End Session</string>\n   </property>\n  </action>\n </widget>\n <customwidgets>\n  <customwidget>\n   <class>tCircularSpinner</class>\n   <extends>QWidget</extends>\n   <header location=\"global\">tcircularspinner.h</header>\n   <container>1</container>\n  </customwidget>\n  <customwidget>\n   <class>tStackedWidget</class>\n   <extends>QStackedWidget</extends>\n   <header location=\"global\">tstackedwidget.h</header>\n   <container>1</container>\n  </customwidget>\n </customwidgets>\n <resources/>\n <connections/>\n</ui>\n"
  },
  {
    "path": "desktop/bar/barwindow.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"barwindow.h\"\n#include \"ui_barwindow.h\"\n\n#include <QGraphicsOpacityEffect>\n#include <QMouseEvent>\n#include <QPainter>\n#include <QScreen>\n#include <QTimer>\n#include <Wm/desktopwm.h>\n\n#include \"mainbarwidget.h\"\n#include \"statuscenter/statuscenter.h\"\n#include <tvariantanimation.h>\n\n#include <tsettings.h>\n\n#include <barmanager.h>\n#include <statemanager.h>\n#include <statuscentermanager.h>\n\n#include <Gestures/gesturedaemon.h>\n#include <QWindow>\n#include <Screens/screendaemon.h>\n#include <Screens/systemscreen.h>\n#include <tpopover.h>\n\n#include \"gateway/gateway.h\"\n\n#include <keygrab.h>\n\nstruct BarWindowPrivate {\n        MainBarWidget* mainBarWidget;\n        StatusCenter* statusCenterWidget;\n\n        tVariantAnimation* heightAnim;\n        tVariantAnimation* barStatusCenterTransitionAnim;\n\n        QGraphicsOpacityEffect* mainBarOpacity;\n        QGraphicsOpacityEffect* statusCenterOpacity;\n\n        SystemScreen* oldPrimaryScreen = nullptr;\n\n        QList<DesktopWmWindowPtr> maximisedWindows;\n\n        bool barExpanding = true;\n        bool statusCenterShown = false;\n        bool barPendingShow = false;\n\n        GestureInteractionPtr lastGesture;\n\n        tSettings settings;\n};\n\nBarWindow::BarWindow(QWidget* parent) :\n    QWidget(parent),\n    ui(new Ui::BarWindow) {\n    ui->setupUi(this);\n    d = new BarWindowPrivate();\n\n    this->setAttribute(Qt::WA_TranslucentBackground);\n    this->setMouseTracking(true);\n\n    d->mainBarWidget = new MainBarWidget(this);\n    connect(d->mainBarWidget, &MainBarWidget::expandedHeightChanged, this, &BarWindow::barHeightChanged);\n    connect(d->mainBarWidget, &MainBarWidget::statusBarHeightChanged, this, &BarWindow::barHeightChanged);\n\n    d->statusCenterWidget = new StatusCenter(this);\n\n    d->mainBarOpacity = new QGraphicsOpacityEffect(d->mainBarWidget);\n    d->mainBarOpacity->setEnabled(false);\n    d->mainBarWidget->setGraphicsEffect(d->mainBarOpacity);\n\n    d->statusCenterOpacity = new QGraphicsOpacityEffect(d->statusCenterWidget);\n    d->statusCenterOpacity->setEnabled(false);\n    d->statusCenterWidget->setGraphicsEffect(d->statusCenterOpacity);\n    d->statusCenterWidget->setVisible(false);\n\n    d->heightAnim = new tVariantAnimation(this);\n    d->heightAnim->setDuration(500);\n    connect(d->heightAnim, &tVariantAnimation::valueChanged, this, [=](QVariant value) {\n        this->setFixedHeight(value.toInt() + 1);\n    });\n\n    connect(GestureDaemon::instance(), &GestureDaemon::gestureBegin, this, [=](GestureInteractionPtr gesture) {\n        if (gesture->isValidInteraction(GestureTypes::Swipe, GestureTypes::Down, 3)) {\n            if (d->barExpanding) {\n                trackStatusCenterPullDownGesture(gesture);\n            } else {\n                trackBarPullDownGesture(gesture);\n            }\n        } else if (gesture->isValidInteraction(GestureTypes::Swipe, GestureTypes::Up, 3)) {\n            if (d->statusCenterShown) {\n                trackStatusCenterPullUpGesture(gesture);\n            }\n        }\n    });\n\n    d->barStatusCenterTransitionAnim = new tVariantAnimation();\n    d->barStatusCenterTransitionAnim->setStartValue(0.0);\n    d->barStatusCenterTransitionAnim->setEndValue(1.0);\n    d->barStatusCenterTransitionAnim->setDuration(250);\n    d->barStatusCenterTransitionAnim->setEasingCurve(QEasingCurve::InOutCubic);\n    connect(d->barStatusCenterTransitionAnim, &tVariantAnimation::valueChanged, this, [=](QVariant value) {\n        double percentage = value.toDouble();\n        if (qFuzzyIsNull(percentage)) { // Fully show bar view\n            d->statusCenterWidget->setVisible(false);\n            d->mainBarWidget->setVisible(true);\n            d->statusCenterOpacity->setEnabled(false);\n            d->mainBarOpacity->setEnabled(false);\n            this->setFixedHeight(d->mainBarWidget->expandedHeight());\n            ui->line->setVisible(true);\n        } else if (qFuzzyCompare(percentage, 1)) { // Fully show Status Center view\n            d->statusCenterWidget->setVisible(true);\n            d->mainBarWidget->setVisible(false);\n            d->statusCenterOpacity->setEnabled(false);\n            d->mainBarOpacity->setEnabled(false);\n            this->setFixedHeight(d->statusCenterWidget->height());\n            ui->line->setVisible(false);\n        } else {\n            if (percentage < 0.5) { // Animate the bar\n                d->mainBarOpacity->setOpacity(1 - (percentage * 2));\n                d->mainBarOpacity->setEnabled(true);\n                d->mainBarWidget->setVisible(true);\n                d->statusCenterWidget->setVisible(false);\n                d->statusCenterOpacity->setEnabled(false);\n            } else { // Animate the Status Center\n                d->statusCenterOpacity->setOpacity(percentage * 2 - 1);\n                d->statusCenterOpacity->setEnabled(true);\n                d->statusCenterWidget->setVisible(true);\n                d->mainBarWidget->setVisible(false);\n                d->mainBarOpacity->setEnabled(false);\n            }\n            this->setFixedHeight((d->statusCenterWidget->height() - d->mainBarWidget->expandedHeight()) * percentage + d->mainBarWidget->expandedHeight());\n            ui->line->setVisible(true);\n        }\n    });\n\n    // Tell the window manager that this is a \"taskbar\" type window\n    this->setWindowFlag(Qt::FramelessWindowHint);\n    DesktopWm::instance()->setSystemWindow(this, DesktopWm::SystemWindowTypeTaskbar);\n    DesktopWm::instance()->blurWindow(this);\n    this->barHeightChanged();\n\n    connect(qApp, &QApplication::primaryScreenChanged, this, &BarWindow::updatePrimaryScreen);\n    updatePrimaryScreen();\n\n    connect(StateManager::statusCenterManager(), &StatusCenterManager::showStatusCenter, this, &BarWindow::showStatusCenter);\n    connect(StateManager::statusCenterManager(), &StatusCenterManager::hideStatusCenter, this, &BarWindow::hideStatusCenter);\n    connect(StateManager::barManager(), &BarManager::barLockedChanged, this, [=](bool isBarLocked) {\n        if (!isBarLocked) {\n            //            showBar();\n            //        } else {\n            if (!this->geometry().contains(QCursor::pos())) hideBar();\n        }\n    });\n\n    connect(&d->settings, &tSettings::settingChanged, this, [=](QString key, QVariant value) {\n        if (key == \"Appearance/translucent\") {\n            this->update();\n        }\n    });\n    connect(DesktopWm::instance(), &DesktopWm::windowAdded, this, &BarWindow::trackWindow);\n    connect(DesktopWm::instance(), &DesktopWm::windowRemoved, this, [=](DesktopWmWindowPtr window) {\n        if (d->maximisedWindows.contains(window)) {\n            d->maximisedWindows.removeAll(window);\n            this->update();\n        }\n    });\n    for (const DesktopWmWindowPtr& window : DesktopWm::openWindows()) {\n        trackWindow(window);\n    }\n\n    KeyGrab* statusCenterGrab = new KeyGrab(QKeySequence(Qt::MetaModifier | Qt::Key_Tab));\n    connect(statusCenterGrab, &KeyGrab::activated, this, [=] {\n        StateManager::statusCenterManager()->show();\n    });\n\n    ui->line->raise();\n\n    // Initialise the Gateway\n    Gateway::instance();\n}\n\nBarWindow::~BarWindow() {\n    delete ui;\n    delete d;\n}\n\nvoid BarWindow::setFixedHeight(int height) {\n    QWidget::setFixedHeight(height);\n\n    // Work around a Qt bug that causes the native window not to be updated on Wayland for some reason\n    this->windowHandle()->setGeometry(this->geometry());\n}\n\nvoid BarWindow::setFixedWidth(int width) {\n    QWidget::setFixedWidth(width);\n\n    // Work around a Qt bug that causes the native window not to be updated on Wayland for some reason\n    this->windowHandle()->setGeometry(this->geometry());\n}\n\nvoid BarWindow::resizeEvent(QResizeEvent* event) {\n    ui->line->setGeometry(0, this->height() - 1, this->width(), this->height());\n    d->mainBarWidget->setFixedWidth(this->width());\n    d->mainBarWidget->barHeightChanged(this->height() - 1);\n    d->statusCenterWidget->setFixedWidth(this->width());\n\n    StateManager::barManager()->setBarHeight(this->height());\n}\n\nvoid BarWindow::enterEvent(QEnterEvent* event) {\n    if (d->lastGesture && d->lastGesture->isActive()) return;\n    d->barPendingShow = true;\n    if ((this->layoutDirection() == Qt::RightToLeft && mapFromGlobal(QCursor::pos()).x() > d->mainBarWidget->currentAppWidgetX()) ||\n        (this->layoutDirection() == Qt::LeftToRight && mapFromGlobal(QCursor::pos()).x() < d->mainBarWidget->currentAppWidgetX())) showBar();\n}\n\nvoid BarWindow::leaveEvent(QEvent* event) {\n    if (d->lastGesture && d->lastGesture->isActive()) return;\n    hideBar();\n}\n\nvoid BarWindow::paintEvent(QPaintEvent* event) {\n    QColor bgCol = this->palette().color(QPalette::Window);\n    if (d->settings.value(\"Appearance/translucent\").toBool() && d->maximisedWindows.count() == 0) bgCol.setAlpha(150);\n\n    QPainter painter(this);\n    painter.setPen(Qt::transparent);\n    painter.setBrush(bgCol);\n    painter.drawRect(0, 0, this->width(), this->height());\n}\n\nvoid BarWindow::trackWindow(DesktopWmWindowPtr window) {\n    window->disconnect(this);\n    DesktopWm::instance()->disconnect(window);\n    connect(window, &DesktopWmWindow::geometryChanged, this, [=] {\n        trackWindow(window);\n    });\n    connect(window, &DesktopWmWindow::windowStateChanged, this, [=] {\n        trackWindow(window);\n    });\n    connect(DesktopWm::instance(), &DesktopWm::currentDesktopChanged, window, [=] {\n        trackWindow(window);\n    });\n\n    QRect screenGeometry = QApplication::primaryScreen()->geometry();\n    if (window->isMaximised() && !window->isMinimized() && screenGeometry.contains(window->geometry()) && window->isOnCurrentDesktop()) {\n        if (d->maximisedWindows.contains(window)) return;\n        d->maximisedWindows.append(window);\n        this->update();\n    } else if (!window->isMaximised() || window->isMinimized() || !window->isOnCurrentDesktop()) {\n        if (!d->maximisedWindows.contains(window)) return;\n        d->maximisedWindows.removeAll(window);\n        this->update();\n    }\n}\n\nvoid BarWindow::updatePrimaryScreen() {\n    if (d->oldPrimaryScreen) {\n        disconnect(d->oldPrimaryScreen, &SystemScreen::geometryChanged, this, &BarWindow::updatePrimaryScreen);\n        disconnect(d->oldPrimaryScreen, &SystemScreen::rotationChanged, this, &BarWindow::updatePrimaryScreen);\n    }\n\n    auto* primaryScreen = ScreenDaemon::instance()->primayScreen();\n    connect(primaryScreen, &SystemScreen::geometryChanged, this, &BarWindow::updatePrimaryScreen);\n    connect(primaryScreen, &SystemScreen::rotationChanged, this, &BarWindow::updatePrimaryScreen);\n    d->oldPrimaryScreen = primaryScreen;\n\n    if (primaryScreen) {\n        // Qt adjusts the size of the window for us, so we'll need to adjust for that\n        auto primaryGeometry = primaryScreen->geometry();\n        primaryGeometry.setSize(primaryGeometry.size() / primaryScreen->qtScreen()->devicePixelRatio());\n\n        this->setFixedWidth(primaryGeometry.width());\n        this->move(primaryGeometry.topLeft());\n        d->statusCenterWidget->setFixedHeight(primaryGeometry.height());\n    }\n\n    // Refresh the state of all the windows\n    for (const DesktopWmWindowPtr& window : DesktopWm::openWindows()) {\n        trackWindow(window);\n    }\n\n    barHeightChanged();\n}\n\nvoid BarWindow::barHeightChanged() {\n    DesktopWm::setScreenMarginForWindow(this, qApp->primaryScreen(), Qt::TopEdge, d->mainBarWidget->statusBarHeight() * (ScreenDaemon::instance()->primayScreen() ? ScreenDaemon::instance()->primayScreen()->qtScreen()->devicePixelRatio() : 1));\n    d->mainBarWidget->setFixedHeight(d->mainBarWidget->expandedHeight());\n\n    if (!d->statusCenterShown) {\n        QSignalBlocker blocker(d->heightAnim);\n        d->heightAnim->setStartValue(this->height() - 1);\n        d->heightAnim->setEndValue(d->barExpanding ? d->mainBarWidget->expandedHeight() : d->mainBarWidget->statusBarHeight());\n        d->heightAnim->setEasingCurve(QEasingCurve::OutCubic);\n\n        d->heightAnim->stop();\n        d->heightAnim->start();\n    }\n}\n\nvoid BarWindow::showStatusCenter() {\n    QSignalBlocker blocker(d->heightAnim);\n    d->heightAnim->stop();\n\n    StateManager::statusCenterManager()->setIsShowingStatusCenter(true);\n    int time = d->barStatusCenterTransitionAnim->currentTime();\n    d->barStatusCenterTransitionAnim->setDirection(tVariantAnimation::Forward);\n    d->barStatusCenterTransitionAnim->start();\n    d->barStatusCenterTransitionAnim->setCurrentTime(time);\n\n    // Tell the window manager that this is now a standard system window\n    DesktopWm::instance()->setSystemWindow(this);\n    d->statusCenterWidget->setFocus();\n    d->statusCenterShown = true;\n}\n\nvoid BarWindow::hideStatusCenter() {\n    StateManager::statusCenterManager()->setIsShowingStatusCenter(false);\n    int time = d->barStatusCenterTransitionAnim->currentTime();\n    d->barStatusCenterTransitionAnim->setDirection(tVariantAnimation::Backward);\n    d->barStatusCenterTransitionAnim->start();\n    d->barStatusCenterTransitionAnim->setCurrentTime(time);\n\n    // Tell the window manager that this is now a \"taskbar\" type window\n    DesktopWm::instance()->setSystemWindow(this, DesktopWm::SystemWindowTypeTaskbar);\n    d->mainBarWidget->setFocus();\n    d->statusCenterShown = false;\n}\n\nvoid BarWindow::showBar() {\n    d->barPendingShow = false;\n    // If we're showing the status bar, don't touch the height\n    if (!StateManager::statusCenterManager()->isShowingStatusCenter()) {\n        QSignalBlocker blocker(d->heightAnim);\n        d->heightAnim->setStartValue(this->height() - 1);\n        d->heightAnim->setEndValue(d->mainBarWidget->expandedHeight());\n        d->heightAnim->setEasingCurve(QEasingCurve::OutCubic);\n\n        d->heightAnim->stop();\n        d->heightAnim->start();\n\n        d->barExpanding = true;\n    }\n}\n\nvoid BarWindow::hideBar() {\n    // If we're showing the status bar, don't touch the height\n    if (!StateManager::statusCenterManager()->isShowingStatusCenter() && !StateManager::barManager()->isBarLocked()) {\n        QSignalBlocker blocker(d->heightAnim);\n        d->heightAnim->setStartValue(this->height() - 1);\n        d->heightAnim->setEndValue(d->mainBarWidget->statusBarHeight());\n        d->heightAnim->setEasingCurve(QEasingCurve::OutCubic);\n\n        d->heightAnim->stop();\n        d->heightAnim->start();\n\n        d->barExpanding = false;\n    }\n}\n\nvoid BarWindow::trackBarPullDownGesture(GestureInteractionPtr gesture) {\n    if (d->statusCenterShown || d->barExpanding) return;\n\n    // Capture this gesture!\n    d->lastGesture = gesture;\n\n    QSignalBlocker blocker(d->heightAnim);\n\n    d->heightAnim->setStartValue(this->height() - 1);\n    d->heightAnim->setEndValue(d->mainBarWidget->expandedHeight());\n    d->heightAnim->setEasingCurve(QEasingCurve::Linear);\n\n    d->heightAnim->stop();\n    d->barExpanding = true;\n\n    connect(gesture.data(), &GestureInteraction::interactionUpdated, this, [=] {\n        d->heightAnim->setCurrentTime(d->heightAnim->totalDuration() * gesture->percentage());\n        d->heightAnim->valueChanged(d->heightAnim->currentValue());\n    });\n    connect(gesture.data(), &GestureInteraction::interactionEnded, this, [=] {\n        if (gesture->extrapolatePercentage(100) > 0.7) {\n            showBar();\n            QTimer::singleShot(3000, this, [=] {\n                if (gesture == d->lastGesture && !this->underMouse()) hideBar();\n            });\n        } else {\n            hideBar();\n        }\n    });\n}\n\nvoid BarWindow::trackStatusCenterPullDownGesture(GestureInteractionPtr gesture) {\n    if (d->statusCenterShown) return;\n\n    // Capture this gesture!\n    d->lastGesture = gesture;\n\n    d->barStatusCenterTransitionAnim->setDirection(tVariantAnimation::Forward);\n    d->barStatusCenterTransitionAnim->setCurrentTime(0);\n\n    connect(gesture.data(), &GestureInteraction::interactionUpdated, this, [=] {\n        d->barStatusCenterTransitionAnim->setCurrentTime(d->barStatusCenterTransitionAnim->totalDuration() * gesture->percentage());\n        d->barStatusCenterTransitionAnim->valueChanged(d->barStatusCenterTransitionAnim->currentValue());\n    });\n    connect(gesture.data(), &GestureInteraction::interactionEnded, this, [=] {\n        if (gesture->extrapolatePercentage(100) > 0.7) {\n            showStatusCenter();\n        } else {\n            hideStatusCenter();\n        }\n    });\n}\n\nvoid BarWindow::trackStatusCenterPullUpGesture(GestureInteractionPtr gesture) {\n    if (!d->statusCenterShown) return;\n\n    // Only accept this gesture if there is not currently a popover active\n    QList<QWidget*> childWidgets;\n    childWidgets.append(this);\n    while (!childWidgets.isEmpty()) {\n        QWidget* w = childWidgets.takeFirst();\n        if (tPopover::popoverForPopoverWidget(w)) return;\n        for (QObject* o : w->children()) {\n            if (qobject_cast<QWidget*>(o)) childWidgets.append(qobject_cast<QWidget*>(o));\n        }\n    }\n\n    // Capture this gesture!\n    d->lastGesture = gesture;\n\n    d->barStatusCenterTransitionAnim->setDirection(tVariantAnimation::Forward);\n    d->barStatusCenterTransitionAnim->setCurrentTime(d->barStatusCenterTransitionAnim->duration());\n\n    connect(gesture.data(), &GestureInteraction::interactionUpdated, this, [=] {\n        d->barStatusCenterTransitionAnim->setCurrentTime(d->barStatusCenterTransitionAnim->totalDuration() - d->barStatusCenterTransitionAnim->totalDuration() * gesture->percentage());\n        d->barStatusCenterTransitionAnim->valueChanged(d->barStatusCenterTransitionAnim->currentValue());\n    });\n    connect(gesture.data(), &GestureInteraction::interactionEnded, this, [=] {\n        if (gesture->extrapolatePercentage(100) > 0.3) {\n            hideStatusCenter();\n        } else {\n            showStatusCenter();\n        }\n    });\n}\n\nvoid BarWindow::mouseMoveEvent(QMouseEvent* event) {\n    if (event->pos().x() < d->mainBarWidget->currentAppWidgetX() && d->barPendingShow) showBar();\n}\n"
  },
  {
    "path": "desktop/bar/barwindow.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef BARWINDOW_H\n#define BARWINDOW_H\n\n#include <Gestures/gestureinteraction.h>\n#include <QWidget>\n#include <Wm/desktopwmwindow.h>\n\nnamespace Ui {\n    class BarWindow;\n}\n\nstruct BarWindowPrivate;\nclass BarWindow : public QWidget {\n        Q_OBJECT\n\n    public:\n        explicit BarWindow(QWidget* parent = nullptr);\n        ~BarWindow();\n\n        void setFixedHeight(int height);\n        void setFixedWidth(int width);\n\n    private:\n        Ui::BarWindow* ui;\n        BarWindowPrivate* d;\n\n        void resizeEvent(QResizeEvent* event);\n        void enterEvent(QEnterEvent* event);\n        void leaveEvent(QEvent* event);\n        void paintEvent(QPaintEvent* event);\n        void mouseMoveEvent(QMouseEvent* event);\n\n        void trackWindow(DesktopWmWindowPtr window);\n\n        void updatePrimaryScreen();\n        void barHeightChanged();\n\n        void showStatusCenter();\n        void hideStatusCenter();\n\n        void showBar();\n        void hideBar();\n\n        void trackBarPullDownGesture(GestureInteractionPtr gesture);\n        void trackStatusCenterPullDownGesture(GestureInteractionPtr gesture);\n        void trackStatusCenterPullUpGesture(GestureInteractionPtr gesture);\n};\n\n#endif // BARWINDOW_H\n"
  },
  {
    "path": "desktop/bar/barwindow.ui",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ui version=\"4.0\">\n <class>BarWindow</class>\n <widget class=\"QWidget\" name=\"BarWindow\">\n  <property name=\"geometry\">\n   <rect>\n    <x>0</x>\n    <y>0</y>\n    <width>636</width>\n    <height>300</height>\n   </rect>\n  </property>\n  <property name=\"windowTitle\">\n   <string notr=\"true\">Form</string>\n  </property>\n  <widget class=\"Line\" name=\"line\">\n   <property name=\"geometry\">\n    <rect>\n     <x>130</x>\n     <y>250</y>\n     <width>118</width>\n     <height>1</height>\n    </rect>\n   </property>\n   <property name=\"maximumSize\">\n    <size>\n     <width>16777215</width>\n     <height>1</height>\n    </size>\n   </property>\n   <property name=\"orientation\">\n    <enum>Qt::Horizontal</enum>\n   </property>\n  </widget>\n </widget>\n <resources/>\n <connections/>\n</ui>\n"
  },
  {
    "path": "desktop/bar/chunkcontainer.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"chunkcontainer.h\"\n#include \"ui_chunkcontainer.h\"\n\n#include \"common/common.h\"\n#include <QFrame>\n#include <QGraphicsOpacityEffect>\n#include <QScrollBar>\n#include <barmanager.h>\n#include <chunk.h>\n#include <statemanager.h>\n#include <statuscentermanager.h>\n\nstruct ChunkContainerPrivate {\n        BarManager* barManager;\n\n        QList<QPair<QString, Chunk*>> loadedChunks;\n        QStringList preferredChunkOrder = {\n            \"OverviewClock\",\n            \"Power\",\n            \"PowerStretch\",\n            \"flight-mode\",\n            \"network-cellular\",\n            \"Network\",\n            \"network-tethering\",\n            \"bluetooth\",\n            \"audio\",\n            \"audio-mic\",\n            \"redshift\",\n            \"keyboardlayout\",\n            \"caffeinate\",\n            \"Accessibility-StickyKeys\",\n            \"mpris\"};\n\n        QMap<Chunk*, QWidget*> chunkWidgets;\n        qreal currentAnimProgress = 1;\n};\n\nChunkContainer::ChunkContainer(QWidget* parent) :\n    QWidget(parent),\n    ui(new Ui::ChunkContainer) {\n    ui->setupUi(this);\n    d = new ChunkContainerPrivate();\n    d->barManager = StateManager::barManager();\n\n    ui->statusCenterButtonLine->setVisible(false);\n\n    connect(d->barManager, &BarManager::chunkAdded, this, &ChunkContainer::chunkAdded);\n    connect(d->barManager, &BarManager::chunkRemoved, this, &ChunkContainer::chunkRemoved);\n    for (Chunk* chunk : d->barManager->chunks()) {\n        this->chunkAdded(chunk);\n    }\n\n    connect(StateManager::barManager(), &BarManager::barHeightTransitioning, this, [=](qreal percentage) {\n        int spacing = 3 + 3 * percentage;\n        ui->chunkLayout->setSpacing(spacing);\n    });\n\n    connect(ui->scrollArea->horizontalScrollBar(), &QScrollBar::valueChanged, this, [=](int value) {\n        ui->statusCenterButtonLine->setVisible(value != 0);\n    });\n\n    QPalette pal;\n    pal.setBrush(QPalette::Window, Qt::transparent);\n    ui->scrollArea->setPalette(pal);\n    ui->scrollAreaWidgetContents->setPalette(pal);\n}\n\nChunkContainer::~ChunkContainer() {\n    delete d;\n    delete ui;\n    ui = nullptr;\n}\n\nint ChunkContainer::statusBarHeight() {\n    int maxHeight = 0;\n    for (Chunk* chunk : d->barManager->chunks()) {\n        maxHeight = qMax(chunk->statusBarHeight(), maxHeight);\n    }\n    return maxHeight;\n}\n\nint ChunkContainer::expandedHeight() {\n    int maxHeight = 0;\n    for (Chunk* chunk : d->barManager->chunks()) {\n        maxHeight = qMax(chunk->expandedHeight(), maxHeight);\n    }\n    return maxHeight;\n}\n\nint ChunkContainer::currentAppWidgetX() {\n    return this->layoutDirection() == Qt::RightToLeft ? ui->currentAppWidget->width() : ui->currentAppWidget->x();\n}\n\nvoid ChunkContainer::barHeightChanged(int height) {\n    //    if (height >= statusBarHeight() && height <= expandedHeight()) {\n    //        this->setFixedHeight(height);\n    //    }\n    int boundHeight = qBound(statusBarHeight(), height, expandedHeight());\n    this->setFixedHeight(boundHeight);\n    ui->chunkWidget->setFixedHeight(boundHeight);\n\n    qreal percentageAnim = static_cast<qreal>((height - statusBarHeight())) / (expandedHeight() - statusBarHeight());\n    if (percentageAnim < 0) percentageAnim = 0;\n    if (percentageAnim > 1) percentageAnim = 1;\n    d->barManager->barHeightTransitioning(percentageAnim);\n    ui->currentAppWidget->barHeightChanging(percentageAnim);\n    d->currentAnimProgress = percentageAnim;\n}\n\nvoid ChunkContainer::paintEvent(QPaintEvent* event) {\n}\n\nvoid ChunkContainer::chunkAdded(Chunk* chunk) {\n    // Create a chunk widget\n    QWidget* chunkWidget = new QWidget(this);\n    QBoxLayout* chunkWidgetLayout = new QBoxLayout(QBoxLayout::LeftToRight, chunkWidget);\n    QFrame* line = new QFrame(chunkWidget);\n    line->setFrameShape(QFrame::VLine);\n    line->setFixedWidth(1);\n    chunkWidgetLayout->addWidget(line);\n    chunkWidgetLayout->addWidget(chunk);\n    chunkWidgetLayout->setSpacing(0);\n    chunkWidgetLayout->setContentsMargins(0, 0, 0, 0);\n    chunkWidget->setLayout(chunkWidgetLayout);\n    d->chunkWidgets.insert(chunk, chunkWidget);\n\n    QGraphicsOpacityEffect* lineOpacity = new QGraphicsOpacityEffect(line);\n    lineOpacity->setOpacity(d->currentAnimProgress);\n    line->setGraphicsEffect(lineOpacity);\n\n    QStringList currentItems;\n    for (QPair<QString, Chunk*> item : d->loadedChunks) {\n        currentItems.append(item.first);\n    }\n    int index = Common::getInsertionIndex(d->preferredChunkOrder, currentItems, chunk->name());\n    if (index == -1) {\n        // Add it at the end\n        ui->chunkLayout->addWidget(chunkWidget);\n        d->loadedChunks.append({chunk->name(), chunk});\n    } else {\n        // Add this chunk at the beginning\n        ui->chunkLayout->insertWidget(index, chunkWidget);\n        d->loadedChunks.insert(index, {chunk->name(), chunk});\n    }\n\n    connect(this, &ChunkContainer::chunksChanged, chunkWidget, [=] {\n        // Make sure the line is not visible and set the margins appropriately\n        for (int i = 0; i < d->loadedChunks.count(); i++) {\n            QPair<QString, Chunk*> chunkDescriptor = d->loadedChunks.at(i);\n            if (chunkDescriptor.second == chunk) {\n                line->setVisible(i != 0);\n                return;\n            }\n        }\n    });\n    connect(StateManager::barManager(), &BarManager::barHeightTransitioning, lineOpacity, &QGraphicsOpacityEffect::setOpacity);\n\n    emit statusBarHeightChanged();\n    emit expandedHeightChanged();\n    emit chunksChanged();\n}\n\nvoid ChunkContainer::chunkRemoved(Chunk* chunk) {\n    if (!ui) return;\n    for (int i = 0; i < d->loadedChunks.count(); i++) {\n        if (d->loadedChunks.at(i).second == chunk) {\n            QWidget* chunkWidget = d->chunkWidgets.take(chunk);\n            ui->chunkLayout->removeWidget(chunkWidget);\n            d->loadedChunks.removeAt(i);\n            chunk->setParent(nullptr);\n            chunkWidget->deleteLater();\n\n            emit statusBarHeightChanged();\n            emit expandedHeightChanged();\n            return;\n        }\n    }\n}\n\nvoid ChunkContainer::on_statusCenterButton_clicked() {\n    StateManager::statusCenterManager()->showStatusCenter();\n}\n"
  },
  {
    "path": "desktop/bar/chunkcontainer.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef CHUNKCONTAINER_H\n#define CHUNKCONTAINER_H\n\n#include <QWidget>\n\nnamespace Ui {\n    class ChunkContainer;\n}\n\nclass Chunk;\nstruct ChunkContainerPrivate;\nclass ChunkContainer : public QWidget {\n        Q_OBJECT\n\n    public:\n        explicit ChunkContainer(QWidget* parent = nullptr);\n        ~ChunkContainer();\n\n        int statusBarHeight();\n        int expandedHeight();\n        int currentAppWidgetX();\n        void barHeightChanged(int height);\n\n    signals:\n        void statusBarHeightChanged();\n        void expandedHeightChanged();\n        void chunksChanged();\n\n    private slots:\n        void on_statusCenterButton_clicked();\n\n    private:\n        Ui::ChunkContainer* ui;\n        ChunkContainerPrivate* d;\n\n        void paintEvent(QPaintEvent* event);\n        void chunkAdded(Chunk* chunk);\n        void chunkRemoved(Chunk* chunk);\n};\n\n#endif // CHUNKCONTAINER_H\n"
  },
  {
    "path": "desktop/bar/chunkcontainer.ui",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ui version=\"4.0\">\n <class>ChunkContainer</class>\n <widget class=\"QWidget\" name=\"ChunkContainer\">\n  <property name=\"geometry\">\n   <rect>\n    <x>0</x>\n    <y>0</y>\n    <width>400</width>\n    <height>23</height>\n   </rect>\n  </property>\n  <property name=\"windowTitle\">\n   <string notr=\"true\">Form</string>\n  </property>\n  <layout class=\"QHBoxLayout\" name=\"horizontalLayout\">\n   <property name=\"spacing\">\n    <number>0</number>\n   </property>\n   <property name=\"leftMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"topMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"rightMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"bottomMargin\">\n    <number>0</number>\n   </property>\n   <item>\n    <widget class=\"QToolButton\" name=\"statusCenterButton\">\n     <property name=\"sizePolicy\">\n      <sizepolicy hsizetype=\"Fixed\" vsizetype=\"Preferred\">\n       <horstretch>0</horstretch>\n       <verstretch>0</verstretch>\n      </sizepolicy>\n     </property>\n     <property name=\"toolTip\">\n      <string>Open Status Center</string>\n     </property>\n     <property name=\"text\">\n      <string/>\n     </property>\n     <property name=\"icon\">\n      <iconset theme=\"arrow-down\">\n       <normaloff>.</normaloff>.</iconset>\n     </property>\n    </widget>\n   </item>\n   <item>\n    <widget class=\"Line\" name=\"statusCenterButtonLine\">\n     <property name=\"maximumSize\">\n      <size>\n       <width>1</width>\n       <height>16777215</height>\n      </size>\n     </property>\n     <property name=\"orientation\">\n      <enum>Qt::Vertical</enum>\n     </property>\n    </widget>\n   </item>\n   <item>\n    <widget class=\"QScrollArea\" name=\"scrollArea\">\n     <property name=\"sizePolicy\">\n      <sizepolicy hsizetype=\"Expanding\" vsizetype=\"Preferred\">\n       <horstretch>0</horstretch>\n       <verstretch>0</verstretch>\n      </sizepolicy>\n     </property>\n     <property name=\"frameShape\">\n      <enum>QFrame::NoFrame</enum>\n     </property>\n     <property name=\"verticalScrollBarPolicy\">\n      <enum>Qt::ScrollBarAlwaysOff</enum>\n     </property>\n     <property name=\"horizontalScrollBarPolicy\">\n      <enum>Qt::ScrollBarAlwaysOff</enum>\n     </property>\n     <property name=\"sizeAdjustPolicy\">\n      <enum>QAbstractScrollArea::AdjustToContents</enum>\n     </property>\n     <property name=\"widgetResizable\">\n      <bool>true</bool>\n     </property>\n     <widget class=\"QWidget\" name=\"scrollAreaWidgetContents\">\n      <property name=\"geometry\">\n       <rect>\n        <x>0</x>\n        <y>0</y>\n        <width>365</width>\n        <height>23</height>\n       </rect>\n      </property>\n      <layout class=\"QHBoxLayout\" name=\"horizontalLayout_2\">\n       <property name=\"spacing\">\n        <number>0</number>\n       </property>\n       <property name=\"leftMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"topMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"rightMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"bottomMargin\">\n        <number>0</number>\n       </property>\n       <item alignment=\"Qt::AlignTop\">\n        <widget class=\"QWidget\" name=\"chunkWidget\" native=\"true\">\n         <property name=\"sizePolicy\">\n          <sizepolicy hsizetype=\"Preferred\" vsizetype=\"Fixed\">\n           <horstretch>0</horstretch>\n           <verstretch>0</verstretch>\n          </sizepolicy>\n         </property>\n         <layout class=\"QHBoxLayout\" name=\"chunkLayout\">\n          <property name=\"spacing\">\n           <number>0</number>\n          </property>\n          <property name=\"leftMargin\">\n           <number>9</number>\n          </property>\n          <property name=\"topMargin\">\n           <number>0</number>\n          </property>\n          <property name=\"rightMargin\">\n           <number>9</number>\n          </property>\n          <property name=\"bottomMargin\">\n           <number>0</number>\n          </property>\n         </layout>\n        </widget>\n       </item>\n       <item>\n        <spacer name=\"horizontalSpacer\">\n         <property name=\"orientation\">\n          <enum>Qt::Horizontal</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>0</width>\n           <height>20</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n      </layout>\n     </widget>\n    </widget>\n   </item>\n   <item>\n    <widget class=\"CurrentAppWidget\" name=\"currentAppWidget\" native=\"true\"/>\n   </item>\n  </layout>\n </widget>\n <customwidgets>\n  <customwidget>\n   <class>CurrentAppWidget</class>\n   <extends>QWidget</extends>\n   <header>bar/currentappwidget.h</header>\n   <container>1</container>\n  </customwidget>\n </customwidgets>\n <resources/>\n <connections/>\n</ui>\n"
  },
  {
    "path": "desktop/bar/currentappwidget.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"currentappwidget.h\"\n#include \"ui_currentappwidget.h\"\n\n#include <tvariantanimation.h>\n#include <Wm/desktopwm.h>\n#include <Applications/application.h>\n#include <QGraphicsOpacityEffect>\n#include <QIcon>\n#include <keygrab.h>\n#include <private/quickwidgetcontainer.h>\n#include \"currentappwidgetmenu.h\"\n\nstruct CurrentAppWidgetPrivate {\n    QPalette pal;\n    QGraphicsOpacityEffect* opacity;\n    tVariantAnimation* anim;\n\n    QuickWidgetContainer* menuContainer;\n    CurrentAppWidgetMenu* menu;\n\n    KeyGrab* forceStopGrab;\n};\n\nCurrentAppWidget::CurrentAppWidget(QWidget* parent) :\n    QWidget(parent),\n    ui(new Ui::CurrentAppWidget) {\n    ui->setupUi(this);\n\n    d = new CurrentAppWidgetPrivate();\n    d->pal = this->palette();\n    d->pal.setColor(QPalette::Window, QColor(0, 0, 0, 0));\n    this->setPalette(d->pal);\n\n    d->opacity = new QGraphicsOpacityEffect(this);\n    d->opacity->setOpacity(1);\n    this->setGraphicsEffect(d->opacity);\n\n    d->anim = new tVariantAnimation(this);\n    d->anim->setStartValue(0.0);\n    d->anim->setEndValue(1.0);\n    d->anim->setDuration(200);\n    connect(d->anim, &tVariantAnimation::valueChanged, this, [ = ](QVariant value) {\n        d->opacity->setOpacity(value.toReal());\n    });\n\n    d->menu = new CurrentAppWidgetMenu();\n\n    d->menuContainer = new QuickWidgetContainer(this);\n    d->menuContainer->setQuickWidget(d->menu);\n    connect(d->menuContainer, &QuickWidgetContainer::hiding, this, &CurrentAppWidget::activeWindowChanged);\n    connect(d->menu, &CurrentAppWidgetMenu::done, d->menuContainer, &QuickWidgetContainer::hideContainer);\n\n    connect(DesktopWm::instance(), &DesktopWm::activeWindowChanged, this, &CurrentAppWidget::activeWindowChanged);\n    activeWindowChanged();\n\n    d->forceStopGrab = new KeyGrab(QKeySequence(Qt::ControlModifier | Qt::AltModifier | Qt::Key_Escape), \"force-stop\");\n    connect(d->forceStopGrab, &KeyGrab::activated, this, [ = ] {\n        DesktopWmWindowPtr active = DesktopWm::activeWindow();\n        if (!active->application()) return;\n        d->menu->setWindow(active);\n        d->menu->showForceStopScreen();\n\n        if (!d->menuContainer->isShowing()) d->menuContainer->showContainer();\n    });\n}\n\nCurrentAppWidget::~CurrentAppWidget() {\n    delete d;\n    delete ui;\n}\n\nvoid CurrentAppWidget::barHeightChanging(float barTransitionPercentage) {\n    if (qFuzzyIsNull(barTransitionPercentage)) {\n        this->setFixedWidth(QWIDGETSIZE_MAX);\n        this->setVisible(true);\n    } else if (qFuzzyCompare(barTransitionPercentage, 1)) {\n        this->setVisible(false);\n    } else {\n        this->setFixedWidth(this->sizeHint().width() * (1 - barTransitionPercentage));\n        this->setVisible(true);\n    }\n}\n\nvoid CurrentAppWidget::activeWindowChanged() {\n    if (d->menuContainer->isShowing()) return;\n    DesktopWmWindowPtr active = DesktopWm::activeWindow();\n    if (active) {\n        ApplicationPointer app = active->application();\n        if (app) {\n            ui->iconLabel->setPixmap(QIcon::fromTheme(app->getProperty(\"Icon\").toString()).pixmap(SC_DPI_T(QSize(16, 16), QSize)));\n            ui->currentAppLabel->setText(app->getProperty(\"Name\").toString());\n\n            if (d->anim->direction() == tVariantAnimation::Backward) {\n                d->anim->setDirection(tVariantAnimation::Forward);\n                d->anim->start();\n            }\n        } else {\n            if (d->anim->direction() == tVariantAnimation::Forward) {\n                d->anim->setDirection(tVariantAnimation::Backward);\n                d->anim->start();\n            }\n        }\n    } else {\n        ui->iconLabel->setPixmap(QIcon(\":/thedesk/desktop/thedesk.svg\").pixmap(SC_DPI_T(QSize(16, 16), QSize)));\n        ui->currentAppLabel->setText(QStringLiteral(\"theDesk\"));\n        if (d->anim->direction() == tVariantAnimation::Backward) {\n            d->anim->setDirection(tVariantAnimation::Forward);\n            d->anim->start();\n        }\n    }\n}\n\nvoid CurrentAppWidget::enterEvent(QEvent* event) {\n    QPalette pal = d->pal;\n    pal.setColor(QPalette::Window, QColor(255, 255, 255, 100));\n    this->setPalette(pal);\n}\n\nvoid CurrentAppWidget::leaveEvent(QEvent* event) {\n    this->setPalette(d->pal);\n}\n\nvoid CurrentAppWidget::mousePressEvent(QMouseEvent* event) {\n    QPalette pal = d->pal;\n    pal.setColor(QPalette::Window, QColor(0, 0, 0, 100));\n    this->setPalette(pal);\n}\n\nvoid CurrentAppWidget::mouseReleaseEvent(QMouseEvent* event) {\n    QPalette pal = d->pal;\n    pal.setColor(QPalette::Window, QColor(255, 255, 255, 100));\n    this->setPalette(pal);\n\n    if (this->underMouse()) {\n        //Click!\n        DesktopWmWindowPtr active = DesktopWm::activeWindow();\n        if (!active || !active->application()) return;\n        d->menu->setWindow(active);\n        if (!d->menuContainer->isShowing()) d->menuContainer->showContainer();\n    }\n}\n"
  },
  {
    "path": "desktop/bar/currentappwidget.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef CURRENTAPPWIDGET_H\n#define CURRENTAPPWIDGET_H\n\n#include <QWidget>\n\nnamespace Ui {\n    class CurrentAppWidget;\n}\n\nstruct CurrentAppWidgetPrivate;\nclass CurrentAppWidget : public QWidget {\n        Q_OBJECT\n\n    public:\n        explicit CurrentAppWidget(QWidget* parent = nullptr);\n        ~CurrentAppWidget();\n\n        void barHeightChanging(float barTransitionPercentage);\n\n    private:\n        Ui::CurrentAppWidget* ui;\n        CurrentAppWidgetPrivate* d;\n\n        void activeWindowChanged();\n\n        // QWidget interface\n    protected:\n        void enterEvent(QEvent* event);\n        void leaveEvent(QEvent* event);\n        void mousePressEvent(QMouseEvent* event);\n        void mouseReleaseEvent(QMouseEvent* event);\n};\n\n#endif // CURRENTAPPWIDGET_H\n"
  },
  {
    "path": "desktop/bar/currentappwidget.ui",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ui version=\"4.0\">\n <class>CurrentAppWidget</class>\n <widget class=\"QWidget\" name=\"CurrentAppWidget\">\n  <property name=\"geometry\">\n   <rect>\n    <x>0</x>\n    <y>0</y>\n    <width>90</width>\n    <height>35</height>\n   </rect>\n  </property>\n  <property name=\"windowTitle\">\n   <string notr=\"true\">Form</string>\n  </property>\n  <property name=\"autoFillBackground\">\n   <bool>true</bool>\n  </property>\n  <layout class=\"QHBoxLayout\" name=\"horizontalLayout\">\n   <property name=\"spacing\">\n    <number>0</number>\n   </property>\n   <property name=\"leftMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"topMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"rightMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"bottomMargin\">\n    <number>0</number>\n   </property>\n   <item>\n    <widget class=\"Line\" name=\"line\">\n     <property name=\"maximumSize\">\n      <size>\n       <width>1</width>\n       <height>16777215</height>\n      </size>\n     </property>\n     <property name=\"orientation\">\n      <enum>Qt::Vertical</enum>\n     </property>\n    </widget>\n   </item>\n   <item>\n    <layout class=\"QHBoxLayout\" name=\"horizontalLayout_2\">\n     <property name=\"spacing\">\n      <number>6</number>\n     </property>\n     <property name=\"leftMargin\">\n      <number>3</number>\n     </property>\n     <property name=\"topMargin\">\n      <number>3</number>\n     </property>\n     <property name=\"rightMargin\">\n      <number>3</number>\n     </property>\n     <property name=\"bottomMargin\">\n      <number>3</number>\n     </property>\n     <item>\n      <widget class=\"QLabel\" name=\"iconLabel\">\n       <property name=\"text\">\n        <string notr=\"true\">Icon</string>\n       </property>\n      </widget>\n     </item>\n     <item>\n      <widget class=\"QLabel\" name=\"currentAppLabel\">\n       <property name=\"text\">\n        <string notr=\"true\">Current App</string>\n       </property>\n      </widget>\n     </item>\n    </layout>\n   </item>\n  </layout>\n </widget>\n <resources/>\n <connections/>\n</ui>\n"
  },
  {
    "path": "desktop/bar/currentappwidgetmenu.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2021 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"currentappwidgetmenu.h\"\n#include \"ui_currentappwidgetmenu.h\"\n\n#include <QTimer>\n\nstruct CurrentAppWidgetMenuPrivate {\n    DesktopWmWindowPtr window;\n    QList<QPushButton*> actionButtons;\n};\n\nCurrentAppWidgetMenu::CurrentAppWidgetMenu(QWidget* parent) :\n    QWidget(parent),\n    ui(new Ui::CurrentAppWidgetMenu) {\n    ui->setupUi(this);\n\n    d = new CurrentAppWidgetMenuPrivate();\n    ui->quitImmediateButton->setProperty(\"type\", \"destructive\");\n    ui->doQuitImmediateButton->setProperty(\"type\", \"destructive\");\n    updateModifiers();\n\n    ui->stackedWidget->setCurrentAnimation(tStackedWidget::SlideHorizontal);\n}\n\nCurrentAppWidgetMenu::~CurrentAppWidgetMenu() {\n    delete d;\n    delete ui;\n}\n\nQSize CurrentAppWidgetMenu::sizeHint() const {\n    return this->size();\n}\n\nvoid CurrentAppWidgetMenu::setWindow(DesktopWmWindowPtr window) {\n    for (QPushButton* button : d->actionButtons) {\n        ui->actionsLayout->removeWidget(button);\n        button->setVisible(false);\n        button->deleteLater();\n    }\n    d->actionButtons.clear();\n\n    d->window = window;\n    QString applicationName = window->application()->getProperty(\"Name\").toString();\n    ui->quitImmediateButton->setText(tr(\"Force Stop\"));\n    ui->quitImmediateTitle->setText(tr(\"Force Stop %1\").arg(applicationName).toUpper());\n    ui->quitImmediateDescription->setText(tr(\"%1 will be forced to exit and won't have a chance to save any unsaved data.\").arg(applicationName));\n    ui->doQuitImmediateButton->setText(tr(\"Force Stop %1\").arg(applicationName));\n    ui->cancelImmediateQuitButton->setVisible(true);\n\n    QStringList actions = window->application()->getStringList(\"Actions\");\n    for (const QString& action : qAsConst(actions)) {\n        QPushButton* button = new QPushButton();\n        button->setText(window->application()->getActionProperty(action, \"Name\").toString());\n        connect(button, &QPushButton::clicked, this, [ = ] {\n            window->application()->launchAction(action);\n            emit done();\n        });\n        ui->actionsLayout->addWidget(button);\n        d->actionButtons.append(button);\n    }\n    ui->actionsWidget->setVisible(!actions.isEmpty());\n\n    ui->stackedWidget->setCurrentWidget(ui->initialPage, false);\n    updateModifiers();\n}\n\nvoid CurrentAppWidgetMenu::showForceStopScreen() {\n    ui->cancelImmediateQuitButton->setVisible(false);\n    ui->stackedWidget->setCurrentWidget(ui->quitImmediatelyPage, false);\n    this->setFixedSize(ui->stackedWidget->currentWidget()->sizeHint());\n}\n\nvoid CurrentAppWidgetMenu::updateModifiers() {\n    bool showExtraOptions = qApp->queryKeyboardModifiers() & Qt::ShiftModifier;\n    ui->quitImmediateButton->setVisible(showExtraOptions);\n\n    on_stackedWidget_switchingFrame(ui->stackedWidget->currentIndex());\n}\n\nvoid CurrentAppWidgetMenu::on_closeWindowButton_clicked() {\n    d->window->close();\n    emit done();\n}\n\nvoid CurrentAppWidgetMenu::keyPressEvent(QKeyEvent* event) {\n    updateModifiers();\n}\n\nvoid CurrentAppWidgetMenu::keyReleaseEvent(QKeyEvent* event) {\n    updateModifiers();\n}\n\nvoid CurrentAppWidgetMenu::on_doQuitImmediateButton_clicked() {\n    d->window->kill();\n    emit done();\n}\n\nvoid CurrentAppWidgetMenu::on_cancelImmediateQuitButton_clicked() {\n    ui->stackedWidget->setCurrentWidget(ui->initialPage);\n}\n\nvoid CurrentAppWidgetMenu::on_quitImmediateButton_clicked() {\n    ui->stackedWidget->setCurrentWidget(ui->quitImmediatelyPage);\n}\n\nvoid CurrentAppWidgetMenu::on_stackedWidget_switchingFrame(int frame) {\n    QTimer::singleShot(0, [ = ] {\n        tVariantAnimation::singleShot(this, this->size(), ui->stackedWidget->widget(frame)->sizeHint(), 250, [ = ](QVariant value) {\n            this->setFixedSize(value.toSize());\n        });\n    });\n}\n"
  },
  {
    "path": "desktop/bar/currentappwidgetmenu.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2021 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef CURRENTAPPWIDGETMENU_H\n#define CURRENTAPPWIDGETMENU_H\n\n#include <QWidget>\n#include <Wm/desktopwmwindow.h>\n\nnamespace Ui {\n    class CurrentAppWidgetMenu;\n}\n\nstruct CurrentAppWidgetMenuPrivate;\nclass CurrentAppWidgetMenu : public QWidget {\n        Q_OBJECT\n\n    public:\n        explicit CurrentAppWidgetMenu(QWidget* parent = nullptr);\n        ~CurrentAppWidgetMenu();\n\n        QSize sizeHint() const;\n\n        void setWindow(DesktopWmWindowPtr window);\n        void showForceStopScreen();\n\n        void updateModifiers();\n\n    private slots:\n        void on_closeWindowButton_clicked();\n\n        void on_doQuitImmediateButton_clicked();\n\n        void on_cancelImmediateQuitButton_clicked();\n\n        void on_quitImmediateButton_clicked();\n\n        void on_stackedWidget_switchingFrame(int frame);\n\n    signals:\n        void done();\n\n    private:\n        Ui::CurrentAppWidgetMenu* ui;\n        CurrentAppWidgetMenuPrivate* d;\n\n        // QWidget interface\n    protected:\n        void keyPressEvent(QKeyEvent* event);\n        void keyReleaseEvent(QKeyEvent* event);\n};\n\n#endif // CURRENTAPPWIDGETMENU_H\n"
  },
  {
    "path": "desktop/bar/currentappwidgetmenu.ui",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ui version=\"4.0\">\n <class>CurrentAppWidgetMenu</class>\n <widget class=\"QWidget\" name=\"CurrentAppWidgetMenu\">\n  <property name=\"geometry\">\n   <rect>\n    <x>0</x>\n    <y>0</y>\n    <width>400</width>\n    <height>105</height>\n   </rect>\n  </property>\n  <property name=\"windowTitle\">\n   <string notr=\"true\">Form</string>\n  </property>\n  <layout class=\"QVBoxLayout\" name=\"verticalLayout\">\n   <property name=\"spacing\">\n    <number>0</number>\n   </property>\n   <property name=\"leftMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"topMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"rightMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"bottomMargin\">\n    <number>0</number>\n   </property>\n   <item>\n    <widget class=\"tStackedWidget\" name=\"stackedWidget\">\n     <property name=\"currentIndex\">\n      <number>0</number>\n     </property>\n     <widget class=\"QWidget\" name=\"initialPage\">\n      <layout class=\"QVBoxLayout\" name=\"verticalLayout_2\">\n       <property name=\"spacing\">\n        <number>0</number>\n       </property>\n       <property name=\"leftMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"topMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"rightMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"bottomMargin\">\n        <number>0</number>\n       </property>\n       <item alignment=\"Qt::AlignTop\">\n        <widget class=\"QWidget\" name=\"widget\" native=\"true\">\n         <layout class=\"QVBoxLayout\" name=\"verticalLayout_5\">\n          <property name=\"spacing\">\n           <number>0</number>\n          </property>\n          <property name=\"leftMargin\">\n           <number>0</number>\n          </property>\n          <property name=\"topMargin\">\n           <number>0</number>\n          </property>\n          <property name=\"rightMargin\">\n           <number>0</number>\n          </property>\n          <property name=\"bottomMargin\">\n           <number>0</number>\n          </property>\n          <item>\n           <widget class=\"QPushButton\" name=\"closeWindowButton\">\n            <property name=\"text\">\n             <string>Close Window</string>\n            </property>\n            <property name=\"icon\">\n             <iconset theme=\"window-close\">\n              <normaloff>.</normaloff>.</iconset>\n            </property>\n           </widget>\n          </item>\n          <item>\n           <widget class=\"QWidget\" name=\"actionsWidget\" native=\"true\">\n            <layout class=\"QVBoxLayout\" name=\"verticalLayout_6\">\n             <property name=\"spacing\">\n              <number>0</number>\n             </property>\n             <property name=\"leftMargin\">\n              <number>0</number>\n             </property>\n             <property name=\"topMargin\">\n              <number>0</number>\n             </property>\n             <property name=\"rightMargin\">\n              <number>0</number>\n             </property>\n             <property name=\"bottomMargin\">\n              <number>0</number>\n             </property>\n             <item>\n              <widget class=\"Line\" name=\"line_2\">\n               <property name=\"maximumSize\">\n                <size>\n                 <width>16777215</width>\n                 <height>1</height>\n                </size>\n               </property>\n               <property name=\"orientation\">\n                <enum>Qt::Horizontal</enum>\n               </property>\n              </widget>\n             </item>\n             <item>\n              <layout class=\"QVBoxLayout\" name=\"actionsLayout\"/>\n             </item>\n             <item>\n              <widget class=\"Line\" name=\"line\">\n               <property name=\"maximumSize\">\n                <size>\n                 <width>16777215</width>\n                 <height>1</height>\n                </size>\n               </property>\n               <property name=\"orientation\">\n                <enum>Qt::Horizontal</enum>\n               </property>\n              </widget>\n             </item>\n            </layout>\n           </widget>\n          </item>\n          <item>\n           <widget class=\"QPushButton\" name=\"quitImmediateButton\">\n            <property name=\"text\">\n             <string notr=\"true\">Quit Immediately</string>\n            </property>\n            <property name=\"icon\">\n             <iconset theme=\"application-exit\">\n              <normaloff>.</normaloff>.</iconset>\n            </property>\n           </widget>\n          </item>\n         </layout>\n        </widget>\n       </item>\n      </layout>\n     </widget>\n     <widget class=\"QWidget\" name=\"quitImmediatelyPage\">\n      <layout class=\"QVBoxLayout\" name=\"verticalLayout_3\">\n       <property name=\"spacing\">\n        <number>0</number>\n       </property>\n       <property name=\"leftMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"topMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"rightMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"bottomMargin\">\n        <number>0</number>\n       </property>\n       <item>\n        <layout class=\"QVBoxLayout\" name=\"verticalLayout_4\">\n         <property name=\"leftMargin\">\n          <number>9</number>\n         </property>\n         <property name=\"topMargin\">\n          <number>9</number>\n         </property>\n         <property name=\"rightMargin\">\n          <number>9</number>\n         </property>\n         <property name=\"bottomMargin\">\n          <number>6</number>\n         </property>\n         <item>\n          <widget class=\"QLabel\" name=\"quitImmediateTitle\">\n           <property name=\"font\">\n            <font>\n             <bold>true</bold>\n            </font>\n           </property>\n           <property name=\"text\">\n            <string>QUIT IMMEDIATELY</string>\n           </property>\n          </widget>\n         </item>\n         <item>\n          <widget class=\"QLabel\" name=\"quitImmediateDescription\">\n           <property name=\"text\">\n            <string notr=\"true\">TextLabel</string>\n           </property>\n          </widget>\n         </item>\n        </layout>\n       </item>\n       <item>\n        <widget class=\"QPushButton\" name=\"cancelImmediateQuitButton\">\n         <property name=\"text\">\n          <string>Cancel</string>\n         </property>\n         <property name=\"icon\">\n          <iconset theme=\"dialog-cancel\">\n           <normaloff>.</normaloff>.</iconset>\n         </property>\n        </widget>\n       </item>\n       <item>\n        <widget class=\"QPushButton\" name=\"doQuitImmediateButton\">\n         <property name=\"text\">\n          <string notr=\"true\">Quit Immediately</string>\n         </property>\n         <property name=\"icon\">\n          <iconset theme=\"application-exit\">\n           <normaloff>.</normaloff>.</iconset>\n         </property>\n        </widget>\n       </item>\n      </layout>\n     </widget>\n    </widget>\n   </item>\n  </layout>\n </widget>\n <customwidgets>\n  <customwidget>\n   <class>tStackedWidget</class>\n   <extends>QStackedWidget</extends>\n   <header location=\"global\">tstackedwidget.h</header>\n   <container>1</container>\n   <slots>\n    <signal>switchingFrame(int)</signal>\n   </slots>\n  </customwidget>\n </customwidgets>\n <resources/>\n <connections/>\n</ui>\n"
  },
  {
    "path": "desktop/bar/mainbarwidget.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"mainbarwidget.h\"\n#include \"ui_mainbarwidget.h\"\n\n#include \"gateway/gateway.h\"\n#include <keygrab.h>\n#include <libcontemporary_global.h>\n\n#include <QDebug>\n#include <hudmanager.h>\n#include <statemanager.h>\n\n#include <Screens/screendaemon.h>\n#include <Screens/systemscreen.h>\n\nMainBarWidget::MainBarWidget(QWidget* parent) :\n    QWidget(parent),\n    ui(new Ui::MainBarWidget) {\n    ui->setupUi(this);\n\n    ui->gatewayButton->setIconSize(SC_DPI_T(QSize(32, 32), QSize));\n    connect(ui->chunkContainer, &ChunkContainer::expandedHeightChanged, this, &MainBarWidget::expandedHeightChanged);\n    connect(ui->chunkContainer, &ChunkContainer::statusBarHeightChanged, this, &MainBarWidget::statusBarHeightChanged);\n\n    connect(new KeyGrab(QKeySequence(Qt::Key_Super_L), \"gatewayOpen\"), &KeyGrab::activated, this, [=] {\n        Gateway::instance()->show();\n    });\n}\n\nMainBarWidget::~MainBarWidget() {\n    delete ui;\n}\n\nint MainBarWidget::statusBarHeight() {\n    return ui->chunkContainer->statusBarHeight();\n}\n\nint MainBarWidget::expandedHeight() {\n    return ui->chunkContainer->expandedHeight() + ui->mainContentsWidget->sizeHint().height();\n}\n\nint MainBarWidget::currentAppWidgetX() {\n    return ui->chunkContainer->currentAppWidgetX();\n}\n\nvoid MainBarWidget::barHeightChanged(int height) {\n    ui->chunkContainer->barHeightChanged(height);\n}\n\nvoid MainBarWidget::on_gatewayButton_clicked() {\n    Gateway::instance()->show();\n}\n"
  },
  {
    "path": "desktop/bar/mainbarwidget.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef MAINBARWIDGET_H\n#define MAINBARWIDGET_H\n\n#include <QWidget>\n\nnamespace Ui {\n    class MainBarWidget;\n}\n\nclass MainBarWidget : public QWidget {\n        Q_OBJECT\n\n    public:\n        explicit MainBarWidget(QWidget* parent = nullptr);\n        ~MainBarWidget();\n\n        int statusBarHeight();\n        int expandedHeight();\n        int currentAppWidgetX();\n\n        void barHeightChanged(int height);\n\n    signals:\n        void statusBarHeightChanged();\n        void expandedHeightChanged();\n\n    private slots:\n        void on_gatewayButton_clicked();\n\n    private:\n        Ui::MainBarWidget* ui;\n};\n\n#endif // MAINBARWIDGET_H\n"
  },
  {
    "path": "desktop/bar/mainbarwidget.ui",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ui version=\"4.0\">\n <class>MainBarWidget</class>\n <widget class=\"QWidget\" name=\"MainBarWidget\">\n  <property name=\"geometry\">\n   <rect>\n    <x>0</x>\n    <y>0</y>\n    <width>724</width>\n    <height>195</height>\n   </rect>\n  </property>\n  <property name=\"windowTitle\">\n   <string notr=\"true\">Form</string>\n  </property>\n  <layout class=\"QVBoxLayout\" name=\"verticalLayout\">\n   <property name=\"spacing\">\n    <number>0</number>\n   </property>\n   <property name=\"leftMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"topMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"rightMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"bottomMargin\">\n    <number>0</number>\n   </property>\n   <item>\n    <widget class=\"ChunkContainer\" name=\"chunkContainer\" native=\"true\"/>\n   </item>\n   <item>\n    <widget class=\"QWidget\" name=\"mainContentsWidget\" native=\"true\">\n     <layout class=\"QHBoxLayout\" name=\"horizontalLayout\">\n      <property name=\"spacing\">\n       <number>0</number>\n      </property>\n      <property name=\"leftMargin\">\n       <number>0</number>\n      </property>\n      <property name=\"topMargin\">\n       <number>0</number>\n      </property>\n      <property name=\"rightMargin\">\n       <number>0</number>\n      </property>\n      <property name=\"bottomMargin\">\n       <number>0</number>\n      </property>\n      <item>\n       <widget class=\"QToolButton\" name=\"gatewayButton\">\n        <property name=\"sizePolicy\">\n         <sizepolicy hsizetype=\"Preferred\" vsizetype=\"Preferred\">\n          <horstretch>0</horstretch>\n          <verstretch>0</verstretch>\n         </sizepolicy>\n        </property>\n        <property name=\"text\">\n         <string/>\n        </property>\n        <property name=\"icon\">\n         <iconset>\n          <normaloff>:/thedesk/desktop/icons/thedesk.svg</normaloff>:/thedesk/desktop/icons/thedesk.svg</iconset>\n        </property>\n        <property name=\"iconSize\">\n         <size>\n          <width>32</width>\n          <height>32</height>\n         </size>\n        </property>\n        <property name=\"autoRaise\">\n         <bool>true</bool>\n        </property>\n       </widget>\n      </item>\n      <item>\n       <widget class=\"TaskbarWidget\" name=\"widget\" native=\"true\">\n        <property name=\"sizePolicy\">\n         <sizepolicy hsizetype=\"Expanding\" vsizetype=\"Preferred\">\n          <horstretch>0</horstretch>\n          <verstretch>0</verstretch>\n         </sizepolicy>\n        </property>\n       </widget>\n      </item>\n     </layout>\n    </widget>\n   </item>\n   <item>\n    <spacer name=\"verticalSpacer\">\n     <property name=\"orientation\">\n      <enum>Qt::Vertical</enum>\n     </property>\n     <property name=\"sizeHint\" stdset=\"0\">\n      <size>\n       <width>0</width>\n       <height>0</height>\n      </size>\n     </property>\n    </spacer>\n   </item>\n  </layout>\n </widget>\n <customwidgets>\n  <customwidget>\n   <class>ChunkContainer</class>\n   <extends>QWidget</extends>\n   <header>bar/chunkcontainer.h</header>\n   <container>1</container>\n  </customwidget>\n  <customwidget>\n   <class>TaskbarWidget</class>\n   <extends>QWidget</extends>\n   <header>bar/taskbarwidget.h</header>\n   <container>1</container>\n  </customwidget>\n </customwidgets>\n <resources/>\n <connections/>\n</ui>\n"
  },
  {
    "path": "desktop/bar/taskbarapplicationwidget.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2021 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"taskbarapplicationwidget.h\"\n\n#include <Wm/desktopwm.h>\n#include <libcontemporary_global.h>\n\n#include <QAction>\n#include <QActionGroup>\n#include <QContextMenuEvent>\n#include <QMenu>\n#include <Wm/desktopwm.h>\n#include <actionquickwidget.h>\n#include <barmanager.h>\n#include <private/quickwidgetcontainer.h>\n#include <statemanager.h>\n\nstruct TaskbarApplicationWidgetPrivate {\n        ApplicationPointer app;\n        uint desktop;\n\n        ActionQuickWidget* windowListMenu;\n        QuickWidgetContainer* windowListMenuContainer;\n\n        QList<DesktopWmWindowPtr> trackedWindows;\n        QMap<DesktopWmWindowPtr, QAction*> actions;\n};\n\nTaskbarApplicationWidget::TaskbarApplicationWidget(QString desktopEntry, uint desktop, QWidget* parent) :\n    QPushButton(parent) {\n    d = new TaskbarApplicationWidgetPrivate();\n    d->app = ApplicationPointer(new Application(desktopEntry));\n    d->desktop = desktop;\n\n    this->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Preferred);\n    this->setCheckable(true);\n\n    connect(DesktopWm::instance(), &DesktopWm::windowRemoved, this, [=](DesktopWmWindowPtr window) {\n        removeTrackedWindow(window);\n    });\n    connect(DesktopWm::instance(), &DesktopWm::activeWindowChanged, this, &TaskbarApplicationWidget::updateActive);\n\n    connect(this, &TaskbarApplicationWidget::clicked, this, [=] {\n        if (d->trackedWindows.count() == 1) {\n            d->trackedWindows.first()->activate();\n        } else {\n            if (!d->windowListMenuContainer->isShowing()) d->windowListMenuContainer->showContainer();\n        }\n        updateActive();\n    });\n    this->setIconSize(SC_DPI_T(QSize(32, 32), QSize));\n\n    d->windowListMenuContainer = new QuickWidgetContainer(this);\n    d->windowListMenu = new ActionQuickWidget(d->windowListMenuContainer);\n    d->windowListMenuContainer->setQuickWidget(d->windowListMenu);\n    //    connect(d->windowListMenu, &ActionQuickWidget::done, d->menuContainer, &QuickWidgetContainer::hideContainer);\n\n    updateIcon();\n}\n\nTaskbarApplicationWidget::~TaskbarApplicationWidget() {\n    delete d;\n}\n\nvoid TaskbarApplicationWidget::trackWindow(DesktopWmWindowPtr window) {\n    if (d->trackedWindows.contains(window)) return;\n\n    QAction* action = new QAction(this);\n    action->setText(window->title());\n\n    connect(window, &DesktopWmWindow::titleChanged, action, [=] {\n        action->setText(window->title());\n    });\n    connect(action, &QAction::triggered, window, [=] {\n        window->activate();\n    });\n\n    d->actions.insert(window, action);\n    d->windowListMenu->addAction(action);\n    d->trackedWindows.append(window);\n    updateIcon();\n    updateActive();\n}\n\nvoid TaskbarApplicationWidget::removeTrackedWindow(DesktopWmWindowPtr window) {\n    if (!d->trackedWindows.contains(window)) return;\n\n    window->disconnect(this);\n    d->trackedWindows.removeOne(window);\n    QAction* action = d->actions.take(window);\n    d->windowListMenu->removeAction(action);\n    action->deleteLater();\n    updateIcon();\n    updateActive();\n\n    if (d->trackedWindows.isEmpty()) emit windowsRemoved();\n}\n\nQList<DesktopWmWindowPtr> TaskbarApplicationWidget::trackedWindows() {\n    return d->trackedWindows;\n}\n\nvoid TaskbarApplicationWidget::setColor(QColor color) {\n    QPalette pal = this->palette();\n    pal.setColor(QPalette::Button, color);\n    this->setPalette(pal);\n}\n\nvoid TaskbarApplicationWidget::resizeEvent(QResizeEvent* event) {\n    this->setFixedWidth(this->height());\n}\n\nvoid TaskbarApplicationWidget::updateIcon() {\n    if (d->app->isValid()) {\n        this->setIcon(d->app->icon());\n    } else if (!d->trackedWindows.isEmpty()) {\n        this->setIcon(d->trackedWindows.first()->icon());\n    } else {\n        this->setIcon(QIcon::fromTheme(\"generic-app\"));\n    }\n\n    emit iconChanged();\n}\n\nvoid TaskbarApplicationWidget::updateActive() {\n    this->setChecked(d->trackedWindows.contains(DesktopWm::activeWindow()));\n}\n\nvoid TaskbarApplicationWidget::contextMenuEvent(QContextMenuEvent* event) {\n    auto menu = new QMenu(this);\n    if (d->trackedWindows.count() == 1) {\n        auto win = d->trackedWindows.constFirst();\n        menu->addSection(tr(\"For %1\").arg(QLocale().quoteString(win->title())));\n\n        QMenu* desktopsMenu = new QMenu(menu);\n        desktopsMenu->setTitle(tr(\"Move to desktop\"));\n\n        auto desktopsGroup = new QActionGroup(desktopsMenu);\n        desktopsGroup->setExclusive(true);\n\n        auto allDesktopsAction = desktopsMenu->addAction(tr(\"All Desktops\"), [win] {\n            win->moveToDesktop(UINT_MAX);\n        });\n        desktopsGroup->addAction(allDesktopsAction);\n        allDesktopsAction->setCheckable(true);\n        if (win->desktop() == UINT_MAX) allDesktopsAction->setChecked(true);\n        desktopsMenu->addSeparator();\n\n        for (auto i = 0; i < DesktopWm::desktops().count() - 1; i++) {\n            auto desktopName = DesktopWm::desktops().at(i);\n            auto action = desktopsMenu->addAction(desktopName, [win, i] {\n                win->moveToDesktop(i);\n            });\n            desktopsGroup->addAction(action);\n            action->setCheckable(true);\n            if (i == win->desktop()) action->setChecked(true);\n        }\n        desktopsMenu->addSeparator();\n        desktopsMenu->addAction(QIcon::fromTheme(\"list-add\"), tr(\"New Desktop\"), [win] {\n            win->moveToDesktop(DesktopWm::desktops().count() - 1);\n        });\n        menu->addMenu(desktopsMenu);\n\n        menu->addAction(QIcon::fromTheme(\"window-close\"), tr(\"Close\"), this, [win] {\n            win->close();\n        });\n    } else {\n        if (d->app->isValid()) {\n            menu->addSection(tr(\"For %n %1 windows\", nullptr, d->trackedWindows.count()).arg(QLocale().quoteString(d->app->getProperty(\"Name\").toString())));\n        } else {\n            menu->addSection(tr(\"For %n windows\", nullptr, d->trackedWindows.count()));\n        }\n        menu->addAction(QIcon::fromTheme(\"application-exit\"), tr(\"Close All\"), this, [this] {\n            for (auto win : d->trackedWindows) {\n                win->close();\n            }\n        });\n    }\n\n    auto locker = StateManager::barManager()->acquireLock();\n    connect(menu, &QMenu::aboutToHide, this, [locker, menu] {\n        locker->unlock();\n        menu->deleteLater();\n    });\n\n    menu->popup(event->globalPos());\n}\n"
  },
  {
    "path": "desktop/bar/taskbarapplicationwidget.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2021 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef TASKBARAPPLICATIONWIDGET_H\n#define TASKBARAPPLICATIONWIDGET_H\n\n#include <QPushButton>\n\nclass DesktopWmWindow;\ntypedef QPointer<DesktopWmWindow> DesktopWmWindowPtr;\n\nstruct TaskbarApplicationWidgetPrivate;\nclass TaskbarApplicationWidget : public QPushButton {\n        Q_OBJECT\n    public:\n        explicit TaskbarApplicationWidget(QString desktopEntry, uint desktop, QWidget* parent = nullptr);\n        ~TaskbarApplicationWidget();\n\n        void trackWindow(DesktopWmWindowPtr window);\n        void removeTrackedWindow(DesktopWmWindowPtr window);\n        QList<DesktopWmWindowPtr> trackedWindows();\n\n        void setColor(QColor color);\n\n    signals:\n        void iconChanged();\n        void windowsRemoved();\n\n    private:\n        TaskbarApplicationWidgetPrivate* d;\n\n        void resizeEvent(QResizeEvent* event);\n        void updateIcon();\n        void updateActive();\n\n        // QWidget interface\n    protected:\n        void contextMenuEvent(QContextMenuEvent *event);\n};\n\n#endif // TASKBARAPPLICATIONWIDGET_H\n"
  },
  {
    "path": "desktop/bar/taskbardesktopwidget.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2021 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"taskbardesktopwidget.h\"\n#include \"ui_taskbardesktopwidget.h\"\n\n#include \"taskbarapplicationwidget.h\"\n#include <Applications/application.h>\n#include <QPainter>\n#include <Wm/desktopwm.h>\n#include <tvariantanimation.h>\n\nstruct TaskbarDesktopWidgetPrivate {\n        QMap<QString, TaskbarApplicationWidget*> applicationWidgets;\n        QList<TaskbarApplicationWidget*> applicationWidgetOrder;\n        uint desktop;\n        QColor color;\n\n        tVariantAnimation* progressAnim;\n\n        const QRgb colors[6] = {\n            0x0000c8,\n            0x006400,\n            0x640000,\n            0xff6400,\n            0x0064ff,\n            0x6400ff};\n};\n\nTaskbarDesktopWidget::TaskbarDesktopWidget(uint desktop, QWidget* parent) :\n    QWidget(parent),\n    ui(new Ui::TaskbarDesktopWidget) {\n    ui->setupUi(this);\n    d = new TaskbarDesktopWidgetPrivate();\n    d->desktop = desktop;\n\n    d->color = QColor::fromRgb(d->colors[desktop % 6]);\n\n    d->progressAnim = new tVariantAnimation();\n    d->progressAnim->setStartValue(0.0);\n    d->progressAnim->setEndValue(1.0);\n    d->progressAnim->setDuration(250);\n    d->progressAnim->setEasingCurve(QEasingCurve::OutCubic);\n    connect(d->progressAnim, &tVariantAnimation::valueChanged, this, &TaskbarDesktopWidget::updateAnimation);\n    connect(d->progressAnim, &tVariantAnimation::finished, this, &TaskbarDesktopWidget::finishAnimation);\n\n    if (DesktopWm::currentDesktop() == d->desktop) d->progressAnim->setCurrentTime(d->progressAnim->duration());\n    finishAnimation();\n\n    connect(DesktopWm::instance(), &DesktopWm::currentDesktopChanged, this, &TaskbarDesktopWidget::updateDesktop);\n    connect(DesktopWm::instance(), &DesktopWm::windowAdded, this, &TaskbarDesktopWidget::windowAdded);\n    connect(DesktopWm::instance(), &DesktopWm::windowRemoved, this, &TaskbarDesktopWidget::windowRemoved);\n\n    for (DesktopWmWindowPtr window : DesktopWm::openWindows()) {\n        this->windowAdded(window);\n    }\n\n    QPalette pal = ui->desktopOverviewButton->palette();\n    pal.setColor(QPalette::Button, d->color);\n    ui->desktopOverviewButton->setPalette(pal);\n    ui->desktopOverviewButton->setIconSize(SC_DPI_T(QSize(32, 32), QSize));\n    updateOverviewButtonIcon();\n}\n\nTaskbarDesktopWidget::~TaskbarDesktopWidget() {\n    delete d;\n    delete ui;\n}\n\nvoid TaskbarDesktopWidget::moveDesktop(uint newDesktop) {\n    d->desktop = newDesktop;\n\n    QList<DesktopWmWindowPtr> windowsToMove;\n    for (TaskbarApplicationWidget* widget : d->applicationWidgetOrder) {\n        windowsToMove.append(widget->trackedWindows());\n    }\n\n    for (DesktopWmWindowPtr window : windowsToMove) {\n        window->moveToDesktop(newDesktop);\n    }\n}\n\nvoid TaskbarDesktopWidget::windowAdded(DesktopWmWindowPtr window) {\n    connect(window, &DesktopWmWindow::desktopChanged, this, [this, window] {\n        if (window->isOnDesktop(d->desktop) && window->shouldShowInTaskbar()) {\n            registerOnDesktop(window);\n        } else {\n            deregisterFromDesktop(window);\n        }\n    });\n\n    if (window->isOnDesktop(d->desktop) && window->shouldShowInTaskbar()) registerOnDesktop(window);\n}\n\nvoid TaskbarDesktopWidget::windowRemoved(DesktopWmWindowPtr window) {\n    deregisterFromDesktop(window);\n}\n\nvoid TaskbarDesktopWidget::registerOnDesktop(DesktopWmWindowPtr window) {\n    QString desktopEntry = QString::number(window->pid());\n    if (window->application()) desktopEntry = window->application()->desktopEntry();\n\n    TaskbarApplicationWidget* widget;\n    if (d->applicationWidgets.contains(desktopEntry)) {\n        widget = d->applicationWidgets.value(desktopEntry);\n    } else {\n        widget = new TaskbarApplicationWidget(desktopEntry, d->desktop, this);\n        widget->setColor(d->color);\n        connect(widget, &TaskbarApplicationWidget::iconChanged, this, &TaskbarDesktopWidget::updateOverviewButtonIcon);\n        connect(widget, &TaskbarApplicationWidget::windowsRemoved, this, [=] {\n            d->applicationWidgets.remove(desktopEntry);\n            d->applicationWidgetOrder.removeOne(widget);\n            ui->applicationsLayout->removeWidget(widget);\n            widget->deleteLater();\n\n            updateOverviewButtonIcon();\n        });\n        ui->applicationsLayout->addWidget(widget);\n        d->applicationWidgets.insert(desktopEntry, widget);\n        d->applicationWidgetOrder.append(widget);\n    }\n\n    widget->trackWindow(window);\n    updateOverviewButtonIcon();\n}\n\nvoid TaskbarDesktopWidget::deregisterFromDesktop(DesktopWmWindowPtr window) {\n    QString desktopEntry = QString::number(window->pid());\n    if (window->application()) desktopEntry = window->application()->desktopEntry();\n\n    if (d->applicationWidgets.contains(desktopEntry)) {\n        TaskbarApplicationWidget* widget = d->applicationWidgets.value(desktopEntry);\n        widget->removeTrackedWindow(window);\n    }\n}\n\nvoid TaskbarDesktopWidget::updateOverviewButtonIcon() {\n    QPixmap pixmap(SC_DPI_T(QSize(32, 32), QSize));\n    pixmap.fill(Qt::transparent);\n\n    QPainter painter(&pixmap);\n    for (int i = 0; i < 4; i++) {\n        if (d->applicationWidgetOrder.count() <= i) continue;\n\n        QRect boxGeometry;\n        boxGeometry.setSize(SC_DPI_T(QSize(16, 16), QSize));\n        boxGeometry.moveTopLeft(QPoint(SC_DPI(16) * (i % 2), SC_DPI(16) * (i / 2)));\n\n        QRect geometry;\n        geometry.setSize(SC_DPI_T(QSize(14, 14), QSize));\n        geometry.moveCenter(boxGeometry.center());\n\n        if (i == 3 && d->applicationWidgetOrder.count() > 4) {\n            QFont font = this->font();\n            font.setPixelSize(geometry.height());\n            painter.setFont(font);\n\n            painter.setPen(this->palette().color(QPalette::ButtonText));\n            painter.drawText(geometry, Qt::AlignCenter, QStringLiteral(\"%1%2\").arg(QLocale().positiveSign()).arg(d->applicationWidgetOrder.count() - 3));\n        } else {\n            QPixmap icon(d->applicationWidgetOrder.at(i)->icon().pixmap(geometry.size()));\n            painter.drawPixmap(geometry, icon);\n        }\n    }\n\n    ui->desktopOverviewButton->setIcon(QIcon(pixmap));\n}\n\nvoid TaskbarDesktopWidget::updateDesktop() {\n    if (DesktopWm::currentDesktop() == d->desktop && d->progressAnim->currentValue().toReal() < 0.5) {\n        d->progressAnim->setDirection(tVariantAnimation::Forward);\n        d->progressAnim->start();\n    } else if (DesktopWm::currentDesktop() != d->desktop && d->progressAnim->currentValue().toReal() > 0.5) {\n        d->progressAnim->setDirection(tVariantAnimation::Backward);\n        d->progressAnim->start();\n    }\n}\n\nvoid TaskbarDesktopWidget::updateAnimation() {\n    ui->applicationsWidget->setFixedWidth(ui->applicationsWidget->sizeHint().width() * d->progressAnim->currentValue().toReal());\n    ui->desktopOverviewButton->setFixedWidth(this->height() * (1 - d->progressAnim->currentValue().toReal()));\n}\n\nvoid TaskbarDesktopWidget::finishAnimation() {\n    if (d->progressAnim->currentValue().toReal() > 0.5) {\n        ui->applicationsWidget->setFixedWidth(QWIDGETSIZE_MAX);\n        ui->desktopOverviewButton->setFixedWidth(0);\n    } else {\n        ui->applicationsWidget->setFixedWidth(0);\n        ui->desktopOverviewButton->setFixedWidth(this->height());\n    }\n}\n\nvoid TaskbarDesktopWidget::on_desktopOverviewButton_clicked() {\n    DesktopWm::setCurrentDesktop(d->desktop);\n}\n\nvoid TaskbarDesktopWidget::resizeEvent(QResizeEvent* event) {\n    if (d->progressAnim->state() == tVariantAnimation::Running) {\n        updateAnimation();\n    } else {\n        finishAnimation();\n    }\n}\n"
  },
  {
    "path": "desktop/bar/taskbardesktopwidget.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2021 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef TASKBARDESKTOPWIDGET_H\n#define TASKBARDESKTOPWIDGET_H\n\n#include <QWidget>\n\nnamespace Ui {\n    class TaskbarDesktopWidget;\n}\n\nclass DesktopWmWindow;\ntypedef QPointer<DesktopWmWindow> DesktopWmWindowPtr;\n\nstruct TaskbarDesktopWidgetPrivate;\nclass TaskbarDesktopWidget : public QWidget {\n        Q_OBJECT\n\n    public:\n        explicit TaskbarDesktopWidget(uint desktop, QWidget* parent = nullptr);\n        ~TaskbarDesktopWidget();\n\n        void moveDesktop(uint newDesktop);\n\n    private slots:\n        void on_desktopOverviewButton_clicked();\n\n    private:\n        Ui::TaskbarDesktopWidget* ui;\n        TaskbarDesktopWidgetPrivate* d;\n\n        void resizeEvent(QResizeEvent* event);\n\n        void windowAdded(DesktopWmWindowPtr window);\n        void windowRemoved(DesktopWmWindowPtr window);\n        void registerOnDesktop(DesktopWmWindowPtr window);\n        void deregisterFromDesktop(DesktopWmWindowPtr window);\n\n        void updateOverviewButtonIcon();\n        void updateDesktop();\n        void updateAnimation();\n        void finishAnimation();\n};\n\n#endif // TASKBARDESKTOPWIDGET_H\n"
  },
  {
    "path": "desktop/bar/taskbardesktopwidget.ui",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ui version=\"4.0\">\n <class>TaskbarDesktopWidget</class>\n <widget class=\"QWidget\" name=\"TaskbarDesktopWidget\">\n  <property name=\"geometry\">\n   <rect>\n    <x>0</x>\n    <y>0</y>\n    <width>255</width>\n    <height>48</height>\n   </rect>\n  </property>\n  <property name=\"windowTitle\">\n   <string notr=\"true\">Form</string>\n  </property>\n  <layout class=\"QHBoxLayout\">\n   <property name=\"spacing\">\n    <number>0</number>\n   </property>\n   <property name=\"leftMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"topMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"rightMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"bottomMargin\">\n    <number>0</number>\n   </property>\n   <item>\n    <widget class=\"QPushButton\" name=\"desktopOverviewButton\">\n     <property name=\"sizePolicy\">\n      <sizepolicy hsizetype=\"Preferred\" vsizetype=\"Preferred\">\n       <horstretch>0</horstretch>\n       <verstretch>0</verstretch>\n      </sizepolicy>\n     </property>\n     <property name=\"text\">\n      <string notr=\"true\"/>\n     </property>\n    </widget>\n   </item>\n   <item>\n    <widget class=\"QWidget\" name=\"applicationsWidget\" native=\"true\">\n     <property name=\"sizePolicy\">\n      <sizepolicy hsizetype=\"Preferred\" vsizetype=\"Preferred\">\n       <horstretch>0</horstretch>\n       <verstretch>0</verstretch>\n      </sizepolicy>\n     </property>\n     <layout class=\"QHBoxLayout\" name=\"applicationsLayout\">\n      <property name=\"spacing\">\n       <number>0</number>\n      </property>\n      <property name=\"leftMargin\">\n       <number>0</number>\n      </property>\n      <property name=\"topMargin\">\n       <number>0</number>\n      </property>\n      <property name=\"rightMargin\">\n       <number>0</number>\n      </property>\n      <property name=\"bottomMargin\">\n       <number>0</number>\n      </property>\n     </layout>\n    </widget>\n   </item>\n  </layout>\n </widget>\n <resources/>\n <connections/>\n</ui>\n"
  },
  {
    "path": "desktop/bar/taskbarwidget.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"taskbarwidget.h\"\n#include \"ui_taskbarwidget.h\"\n\n#include \"taskbardesktopwidget.h\"\n#include <Applications/application.h>\n#include <Gestures/gesturedaemon.h>\n#include <QPushButton>\n#include <QTimer>\n#include <Wm/desktopwm.h>\n#include <libcontemporary_global.h>\n\nstruct TaskbarWidgetPrivate {\n        QList<TaskbarDesktopWidget*> desktopWidgets;\n};\n\nTaskbarWidget::TaskbarWidget(QWidget* parent) :\n    QWidget(parent),\n    ui(new Ui::TaskbarWidget) {\n    ui->setupUi(this);\n\n    d = new TaskbarWidgetPrivate();\n\n    //    connect(DesktopWm::instance(), &DesktopWm::windowAdded, this, &TaskbarWidget::addWindow);\n    //    connect(DesktopWm::instance(), &DesktopWm::windowRemoved, this, &TaskbarWidget::removeWindow);\n    //    connect(DesktopWm::instance(), &DesktopWm::activeWindowChanged, this, &TaskbarWidget::activeWindowChanged);\n\n    //    for (DesktopWmWindowPtr window : DesktopWm::openWindows()) {\n    //        this->addWindow(window);\n    //    }\n\n    connect(DesktopWm::instance(), &DesktopWm::currentDesktopChanged, this, &TaskbarWidget::updateDesktop);\n    connect(DesktopWm::instance(), &DesktopWm::desktopCountChanged, this, &TaskbarWidget::updateDesktop);\n\n    connect(DesktopWm::instance(), &DesktopWm::currentDesktopChanged, this, &TaskbarWidget::normaliseDesktops);\n    connect(DesktopWm::instance(), &DesktopWm::desktopCountChanged, this, &TaskbarWidget::normaliseDesktops);\n    connect(DesktopWm::instance(), &DesktopWm::windowAdded, this, &TaskbarWidget::addWindow);\n    connect(DesktopWm::instance(), &DesktopWm::windowRemoved, this, &TaskbarWidget::removeWindow);\n\n    // TODO: Move to window manager\n    connect(GestureDaemon::instance(), &GestureDaemon::gestureBegin, this, [=](GestureInteractionPtr gesture) {\n        if (gesture->isValidInteraction(GestureTypes::Swipe, GestureTypes::Left, 4)) {\n            connect(gesture.data(), &GestureInteraction::interactionEnded, this, [=] {\n                if (gesture->extrapolatePercentage(100) > 0.7 && DesktopWm::currentDesktop() != DesktopWm::desktops().length() - 1) {\n                    DesktopWm::setCurrentDesktop(DesktopWm::currentDesktop() + 1);\n                }\n            });\n        } else if (gesture->isValidInteraction(GestureTypes::Swipe, GestureTypes::Right, 4)) {\n            connect(gesture.data(), &GestureInteraction::interactionEnded, this, [=] {\n                if (gesture->extrapolatePercentage(100) > 0.7 && DesktopWm::currentDesktop() != 0) {\n                    DesktopWm::setCurrentDesktop(DesktopWm::currentDesktop() - 1);\n                }\n            });\n        }\n    });\n\n    ui->lastDesktopButton->setIconSize(SC_DPI_T(QSize(24, 24), QSize));\n    ui->lastDesktopButton->setVisible(DesktopWm::supportsSetNumDesktops());\n\n    normaliseDesktops();\n    updateDesktop();\n}\n\nTaskbarWidget::~TaskbarWidget() {\n    delete d;\n    delete ui;\n    d = nullptr;\n}\n\nvoid TaskbarWidget::addWindow(DesktopWmWindowPtr window) {\n    connect(window, &DesktopWmWindow::desktopChanged, this, &TaskbarWidget::normaliseDesktops);\n\n    // Race condition?\n    QTimer::singleShot(500, this, [=] {\n        normaliseDesktops();\n    });\n}\n\nvoid TaskbarWidget::removeWindow(DesktopWmWindowPtr window) {\n    // Race condition?\n    QTimer::singleShot(500, this, [=] {\n        normaliseDesktops();\n    });\n}\n\nvoid TaskbarWidget::activeWindowChanged() {\n}\n\nvoid TaskbarWidget::normaliseDesktops() {\n    // Ensure there is a taskbar desktop widget for every desktop - 1\n    for (int i = 0; i < DesktopWm::desktops().count() - 1; i++) {\n        if (d->desktopWidgets.count() == i) {\n            // Add another widget\n            TaskbarDesktopWidget* widget = new TaskbarDesktopWidget(i);\n            ui->desktopsLayout->addWidget(widget);\n            d->desktopWidgets.append(widget);\n        }\n    }\n\n    // Remove any extraenous desktop widgets\n    while (d->desktopWidgets.count() > DesktopWm::desktops().count() - 1) {\n        TaskbarDesktopWidget* widget = d->desktopWidgets.takeLast();\n        ui->desktopsLayout->removeWidget(widget);\n        widget->deleteLater();\n    }\n\n    // Go through each desktop to find any that need to be removed\n    for (int i = 0; i < DesktopWm::desktops().count() - 1; i++) {\n        if (DesktopWm::currentDesktop() == static_cast<uint>(i)) continue;\n\n        bool haveWindows = false;\n        for (auto window : DesktopWm::windowsOnDesktop(i)) {\n            if (window->desktop() != UINT_MAX) haveWindows = true;\n        }\n        if (haveWindows) continue;\n\n        // This desktop needs to be removed\n        // Shuffle all of the windows from the desktops in front down\n        for (int j = i + 1; j < DesktopWm::desktops().count() - 1; j++) {\n            d->desktopWidgets.at(j)->moveDesktop(j - 1);\n        }\n\n        // Remove the last desktop\n        DesktopWm::setNumDesktops(DesktopWm::desktops().count() - 1);\n\n        // Normalise and check again\n        normaliseDesktops();\n        return;\n    }\n\n    // Ensure that there is an empty desktop at the end\n    bool haveWindows = false;\n    for (auto window : DesktopWm::windowsOnDesktop(DesktopWm::desktops().count() - 1)) {\n        if (window->desktop() != UINT_MAX) haveWindows = true;\n    }\n    if (haveWindows) {\n        // Add an extra desktop\n        DesktopWm::setNumDesktops(DesktopWm::desktops().count() + 1);\n\n        // Normalise and check again\n        normaliseDesktops();\n        return;\n    }\n}\n\nvoid TaskbarWidget::updateDesktop() {\n    // Race condition?\n    QTimer::singleShot(500, this, [=] {\n        ui->lastDesktopButton->setChecked(DesktopWm::currentDesktop() == DesktopWm::desktops().count() - 1);\n    });\n}\n\nvoid TaskbarWidget::on_lastDesktopButton_clicked() {\n    DesktopWm::setCurrentDesktop(DesktopWm::desktops().count() - 1);\n}\n\nvoid TaskbarWidget::resizeEvent(QResizeEvent* event) {\n    ui->lastDesktopButton->setFixedWidth(this->height());\n}\n"
  },
  {
    "path": "desktop/bar/taskbarwidget.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef TASKBARWIDGET_H\n#define TASKBARWIDGET_H\n\n#include <QWidget>\n\nnamespace Ui {\n    class TaskbarWidget;\n}\n\nclass DesktopWmWindow;\ntypedef QPointer<DesktopWmWindow> DesktopWmWindowPtr;\n\nstruct TaskbarWidgetPrivate;\nclass TaskbarWidget : public QWidget {\n        Q_OBJECT\n\n    public:\n        explicit TaskbarWidget(QWidget* parent = nullptr);\n        ~TaskbarWidget();\n\n    private slots:\n        void on_lastDesktopButton_clicked();\n\n    private:\n        Ui::TaskbarWidget* ui;\n        TaskbarWidgetPrivate* d;\n\n        void resizeEvent(QResizeEvent* event);\n\n        void addWindow(DesktopWmWindowPtr window);\n        void removeWindow(DesktopWmWindowPtr window);\n        void activeWindowChanged();\n\n        void normaliseDesktops();\n        void updateDesktop();\n};\n\n#endif // TASKBARWIDGET_H\n"
  },
  {
    "path": "desktop/bar/taskbarwidget.ui",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ui version=\"4.0\">\n <class>TaskbarWidget</class>\n <widget class=\"QWidget\" name=\"TaskbarWidget\">\n  <property name=\"geometry\">\n   <rect>\n    <x>0</x>\n    <y>0</y>\n    <width>400</width>\n    <height>23</height>\n   </rect>\n  </property>\n  <property name=\"windowTitle\">\n   <string notr=\"true\">Form</string>\n  </property>\n  <layout class=\"QHBoxLayout\" name=\"horizontalLayout_2\">\n   <property name=\"spacing\">\n    <number>0</number>\n   </property>\n   <property name=\"leftMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"topMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"rightMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"bottomMargin\">\n    <number>0</number>\n   </property>\n   <item>\n    <layout class=\"QHBoxLayout\" name=\"desktopsLayout\">\n     <property name=\"spacing\">\n      <number>0</number>\n     </property>\n    </layout>\n   </item>\n   <item>\n    <widget class=\"QToolButton\" name=\"lastDesktopButton\">\n     <property name=\"sizePolicy\">\n      <sizepolicy hsizetype=\"Preferred\" vsizetype=\"Preferred\">\n       <horstretch>0</horstretch>\n       <verstretch>0</verstretch>\n      </sizepolicy>\n     </property>\n     <property name=\"icon\">\n      <iconset theme=\"list-add\"/>\n     </property>\n     <property name=\"checkable\">\n      <bool>true</bool>\n     </property>\n    </widget>\n   </item>\n   <item>\n    <spacer name=\"horizontalSpacer\">\n     <property name=\"orientation\">\n      <enum>Qt::Horizontal</enum>\n     </property>\n     <property name=\"sizeHint\" stdset=\"0\">\n      <size>\n       <width>395</width>\n       <height>20</height>\n      </size>\n     </property>\n    </spacer>\n   </item>\n  </layout>\n </widget>\n <resources/>\n <connections/>\n</ui>\n"
  },
  {
    "path": "desktop/cli/commandline.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"commandline.h\"\n\n#include <QCommandLineParser>\n#include <QTextStream>\n#include \"plugins/pluginmanager.h\"\n#include \"server/sessionserver.h\"\n\nCommandLine::CommandLine(QObject* parent) : QObject(parent) {\n\n}\n\n#include <QDebug>\n\nint CommandLine::parse(QStringList args) {\n    QTextStream stream(stdout);\n\n    QCommandLineParser parser;\n    QCommandLineOption safeOption(\"safe\", tr(\"Start theDesk in Safe Mode\"));\n    parser.addOption(safeOption);\n\n    QCommandLineOption serverOption(\"sessionserver\", tr(\"Internal use; the path to a local socket to communicate with the session manager\"), tr(\"path\"));\n    parser.addOption(serverOption);\n\n    QCommandLineOption helpOption = parser.addHelpOption();\n    QCommandLineOption versionOption = parser.addVersionOption();\n\n    if (!parser.parse(args)) {\n        stream << parser.errorText() << \"\\n\";\n        return 1;\n    }\n\n    if (parser.isSet(helpOption)) {\n        stream << parser.helpText();\n        return 0;\n    }\n\n    if (parser.isSet(versionOption)) {\n        parser.showVersion();\n    }\n\n    if (parser.isSet(safeOption)) {\n        PluginManager::instance()->setSafeMode(true);\n    }\n\n    if (!parser.value(serverOption).isEmpty()) {\n        //Connect to the session server\n        SessionServer::instance()->setServerPath(parser.value(serverOption));\n    }\n\n    return -1;\n}\n"
  },
  {
    "path": "desktop/cli/commandline.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef COMMANDLINE_H\n#define COMMANDLINE_H\n\n#include <QObject>\n\nclass CommandLine : public QObject {\n        Q_OBJECT\n    public:\n        explicit CommandLine(QObject* parent = nullptr);\n\n        static int parse(QStringList args);\n\n    signals:\n\n};\n\n#endif // COMMANDLINE_H\n"
  },
  {
    "path": "desktop/common/common.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"common.h\"\n\nint Common::getInsertionIndex(QStringList preferredOrder, QStringList currentItems, QString item) {\n    //First, check to see if there is a preferred order for this item\n    if (!preferredOrder.contains(item)) {\n        //No preferred order so just add it at the end\n        return -1;\n    }\n\n    //Find where this item is supposed to go\n    int beforeIndex = preferredOrder.indexOf(item) - 1;\n    if (beforeIndex == -1) {\n        //Add this item at the beginning\n        return 0;\n    }\n\n    //Iterate over the currently loaded items and insert the item at the correct place\n    QStringList itemsBefore = preferredOrder.mid(0, beforeIndex + 1);\n    for (int i = currentItems.count() - 1; i >= 0; i--) {\n        if (itemsBefore.contains(currentItems.at(i))) {\n            return i + 1;\n        }\n    }\n\n    //None of the other items were found so just add it at the beginning\n    return 0;\n}\n"
  },
  {
    "path": "desktop/common/common.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef COMMON_H\n#define COMMON_H\n\n#include <QStringList>\n\nnamespace Common {\n    /**\n     * Given a list of items, find the correct index to insert this item into\n     *\n     * @param preferredOrder   The preferred order of items\n     * @param currentItems     The items that are currently in the layout\n     * @param item             The name of the current item\n     * @return                 An index, or -1 to add to the end of the layout\n     */\n    int getInsertionIndex(QStringList preferredOrder, QStringList currentItems, QString item);\n}\n\n#endif // COMMON_H\n"
  },
  {
    "path": "desktop/crash/crashhandling.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2021 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"crashhandling.h\"\n\n#include <tapplication.h>\n#include <QTextStream>\n#include <signal.h>\n#include <string.h>\n#include \"plugins/pluginmanager.h\"\n\nnamespace CrashHandling {\n    void catchSignal(int sig);\n}\n\nvoid CrashHandling::prepareCrashHandler() {\n    signal(SIGSEGV, CrashHandling::catchSignal);\n    signal(SIGBUS, CrashHandling::catchSignal);\n    signal(SIGFPE, CrashHandling::catchSignal);\n}\n\nvoid CrashHandling::catchSignal(int sig) {\n    const QMap<int, QString> signalNames = {\n        {SIGSEGV, \"SIGSEGV\"},\n        {SIGBUS, \"SIGBUS\"},\n        {SIGFPE, \"SIGFPE\"}\n    };\n\n    QTextStream output(stderr);\n    output << \"----- BEGIN CRASH HANDLER -----\\n\";\n    output << \"THEDESK-TRAP: Fatal Signal: \" << signalNames.value(sig) << \"\\n\";\n    output << \"THEDESK-TRAP: \\n\";\n\n    output << \"THEDESK-TRAP: --- LOADED PLUGINS ---\\n\";\n    for (QUuid plugin : PluginManager::instance()->loadedPlugins()) {\n        output << \"THEDESK-TRAP: \" << plugin.toString() << \"\\n\";\n    }\n\n    output << \"THEDESK-TRAP: \\n\";\n    output << \"THEDESK-TRAP: --- BACKTRACE ---\\n\";\n\n    QStringList backtrace = tApplication::exportBacktrace();\n    for (QString line : backtrace) {\n        output << \"THEDESK-TRAP: \" << line << \"\\n\";\n    }\n\n    output.flush();\n\n    signal(sig, SIG_DFL);\n    raise(sig);\n}\n"
  },
  {
    "path": "desktop/crash/crashhandling.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2021 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef CRASHHANDLING_H\n#define CRASHHANDLING_H\n\nnamespace CrashHandling {\n    void prepareCrashHandler();\n}\n\n#endif // CRASHHANDLING_H\n"
  },
  {
    "path": "desktop/desktop.pro",
    "content": "QT       += core gui tdesktopenvironment network multimedia multimediawidgets quickwidgets\n\ngreaterThan(QT_MAJOR_VERSION, 4): QT += widgets\n\nTARGET = thedesk\nCONFIG += c++11\n\n# Include the-libs build tools\ninclude(/usr/share/the-libs/pri/gentranslations.pri)\n\nQMAKE_POST_LINK += $$QMAKE_COPY_DIR $$quote($$PWD/translations) $$shell_quote($$OUT_PWD) && \\\n    $$QMAKE_COPY $$quote($$PWD/defaults.conf) $$shell_quote($$OUT_PWD)\n\n# The following define makes your compiler emit warnings if you use\n# any Qt feature that has been marked deprecated (the exact warnings\n# depend on your compiler). Please consult the documentation of the\n# deprecated API in order to know how to port your code away from it.\nDEFINES += QT_DEPRECATED_WARNINGS\n\n# You can also make your code fail to compile if it uses deprecated APIs.\n# In order to do so, uncomment the following line.\n# You can also select to disable deprecated APIs only up to a certain version of Qt.\nDEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0\n\nSOURCES += \\\n    background/background.cpp \\\n    bar/barwindow.cpp \\\n    bar/chunkcontainer.cpp \\\n    bar/currentappwidget.cpp \\\n    bar/currentappwidgetmenu.cpp \\\n    bar/mainbarwidget.cpp \\\n    bar/taskbarapplicationwidget.cpp \\\n    bar/taskbardesktopwidget.cpp \\\n    bar/taskbarwidget.cpp \\\n    cli/commandline.cpp \\\n    crash/crashhandling.cpp \\\n    gateway/appsearchprovider.cpp \\\n    gateway/appselectionmodel.cpp \\\n    gateway/appselectionmodellistdelegate.cpp \\\n    gateway/gateway.cpp \\\n    gateway/gatewaysearchmodel.cpp \\\n    gateway/gatewaysearchmodeldelegate.cpp \\\n    gateway/maingatewaywidget.cpp \\\n    gateway/searchresultswidget.cpp \\\n    main.cpp \\\n    run/rundialog.cpp \\\n    session/endsession.cpp \\\n    session/endsessionbutton.cpp \\\n    statuscenter/leftpanedelegate.cpp \\\n    statuscenter/statuscenter.cpp \\\n    statuscenter/statuscenterleftpane.cpp \\\n    statuscenter/statuscenterquickswitch.cpp \\\n    systemsettings/about/about.cpp \\\n    systemsettings/about/acknowledgements.cpp \\\n    systemsettings/about/changehostnamepopover.cpp \\\n    systemsettings/pluginmanagement/managepluginpopover.cpp \\\n    systemsettings/pluginmanagement/pluginitemdelegate.cpp \\\n    systemsettings/pluginmanagement/pluginmanagement.cpp \\\n    systemsettings/pluginmanagement/pluginmodel.cpp \\\n    systemsettings/recovery/recovery.cpp \\\n    systemsettings/systemsettings.cpp \\\n    systemsettings/systemsettingsleftpane.cpp\n\nHEADERS += \\\n    background/background.h \\\n    bar/barwindow.h \\\n    bar/chunkcontainer.h \\\n    bar/currentappwidget.h \\\n    bar/currentappwidgetmenu.h \\\n    bar/mainbarwidget.h \\\n    bar/taskbarapplicationwidget.h \\\n    bar/taskbardesktopwidget.h \\\n    bar/taskbarwidget.h \\\n    cli/commandline.h \\\n    crash/crashhandling.h \\\n    gateway/appsearchprovider.h \\\n    gateway/appselectionmodel.h \\\n    gateway/appselectionmodellistdelegate.h \\\n    gateway/gateway.h \\\n    gateway/gatewaysearchmodel.h \\\n    gateway/gatewaysearchmodeldelegate.h \\\n    gateway/maingatewaywidget.h \\\n    gateway/searchresultswidget.h \\\n    run/rundialog.h \\\n    session/endsession.h \\\n    session/endsessionbutton.h \\\n    statuscenter/leftpanedelegate.h \\\n    statuscenter/statuscenter.h \\\n    statuscenter/statuscenterleftpane.h \\\n    statuscenter/statuscenterquickswitch.h \\\n    systemsettings/about/about.h \\\n    systemsettings/about/acknowledgements.h \\\n    systemsettings/about/changehostnamepopover.h \\\n    systemsettings/pluginmanagement/managepluginpopover.h \\\n    systemsettings/pluginmanagement/pluginitemdelegate.h \\\n    systemsettings/pluginmanagement/pluginmanagement.h \\\n    systemsettings/pluginmanagement/pluginmodel.h \\\n    systemsettings/recovery/recovery.h \\\n    systemsettings/systemsettings.h \\\n    systemsettings/systemsettingsleftpane.h\n\nFORMS += \\\n    background/background.ui \\\n    bar/barwindow.ui \\\n    bar/chunkcontainer.ui \\\n    bar/currentappwidget.ui \\\n    bar/currentappwidgetmenu.ui \\\n    bar/mainbarwidget.ui \\\n    bar/taskbardesktopwidget.ui \\\n    bar/taskbarwidget.ui \\\n    gateway/gateway.ui \\\n    gateway/maingatewaywidget.ui \\\n    gateway/searchresultswidget.ui \\\n    run/rundialog.ui \\\n    session/endsession.ui \\\n    statuscenter/statuscenter.ui \\\n    statuscenter/statuscenterleftpane.ui \\\n    statuscenter/statuscenterquickswitch.ui \\\n    systemsettings/about/about.ui \\\n    systemsettings/about/acknowledgements.ui \\\n    systemsettings/about/changehostnamepopover.ui \\\n    systemsettings/pluginmanagement/managepluginpopover.ui \\\n    systemsettings/pluginmanagement/pluginmanagement.ui \\\n    systemsettings/recovery/recovery.ui \\\n    systemsettings/systemsettings.ui \\\n    systemsettings/systemsettingsleftpane.ui\n\nunix {\n    target.path = /usr/bin/\n\n    translations.files = translations/*.qm\n    translations.path = /usr/share/thedesk/translations\n\n    defaults.files = defaults.conf\n    defaults.path = /etc/theSuite/theDesk/\n\n    media.files = media/\n    media.path = /usr/share/thedesk/\n\n    acknowledgements.files = acknowledgements.html\n    acknowledgements.path = /usr/share/thedesk\n\n    INSTALLS += target translations defaults media acknowledgements\n}\n\nDEFINES += SYSTEM_LIBRARY_DIRECTORY=\\\\\\\"$$THELIBS_INSTALL_LIB\\\\\\\"\n\nunix:!macx: LIBS += -L$$OUT_PWD/../libthedesk/ -lthedesk\n\nINCLUDEPATH += $$PWD/../libthedesk\nDEPENDPATH += $$PWD/../libthedesk\n\nRESOURCES += \\\n    resources.qrc\n\nDISTFILES += \\\n    acknowledgements.html \\\n    defaults.conf \\\n    onboarding/OnboardingVideoForm.qml\n"
  },
  {
    "path": "desktop/gateway/appsearchprovider.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2021 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"appsearchprovider.h\"\n\n#include <Applications/application.h>\n#include <QPainter>\n#include <tpaintcalculator.h>\n\nstruct AppSearchProviderPrivate {\n};\n\nAppSearchProvider::AppSearchProvider(QObject* parent) :\n    GatewaySearchProvider(parent) {\n    d = new AppSearchProviderPrivate();\n}\n\nAppSearchProvider::~AppSearchProvider() {\n    delete d;\n}\n\ntPromise<QList<QVariantMap>>* AppSearchProvider::searchResults(QString query) {\n    return TPROMISE_CREATE_SAME_THREAD(QList<QVariantMap>, {\n        Q_UNUSED(rej)\n\n        QList<QVariantMap> results;\n\n        for (const QString& desktopEntry : Application::allApplications()) {\n            ApplicationPointer a(new Application(desktopEntry));\n\n            // Make sure this app is good to be shown\n            if (a->getProperty(\"Type\", \"\").toString() != \"Application\") continue;\n            if (a->getProperty(\"NoDisplay\", false).toBool()) continue;\n            if (!a->getStringList(\"OnlyShowIn\", {\"thedesk\"}).contains(\"thedesk\")) continue;\n            if (a->getStringList(\"NotShowIn\").contains(\"thedesk\")) continue;\n\n            QStringList possibleWords;\n            possibleWords.append(a->getProperty(\"Name\").toString());\n            possibleWords.append(a->getProperty(\"GenericName\").toString());\n            possibleWords.append(a->getStringList(\"Keywords\"));\n\n            for (const QString& s : possibleWords) {\n                if (s.contains(query, Qt::CaseInsensitive)) {\n                    results.append({\n                        {\"application\", a->desktopEntry()                },\n                        {\"mainText\",    a->getProperty(\"Name\").toString()},\n                        {\"priority\",    0                                },\n                        {\"drawArrows\",  false                            }\n                    });\n\n                    for (QString action : a->getStringList(\"Actions\")) {\n                        results.append({\n                            {\"application\", a->desktopEntry()                },\n                            {\"action\",      action                           },\n                            {\"mainText\",    a->getProperty(\"Name\").toString()},\n                            {\"priority\",    0                                },\n                            {\"drawArrows\",  false                            }\n                        });\n                    }\n                    break;\n                }\n            }\n        }\n\n        //                                          if (theLibsGlobal::searchInPath(query.split(\" \")[0]).count() > 0) {\n        //                                              d->appsShown.append(ApplicationPointer(new Application({\n        //                                                  {\"Name\", query},\n        //                                                  {\"Exec\", query},\n        //                                                  {\"GenericName\", tr(\"Run Command\")},\n        //                                                  {\"Icon\", \"system-run\"}\n        //                                              })));\n        //                                          }\n\n        res(results);\n    });\n}\n\nvoid AppSearchProvider::launch(QVariantMap data) {\n    Application app(data.value(\"application\").toString());\n    if (data.contains(\"action\")) {\n        app.launchAction(data.value(\"action\").toString());\n    } else {\n        app.launch();\n    }\n}\n\nvoid AppSearchProvider::paint(QPainter* painter, const QStyleOptionViewItem& option, const QVariantMap data) const {\n    tPaintCalculator calculator = this->calculator(painter, option, data);\n    calculator.setPainter(painter);\n\n    painter->setFont(option.font);\n\n    calculator.performPaint();\n}\n\nQSize AppSearchProvider::sizeHint(const QStyleOptionViewItem& option, const QVariantMap data) const {\n    //    Application app(data.value(\"application\").toString());\n    //    int fontHeight = option.fontMetrics.height() * 2 + SC_DPI(14);\n    //    int iconHeight = SC_DPI(46);\n\n    //    return QSize(option.fontMetrics.horizontalAdvance(app.getProperty(\"Name\").toString()), qMax(fontHeight, iconHeight));\n    return calculator(nullptr, option, data).sizeWithMargins().toSize();\n}\n\ntPaintCalculator AppSearchProvider::calculator(QPainter* painter, const QStyleOptionViewItem& option, const QVariantMap data) const {\n    Application app(data.value(\"application\").toString());\n\n    tPaintCalculator calculator;\n    calculator.setDrawBounds(option.rect);\n    calculator.setLayoutDirection(option.direction);\n\n    QString name;\n    QString genericName;\n    QPixmap icon;\n\n    QRect iconRect;\n    QRect textRect;\n    QRect descRect;\n\n    if (data.contains(\"action\")) {\n        QString action = data.value(\"action\").toString();\n        name = app.getActionProperty(action, \"Name\").toString();\n        icon = app.actionIcon(action, SC_DPI_T(QSize(16, 16), QSize));\n\n        iconRect.setLeft(option.rect.left() + SC_DPI(12));\n        iconRect.setTop(option.rect.top() + SC_DPI(6));\n        iconRect.setSize(icon.size());\n\n        textRect.setHeight(option.fontMetrics.height());\n        textRect.setWidth(option.fontMetrics.horizontalAdvance(name) + 1);\n        textRect.moveCenter(iconRect.center());\n        textRect.moveLeft(iconRect.right() + SC_DPI(6));\n    } else {\n        name = app.getProperty(\"Name\").toString();\n        genericName = app.getProperty(\"GenericName\", tr(\"Application\")).toString();\n        icon = app.icon(SC_DPI_T(QSize(32, 32), QSize));\n\n        iconRect.setLeft(option.rect.left() + SC_DPI(6));\n        iconRect.setTop(option.rect.top() + SC_DPI(6));\n        iconRect.setSize(icon.size());\n\n        textRect.setLeft(iconRect.right() + SC_DPI(6));\n        textRect.setTop(option.rect.top() + SC_DPI(6));\n        textRect.setBottom(option.rect.top() + option.fontMetrics.height() + SC_DPI(6));\n        textRect.setRight(option.rect.right() - SC_DPI(6));\n\n        descRect.setLeft(iconRect.right() + SC_DPI(6));\n        descRect.setTop(option.rect.top() + option.fontMetrics.height() + SC_DPI(8));\n        descRect.setBottom(option.rect.top() + option.fontMetrics.height() * 2 + SC_DPI(6));\n        descRect.setRight(option.rect.right() - SC_DPI(6));\n    }\n\n    if (option.state & QStyle::State_Selected) {\n        calculator.addRect(option.rect, [=](QRectF drawBounds) {\n            painter->setPen(Qt::transparent);\n            painter->setBrush(option.palette.color(QPalette::Highlight));\n            painter->drawRect(drawBounds);\n        });\n        calculator.addRect(textRect, [=](QRectF drawBounds) {\n            painter->setBrush(Qt::transparent);\n            painter->setPen(option.palette.color(QPalette::HighlightedText));\n            painter->drawText(drawBounds, Qt::AlignLeading, name);\n        });\n        calculator.addRect(descRect, [=](QRectF drawBounds) {\n            painter->drawText(drawBounds, Qt::AlignLeading, genericName);\n        });\n    } else if (option.state & QStyle::State_MouseOver) {\n        calculator.addRect(option.rect, [=](QRectF drawBounds) {\n            QColor col = option.palette.color(QPalette::Highlight);\n            col.setAlpha(127);\n            painter->setBrush(col);\n            painter->setPen(Qt::transparent);\n            painter->drawRect(drawBounds);\n        });\n        calculator.addRect(textRect, [=](QRectF drawBounds) {\n            painter->setBrush(Qt::transparent);\n            painter->setPen(option.palette.color(QPalette::WindowText));\n            painter->drawText(drawBounds, Qt::AlignLeading, name);\n        });\n        calculator.addRect(descRect, [=](QRectF drawBounds) {\n            painter->setPen(option.palette.color(QPalette::Disabled, QPalette::WindowText));\n            painter->drawText(drawBounds, Qt::AlignLeading, genericName);\n        });\n    } else {\n        calculator.addRect(textRect, [=](QRectF drawBounds) {\n            painter->setPen(option.palette.color(QPalette::WindowText));\n            painter->drawText(drawBounds, Qt::AlignLeading, name);\n        });\n        calculator.addRect(descRect, [=](QRectF drawBounds) {\n            painter->setPen(option.palette.color(QPalette::Disabled, QPalette::WindowText));\n            painter->drawText(drawBounds, Qt::AlignLeading, genericName);\n        });\n    }\n\n    calculator.addRect(iconRect, [=](QRectF drawBounds) {\n        painter->drawPixmap(drawBounds.toRect(), icon);\n    });\n\n    if (data.value(\"drawArrows\", true).toBool()) {\n        if (app.getStringList(\"Actions\").count() > 0) { // Actions included\n            QRect actionsRect;\n            actionsRect.setWidth(SC_DPI(16));\n            actionsRect.setHeight(SC_DPI(16));\n            actionsRect.moveCenter(iconRect.center());\n            actionsRect.moveRight(option.rect.right() - SC_DPI(9));\n\n            calculator.addRect(actionsRect, [=](QRectF drawBounds) {\n                painter->drawPixmap(drawBounds.toRect(), QIcon::fromTheme(\"arrow-right\").pixmap(SC_DPI_T(QSize(16, 16), QSize)));\n            });\n        }\n    }\n\n    return calculator;\n}\n"
  },
  {
    "path": "desktop/gateway/appsearchprovider.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2021 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef APPSEARCHPROVIDER_H\n#define APPSEARCHPROVIDER_H\n\n#include <gatewaysearchprovider.h>\n\nclass tPaintCalculator;\nstruct AppSearchProviderPrivate;\nclass AppSearchProvider : public GatewaySearchProvider {\n        Q_OBJECT\n    public:\n        explicit AppSearchProvider(QObject* parent = nullptr);\n        ~AppSearchProvider();\n\n        tPromise<QList<QVariantMap>>* searchResults(QString query);\n        void launch(QVariantMap data);\n        void paint(QPainter* painter, const QStyleOptionViewItem& option, const QVariantMap data) const;\n        QSize sizeHint(const QStyleOptionViewItem& option, const QVariantMap data) const;\n\n        tPaintCalculator calculator(QPainter* painter, const QStyleOptionViewItem& option, const QVariantMap data) const;\n\n    signals:\n\n    private:\n        AppSearchProviderPrivate* d;\n\n};\n\n#endif // APPSEARCHPROVIDER_H\n"
  },
  {
    "path": "desktop/gateway/appselectionmodel.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"appselectionmodel.h\"\n\n#include <Applications/application.h>\n#include <libcontemporary_global.h>\n#include <tpromise.h>\n\nstruct AppSelectionModelPrivate {\n        QString category;\n\n        QList<ApplicationPointer> apps;\n        QList<ApplicationPointer> appsShown;\n};\n\nAppSelectionModel::AppSelectionModel(QObject* parent) :\n    QAbstractListModel(parent) {\n    d = new AppSelectionModelPrivate();\n    connect(ApplicationDaemon::instance(), &ApplicationDaemon::appsUpdateRequired, this, &AppSelectionModel::updateData);\n    updateData();\n}\n\nAppSelectionModel::~AppSelectionModel() {\n    delete d;\n}\n\nint AppSelectionModel::rowCount(const QModelIndex& parent) const {\n    if (parent.isValid()) return 0;\n\n    return d->appsShown.count();\n}\n\nQVariant AppSelectionModel::data(const QModelIndex& index, int role) const {\n    if (!index.isValid()) return QVariant();\n\n    ApplicationPointer a = d->appsShown.at(index.row());\n    if (d->appsShown.count() > index.row()) {\n        if (role == Qt::DisplayRole) {\n            return a->getProperty(\"Name\", a->desktopEntry());\n        } else if (role == Qt::DecorationRole) {\n            // Cache the icon for smooth scrolling\n            return a->icon(SC_DPI_T(QSize(32, 32), QSize));\n        } else if (role == Qt::UserRole) { // Description\n            return a->getProperty(\"GenericName\", tr(\"Application\"));\n        } else if (role == Qt::UserRole + 1) { // Pinned\n            //            return d->pinnedAppsList.contains(a->desktopEntry());\n            return false;\n        } else if (role == Qt::UserRole + 2) { // Desktop Entry\n            return a->desktopEntry();\n        } else if (role == Qt::UserRole + 3) { // App\n            return QVariant::fromValue(a);\n        }\n    }\n\n    return QVariant();\n}\n\nvoid AppSelectionModel::filterCategory(QString category) {\n    d->category = category;\n    d->appsShown.clear();\n\n    // If there is no current category, show all apps\n    if (category == \"\") {\n        d->appsShown.append(d->apps);\n        emit dataChanged(index(0), index(rowCount()));\n        return;\n    }\n\n    for (ApplicationPointer app : qAsConst(d->apps)) {\n        QStringList categories = app->getStringList(\"Categories\");\n\n        if (categories.contains(category, Qt::CaseSensitive)) d->appsShown.append(app);\n    }\n\n    emit dataChanged(index(0), index(rowCount()));\n}\n\nvoid AppSelectionModel::updateData() {\n    emit loading();\n    d->apps.clear();\n\n    struct ApplicationListReturnValue {\n            QList<ApplicationPointer> apps;\n            QMap<ApplicationPointer, QPixmap> appIcons;\n    };\n\n    (new tPromise<QList<ApplicationPointer>>([=](QString& error) {\n        QList<ApplicationPointer> apps;\n\n        QList<ApplicationPointer> normalApps;\n        for (QString desktopEntry : Application::allApplications()) {\n            ApplicationPointer a(new Application(desktopEntry));\n\n            // Make sure this app is good to be shown\n            if (a->getProperty(\"Type\", \"\").toString() != \"Application\") continue;\n            if (a->getProperty(\"NoDisplay\", false).toBool()) continue;\n            if (!a->getStringList(\"OnlyShowIn\", {\"thedesk\"}).contains(\"thedesk\")) continue;\n            if (a->getStringList(\"NotShowIn\").contains(\"thedesk\")) continue;\n            normalApps.append(a);\n        }\n\n        std::sort(normalApps.begin(), normalApps.end(), [](const ApplicationPointer& a, const ApplicationPointer& b) -> bool {\n            if (a->getProperty(\"Name\").toString().localeAwareCompare(b->getProperty(\"Name\").toString()) < 0) {\n                return true;\n            } else {\n                return false;\n            }\n        });\n        apps.append(normalApps);\n\n        return apps;\n    }))->then([=](QList<ApplicationPointer> apps) {\n        d->apps = apps;\n\n        // Perform a category search to initialize the list\n        filterCategory(d->category);\n        emit ready();\n    });\n}\n"
  },
  {
    "path": "desktop/gateway/appselectionmodel.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef APPSELECTIONMODEL_H\n#define APPSELECTIONMODEL_H\n\n#include <QAbstractListModel>\n\nstruct AppSelectionModelPrivate;\nclass AppSelectionModel : public QAbstractListModel {\n        Q_OBJECT\n\n    public:\n        explicit AppSelectionModel(QObject* parent = nullptr);\n        ~AppSelectionModel() override;\n\n        // Basic functionality:\n        int rowCount(const QModelIndex& parent = QModelIndex()) const override;\n        QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const override;\n\n        void filterCategory(QString category);\n\n    signals:\n        void loading();\n        void ready();\n\n    private:\n        AppSelectionModelPrivate* d;\n\n        void updateData();\n};\n\n\n\n#endif // APPSELECTIONMODEL_H\n"
  },
  {
    "path": "desktop/gateway/appselectionmodellistdelegate.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"appselectionmodellistdelegate.h\"\n\n#include \"appsearchprovider.h\"\n#include <Applications/application.h>\n#include <QPainter>\n#include <libcontemporary_global.h>\n\nAppSelectionModelListDelegate::AppSelectionModelListDelegate(QWidget* parent, bool drawArrows) :\n    QStyledItemDelegate(parent) {\n    this->drawArrows = drawArrows;\n}\n\nvoid AppSelectionModelListDelegate::paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const {\n    AppSearchProvider provider;\n    return provider.paint(painter, option, {\n                                               {\"application\", index.data(Qt::UserRole + 2).toString()},\n                                               {\"drawArrows\",  this->drawArrows                       }\n    });\n}\n\nQSize AppSelectionModelListDelegate::sizeHint(const QStyleOptionViewItem& option, const QModelIndex& index) const {\n    AppSearchProvider provider;\n    return provider.sizeHint(option, {\n                                         {\"application\", index.data(Qt::UserRole + 2).toString()}\n    });\n}\n"
  },
  {
    "path": "desktop/gateway/appselectionmodellistdelegate.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef APPSELECTIONMODELLISTDELEGATE_H\n#define APPSELECTIONMODELLISTDELEGATE_H\n\n#include <QStyledItemDelegate>\n\nclass AppSelectionModelListDelegate : public QStyledItemDelegate {\n        Q_OBJECT\n\n    public:\n        AppSelectionModelListDelegate(QWidget* parent = nullptr, bool drawArrows = true);\n        void paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const;\n        QSize sizeHint(const QStyleOptionViewItem& option, const QModelIndex& index) const;\n\n    private:\n        bool drawArrows;\n};\n\n\n#endif // APPSELECTIONMODELLISTDELEGATE_H\n"
  },
  {
    "path": "desktop/gateway/gateway.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"gateway.h\"\n#include \"ui_gateway.h\"\n\n#include <Gestures/gesturedaemon.h>\n#include <QPainter>\n#include <QScreen>\n#include <QWindow>\n#include <Screens/screendaemon.h>\n#include <Screens/systemscreen.h>\n#include <Wm/desktopwm.h>\n#include <tvariantanimation.h>\n\n#include <tsettings.h>\n\n#include <gatewaymanager.h>\n#include <statemanager.h>\n\nstruct GatewayPrivate {\n        Gateway* instance = nullptr;\n\n        tVariantAnimation* width;\n\n        GestureInteractionPtr lastGesture;\n};\n\nGatewayPrivate* Gateway::d = new GatewayPrivate();\n\nGateway::Gateway() :\n    QDialog(nullptr),\n    ui(new Ui::Gateway) {\n    ui->setupUi(this);\n\n    ui->gatewayContainer->move(0, 0);\n    connect(ui->gatewayContainer, &MainGatewayWidget::closeGateway, this, [=] {\n        this->close();\n    });\n\n    d->width = new tVariantAnimation();\n    d->width->setDuration(500);\n    connect(d->width, &tVariantAnimation::valueChanged, this, [=](QVariant value) {\n        this->setFixedWidth(value.toInt());\n        auto* screen = ScreenDaemon::instance()->primayScreen();\n        QRect geometry;\n        geometry.setHeight(this->height());\n        geometry.setWidth(value.toInt());\n        if (this->layoutDirection() == Qt::RightToLeft) {\n            geometry.moveTopRight(screen->geometry().topRight());\n        } else {\n            geometry.moveTopLeft(screen->geometry().topLeft());\n        }\n        this->setGeometry(geometry);\n    });\n    connect(d->width, &tVariantAnimation::finished, this, [=] {\n        if (d->lastGesture && d->lastGesture->isActive()) return;\n        if (this->geometry().width() == 0) {\n            QDialog::hide();\n            ui->gatewayContainer->clearState();\n        }\n    });\n\n    this->setWindowFlags(Qt::Dialog | Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint);\n    DesktopWm::setSystemWindow(this, DesktopWm::SystemWindowTypeMenu);\n    this->setFixedWidth(0);\n\n    connect(GestureDaemon::instance(), &GestureDaemon::gestureBegin, this, [=](GestureInteractionPtr interaction) {\n        if (interaction->isValidInteraction(GestureTypes::Swipe, this->layoutDirection() == Qt::RightToLeft ? GestureTypes::Left : GestureTypes::Right, 3)) {\n            trackGatewayOpenGesture(interaction);\n        } else if (interaction->isValidInteraction(GestureTypes::Swipe, this->layoutDirection() == Qt::RightToLeft ? GestureTypes::Right : GestureTypes::Left, 3)) {\n            trackGatewayCloseGesture(interaction);\n        }\n    });\n\n    ui->line->raise();\n}\n\nvoid Gateway::resizeEvent(QResizeEvent* event) {\n    ui->gatewayContainer->setFixedSize(ui->gatewayContainer->sizeHint().width(), this->height());\n\n    if (this->layoutDirection() == Qt::RightToLeft) {\n        ui->gatewayContainer->move(1, 0);\n        ui->line->setGeometry(0, 0, 1, this->height());\n    } else {\n        ui->gatewayContainer->move(this->geometry().width() - ui->gatewayContainer->width() - 1, 0);\n        ui->line->setGeometry(this->geometry().width() - 1, 0, 1, this->height());\n    }\n    StateManager::gatewayManager()->setGatewayWidth(this->geometry().width());\n}\n\nvoid Gateway::changeEvent(QEvent* event) {\n    QDialog::changeEvent(event);\n    switch (event->type()) {\n        case QEvent::ActivationChange:\n            if (!this->isActiveWindow()) this->close();\n            break;\n        default:;\n    }\n}\n\nvoid Gateway::trackGatewayOpenGesture(GestureInteractionPtr gesture) {\n    if (this->isVisible()) return;\n\n    // Capture this gesture!\n    d->lastGesture = gesture;\n\n    auto* screen = ScreenDaemon::instance()->primayScreen();\n    this->setFixedHeight(screen->geometry().height());\n    d->width->setEasingCurve(QEasingCurve::Linear);\n    d->width->setCurrentTime(0);\n    d->width->setStartValue(0);\n    d->width->setEndValue(ui->gatewayContainer->sizeHint().width() + 1);\n\n    connect(gesture.data(), &GestureInteraction::interactionUpdated, this, [=] {\n        d->width->setCurrentTime(d->width->totalDuration() * gesture->percentage());\n        d->width->valueChanged(d->width->currentValue());\n    });\n    connect(gesture.data(), &GestureInteraction::interactionEnded, this, [=] {\n        if (gesture->extrapolatePercentage(100) > 0.3) {\n            show();\n        } else {\n            close();\n        }\n    });\n\n    QDialog::show();\n}\n\nvoid Gateway::trackGatewayCloseGesture(GestureInteractionPtr gesture) {\n    if (!this->isVisible()) return;\n\n    // Capture this gesture!\n    d->lastGesture = gesture;\n\n    auto* screen = ScreenDaemon::instance()->primayScreen();\n    this->setFixedHeight(screen->geometry().height());\n    d->width->setEasingCurve(QEasingCurve::Linear);\n    d->width->setCurrentTime(0);\n    d->width->setStartValue(ui->gatewayContainer->sizeHint().width() + 1);\n    d->width->setEndValue(0);\n\n    connect(gesture.data(), &GestureInteraction::interactionUpdated, this, [=] {\n        d->width->setCurrentTime(d->width->totalDuration() * gesture->percentage());\n        d->width->valueChanged(d->width->currentValue());\n    });\n    connect(gesture.data(), &GestureInteraction::interactionEnded, this, [=] {\n        if (gesture->extrapolatePercentage(100) > 0.3) {\n            close();\n        } else {\n            show();\n        }\n    });\n}\n\nGateway::~Gateway() {\n    delete ui;\n}\n\nGateway* Gateway::instance() {\n    if (!d->instance) d->instance = new Gateway();\n    return d->instance;\n}\n\nvoid Gateway::setFixedHeight(int height) {\n    QWidget::setFixedHeight(height);\n\n    // Work around a Qt bug that causes the native window not to be updated on Wayland for some reason\n    this->windowHandle()->setGeometry(this->geometry());\n}\n\nvoid Gateway::setFixedWidth(int width) {\n    QWidget::setFixedWidth(width);\n\n    // Work around a Qt bug that causes the native window not to be updated on Wayland for some reason\n    this->windowHandle()->setGeometry(this->geometry());\n}\n\nvoid Gateway::show() {\n    auto* screen = ScreenDaemon::instance()->primayScreen();\n    this->setFixedHeight(screen->geometry().height());\n\n    d->width->setEasingCurve(QEasingCurve::OutCubic);\n    d->width->setStartValue(this->geometry().width());\n    d->width->setEndValue(ui->gatewayContainer->sizeHint().width() + 1);\n    d->width->stop();\n    d->width->start();\n\n    QDialog::show();\n    QDialog::activateWindow();\n    ui->gatewayContainer->setFocus();\n\n    DesktopWm::setSystemWindow(this, DesktopWm::SystemWindowTypeMenu);\n}\n\nvoid Gateway::close() {\n    d->width->setEasingCurve(QEasingCurve::OutCubic);\n    d->width->setStartValue(this->geometry().width());\n    d->width->setEndValue(0);\n    d->width->stop();\n    d->width->start();\n}\n"
  },
  {
    "path": "desktop/gateway/gateway.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef GATEWAY_H\n#define GATEWAY_H\n\n#include <Gestures/gestureinteraction.h>\n#include <QDialog>\n\nnamespace Ui {\n    class Gateway;\n}\n\nstruct GatewayPrivate;\nclass Gateway : public QDialog {\n        Q_OBJECT\n\n    public:\n        ~Gateway();\n\n        static Gateway* instance();\n\n        void setFixedHeight(int height);\n        void setFixedWidth(int width);\n\n        void show();\n        void close();\n\n    private:\n        explicit Gateway();\n\n        Ui::Gateway* ui;\n        static GatewayPrivate* d;\n\n        void resizeEvent(QResizeEvent* event);\n        void changeEvent(QEvent* event);\n\n        void trackGatewayOpenGesture(GestureInteractionPtr gesture);\n        void trackGatewayCloseGesture(GestureInteractionPtr gesture);\n};\n\n#endif // GATEWAY_H\n"
  },
  {
    "path": "desktop/gateway/gateway.ui",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ui version=\"4.0\">\n <class>Gateway</class>\n <widget class=\"QDialog\" name=\"Gateway\">\n  <property name=\"geometry\">\n   <rect>\n    <x>0</x>\n    <y>0</y>\n    <width>400</width>\n    <height>300</height>\n   </rect>\n  </property>\n  <property name=\"windowTitle\">\n   <string notr=\"true\">Dialog</string>\n  </property>\n  <widget class=\"MainGatewayWidget\" name=\"gatewayContainer\" native=\"true\">\n   <property name=\"geometry\">\n    <rect>\n     <x>50</x>\n     <y>20</y>\n     <width>120</width>\n     <height>80</height>\n    </rect>\n   </property>\n  </widget>\n  <widget class=\"Line\" name=\"line\">\n   <property name=\"geometry\">\n    <rect>\n     <x>370</x>\n     <y>80</y>\n     <width>1</width>\n     <height>61</height>\n    </rect>\n   </property>\n   <property name=\"maximumSize\">\n    <size>\n     <width>1</width>\n     <height>16777215</height>\n    </size>\n   </property>\n   <property name=\"orientation\">\n    <enum>Qt::Vertical</enum>\n   </property>\n  </widget>\n </widget>\n <customwidgets>\n  <customwidget>\n   <class>MainGatewayWidget</class>\n   <extends>QWidget</extends>\n   <header>gateway/maingatewaywidget.h</header>\n   <container>1</container>\n  </customwidget>\n </customwidgets>\n <resources/>\n <connections/>\n</ui>\n"
  },
  {
    "path": "desktop/gateway/gatewaysearchmodel.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2021 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"gatewaysearchmodel.h\"\n\n#include <statemanager.h>\n#include <gatewaymanager.h>\n#include <gatewaysearchprovider.h>\n\nstruct GatewaySearchModelPrivate {\n    QString query;\n    QList<QVariantMap> currentItems;\n};\n\nGatewaySearchModel::GatewaySearchModel(QObject* parent)\n    : QAbstractListModel(parent) {\n    d = new GatewaySearchModelPrivate();\n}\n\nGatewaySearchModel::~GatewaySearchModel() {\n    delete d;\n}\n\nvoid GatewaySearchModel::search(QString query) {\n    d->currentItems.clear();\n    d->query = query;\n    for (GatewaySearchProvider* searchProvider : StateManager::gatewayManager()->searchProviders()) {\n        searchProvider->searchResults(query)->then([ = ](QList<QVariantMap> results) {\n            if (d->query != query) return;\n\n            QList<QVariantMap> endResults;\n            for (QVariantMap result : results) {\n                endResults.append({\n                    {\"provider\", QVariant::fromValue(searchProvider)},\n                    {\"data\", result},\n                    {\"priority\", result.value(\"priority\", 1)},\n                    {\"mainText\", result.value(\"mainText\", \"\")}\n                });\n            }\n            d->currentItems.append(endResults);\n\n            //Sort the items\n            std::stable_sort(d->currentItems.begin(), d->currentItems.end(), [ = ](const QVariantMap first, const QVariantMap second) {\n                if (first.value(\"priority\") == second.value(\"priority\")) {\n                    return first.value(\"mainText\").toString().localeAwareCompare(second.value(\"mainText\").toString()) < 0;\n                }\n                return first.value(\"priority\").toInt() < second.value(\"priority\").toInt();\n            });\n\n            emit dataChanged(index(0), index(rowCount()));\n        });\n    }\n}\n\nint GatewaySearchModel::rowCount(const QModelIndex& parent) const {\n    if (parent.isValid()) return 0;\n    return d->currentItems.count();\n}\n\nQVariant GatewaySearchModel::data(const QModelIndex& index, int role) const {\n    if (!index.isValid()) return QVariant();\n\n    if (d->currentItems.length() <= index.row()) return QVariant();\n\n    switch (role) {\n        case Qt::UserRole:\n            return d->currentItems.at(index.row()).value(\"data\");\n        case Qt::UserRole + 1:\n            return d->currentItems.at(index.row()).value(\"provider\");\n    }\n\n    return QVariant();\n}\n\nvoid GatewaySearchModel::launch(const QModelIndex& index) const {\n    GatewaySearchProvider* provider = index.data(Qt::UserRole + 1).value<GatewaySearchProvider*>();\n    provider->launch(index.data(Qt::UserRole).toMap());\n}\n"
  },
  {
    "path": "desktop/gateway/gatewaysearchmodel.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2021 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef GATEWAYSEARCHMODEL_H\n#define GATEWAYSEARCHMODEL_H\n\n#include <QAbstractListModel>\n\nstruct GatewaySearchModelPrivate;\nclass GatewaySearchModel : public QAbstractListModel {\n        Q_OBJECT\n\n    public:\n        explicit GatewaySearchModel(QObject* parent = nullptr);\n        ~GatewaySearchModel();\n\n        void search(QString query);\n\n        // Basic functionality:\n        int rowCount(const QModelIndex& parent = QModelIndex()) const override;\n        QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const override;\n\n        void launch(const QModelIndex& index) const;\n\n    private:\n        GatewaySearchModelPrivate* d;\n};\n\n#endif // GATEWAYSEARCHMODEL_H\n"
  },
  {
    "path": "desktop/gateway/gatewaysearchmodeldelegate.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2021 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"gatewaysearchmodeldelegate.h\"\n\n#include <gatewaysearchprovider.h>\n\nGatewaySearchModelDelegate::GatewaySearchModelDelegate(QObject* parent) : QStyledItemDelegate(parent) {\n\n}\n\nvoid GatewaySearchModelDelegate::paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const {\n    GatewaySearchProvider* provider = index.data(Qt::UserRole + 1).value<GatewaySearchProvider*>();\n    return provider->paint(painter, option, index.data(Qt::UserRole).toMap());\n}\n\nQSize GatewaySearchModelDelegate::sizeHint(const QStyleOptionViewItem& option, const QModelIndex& index) const {\n    GatewaySearchProvider* provider = index.data(Qt::UserRole + 1).value<GatewaySearchProvider*>();\n    return provider->sizeHint(option, index.data(Qt::UserRole).toMap());\n}\n"
  },
  {
    "path": "desktop/gateway/gatewaysearchmodeldelegate.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2021 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef GATEWAYSEARCHMODELDELEGATE_H\n#define GATEWAYSEARCHMODELDELEGATE_H\n\n#include <QStyledItemDelegate>\n\nclass GatewaySearchModelDelegate : public QStyledItemDelegate {\n        Q_OBJECT\n    public:\n        explicit GatewaySearchModelDelegate(QObject* parent = nullptr);\n\n    signals:\n\n\n        // QAbstractItemDelegate interface\n    public:\n        void paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const;\n        QSize sizeHint(const QStyleOptionViewItem& option, const QModelIndex& index) const;\n};\n\n#endif // GATEWAYSEARCHMODELDELEGATE_H\n"
  },
  {
    "path": "desktop/gateway/maingatewaywidget.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"maingatewaywidget.h\"\n#include \"ui_maingatewaywidget.h\"\n\n#include <Wm/desktopwm.h>\n#include <QScroller>\n#include <tvariantanimation.h>\n#include <Applications/application.h>\n#include \"appselectionmodel.h\"\n#include \"appselectionmodellistdelegate.h\"\n#include \"session/endsession.h\"\n#include <statemanager.h>\n#include <powermanager.h>\n#include <tscrim.h>\n#include \"searchresultswidget.h\"\n#include <statuscentermanager.h>\n#include <QShortcut>\n#include <QMenu>\n\nstruct MainGatewayWidgetPrivate {\n    AppSelectionModel* model;\n\n    SearchResultsWidget* searchWidget;\n};\n\nMainGatewayWidget::MainGatewayWidget(QWidget* parent) :\n    QWidget(parent),\n    ui(new Ui::MainGatewayWidget) {\n    ui->setupUi(this);\n\n    d = new MainGatewayWidgetPrivate();\n    d->model = new AppSelectionModel(this);\n    connect(d->model, &AppSelectionModel::loading, this, [ = ] {\n        ui->gatewayTypeStack->setCurrentWidget(ui->gatewayLoading);\n    });\n    connect(d->model, &AppSelectionModel::ready, this, [ = ] {\n        QTimer::singleShot(500, [ = ] {\n            ui->gatewayTypeStack->setCurrentWidget(ui->gatewayList);\n        });\n    });\n    ui->gatewayTypeStack->setCurrentWidget(ui->gatewayLoading);\n    ui->gatewayTypeStack->setCurrentAnimation(tStackedWidget::Fade);\n\n    ui->titleLabel->setBackButtonShown(true);\n    ui->leftPane->setFixedWidth(SC_DPI(200));\n\n//    ui->usernameLabel->setText(tr(\"Hey, %1!\").arg(DesktopWm::userDisplayName()));\n    ui->usernameLabel->setText(DesktopWm::userDisplayName());\n\n    ui->appsList->setModel(d->model);\n    ui->appsList->setItemDelegate(new AppSelectionModelListDelegate(this, true));\n    ui->appsList->setFocusProxy(ui->searchBox);\n    QScroller::grabGesture(ui->appsList->viewport(), QScroller::LeftMouseButtonGesture);\n\n    this->setFocusProxy(ui->searchBox);\n    ui->endSessionButton->setFocusProxy(ui->searchBox);\n\n    d->searchWidget = new SearchResultsWidget(ui->searchResultsContainer);\n    d->searchWidget->move(0, 0);\n    d->searchWidget->hide();\n    connect(d->searchWidget, &SearchResultsWidget::closeGateway, this, &MainGatewayWidget::closeGateway);\n\n    connect(tScrim::scrimForWidget(ui->appContentsWidget), &tScrim::scrimClicked, this, [ = ] {\n        ui->searchBox->setText(\"\");\n        tScrim::scrimForWidget(ui->appContentsWidget)->hide();\n        d->searchWidget->hide();\n    });\n\n    QList<QPair<QString, QString>> categories = {\n        {\"AudioVideo\", tr(\"A/V\")},\n        {\"Development\", tr(\"Development\")},\n        {\"Education\", tr(\"Education\")},\n        {\"Game\", tr(\"Games\")},\n        {\"Graphics\", tr(\"Graphics\")},\n        {\"Network\", tr(\"Networking\")},\n        {\"Office\", tr(\"Office\")},\n        {\"Science\", tr(\"Science\")},\n        {\"Utility\", tr(\"Utilities\")}\n    };\n\n    std::sort(categories.begin(), categories.end(), [ = ](const QPair<QString, QString>& first, const QPair<QString, QString>& second) {\n        return first.second.localeAwareCompare(second.second) < 0;\n    });\n\n    for (const QPair<QString, QString>& category : categories) {\n        QPushButton* button = new QPushButton(this);\n        button->setAutoExclusive(true);\n        button->setCheckable(true);\n        button->setText(category.second);\n        connect(button, &QPushButton::toggled, this, [ = ](bool checked) {\n            if (checked) d->model->filterCategory(category.first);\n        });\n        ui->categoriesLayout->addWidget(button);\n    }\n\n    ui->searchBox->installEventFilter(this);\n}\n\nMainGatewayWidget::~MainGatewayWidget() {\n    delete d;\n    delete ui;\n}\n\nQSize MainGatewayWidget::sizeHint() const {\n    QSize sizeHint = QWidget::sizeHint();\n    sizeHint.setWidth(SC_DPI(400));\n    sizeHint.setWidth(SC_DPI(700));\n    return sizeHint;\n}\n\nvoid MainGatewayWidget::clearState() {\n    ui->searchBox->setText(\"\");\n    tScrim::scrimForWidget(ui->appContentsWidget)->hide();\n    d->searchWidget->hide();\n    ui->allAppsButton->setChecked(true);\n}\n\nvoid MainGatewayWidget::on_searchBox_textEdited(const QString& arg1) {\n    if (arg1.isEmpty()) {\n        tScrim::scrimForWidget(ui->appContentsWidget)->hide();\n        d->searchWidget->hide();\n    } else {\n        tScrim::scrimForWidget(ui->appContentsWidget)->show();\n        d->searchWidget->show();\n    }\n    d->searchWidget->search(arg1);\n}\n\nvoid MainGatewayWidget::on_appsList_clicked(const QModelIndex& index) {\n    int x = ui->appsList->mapFromGlobal(QCursor::pos()).x();\n    if ((this->layoutDirection() == Qt::RightToLeft && x < SC_DPI(32)) ||\n        (this->layoutDirection() == Qt::LeftToRight && x > ui->appsList->width() - SC_DPI(32))) {\n        if (showActionMenu(index)) return;\n    }\n    launch(index);\n}\n\nvoid MainGatewayWidget::on_searchBox_returnPressed() {\n    if (!ui->searchBox->text().isEmpty()) d->searchWidget->launchSelected();\n}\n\nvoid MainGatewayWidget::launch(QModelIndex applicationIndex) {\n    applicationIndex.data(Qt::UserRole + 3).value<ApplicationPointer>()->launch();\n    emit closeGateway();\n}\n\nbool MainGatewayWidget::showActionMenu(QModelIndex applicationIndex) {\n    ApplicationPointer application = applicationIndex.data(Qt::UserRole + 3).value<ApplicationPointer>();\n    if (application->getStringList(\"Actions\").isEmpty()) return false;\n\n    QMenu* menu = new QMenu();\n    menu->addSection(tr(\"Actions for %1\").arg(QLocale().quoteString(application->getProperty(\"Name\").toString())));\n    for (const QString& action : application->getStringList(\"Actions\")) {\n        menu->addAction(application->actionIcon(action), application->getActionProperty(action, \"Name\").toString(), this, [ = ] {\n            application->launchAction(action);\n            emit closeGateway();\n        });\n    }\n\n    connect(menu, &QMenu::aboutToHide, menu, &QMenu::deleteLater);\n\n    QRect rect = ui->appsList->visualRect(applicationIndex);\n    if (layoutDirection() == Qt::RightToLeft) {\n        menu->popup(ui->appsList->mapToGlobal(rect.topLeft()));\n    } else {\n        menu->popup(ui->appsList->mapToGlobal(rect.topRight()));\n    }\n    return true;\n}\n\nvoid MainGatewayWidget::changeEvent(QEvent* event) {\n    if (event->type() == QEvent::LanguageChange) {\n        ui->retranslateUi(this);\n    }\n}\n\nvoid MainGatewayWidget::resizeEvent(QResizeEvent* event) {\n    d->searchWidget->setFixedWidth(this->width());\n}\n\nvoid MainGatewayWidget::on_endSessionButton_clicked() {\n    StateManager::instance()->powerManager()->showPowerOffConfirmation();\n}\n\nvoid MainGatewayWidget::on_allAppsButton_toggled(bool checked) {\n    if (checked) d->model->filterCategory(\"\");\n}\n\nvoid MainGatewayWidget::on_titleLabel_backButtonClicked() {\n    emit closeGateway();\n}\n\nvoid MainGatewayWidget::on_statusCenterButton_clicked() {\n    StateManager::statusCenterManager()->show();\n    emit closeGateway();\n}\n\nvoid MainGatewayWidget::on_systemSettingsButton_clicked() {\n    StateManager::statusCenterManager()->show();\n    StateManager::statusCenterManager()->setPane(\"SystemSettings\");\n    emit closeGateway();\n}\n\n\nbool MainGatewayWidget::eventFilter(QObject* watched, QEvent* event) {\n    if (watched == ui->searchBox) {\n        if (event->type() == QEvent::KeyPress) {\n            QKeyEvent* keyEvent = static_cast<QKeyEvent*>(event);\n            if (keyEvent->key() == Qt::Key_Down) {\n                if (ui->searchBox->text().isEmpty()) {\n                    QItemSelectionModel* selectionModel = ui->appsList->selectionModel();\n                    int selectionRow = 0;\n                    if (selectionModel->hasSelection()) {\n                        int row = selectionModel->selectedIndexes().first().row();\n                        if (row != d->model->rowCount() - 1) selectionRow = row + 1;\n                    }\n                    selectionModel->select(d->model->index(selectionRow), QItemSelectionModel::ClearAndSelect);\n                    ui->appsList->scrollTo(d->model->index(selectionRow), QListView::PositionAtCenter);\n                } else {\n                    d->searchWidget->moveSelectionDown();\n                }\n                return true;\n            } else if (keyEvent->key() == Qt::Key_Up) {\n                if (ui->searchBox->text().isEmpty()) {\n                    QItemSelectionModel* selectionModel = ui->appsList->selectionModel();\n                    int selectionRow = d->model->rowCount() - 1;\n                    if (selectionModel->hasSelection()) {\n                        int row = selectionModel->selectedIndexes().first().row();\n                        if (row != 0) selectionRow = row - 1;\n                    }\n                    selectionModel->select(d->model->index(selectionRow), QItemSelectionModel::ClearAndSelect);\n                    ui->appsList->scrollTo(d->model->index(selectionRow), QListView::PositionAtCenter);\n                } else {\n                    d->searchWidget->moveSelectionUp();\n                }\n                return true;\n            } else if ((layoutDirection() == Qt::LeftToRight && keyEvent->key() == Qt::Key_Right) ||\n                (layoutDirection() == Qt::RightToLeft && keyEvent->key() == Qt::Key_Left)) {\n                if (ui->searchBox->text().isEmpty()) {\n                    QItemSelectionModel* selectionModel = ui->appsList->selectionModel();\n                    if (selectionModel->hasSelection()) {\n                        showActionMenu(selectionModel->selectedIndexes().first());\n                    }\n                    return true;\n                }\n            }\n        }\n    }\n    return false;\n}\n"
  },
  {
    "path": "desktop/gateway/maingatewaywidget.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef MAINGATEWAYWIDGET_H\n#define MAINGATEWAYWIDGET_H\n\n#include <QWidget>\n\nnamespace Ui {\n    class MainGatewayWidget;\n}\n\nstruct MainGatewayWidgetPrivate;\nclass MainGatewayWidget : public QWidget {\n        Q_OBJECT\n\n    public:\n        explicit MainGatewayWidget(QWidget* parent = nullptr);\n        ~MainGatewayWidget();\n\n        QSize sizeHint() const;\n\n        void clearState();\n\n    private slots:\n        void on_searchBox_textEdited(const QString& arg1);\n\n        void on_appsList_clicked(const QModelIndex& index);\n\n        void on_searchBox_returnPressed();\n\n        void on_endSessionButton_clicked();\n\n        void on_allAppsButton_toggled(bool checked);\n\n        void on_titleLabel_backButtonClicked();\n\n        void on_statusCenterButton_clicked();\n\n        void on_systemSettingsButton_clicked();\n\n    signals:\n        void closeGateway();\n\n    private:\n        Ui::MainGatewayWidget* ui;\n        MainGatewayWidgetPrivate* d;\n\n        void launch(QModelIndex applicationIndex);\n        bool showActionMenu(QModelIndex applicationIndex);\n\n        void changeEvent(QEvent* event);\n        void resizeEvent(QResizeEvent* event);\n\n        // QObject interface\n    public:\n        bool eventFilter(QObject* watched, QEvent* event);\n};\n\n#endif // MAINGATEWAYWIDGET_H\n"
  },
  {
    "path": "desktop/gateway/maingatewaywidget.ui",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ui version=\"4.0\">\n <class>MainGatewayWidget</class>\n <widget class=\"QWidget\" name=\"MainGatewayWidget\">\n  <property name=\"geometry\">\n   <rect>\n    <x>0</x>\n    <y>0</y>\n    <width>405</width>\n    <height>570</height>\n   </rect>\n  </property>\n  <property name=\"windowTitle\">\n   <string notr=\"true\">Form</string>\n  </property>\n  <layout class=\"QVBoxLayout\" name=\"verticalLayout\">\n   <property name=\"spacing\">\n    <number>0</number>\n   </property>\n   <property name=\"leftMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"topMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"rightMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"bottomMargin\">\n    <number>0</number>\n   </property>\n   <item>\n    <widget class=\"QStackedWidget\" name=\"stackedWidget\">\n     <property name=\"currentIndex\">\n      <number>0</number>\n     </property>\n     <widget class=\"QWidget\" name=\"mainPage\">\n      <layout class=\"QVBoxLayout\" name=\"verticalLayout_2\">\n       <property name=\"spacing\">\n        <number>0</number>\n       </property>\n       <property name=\"leftMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"topMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"rightMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"bottomMargin\">\n        <number>0</number>\n       </property>\n       <item>\n        <widget class=\"tTitleLabel\" name=\"titleLabel\">\n         <property name=\"text\">\n          <string>Gateway</string>\n         </property>\n        </widget>\n       </item>\n       <item>\n        <widget class=\"QLineEdit\" name=\"searchBox\">\n         <property name=\"frame\">\n          <bool>false</bool>\n         </property>\n         <property name=\"placeholderText\">\n          <string>Type to search...</string>\n         </property>\n         <property name=\"clearButtonEnabled\">\n          <bool>true</bool>\n         </property>\n        </widget>\n       </item>\n       <item>\n        <widget class=\"Line\" name=\"line_2\">\n         <property name=\"maximumSize\">\n          <size>\n           <width>16777215</width>\n           <height>1</height>\n          </size>\n         </property>\n         <property name=\"orientation\">\n          <enum>Qt::Horizontal</enum>\n         </property>\n        </widget>\n       </item>\n       <item>\n        <widget class=\"QWidget\" name=\"searchResultsContainer\" native=\"true\">\n         <layout class=\"QVBoxLayout\" name=\"verticalLayout_7\">\n          <property name=\"spacing\">\n           <number>0</number>\n          </property>\n          <property name=\"leftMargin\">\n           <number>0</number>\n          </property>\n          <property name=\"topMargin\">\n           <number>0</number>\n          </property>\n          <property name=\"rightMargin\">\n           <number>0</number>\n          </property>\n          <property name=\"bottomMargin\">\n           <number>0</number>\n          </property>\n          <item>\n           <widget class=\"QWidget\" name=\"appContentsWidget\" native=\"true\">\n            <layout class=\"QHBoxLayout\" name=\"horizontalLayout_3\">\n             <property name=\"spacing\">\n              <number>0</number>\n             </property>\n             <property name=\"leftMargin\">\n              <number>0</number>\n             </property>\n             <property name=\"topMargin\">\n              <number>0</number>\n             </property>\n             <property name=\"rightMargin\">\n              <number>0</number>\n             </property>\n             <property name=\"bottomMargin\">\n              <number>0</number>\n             </property>\n             <item>\n              <widget class=\"QWidget\" name=\"leftPane\" native=\"true\">\n               <layout class=\"QVBoxLayout\" name=\"verticalLayout_5\">\n                <property name=\"spacing\">\n                 <number>0</number>\n                </property>\n                <property name=\"leftMargin\">\n                 <number>0</number>\n                </property>\n                <property name=\"topMargin\">\n                 <number>0</number>\n                </property>\n                <property name=\"rightMargin\">\n                 <number>0</number>\n                </property>\n                <property name=\"bottomMargin\">\n                 <number>0</number>\n                </property>\n                <item>\n                 <widget class=\"QLabel\" name=\"label_3\">\n                  <property name=\"font\">\n                   <font>\n                    <weight>75</weight>\n                    <bold>true</bold>\n                   </font>\n                  </property>\n                  <property name=\"text\">\n                   <string>CATEGORIES</string>\n                  </property>\n                  <property name=\"margin\">\n                   <number>9</number>\n                  </property>\n                 </widget>\n                </item>\n                <item>\n                 <widget class=\"QPushButton\" name=\"allAppsButton\">\n                  <property name=\"text\">\n                   <string>All Apps</string>\n                  </property>\n                  <property name=\"checkable\">\n                   <bool>true</bool>\n                  </property>\n                  <property name=\"checked\">\n                   <bool>true</bool>\n                  </property>\n                  <property name=\"autoExclusive\">\n                   <bool>true</bool>\n                  </property>\n                 </widget>\n                </item>\n                <item>\n                 <layout class=\"QVBoxLayout\" name=\"categoriesLayout\"/>\n                </item>\n                <item>\n                 <widget class=\"Line\" name=\"line_4\">\n                  <property name=\"maximumSize\">\n                   <size>\n                    <width>16777215</width>\n                    <height>1</height>\n                   </size>\n                  </property>\n                  <property name=\"orientation\">\n                   <enum>Qt::Horizontal</enum>\n                  </property>\n                 </widget>\n                </item>\n                <item>\n                 <widget class=\"QPushButton\" name=\"statusCenterButton\">\n                  <property name=\"text\">\n                   <string>Status Center</string>\n                  </property>\n                 </widget>\n                </item>\n                <item>\n                 <spacer name=\"verticalSpacer_3\">\n                  <property name=\"orientation\">\n                   <enum>Qt::Vertical</enum>\n                  </property>\n                  <property name=\"sizeHint\" stdset=\"0\">\n                   <size>\n                    <width>20</width>\n                    <height>353</height>\n                   </size>\n                  </property>\n                 </spacer>\n                </item>\n               </layout>\n              </widget>\n             </item>\n             <item>\n              <widget class=\"Line\" name=\"line_3\">\n               <property name=\"maximumSize\">\n                <size>\n                 <width>1</width>\n                 <height>16777215</height>\n                </size>\n               </property>\n               <property name=\"orientation\">\n                <enum>Qt::Vertical</enum>\n               </property>\n              </widget>\n             </item>\n             <item>\n              <widget class=\"tStackedWidget\" name=\"gatewayTypeStack\">\n               <property name=\"currentIndex\">\n                <number>0</number>\n               </property>\n               <widget class=\"QWidget\" name=\"gatewayList\">\n                <layout class=\"QVBoxLayout\" name=\"verticalLayout_3\">\n                 <property name=\"leftMargin\">\n                  <number>0</number>\n                 </property>\n                 <property name=\"topMargin\">\n                  <number>0</number>\n                 </property>\n                 <property name=\"rightMargin\">\n                  <number>0</number>\n                 </property>\n                 <property name=\"bottomMargin\">\n                  <number>0</number>\n                 </property>\n                 <item>\n                  <widget class=\"QListView\" name=\"appsList\">\n                   <property name=\"frameShape\">\n                    <enum>QFrame::NoFrame</enum>\n                   </property>\n                  </widget>\n                 </item>\n                </layout>\n               </widget>\n               <widget class=\"QWidget\" name=\"gatewayLoading\">\n                <layout class=\"QVBoxLayout\" name=\"verticalLayout_4\">\n                 <item>\n                  <spacer name=\"verticalSpacer\">\n                   <property name=\"orientation\">\n                    <enum>Qt::Vertical</enum>\n                   </property>\n                   <property name=\"sizeHint\" stdset=\"0\">\n                    <size>\n                     <width>20</width>\n                     <height>64</height>\n                    </size>\n                   </property>\n                  </spacer>\n                 </item>\n                 <item>\n                  <widget class=\"QLabel\" name=\"label_2\">\n                   <property name=\"font\">\n                    <font>\n                     <pointsize>15</pointsize>\n                    </font>\n                   </property>\n                   <property name=\"text\">\n                    <string>Preparing the Gateway...</string>\n                   </property>\n                   <property name=\"alignment\">\n                    <set>Qt::AlignCenter</set>\n                   </property>\n                  </widget>\n                 </item>\n                 <item>\n                  <layout class=\"QHBoxLayout\" name=\"horizontalLayout_2\">\n                   <item>\n                    <spacer name=\"horizontalSpacer_2\">\n                     <property name=\"orientation\">\n                      <enum>Qt::Horizontal</enum>\n                     </property>\n                     <property name=\"sizeHint\" stdset=\"0\">\n                      <size>\n                       <width>40</width>\n                       <height>20</height>\n                      </size>\n                     </property>\n                    </spacer>\n                   </item>\n                   <item>\n                    <widget class=\"tCircularSpinner\" name=\"widget_2\" native=\"true\"/>\n                   </item>\n                   <item>\n                    <spacer name=\"horizontalSpacer\">\n                     <property name=\"orientation\">\n                      <enum>Qt::Horizontal</enum>\n                     </property>\n                     <property name=\"sizeHint\" stdset=\"0\">\n                      <size>\n                       <width>40</width>\n                       <height>20</height>\n                      </size>\n                     </property>\n                    </spacer>\n                   </item>\n                  </layout>\n                 </item>\n                 <item>\n                  <spacer name=\"verticalSpacer_2\">\n                   <property name=\"orientation\">\n                    <enum>Qt::Vertical</enum>\n                   </property>\n                   <property name=\"sizeHint\" stdset=\"0\">\n                    <size>\n                     <width>20</width>\n                     <height>63</height>\n                    </size>\n                   </property>\n                  </spacer>\n                 </item>\n                </layout>\n               </widget>\n              </widget>\n             </item>\n            </layout>\n           </widget>\n          </item>\n         </layout>\n        </widget>\n       </item>\n       <item>\n        <widget class=\"Line\" name=\"line\">\n         <property name=\"maximumSize\">\n          <size>\n           <width>16777215</width>\n           <height>1</height>\n          </size>\n         </property>\n         <property name=\"orientation\">\n          <enum>Qt::Horizontal</enum>\n         </property>\n        </widget>\n       </item>\n       <item>\n        <widget class=\"QWidget\" name=\"widget\" native=\"true\">\n         <layout class=\"QVBoxLayout\" name=\"verticalLayout_6\">\n          <item>\n           <widget class=\"QLabel\" name=\"usernameLabel\">\n            <property name=\"sizePolicy\">\n             <sizepolicy hsizetype=\"Expanding\" vsizetype=\"Preferred\">\n              <horstretch>0</horstretch>\n              <verstretch>0</verstretch>\n             </sizepolicy>\n            </property>\n            <property name=\"font\">\n             <font>\n              <pointsize>20</pointsize>\n             </font>\n            </property>\n            <property name=\"text\">\n             <string notr=\"true\">TextLabel</string>\n            </property>\n           </widget>\n          </item>\n          <item>\n           <layout class=\"QHBoxLayout\" name=\"horizontalLayout\">\n            <item>\n             <spacer name=\"horizontalSpacer_3\">\n              <property name=\"orientation\">\n               <enum>Qt::Horizontal</enum>\n              </property>\n              <property name=\"sizeHint\" stdset=\"0\">\n               <size>\n                <width>40</width>\n                <height>20</height>\n               </size>\n              </property>\n             </spacer>\n            </item>\n            <item>\n             <widget class=\"QPushButton\" name=\"systemSettingsButton\">\n              <property name=\"text\">\n               <string>System Settings</string>\n              </property>\n              <property name=\"icon\">\n               <iconset theme=\"systemsettings\"/>\n              </property>\n              <property name=\"flat\">\n               <bool>true</bool>\n              </property>\n             </widget>\n            </item>\n            <item>\n             <widget class=\"QPushButton\" name=\"endSessionButton\">\n              <property name=\"focusPolicy\">\n               <enum>Qt::NoFocus</enum>\n              </property>\n              <property name=\"text\">\n               <string>End Session</string>\n              </property>\n              <property name=\"icon\">\n               <iconset theme=\"system-shutdown\">\n                <normaloff>.</normaloff>.</iconset>\n              </property>\n              <property name=\"flat\">\n               <bool>true</bool>\n              </property>\n             </widget>\n            </item>\n           </layout>\n          </item>\n         </layout>\n        </widget>\n       </item>\n      </layout>\n     </widget>\n     <widget class=\"QWidget\" name=\"page_2\"/>\n    </widget>\n   </item>\n  </layout>\n </widget>\n <customwidgets>\n  <customwidget>\n   <class>tStackedWidget</class>\n   <extends>QStackedWidget</extends>\n   <header location=\"global\">tstackedwidget.h</header>\n   <container>1</container>\n   <slots>\n    <signal>switchingFrame(int)</signal>\n   </slots>\n  </customwidget>\n  <customwidget>\n   <class>tTitleLabel</class>\n   <extends>QLabel</extends>\n   <header location=\"global\">ttitlelabel.h</header>\n   <slots>\n    <signal>backButtonClicked()</signal>\n   </slots>\n  </customwidget>\n  <customwidget>\n   <class>tCircularSpinner</class>\n   <extends>QWidget</extends>\n   <header location=\"global\">tcircularspinner.h</header>\n   <container>1</container>\n  </customwidget>\n </customwidgets>\n <resources/>\n <connections/>\n</ui>\n"
  },
  {
    "path": "desktop/gateway/searchresultswidget.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2021 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"searchresultswidget.h\"\n#include \"ui_searchresultswidget.h\"\n\n#include <Applications/application.h>\n#include \"gatewaysearchmodel.h\"\n#include \"gatewaysearchmodeldelegate.h\"\n\nstruct SearchResultsWidgetPrivate {\n    GatewaySearchModel* model;\n    int maxHeight = 0;\n};\n\nSearchResultsWidget::SearchResultsWidget(QWidget* parent) :\n    QWidget(parent),\n    ui(new Ui::SearchResultsWidget) {\n    ui->setupUi(this);\n    d = new SearchResultsWidgetPrivate();\n\n    d->model = new GatewaySearchModel();\n    ui->listView->setModel(d->model);\n    ui->listView->setItemDelegate(new GatewaySearchModelDelegate(this));\n\n    connect(d->model, &GatewaySearchModel::dataChanged, this, [ = ] {\n        int height = 1;\n        for (int i = 0; i < d->model->rowCount(); i++) {\n            height += ui->listView->sizeHintForRow(i);\n        }\n        if (height > this->parentWidget()->height()) height = this->parentWidget()->height();// + 1;\n        this->setFixedHeight(height);\n    });\n\n    QPalette pal = ui->listView->palette();\n    pal.setColor(QPalette::Base, Qt::transparent);\n    ui->listView->setPalette(pal);\n    ui->line->setVisible(false);\n}\n\nSearchResultsWidget::~SearchResultsWidget() {\n    delete ui;\n    delete d;\n}\n\nvoid SearchResultsWidget::search(QString query) {\n    ui->listView->selectionModel()->clear();\n    d->model->search(query);\n}\n\nvoid SearchResultsWidget::moveSelectionUp() {\n    QItemSelectionModel* selectionModel = ui->listView->selectionModel();\n    int selectionRow = d->model->rowCount() - 1;\n    if (selectionModel->hasSelection()) {\n        int row = selectionModel->selectedIndexes().first().row();\n        if (row != 0) selectionRow = row - 1;\n    }\n    selectionModel->select(d->model->index(selectionRow), QItemSelectionModel::ClearAndSelect);\n    ui->listView->scrollTo(d->model->index(selectionRow), QListView::PositionAtCenter);\n}\n\nvoid SearchResultsWidget::moveSelectionDown() {\n    QItemSelectionModel* selectionModel = ui->listView->selectionModel();\n    int selectionRow = 0;\n    if (selectionModel->hasSelection()) {\n        int row = selectionModel->selectedIndexes().first().row();\n        if (row != d->model->rowCount() - 1) selectionRow = row + 1;\n    }\n    selectionModel->select(d->model->index(selectionRow), QItemSelectionModel::ClearAndSelect);\n    ui->listView->scrollTo(d->model->index(selectionRow), QListView::PositionAtCenter);\n}\n\nvoid SearchResultsWidget::launchSelected() {\n    QModelIndexList indices = ui->listView->selectionModel()->selectedIndexes();\n    if (indices.isEmpty() || !indices.first().isValid()) {\n        if (d->model->rowCount() > 0) launch(d->model->index(0));\n    } else {\n        launch(indices.at(0));\n    }\n}\n\nvoid SearchResultsWidget::on_listView_clicked(const QModelIndex& index) {\n    launch(index);\n}\n\nvoid SearchResultsWidget::launch(QModelIndex index) {\n    d->model->launch(index);\n    emit closeGateway();\n}\n"
  },
  {
    "path": "desktop/gateway/searchresultswidget.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2021 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef SEARCHRESULTSWIDGET_H\n#define SEARCHRESULTSWIDGET_H\n\n#include <QWidget>\n\nnamespace Ui {\n    class SearchResultsWidget;\n}\n\nstruct SearchResultsWidgetPrivate;\nclass SearchResultsWidget : public QWidget {\n        Q_OBJECT\n\n    public:\n        explicit SearchResultsWidget(QWidget* parent = nullptr);\n        ~SearchResultsWidget();\n\n        void search(QString query);\n\n        void moveSelectionUp();\n        void moveSelectionDown();\n        void launchSelected();\n\n    private slots:\n        void on_listView_clicked(const QModelIndex& index);\n\n    signals:\n        void closeGateway();\n\n    private:\n        Ui::SearchResultsWidget* ui;\n        SearchResultsWidgetPrivate* d;\n\n        void launch(QModelIndex index);\n};\n\n#endif // SEARCHRESULTSWIDGET_H\n"
  },
  {
    "path": "desktop/gateway/searchresultswidget.ui",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ui version=\"4.0\">\n <class>SearchResultsWidget</class>\n <widget class=\"QWidget\" name=\"SearchResultsWidget\">\n  <property name=\"geometry\">\n   <rect>\n    <x>0</x>\n    <y>0</y>\n    <width>400</width>\n    <height>300</height>\n   </rect>\n  </property>\n  <property name=\"windowTitle\">\n   <string notr=\"true\">Form</string>\n  </property>\n  <layout class=\"QVBoxLayout\" name=\"verticalLayout\">\n   <property name=\"spacing\">\n    <number>0</number>\n   </property>\n   <property name=\"leftMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"topMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"rightMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"bottomMargin\">\n    <number>0</number>\n   </property>\n   <item>\n    <widget class=\"QListView\" name=\"listView\">\n     <property name=\"frameShape\">\n      <enum>QFrame::NoFrame</enum>\n     </property>\n    </widget>\n   </item>\n   <item>\n    <widget class=\"Line\" name=\"line\">\n     <property name=\"maximumSize\">\n      <size>\n       <width>16777215</width>\n       <height>1</height>\n      </size>\n     </property>\n     <property name=\"orientation\">\n      <enum>Qt::Horizontal</enum>\n     </property>\n    </widget>\n   </item>\n  </layout>\n </widget>\n <resources/>\n <connections/>\n</ui>\n"
  },
  {
    "path": "desktop/main.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n\n#include <QDir>\n#include <QTimer>\n\n#include <Screens/screendaemon.h>\n#include <Wm/desktopwm.h>\n#include <gatewaymanager.h>\n#include <localemanager.h>\n#include <powermanager.h>\n#include <statemanager.h>\n#include <statuscentermanager.h>\n#include <tapplication.h>\n#include <tstylemanager.h>\n\n#include \"background/background.h\"\n#include \"bar/barwindow.h\"\n#include \"cli/commandline.h\"\n#include \"crash/crashhandling.h\"\n#include \"plugins/pluginmanager.h\"\n#include \"run/rundialog.h\"\n#include \"server/sessionserver.h\"\n#include \"session/endsession.h\"\n#include <onboarding/onboardingcontroller.h>\n#include <tsettings.h>\n\n#include \"gateway/appsearchprovider.h\"\n\nint main(int argc, char* argv[]) {\n    tApplication a(argc, argv);\n    a.setOrganizationName(\"theSuite\");\n    a.setOrganizationDomain(\"vicr123.com\");\n    a.setApplicationName(\"theDesk\");\n    a.setApplicationVersion(\"2.0\");\n    a.setCopyrightYear(\"2024\");\n    a.setApplicationShareDir(\"thedesk\");\n\n    StateManager::instance();\n    StateManager::localeManager()->addTranslationSet({a.applicationDirPath() + \"/translations\",\n        \"/usr/share/thedesk/translations\"});\n\n    tSettings::registerDefaults(QDir::cleanPath(qApp->applicationDirPath() + \"/../desktop/thedesk.conf\"));\n    tSettings::registerDefaults(\"/usr/share/defaults/thedesk.conf\");\n\n    CrashHandling::prepareCrashHandler();\n\n    // Parse command line arguments\n    int parseResult = CommandLine::parse(a.arguments());\n    if (parseResult != -1) {\n        // Stop running right here\n        return parseResult;\n    }\n\n    if (a.queryKeyboardModifiers() & Qt::ControlModifier && !PluginManager::instance()->isSafeMode()) {\n        tPromiseResults<bool> results = SessionServer::instance()->askQuestion(QApplication::translate(\"main\", \"Safe Mode\"), QApplication::translate(\"main\", \"You're holding the CTRL key. Start theDesk in Safe Mode?\"))->await();\n        if (results.result) PluginManager::instance()->setSafeMode(true);\n    }\n\n    DesktopWm::instance()->registerAsPrimaryProvider();\n    PluginManager::instance()->scanPlugins();\n\n    QObject::connect(StateManager::instance()->powerManager(), &PowerManager::powerOffConfirmationRequested, [=](PowerManager::PowerOperation operation, QString message, QStringList flags, tPromiseFunctions<void>::SuccessFunction cb) {\n        EndSession::showDialog(operation, message, flags)->then(cb);\n    });\n\n    // Perform onboarding if required\n    if (!OnboardingController::performOnboarding(false)) {\n        // Exit now because onboarding failed (probably the user chose to log out)\n        return 0;\n    }\n\n    // Prepare the run dialog\n    RunDialog::initialise();\n\n    // Prepare the background\n    Background::reconfigureBackgrounds();\n\n    StateManager::gatewayManager()->registerSearchProvider(new AppSearchProvider());\n\n    BarWindow w;\n    w.show();\n\n    QTimer::singleShot(0, [=] {\n        SessionServer::instance()->hideSplashes();\n        SessionServer::instance()->performAutostart();\n    });\n\n    return a.exec();\n}\n"
  },
  {
    "path": "desktop/resources.qrc",
    "content": "<RCC>\n    <qresource prefix=\"/thedesk/desktop\">\n        <file>icons/thedesk.svg</file>\n        <file>icons/cactus.svg</file>\n    </qresource>\n</RCC>\n"
  },
  {
    "path": "desktop/run/rundialog.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"rundialog.h\"\n#include \"ui_rundialog.h\"\n\n#include \"transparentdialog.h\"\n#include <QTimer>\n#include <tpopover.h>\n#include <keygrab.h>\n#include <QProcess>\n#include <terrorflash.h>\n\nRunDialog::RunDialog(QWidget* parent) :\n    QWidget(parent),\n    ui(new Ui::RunDialog) {\n    ui->setupUi(this);\n\n    ui->titleLabel->setBackButtonShown(true);\n    ui->widget->setFixedWidth(SC_DPI(600));\n\n    this->setFocusProxy(ui->lineEdit);\n}\n\nRunDialog::~RunDialog() {\n    delete ui;\n}\n\nvoid RunDialog::initialise() {\n    KeyGrab* grab = new KeyGrab(QKeySequence(Qt::AltModifier | Qt::Key_F2), \"run\");\n    connect(grab, &KeyGrab::activated, [ = ] {\n        TransparentDialog* dialog = new TransparentDialog();\n        dialog->setWindowFlag(Qt::FramelessWindowHint);\n        dialog->setWindowFlag(Qt::WindowStaysOnTopHint);\n        dialog->showFullScreen();\n\n        QTimer::singleShot(500, [ = ] {\n            RunDialog* popoverContents = new RunDialog();\n\n            tPopover* popover = new tPopover(popoverContents);\n            popover->setPopoverSide(tPopover::Bottom);\n            popover->setPopoverWidth(popoverContents->sizeHint().height());\n            connect(popoverContents, &RunDialog::done, popover, &tPopover::dismiss);\n            connect(popover, &tPopover::dismissed, popoverContents, &RunDialog::deleteLater);\n            connect(popover, &tPopover::dismissed, [ = ] {\n                popover->deleteLater();\n                dialog->deleteLater();\n            });\n            popover->show(dialog);\n            popoverContents->setFocus();\n        });\n    });\n}\n\nvoid RunDialog::on_titleLabel_backButtonClicked() {\n    emit done();\n}\n\nvoid RunDialog::on_runButton_clicked() {\n    QStringList parts = ui->lineEdit->text().split(\" \");\n    QString executable = parts.takeFirst();\n\n    if (QProcess::startDetached(executable, parts)) {\n        emit done();\n    } else {\n        tErrorFlash::flashError(ui->lineEdit);\n    }\n}\n"
  },
  {
    "path": "desktop/run/rundialog.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef RUNDIALOG_H\n#define RUNDIALOG_H\n\n#include <QWidget>\n\nnamespace Ui {\n    class RunDialog;\n}\n\nclass RunDialog : public QWidget {\n        Q_OBJECT\n\n    public:\n        explicit RunDialog(QWidget* parent = nullptr);\n        ~RunDialog();\n\n        static void initialise();\n\n    private slots:\n        void on_titleLabel_backButtonClicked();\n\n        void on_runButton_clicked();\n\n    signals:\n        void done();\n\n    private:\n        Ui::RunDialog* ui;\n};\n\n#endif // RUNDIALOG_H\n"
  },
  {
    "path": "desktop/run/rundialog.ui",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ui version=\"4.0\">\n <class>RunDialog</class>\n <widget class=\"QWidget\" name=\"RunDialog\">\n  <property name=\"geometry\">\n   <rect>\n    <x>0</x>\n    <y>0</y>\n    <width>400</width>\n    <height>300</height>\n   </rect>\n  </property>\n  <property name=\"windowTitle\">\n   <string notr=\"true\">Form</string>\n  </property>\n  <layout class=\"QVBoxLayout\" name=\"verticalLayout\">\n   <property name=\"spacing\">\n    <number>0</number>\n   </property>\n   <property name=\"leftMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"topMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"rightMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"bottomMargin\">\n    <number>0</number>\n   </property>\n   <item>\n    <widget class=\"tTitleLabel\" name=\"titleLabel\">\n     <property name=\"text\">\n      <string>Run</string>\n     </property>\n    </widget>\n   </item>\n   <item alignment=\"Qt::AlignHCenter\">\n    <widget class=\"QWidget\" name=\"widget\" native=\"true\">\n     <layout class=\"QVBoxLayout\" name=\"verticalLayout_2\">\n      <property name=\"spacing\">\n       <number>6</number>\n      </property>\n      <property name=\"leftMargin\">\n       <number>0</number>\n      </property>\n      <property name=\"topMargin\">\n       <number>0</number>\n      </property>\n      <property name=\"rightMargin\">\n       <number>0</number>\n      </property>\n      <property name=\"bottomMargin\">\n       <number>0</number>\n      </property>\n      <item>\n       <widget class=\"QLabel\" name=\"label\">\n        <property name=\"text\">\n         <string>Enter a command to run.</string>\n        </property>\n        <property name=\"margin\">\n         <number>9</number>\n        </property>\n       </widget>\n      </item>\n      <item>\n       <widget class=\"QLineEdit\" name=\"lineEdit\"/>\n      </item>\n      <item>\n       <widget class=\"QPushButton\" name=\"runButton\">\n        <property name=\"text\">\n         <string>Run this command</string>\n        </property>\n       </widget>\n      </item>\n     </layout>\n    </widget>\n   </item>\n  </layout>\n </widget>\n <customwidgets>\n  <customwidget>\n   <class>tTitleLabel</class>\n   <extends>QLabel</extends>\n   <header location=\"global\">ttitlelabel.h</header>\n   <slots>\n    <signal>backButtonClicked()</signal>\n   </slots>\n  </customwidget>\n </customwidgets>\n <resources/>\n <connections>\n  <connection>\n   <sender>lineEdit</sender>\n   <signal>returnPressed()</signal>\n   <receiver>runButton</receiver>\n   <slot>click()</slot>\n   <hints>\n    <hint type=\"sourcelabel\">\n     <x>198</x>\n     <y>254</y>\n    </hint>\n    <hint type=\"destinationlabel\">\n     <x>198</x>\n     <y>278</y>\n    </hint>\n   </hints>\n  </connection>\n </connections>\n</ui>\n"
  },
  {
    "path": "desktop/session/endsession.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"endsession.h\"\n#include \"ui_endsession.h\"\n\n#include \"transparentdialog.h\"\n#include <QDBusConnection>\n#include <QDBusMessage>\n#include <QMenu>\n#include <QPainter>\n#include <QTimer>\n#include <Wm/desktopwm.h>\n#include <onboardingmanager.h>\n#include <powermanager.h>\n#include <statemanager.h>\n#include <tpopover.h>\n#include <tvariantanimation.h>\n\nstruct EndSessionPrivate {\n        tVariantAnimation* powerOffAnimation;\n        EndSessionButton* timedButton;\n};\n\nEndSession::EndSession(PowerManager::PowerOperation operation, QString message, QStringList flags, QWidget* parent) :\n    QWidget(parent),\n    ui(new Ui::EndSession) {\n    ui->setupUi(this);\n\n    d = new EndSessionPrivate();\n\n    if (message == \"\") {\n        message = tr(\"Hey %1, ready to head out? We'll %2 in %n seconds if you don't do anything.\");\n    }\n\n    ui->rebootInstallUpdatesButton->setVisible(false);\n    if (operation != PowerManager::All) {\n        ui->powerOffButton->setVisible(false);\n        ui->rebootButton->setVisible(false);\n        ui->logoutButton->setVisible(false);\n        ui->suspendButton->setVisible(false);\n        ui->lockButton->setVisible(false);\n        ui->screenOffButton->setVisible(false);\n        ui->switchUsersButton->setVisible(false);\n        ui->hibernateButton->setVisible(false);\n    }\n\n    switch (operation) {\n        case PowerManager::All:\n            if (StateManager::onboardingManager()->isOnboardingRunning()) {\n                ui->lockButton->setVisible(false);\n                ui->screenOffButton->setVisible(false);\n            }\n\n            Q_FALLTHROUGH();\n        case PowerManager::PowerOff:\n            d->timedButton = ui->powerOffButton;\n            break;\n        case PowerManager::Reboot:\n            if (flags.contains(\"update\")) {\n                d->timedButton = ui->rebootInstallUpdatesButton;\n            } else {\n                d->timedButton = ui->rebootButton;\n            }\n            break;\n        case PowerManager::LogOut:\n            d->timedButton = ui->logoutButton;\n            break;\n        case PowerManager::Suspend:\n            d->timedButton = ui->suspendButton;\n            break;\n        case PowerManager::Lock:\n            d->timedButton = ui->lockButton;\n            break;\n        case PowerManager::TurnOffScreen:\n            d->timedButton = ui->screenOffButton;\n            break;\n        case PowerManager::Hibernate:\n            d->timedButton = ui->hibernateButton;\n            break;\n    }\n\n    d->timedButton->setVisible(true);\n    d->timedButton->setProperty(\"type\", \"destructive\");\n\n    d->powerOffAnimation = new tVariantAnimation();\n    d->powerOffAnimation->setStartValue(60.0);\n    d->powerOffAnimation->setEndValue(0.0);\n    d->powerOffAnimation->setDuration(60000);\n    d->powerOffAnimation->setForceAnimation(true);\n    connect(d->powerOffAnimation, &tVariantAnimation::valueChanged, this, [=](QVariant value) {\n        const QMap<EndSessionButton*, const char*> text = {\n            {ui->powerOffButton,             QT_TR_NOOP(\"power off the system\")                             },\n            {ui->rebootButton,               QT_TR_NOOP(\"reboot the system\")                                },\n            {ui->rebootInstallUpdatesButton, QT_TR_NOOP(\"reboot the system and install any pending updates\")},\n            {ui->logoutButton,               QT_TR_NOOP(\"log you out\")                                      },\n            {ui->suspendButton,              QT_TR_NOOP(\"suspend the system\")                               },\n            {ui->lockButton,                 QT_TR_NOOP(\"lock the screen\")                                  },\n            {ui->screenOffButton,            QT_TR_NOOP(\"turn off the screen\")                              },\n            {ui->switchUsersButton,          QT_TR_NOOP(\"switch users\")                                     },\n            {ui->hibernateButton,            QT_TR_NOOP(\"hibernate the system\")                             }\n        };\n\n        ui->descriptionLabel->setText(tr(qPrintable(message), nullptr, value.toFloat() < 1 ? 1 : qRound(value.toDouble()))\n                                          .arg(DesktopWm::userDisplayName())\n                                          .arg(tr(text.value(d->timedButton))));\n        d->timedButton->setTimeRemaining(value.toDouble());\n    });\n    connect(d->powerOffAnimation, &tVariantAnimation::finished, d->timedButton, &QCommandLinkButton::click);\n    d->powerOffAnimation->start();\n\n    ui->centeredWidget->setFixedWidth(SC_DPI(600));\n    ui->centeredWidgetUpdates->setFixedWidth(SC_DPI(600));\n    ui->powerOffButton->setProperty(\"type\", \"destructive\");\n    ui->rebootButton->setProperty(\"type\", \"destructive\");\n    ui->titleLabel->setBackButtonShown(true);\n    ui->updatesAvailableTitle->setBackButtonShown(true);\n    ui->stackedWidget->setCurrentAnimation(tStackedWidget::SlideHorizontal);\n}\n\nEndSession::~EndSession() {\n    d->powerOffAnimation->stop();\n    delete d;\n    delete ui;\n}\n\ntPromise<void>* EndSession::showDialog(PowerManager::PowerOperation operation, QString message, QStringList flags) {\n    return tPromise<void>::runOnSameThread([=](tPromiseFunctions<void>::SuccessFunction res, tPromiseFunctions<void>::FailureFunction rej) {\n        Q_UNUSED(rej)\n\n        TransparentDialog* dialog = new TransparentDialog();\n        dialog->showFullScreen();\n\n        QTimer::singleShot(500, [=] {\n            EndSession* popoverContents = new EndSession(operation, message, flags);\n\n            tPopover* popover = new tPopover(popoverContents);\n            popover->setPopoverSide(tPopover::Bottom);\n            popover->setPopoverWidth(popoverContents->heightForWidth(dialog->width()));\n            connect(popoverContents, &EndSession::done, popover, &tPopover::dismiss);\n            connect(popover, &tPopover::dismissed, popoverContents, &EndSession::deleteLater);\n            connect(popover, &tPopover::dismissed, [=] {\n                popover->deleteLater();\n                dialog->deleteLater();\n                popoverContents->deleteLater();\n\n                res();\n            });\n            popover->show(dialog);\n        });\n    });\n}\n\nvoid EndSession::on_titleLabel_backButtonClicked() {\n    d->powerOffAnimation->stop();\n    emit done();\n}\n\nvoid EndSession::on_powerOffButton_clicked() {\n    StateManager::instance()->powerManager()->performPowerOperation(PowerManager::PowerOff);\n    emit done();\n}\n\nvoid EndSession::on_rebootButton_clicked() {\n    if (QFile(\"/var/lib/PackageKit/prepared-update\").exists() && !QFile::exists(\"/system-update\")) {\n        // Ask the user to install updates\n        ui->stackedWidget->setCurrentWidget(ui->updatesAvailablePage);\n    } else {\n        StateManager::instance()->powerManager()->performPowerOperation(PowerManager::Reboot);\n        emit done();\n    }\n}\n\nvoid EndSession::on_logoutButton_clicked() {\n    StateManager::instance()->powerManager()->performPowerOperation(PowerManager::LogOut);\n    emit done();\n}\n\nvoid EndSession::on_suspendButton_clicked() {\n    StateManager::instance()->powerManager()->performPowerOperation(PowerManager::Suspend);\n    emit done();\n}\n\nvoid EndSession::on_lockButton_clicked() {\n    StateManager::instance()->powerManager()->performPowerOperation(PowerManager::Lock);\n    emit done();\n}\n\nvoid EndSession::on_screenOffButton_clicked() {\n    StateManager::instance()->powerManager()->performPowerOperation(PowerManager::TurnOffScreen);\n    emit done();\n}\n\nvoid EndSession::on_switchUsersButton_clicked() {\n    StateManager::instance()->powerManager()->performPowerOperation(PowerManager::SwitchUsers);\n    emit done();\n}\n\nvoid EndSession::on_hibernateButton_clicked() {\n    StateManager::instance()->powerManager()->performPowerOperation(PowerManager::Hibernate);\n    emit done();\n}\n\nvoid EndSession::on_updatesAvailableTitle_backButtonClicked() {\n    ui->stackedWidget->setCurrentWidget(ui->mainPage);\n}\n\nvoid EndSession::on_rebootNoUpdateButton_clicked() {\n    StateManager::instance()->powerManager()->performPowerOperation(PowerManager::Reboot);\n    emit done();\n}\n\nvoid EndSession::on_rebootUpdateButton_clicked() {\n    // Reboot\n    StateManager::instance()->powerManager()->performPowerOperation(PowerManager::Reboot, {\"update\"});\n    emit done();\n}\n\nvoid EndSession::on_stackedWidget_switchingFrame(int frame) {\n    if (frame == 0) {\n        d->powerOffAnimation->start();\n    } else {\n        d->powerOffAnimation->stop();\n    }\n}\n\nvoid EndSession::on_rebootInstallUpdatesButton_clicked() {\n    StateManager::instance()->powerManager()->performPowerOperation(PowerManager::Reboot, {\"update\"});\n    emit done();\n}\n\nvoid EndSession::on_rebootButton_customContextMenuRequested(const QPoint& pos) {\n    QMenu* menu = new QMenu();\n    menu->addSection(tr(\"Advanced Reboot\"));\n    menu->addAction(QIcon::fromTheme(\"system-reboot\"), tr(\"Reboot\"), [=] {\n        // Just reboot\n        ui->rebootButton->click();\n    });\n\n    QDBusMessage message = QDBusMessage::createMethodCall(\"org.freedesktop.login1\", \"/org/freedesktop/login1\", \"org.freedesktop.login1.Manager\", \"CanRebootToFirmwareSetup\");\n    QDBusMessage msg = QDBusConnection::systemBus().call(message);\n\n    if (msg.arguments().first().toString() == \"yes\") {\n        menu->addAction(QIcon::fromTheme(\"system-reboot\"), tr(\"Reboot into System UEFI Setup\"), [=] {\n            StateManager::instance()->powerManager()->performPowerOperation(PowerManager::Reboot, {\"setup\"});\n            emit done();\n        });\n    }\n    menu->popup(ui->rebootButton->mapToGlobal(pos));\n}\n"
  },
  {
    "path": "desktop/session/endsession.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef ENDSESSION_H\n#define ENDSESSION_H\n\n#include <QWidget>\n#include <tpromise.h>\n#include <powermanager.h>\n\nnamespace Ui {\n    class EndSession;\n}\n\nstruct EndSessionPrivate;\nclass EndSession : public QWidget {\n        Q_OBJECT\n\n    public:\n        ~EndSession();\n\n        static tPromise<void>* showDialog(PowerManager::PowerOperation operation = PowerManager::All, QString message = \"\", QStringList flags = {});\n\n    signals:\n        void done();\n\n    private slots:\n        void on_titleLabel_backButtonClicked();\n\n        void on_powerOffButton_clicked();\n\n        void on_rebootButton_clicked();\n\n        void on_logoutButton_clicked();\n\n        void on_suspendButton_clicked();\n\n        void on_lockButton_clicked();\n\n        void on_screenOffButton_clicked();\n\n        void on_switchUsersButton_clicked();\n\n        void on_hibernateButton_clicked();\n\n        void on_updatesAvailableTitle_backButtonClicked();\n\n        void on_rebootNoUpdateButton_clicked();\n\n        void on_rebootUpdateButton_clicked();\n\n        void on_stackedWidget_switchingFrame(int frame);\n\n        void on_rebootInstallUpdatesButton_clicked();\n\n        void on_rebootButton_customContextMenuRequested(const QPoint &pos);\n\nprivate:\n        explicit EndSession(PowerManager::PowerOperation operation, QString message, QStringList flags, QWidget* parent = nullptr);\n\n        Ui::EndSession* ui;\n        EndSessionPrivate* d;\n};\n\n#endif // ENDSESSION_H\n"
  },
  {
    "path": "desktop/session/endsession.ui",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ui version=\"4.0\">\n <class>EndSession</class>\n <widget class=\"QWidget\" name=\"EndSession\">\n  <property name=\"geometry\">\n   <rect>\n    <x>0</x>\n    <y>0</y>\n    <width>799</width>\n    <height>515</height>\n   </rect>\n  </property>\n  <property name=\"windowTitle\">\n   <string notr=\"true\">Form</string>\n  </property>\n  <layout class=\"QVBoxLayout\" name=\"verticalLayout\">\n   <property name=\"spacing\">\n    <number>0</number>\n   </property>\n   <property name=\"leftMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"topMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"rightMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"bottomMargin\">\n    <number>0</number>\n   </property>\n   <item>\n    <widget class=\"tStackedWidget\" name=\"stackedWidget\">\n     <property name=\"currentIndex\">\n      <number>0</number>\n     </property>\n     <widget class=\"QWidget\" name=\"mainPage\">\n      <layout class=\"QVBoxLayout\" name=\"verticalLayout_5\">\n       <property name=\"spacing\">\n        <number>0</number>\n       </property>\n       <property name=\"leftMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"topMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"rightMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"bottomMargin\">\n        <number>0</number>\n       </property>\n       <item>\n        <widget class=\"tTitleLabel\" name=\"titleLabel\">\n         <property name=\"text\">\n          <string>End Session</string>\n         </property>\n        </widget>\n       </item>\n       <item>\n        <layout class=\"QHBoxLayout\" name=\"horizontalLayout\">\n         <item>\n          <widget class=\"QWidget\" name=\"centeredWidget\" native=\"true\">\n           <property name=\"maximumSize\">\n            <size>\n             <width>600</width>\n             <height>16777215</height>\n            </size>\n           </property>\n           <layout class=\"QVBoxLayout\" name=\"verticalLayout_2\">\n            <property name=\"spacing\">\n             <number>0</number>\n            </property>\n            <property name=\"leftMargin\">\n             <number>0</number>\n            </property>\n            <property name=\"topMargin\">\n             <number>0</number>\n            </property>\n            <property name=\"rightMargin\">\n             <number>0</number>\n            </property>\n            <property name=\"bottomMargin\">\n             <number>0</number>\n            </property>\n            <item>\n             <layout class=\"QVBoxLayout\" name=\"verticalLayout_4\">\n              <property name=\"topMargin\">\n               <number>9</number>\n              </property>\n              <property name=\"bottomMargin\">\n               <number>9</number>\n              </property>\n              <item>\n               <widget class=\"QLabel\" name=\"descriptionLabel\">\n                <property name=\"text\">\n                 <string notr=\"true\">Ready to leave?</string>\n                </property>\n                <property name=\"wordWrap\">\n                 <bool>true</bool>\n                </property>\n               </widget>\n              </item>\n             </layout>\n            </item>\n            <item>\n             <layout class=\"QVBoxLayout\" name=\"verticalLayout_3\">\n              <property name=\"bottomMargin\">\n               <number>9</number>\n              </property>\n              <item>\n               <widget class=\"EndSessionButton\" name=\"powerOffButton\">\n                <property name=\"text\">\n                 <string>Power Off</string>\n                </property>\n                <property name=\"icon\">\n                 <iconset theme=\"system-shutdown\">\n                  <normaloff>.</normaloff>.</iconset>\n                </property>\n                <property name=\"description\">\n                 <string>Turns off your computer.</string>\n                </property>\n               </widget>\n              </item>\n             </layout>\n            </item>\n            <item>\n             <widget class=\"EndSessionButton\" name=\"rebootButton\">\n              <property name=\"contextMenuPolicy\">\n               <enum>Qt::CustomContextMenu</enum>\n              </property>\n              <property name=\"text\">\n               <string>Reboot</string>\n              </property>\n              <property name=\"icon\">\n               <iconset theme=\"system-reboot\">\n                <normaloff>.</normaloff>.</iconset>\n              </property>\n              <property name=\"description\">\n               <string>Turns off your computer and turns it on again</string>\n              </property>\n             </widget>\n            </item>\n            <item>\n             <widget class=\"EndSessionButton\" name=\"rebootInstallUpdatesButton\">\n              <property name=\"text\">\n               <string>Reboot and install updates</string>\n              </property>\n              <property name=\"icon\">\n               <iconset theme=\"system-reboot\">\n                <normaloff>.</normaloff>.</iconset>\n              </property>\n              <property name=\"description\">\n               <string>Turns off your computer, installs pending updates and turns it on again</string>\n              </property>\n             </widget>\n            </item>\n            <item>\n             <widget class=\"EndSessionButton\" name=\"logoutButton\">\n              <property name=\"text\">\n               <string>Log Out</string>\n              </property>\n              <property name=\"icon\">\n               <iconset theme=\"system-log-out\">\n                <normaloff>.</normaloff>.</iconset>\n              </property>\n              <property name=\"description\">\n               <string>Ends your session but keeps your computer on for other people to use</string>\n              </property>\n             </widget>\n            </item>\n            <item>\n             <widget class=\"EndSessionButton\" name=\"suspendButton\">\n              <property name=\"text\">\n               <string>Suspend</string>\n              </property>\n              <property name=\"icon\">\n               <iconset theme=\"system-suspend\">\n                <normaloff>.</normaloff>.</iconset>\n              </property>\n              <property name=\"description\">\n               <string>Puts your computer in a low power state so it reopens quickly</string>\n              </property>\n             </widget>\n            </item>\n            <item>\n             <widget class=\"EndSessionButton\" name=\"lockButton\">\n              <property name=\"text\">\n               <string>Lock</string>\n              </property>\n              <property name=\"icon\">\n               <iconset theme=\"system-lock-screen\">\n                <normaloff>.</normaloff>.</iconset>\n              </property>\n              <property name=\"description\">\n               <string>Locks your workspace with your password</string>\n              </property>\n             </widget>\n            </item>\n            <item>\n             <widget class=\"EndSessionButton\" name=\"screenOffButton\">\n              <property name=\"text\">\n               <string>Turn Off Screen</string>\n              </property>\n              <property name=\"icon\">\n               <iconset theme=\"video-display\">\n                <normaloff>.</normaloff>.</iconset>\n              </property>\n              <property name=\"description\">\n               <string>Turns off the screen, but keeps everything else running in the background</string>\n              </property>\n             </widget>\n            </item>\n            <item>\n             <widget class=\"EndSessionButton\" name=\"switchUsersButton\">\n              <property name=\"text\">\n               <string>Switch Users</string>\n              </property>\n              <property name=\"icon\">\n               <iconset theme=\"system-switch-user\">\n                <normaloff>.</normaloff>.</iconset>\n              </property>\n              <property name=\"description\">\n               <string>Switches to the logon screen, but keeps your session in the background</string>\n              </property>\n             </widget>\n            </item>\n            <item>\n             <widget class=\"EndSessionButton\" name=\"hibernateButton\">\n              <property name=\"text\">\n               <string>Hibernate</string>\n              </property>\n              <property name=\"icon\">\n               <iconset theme=\"system-suspend-hibernate\">\n                <normaloff>.</normaloff>.</iconset>\n              </property>\n              <property name=\"description\">\n               <string>Powers off your computer, but restores the session when powered back on</string>\n              </property>\n             </widget>\n            </item>\n            <item>\n             <spacer name=\"verticalSpacer\">\n              <property name=\"orientation\">\n               <enum>Qt::Vertical</enum>\n              </property>\n              <property name=\"sizeHint\" stdset=\"0\">\n               <size>\n                <width>0</width>\n                <height>20</height>\n               </size>\n              </property>\n             </spacer>\n            </item>\n           </layout>\n          </widget>\n         </item>\n        </layout>\n       </item>\n      </layout>\n     </widget>\n     <widget class=\"QWidget\" name=\"updatesAvailablePage\">\n      <layout class=\"QVBoxLayout\" name=\"verticalLayout_9\">\n       <property name=\"spacing\">\n        <number>0</number>\n       </property>\n       <property name=\"leftMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"topMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"rightMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"bottomMargin\">\n        <number>0</number>\n       </property>\n       <item>\n        <widget class=\"tTitleLabel\" name=\"updatesAvailableTitle\">\n         <property name=\"text\">\n          <string notr=\"true\">Reboot</string>\n         </property>\n        </widget>\n       </item>\n       <item>\n        <widget class=\"QWidget\" name=\"widget\" native=\"true\">\n         <layout class=\"QVBoxLayout\" name=\"verticalLayout_10\">\n          <property name=\"spacing\">\n           <number>0</number>\n          </property>\n          <property name=\"leftMargin\">\n           <number>0</number>\n          </property>\n          <property name=\"topMargin\">\n           <number>0</number>\n          </property>\n          <property name=\"rightMargin\">\n           <number>0</number>\n          </property>\n          <property name=\"bottomMargin\">\n           <number>0</number>\n          </property>\n          <item alignment=\"Qt::AlignHCenter\">\n           <widget class=\"QWidget\" name=\"centeredWidgetUpdates\" native=\"true\">\n            <layout class=\"QVBoxLayout\" name=\"verticalLayout_11\">\n             <property name=\"spacing\">\n              <number>0</number>\n             </property>\n             <property name=\"leftMargin\">\n              <number>0</number>\n             </property>\n             <property name=\"topMargin\">\n              <number>0</number>\n             </property>\n             <property name=\"rightMargin\">\n              <number>0</number>\n             </property>\n             <property name=\"bottomMargin\">\n              <number>0</number>\n             </property>\n             <item>\n              <layout class=\"QVBoxLayout\" name=\"verticalLayout_12\">\n               <property name=\"topMargin\">\n                <number>9</number>\n               </property>\n               <property name=\"bottomMargin\">\n                <number>6</number>\n               </property>\n               <item>\n                <widget class=\"QLabel\" name=\"label\">\n                 <property name=\"text\">\n                  <string>Updates are available. What do you want to do?</string>\n                 </property>\n                </widget>\n               </item>\n              </layout>\n             </item>\n             <item>\n              <widget class=\"QCommandLinkButton\" name=\"rebootUpdateButton\">\n               <property name=\"sizePolicy\">\n                <sizepolicy hsizetype=\"Expanding\" vsizetype=\"Preferred\">\n                 <horstretch>0</horstretch>\n                 <verstretch>0</verstretch>\n                </sizepolicy>\n               </property>\n               <property name=\"text\">\n                <string>Reboot and update</string>\n               </property>\n               <property name=\"icon\">\n                <iconset theme=\"package-upgrade\">\n                 <normaloff>.</normaloff>.</iconset>\n               </property>\n               <property name=\"description\">\n                <string>We'll perform system updates once this device has rebooted.</string>\n               </property>\n              </widget>\n             </item>\n             <item>\n              <widget class=\"QCommandLinkButton\" name=\"rebootNoUpdateButton\">\n               <property name=\"sizePolicy\">\n                <sizepolicy hsizetype=\"Expanding\" vsizetype=\"Preferred\">\n                 <horstretch>0</horstretch>\n                 <verstretch>0</verstretch>\n                </sizepolicy>\n               </property>\n               <property name=\"text\">\n                <string>Reboot</string>\n               </property>\n               <property name=\"icon\">\n                <iconset theme=\"system-reboot\">\n                 <normaloff>.</normaloff>.</iconset>\n               </property>\n               <property name=\"description\">\n                <string>We'll reboot your device normally.</string>\n               </property>\n              </widget>\n             </item>\n             <item>\n              <spacer name=\"verticalSpacer_3\">\n               <property name=\"orientation\">\n                <enum>Qt::Vertical</enum>\n               </property>\n               <property name=\"sizeHint\" stdset=\"0\">\n                <size>\n                 <width>20</width>\n                 <height>348</height>\n                </size>\n               </property>\n              </spacer>\n             </item>\n            </layout>\n           </widget>\n          </item>\n         </layout>\n        </widget>\n       </item>\n      </layout>\n     </widget>\n    </widget>\n   </item>\n  </layout>\n </widget>\n <customwidgets>\n  <customwidget>\n   <class>tStackedWidget</class>\n   <extends>QStackedWidget</extends>\n   <header location=\"global\">tstackedwidget.h</header>\n   <container>1</container>\n   <slots>\n    <signal>switchingFrame(int)</signal>\n   </slots>\n  </customwidget>\n  <customwidget>\n   <class>tTitleLabel</class>\n   <extends>QLabel</extends>\n   <header location=\"global\">ttitlelabel.h</header>\n   <slots>\n    <signal>backButtonClicked()</signal>\n   </slots>\n  </customwidget>\n  <customwidget>\n   <class>EndSessionButton</class>\n   <extends>QCommandLinkButton</extends>\n   <header>session/endsessionbutton.h</header>\n  </customwidget>\n </customwidgets>\n <resources/>\n <connections/>\n</ui>\n"
  },
  {
    "path": "desktop/session/endsessionbutton.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"endsessionbutton.h\"\n\n#include <tpaintcalculator.h>\n#include <QPainter>\n\nstruct EndSessionButtonPrivate {\n    double timeRemaining = 0;\n};\n\nEndSessionButton::EndSessionButton(QWidget* parent) : QCommandLinkButton(parent) {\n    d = new EndSessionButtonPrivate();\n}\n\nEndSessionButton::~EndSessionButton() {\n    delete d;\n}\n\nvoid EndSessionButton::setTimeRemaining(double timeRemaining) {\n    d->timeRemaining = timeRemaining;\n    this->update();\n}\n\nvoid EndSessionButton::paintEvent(QPaintEvent* event) {\n    QCommandLinkButton::paintEvent(event);\n\n    QPainter* painter = new QPainter(this);\n\n    tPaintCalculator calculator;\n    calculator.setDrawBounds(this->size());\n    calculator.setPainter(painter);\n    calculator.setLayoutDirection(this->layoutDirection());\n\n\n    calculator.addRect(QRectF(0, 0, this->width() * d->timeRemaining / 60.0, this->height()), [ = ](QRectF drawBounds) {\n        painter->setBrush(QColor(255, 255, 255, 50));\n        painter->setPen(Qt::transparent);\n        painter->drawRect(drawBounds);\n    });\n    calculator.performPaint();\n\n    delete painter;\n}\n"
  },
  {
    "path": "desktop/session/endsessionbutton.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef ENDSESSIONBUTTON_H\n#define ENDSESSIONBUTTON_H\n\n#include <QCommandLinkButton>\n\nstruct EndSessionButtonPrivate;\nclass EndSessionButton : public QCommandLinkButton {\n        Q_OBJECT\n    public:\n        explicit EndSessionButton(QWidget* parent = nullptr);\n        ~EndSessionButton();\n\n        void setTimeRemaining(double timeRemaining);\n\n    signals:\n\n    private:\n        EndSessionButtonPrivate* d;\n        void paintEvent(QPaintEvent* event);\n};\n\n#endif // ENDSESSIONBUTTON_H\n"
  },
  {
    "path": "desktop/statuscenter/leftpanedelegate.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"leftpanedelegate.h\"\n\n#include <QPainter>\n#include <libcontemporary_global.h>\n#include <tpaintcalculator.h>\n\nLeftPaneDelegate::LeftPaneDelegate(QObject* parent) :\n    QStyledItemDelegate(parent) {\n}\n\nvoid LeftPaneDelegate::paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const {\n    QStyledItemDelegate::paint(painter, option, index);\n    if (index.data(Qt::UserRole).toBool()) {\n        // Draw an indicator arrow\n        tPaintCalculator calculator;\n        calculator.setDrawBounds(option.rect);\n        calculator.setLayoutDirection(option.direction);\n\n        QRect iconRect;\n        iconRect.setSize(SC_DPI_T(QSize(16, 16), QSize));\n        iconRect.moveCenter(option.rect.center());\n        iconRect.moveRight(option.rect.right() - SC_DPI(6));\n\n        calculator.addRect(iconRect, [=](QRectF drawBounds) {\n            painter->drawPixmap(drawBounds.toRect(), QIcon::fromTheme(\"arrow-right\").pixmap(iconRect.size()));\n        });\n        calculator.performPaint();\n    }\n}\n"
  },
  {
    "path": "desktop/statuscenter/leftpanedelegate.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef LEFTPANEDELEGATE_H\n#define LEFTPANEDELEGATE_H\n\n#include <QStyledItemDelegate>\n\nclass LeftPaneDelegate : public QStyledItemDelegate {\n        Q_OBJECT\n    public:\n        explicit LeftPaneDelegate(QObject* parent = nullptr);\n\n    signals:\n\n\n        // QAbstractItemDelegate interface\n    public:\n        void paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const;\n};\n\n#endif // LEFTPANEDELEGATE_H\n"
  },
  {
    "path": "desktop/statuscenter/statuscenter.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"statuscenter.h\"\n#include \"ui_statuscenter.h\"\n\n#include <statemanager.h>\n#include <statuscentermanager.h>\n#include <statuscenterpane.h>\n#include <QListWidgetItem>\n#include <QPointer>\n#include <tpopover.h>\n#include <QShortcut>\n#include <tsettings.h>\n#include \"statuscenterleftpane.h\"\n#include \"common/common.h\"\n#include \"systemsettings/systemsettings.h\"\n\n#include <quickswitch.h>\n#include \"statuscenterquickswitch.h\"\n\nstruct StatusCenterPrivate {\n    StatusCenterLeftPane* leftPane;\n    bool leftPaneAttached = false;\n\n    QList<QPair<QString, StatusCenterPane*>> loadedPanes;\n    QMap<StatusCenterPane*, QListWidgetItem*> paneItems;\n\n\n    QList<QPair<QuickSwitch*, StatusCenterQuickSwitch*>> switchItems;\n\n    QStringList preferredPaneOrder;\n    QStringList preferredSwitchOrder;\n\n    tSettings settings;\n};\n\nStatusCenter::StatusCenter(QWidget* parent) :\n    QWidget(parent),\n    ui(new Ui::StatusCenter) {\n    ui->setupUi(this);\n\n    d = new StatusCenterPrivate();\n\n    ui->stackedWidget->setCurrentAnimation(tStackedWidget::Lift);\n\n    d->preferredPaneOrder = d->settings.delimitedList(\"StatusCenter/panesOrder\");\n    d->preferredSwitchOrder = d->settings.delimitedList(\"StatusCenter/quickSwitchOrder\");\n\n    d->preferredPaneOrder.removeAll(\"SystemSettings\");\n    d->preferredPaneOrder.append(\"SystemSettings\");\n\n    d->leftPane = new StatusCenterLeftPane(this);\n\n    if (this->width() <= SC_DPI(1024)) {\n        d->leftPaneAttached = true;\n        detachLeftPane();\n    } else {\n        d->leftPaneAttached = false;\n        attachLeftPane();\n    }\n\n    connect(StateManager::statusCenterManager(), &StatusCenterManager::paneAdded, this, [ = ](StatusCenterPane * pane, StatusCenterManager::PaneType type) {\n        if (type == StatusCenterManager::Informational) {\n            this->addPane(pane);\n        }\n    });\n    connect(StateManager::statusCenterManager(), &StatusCenterManager::paneRemoved, this, &StatusCenter::removePane);\n    connect(StateManager::statusCenterManager(), &StatusCenterManager::showHamburgerMenu, this, &StatusCenter::showHamburgerMenu);\n    connect(StateManager::statusCenterManager(), &StatusCenterManager::rootMenu, d->leftPane, &StatusCenterLeftPane::popMenu);\n    connect(StateManager::statusCenterManager(), &StatusCenterManager::switchAdded, this, &StatusCenter::addSwitch);\n    connect(StateManager::statusCenterManager(), &StatusCenterManager::switchRemoved, this, &StatusCenter::removeSwitch);\n\n    for (StatusCenterPane* pane : StateManager::statusCenterManager()->panes()) {\n        if (StateManager::statusCenterManager()->paneType(pane) == StatusCenterManager::Informational) this->addPane(pane);\n    }\n    for (QuickSwitch* sw : StateManager::statusCenterManager()->switches()) {\n        this->addSwitch(sw);\n    }\n\n    connect(d->leftPane, &StatusCenterLeftPane::indexChanged, this, QOverload<int>::of(&StatusCenter::selectPane));\n    connect(d->leftPane, &StatusCenterLeftPane::enterMenu, this, &StatusCenter::enterMenu);\n\n    connect(StateManager::statusCenterManager(), QOverload<QString>::of(&StatusCenterManager::paneRequest), this, [ = ](QString paneName) {\n        for (StatusCenterPane* pane : StateManager::statusCenterManager()->panes()) {\n            if (pane->name() == paneName) {\n                if (StateManager::statusCenterManager()->paneType(pane) == StatusCenterManager::Informational) {\n                    selectPane(pane);\n                } else {\n                    selectPane(\"SystemSettings\");\n                }\n            }\n        }\n    });\n    connect(StateManager::statusCenterManager(), QOverload<StatusCenterPane*>::of(&StatusCenterManager::paneRequest), this, [ = ](StatusCenterPane * pane) {\n        if (StateManager::statusCenterManager()->paneType(pane) == StatusCenterManager::Informational) {\n            selectPane(pane);\n        } else {\n            selectPane(\"SystemSettings\");\n        }\n    });\n\n    //Add internal items to the Status Center\n    StateManager::instance()->statusCenterManager()->addPane(new SystemSettings(d->leftPane), StatusCenterManager::Informational);\n\n    QShortcut* escapeShortcut = new QShortcut(Qt::Key_Escape, this);\n    connect(escapeShortcut, &QShortcut::activated, ui->closeButton, &QToolButton::click);\n}\n\nStatusCenter::~StatusCenter() {\n    delete d;\n    delete ui;\n}\n\nvoid StatusCenter::on_closeButton_clicked() {\n    StateManager::instance()->statusCenterManager()->hide();\n}\n\nvoid StatusCenter::resizeEvent(QResizeEvent* event) {\n    if (this->width() <= SC_DPI(1024)) {\n        detachLeftPane();\n    } else {\n        attachLeftPane();\n    }\n}\n\nvoid StatusCenter::attachLeftPane() {\n    if (d->leftPaneAttached) return;\n\n    ui->leftPaneContainer->addWidget(d->leftPane);\n    d->leftPane->setAttached(true);\n    StateManager::statusCenterManager()->setIsHamburgerMenuRequired(false);\n    d->leftPaneAttached = true;\n}\n\nvoid StatusCenter::detachLeftPane() {\n    if (!d->leftPaneAttached) return;\n\n    ui->leftPaneContainer->removeWidget(d->leftPane);\n    d->leftPane->move(-d->leftPane->width(), 0);\n    d->leftPane->setAttached(false);\n    StateManager::statusCenterManager()->setIsHamburgerMenuRequired(true);\n    d->leftPaneAttached = false;\n}\n\nvoid StatusCenter::showHamburgerMenu() {\n    if (!tPopover::popoverForWidget(ui->mainWidget)) {\n        tPopover* popover = new tPopover(d->leftPane);\n        popover->setPopoverWidth(d->leftPane->width());\n        popover->setPopoverSide(tPopover::Leading);\n        connect(StateManager::statusCenterManager(), &StatusCenterManager::hideHamburgerMenu, popover, &tPopover::dismiss);\n        connect(popover, &tPopover::dismissed, popover, &tPopover::deleteLater);\n        popover->show(ui->mainWidget);\n    }\n}\n\nvoid StatusCenter::selectPane(StatusCenterPane* pane) {\n    ui->stackedWidget->setCurrentWidget(pane);\n    if (pane->leftPane()) d->leftPane->pushMenu(pane->leftPane());\n    d->paneItems.value(pane)->setSelected(true);\n}\n\nvoid StatusCenter::selectPane(QString pane) {\n    for (QPair<QString, StatusCenterPane*> loadedPane : d->loadedPanes) {\n        if (loadedPane.first == pane) selectPane(loadedPane.second);\n    }\n}\n\nvoid StatusCenter::selectPane(int index) {\n    selectPane(d->loadedPanes.at(index).second);\n}\n\nvoid StatusCenter::enterMenu(int index) {\n    StatusCenterPane* pane = d->loadedPanes.at(index).second;\n    if (pane->leftPane()) {\n        if (d->leftPane->peekMenu() != pane->leftPane()) d->leftPane->pushMenu(pane->leftPane());\n    } else {\n        StateManager::statusCenterManager()->hideStatusCenterHamburgerMenu();\n    }\n}\n\nvoid StatusCenter::addPane(StatusCenterPane* pane) {\n    QListWidgetItem* item = new QListWidgetItem();\n    item->setText(pane->displayName());\n    item->setIcon(pane->icon());\n\n    connect(pane, &StatusCenterPane::displayNameChanged, this, [ = ] {\n        if (d->paneItems.contains(pane)) {\n            d->paneItems.value(pane)->setText(pane->displayName());\n        }\n    });\n    connect(pane, &StatusCenterPane::iconChanged, this, [ = ] {\n        if (d->paneItems.contains(pane)) {\n            d->paneItems.value(pane)->setIcon(pane->icon());\n        }\n    });\n    if (pane->leftPane()) {\n        item->setData(Qt::UserRole, true);\n    }\n    d->paneItems.insert(pane, item);\n\n    QStringList currentItems;\n    for (QPair<QString, StatusCenterPane*> item : d->loadedPanes) {\n        currentItems.append(item.first);\n    }\n    int index = Common::getInsertionIndex(d->preferredPaneOrder, currentItems, pane->name());\n    if (index == -1) {\n        //Add it at the end\n        ui->stackedWidget->addWidget(pane);\n        d->leftPane->appendItem(item);\n        d->loadedPanes.append({pane->name(), pane});\n    } else {\n        //Add this chunk at the correct index\n        ui->stackedWidget->insertWidget(index, pane);\n        d->leftPane->insertItem(index, item);\n        d->loadedPanes.insert(index, {pane->name(), pane});\n    }\n}\n\nvoid StatusCenter::removePane(StatusCenterPane* pane) {\n    for (int i = 0; i < d->loadedPanes.count(); i++) {\n        if (d->loadedPanes.at(i).second == pane) {\n            QListWidgetItem* item = d->paneItems.take(pane);\n            d->leftPane->removeItem(item);\n            delete item;\n\n            ui->stackedWidget->removeWidget(pane);\n            d->loadedPanes.removeAt(i);\n            return;\n        }\n    }\n}\n\nvoid StatusCenter::addSwitch(QuickSwitch* sw) {\n    QStringList currentItems;\n    for (QPair<QuickSwitch*, StatusCenterQuickSwitch*> item : d->switchItems) {\n        currentItems.append(item.first->name());\n    }\n    StatusCenterQuickSwitch* item = new StatusCenterQuickSwitch(sw);\n    int index = Common::getInsertionIndex(d->preferredSwitchOrder, currentItems, sw->name());\n    if (index == -1) {\n        //Add it at the end\n        ui->quickSwitchLayout->addWidget(item);\n        d->switchItems.append({sw, item});\n    } else {\n        //Add this switch at the correct index\n        ui->quickSwitchLayout->insertWidget(index, item);\n        d->switchItems.insert(index, {sw, item});\n    }\n\n}\n\nvoid StatusCenter::removeSwitch(QuickSwitch* sw) {\n    for (int i = 0; i < d->switchItems.count(); i++) {\n        if (d->switchItems.at(i).first == sw) {\n            ui->quickSwitchLayout->removeWidget(d->switchItems.at(i).second);\n            d->switchItems.at(i).second->deleteLater();\n            d->switchItems.removeAt(i);\n            return;\n        }\n    }\n}\n"
  },
  {
    "path": "desktop/statuscenter/statuscenter.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef STATUSCENTER_H\n#define STATUSCENTER_H\n\n#include <QWidget>\n\nnamespace Ui {\n    class StatusCenter;\n}\n\nclass StatusCenterPane;\nclass QuickSwitch;\nstruct StatusCenterPrivate;\nclass StatusCenter : public QWidget {\n        Q_OBJECT\n\n    public:\n        explicit StatusCenter(QWidget* parent = nullptr);\n        ~StatusCenter();\n\n    private slots:\n        void on_closeButton_clicked();\n\n    private:\n        Ui::StatusCenter* ui;\n        StatusCenterPrivate* d;\n\n        void resizeEvent(QResizeEvent* event);\n\n        void attachLeftPane();\n        void detachLeftPane();\n        void showHamburgerMenu();\n\n        void selectPane(StatusCenterPane* pane);\n        void selectPane(QString pane);\n        void selectPane(int index);\n        void enterMenu(int index);\n\n        void addPane(StatusCenterPane* pane);\n        void removePane(StatusCenterPane* pane);\n\n        void addSwitch(QuickSwitch* sw);\n        void removeSwitch(QuickSwitch* sw);\n};\n\n#endif // STATUSCENTER_H\n"
  },
  {
    "path": "desktop/statuscenter/statuscenter.ui",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ui version=\"4.0\">\n <class>StatusCenter</class>\n <widget class=\"QWidget\" name=\"StatusCenter\">\n  <property name=\"geometry\">\n   <rect>\n    <x>0</x>\n    <y>0</y>\n    <width>677</width>\n    <height>450</height>\n   </rect>\n  </property>\n  <property name=\"windowTitle\">\n   <string notr=\"true\">Form</string>\n  </property>\n  <layout class=\"QVBoxLayout\" name=\"verticalLayout\">\n   <property name=\"spacing\">\n    <number>0</number>\n   </property>\n   <property name=\"leftMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"topMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"rightMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"bottomMargin\">\n    <number>0</number>\n   </property>\n   <item>\n    <widget class=\"QWidget\" name=\"widget\" native=\"true\">\n     <layout class=\"QHBoxLayout\" name=\"horizontalLayout\">\n      <item>\n       <widget class=\"QToolButton\" name=\"closeButton\">\n        <property name=\"text\">\n         <string/>\n        </property>\n        <property name=\"icon\">\n         <iconset theme=\"window-close\">\n          <normaloff>.</normaloff>.</iconset>\n        </property>\n        <property name=\"autoRaise\">\n         <bool>true</bool>\n        </property>\n       </widget>\n      </item>\n      <item>\n       <layout class=\"QHBoxLayout\" name=\"quickSwitchLayout\"/>\n      </item>\n      <item>\n       <spacer name=\"horizontalSpacer\">\n        <property name=\"orientation\">\n         <enum>Qt::Horizontal</enum>\n        </property>\n        <property name=\"sizeHint\" stdset=\"0\">\n         <size>\n          <width>40</width>\n          <height>20</height>\n         </size>\n        </property>\n       </spacer>\n      </item>\n     </layout>\n    </widget>\n   </item>\n   <item>\n    <widget class=\"Line\" name=\"line\">\n     <property name=\"maximumSize\">\n      <size>\n       <width>16777215</width>\n       <height>1</height>\n      </size>\n     </property>\n     <property name=\"orientation\">\n      <enum>Qt::Horizontal</enum>\n     </property>\n    </widget>\n   </item>\n   <item>\n    <widget class=\"QWidget\" name=\"mainWidget\" native=\"true\">\n     <layout class=\"QHBoxLayout\" name=\"horizontalLayout_2\">\n      <property name=\"spacing\">\n       <number>0</number>\n      </property>\n      <property name=\"leftMargin\">\n       <number>0</number>\n      </property>\n      <property name=\"topMargin\">\n       <number>0</number>\n      </property>\n      <property name=\"rightMargin\">\n       <number>0</number>\n      </property>\n      <property name=\"bottomMargin\">\n       <number>0</number>\n      </property>\n      <item>\n       <layout class=\"QHBoxLayout\" name=\"leftPaneContainer\"/>\n      </item>\n      <item>\n       <widget class=\"tStackedWidget\" name=\"stackedWidget\"/>\n      </item>\n     </layout>\n    </widget>\n   </item>\n  </layout>\n </widget>\n <customwidgets>\n  <customwidget>\n   <class>tStackedWidget</class>\n   <extends>QStackedWidget</extends>\n   <header location=\"global\">tstackedwidget.h</header>\n   <container>1</container>\n   <slots>\n    <signal>switchingFrame(int)</signal>\n   </slots>\n  </customwidget>\n </customwidgets>\n <resources/>\n <connections/>\n</ui>\n"
  },
  {
    "path": "desktop/statuscenter/statuscenterleftpane.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"statuscenterleftpane.h\"\n#include \"ui_statuscenterleftpane.h\"\n\n#include \"leftpanedelegate.h\"\n#include <QPainter>\n#include <libcontemporary_global.h>\n\nstruct StatusCenterLeftPanePrivate {\n        bool attached;\n};\n\nStatusCenterLeftPane::StatusCenterLeftPane(QWidget* parent) :\n    QWidget(parent),\n    ui(new Ui::StatusCenterLeftPane) {\n    ui->setupUi(this);\n\n    d = new StatusCenterLeftPanePrivate();\n    ui->mainList->setIconSize(SC_DPI_T(QSize(32, 32), QSize));\n    ui->stackedWidget->setCurrentAnimation(tStackedWidget::SlideHorizontal);\n    ui->mainList->setItemDelegate(new LeftPaneDelegate(this));\n}\n\nStatusCenterLeftPane::~StatusCenterLeftPane() {\n    delete d;\n    delete ui;\n}\n\nvoid StatusCenterLeftPane::appendItem(QListWidgetItem* item) {\n    ui->mainList->addItem(item);\n}\n\nvoid StatusCenterLeftPane::insertItem(int index, QListWidgetItem* item) {\n    ui->mainList->insertItem(index, item);\n}\n\nvoid StatusCenterLeftPane::removeItem(QListWidgetItem* item) {\n    ui->mainList->removeItemWidget(item);\n}\n\nvoid StatusCenterLeftPane::setSelected(QListWidgetItem* item) {\n    item->setSelected(true);\n}\n\nvoid StatusCenterLeftPane::setAttached(bool attached) {\n    d->attached = attached;\n    if (attached) {\n        if (this->layoutDirection() == Qt::RightToLeft) {\n            this->layout()->setContentsMargins(1, 0, 1, 0);\n        } else {\n            this->layout()->setContentsMargins(0, 0, 1, 0);\n        }\n        this->setFixedWidth(SC_DPI(300) + 1);\n    } else {\n        this->layout()->setContentsMargins(0, 0, 0, 0);\n        this->setFixedWidth(SC_DPI(300));\n    }\n}\n\nvoid StatusCenterLeftPane::pushMenu(QWidget* menu) {\n    ui->stackedWidget->addWidget(menu);\n    ui->stackedWidget->setCurrentWidget(menu);\n}\n\nvoid StatusCenterLeftPane::popMenu() {\n    if (ui->stackedWidget->count() == 1) return;\n\n    QMetaObject::Connection* connection = new QMetaObject::Connection();\n    *connection = connect(ui->stackedWidget, &tStackedWidget::currentChanged, this, [=] {\n        disconnect(*connection);\n        delete connection;\n\n        QWidget* lastWidget = ui->stackedWidget->widget(ui->stackedWidget->currentIndex() + 1);\n        ui->stackedWidget->removeWidget(lastWidget);\n    });\n    ui->stackedWidget->setCurrentIndex(ui->stackedWidget->currentIndex() - 1);\n}\n\nQWidget* StatusCenterLeftPane::peekMenu() {\n    return ui->stackedWidget->currentWidget();\n}\n\nvoid StatusCenterLeftPane::paintEvent(QPaintEvent* event) {\n    if (d->attached) {\n        QPainter painter(this);\n        painter.setPen(libContemporaryCommon::lineColor(this->palette().color(QPalette::WindowText)));\n        if (this->layoutDirection() == Qt::RightToLeft) {\n            painter.drawLine(0, 0, 0, this->height());\n        } else {\n            painter.drawLine(this->width() - 1, 0, this->width() - 1, this->height());\n        }\n    }\n}\n\nvoid StatusCenterLeftPane::changeEvent(QEvent* event) {\n    if (event->type() == QEvent::LanguageChange) {\n        ui->retranslateUi(this);\n    } else if (event->type() == QEvent::LayoutDirectionChange) {\n        this->setAttached(d->attached);\n    }\n}\n\nvoid StatusCenterLeftPane::on_mainList_currentRowChanged(int currentRow) {\n    emit indexChanged(currentRow);\n}\n\nvoid StatusCenterLeftPane::on_mainList_clicked(const QModelIndex& index) {\n    emit enterMenu(index.row());\n}\n"
  },
  {
    "path": "desktop/statuscenter/statuscenterleftpane.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef STATUSCENTERLEFTPANE_H\n#define STATUSCENTERLEFTPANE_H\n\n#include <QWidget>\n\nnamespace Ui {\n    class StatusCenterLeftPane;\n}\n\nclass QListWidgetItem;\nstruct StatusCenterLeftPanePrivate;\nclass StatusCenterLeftPane : public QWidget {\n        Q_OBJECT\n\n    public:\n        explicit StatusCenterLeftPane(QWidget* parent = nullptr);\n        ~StatusCenterLeftPane();\n\n        void appendItem(QListWidgetItem* item);\n        void insertItem(int index, QListWidgetItem* item);\n        void removeItem(QListWidgetItem* item);\n        void setSelected(QListWidgetItem* item);\n        void setAttached(bool attached);\n\n        void pushMenu(QWidget* menu);\n        void popMenu();\n        QWidget* peekMenu();\n\n    signals:\n        void indexChanged(int index);\n        void enterMenu(int index);\n\n    private slots:\n        void on_mainList_currentRowChanged(int currentRow);\n\n        void on_mainList_clicked(const QModelIndex& index);\n\n    private:\n        Ui::StatusCenterLeftPane* ui;\n        StatusCenterLeftPanePrivate* d;\n\n        void paintEvent(QPaintEvent* event);\n        void changeEvent(QEvent* event);\n};\n\n#endif // STATUSCENTERLEFTPANE_H\n"
  },
  {
    "path": "desktop/statuscenter/statuscenterleftpane.ui",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ui version=\"4.0\">\n <class>StatusCenterLeftPane</class>\n <widget class=\"QWidget\" name=\"StatusCenterLeftPane\">\n  <property name=\"geometry\">\n   <rect>\n    <x>0</x>\n    <y>0</y>\n    <width>400</width>\n    <height>390</height>\n   </rect>\n  </property>\n  <property name=\"windowTitle\">\n   <string notr=\"true\">Form</string>\n  </property>\n  <layout class=\"QVBoxLayout\" name=\"verticalLayout\">\n   <property name=\"spacing\">\n    <number>0</number>\n   </property>\n   <property name=\"leftMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"topMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"rightMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"bottomMargin\">\n    <number>0</number>\n   </property>\n   <item>\n    <widget class=\"tStackedWidget\" name=\"stackedWidget\">\n     <widget class=\"QWidget\" name=\"mainPage\">\n      <layout class=\"QVBoxLayout\" name=\"verticalLayout_2\">\n       <property name=\"spacing\">\n        <number>0</number>\n       </property>\n       <property name=\"leftMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"topMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"rightMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"bottomMargin\">\n        <number>0</number>\n       </property>\n       <item>\n        <widget class=\"tTitleLabel\" name=\"label\">\n         <property name=\"text\">\n          <string>Status Center</string>\n         </property>\n        </widget>\n       </item>\n       <item>\n        <widget class=\"QListWidget\" name=\"mainList\">\n         <property name=\"frameShape\">\n          <enum>QFrame::NoFrame</enum>\n         </property>\n         <property name=\"uniformItemSizes\">\n          <bool>true</bool>\n         </property>\n        </widget>\n       </item>\n      </layout>\n     </widget>\n    </widget>\n   </item>\n  </layout>\n </widget>\n <customwidgets>\n  <customwidget>\n   <class>tStackedWidget</class>\n   <extends>QStackedWidget</extends>\n   <header location=\"global\">tstackedwidget.h</header>\n   <container>1</container>\n   <slots>\n    <signal>switchingFrame(int)</signal>\n   </slots>\n  </customwidget>\n  <customwidget>\n   <class>tTitleLabel</class>\n   <extends>QLabel</extends>\n   <header location=\"global\">ttitlelabel.h</header>\n   <slots>\n    <signal>backButtonClicked()</signal>\n   </slots>\n  </customwidget>\n </customwidgets>\n <resources/>\n <connections/>\n</ui>\n"
  },
  {
    "path": "desktop/statuscenter/statuscenterquickswitch.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"statuscenterquickswitch.h\"\n#include \"ui_statuscenterquickswitch.h\"\n\n#include <quickswitch.h>\n\nstruct StatusCenterQuickSwitchPrivate {\n    QuickSwitch* sw;\n};\n\nStatusCenterQuickSwitch::StatusCenterQuickSwitch(QuickSwitch* sw, QWidget* parent) :\n    QWidget(parent),\n    ui(new Ui::StatusCenterQuickSwitch) {\n    ui->setupUi(this);\n    d = new StatusCenterQuickSwitchPrivate();\n\n    d->sw = sw;\n    ui->sw->setChecked(sw->isChecked());\n    ui->titleLabel->setText(sw->title());\n\n    sw->setSwitch(ui->sw);\n    connect(sw, &QuickSwitch::titleChanged, ui->titleLabel, &QLabel::setText);\n}\n\nStatusCenterQuickSwitch::~StatusCenterQuickSwitch() {\n    delete d;\n    delete ui;\n}\n\nvoid StatusCenterQuickSwitch::on_sw_toggled(bool checked) {\n    d->sw->setChecked(checked);\n}\n"
  },
  {
    "path": "desktop/statuscenter/statuscenterquickswitch.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef STATUSCENTERQUICKSWITCH_H\n#define STATUSCENTERQUICKSWITCH_H\n\n#include <QWidget>\n\nnamespace Ui {\n    class StatusCenterQuickSwitch;\n}\n\nclass QuickSwitch;\nstruct StatusCenterQuickSwitchPrivate;\nclass StatusCenterQuickSwitch : public QWidget {\n        Q_OBJECT\n\n    public:\n        explicit StatusCenterQuickSwitch(QuickSwitch* sw, QWidget* parent = nullptr);\n        ~StatusCenterQuickSwitch();\n\n    private slots:\n        void on_sw_toggled(bool checked);\n\n    private:\n        Ui::StatusCenterQuickSwitch* ui;\n        StatusCenterQuickSwitchPrivate* d;\n};\n\n#endif // STATUSCENTERQUICKSWITCH_H\n"
  },
  {
    "path": "desktop/statuscenter/statuscenterquickswitch.ui",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ui version=\"4.0\">\n <class>StatusCenterQuickSwitch</class>\n <widget class=\"QWidget\" name=\"StatusCenterQuickSwitch\">\n  <property name=\"geometry\">\n   <rect>\n    <x>0</x>\n    <y>0</y>\n    <width>163</width>\n    <height>43</height>\n   </rect>\n  </property>\n  <property name=\"windowTitle\">\n   <string notr=\"true\">Form</string>\n  </property>\n  <layout class=\"QHBoxLayout\" name=\"horizontalLayout\">\n   <item>\n    <widget class=\"tSwitch\" name=\"sw\">\n     <property name=\"text\">\n      <string notr=\"true\">Switch</string>\n     </property>\n    </widget>\n   </item>\n   <item>\n    <widget class=\"QLabel\" name=\"titleLabel\">\n     <property name=\"text\">\n      <string notr=\"true\">TextLabel</string>\n     </property>\n    </widget>\n   </item>\n  </layout>\n </widget>\n <customwidgets>\n  <customwidget>\n   <class>tSwitch</class>\n   <extends>QPushButton</extends>\n   <header location=\"global\">tswitch.h</header>\n  </customwidget>\n </customwidgets>\n <resources/>\n <connections/>\n</ui>\n"
  },
  {
    "path": "desktop/systemsettings/about/about.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"about.h\"\n#include \"ui_about.h\"\n\n#include \"acknowledgements.h\"\n#include \"changehostnamepopover.h\"\n#include <QBuffer>\n#include <QDBusInterface>\n#include <QFile>\n#include <QHostInfo>\n#include <QIcon>\n#include <Wm/desktopwm.h>\n#include <statemanager.h>\n#include <statuscentermanager.h>\n#include <sys/sysinfo.h>\n#include <tapplication.h>\n#include <tlogger.h>\n#include <tpopover.h>\n\n#include <QOffscreenSurface>\n#include <QOpenGLContext>\n#include <QOpenGLFunctions>\n\nstruct AboutPrivate {\n        QDBusInterface* hostnamed;\n};\n\nAbout::About() :\n    StatusCenterPane(),\n    ui(new Ui::About) {\n    ui->setupUi(this);\n\n    d = new AboutPrivate();\n    d->hostnamed = new QDBusInterface(\"org.freedesktop.hostname1\", \"/org/freedesktop/hostname1\", \"org.freedesktop.hostname1\", QDBusConnection::systemBus());\n\n    ui->titleLabel->setBackButtonIsMenu(true);\n    ui->titleLabel->setBackButtonShown(StateManager::instance()->statusCenterManager()->isHamburgerMenuRequired());\n    connect(StateManager::instance()->statusCenterManager(), &StatusCenterManager::isHamburgerMenuRequiredChanged, ui->titleLabel, &tTitleLabel::setBackButtonShown);\n\n    // Fill in details from hostnamed\n    ui->deviceTypeLabel->setText(QStringLiteral(\"%1 %2\").arg(d->hostnamed->property(\"HardwareVendor\").toString(), d->hostnamed->property(\"HardwareModel\").toString()));\n    ui->distroWebpage->setText(d->hostnamed->property(\"HomeURL\").toString());\n    ui->distroName->setText(d->hostnamed->property(\"OperatingSystemPrettyName\").toString());\n\n    struct sysinfo* info = new struct sysinfo;\n    if (sysinfo(info) == 0) {\n        ui->availableMemory->setText(QLocale().formattedDataSize(static_cast<qint64>(info->totalram)));\n        ui->availableSwap->setText(QLocale().formattedDataSize(static_cast<qint64>(info->totalswap)));\n    } else {\n        ui->availableMemory->setText(tr(\"Unknown\"));\n        ui->availableSwap->setText(tr(\"Unknown\"));\n    }\n    delete info;\n\n    ui->kernelVersion->setText(QSysInfo::kernelVersion());\n    ui->qtVersion->setText(qVersion());\n\n    QFile cpuInfoFile(\"/proc/cpuinfo\");\n    cpuInfoFile.open(QFile::ReadOnly);\n    QByteArray cpuInfoBuf = cpuInfoFile.readAll();\n    QBuffer cpuInfo(&cpuInfoBuf);\n    cpuInfo.open(QBuffer::ReadOnly);\n    QStringList knownCpus;\n    while (!cpuInfo.atEnd()) {\n        QString line = cpuInfo.readLine();\n        if (line.startsWith(\"model name\")) {\n            QString cpu = line.mid(line.indexOf(\":\") + 1).trimmed();\n            knownCpus.append(cpu);\n        }\n    }\n\n    QStringList shownCpus;\n    while (knownCpus.length() > 0) {\n        QString cpu = knownCpus.value(0);\n        int numberOfThisCpu = knownCpus.count(cpu);\n\n        knownCpus.removeAll(cpu);\n\n        if (numberOfThisCpu == 1) {\n            shownCpus.append(cpu);\n        } else {\n            shownCpus.append(QString::number(numberOfThisCpu) + \" × \" + cpu);\n        }\n    }\n\n    if (shownCpus.length() == 0) {\n        ui->processorType->setText(tr(\"Unknown\"));\n    } else {\n        ui->processorType->setText(shownCpus.join(\" · \"));\n    }\n\n    QDBusConnection::systemBus().connect(\"org.freedesktop.hostname1\", \"/org/freedesktop/hostname1\", \"org.freedesktop.DBus.Properties\", \"PropertiesChanged\", this, SLOT(updateHostname()));\n    updateHostname();\n\n    ui->videoLabel->setText(videoCard());\n    ui->windowSystemLabel->setText(DesktopWm::windowSystemName());\n\n#ifdef BLUEPRINT\n    ui->versionLabel->setText(tr(\"theDesk %1 - Blueprint\").arg(\"1.0\"));\n    ui->compileDate->setText(tr(\"You compiled theDesk on %1\").arg(__DATE__));\n#else\n    ui->versionLabel->setText(tr(\"theDesk %1\").arg(tApplication::applicationVersion()));\n    ui->compileDate->setVisible(false);\n#endif\n\n    ui->copyrightNotice->setText(tr(\"Copyright © Victor Tran %1. Licensed under the terms of the GNU General Public License, version 3 or later.\").arg(tApplication::copyrightYear()));\n\n    const int contentWidth = StateManager::instance()->statusCenterManager()->preferredContentWidth();\n    ui->sysinfoFrame->layout()->setAlignment(ui->distributionPane, Qt::AlignHCenter);\n    ui->sysinfoFrame->layout()->setAlignment(ui->hardwareSoftwarePane, Qt::AlignHCenter);\n    ui->centralWidget->layout()->setAlignment(ui->aboutPane, Qt::AlignHCenter);\n    ui->centralWidget->layout()->setAlignment(ui->copyrightNotice, Qt::AlignHCenter);\n    ui->distributionPane->setFixedWidth(contentWidth);\n    ui->hardwareSoftwarePane->setFixedWidth(contentWidth);\n    ui->aboutPane->setFixedWidth(contentWidth);\n    ui->copyrightNotice->setFixedWidth(contentWidth);\n}\n\nAbout::~About() {\n    delete d;\n    delete ui;\n}\n\nvoid About::on_titleLabel_backButtonClicked() {\n    StateManager::instance()->statusCenterManager()->showStatusCenterHamburgerMenu();\n}\n\nvoid About::changeEvent(QEvent* event) {\n    if (event->type() == QEvent::LanguageChange) {\n        ui->retranslateUi(this);\n        emit displayNameChanged();\n    }\n}\n\nQString About::videoCard() {\n    QSurfaceFormat format;\n    format.setMajorVersion(3); // Specify the version of OpenGL context\n    format.setMinorVersion(2);\n    format.setProfile(QSurfaceFormat::CoreProfile); // Modern OpenGL\n\n    QOffscreenSurface offscreenSurface;\n    offscreenSurface.setFormat(format); // Apply the format\n    offscreenSurface.create();          // This must be called to actually create the surface\n\n    QOpenGLContext context;\n    context.setFormat(format); // Again, set the format\n    if (!context.create())     // Try to create the OpenGL context\n    {\n        return tr(\"Unknown\");\n    }\n\n    if (!context.makeCurrent(&offscreenSurface)) // Attempt to make the context current\n    {\n        return tr(\"Unknown\");\n    }\n\n    QOpenGLFunctions* functions = context.functions(); // Get the OpenGL functions for the current context\n\n    QString renderer = QString::fromUtf8(reinterpret_cast<const char*>(functions->glGetString(GL_RENDERER))); // Get the GPU's name\n\n    context.doneCurrent();\n\n    return renderer;\n}\n\nQString About::name() {\n    return \"SystemAbout\";\n}\n\nQString About::displayName() {\n    return tr(\"About\");\n}\n\nQIcon About::icon() {\n    return QIcon::fromTheme(\"preferences-desktop-about\");\n}\n\nQWidget* About::leftPane() {\n    return nullptr;\n}\n\nvoid About::on_acknowledgementsButton_clicked() {\n    Acknowledgements* ack = new Acknowledgements();\n    tPopover* popover = new tPopover(ack);\n    popover->setPopoverWidth(SC_DPI(600));\n    connect(ack, &Acknowledgements::done, popover, &tPopover::dismiss);\n    connect(popover, &tPopover::dismissed, ack, &Acknowledgements::deleteLater);\n    connect(popover, &tPopover::dismissed, popover, &tPopover::deleteLater);\n    popover->show(this->window());\n}\n\nvoid About::on_debugLogButton_clicked() {\n    StateManager::statusCenterManager()->hide();\n    tLogger::openDebugLogWindow();\n}\n\nvoid About::on_changeHostnameButton_clicked() {\n    ChangeHostnamePopover* changeHostname = new ChangeHostnamePopover();\n    tPopover* popover = new tPopover(changeHostname);\n    popover->setPopoverWidth(SC_DPI(600));\n    connect(changeHostname, &ChangeHostnamePopover::done, popover, &tPopover::dismiss);\n    connect(popover, &tPopover::dismissed, changeHostname, &Acknowledgements::deleteLater);\n    connect(popover, &tPopover::dismissed, popover, &tPopover::deleteLater);\n    popover->show(this->window());\n}\n\nvoid About::updateHostname() {\n    QString hostname = d->hostnamed->property(\"PrettyHostname\").toString();\n    if (hostname.isEmpty()) hostname = d->hostnamed->property(\"Hostname\").toString();\n    if (hostname.isEmpty()) hostname = QHostInfo::localHostName();\n\n    ui->hostnameLabel->setText(hostname);\n}\n"
  },
  {
    "path": "desktop/systemsettings/about/about.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef ABOUT_H\n#define ABOUT_H\n\n#include <statuscenterpane.h>\n\nnamespace Ui {\n    class About;\n}\n\nstruct AboutPrivate;\nclass About : public StatusCenterPane {\n        Q_OBJECT\n\n    public:\n        explicit About();\n        ~About();\n\n    private slots:\n        void on_titleLabel_backButtonClicked();\n\n        void on_acknowledgementsButton_clicked();\n\n        void on_debugLogButton_clicked();\n\n        void on_changeHostnameButton_clicked();\n\n        void updateHostname();\n\n    private:\n        Ui::About* ui;\n        AboutPrivate* d;\n\n        void changeEvent(QEvent* event);\n\n        QString videoCard();\n\n        // StatusCenterPane interface\n    public:\n        QString name();\n        QString displayName();\n        QIcon icon();\n        QWidget* leftPane();\n};\n\n#endif // ABOUT_H\n"
  },
  {
    "path": "desktop/systemsettings/about/about.ui",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ui version=\"4.0\">\n <class>About</class>\n <widget class=\"QWidget\" name=\"About\">\n  <property name=\"geometry\">\n   <rect>\n    <x>0</x>\n    <y>0</y>\n    <width>868</width>\n    <height>573</height>\n   </rect>\n  </property>\n  <property name=\"windowTitle\">\n   <string notr=\"true\">Form</string>\n  </property>\n  <layout class=\"QVBoxLayout\" name=\"verticalLayout_2\">\n   <property name=\"spacing\">\n    <number>0</number>\n   </property>\n   <property name=\"leftMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"topMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"rightMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"bottomMargin\">\n    <number>0</number>\n   </property>\n   <item>\n    <widget class=\"tTitleLabel\" name=\"titleLabel\">\n     <property name=\"text\">\n      <string>About</string>\n     </property>\n    </widget>\n   </item>\n   <item>\n    <widget class=\"QScrollArea\" name=\"scrollArea\">\n     <property name=\"frameShape\">\n      <enum>QFrame::NoFrame</enum>\n     </property>\n     <property name=\"widgetResizable\">\n      <bool>true</bool>\n     </property>\n     <widget class=\"QWidget\" name=\"scrollAreaWidgetContents\">\n      <property name=\"geometry\">\n       <rect>\n        <x>0</x>\n        <y>-105</y>\n        <width>854</width>\n        <height>661</height>\n       </rect>\n      </property>\n      <layout class=\"QHBoxLayout\" name=\"horizontalLayout\">\n       <property name=\"spacing\">\n        <number>0</number>\n       </property>\n       <property name=\"leftMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"topMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"rightMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"bottomMargin\">\n        <number>0</number>\n       </property>\n       <item>\n        <widget class=\"QWidget\" name=\"centralWidget\" native=\"true\">\n         <layout class=\"QVBoxLayout\" name=\"verticalLayout_3\">\n          <property name=\"spacing\">\n           <number>0</number>\n          </property>\n          <property name=\"leftMargin\">\n           <number>0</number>\n          </property>\n          <property name=\"topMargin\">\n           <number>0</number>\n          </property>\n          <property name=\"rightMargin\">\n           <number>0</number>\n          </property>\n          <property name=\"bottomMargin\">\n           <number>0</number>\n          </property>\n          <item>\n           <widget class=\"QFrame\" name=\"sysinfoFrame\">\n            <property name=\"frameShape\">\n             <enum>QFrame::NoFrame</enum>\n            </property>\n            <property name=\"frameShadow\">\n             <enum>QFrame::Raised</enum>\n            </property>\n            <layout class=\"QVBoxLayout\" name=\"verticalLayout_32\">\n             <property name=\"spacing\">\n              <number>0</number>\n             </property>\n             <property name=\"leftMargin\">\n              <number>0</number>\n             </property>\n             <property name=\"topMargin\">\n              <number>0</number>\n             </property>\n             <property name=\"rightMargin\">\n              <number>0</number>\n             </property>\n             <property name=\"bottomMargin\">\n              <number>0</number>\n             </property>\n             <item>\n              <widget class=\"QWidget\" name=\"distributionPane\" native=\"true\">\n               <property name=\"sizePolicy\">\n                <sizepolicy hsizetype=\"Expanding\" vsizetype=\"Preferred\">\n                 <horstretch>0</horstretch>\n                 <verstretch>0</verstretch>\n                </sizepolicy>\n               </property>\n               <layout class=\"QGridLayout\" name=\"gridLayout_21\">\n                <property name=\"leftMargin\">\n                 <number>9</number>\n                </property>\n                <property name=\"topMargin\">\n                 <number>9</number>\n                </property>\n                <property name=\"rightMargin\">\n                 <number>9</number>\n                </property>\n                <property name=\"bottomMargin\">\n                 <number>9</number>\n                </property>\n                <property name=\"spacing\">\n                 <number>6</number>\n                </property>\n                <item row=\"1\" column=\"1\">\n                 <widget class=\"QLabel\" name=\"distroName\">\n                  <property name=\"sizePolicy\">\n                   <sizepolicy hsizetype=\"Expanding\" vsizetype=\"Preferred\">\n                    <horstretch>0</horstretch>\n                    <verstretch>0</verstretch>\n                   </sizepolicy>\n                  </property>\n                  <property name=\"font\">\n                   <font>\n                    <pointsize>15</pointsize>\n                    <bold>true</bold>\n                   </font>\n                  </property>\n                  <property name=\"text\">\n                   <string notr=\"true\">Distribution Name</string>\n                  </property>\n                 </widget>\n                </item>\n                <item row=\"0\" column=\"0\" colspan=\"2\">\n                 <widget class=\"QLabel\" name=\"label_6\">\n                  <property name=\"font\">\n                   <font>\n                    <bold>true</bold>\n                   </font>\n                  </property>\n                  <property name=\"text\">\n                   <string>DISTRIBUTION</string>\n                  </property>\n                 </widget>\n                </item>\n                <item row=\"2\" column=\"1\">\n                 <widget class=\"QLabel\" name=\"distroWebpage\">\n                  <property name=\"cursor\">\n                   <cursorShape>PointingHandCursor</cursorShape>\n                  </property>\n                  <property name=\"text\">\n                   <string notr=\"true\">http://www.distro.org/</string>\n                  </property>\n                 </widget>\n                </item>\n                <item row=\"1\" column=\"0\">\n                 <widget class=\"QLabel\" name=\"label_85\">\n                  <property name=\"text\">\n                   <string>You're using</string>\n                  </property>\n                 </widget>\n                </item>\n               </layout>\n              </widget>\n             </item>\n             <item>\n              <widget class=\"Line\" name=\"line_16\">\n               <property name=\"maximumSize\">\n                <size>\n                 <width>16777215</width>\n                 <height>1</height>\n                </size>\n               </property>\n               <property name=\"orientation\">\n                <enum>Qt::Horizontal</enum>\n               </property>\n              </widget>\n             </item>\n             <item>\n              <widget class=\"QWidget\" name=\"hardwareSoftwarePane\" native=\"true\">\n               <property name=\"sizePolicy\">\n                <sizepolicy hsizetype=\"Expanding\" vsizetype=\"Preferred\">\n                 <horstretch>0</horstretch>\n                 <verstretch>0</verstretch>\n                </sizepolicy>\n               </property>\n               <layout class=\"QGridLayout\" name=\"gridLayout_22\">\n                <property name=\"leftMargin\">\n                 <number>9</number>\n                </property>\n                <property name=\"topMargin\">\n                 <number>9</number>\n                </property>\n                <property name=\"rightMargin\">\n                 <number>9</number>\n                </property>\n                <property name=\"bottomMargin\">\n                 <number>9</number>\n                </property>\n                <property name=\"spacing\">\n                 <number>6</number>\n                </property>\n                <item row=\"2\" column=\"1\">\n                 <widget class=\"tStandardLabel\" name=\"processorType\">\n                  <property name=\"text\">\n                   <string notr=\"true\">Intel</string>\n                  </property>\n                 </widget>\n                </item>\n                <item row=\"5\" column=\"0\">\n                 <widget class=\"QLabel\" name=\"label_89\">\n                  <property name=\"text\">\n                   <string>Available Swap</string>\n                  </property>\n                 </widget>\n                </item>\n                <item row=\"0\" column=\"0\" colspan=\"2\">\n                 <widget class=\"QLabel\" name=\"label_7\">\n                  <property name=\"font\">\n                   <font>\n                    <bold>true</bold>\n                   </font>\n                  </property>\n                  <property name=\"text\">\n                   <string>THIS DEVICE</string>\n                  </property>\n                 </widget>\n                </item>\n                <item row=\"6\" column=\"0\">\n                 <widget class=\"QLabel\" name=\"label_91\">\n                  <property name=\"text\">\n                   <string>Kernel Version</string>\n                  </property>\n                 </widget>\n                </item>\n                <item row=\"9\" column=\"0\">\n                 <widget class=\"QLabel\" name=\"label\">\n                  <property name=\"text\">\n                   <string>Device Name</string>\n                  </property>\n                 </widget>\n                </item>\n                <item row=\"8\" column=\"0\">\n                 <widget class=\"QLabel\" name=\"label_2\">\n                  <property name=\"text\">\n                   <string>Window System</string>\n                  </property>\n                 </widget>\n                </item>\n                <item row=\"4\" column=\"0\">\n                 <widget class=\"QLabel\" name=\"label_88\">\n                  <property name=\"text\">\n                   <string>Available Memory</string>\n                  </property>\n                 </widget>\n                </item>\n                <item row=\"1\" column=\"0\">\n                 <widget class=\"QLabel\" name=\"label_3\">\n                  <property name=\"text\">\n                   <string>Device Type</string>\n                  </property>\n                 </widget>\n                </item>\n                <item row=\"6\" column=\"1\">\n                 <widget class=\"tStandardLabel\" name=\"kernelVersion\">\n                  <property name=\"text\">\n                   <string notr=\"true\">4.11</string>\n                  </property>\n                 </widget>\n                </item>\n                <item row=\"10\" column=\"0\" colspan=\"2\">\n                 <widget class=\"QPushButton\" name=\"changeHostnameButton\">\n                  <property name=\"text\">\n                   <string>Change Device Name</string>\n                  </property>\n                  <property name=\"icon\">\n                   <iconset theme=\"edit-rename\"/>\n                  </property>\n                 </widget>\n                </item>\n                <item row=\"7\" column=\"0\">\n                 <widget class=\"QLabel\" name=\"label_90\">\n                  <property name=\"text\">\n                   <string>Qt Version</string>\n                  </property>\n                 </widget>\n                </item>\n                <item row=\"9\" column=\"1\">\n                 <widget class=\"tStandardLabel\" name=\"hostnameLabel\">\n                  <property name=\"text\">\n                   <string notr=\"true\">TextLabel</string>\n                  </property>\n                 </widget>\n                </item>\n                <item row=\"4\" column=\"1\">\n                 <widget class=\"tStandardLabel\" name=\"availableMemory\">\n                  <property name=\"sizePolicy\">\n                   <sizepolicy hsizetype=\"Expanding\" vsizetype=\"Preferred\">\n                    <horstretch>0</horstretch>\n                    <verstretch>0</verstretch>\n                   </sizepolicy>\n                  </property>\n                  <property name=\"text\">\n                   <string notr=\"true\">8 GiB</string>\n                  </property>\n                 </widget>\n                </item>\n                <item row=\"1\" column=\"1\">\n                 <widget class=\"tStandardLabel\" name=\"deviceTypeLabel\">\n                  <property name=\"text\">\n                   <string notr=\"true\">TextLabel</string>\n                  </property>\n                 </widget>\n                </item>\n                <item row=\"5\" column=\"1\">\n                 <widget class=\"tStandardLabel\" name=\"availableSwap\">\n                  <property name=\"text\">\n                   <string notr=\"true\">8 GiB</string>\n                  </property>\n                 </widget>\n                </item>\n                <item row=\"7\" column=\"1\">\n                 <widget class=\"tStandardLabel\" name=\"qtVersion\">\n                  <property name=\"text\">\n                   <string notr=\"true\">5.9.0</string>\n                  </property>\n                 </widget>\n                </item>\n                <item row=\"8\" column=\"1\">\n                 <widget class=\"tStandardLabel\" name=\"windowSystemLabel\">\n                  <property name=\"text\">\n                   <string notr=\"true\">TextLabel</string>\n                  </property>\n                 </widget>\n                </item>\n                <item row=\"2\" column=\"0\">\n                 <widget class=\"QLabel\" name=\"label_107\">\n                  <property name=\"text\">\n                   <string>Processor</string>\n                  </property>\n                 </widget>\n                </item>\n                <item row=\"3\" column=\"0\">\n                 <widget class=\"QLabel\" name=\"label_4\">\n                  <property name=\"text\">\n                   <string>Video</string>\n                  </property>\n                 </widget>\n                </item>\n                <item row=\"3\" column=\"1\">\n                 <widget class=\"tStandardLabel\" name=\"videoLabel\">\n                  <property name=\"text\">\n                   <string notr=\"true\">AMDx</string>\n                  </property>\n                 </widget>\n                </item>\n               </layout>\n              </widget>\n             </item>\n             <item>\n              <widget class=\"Line\" name=\"displayLine_4\">\n               <property name=\"sizePolicy\">\n                <sizepolicy hsizetype=\"Expanding\" vsizetype=\"Fixed\">\n                 <horstretch>0</horstretch>\n                 <verstretch>0</verstretch>\n                </sizepolicy>\n               </property>\n               <property name=\"maximumSize\">\n                <size>\n                 <width>16777215</width>\n                 <height>1</height>\n                </size>\n               </property>\n               <property name=\"orientation\">\n                <enum>Qt::Horizontal</enum>\n               </property>\n              </widget>\n             </item>\n            </layout>\n           </widget>\n          </item>\n          <item>\n           <widget class=\"QWidget\" name=\"aboutPane\" native=\"true\">\n            <property name=\"sizePolicy\">\n             <sizepolicy hsizetype=\"Expanding\" vsizetype=\"Preferred\">\n              <horstretch>0</horstretch>\n              <verstretch>0</verstretch>\n             </sizepolicy>\n            </property>\n            <layout class=\"QVBoxLayout\" name=\"verticalLayout_47\">\n             <property name=\"spacing\">\n              <number>6</number>\n             </property>\n             <property name=\"leftMargin\">\n              <number>9</number>\n             </property>\n             <property name=\"topMargin\">\n              <number>9</number>\n             </property>\n             <property name=\"rightMargin\">\n              <number>9</number>\n             </property>\n             <property name=\"bottomMargin\">\n              <number>9</number>\n             </property>\n             <item>\n              <widget class=\"QLabel\" name=\"versionLabel\">\n               <property name=\"font\">\n                <font>\n                 <pointsize>15</pointsize>\n                </font>\n               </property>\n               <property name=\"text\">\n                <string notr=\"true\">theDesk %1</string>\n               </property>\n              </widget>\n             </item>\n             <item>\n              <widget class=\"QLabel\" name=\"label_21\">\n               <property name=\"text\">\n                <string>Desktop Environment</string>\n               </property>\n              </widget>\n             </item>\n             <item>\n              <widget class=\"QLabel\" name=\"compileDate\">\n               <property name=\"text\">\n                <string notr=\"true\">You compiled theDesk on %1</string>\n               </property>\n              </widget>\n             </item>\n             <item>\n              <layout class=\"QHBoxLayout\" name=\"horizontalLayout_26\">\n               <property name=\"spacing\">\n                <number>0</number>\n               </property>\n               <item>\n                <widget class=\"QPushButton\" name=\"acknowledgementsButton\">\n                 <property name=\"text\">\n                  <string>Acknowledgements</string>\n                 </property>\n                 <property name=\"icon\">\n                  <iconset theme=\"help-about\"/>\n                 </property>\n                </widget>\n               </item>\n               <item>\n                <widget class=\"QPushButton\" name=\"websiteButton\">\n                 <property name=\"text\">\n                  <string>Website</string>\n                 </property>\n                 <property name=\"icon\">\n                  <iconset theme=\"text-html\">\n                   <normaloff>../../../../theShell/shell</normaloff>../../../../theShell/shell</iconset>\n                 </property>\n                </widget>\n               </item>\n               <item>\n                <widget class=\"QPushButton\" name=\"bugButton\">\n                 <property name=\"text\">\n                  <string>File Bug</string>\n                 </property>\n                 <property name=\"icon\">\n                  <iconset theme=\"tools-report-bug\">\n                   <normaloff>../../../../theShell/shell</normaloff>../../../../theShell/shell</iconset>\n                 </property>\n                </widget>\n               </item>\n               <item>\n                <widget class=\"QPushButton\" name=\"sourcesButton\">\n                 <property name=\"text\">\n                  <string>Sources</string>\n                 </property>\n                 <property name=\"icon\">\n                  <iconset theme=\"commit\">\n                   <normaloff>../../../../theShell/shell</normaloff>../../../../theShell/shell</iconset>\n                 </property>\n                </widget>\n               </item>\n               <item>\n                <widget class=\"QPushButton\" name=\"debugLogButton\">\n                 <property name=\"text\">\n                  <string>View Debug Log</string>\n                 </property>\n                </widget>\n               </item>\n               <item>\n                <spacer name=\"horizontalSpacer_42\">\n                 <property name=\"orientation\">\n                  <enum>Qt::Horizontal</enum>\n                 </property>\n                 <property name=\"sizeHint\" stdset=\"0\">\n                  <size>\n                   <width>40</width>\n                   <height>20</height>\n                  </size>\n                 </property>\n                </spacer>\n               </item>\n              </layout>\n             </item>\n            </layout>\n           </widget>\n          </item>\n          <item>\n           <spacer name=\"verticalSpacer_11\">\n            <property name=\"orientation\">\n             <enum>Qt::Vertical</enum>\n            </property>\n            <property name=\"sizeHint\" stdset=\"0\">\n             <size>\n              <width>20</width>\n              <height>133</height>\n             </size>\n            </property>\n           </spacer>\n          </item>\n          <item>\n           <widget class=\"Line\" name=\"line_36\">\n            <property name=\"maximumSize\">\n             <size>\n              <width>16777215</width>\n              <height>1</height>\n             </size>\n            </property>\n            <property name=\"orientation\">\n             <enum>Qt::Horizontal</enum>\n            </property>\n           </widget>\n          </item>\n          <item>\n           <widget class=\"tStandardLabel\" name=\"copyrightNotice\">\n            <property name=\"text\">\n             <string notr=\"true\">theDesk is Copyright (c) Victor Tran %1. Licensed under the terms of the GNU General Public License, version 3 or later.</string>\n            </property>\n            <property name=\"wordWrap\">\n             <bool>true</bool>\n            </property>\n            <property name=\"margin\">\n             <number>9</number>\n            </property>\n           </widget>\n          </item>\n         </layout>\n        </widget>\n       </item>\n      </layout>\n     </widget>\n    </widget>\n   </item>\n  </layout>\n </widget>\n <customwidgets>\n  <customwidget>\n   <class>tTitleLabel</class>\n   <extends>QLabel</extends>\n   <header location=\"global\">ttitlelabel.h</header>\n   <slots>\n    <signal>backButtonClicked()</signal>\n   </slots>\n  </customwidget>\n  <customwidget>\n   <class>tStandardLabel</class>\n   <extends>QLabel</extends>\n   <header location=\"global\">tstandardlabel.h</header>\n  </customwidget>\n </customwidgets>\n <resources/>\n <connections/>\n</ui>\n"
  },
  {
    "path": "desktop/systemsettings/about/acknowledgements.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"acknowledgements.h\"\n#include \"ui_acknowledgements.h\"\n\n#include <statemanager.h>\n#include <statuscentermanager.h>\n#include <QDesktopServices>\n\nAcknowledgements::Acknowledgements(QWidget* parent) :\n    QWidget(parent),\n    ui(new Ui::Acknowledgements) {\n    ui->setupUi(this);\n\n    ui->titleLabel->setBackButtonShown(true);\n    ui->textBrowser->setSource(QUrl::fromLocalFile(QStringLiteral(\"/usr/share/thedesk/acknowledgements.html\")), QTextDocument::HtmlResource);\n}\n\nAcknowledgements::~Acknowledgements() {\n    delete ui;\n}\n\nvoid Acknowledgements::on_titleLabel_backButtonClicked() {\n    emit done();\n}\n\nvoid Acknowledgements::on_textBrowser_anchorClicked(const QUrl& arg1) {\n    emit done();\n    StateManager::statusCenterManager()->hide();\n    QDesktopServices::openUrl(arg1);\n}\n"
  },
  {
    "path": "desktop/systemsettings/about/acknowledgements.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef ACKNOWLEDGEMENTS_H\n#define ACKNOWLEDGEMENTS_H\n\n#include <QWidget>\n\nnamespace Ui {\n    class Acknowledgements;\n}\n\nclass Acknowledgements : public QWidget {\n        Q_OBJECT\n\n    public:\n        explicit Acknowledgements(QWidget* parent = nullptr);\n        ~Acknowledgements();\n\n    signals:\n        void done();\n\n    private slots:\n        void on_titleLabel_backButtonClicked();\n\n        void on_textBrowser_anchorClicked(const QUrl& arg1);\n\n    private:\n        Ui::Acknowledgements* ui;\n};\n\n#endif // ACKNOWLEDGEMENTS_H\n"
  },
  {
    "path": "desktop/systemsettings/about/acknowledgements.ui",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ui version=\"4.0\">\n <class>Acknowledgements</class>\n <widget class=\"QWidget\" name=\"Acknowledgements\">\n  <property name=\"geometry\">\n   <rect>\n    <x>0</x>\n    <y>0</y>\n    <width>400</width>\n    <height>300</height>\n   </rect>\n  </property>\n  <property name=\"windowTitle\">\n   <string notr=\"true\">Form</string>\n  </property>\n  <layout class=\"QVBoxLayout\" name=\"verticalLayout\">\n   <property name=\"spacing\">\n    <number>0</number>\n   </property>\n   <property name=\"leftMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"topMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"rightMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"bottomMargin\">\n    <number>0</number>\n   </property>\n   <item>\n    <widget class=\"tTitleLabel\" name=\"titleLabel\">\n     <property name=\"text\">\n      <string>Acknowledgements</string>\n     </property>\n    </widget>\n   </item>\n   <item>\n    <widget class=\"QTextBrowser\" name=\"textBrowser\">\n     <property name=\"frameShape\">\n      <enum>QFrame::NoFrame</enum>\n     </property>\n    </widget>\n   </item>\n  </layout>\n </widget>\n <customwidgets>\n  <customwidget>\n   <class>tTitleLabel</class>\n   <extends>QLabel</extends>\n   <header location=\"global\">ttitlelabel.h</header>\n   <slots>\n    <signal>backButtonClicked()</signal>\n   </slots>\n  </customwidget>\n </customwidgets>\n <resources/>\n <connections/>\n</ui>\n"
  },
  {
    "path": "desktop/systemsettings/about/changehostnamepopover.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"changehostnamepopover.h\"\n#include \"ui_changehostnamepopover.h\"\n\n#include <QDBusInterface>\n#include <QHostInfo>\n\nChangeHostnamePopover::ChangeHostnamePopover(QWidget* parent) :\n    QWidget(parent),\n    ui(new Ui::ChangeHostnamePopover) {\n    ui->setupUi(this);\n\n    ui->titleLabel->setBackButtonShown(true);\n\n    QDBusInterface hostnamed(\"org.freedesktop.hostname1\", \"/org/freedesktop/hostname1\", \"org.freedesktop.hostname1\", QDBusConnection::systemBus());\n    QString hostname = hostnamed.property(\"PrettyHostname\").toString();\n    if (hostname.isEmpty()) hostname = hostnamed.property(\"Hostname\").toString();\n    if (hostname.isEmpty()) hostname = QHostInfo::localHostName();\n\n    ui->hostnameEdit->setText(hostname);\n}\n\nChangeHostnamePopover::~ChangeHostnamePopover() {\n    delete ui;\n}\n\nvoid ChangeHostnamePopover::on_titleLabel_backButtonClicked() {\n    emit done();\n}\n\nvoid ChangeHostnamePopover::on_renameButton_clicked() {\n    QDBusMessage prettyMessage = QDBusMessage::createMethodCall(\"org.freedesktop.hostname1\", \"/org/freedesktop/hostname1\", \"org.freedesktop.hostname1\", \"SetPrettyHostname\");\n    prettyMessage.setArguments({ui->hostnameEdit->text(), true});\n    QDBusConnection::systemBus().asyncCall(prettyMessage);\n\n\n    QDBusMessage staticMessage = QDBusMessage::createMethodCall(\"org.freedesktop.hostname1\", \"/org/freedesktop/hostname1\", \"org.freedesktop.hostname1\", \"SetStaticHostname\");\n    staticMessage.setArguments({generateStaticHostname(ui->hostnameEdit->text()), true});\n    QDBusConnection::systemBus().asyncCall(staticMessage);\n\n    emit done();\n}\n\nvoid ChangeHostnamePopover::on_hostnameEdit_textChanged(const QString& arg1) {\n    ui->networkCompatibleName->setText(generateStaticHostname(arg1));\n}\n\nQString ChangeHostnamePopover::generateStaticHostname(QString hostname) {\n    QString allowedCharacters = QStringLiteral(\"abcdefghijklmnopqrstuvwxyz0123456789-\");\n    QString ignoredCharacters = QStringLiteral(\"'\\\"\");\n    QString staticHostname;\n    bool allowHyphen = false;\n    for (QChar c : hostname) {\n        c = c.toLower();\n\n        if (ignoredCharacters.contains(c)) continue;\n\n        if (allowedCharacters.contains(c)) {\n            staticHostname.append(c);\n            allowHyphen = true;\n            continue;\n        }\n\n        bool haveCharacter = false;\n        for (QChar ch : c.decomposition()) {\n            if (allowedCharacters.contains(ch)) {\n                staticHostname.append(ch);\n                allowHyphen = true;\n                haveCharacter = true;\n                continue;\n            }\n        }\n        if (haveCharacter) continue;\n\n        if (allowHyphen) {\n            allowHyphen = false;\n            staticHostname.append(\"-\");\n        }\n    }\n\n    if (staticHostname.endsWith(\"-\")) staticHostname.remove(staticHostname.length() - 1, 1);\n    staticHostname.truncate(63);\n    if (staticHostname.isEmpty()) return QStringLiteral(\"localhost\");\n    return staticHostname;\n}\n"
  },
  {
    "path": "desktop/systemsettings/about/changehostnamepopover.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef CHANGEHOSTNAMEPOPOVER_H\n#define CHANGEHOSTNAMEPOPOVER_H\n\n#include <QWidget>\n\nnamespace Ui {\n    class ChangeHostnamePopover;\n}\n\nclass ChangeHostnamePopover : public QWidget {\n        Q_OBJECT\n\n    public:\n        explicit ChangeHostnamePopover(QWidget* parent = nullptr);\n        ~ChangeHostnamePopover();\n\n    private slots:\n        void on_titleLabel_backButtonClicked();\n\n        void on_renameButton_clicked();\n\n        void on_hostnameEdit_textChanged(const QString& arg1);\n\n    signals:\n        void done();\n\n    private:\n        Ui::ChangeHostnamePopover* ui;\n\n        QString generateStaticHostname(QString hostname);\n};\n\n#endif // CHANGEHOSTNAMEPOPOVER_H\n"
  },
  {
    "path": "desktop/systemsettings/about/changehostnamepopover.ui",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ui version=\"4.0\">\n <class>ChangeHostnamePopover</class>\n <widget class=\"QWidget\" name=\"ChangeHostnamePopover\">\n  <property name=\"geometry\">\n   <rect>\n    <x>0</x>\n    <y>0</y>\n    <width>400</width>\n    <height>592</height>\n   </rect>\n  </property>\n  <property name=\"windowTitle\">\n   <string notr=\"true\">Form</string>\n  </property>\n  <layout class=\"QVBoxLayout\" name=\"verticalLayout\">\n   <property name=\"spacing\">\n    <number>0</number>\n   </property>\n   <property name=\"leftMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"topMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"rightMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"bottomMargin\">\n    <number>0</number>\n   </property>\n   <item>\n    <widget class=\"tTitleLabel\" name=\"titleLabel\">\n     <property name=\"text\">\n      <string>Change Device Name</string>\n     </property>\n    </widget>\n   </item>\n   <item>\n    <layout class=\"QGridLayout\" name=\"gridLayout\">\n     <property name=\"leftMargin\">\n      <number>9</number>\n     </property>\n     <property name=\"topMargin\">\n      <number>9</number>\n     </property>\n     <property name=\"rightMargin\">\n      <number>9</number>\n     </property>\n     <property name=\"bottomMargin\">\n      <number>9</number>\n     </property>\n     <property name=\"spacing\">\n      <number>6</number>\n     </property>\n     <item row=\"1\" column=\"1\">\n      <widget class=\"QLineEdit\" name=\"hostnameEdit\"/>\n     </item>\n     <item row=\"1\" column=\"0\">\n      <widget class=\"QLabel\" name=\"label_2\">\n       <property name=\"text\">\n        <string>New Device Name</string>\n       </property>\n      </widget>\n     </item>\n     <item row=\"0\" column=\"0\" colspan=\"2\">\n      <widget class=\"QLabel\" name=\"label\">\n       <property name=\"text\">\n        <string>This device name is used over the network to identify this device. It is also used to identify this device over Bluetooth.</string>\n       </property>\n       <property name=\"wordWrap\">\n        <bool>true</bool>\n       </property>\n      </widget>\n     </item>\n     <item row=\"2\" column=\"0\">\n      <widget class=\"QLabel\" name=\"label_3\">\n       <property name=\"text\">\n        <string>Network Compatible Name</string>\n       </property>\n      </widget>\n     </item>\n     <item row=\"2\" column=\"1\">\n      <widget class=\"QLabel\" name=\"networkCompatibleName\">\n       <property name=\"text\">\n        <string notr=\"true\">TextLabel</string>\n       </property>\n      </widget>\n     </item>\n    </layout>\n   </item>\n   <item>\n    <widget class=\"QPushButton\" name=\"renameButton\">\n     <property name=\"text\">\n      <string>Rename this Device</string>\n     </property>\n     <property name=\"icon\">\n      <iconset theme=\"edit-rename\">\n       <normaloff>.</normaloff>.</iconset>\n     </property>\n    </widget>\n   </item>\n   <item>\n    <spacer name=\"verticalSpacer\">\n     <property name=\"orientation\">\n      <enum>Qt::Vertical</enum>\n     </property>\n     <property name=\"sizeHint\" stdset=\"0\">\n      <size>\n       <width>20</width>\n       <height>0</height>\n      </size>\n     </property>\n    </spacer>\n   </item>\n  </layout>\n </widget>\n <customwidgets>\n  <customwidget>\n   <class>tTitleLabel</class>\n   <extends>QLabel</extends>\n   <header location=\"global\">ttitlelabel.h</header>\n   <slots>\n    <signal>backButtonClicked()</signal>\n   </slots>\n  </customwidget>\n </customwidgets>\n <resources/>\n <connections/>\n</ui>\n"
  },
  {
    "path": "desktop/systemsettings/pluginmanagement/managepluginpopover.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"managepluginpopover.h\"\n#include \"ui_managepluginpopover.h\"\n\n#include <QUuid>\n#include <QJsonValue>\n#include \"plugins/pluginmanager.h\"\n\nstruct ManagePluginPopoverPrivate {\n    QUuid uuid;\n};\n\nManagePluginPopover::ManagePluginPopover(QUuid uuid, QWidget* parent) :\n    QWidget(parent),\n    ui(new Ui::ManagePluginPopover) {\n    ui->setupUi(this);\n\n    d = new ManagePluginPopoverPrivate();\n    d->uuid = uuid;\n\n    ui->titleLabel->setBackButtonShown(true);\n    ui->titleLabel->setText(PluginManager::instance()->pluginMetadata(uuid, \"name\").toString());\n    ui->blacklistTitle->setBackButtonShown(true);\n    ui->stackedWidget->setCurrentAnimation(tStackedWidget::SlideHorizontal);\n    ui->uuidLabel->setText(tr(\"UUID: %1\").arg(uuid.toString()));\n\n    connect(PluginManager::instance(), &PluginManager::pluginsChanged, this, &ManagePluginPopover::updateState);\n    updateState();\n\n    ui->deactivateButton->setProperty(\"type\", \"destructive\");\n    ui->blacklistButton->setProperty(\"type\", \"destructive\");\n    ui->performBlacklistButton->setProperty(\"type\", \"destructive\");\n}\n\nManagePluginPopover::~ManagePluginPopover() {\n    delete d;\n    delete ui;\n}\n\nvoid ManagePluginPopover::on_titleLabel_backButtonClicked() {\n    emit done();\n}\n\nvoid ManagePluginPopover::updateState() {\n\n    PluginManager* manager = PluginManager::instance();\n    if (manager->blacklistedPlugins().contains(d->uuid)) {\n        ui->activateButton->setVisible(false);\n        ui->deactivateButton->setVisible(false);\n        ui->blacklistButton->setVisible(false);\n        ui->errorDetailsWidget->setVisible(false);\n        ui->removeBlacklistButton->setVisible(true);\n        return;\n    }\n\n    ui->blacklistButton->setVisible(true);\n    ui->removeBlacklistButton->setVisible(false);\n\n    if (manager->erroredPlugins().contains(d->uuid)) {\n        ui->errorDetailsLabel->setText(manager->pluginErrorReason(d->uuid));\n        ui->errorDetailsWidget->setVisible(true);\n    } else {\n        ui->errorDetailsWidget->setVisible(false);\n    }\n\n    if (manager->loadedPlugins().contains(d->uuid)) {\n        ui->activateButton->setVisible(false);\n        ui->deactivateButton->setVisible(true);\n    } else {\n        ui->activateButton->setVisible(true);\n        ui->deactivateButton->setVisible(false);\n    }\n}\n\nvoid ManagePluginPopover::on_activateButton_clicked() {\n    PluginManager::instance()->activatePlugin(d->uuid);\n}\n\nvoid ManagePluginPopover::on_deactivateButton_clicked() {\n    PluginManager::instance()->deactivatePlugin(d->uuid);\n}\n\nvoid ManagePluginPopover::on_blacklistButton_clicked() {\n    ui->stackedWidget->setCurrentWidget(ui->blacklistPage);\n}\n\nvoid ManagePluginPopover::on_removeBlacklistButton_clicked() {\n    PluginManager::instance()->removeBlacklistPlugin(d->uuid);\n}\n\nvoid ManagePluginPopover::on_performBlacklistButton_clicked() {\n    PluginManager::instance()->blacklistPlugin(d->uuid);\n    ui->stackedWidget->setCurrentWidget(ui->mainPage);\n}\n\nvoid ManagePluginPopover::on_blacklistTitle_backButtonClicked() {\n    ui->stackedWidget->setCurrentWidget(ui->mainPage);\n}\n"
  },
  {
    "path": "desktop/systemsettings/pluginmanagement/managepluginpopover.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef MANAGEPLUGINPOPOVER_H\n#define MANAGEPLUGINPOPOVER_H\n\n#include <QWidget>\n\nnamespace Ui {\n    class ManagePluginPopover;\n}\n\nstruct ManagePluginPopoverPrivate;\nclass ManagePluginPopover : public QWidget {\n        Q_OBJECT\n\n    public:\n        explicit ManagePluginPopover(QUuid uuid, QWidget* parent = nullptr);\n        ~ManagePluginPopover();\n\n    signals:\n        void done();\n\n    private slots:\n        void on_titleLabel_backButtonClicked();\n\n        void on_activateButton_clicked();\n\n        void on_deactivateButton_clicked();\n\n        void on_blacklistButton_clicked();\n\n        void on_removeBlacklistButton_clicked();\n\n        void on_performBlacklistButton_clicked();\n\n        void on_blacklistTitle_backButtonClicked();\n\n    private:\n        Ui::ManagePluginPopover* ui;\n        ManagePluginPopoverPrivate* d;\n\n        void updateState();\n};\n\n#endif // MANAGEPLUGINPOPOVER_H\n"
  },
  {
    "path": "desktop/systemsettings/pluginmanagement/managepluginpopover.ui",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ui version=\"4.0\">\n <class>ManagePluginPopover</class>\n <widget class=\"QWidget\" name=\"ManagePluginPopover\">\n  <property name=\"geometry\">\n   <rect>\n    <x>0</x>\n    <y>0</y>\n    <width>400</width>\n    <height>399</height>\n   </rect>\n  </property>\n  <property name=\"windowTitle\">\n   <string notr=\"true\">Form</string>\n  </property>\n  <layout class=\"QVBoxLayout\" name=\"verticalLayout\">\n   <property name=\"spacing\">\n    <number>0</number>\n   </property>\n   <property name=\"leftMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"topMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"rightMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"bottomMargin\">\n    <number>0</number>\n   </property>\n   <item>\n    <widget class=\"tStackedWidget\" name=\"stackedWidget\">\n     <property name=\"currentIndex\">\n      <number>0</number>\n     </property>\n     <widget class=\"QWidget\" name=\"mainPage\">\n      <layout class=\"QVBoxLayout\" name=\"verticalLayout_6\">\n       <property name=\"spacing\">\n        <number>0</number>\n       </property>\n       <property name=\"leftMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"topMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"rightMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"bottomMargin\">\n        <number>0</number>\n       </property>\n       <item>\n        <widget class=\"tTitleLabel\" name=\"titleLabel\">\n         <property name=\"text\">\n          <string notr=\"true\">TextLabel</string>\n         </property>\n        </widget>\n       </item>\n       <item>\n        <widget class=\"QScrollArea\" name=\"scrollArea\">\n         <property name=\"frameShape\">\n          <enum>QFrame::NoFrame</enum>\n         </property>\n         <property name=\"widgetResizable\">\n          <bool>true</bool>\n         </property>\n         <widget class=\"QWidget\" name=\"scrollAreaWidgetContents\">\n          <property name=\"geometry\">\n           <rect>\n            <x>0</x>\n            <y>0</y>\n            <width>400</width>\n            <height>382</height>\n           </rect>\n          </property>\n          <layout class=\"QVBoxLayout\" name=\"verticalLayout_3\">\n           <property name=\"spacing\">\n            <number>0</number>\n           </property>\n           <property name=\"leftMargin\">\n            <number>0</number>\n           </property>\n           <property name=\"topMargin\">\n            <number>0</number>\n           </property>\n           <property name=\"rightMargin\">\n            <number>0</number>\n           </property>\n           <property name=\"bottomMargin\">\n            <number>0</number>\n           </property>\n           <item>\n            <widget class=\"QWidget\" name=\"errorDetailsWidget\" native=\"true\">\n             <layout class=\"QVBoxLayout\" name=\"verticalLayout_4\">\n              <property name=\"spacing\">\n               <number>0</number>\n              </property>\n              <property name=\"leftMargin\">\n               <number>0</number>\n              </property>\n              <property name=\"topMargin\">\n               <number>0</number>\n              </property>\n              <property name=\"rightMargin\">\n               <number>0</number>\n              </property>\n              <property name=\"bottomMargin\">\n               <number>0</number>\n              </property>\n              <item>\n               <layout class=\"QVBoxLayout\" name=\"verticalLayout_5\">\n                <property name=\"leftMargin\">\n                 <number>9</number>\n                </property>\n                <property name=\"topMargin\">\n                 <number>9</number>\n                </property>\n                <property name=\"rightMargin\">\n                 <number>9</number>\n                </property>\n                <property name=\"bottomMargin\">\n                 <number>9</number>\n                </property>\n                <item>\n                 <widget class=\"QLabel\" name=\"label_2\">\n                  <property name=\"font\">\n                   <font>\n                    <weight>75</weight>\n                    <bold>true</bold>\n                   </font>\n                  </property>\n                  <property name=\"text\">\n                   <string>ERROR DETAILS</string>\n                  </property>\n                 </widget>\n                </item>\n                <item>\n                 <widget class=\"QLabel\" name=\"errorDetailsLabel\">\n                  <property name=\"text\">\n                   <string notr=\"true\">TextLabel</string>\n                  </property>\n                  <property name=\"wordWrap\">\n                   <bool>true</bool>\n                  </property>\n                 </widget>\n                </item>\n               </layout>\n              </item>\n              <item>\n               <widget class=\"Line\" name=\"line\">\n                <property name=\"maximumSize\">\n                 <size>\n                  <width>16777215</width>\n                  <height>1</height>\n                 </size>\n                </property>\n                <property name=\"orientation\">\n                 <enum>Qt::Horizontal</enum>\n                </property>\n               </widget>\n              </item>\n             </layout>\n            </widget>\n           </item>\n           <item>\n            <layout class=\"QVBoxLayout\" name=\"verticalLayout_2\">\n             <property name=\"leftMargin\">\n              <number>9</number>\n             </property>\n             <property name=\"topMargin\">\n              <number>9</number>\n             </property>\n             <property name=\"rightMargin\">\n              <number>9</number>\n             </property>\n             <property name=\"bottomMargin\">\n              <number>6</number>\n             </property>\n             <item>\n              <widget class=\"QLabel\" name=\"label\">\n               <property name=\"font\">\n                <font>\n                 <weight>75</weight>\n                 <bold>true</bold>\n                </font>\n               </property>\n               <property name=\"text\">\n                <string>ACTIONS</string>\n               </property>\n              </widget>\n             </item>\n            </layout>\n           </item>\n           <item>\n            <widget class=\"QPushButton\" name=\"activateButton\">\n             <property name=\"text\">\n              <string>Activate Plugin</string>\n             </property>\n            </widget>\n           </item>\n           <item>\n            <widget class=\"QPushButton\" name=\"deactivateButton\">\n             <property name=\"text\">\n              <string>Deactivate Plugin</string>\n             </property>\n            </widget>\n           </item>\n           <item>\n            <widget class=\"QPushButton\" name=\"blacklistButton\">\n             <property name=\"text\">\n              <string>Blacklist Plugin</string>\n             </property>\n            </widget>\n           </item>\n           <item>\n            <widget class=\"QPushButton\" name=\"removeBlacklistButton\">\n             <property name=\"text\">\n              <string>Remove Plugin from Blacklist</string>\n             </property>\n            </widget>\n           </item>\n           <item>\n            <widget class=\"QLabel\" name=\"uuidLabel\">\n             <property name=\"enabled\">\n              <bool>false</bool>\n             </property>\n             <property name=\"text\">\n              <string notr=\"true\">TextLabel</string>\n             </property>\n             <property name=\"margin\">\n              <number>9</number>\n             </property>\n            </widget>\n           </item>\n           <item>\n            <spacer name=\"verticalSpacer\">\n             <property name=\"orientation\">\n              <enum>Qt::Vertical</enum>\n             </property>\n             <property name=\"sizeHint\" stdset=\"0\">\n              <size>\n               <width>20</width>\n               <height>153</height>\n              </size>\n             </property>\n            </spacer>\n           </item>\n          </layout>\n         </widget>\n        </widget>\n       </item>\n      </layout>\n     </widget>\n     <widget class=\"QWidget\" name=\"blacklistPage\">\n      <layout class=\"QVBoxLayout\" name=\"verticalLayout_7\">\n       <property name=\"spacing\">\n        <number>0</number>\n       </property>\n       <property name=\"leftMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"topMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"rightMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"bottomMargin\">\n        <number>0</number>\n       </property>\n       <item>\n        <widget class=\"tTitleLabel\" name=\"blacklistTitle\">\n         <property name=\"text\">\n          <string>Blacklist Plugin</string>\n         </property>\n        </widget>\n       </item>\n       <item>\n        <widget class=\"QLabel\" name=\"label_3\">\n         <property name=\"text\">\n          <string>Placing this plugin on the blacklist will prevent it from being loaded next time you log in. If the plugin is not already deactivated, we'll also deactivate it for you.</string>\n         </property>\n         <property name=\"wordWrap\">\n          <bool>true</bool>\n         </property>\n         <property name=\"margin\">\n          <number>9</number>\n         </property>\n        </widget>\n       </item>\n       <item>\n        <widget class=\"QPushButton\" name=\"performBlacklistButton\">\n         <property name=\"text\">\n          <string>Blacklist Plugin</string>\n         </property>\n        </widget>\n       </item>\n       <item>\n        <spacer name=\"verticalSpacer_2\">\n         <property name=\"orientation\">\n          <enum>Qt::Vertical</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>20</width>\n           <height>289</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n      </layout>\n     </widget>\n    </widget>\n   </item>\n  </layout>\n </widget>\n <customwidgets>\n  <customwidget>\n   <class>tTitleLabel</class>\n   <extends>QLabel</extends>\n   <header location=\"global\">ttitlelabel.h</header>\n   <slots>\n    <signal>backButtonClicked()</signal>\n   </slots>\n  </customwidget>\n  <customwidget>\n   <class>tStackedWidget</class>\n   <extends>QStackedWidget</extends>\n   <header location=\"global\">tstackedwidget.h</header>\n   <container>1</container>\n  </customwidget>\n </customwidgets>\n <resources/>\n <connections/>\n</ui>\n"
  },
  {
    "path": "desktop/systemsettings/pluginmanagement/pluginitemdelegate.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"pluginitemdelegate.h\"\n\n#include <QPainter>\n#include <libcontemporary_global.h>\n#include <statemanager.h>\n#include <statuscentermanager.h>\n#include <tpaintcalculator.h>\n\nstruct PluginItemDelegatePrivate {\n        struct Rects {\n                QRect iconRect;\n                QRect textRect;\n                QRect descRect;\n                QRect arrowRect;\n\n                Rects(const QStyleOptionViewItem& option) {\n                    QRect newRect = option.rect;\n                    QPoint center = newRect.center();\n                    newRect.setWidth(StateManager::statusCenterManager()->preferredContentWidth());\n                    newRect.moveCenter(center);\n\n                    iconRect.setLeft(newRect.left() + SC_DPI(6));\n                    iconRect.setTop(newRect.top() + SC_DPI(6));\n                    iconRect.setBottom(iconRect.top() + SC_DPI(32));\n                    iconRect.setRight(iconRect.left() + SC_DPI(32));\n\n                    arrowRect.setSize(SC_DPI_T(QSize(16, 16), QSize));\n                    arrowRect.moveCenter(newRect.center());\n                    arrowRect.moveRight(newRect.right() - SC_DPI(6));\n\n                    textRect.setLeft(iconRect.right() + SC_DPI(6));\n                    textRect.setTop(newRect.top() + SC_DPI(6));\n                    textRect.setBottom(newRect.top() + option.fontMetrics.height() + SC_DPI(6));\n                    textRect.setRight(arrowRect.left() - SC_DPI(6));\n\n                    descRect.setLeft(iconRect.right() + SC_DPI(6));\n                    descRect.setTop(newRect.top() + option.fontMetrics.height() + SC_DPI(8));\n                    descRect.setBottom(newRect.top() + option.fontMetrics.height() * 2 + SC_DPI(6));\n                    descRect.setRight(arrowRect.left() - SC_DPI(6));\n                }\n        };\n};\n\nPluginItemDelegate::PluginItemDelegate(QObject* parent) :\n    QAbstractItemDelegate(parent) {\n    d = new PluginItemDelegatePrivate();\n}\n\nPluginItemDelegate::~PluginItemDelegate() {\n    delete d;\n}\n\nvoid PluginItemDelegate::paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const {\n    painter->save();\n\n    tPaintCalculator calculator;\n    calculator.setPainter(painter);\n    calculator.setLayoutDirection(option.direction);\n    calculator.setDrawBounds(option.rect);\n\n    painter->setFont(option.font);\n\n    PluginItemDelegatePrivate::Rects rects(option);\n    QString text = index.data().toString();\n    QString desc = index.data(Qt::UserRole).toString();\n    QIcon icon = index.data(Qt::DecorationRole).value<QIcon>();\n    bool active = index.data(Qt::UserRole + 2).toBool();\n    bool blacklisted = index.data(Qt::UserRole + 3).toBool();\n\n    if (option.state & QStyle::State_Selected) {\n        calculator.addRect(option.rect, [=](QRectF drawBounds) {\n            painter->setPen(Qt::transparent);\n            painter->setBrush(option.palette.color(QPalette::Highlight));\n            painter->drawRect(drawBounds);\n        });\n\n        calculator.addRect(rects.textRect, [=](QRectF drawBounds) {\n            painter->setBrush(Qt::transparent);\n            painter->setPen(option.palette.color(QPalette::HighlightedText));\n\n            if (!active) painter->setOpacity(0.5);\n            painter->drawText(drawBounds, Qt::AlignLeading, text);\n        });\n\n        calculator.addRect(rects.descRect, [=](QRectF drawBounds) {\n            painter->drawText(drawBounds, Qt::AlignLeading, desc);\n        });\n    } else if (option.state & QStyle::State_MouseOver) {\n        calculator.addRect(option.rect, [=](QRectF drawBounds) {\n            QColor col = option.palette.color(QPalette::Highlight);\n            col.setAlpha(127);\n            painter->setBrush(col);\n            painter->setPen(Qt::transparent);\n            painter->drawRect(drawBounds);\n        });\n\n        calculator.addRect(rects.textRect, [=](QRectF drawBounds) {\n            if (!active) painter->setOpacity(0.5);\n            painter->setBrush(Qt::transparent);\n            painter->setPen(option.palette.color(QPalette::WindowText));\n            painter->drawText(drawBounds, Qt::AlignLeading, text);\n        });\n        calculator.addRect(rects.descRect, [=](QRectF drawBounds) {\n            painter->setPen(option.palette.color(QPalette::Disabled, QPalette::WindowText));\n            painter->drawText(drawBounds, Qt::AlignLeading, desc);\n        });\n    } else {\n        calculator.addRect(rects.textRect, [=](QRectF drawBounds) {\n            if (!active) painter->setOpacity(0.5);\n            painter->setPen(option.palette.color(QPalette::WindowText));\n            painter->drawText(drawBounds, Qt::AlignLeading, text);\n        });\n        calculator.addRect(rects.descRect, [=](QRectF drawBounds) {\n            painter->setPen(option.palette.color(QPalette::Disabled, QPalette::WindowText));\n            painter->drawText(drawBounds, Qt::AlignLeading, desc);\n        });\n    }\n\n    if (!icon.isNull()) {\n        calculator.addRect(rects.iconRect, [=](QRectF drawBounds) {\n            painter->drawPixmap(drawBounds.toRect(), icon.pixmap(drawBounds.toRect().size()));\n        });\n    }\n\n    if (blacklisted) {\n        calculator.addRect(rects.iconRect, [=](QRectF drawBounds) {\n            painter->setOpacity(1);\n            painter->setPen(QPen(option.palette.color(QPalette::WindowText), 2, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin));\n\n            painter->drawLine(drawBounds.topLeft(), drawBounds.bottomRight());\n            painter->drawLine(drawBounds.bottomLeft(), drawBounds.topRight());\n        });\n    }\n\n    calculator.addRect(rects.arrowRect, [=](QRectF drawBounds) {\n        painter->setOpacity(1);\n        painter->drawPixmap(drawBounds.toRect(), QIcon::fromTheme(\"go-next\").pixmap(drawBounds.toRect().size()));\n    });\n\n    calculator.performPaint();\n\n    painter->restore();\n}\n\nQSize PluginItemDelegate::sizeHint(const QStyleOptionViewItem& option, const QModelIndex& index) const {\n    PluginItemDelegatePrivate::Rects rects(option);\n\n    QRect u = rects.iconRect;\n    u = u.united(rects.textRect);\n    u = u.united(rects.descRect);\n    u.adjust(SC_DPI(-6), SC_DPI(-6), SC_DPI(6), SC_DPI(6));\n\n    return u.size();\n}\n"
  },
  {
    "path": "desktop/systemsettings/pluginmanagement/pluginitemdelegate.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef PLUGINITEMDELEGATE_H\n#define PLUGINITEMDELEGATE_H\n\n#include <QAbstractItemDelegate>\n\nstruct PluginItemDelegatePrivate;\nclass PluginItemDelegate : public QAbstractItemDelegate {\n        Q_OBJECT\n    public:\n        explicit PluginItemDelegate(QObject* parent = nullptr);\n        ~PluginItemDelegate();\n\n    signals:\n\n    private:\n        PluginItemDelegatePrivate* d;\n\n        // QAbstractItemDelegate interface\n    public:\n        void paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const;\n        QSize sizeHint(const QStyleOptionViewItem& option, const QModelIndex& index) const;\n};\n\n#endif // PLUGINITEMDELEGATE_H\n"
  },
  {
    "path": "desktop/systemsettings/pluginmanagement/pluginmanagement.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"pluginmanagement.h\"\n#include \"ui_pluginmanagement.h\"\n\n#include <QIcon>\n#include <statemanager.h>\n#include <statuscentermanager.h>\n#include \"plugins/pluginmanager.h\"\n#include \"pluginmodel.h\"\n#include \"pluginitemdelegate.h\"\n#include \"managepluginpopover.h\"\n#include <tpopover.h>\n#include <QUuid>\n\nstruct PluginManagementPrivate {\n    PluginModel* pluginModel;\n};\n\nPluginManagement::PluginManagement() :\n    StatusCenterPane(),\n    ui(new Ui::PluginManagement) {\n    ui->setupUi(this);\n    d = new PluginManagementPrivate();\n\n    ui->titleLabel->setBackButtonIsMenu(true);\n    ui->titleLabel->setBackButtonShown(StateManager::instance()->statusCenterManager()->isHamburgerMenuRequired());\n    connect(StateManager::instance()->statusCenterManager(), &StatusCenterManager::isHamburgerMenuRequiredChanged, ui->titleLabel, &tTitleLabel::setBackButtonShown);\n\n    const int contentWidth = StateManager::instance()->statusCenterManager()->preferredContentWidth();\n    ui->descriptionLabel->setFixedWidth(contentWidth);\n\n    d->pluginModel = new PluginModel();\n    ui->pluginsList->setModel(d->pluginModel);\n    ui->pluginsList->setItemDelegate(new PluginItemDelegate(this));\n}\n\nPluginManagement::~PluginManagement() {\n    delete d;\n    delete ui;\n}\n\nvoid PluginManagement::changeEvent(QEvent* event) {\n    if (event->type() == QEvent::LanguageChange) {\n        ui->retranslateUi(this);\n        emit displayNameChanged();\n    }\n}\n\nQString PluginManagement::name() {\n    return \"SystemPluginManagement\";\n}\n\nQString PluginManagement::displayName() {\n    return tr(\"Plugins\");\n}\n\nQIcon PluginManagement::icon() {\n    return QIcon::fromTheme(\"preferences-system-plugins\");\n}\n\nQWidget* PluginManagement::leftPane() {\n    return nullptr;\n}\n\nvoid PluginManagement::on_pluginsList_activated(const QModelIndex& index) {\n    ManagePluginPopover* manager = new ManagePluginPopover(index.data(Qt::UserRole + 1).toUuid());\n    tPopover* popover = new tPopover(manager);\n    popover->setPopoverWidth(SC_DPI(600));\n    connect(manager, &ManagePluginPopover::done, popover, &tPopover::dismiss);\n    connect(popover, &tPopover::dismissed, popover, &tPopover::deleteLater);\n//    connect(popover, &tPopover::dismissed, manager, &ManagePluginPopover::deleteLater);\n    popover->show(this->window());\n}\n\nvoid PluginManagement::on_titleLabel_backButtonClicked() {\n    StateManager::statusCenterManager()->showStatusCenterHamburgerMenu();\n}\n"
  },
  {
    "path": "desktop/systemsettings/pluginmanagement/pluginmanagement.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef PLUIGINMANAGEMENT_H\n#define PLUIGINMANAGEMENT_H\n\n#include <statuscenterpane.h>\n\nnamespace Ui {\n    class PluginManagement;\n}\n\nstruct PluginManagementPrivate;\nclass PluginManagement : public StatusCenterPane {\n        Q_OBJECT\n\n    public:\n        explicit PluginManagement();\n        ~PluginManagement();\n\n    private:\n        Ui::PluginManagement* ui;\n        PluginManagementPrivate* d;\n\n        void changeEvent(QEvent* event);\n\n        // StatusCenterPane interface\n    public:\n        QString name();\n        QString displayName();\n        QIcon icon();\n        QWidget* leftPane();\n    private slots:\n        void on_pluginsList_activated(const QModelIndex& index);\n        void on_titleLabel_backButtonClicked();\n};\n\n#endif // PLUIGINMANAGEMENT_H\n"
  },
  {
    "path": "desktop/systemsettings/pluginmanagement/pluginmanagement.ui",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ui version=\"4.0\">\n <class>PluginManagement</class>\n <widget class=\"QWidget\" name=\"PluginManagement\">\n  <property name=\"geometry\">\n   <rect>\n    <x>0</x>\n    <y>0</y>\n    <width>515</width>\n    <height>481</height>\n   </rect>\n  </property>\n  <property name=\"windowTitle\">\n   <string notr=\"true\">Form</string>\n  </property>\n  <layout class=\"QVBoxLayout\" name=\"verticalLayout\">\n   <property name=\"spacing\">\n    <number>0</number>\n   </property>\n   <property name=\"leftMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"topMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"rightMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"bottomMargin\">\n    <number>0</number>\n   </property>\n   <item>\n    <widget class=\"tTitleLabel\" name=\"titleLabel\">\n     <property name=\"text\">\n      <string>Plugins</string>\n     </property>\n    </widget>\n   </item>\n   <item>\n    <widget class=\"QScrollArea\" name=\"scrollArea\">\n     <property name=\"frameShape\">\n      <enum>QFrame::NoFrame</enum>\n     </property>\n     <property name=\"widgetResizable\">\n      <bool>true</bool>\n     </property>\n     <widget class=\"QWidget\" name=\"scrollAreaWidgetContents\">\n      <property name=\"geometry\">\n       <rect>\n        <x>0</x>\n        <y>0</y>\n        <width>515</width>\n        <height>464</height>\n       </rect>\n      </property>\n      <layout class=\"QVBoxLayout\" name=\"verticalLayout_2\">\n       <property name=\"spacing\">\n        <number>0</number>\n       </property>\n       <property name=\"leftMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"topMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"rightMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"bottomMargin\">\n        <number>0</number>\n       </property>\n       <item alignment=\"Qt::AlignHCenter\">\n        <widget class=\"QLabel\" name=\"descriptionLabel\">\n         <property name=\"text\">\n          <string>Plugins add core and extra functionality to theDesk.</string>\n         </property>\n         <property name=\"margin\">\n          <number>9</number>\n         </property>\n        </widget>\n       </item>\n       <item>\n        <widget class=\"Line\" name=\"line\">\n         <property name=\"maximumSize\">\n          <size>\n           <width>16777215</width>\n           <height>1</height>\n          </size>\n         </property>\n         <property name=\"orientation\">\n          <enum>Qt::Horizontal</enum>\n         </property>\n        </widget>\n       </item>\n       <item>\n        <widget class=\"QListView\" name=\"pluginsList\">\n         <property name=\"frameShape\">\n          <enum>QFrame::NoFrame</enum>\n         </property>\n        </widget>\n       </item>\n      </layout>\n     </widget>\n    </widget>\n   </item>\n  </layout>\n </widget>\n <customwidgets>\n  <customwidget>\n   <class>tTitleLabel</class>\n   <extends>QLabel</extends>\n   <header location=\"global\">ttitlelabel.h</header>\n   <slots>\n    <signal>backButtonClicked()</signal>\n   </slots>\n  </customwidget>\n </customwidgets>\n <resources/>\n <connections/>\n</ui>\n"
  },
  {
    "path": "desktop/systemsettings/pluginmanagement/pluginmodel.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"pluginmodel.h\"\n\n#include <QUuid>\n#include <QJsonValue>\n#include <QIcon>\n#include \"plugins/pluginmanager.h\"\n\nPluginModel::PluginModel(QObject* parent)\n    : QAbstractListModel(parent) {\n    connect(PluginManager::instance(), &PluginManager::pluginsChanged, this, [ = ] {\n        emit dataChanged(index(0), index(rowCount()));\n    });\n}\n\nint PluginModel::rowCount(const QModelIndex& parent) const {\n    if (parent.isValid()) return 0;\n\n    return PluginManager::instance()->availablePlugins().count();\n}\n\nQVariant PluginModel::data(const QModelIndex& index, int role) const {\n    if (!index.isValid()) return QVariant();\n\n    PluginManager* plugins = PluginManager::instance();\n    QUuid uuid = plugins->availablePlugins().at(index.row());\n    switch (role) {\n        case Qt::DisplayRole:\n            return plugins->pluginMetadata(uuid, \"name\").toString();\n        case Qt::DecorationRole:\n            return QIcon::fromTheme(plugins->pluginMetadata(uuid, \"icon\").toString(), QIcon::fromTheme(\"generic-app\"));\n        case Qt::UserRole: {\n            if (plugins->loadedPlugins().contains(uuid)) {\n                return tr(\"Loaded\");\n            } else if (plugins->blacklistedPlugins().contains(uuid)) {\n                return tr(\"Blacklisted\");\n            } else if (plugins->erroredPlugins().contains(uuid)) {\n                return tr(\"Unavailable\");\n            } else {\n                return tr(\"Inactive\");\n            }\n        }\n        case Qt::UserRole + 1:\n            return uuid;\n        case Qt::UserRole + 2:\n            return plugins->loadedPlugins().contains(uuid);\n        case Qt::UserRole + 3:\n            return plugins->blacklistedPlugins().contains(uuid);\n    }\n\n    return QVariant();\n}\n"
  },
  {
    "path": "desktop/systemsettings/pluginmanagement/pluginmodel.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef PLUGINMODEL_H\n#define PLUGINMODEL_H\n\n#include <QAbstractListModel>\n\nclass PluginModel : public QAbstractListModel\n{\n        Q_OBJECT\n\n    public:\n        explicit PluginModel(QObject *parent = nullptr);\n\n        // Basic functionality:\n        int rowCount(const QModelIndex &parent = QModelIndex()) const override;\n\n        QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;\n\n    private:\n};\n\n#endif // PLUGINMODEL_H\n"
  },
  {
    "path": "desktop/systemsettings/recovery/recovery.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"recovery.h\"\n#include \"ui_recovery.h\"\n\n#include <QIcon>\n#include <powermanager.h>\n#include <statemanager.h>\n#include <statuscentermanager.h>\n#include <tsettings.h>\n\nRecovery::Recovery() :\n    StatusCenterPane(),\n    ui(new Ui::Recovery) {\n    ui->setupUi(this);\n\n    ui->titleLabel->setBackButtonIsMenu(true);\n    ui->titleLabel->setBackButtonShown(StateManager::instance()->statusCenterManager()->isHamburgerMenuRequired());\n    connect(StateManager::instance()->statusCenterManager(), &StatusCenterManager::isHamburgerMenuRequiredChanged, ui->titleLabel, &tTitleLabel::setBackButtonShown);\n\n    const int contentWidth = StateManager::instance()->statusCenterManager()->preferredContentWidth();\n    ui->resetDEContainer->setFixedWidth(contentWidth);\n    ui->resetDeviceContainer->setFixedWidth(contentWidth);\n\n    ui->resetDEButton->setProperty(\"type\", \"destructive\");\n    ui->resetDeviceButton->setProperty(\"type\", \"destructive\");\n\n    if (libContemporaryCommon::searchInPath(\"scallop-reset-ui\").isEmpty()) {\n        ui->resetDeviceContainer->setVisible(false);\n        ui->resetDeviceLine->setVisible(false);\n    }\n}\n\nRecovery::~Recovery() {\n    delete ui;\n}\n\nvoid Recovery::changeEvent(QEvent* event) {\n    if (event->type() == QEvent::LanguageChange) {\n        ui->retranslateUi(this);\n        emit displayNameChanged();\n    }\n}\n\nQString Recovery::name() {\n    return \"SystemRecovery\";\n}\n\nQString Recovery::displayName() {\n    return tr(\"Recovery\");\n}\n\nQIcon Recovery::icon() {\n    return QIcon::fromTheme(\"preferences-system-danger\");\n}\n\nQWidget* Recovery::leftPane() {\n    return nullptr;\n}\n\nvoid Recovery::on_resetDEButton_clicked() {\n    QMetaObject::Connection* c = new QMetaObject::Connection();\n    *c = connect(StateManager::instance()->powerManager(), &PowerManager::powerOffOperationCommencing, this, [=] {\n        disconnect(*c);\n\n        // Clear the settings\n        tSettings settings;\n        settings.clear();\n        settings.sync();\n\n        tSettings platformSettings(\"theDesk.platform\");\n        platformSettings.clear();\n        platformSettings.sync();\n    });\n    StateManager::instance()->powerManager()->showPowerOffConfirmation(PowerManager::LogOut, tr(\"%1, log out and reset theDesk settings? This action is irreversible.\\n\\nWe'll go ahead and reset your settings in %n seconds if you don't do anything.\"))->then([=] {\n        disconnect(*c);\n        delete c;\n    });\n}\n\nvoid Recovery::on_titleLabel_backButtonClicked() {\n    StateManager::statusCenterManager()->showStatusCenterHamburgerMenu();\n}\n\nvoid Recovery::on_resetDeviceButton_clicked() {\n    QProcess::startDetached(\"scallop-reset-ui\", QStringList());\n    StateManager::statusCenterManager()->hide();\n}\n"
  },
  {
    "path": "desktop/systemsettings/recovery/recovery.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef RECOVERY_H\n#define RECOVERY_H\n\n#include <statuscenterpane.h>\n\nnamespace Ui {\n    class Recovery;\n}\n\nclass Recovery : public StatusCenterPane {\n        Q_OBJECT\n\n    public:\n        explicit Recovery();\n        ~Recovery();\n\n    private:\n        Ui::Recovery* ui;\n\n        void changeEvent(QEvent* event);\n\n        // StatusCenterPane interface\n    public:\n        QString name();\n        QString displayName();\n        QIcon icon();\n        QWidget* leftPane();\n    private slots:\n        void on_resetDEButton_clicked();\n        void on_titleLabel_backButtonClicked();\n        void on_resetDeviceButton_clicked();\n};\n\n#endif // RECOVERY_H\n"
  },
  {
    "path": "desktop/systemsettings/recovery/recovery.ui",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ui version=\"4.0\">\n <class>Recovery</class>\n <widget class=\"QWidget\" name=\"Recovery\">\n  <property name=\"geometry\">\n   <rect>\n    <x>0</x>\n    <y>0</y>\n    <width>896</width>\n    <height>455</height>\n   </rect>\n  </property>\n  <property name=\"windowTitle\">\n   <string notr=\"true\">Form</string>\n  </property>\n  <layout class=\"QVBoxLayout\" name=\"verticalLayout\">\n   <property name=\"spacing\">\n    <number>0</number>\n   </property>\n   <property name=\"leftMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"topMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"rightMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"bottomMargin\">\n    <number>0</number>\n   </property>\n   <item>\n    <widget class=\"tTitleLabel\" name=\"titleLabel\">\n     <property name=\"text\">\n      <string>Recovery</string>\n     </property>\n    </widget>\n   </item>\n   <item>\n    <widget class=\"QScrollArea\" name=\"scrollArea\">\n     <property name=\"frameShape\">\n      <enum>QFrame::NoFrame</enum>\n     </property>\n     <property name=\"widgetResizable\">\n      <bool>true</bool>\n     </property>\n     <widget class=\"QWidget\" name=\"scrollAreaWidgetContents\">\n      <property name=\"geometry\">\n       <rect>\n        <x>0</x>\n        <y>0</y>\n        <width>896</width>\n        <height>438</height>\n       </rect>\n      </property>\n      <layout class=\"QVBoxLayout\" name=\"verticalLayout_3\">\n       <property name=\"spacing\">\n        <number>0</number>\n       </property>\n       <property name=\"leftMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"topMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"rightMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"bottomMargin\">\n        <number>0</number>\n       </property>\n       <item alignment=\"Qt::AlignHCenter\">\n        <widget class=\"QWidget\" name=\"resetDEContainer\" native=\"true\">\n         <layout class=\"QVBoxLayout\" name=\"verticalLayout_2\">\n          <property name=\"spacing\">\n           <number>0</number>\n          </property>\n          <property name=\"leftMargin\">\n           <number>0</number>\n          </property>\n          <property name=\"topMargin\">\n           <number>0</number>\n          </property>\n          <property name=\"rightMargin\">\n           <number>0</number>\n          </property>\n          <property name=\"bottomMargin\">\n           <number>9</number>\n          </property>\n          <item>\n           <layout class=\"QVBoxLayout\" name=\"verticalLayout_4\">\n            <property name=\"leftMargin\">\n             <number>9</number>\n            </property>\n            <property name=\"topMargin\">\n             <number>9</number>\n            </property>\n            <property name=\"rightMargin\">\n             <number>9</number>\n            </property>\n            <property name=\"bottomMargin\">\n             <number>6</number>\n            </property>\n            <item>\n             <widget class=\"QLabel\" name=\"label_2\">\n              <property name=\"font\">\n               <font>\n                <weight>75</weight>\n                <bold>true</bold>\n               </font>\n              </property>\n              <property name=\"text\">\n               <string>RESET THEDESK</string>\n              </property>\n             </widget>\n            </item>\n            <item>\n             <widget class=\"QLabel\" name=\"label_3\">\n              <property name=\"text\">\n               <string>If things aren't working correctly, resetting theDesk might help.\n\nHere's what will happen:\n- User settings will be cleared and reset to defaults\n- The next time you log into theDesk, you'll need to run through the setup again\n\nSave your documents and close all apps before starting the reset. This won't take long, but you'll need to log out to perform the reset. You won't be able to use your device while the reset is taking place.</string>\n              </property>\n              <property name=\"wordWrap\">\n               <bool>true</bool>\n              </property>\n             </widget>\n            </item>\n           </layout>\n          </item>\n          <item>\n           <widget class=\"QPushButton\" name=\"resetDEButton\">\n            <property name=\"text\">\n             <string>Log Out and Reset theDesk</string>\n            </property>\n            <property name=\"icon\">\n             <iconset theme=\"view-refresh\">\n              <normaloff>.</normaloff>.</iconset>\n            </property>\n           </widget>\n          </item>\n         </layout>\n        </widget>\n       </item>\n       <item>\n        <widget class=\"Line\" name=\"resetDeviceLine\">\n         <property name=\"maximumSize\">\n          <size>\n           <width>16777215</width>\n           <height>1</height>\n          </size>\n         </property>\n         <property name=\"orientation\">\n          <enum>Qt::Horizontal</enum>\n         </property>\n        </widget>\n       </item>\n       <item alignment=\"Qt::AlignHCenter\">\n        <widget class=\"QWidget\" name=\"resetDeviceContainer\" native=\"true\">\n         <layout class=\"QVBoxLayout\" name=\"verticalLayout_5\">\n          <property name=\"spacing\">\n           <number>0</number>\n          </property>\n          <property name=\"leftMargin\">\n           <number>0</number>\n          </property>\n          <property name=\"topMargin\">\n           <number>0</number>\n          </property>\n          <property name=\"rightMargin\">\n           <number>0</number>\n          </property>\n          <property name=\"bottomMargin\">\n           <number>0</number>\n          </property>\n          <item>\n           <layout class=\"QVBoxLayout\" name=\"verticalLayout_6\">\n            <property name=\"leftMargin\">\n             <number>9</number>\n            </property>\n            <property name=\"topMargin\">\n             <number>9</number>\n            </property>\n            <property name=\"rightMargin\">\n             <number>9</number>\n            </property>\n            <property name=\"bottomMargin\">\n             <number>6</number>\n            </property>\n            <item>\n             <widget class=\"QLabel\" name=\"label_4\">\n              <property name=\"font\">\n               <font>\n                <weight>75</weight>\n                <bold>true</bold>\n               </font>\n              </property>\n              <property name=\"text\">\n               <string>RESET DEVICE</string>\n              </property>\n             </widget>\n            </item>\n            <item>\n             <widget class=\"QLabel\" name=\"label_5\">\n              <property name=\"text\">\n               <string>If resetting theDesk didn't work, or if you just need a fresh start, you can reset this device.</string>\n              </property>\n              <property name=\"wordWrap\">\n               <bool>true</bool>\n              </property>\n             </widget>\n            </item>\n           </layout>\n          </item>\n          <item>\n           <widget class=\"QPushButton\" name=\"resetDeviceButton\">\n            <property name=\"text\">\n             <string>Reset this device</string>\n            </property>\n            <property name=\"icon\">\n             <iconset theme=\"view-refresh\">\n              <normaloff>.</normaloff>.</iconset>\n            </property>\n           </widget>\n          </item>\n         </layout>\n        </widget>\n       </item>\n       <item>\n        <spacer name=\"verticalSpacer\">\n         <property name=\"orientation\">\n          <enum>Qt::Vertical</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>20</width>\n           <height>115</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n      </layout>\n     </widget>\n    </widget>\n   </item>\n  </layout>\n </widget>\n <customwidgets>\n  <customwidget>\n   <class>tTitleLabel</class>\n   <extends>QLabel</extends>\n   <header location=\"global\">ttitlelabel.h</header>\n   <slots>\n    <signal>backButtonClicked()</signal>\n   </slots>\n  </customwidget>\n </customwidgets>\n <resources/>\n <connections/>\n</ui>\n"
  },
  {
    "path": "desktop/systemsettings/systemsettings.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"systemsettings.h\"\n#include \"ui_systemsettings.h\"\n\n#include <QIcon>\n#include <QListWidgetItem>\n#include <statemanager.h>\n#include <statuscentermanager.h>\n#include \"common/common.h\"\n#include \"systemsettingsleftpane.h\"\n#include \"statuscenter/statuscenterleftpane.h\"\n#include <tsettings.h>\n\n#include \"about/about.h\"\n#include \"recovery/recovery.h\"\n#include \"pluginmanagement/pluginmanagement.h\"\n\nstruct SystemSettingsPrivate {\n    SystemSettingsLeftPane* leftPane;\n    StatusCenterLeftPane* mainLeftPane;\n\n    QList<QPair<QString, StatusCenterPane*>> loadedPanes;\n    QMap<StatusCenterPane*, QListWidgetItem*> paneItems;\n    QStringList preferredPaneOrder;\n\n    tSettings settings;\n};\n\nSystemSettings::SystemSettings(StatusCenterLeftPane* leftPane) :\n    StatusCenterPane(),\n    ui(new Ui::SystemSettings) {\n    ui->setupUi(this);\n\n    d = new SystemSettingsPrivate();\n    d->mainLeftPane = leftPane;\n    d->leftPane = new SystemSettingsLeftPane();\n\n    ui->stackedWidget->setCurrentAnimation(tStackedWidget::Lift);\n\n    d->preferredPaneOrder = d->settings.delimitedList(\"StatusCenter/settingsOrder\");\n\n    connect(StateManager::statusCenterManager(), &StatusCenterManager::paneAdded, this, [ = ](StatusCenterPane * pane, StatusCenterManager::PaneType type) {\n        if (type == StatusCenterManager::SystemSettings) {\n            this->addPane(pane);\n        }\n    });\n    connect(StateManager::statusCenterManager(), &StatusCenterManager::paneRemoved, this, &SystemSettings::removePane);\n\n    for (StatusCenterPane* pane : StateManager::statusCenterManager()->panes()) {\n        if (StateManager::statusCenterManager()->paneType(pane) == StatusCenterManager::SystemSettings) this->addPane(pane);\n    }\n\n    connect(d->leftPane, &SystemSettingsLeftPane::indexChanged, this, QOverload<int>::of(&SystemSettings::selectPane));\n    connect(d->leftPane, &SystemSettingsLeftPane::enterMenu, this, &SystemSettings::enterMenu);\n\n    connect(StateManager::statusCenterManager(), QOverload<QString>::of(&StatusCenterManager::paneRequest), this, [ = ](QString paneName) {\n        for (StatusCenterPane* pane : StateManager::statusCenterManager()->panes()) {\n            if (pane->name() == paneName) {\n                if (StateManager::statusCenterManager()->paneType(pane) == StatusCenterManager::SystemSettings) {\n                    selectPane(pane);\n                }\n            }\n        }\n    });\n    connect(StateManager::statusCenterManager(), QOverload<StatusCenterPane*>::of(&StatusCenterManager::paneRequest), this, [ = ](StatusCenterPane * pane) {\n        if (StateManager::statusCenterManager()->paneType(pane) == StatusCenterManager::SystemSettings) {\n            selectPane(pane);\n        }\n    });\n\n    StateManager::statusCenterManager()->addPane(new About(), StatusCenterManager::SystemSettings);\n    StateManager::statusCenterManager()->addPane(new Recovery(), StatusCenterManager::SystemSettings);\n    StateManager::statusCenterManager()->addPane(new PluginManagement(), StatusCenterManager::SystemSettings);\n}\n\nSystemSettings::~SystemSettings() {\n    d->leftPane->deleteLater();\n    delete d;\n    delete ui;\n}\n\nvoid SystemSettings::selectPane(QString pane) {\n    for (QPair<QString, StatusCenterPane*> loadedPane : d->loadedPanes) {\n        if (loadedPane.first == pane) selectPane(loadedPane.second);\n    }\n}\n\nvoid SystemSettings::selectPane(int index) {\n    selectPane(d->loadedPanes.at(index).second);\n}\n\nvoid SystemSettings::selectPane(StatusCenterPane* pane) {\n    ui->stackedWidget->setCurrentWidget(pane);\n    if (pane->leftPane()) d->mainLeftPane->pushMenu(pane->leftPane());\n    d->paneItems.value(pane)->setSelected(true);\n}\n\nvoid SystemSettings::enterMenu(int index) {\n    StatusCenterPane* pane = d->loadedPanes.at(index).second;\n    if (pane->leftPane()) {\n        if (d->mainLeftPane->peekMenu() != pane->leftPane()) d->mainLeftPane->pushMenu(pane->leftPane());\n    } else {\n        StateManager::statusCenterManager()->hideStatusCenterHamburgerMenu();\n    }\n}\n\nvoid SystemSettings::addPane(StatusCenterPane* pane) {\n    QListWidgetItem* item = new QListWidgetItem();\n    item->setText(pane->displayName());\n    item->setIcon(pane->icon());\n\n    connect(pane, &StatusCenterPane::displayNameChanged, this, [ = ] {\n        if (d->paneItems.contains(pane)) {\n            d->paneItems.value(pane)->setText(pane->displayName());\n        }\n    });\n    connect(pane, &StatusCenterPane::iconChanged, this, [ = ] {\n        if (d->paneItems.contains(pane)) {\n            d->paneItems.value(pane)->setIcon(pane->icon());\n        }\n    });\n    if (pane->leftPane()) {\n        item->setData(Qt::UserRole, true);\n    }\n    d->paneItems.insert(pane, item);\n\n    QStringList currentItems;\n    for (QPair<QString, StatusCenterPane*> item : d->loadedPanes) {\n        currentItems.append(item.first);\n    }\n    int index = Common::getInsertionIndex(d->preferredPaneOrder, currentItems, pane->name());\n    if (index == -1) {\n        //Add it at the end\n        ui->stackedWidget->addWidget(pane);\n        d->leftPane->appendItem(item);\n        d->loadedPanes.append({pane->name(), pane});\n    } else {\n        //Add this chunk at the beginning\n        ui->stackedWidget->insertWidget(index, pane);\n        d->leftPane->insertItem(index, item);\n        d->loadedPanes.insert(index, {pane->name(), pane});\n    }\n}\n\nvoid SystemSettings::removePane(StatusCenterPane* pane) {\n    for (int i = 0; i < d->loadedPanes.count(); i++) {\n        if (d->loadedPanes.at(i).second == pane) {\n            QListWidgetItem* item = d->paneItems.take(pane);\n            d->leftPane->removeItem(item);\n            delete item;\n\n            ui->stackedWidget->removeWidget(pane);\n            d->loadedPanes.removeAt(i);\n            return;\n        }\n    }\n}\n\nvoid SystemSettings::changeEvent(QEvent* event) {\n    if (event->type() == QEvent::LanguageChange) {\n        ui->retranslateUi(this);\n        emit displayNameChanged();\n    }\n}\n\n\nQString SystemSettings::name() {\n    return \"SystemSettings\";\n}\n\nQString SystemSettings::displayName() {\n    return tr(\"System Settings\");\n}\n\nQIcon SystemSettings::icon() {\n    return QIcon::fromTheme(\"preferences-system\");\n}\n\nQWidget* SystemSettings::leftPane() {\n    return d->leftPane;\n}\n"
  },
  {
    "path": "desktop/systemsettings/systemsettings.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef SYSTEMSETTINGS_H\n#define SYSTEMSETTINGS_H\n\n#include <statuscenterpane.h>\n\nnamespace Ui {\n    class SystemSettings;\n}\n\nclass StatusCenterLeftPane;\nstruct SystemSettingsPrivate;\nclass SystemSettings : public StatusCenterPane {\n        Q_OBJECT\n\n    public:\n        explicit SystemSettings(StatusCenterLeftPane* leftPane);\n        ~SystemSettings();\n\n    private:\n        Ui::SystemSettings* ui;\n        SystemSettingsPrivate* d;\n\n        void selectPane(QString pane);\n        void selectPane(StatusCenterPane* pane);\n        void selectPane(int index);\n        void enterMenu(int index);\n\n        void addPane(StatusCenterPane* pane);\n        void removePane(StatusCenterPane* pane);\n\n        void changeEvent(QEvent* event);\n\n        // StatusCenterPane interface\n    public:\n        QString name();\n        QString displayName();\n        QIcon icon();\n        QWidget* leftPane();\n};\n\n#endif // SYSTEMSETTINGS_H\n"
  },
  {
    "path": "desktop/systemsettings/systemsettings.ui",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ui version=\"4.0\">\n <class>SystemSettings</class>\n <widget class=\"QWidget\" name=\"SystemSettings\">\n  <property name=\"geometry\">\n   <rect>\n    <x>0</x>\n    <y>0</y>\n    <width>400</width>\n    <height>300</height>\n   </rect>\n  </property>\n  <property name=\"windowTitle\">\n   <string notr=\"true\">Form</string>\n  </property>\n  <layout class=\"QVBoxLayout\" name=\"verticalLayout\">\n   <property name=\"spacing\">\n    <number>0</number>\n   </property>\n   <property name=\"leftMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"topMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"rightMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"bottomMargin\">\n    <number>0</number>\n   </property>\n   <item>\n    <widget class=\"tStackedWidget\" name=\"stackedWidget\"/>\n   </item>\n  </layout>\n </widget>\n <customwidgets>\n  <customwidget>\n   <class>tStackedWidget</class>\n   <extends>QStackedWidget</extends>\n   <header location=\"global\">tstackedwidget.h</header>\n   <container>1</container>\n  </customwidget>\n </customwidgets>\n <resources/>\n <connections/>\n</ui>\n"
  },
  {
    "path": "desktop/systemsettings/systemsettingsleftpane.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"systemsettingsleftpane.h\"\n#include \"ui_systemsettingsleftpane.h\"\n\n#include \"../statuscenter/leftpanedelegate.h\"\n#include <libcontemporary_global.h>\n#include <powermanager.h>\n#include <statemanager.h>\n#include <statuscentermanager.h>\n#include <tvariantanimation.h>\n\nstruct SystemSettingsLeftPanePrivate {\n        bool isShowingLogOutRequired = false;\n};\n\nSystemSettingsLeftPane::SystemSettingsLeftPane(QWidget* parent) :\n    QWidget(parent),\n    ui(new Ui::SystemSettingsLeftPane) {\n    ui->setupUi(this);\n\n    d = new SystemSettingsLeftPanePrivate();\n\n    ui->titleLabel->setBackButtonShown(true);\n    ui->mainList->setIconSize(SC_DPI_T(QSize(32, 32), QSize));\n    ui->mainList->setItemDelegate(new LeftPaneDelegate(this));\n\n    ui->logoutRequiredWidget->setFixedHeight(0);\n    ui->logoutRequiredWidget->setVisible(false);\n    ui->logoutButton->setProperty(\"type\", \"destructive\");\n\n    connect(StateManager::statusCenterManager(), &StatusCenterManager::requestLogout, this, [=] {\n        if (d->isShowingLogOutRequired) return;\n        d->isShowingLogOutRequired = true;\n\n        tVariantAnimation* anim = new tVariantAnimation(this);\n        anim->setStartValue(0);\n        anim->setEndValue(ui->logoutRequiredWidget->sizeHint().height());\n        anim->setDuration(250);\n        anim->setEasingCurve(QEasingCurve::OutCubic);\n        connect(anim, &tVariantAnimation::valueChanged, this, [=](QVariant value) {\n            ui->logoutRequiredWidget->setFixedHeight(value.toInt());\n        });\n        connect(anim, &tVariantAnimation::finished, anim, &tVariantAnimation::deleteLater);\n        anim->start();\n\n        ui->logoutRequiredWidget->setVisible(true);\n    });\n}\n\nSystemSettingsLeftPane::~SystemSettingsLeftPane() {\n    delete d;\n    delete ui;\n}\n\nvoid SystemSettingsLeftPane::appendItem(QListWidgetItem* item) {\n    ui->mainList->addItem(item);\n}\n\nvoid SystemSettingsLeftPane::insertItem(int index, QListWidgetItem* item) {\n    ui->mainList->insertItem(index, item);\n}\n\nvoid SystemSettingsLeftPane::removeItem(QListWidgetItem* item) {\n    ui->mainList->removeItemWidget(item);\n}\n\nvoid SystemSettingsLeftPane::on_titleLabel_backButtonClicked() {\n    StateManager::statusCenterManager()->returnToRootMenu();\n}\n\nvoid SystemSettingsLeftPane::on_mainList_currentRowChanged(int currentRow) {\n    emit indexChanged(currentRow);\n}\n\nvoid SystemSettingsLeftPane::on_mainList_clicked(const QModelIndex& index) {\n    emit enterMenu(index.row());\n}\n\nvoid SystemSettingsLeftPane::on_logoutButton_clicked() {\n    StateManager::instance()->powerManager()->showPowerOffConfirmation(PowerManager::LogOut);\n}\n\nvoid SystemSettingsLeftPane::changeEvent(QEvent* event) {\n    if (event->type() == QEvent::LanguageChange) {\n        ui->retranslateUi(this);\n    }\n}\n"
  },
  {
    "path": "desktop/systemsettings/systemsettingsleftpane.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef SYSTEMSETTINGSLEFTPANE_H\n#define SYSTEMSETTINGSLEFTPANE_H\n\n#include <QWidget>\n\nnamespace Ui {\n    class SystemSettingsLeftPane;\n}\n\nclass QListWidgetItem;\nstruct SystemSettingsLeftPanePrivate;\nclass SystemSettingsLeftPane : public QWidget {\n        Q_OBJECT\n\n    public:\n        explicit SystemSettingsLeftPane(QWidget* parent = nullptr);\n        ~SystemSettingsLeftPane();\n\n        void appendItem(QListWidgetItem* item);\n        void insertItem(int index, QListWidgetItem* item);\n        void removeItem(QListWidgetItem* item);\n\n    signals:\n        void indexChanged(int index);\n        void enterMenu(int index);\n\n    private slots:\n        void on_titleLabel_backButtonClicked();\n\n        void on_mainList_currentRowChanged(int currentRow);\n\n        void on_mainList_clicked(const QModelIndex& index);\n\n        void on_logoutButton_clicked();\n\n    private:\n        Ui::SystemSettingsLeftPane* ui;\n        SystemSettingsLeftPanePrivate* d;\n\n        void changeEvent(QEvent* event);\n};\n\n#endif // SYSTEMSETTINGSLEFTPANE_H\n"
  },
  {
    "path": "desktop/systemsettings/systemsettingsleftpane.ui",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ui version=\"4.0\">\n <class>SystemSettingsLeftPane</class>\n <widget class=\"QWidget\" name=\"SystemSettingsLeftPane\">\n  <property name=\"geometry\">\n   <rect>\n    <x>0</x>\n    <y>0</y>\n    <width>307</width>\n    <height>456</height>\n   </rect>\n  </property>\n  <property name=\"windowTitle\">\n   <string notr=\"true\">Form</string>\n  </property>\n  <layout class=\"QVBoxLayout\" name=\"verticalLayout\">\n   <property name=\"spacing\">\n    <number>0</number>\n   </property>\n   <property name=\"leftMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"topMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"rightMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"bottomMargin\">\n    <number>0</number>\n   </property>\n   <item>\n    <widget class=\"tTitleLabel\" name=\"titleLabel\">\n     <property name=\"text\">\n      <string>System Settings</string>\n     </property>\n    </widget>\n   </item>\n   <item>\n    <widget class=\"QListWidget\" name=\"mainList\">\n     <property name=\"frameShape\">\n      <enum>QFrame::NoFrame</enum>\n     </property>\n    </widget>\n   </item>\n   <item>\n    <widget class=\"QWidget\" name=\"logoutRequiredWidget\" native=\"true\">\n     <layout class=\"QVBoxLayout\" name=\"verticalLayout_2\">\n      <property name=\"spacing\">\n       <number>0</number>\n      </property>\n      <property name=\"leftMargin\">\n       <number>0</number>\n      </property>\n      <property name=\"topMargin\">\n       <number>0</number>\n      </property>\n      <property name=\"rightMargin\">\n       <number>0</number>\n      </property>\n      <property name=\"bottomMargin\">\n       <number>0</number>\n      </property>\n      <item>\n       <widget class=\"Line\" name=\"line\">\n        <property name=\"maximumSize\">\n         <size>\n          <width>16777215</width>\n          <height>1</height>\n         </size>\n        </property>\n        <property name=\"orientation\">\n         <enum>Qt::Horizontal</enum>\n        </property>\n       </widget>\n      </item>\n      <item>\n       <layout class=\"QVBoxLayout\" name=\"verticalLayout_3\">\n        <property name=\"spacing\">\n         <number>6</number>\n        </property>\n        <property name=\"leftMargin\">\n         <number>9</number>\n        </property>\n        <property name=\"topMargin\">\n         <number>9</number>\n        </property>\n        <property name=\"rightMargin\">\n         <number>9</number>\n        </property>\n        <property name=\"bottomMargin\">\n         <number>9</number>\n        </property>\n        <item>\n         <widget class=\"QLabel\" name=\"label\">\n          <property name=\"font\">\n           <font>\n            <weight>75</weight>\n            <bold>true</bold>\n           </font>\n          </property>\n          <property name=\"text\">\n           <string>LOG OUT</string>\n          </property>\n         </widget>\n        </item>\n        <item>\n         <widget class=\"QLabel\" name=\"label_2\">\n          <property name=\"text\">\n           <string>You've changed some settings that require you to log out for them to apply completely</string>\n          </property>\n          <property name=\"wordWrap\">\n           <bool>true</bool>\n          </property>\n         </widget>\n        </item>\n        <item>\n         <layout class=\"QHBoxLayout\" name=\"horizontalLayout\">\n          <item>\n           <spacer name=\"horizontalSpacer\">\n            <property name=\"orientation\">\n             <enum>Qt::Horizontal</enum>\n            </property>\n            <property name=\"sizeHint\" stdset=\"0\">\n             <size>\n              <width>40</width>\n              <height>20</height>\n             </size>\n            </property>\n           </spacer>\n          </item>\n          <item>\n           <widget class=\"QPushButton\" name=\"logoutButton\">\n            <property name=\"text\">\n             <string>Log Out</string>\n            </property>\n            <property name=\"icon\">\n             <iconset theme=\"system-log-out\"/>\n            </property>\n           </widget>\n          </item>\n         </layout>\n        </item>\n       </layout>\n      </item>\n     </layout>\n    </widget>\n   </item>\n  </layout>\n </widget>\n <customwidgets>\n  <customwidget>\n   <class>tTitleLabel</class>\n   <extends>QLabel</extends>\n   <header location=\"global\">ttitlelabel.h</header>\n   <slots>\n    <signal>backButtonClicked()</signal>\n   </slots>\n  </customwidget>\n </customwidgets>\n <resources/>\n <connections/>\n</ui>\n"
  },
  {
    "path": "desktop/thedesk.conf",
    "content": "[Onboarding]\nlastOnboarding=0\norder=OnboardingWelcome:OnboardingBetaThankYou:OnboardingRegion:OnboardingNetwork:OnboardingTheme:OnboardingFinal\nonboardingVideo=true\nonboardingAudio=true\naudio.start=/usr/share/thedesk/media/intro.ogg\naudio.loop=/usr/share/thedesk/media/loop.ogg\nvideos.start=/usr/share/thedesk/media/welcome1.webm\nvideos.middle=/usr/share/thedesk/media/welcome2.webm\nvideos.loop=/usr/share/thedesk/media/welcome3.webm\nwelcomeGraphic=:/libthedesk/images/splash-background.svg\n\n[StatusCenter]\npanesOrder=OverviewPane:NetworkManagerPane:NotificationsPane\nquickSwitchOrder=NetworkFlight:NetworkWireless:NetworkCellular:Bluetooth:PowerStretch:Redshift\nsettingsOrder=BluetoothSettings:DisplaySettings:ThemeSettings:InputSettings:PowerSettings:LocaleSettings:UsersSettings:DateTimeSettings:DefaultAppsSettings:AccessibilitySettings:SystemPluginManagement:SystemRecovery:SystemAbout\n\n[Locale]\nlocales=en\nformats=en_US\n\n[Plugins]\nblacklist=\n\n[Appearance]\ntranslucent=true\n\n[Display]\ndpi=96\n\n[Session]\nUseInitializationScript=false\nInitializationScript=/etc/thedesk/init_thedesk.sh\nWindowManager=kwin_x11\nWindowManagerArguments=--replace:--no-kactivities\n"
  },
  {
    "path": "desktop/translations/ar_SA.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"ar_SA\" sourcelanguage=\"en_US\">\n<context>\n    <name>About</name>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"165\"/>\n        <source>DISTRIBUTION</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"182\"/>\n        <source>You&apos;re using</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"262\"/>\n        <source>Device Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"362\"/>\n        <source>Processor</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"248\"/>\n        <source>THIS DEVICE</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"276\"/>\n        <source>Available Memory</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"236\"/>\n        <source>Available Swap</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"307\"/>\n        <source>Qt Version</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"255\"/>\n        <source>Kernel Version</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"297\"/>\n        <source>Change Device Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"269\"/>\n        <source>Window System</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"283\"/>\n        <source>Device Type</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"369\"/>\n        <source>Video</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"444\"/>\n        <source>Desktop Environment</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"473\"/>\n        <source>Website</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"484\"/>\n        <source>File Bug</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"495\"/>\n        <source>Sources</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"506\"/>\n        <source>View Debug Log</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"463\"/>\n        <source>Acknowledgements</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"68\"/>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"69\"/>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"105\"/>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"167\"/>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"172\"/>\n        <source>Unknown</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"117\"/>\n        <source>theDesk %1 - Blueprint</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"118\"/>\n        <source>You compiled theDesk on %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"120\"/>\n        <source>theDesk %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"124\"/>\n        <source>Copyright © Victor Tran %1. Licensed under the terms of the GNU General Public License, version 3 or later.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"35\"/>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"189\"/>\n        <source>About</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>Acknowledgements</name>\n    <message>\n        <location filename=\"../systemsettings/about/acknowledgements.ui\" line=\"35\"/>\n        <source>Acknowledgements</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>AppSearchProvider</name>\n    <message>\n        <location filename=\"../gateway/appsearchprovider.cpp\" line=\"151\"/>\n        <source>Application</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>AppSelectionModel</name>\n    <message>\n        <location filename=\"../gateway/appselectionmodel.cpp\" line=\"61\"/>\n        <source>Application</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>Background</name>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"176\"/>\n        <source>Sorry, there was a problem displaying the background.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"198\"/>\n        <source>Try Again</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"379\"/>\n        <source>Background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"427\"/>\n        <source>IMAGE</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"434\"/>\n        <source>Select an image to display on your background and lock screen</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"522\"/>\n        <source>COMMUNITY BACKGROUNDS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"529\"/>\n        <source>Images from the theDesk community will be cycled through every so often.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"536\"/>\n        <source>Show image information</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"584\"/>\n        <source>STRETCH</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"591\"/>\n        <source>Select how you&apos;d like the background image to be sized</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"603\"/>\n        <source>Stretch To Fit</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"629\"/>\n        <source>Zoom and Crop</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"655\"/>\n        <source>Center</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"681\"/>\n        <source>Tile</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"707\"/>\n        <source>Zoom To Fit</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"757\"/>\n        <source>Change Background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"765\"/>\n        <source>End Session</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"201\"/>\n        <source>by %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"299\"/>\n        <source>For desktop</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"331\"/>\n        <source>Select Background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"370\"/>\n        <source>Set Background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"371\"/>\n        <source>Set as Desktop Background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"374\"/>\n        <source>Set as Lock Screen Background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"378\"/>\n        <source>Set for both</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>ChangeHostnamePopover</name>\n    <message>\n        <location filename=\"../systemsettings/about/changehostnamepopover.ui\" line=\"35\"/>\n        <source>Change Device Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/changehostnamepopover.ui\" line=\"62\"/>\n        <source>New Device Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/changehostnamepopover.ui\" line=\"69\"/>\n        <source>This device name is used over the network to identify this device. It is also used to identify this device over Bluetooth.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/changehostnamepopover.ui\" line=\"79\"/>\n        <source>Network Compatible Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/changehostnamepopover.ui\" line=\"95\"/>\n        <source>Rename this Device</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>ChunkContainer</name>\n    <message>\n        <location filename=\"../bar/chunkcontainer.ui\" line=\"41\"/>\n        <source>Open Status Center</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>CommandLine</name>\n    <message>\n        <location filename=\"../cli/commandline.cpp\" line=\"37\"/>\n        <source>Start theDesk in Safe Mode</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../cli/commandline.cpp\" line=\"40\"/>\n        <source>Internal use; the path to a local socket to communicate with the session manager</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../cli/commandline.cpp\" line=\"40\"/>\n        <source>path</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>CurrentAppWidgetMenu</name>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.ui\" line=\"75\"/>\n        <source>Close Window</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.ui\" line=\"188\"/>\n        <source>QUIT IMMEDIATELY</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.ui\" line=\"204\"/>\n        <source>Cancel</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.cpp\" line=\"62\"/>\n        <source>Force Stop</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.cpp\" line=\"63\"/>\n        <location filename=\"../bar/currentappwidgetmenu.cpp\" line=\"65\"/>\n        <source>Force Stop %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.cpp\" line=\"64\"/>\n        <source>%1 will be forced to exit and won&apos;t have a chance to save any unsaved data.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>EndSession</name>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"57\"/>\n        <source>End Session</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"115\"/>\n        <source>Power Off</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"122\"/>\n        <source>Turns off your computer.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"134\"/>\n        <location filename=\"../session/endsession.ui\" line=\"369\"/>\n        <location filename=\"../session/endsession.cpp\" line=\"251\"/>\n        <source>Reboot</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"141\"/>\n        <source>Turns off your computer and turns it on again</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"148\"/>\n        <source>Reboot and install updates</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"155\"/>\n        <source>Turns off your computer, installs pending updates and turns it on again</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"162\"/>\n        <source>Log Out</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"169\"/>\n        <source>Ends your session but keeps your computer on for other people to use</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"176\"/>\n        <source>Suspend</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"183\"/>\n        <source>Puts your computer in a low power state so it reopens quickly</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"190\"/>\n        <source>Lock</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"197\"/>\n        <source>Locks your workspace with your password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"204\"/>\n        <source>Turn Off Screen</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"211\"/>\n        <source>Turns off the screen, but keeps everything else running in the background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"218\"/>\n        <source>Switch Users</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"225\"/>\n        <source>Switches to the logon screen, but keeps your session in the background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"232\"/>\n        <source>Hibernate</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"239\"/>\n        <source>Powers off your computer, but restores the session when powered back on</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"334\"/>\n        <source>Updates are available. What do you want to do?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"349\"/>\n        <source>Reboot and update</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"356\"/>\n        <source>We&apos;ll perform system updates once this device has rebooted.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"376\"/>\n        <source>We&apos;ll reboot your device normally.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"109\"/>\n        <source>power off the system</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"110\"/>\n        <source>reboot the system</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"111\"/>\n        <source>reboot the system and install any pending updates</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"112\"/>\n        <source>log you out</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"113\"/>\n        <source>suspend the system</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"114\"/>\n        <source>lock the screen</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"115\"/>\n        <source>turn off the screen</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"116\"/>\n        <source>switch users</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"117\"/>\n        <source>hibernate the system</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"250\"/>\n        <source>Advanced Reboot</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"260\"/>\n        <source>Reboot into System UEFI Setup</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"49\"/>\n        <source>Hey %1, ready to head out? We&apos;ll %2 in %n seconds if you don&apos;t do anything.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>MainGatewayWidget</name>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"57\"/>\n        <source>Gateway</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"150\"/>\n        <source>CATEGORIES</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"160\"/>\n        <source>All Apps</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"276\"/>\n        <source>Preparing the Gateway...</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"67\"/>\n        <source>Type to search...</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"192\"/>\n        <source>Status Center</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"391\"/>\n        <source>System Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"407\"/>\n        <source>End Session</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"88\"/>\n        <source>A/V</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"89\"/>\n        <source>Development</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"90\"/>\n        <source>Education</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"91\"/>\n        <source>Games</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"92\"/>\n        <source>Graphics</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"93\"/>\n        <source>Networking</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"94\"/>\n        <source>Office</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"95\"/>\n        <source>Science</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"96\"/>\n        <source>Utilities</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"170\"/>\n        <source>Actions for %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>ManagePluginPopover</name>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"135\"/>\n        <source>ERROR DETAILS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"190\"/>\n        <source>ACTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"199\"/>\n        <source>Activate Plugin</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"206\"/>\n        <source>Deactivate Plugin</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"213\"/>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"276\"/>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"296\"/>\n        <source>Blacklist Plugin</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"220\"/>\n        <source>Remove Plugin from Blacklist</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"283\"/>\n        <source>Placing this plugin on the blacklist will prevent it from being loaded next time you log in. If the plugin is not already deactivated, we&apos;ll also deactivate it for you.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.cpp\" line=\"43\"/>\n        <source>UUID: %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>PluginManagement</name>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmanagement.ui\" line=\"35\"/>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmanagement.cpp\" line=\"72\"/>\n        <source>Plugins</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmanagement.ui\" line=\"75\"/>\n        <source>Plugins add core and extra functionality to theDesk.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>PluginModel</name>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmodel.cpp\" line=\"52\"/>\n        <source>Loaded</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmodel.cpp\" line=\"54\"/>\n        <source>Blacklisted</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmodel.cpp\" line=\"56\"/>\n        <source>Unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmodel.cpp\" line=\"58\"/>\n        <source>Inactive</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>Recovery</name>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"35\"/>\n        <location filename=\"../systemsettings/recovery/recovery.cpp\" line=\"67\"/>\n        <source>Recovery</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"113\"/>\n        <source>RESET THEDESK</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"120\"/>\n        <source>If things aren&apos;t working correctly, resetting theDesk might help.\n\nHere&apos;s what will happen:\n- User settings will be cleared and reset to defaults\n- The next time you log into theDesk, you&apos;ll need to run through the setup again\n\nSave your documents and close all apps before starting the reset. This won&apos;t take long, but you&apos;ll need to log out to perform the reset. You won&apos;t be able to use your device while the reset is taking place.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"138\"/>\n        <source>Log Out and Reset theDesk</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"203\"/>\n        <source>RESET DEVICE</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"210\"/>\n        <source>If resetting theDesk didn&apos;t work, or if you just need a fresh start, you can reset this device.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"222\"/>\n        <source>Reset this device</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.cpp\" line=\"92\"/>\n        <source>%1, log out and reset theDesk settings? This action is irreversible.\n\nWe&apos;ll go ahead and reset your settings in %n seconds if you don&apos;t do anything.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>RunDialog</name>\n    <message>\n        <location filename=\"../run/rundialog.ui\" line=\"35\"/>\n        <source>Run</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../run/rundialog.ui\" line=\"60\"/>\n        <source>Enter a command to run.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../run/rundialog.ui\" line=\"73\"/>\n        <source>Run this command</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>StatusCenterLeftPane</name>\n    <message>\n        <location filename=\"../statuscenter/statuscenterleftpane.ui\" line=\"54\"/>\n        <source>Status Center</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SystemSettings</name>\n    <message>\n        <location filename=\"../systemsettings/systemsettings.cpp\" line=\"190\"/>\n        <source>System Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SystemSettingsLeftPane</name>\n    <message>\n        <location filename=\"../systemsettings/systemsettingsleftpane.ui\" line=\"35\"/>\n        <source>System Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/systemsettingsleftpane.ui\" line=\"103\"/>\n        <source>LOG OUT</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/systemsettingsleftpane.ui\" line=\"110\"/>\n        <source>You&apos;ve changed some settings that require you to log out for them to apply completely</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/systemsettingsleftpane.ui\" line=\"135\"/>\n        <source>Log Out</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>TaskbarApplicationWidget</name>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"153\"/>\n        <source>Move to desktop</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"150\"/>\n        <source>For %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"158\"/>\n        <source>All Desktops</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"176\"/>\n        <source>New Desktop</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"181\"/>\n        <source>Close</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"186\"/>\n        <source>For %n %1 windows</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n        </translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"188\"/>\n        <source>For %n windows</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n        </translation>\n    </message>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"190\"/>\n        <source>Close All</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>main</name>\n    <message>\n        <location filename=\"../main.cpp\" line=\"73\"/>\n        <source>Safe Mode</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../main.cpp\" line=\"73\"/>\n        <source>You&apos;re holding the CTRL key. Start theDesk in Safe Mode?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "desktop/translations/au_AU.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"au_AU\" sourcelanguage=\"en_US\">\n<context>\n    <name>About</name>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"165\"/>\n        <source>DISTRIBUTION</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"182\"/>\n        <source>You&apos;re using</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"262\"/>\n        <source>Device Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"362\"/>\n        <source>Processor</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"248\"/>\n        <source>THIS DEVICE</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"276\"/>\n        <source>Available Memory</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"236\"/>\n        <source>Available Swap</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"307\"/>\n        <source>Qt Version</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"255\"/>\n        <source>Kernel Version</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"297\"/>\n        <source>Change Device Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"269\"/>\n        <source>Window System</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"283\"/>\n        <source>Device Type</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"369\"/>\n        <source>Video</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"444\"/>\n        <source>Desktop Environment</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"473\"/>\n        <source>Website</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"484\"/>\n        <source>File Bug</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"495\"/>\n        <source>Sources</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"506\"/>\n        <source>View Debug Log</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"463\"/>\n        <source>Acknowledgements</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"68\"/>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"69\"/>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"105\"/>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"167\"/>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"172\"/>\n        <source>Unknown</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"117\"/>\n        <source>theDesk %1 - Blueprint</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"118\"/>\n        <source>You compiled theDesk on %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"120\"/>\n        <source>theDesk %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"124\"/>\n        <source>Copyright © Victor Tran %1. Licensed under the terms of the GNU General Public License, version 3 or later.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"35\"/>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"189\"/>\n        <source>About</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>Acknowledgements</name>\n    <message>\n        <location filename=\"../systemsettings/about/acknowledgements.ui\" line=\"35\"/>\n        <source>Acknowledgements</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>AppSearchProvider</name>\n    <message>\n        <location filename=\"../gateway/appsearchprovider.cpp\" line=\"151\"/>\n        <source>Application</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>AppSelectionModel</name>\n    <message>\n        <location filename=\"../gateway/appselectionmodel.cpp\" line=\"61\"/>\n        <source>Application</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>Background</name>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"176\"/>\n        <source>Sorry, there was a problem displaying the background.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"198\"/>\n        <source>Try Again</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"379\"/>\n        <source>Background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"427\"/>\n        <source>IMAGE</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"434\"/>\n        <source>Select an image to display on your background and lock screen</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"522\"/>\n        <source>COMMUNITY BACKGROUNDS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"529\"/>\n        <source>Images from the theDesk community will be cycled through every so often.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"536\"/>\n        <source>Show image information</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"584\"/>\n        <source>STRETCH</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"591\"/>\n        <source>Select how you&apos;d like the background image to be sized</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"603\"/>\n        <source>Stretch To Fit</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"629\"/>\n        <source>Zoom and Crop</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"655\"/>\n        <source>Center</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"681\"/>\n        <source>Tile</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"707\"/>\n        <source>Zoom To Fit</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"757\"/>\n        <source>Change Background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"765\"/>\n        <source>End Session</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"201\"/>\n        <source>by %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"299\"/>\n        <source>For desktop</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"331\"/>\n        <source>Select Background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"370\"/>\n        <source>Set Background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"371\"/>\n        <source>Set as Desktop Background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"374\"/>\n        <source>Set as Lock Screen Background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"378\"/>\n        <source>Set for both</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>ChangeHostnamePopover</name>\n    <message>\n        <location filename=\"../systemsettings/about/changehostnamepopover.ui\" line=\"35\"/>\n        <source>Change Device Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/changehostnamepopover.ui\" line=\"62\"/>\n        <source>New Device Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/changehostnamepopover.ui\" line=\"69\"/>\n        <source>This device name is used over the network to identify this device. It is also used to identify this device over Bluetooth.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/changehostnamepopover.ui\" line=\"79\"/>\n        <source>Network Compatible Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/changehostnamepopover.ui\" line=\"95\"/>\n        <source>Rename this Device</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>ChunkContainer</name>\n    <message>\n        <location filename=\"../bar/chunkcontainer.ui\" line=\"41\"/>\n        <source>Open Status Center</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>CommandLine</name>\n    <message>\n        <location filename=\"../cli/commandline.cpp\" line=\"37\"/>\n        <source>Start theDesk in Safe Mode</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../cli/commandline.cpp\" line=\"40\"/>\n        <source>Internal use; the path to a local socket to communicate with the session manager</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../cli/commandline.cpp\" line=\"40\"/>\n        <source>path</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>CurrentAppWidgetMenu</name>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.ui\" line=\"75\"/>\n        <source>Close Window</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.ui\" line=\"188\"/>\n        <source>QUIT IMMEDIATELY</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.ui\" line=\"204\"/>\n        <source>Cancel</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.cpp\" line=\"62\"/>\n        <source>Force Stop</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.cpp\" line=\"63\"/>\n        <location filename=\"../bar/currentappwidgetmenu.cpp\" line=\"65\"/>\n        <source>Force Stop %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.cpp\" line=\"64\"/>\n        <source>%1 will be forced to exit and won&apos;t have a chance to save any unsaved data.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>EndSession</name>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"57\"/>\n        <source>End Session</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"115\"/>\n        <source>Power Off</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"122\"/>\n        <source>Turns off your computer.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"134\"/>\n        <location filename=\"../session/endsession.ui\" line=\"369\"/>\n        <location filename=\"../session/endsession.cpp\" line=\"251\"/>\n        <source>Reboot</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"141\"/>\n        <source>Turns off your computer and turns it on again</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"148\"/>\n        <source>Reboot and install updates</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"155\"/>\n        <source>Turns off your computer, installs pending updates and turns it on again</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"162\"/>\n        <source>Log Out</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"169\"/>\n        <source>Ends your session but keeps your computer on for other people to use</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"176\"/>\n        <source>Suspend</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"183\"/>\n        <source>Puts your computer in a low power state so it reopens quickly</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"190\"/>\n        <source>Lock</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"197\"/>\n        <source>Locks your workspace with your password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"204\"/>\n        <source>Turn Off Screen</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"211\"/>\n        <source>Turns off the screen, but keeps everything else running in the background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"218\"/>\n        <source>Switch Users</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"225\"/>\n        <source>Switches to the logon screen, but keeps your session in the background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"232\"/>\n        <source>Hibernate</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"239\"/>\n        <source>Powers off your computer, but restores the session when powered back on</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"334\"/>\n        <source>Updates are available. What do you want to do?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"349\"/>\n        <source>Reboot and update</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"356\"/>\n        <source>We&apos;ll perform system updates once this device has rebooted.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"376\"/>\n        <source>We&apos;ll reboot your device normally.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"109\"/>\n        <source>power off the system</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"110\"/>\n        <source>reboot the system</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"111\"/>\n        <source>reboot the system and install any pending updates</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"112\"/>\n        <source>log you out</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"113\"/>\n        <source>suspend the system</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"114\"/>\n        <source>lock the screen</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"115\"/>\n        <source>turn off the screen</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"116\"/>\n        <source>switch users</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"117\"/>\n        <source>hibernate the system</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"250\"/>\n        <source>Advanced Reboot</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"260\"/>\n        <source>Reboot into System UEFI Setup</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"49\"/>\n        <source>Hey %1, ready to head out? We&apos;ll %2 in %n seconds if you don&apos;t do anything.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>MainGatewayWidget</name>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"57\"/>\n        <source>Gateway</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"150\"/>\n        <source>CATEGORIES</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"160\"/>\n        <source>All Apps</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"276\"/>\n        <source>Preparing the Gateway...</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"67\"/>\n        <source>Type to search...</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"192\"/>\n        <source>Status Center</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"391\"/>\n        <source>System Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"407\"/>\n        <source>End Session</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"88\"/>\n        <source>A/V</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"89\"/>\n        <source>Development</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"90\"/>\n        <source>Education</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"91\"/>\n        <source>Games</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"92\"/>\n        <source>Graphics</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"93\"/>\n        <source>Networking</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"94\"/>\n        <source>Office</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"95\"/>\n        <source>Science</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"96\"/>\n        <source>Utilities</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"170\"/>\n        <source>Actions for %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>ManagePluginPopover</name>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"135\"/>\n        <source>ERROR DETAILS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"190\"/>\n        <source>ACTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"199\"/>\n        <source>Activate Plugin</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"206\"/>\n        <source>Deactivate Plugin</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"213\"/>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"276\"/>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"296\"/>\n        <source>Blacklist Plugin</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"220\"/>\n        <source>Remove Plugin from Blacklist</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"283\"/>\n        <source>Placing this plugin on the blacklist will prevent it from being loaded next time you log in. If the plugin is not already deactivated, we&apos;ll also deactivate it for you.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.cpp\" line=\"43\"/>\n        <source>UUID: %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>PluginManagement</name>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmanagement.ui\" line=\"35\"/>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmanagement.cpp\" line=\"72\"/>\n        <source>Plugins</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmanagement.ui\" line=\"75\"/>\n        <source>Plugins add core and extra functionality to theDesk.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>PluginModel</name>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmodel.cpp\" line=\"52\"/>\n        <source>Loaded</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmodel.cpp\" line=\"54\"/>\n        <source>Blacklisted</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmodel.cpp\" line=\"56\"/>\n        <source>Unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmodel.cpp\" line=\"58\"/>\n        <source>Inactive</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>Recovery</name>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"35\"/>\n        <location filename=\"../systemsettings/recovery/recovery.cpp\" line=\"67\"/>\n        <source>Recovery</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"113\"/>\n        <source>RESET THEDESK</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"120\"/>\n        <source>If things aren&apos;t working correctly, resetting theDesk might help.\n\nHere&apos;s what will happen:\n- User settings will be cleared and reset to defaults\n- The next time you log into theDesk, you&apos;ll need to run through the setup again\n\nSave your documents and close all apps before starting the reset. This won&apos;t take long, but you&apos;ll need to log out to perform the reset. You won&apos;t be able to use your device while the reset is taking place.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"138\"/>\n        <source>Log Out and Reset theDesk</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"203\"/>\n        <source>RESET DEVICE</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"210\"/>\n        <source>If resetting theDesk didn&apos;t work, or if you just need a fresh start, you can reset this device.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"222\"/>\n        <source>Reset this device</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.cpp\" line=\"92\"/>\n        <source>%1, log out and reset theDesk settings? This action is irreversible.\n\nWe&apos;ll go ahead and reset your settings in %n seconds if you don&apos;t do anything.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>RunDialog</name>\n    <message>\n        <location filename=\"../run/rundialog.ui\" line=\"35\"/>\n        <source>Run</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../run/rundialog.ui\" line=\"60\"/>\n        <source>Enter a command to run.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../run/rundialog.ui\" line=\"73\"/>\n        <source>Run this command</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>StatusCenterLeftPane</name>\n    <message>\n        <location filename=\"../statuscenter/statuscenterleftpane.ui\" line=\"54\"/>\n        <source>Status Center</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SystemSettings</name>\n    <message>\n        <location filename=\"../systemsettings/systemsettings.cpp\" line=\"190\"/>\n        <source>System Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SystemSettingsLeftPane</name>\n    <message>\n        <location filename=\"../systemsettings/systemsettingsleftpane.ui\" line=\"35\"/>\n        <source>System Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/systemsettingsleftpane.ui\" line=\"103\"/>\n        <source>LOG OUT</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/systemsettingsleftpane.ui\" line=\"110\"/>\n        <source>You&apos;ve changed some settings that require you to log out for them to apply completely</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/systemsettingsleftpane.ui\" line=\"135\"/>\n        <source>Log Out</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>TaskbarApplicationWidget</name>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"153\"/>\n        <source>Move to desktop</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"150\"/>\n        <source>For %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"158\"/>\n        <source>All Desktops</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"176\"/>\n        <source>New Desktop</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"181\"/>\n        <source>Close</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"186\"/>\n        <source>For %n %1 windows</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n        </translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"188\"/>\n        <source>For %n windows</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n        </translation>\n    </message>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"190\"/>\n        <source>Close All</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>main</name>\n    <message>\n        <location filename=\"../main.cpp\" line=\"73\"/>\n        <source>Safe Mode</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../main.cpp\" line=\"73\"/>\n        <source>You&apos;re holding the CTRL key. Start theDesk in Safe Mode?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "desktop/translations/cy.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"cy\" sourcelanguage=\"en_US\">\n<context>\n    <name>About</name>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"165\"/>\n        <source>DISTRIBUTION</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"182\"/>\n        <source>You&apos;re using</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"262\"/>\n        <source>Device Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"362\"/>\n        <source>Processor</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"248\"/>\n        <source>THIS DEVICE</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"276\"/>\n        <source>Available Memory</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"236\"/>\n        <source>Available Swap</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"307\"/>\n        <source>Qt Version</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"255\"/>\n        <source>Kernel Version</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"297\"/>\n        <source>Change Device Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"269\"/>\n        <source>Window System</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"283\"/>\n        <source>Device Type</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"369\"/>\n        <source>Video</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"444\"/>\n        <source>Desktop Environment</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"473\"/>\n        <source>Website</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"484\"/>\n        <source>File Bug</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"495\"/>\n        <source>Sources</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"506\"/>\n        <source>View Debug Log</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"463\"/>\n        <source>Acknowledgements</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"68\"/>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"69\"/>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"105\"/>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"167\"/>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"172\"/>\n        <source>Unknown</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"117\"/>\n        <source>theDesk %1 - Blueprint</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"118\"/>\n        <source>You compiled theDesk on %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"120\"/>\n        <source>theDesk %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"124\"/>\n        <source>Copyright © Victor Tran %1. Licensed under the terms of the GNU General Public License, version 3 or later.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"35\"/>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"189\"/>\n        <source>About</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>Acknowledgements</name>\n    <message>\n        <location filename=\"../systemsettings/about/acknowledgements.ui\" line=\"35\"/>\n        <source>Acknowledgements</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>AppSearchProvider</name>\n    <message>\n        <location filename=\"../gateway/appsearchprovider.cpp\" line=\"151\"/>\n        <source>Application</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>AppSelectionModel</name>\n    <message>\n        <location filename=\"../gateway/appselectionmodel.cpp\" line=\"61\"/>\n        <source>Application</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>Background</name>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"176\"/>\n        <source>Sorry, there was a problem displaying the background.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"198\"/>\n        <source>Try Again</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"379\"/>\n        <source>Background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"427\"/>\n        <source>IMAGE</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"434\"/>\n        <source>Select an image to display on your background and lock screen</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"522\"/>\n        <source>COMMUNITY BACKGROUNDS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"529\"/>\n        <source>Images from the theDesk community will be cycled through every so often.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"536\"/>\n        <source>Show image information</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"584\"/>\n        <source>STRETCH</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"591\"/>\n        <source>Select how you&apos;d like the background image to be sized</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"603\"/>\n        <source>Stretch To Fit</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"629\"/>\n        <source>Zoom and Crop</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"655\"/>\n        <source>Center</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"681\"/>\n        <source>Tile</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"707\"/>\n        <source>Zoom To Fit</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"757\"/>\n        <source>Change Background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"765\"/>\n        <source>End Session</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"201\"/>\n        <source>by %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"299\"/>\n        <source>For desktop</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"331\"/>\n        <source>Select Background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"370\"/>\n        <source>Set Background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"371\"/>\n        <source>Set as Desktop Background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"374\"/>\n        <source>Set as Lock Screen Background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"378\"/>\n        <source>Set for both</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>ChangeHostnamePopover</name>\n    <message>\n        <location filename=\"../systemsettings/about/changehostnamepopover.ui\" line=\"35\"/>\n        <source>Change Device Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/changehostnamepopover.ui\" line=\"62\"/>\n        <source>New Device Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/changehostnamepopover.ui\" line=\"69\"/>\n        <source>This device name is used over the network to identify this device. It is also used to identify this device over Bluetooth.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/changehostnamepopover.ui\" line=\"79\"/>\n        <source>Network Compatible Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/changehostnamepopover.ui\" line=\"95\"/>\n        <source>Rename this Device</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>ChunkContainer</name>\n    <message>\n        <location filename=\"../bar/chunkcontainer.ui\" line=\"41\"/>\n        <source>Open Status Center</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>CommandLine</name>\n    <message>\n        <location filename=\"../cli/commandline.cpp\" line=\"37\"/>\n        <source>Start theDesk in Safe Mode</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../cli/commandline.cpp\" line=\"40\"/>\n        <source>Internal use; the path to a local socket to communicate with the session manager</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../cli/commandline.cpp\" line=\"40\"/>\n        <source>path</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>CurrentAppWidgetMenu</name>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.ui\" line=\"75\"/>\n        <source>Close Window</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.ui\" line=\"188\"/>\n        <source>QUIT IMMEDIATELY</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.ui\" line=\"204\"/>\n        <source>Cancel</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.cpp\" line=\"62\"/>\n        <source>Force Stop</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.cpp\" line=\"63\"/>\n        <location filename=\"../bar/currentappwidgetmenu.cpp\" line=\"65\"/>\n        <source>Force Stop %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.cpp\" line=\"64\"/>\n        <source>%1 will be forced to exit and won&apos;t have a chance to save any unsaved data.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>EndSession</name>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"57\"/>\n        <source>End Session</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"115\"/>\n        <source>Power Off</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"122\"/>\n        <source>Turns off your computer.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"134\"/>\n        <location filename=\"../session/endsession.ui\" line=\"369\"/>\n        <location filename=\"../session/endsession.cpp\" line=\"251\"/>\n        <source>Reboot</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"141\"/>\n        <source>Turns off your computer and turns it on again</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"148\"/>\n        <source>Reboot and install updates</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"155\"/>\n        <source>Turns off your computer, installs pending updates and turns it on again</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"162\"/>\n        <source>Log Out</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"169\"/>\n        <source>Ends your session but keeps your computer on for other people to use</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"176\"/>\n        <source>Suspend</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"183\"/>\n        <source>Puts your computer in a low power state so it reopens quickly</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"190\"/>\n        <source>Lock</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"197\"/>\n        <source>Locks your workspace with your password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"204\"/>\n        <source>Turn Off Screen</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"211\"/>\n        <source>Turns off the screen, but keeps everything else running in the background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"218\"/>\n        <source>Switch Users</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"225\"/>\n        <source>Switches to the logon screen, but keeps your session in the background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"232\"/>\n        <source>Hibernate</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"239\"/>\n        <source>Powers off your computer, but restores the session when powered back on</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"334\"/>\n        <source>Updates are available. What do you want to do?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"349\"/>\n        <source>Reboot and update</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"356\"/>\n        <source>We&apos;ll perform system updates once this device has rebooted.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"376\"/>\n        <source>We&apos;ll reboot your device normally.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"109\"/>\n        <source>power off the system</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"110\"/>\n        <source>reboot the system</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"111\"/>\n        <source>reboot the system and install any pending updates</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"112\"/>\n        <source>log you out</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"113\"/>\n        <source>suspend the system</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"114\"/>\n        <source>lock the screen</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"115\"/>\n        <source>turn off the screen</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"116\"/>\n        <source>switch users</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"117\"/>\n        <source>hibernate the system</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"250\"/>\n        <source>Advanced Reboot</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"260\"/>\n        <source>Reboot into System UEFI Setup</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"49\"/>\n        <source>Hey %1, ready to head out? We&apos;ll %2 in %n seconds if you don&apos;t do anything.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>MainGatewayWidget</name>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"57\"/>\n        <source>Gateway</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"150\"/>\n        <source>CATEGORIES</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"160\"/>\n        <source>All Apps</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"276\"/>\n        <source>Preparing the Gateway...</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"67\"/>\n        <source>Type to search...</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"192\"/>\n        <source>Status Center</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"391\"/>\n        <source>System Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"407\"/>\n        <source>End Session</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"88\"/>\n        <source>A/V</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"89\"/>\n        <source>Development</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"90\"/>\n        <source>Education</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"91\"/>\n        <source>Games</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"92\"/>\n        <source>Graphics</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"93\"/>\n        <source>Networking</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"94\"/>\n        <source>Office</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"95\"/>\n        <source>Science</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"96\"/>\n        <source>Utilities</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"170\"/>\n        <source>Actions for %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>ManagePluginPopover</name>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"135\"/>\n        <source>ERROR DETAILS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"190\"/>\n        <source>ACTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"199\"/>\n        <source>Activate Plugin</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"206\"/>\n        <source>Deactivate Plugin</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"213\"/>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"276\"/>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"296\"/>\n        <source>Blacklist Plugin</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"220\"/>\n        <source>Remove Plugin from Blacklist</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"283\"/>\n        <source>Placing this plugin on the blacklist will prevent it from being loaded next time you log in. If the plugin is not already deactivated, we&apos;ll also deactivate it for you.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.cpp\" line=\"43\"/>\n        <source>UUID: %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>PluginManagement</name>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmanagement.ui\" line=\"35\"/>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmanagement.cpp\" line=\"72\"/>\n        <source>Plugins</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmanagement.ui\" line=\"75\"/>\n        <source>Plugins add core and extra functionality to theDesk.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>PluginModel</name>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmodel.cpp\" line=\"52\"/>\n        <source>Loaded</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmodel.cpp\" line=\"54\"/>\n        <source>Blacklisted</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmodel.cpp\" line=\"56\"/>\n        <source>Unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmodel.cpp\" line=\"58\"/>\n        <source>Inactive</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>Recovery</name>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"35\"/>\n        <location filename=\"../systemsettings/recovery/recovery.cpp\" line=\"67\"/>\n        <source>Recovery</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"113\"/>\n        <source>RESET THEDESK</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"120\"/>\n        <source>If things aren&apos;t working correctly, resetting theDesk might help.\n\nHere&apos;s what will happen:\n- User settings will be cleared and reset to defaults\n- The next time you log into theDesk, you&apos;ll need to run through the setup again\n\nSave your documents and close all apps before starting the reset. This won&apos;t take long, but you&apos;ll need to log out to perform the reset. You won&apos;t be able to use your device while the reset is taking place.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"138\"/>\n        <source>Log Out and Reset theDesk</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"203\"/>\n        <source>RESET DEVICE</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"210\"/>\n        <source>If resetting theDesk didn&apos;t work, or if you just need a fresh start, you can reset this device.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"222\"/>\n        <source>Reset this device</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.cpp\" line=\"92\"/>\n        <source>%1, log out and reset theDesk settings? This action is irreversible.\n\nWe&apos;ll go ahead and reset your settings in %n seconds if you don&apos;t do anything.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>RunDialog</name>\n    <message>\n        <location filename=\"../run/rundialog.ui\" line=\"35\"/>\n        <source>Run</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../run/rundialog.ui\" line=\"60\"/>\n        <source>Enter a command to run.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../run/rundialog.ui\" line=\"73\"/>\n        <source>Run this command</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>StatusCenterLeftPane</name>\n    <message>\n        <location filename=\"../statuscenter/statuscenterleftpane.ui\" line=\"54\"/>\n        <source>Status Center</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SystemSettings</name>\n    <message>\n        <location filename=\"../systemsettings/systemsettings.cpp\" line=\"190\"/>\n        <source>System Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SystemSettingsLeftPane</name>\n    <message>\n        <location filename=\"../systemsettings/systemsettingsleftpane.ui\" line=\"35\"/>\n        <source>System Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/systemsettingsleftpane.ui\" line=\"103\"/>\n        <source>LOG OUT</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/systemsettingsleftpane.ui\" line=\"110\"/>\n        <source>You&apos;ve changed some settings that require you to log out for them to apply completely</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/systemsettingsleftpane.ui\" line=\"135\"/>\n        <source>Log Out</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>TaskbarApplicationWidget</name>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"153\"/>\n        <source>Move to desktop</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"150\"/>\n        <source>For %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"158\"/>\n        <source>All Desktops</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"176\"/>\n        <source>New Desktop</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"181\"/>\n        <source>Close</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"186\"/>\n        <source>For %n %1 windows</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n        </translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"188\"/>\n        <source>For %n windows</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n        </translation>\n    </message>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"190\"/>\n        <source>Close All</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>main</name>\n    <message>\n        <location filename=\"../main.cpp\" line=\"73\"/>\n        <source>Safe Mode</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../main.cpp\" line=\"73\"/>\n        <source>You&apos;re holding the CTRL key. Start theDesk in Safe Mode?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "desktop/translations/da.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"da\" sourcelanguage=\"en_US\">\n<context>\n    <name>About</name>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"165\"/>\n        <source>DISTRIBUTION</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"182\"/>\n        <source>You&apos;re using</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"262\"/>\n        <source>Device Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"362\"/>\n        <source>Processor</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"248\"/>\n        <source>THIS DEVICE</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"276\"/>\n        <source>Available Memory</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"236\"/>\n        <source>Available Swap</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"307\"/>\n        <source>Qt Version</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"255\"/>\n        <source>Kernel Version</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"297\"/>\n        <source>Change Device Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"269\"/>\n        <source>Window System</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"283\"/>\n        <source>Device Type</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"369\"/>\n        <source>Video</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"444\"/>\n        <source>Desktop Environment</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"473\"/>\n        <source>Website</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"484\"/>\n        <source>File Bug</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"495\"/>\n        <source>Sources</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"506\"/>\n        <source>View Debug Log</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"463\"/>\n        <source>Acknowledgements</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"68\"/>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"69\"/>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"105\"/>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"167\"/>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"172\"/>\n        <source>Unknown</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"117\"/>\n        <source>theDesk %1 - Blueprint</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"118\"/>\n        <source>You compiled theDesk on %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"120\"/>\n        <source>theDesk %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"124\"/>\n        <source>Copyright © Victor Tran %1. Licensed under the terms of the GNU General Public License, version 3 or later.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"35\"/>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"189\"/>\n        <source>About</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>Acknowledgements</name>\n    <message>\n        <location filename=\"../systemsettings/about/acknowledgements.ui\" line=\"35\"/>\n        <source>Acknowledgements</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>AppSearchProvider</name>\n    <message>\n        <location filename=\"../gateway/appsearchprovider.cpp\" line=\"151\"/>\n        <source>Application</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>AppSelectionModel</name>\n    <message>\n        <location filename=\"../gateway/appselectionmodel.cpp\" line=\"61\"/>\n        <source>Application</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>Background</name>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"176\"/>\n        <source>Sorry, there was a problem displaying the background.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"198\"/>\n        <source>Try Again</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"379\"/>\n        <source>Background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"427\"/>\n        <source>IMAGE</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"434\"/>\n        <source>Select an image to display on your background and lock screen</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"522\"/>\n        <source>COMMUNITY BACKGROUNDS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"529\"/>\n        <source>Images from the theDesk community will be cycled through every so often.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"536\"/>\n        <source>Show image information</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"584\"/>\n        <source>STRETCH</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"591\"/>\n        <source>Select how you&apos;d like the background image to be sized</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"603\"/>\n        <source>Stretch To Fit</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"629\"/>\n        <source>Zoom and Crop</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"655\"/>\n        <source>Center</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"681\"/>\n        <source>Tile</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"707\"/>\n        <source>Zoom To Fit</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"757\"/>\n        <source>Change Background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"765\"/>\n        <source>End Session</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"201\"/>\n        <source>by %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"299\"/>\n        <source>For desktop</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"331\"/>\n        <source>Select Background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"370\"/>\n        <source>Set Background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"371\"/>\n        <source>Set as Desktop Background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"374\"/>\n        <source>Set as Lock Screen Background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"378\"/>\n        <source>Set for both</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>ChangeHostnamePopover</name>\n    <message>\n        <location filename=\"../systemsettings/about/changehostnamepopover.ui\" line=\"35\"/>\n        <source>Change Device Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/changehostnamepopover.ui\" line=\"62\"/>\n        <source>New Device Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/changehostnamepopover.ui\" line=\"69\"/>\n        <source>This device name is used over the network to identify this device. It is also used to identify this device over Bluetooth.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/changehostnamepopover.ui\" line=\"79\"/>\n        <source>Network Compatible Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/changehostnamepopover.ui\" line=\"95\"/>\n        <source>Rename this Device</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>ChunkContainer</name>\n    <message>\n        <location filename=\"../bar/chunkcontainer.ui\" line=\"41\"/>\n        <source>Open Status Center</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>CommandLine</name>\n    <message>\n        <location filename=\"../cli/commandline.cpp\" line=\"37\"/>\n        <source>Start theDesk in Safe Mode</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../cli/commandline.cpp\" line=\"40\"/>\n        <source>Internal use; the path to a local socket to communicate with the session manager</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../cli/commandline.cpp\" line=\"40\"/>\n        <source>path</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>CurrentAppWidgetMenu</name>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.ui\" line=\"75\"/>\n        <source>Close Window</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.ui\" line=\"188\"/>\n        <source>QUIT IMMEDIATELY</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.ui\" line=\"204\"/>\n        <source>Cancel</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.cpp\" line=\"62\"/>\n        <source>Force Stop</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.cpp\" line=\"63\"/>\n        <location filename=\"../bar/currentappwidgetmenu.cpp\" line=\"65\"/>\n        <source>Force Stop %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.cpp\" line=\"64\"/>\n        <source>%1 will be forced to exit and won&apos;t have a chance to save any unsaved data.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>EndSession</name>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"57\"/>\n        <source>End Session</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"115\"/>\n        <source>Power Off</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"122\"/>\n        <source>Turns off your computer.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"134\"/>\n        <location filename=\"../session/endsession.ui\" line=\"369\"/>\n        <location filename=\"../session/endsession.cpp\" line=\"251\"/>\n        <source>Reboot</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"141\"/>\n        <source>Turns off your computer and turns it on again</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"148\"/>\n        <source>Reboot and install updates</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"155\"/>\n        <source>Turns off your computer, installs pending updates and turns it on again</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"162\"/>\n        <source>Log Out</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"169\"/>\n        <source>Ends your session but keeps your computer on for other people to use</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"176\"/>\n        <source>Suspend</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"183\"/>\n        <source>Puts your computer in a low power state so it reopens quickly</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"190\"/>\n        <source>Lock</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"197\"/>\n        <source>Locks your workspace with your password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"204\"/>\n        <source>Turn Off Screen</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"211\"/>\n        <source>Turns off the screen, but keeps everything else running in the background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"218\"/>\n        <source>Switch Users</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"225\"/>\n        <source>Switches to the logon screen, but keeps your session in the background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"232\"/>\n        <source>Hibernate</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"239\"/>\n        <source>Powers off your computer, but restores the session when powered back on</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"334\"/>\n        <source>Updates are available. What do you want to do?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"349\"/>\n        <source>Reboot and update</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"356\"/>\n        <source>We&apos;ll perform system updates once this device has rebooted.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"376\"/>\n        <source>We&apos;ll reboot your device normally.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"109\"/>\n        <source>power off the system</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"110\"/>\n        <source>reboot the system</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"111\"/>\n        <source>reboot the system and install any pending updates</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"112\"/>\n        <source>log you out</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"113\"/>\n        <source>suspend the system</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"114\"/>\n        <source>lock the screen</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"115\"/>\n        <source>turn off the screen</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"116\"/>\n        <source>switch users</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"117\"/>\n        <source>hibernate the system</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"250\"/>\n        <source>Advanced Reboot</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"260\"/>\n        <source>Reboot into System UEFI Setup</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"49\"/>\n        <source>Hey %1, ready to head out? We&apos;ll %2 in %n seconds if you don&apos;t do anything.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>MainGatewayWidget</name>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"57\"/>\n        <source>Gateway</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"150\"/>\n        <source>CATEGORIES</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"160\"/>\n        <source>All Apps</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"276\"/>\n        <source>Preparing the Gateway...</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"67\"/>\n        <source>Type to search...</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"192\"/>\n        <source>Status Center</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"391\"/>\n        <source>System Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"407\"/>\n        <source>End Session</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"88\"/>\n        <source>A/V</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"89\"/>\n        <source>Development</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"90\"/>\n        <source>Education</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"91\"/>\n        <source>Games</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"92\"/>\n        <source>Graphics</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"93\"/>\n        <source>Networking</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"94\"/>\n        <source>Office</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"95\"/>\n        <source>Science</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"96\"/>\n        <source>Utilities</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"170\"/>\n        <source>Actions for %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>ManagePluginPopover</name>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"135\"/>\n        <source>ERROR DETAILS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"190\"/>\n        <source>ACTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"199\"/>\n        <source>Activate Plugin</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"206\"/>\n        <source>Deactivate Plugin</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"213\"/>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"276\"/>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"296\"/>\n        <source>Blacklist Plugin</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"220\"/>\n        <source>Remove Plugin from Blacklist</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"283\"/>\n        <source>Placing this plugin on the blacklist will prevent it from being loaded next time you log in. If the plugin is not already deactivated, we&apos;ll also deactivate it for you.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.cpp\" line=\"43\"/>\n        <source>UUID: %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>PluginManagement</name>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmanagement.ui\" line=\"35\"/>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmanagement.cpp\" line=\"72\"/>\n        <source>Plugins</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmanagement.ui\" line=\"75\"/>\n        <source>Plugins add core and extra functionality to theDesk.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>PluginModel</name>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmodel.cpp\" line=\"52\"/>\n        <source>Loaded</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmodel.cpp\" line=\"54\"/>\n        <source>Blacklisted</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmodel.cpp\" line=\"56\"/>\n        <source>Unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmodel.cpp\" line=\"58\"/>\n        <source>Inactive</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>Recovery</name>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"35\"/>\n        <location filename=\"../systemsettings/recovery/recovery.cpp\" line=\"67\"/>\n        <source>Recovery</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"113\"/>\n        <source>RESET THEDESK</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"120\"/>\n        <source>If things aren&apos;t working correctly, resetting theDesk might help.\n\nHere&apos;s what will happen:\n- User settings will be cleared and reset to defaults\n- The next time you log into theDesk, you&apos;ll need to run through the setup again\n\nSave your documents and close all apps before starting the reset. This won&apos;t take long, but you&apos;ll need to log out to perform the reset. You won&apos;t be able to use your device while the reset is taking place.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"138\"/>\n        <source>Log Out and Reset theDesk</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"203\"/>\n        <source>RESET DEVICE</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"210\"/>\n        <source>If resetting theDesk didn&apos;t work, or if you just need a fresh start, you can reset this device.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"222\"/>\n        <source>Reset this device</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.cpp\" line=\"92\"/>\n        <source>%1, log out and reset theDesk settings? This action is irreversible.\n\nWe&apos;ll go ahead and reset your settings in %n seconds if you don&apos;t do anything.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>RunDialog</name>\n    <message>\n        <location filename=\"../run/rundialog.ui\" line=\"35\"/>\n        <source>Run</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../run/rundialog.ui\" line=\"60\"/>\n        <source>Enter a command to run.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../run/rundialog.ui\" line=\"73\"/>\n        <source>Run this command</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>StatusCenterLeftPane</name>\n    <message>\n        <location filename=\"../statuscenter/statuscenterleftpane.ui\" line=\"54\"/>\n        <source>Status Center</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SystemSettings</name>\n    <message>\n        <location filename=\"../systemsettings/systemsettings.cpp\" line=\"190\"/>\n        <source>System Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SystemSettingsLeftPane</name>\n    <message>\n        <location filename=\"../systemsettings/systemsettingsleftpane.ui\" line=\"35\"/>\n        <source>System Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/systemsettingsleftpane.ui\" line=\"103\"/>\n        <source>LOG OUT</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/systemsettingsleftpane.ui\" line=\"110\"/>\n        <source>You&apos;ve changed some settings that require you to log out for them to apply completely</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/systemsettingsleftpane.ui\" line=\"135\"/>\n        <source>Log Out</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>TaskbarApplicationWidget</name>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"153\"/>\n        <source>Move to desktop</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"150\"/>\n        <source>For %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"158\"/>\n        <source>All Desktops</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"176\"/>\n        <source>New Desktop</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"181\"/>\n        <source>Close</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"186\"/>\n        <source>For %n %1 windows</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n        </translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"188\"/>\n        <source>For %n windows</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n        </translation>\n    </message>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"190\"/>\n        <source>Close All</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>main</name>\n    <message>\n        <location filename=\"../main.cpp\" line=\"73\"/>\n        <source>Safe Mode</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../main.cpp\" line=\"73\"/>\n        <source>You&apos;re holding the CTRL key. Start theDesk in Safe Mode?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "desktop/translations/de.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"de\" sourcelanguage=\"en_US\">\n<context>\n    <name>About</name>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"165\"/>\n        <source>DISTRIBUTION</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"182\"/>\n        <source>You&apos;re using</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"262\"/>\n        <source>Device Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"362\"/>\n        <source>Processor</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"248\"/>\n        <source>THIS DEVICE</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"276\"/>\n        <source>Available Memory</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"236\"/>\n        <source>Available Swap</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"307\"/>\n        <source>Qt Version</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"255\"/>\n        <source>Kernel Version</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"297\"/>\n        <source>Change Device Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"269\"/>\n        <source>Window System</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"283\"/>\n        <source>Device Type</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"369\"/>\n        <source>Video</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"444\"/>\n        <source>Desktop Environment</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"473\"/>\n        <source>Website</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"484\"/>\n        <source>File Bug</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"495\"/>\n        <source>Sources</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"506\"/>\n        <source>View Debug Log</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"463\"/>\n        <source>Acknowledgements</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"68\"/>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"69\"/>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"105\"/>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"167\"/>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"172\"/>\n        <source>Unknown</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"117\"/>\n        <source>theDesk %1 - Blueprint</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"118\"/>\n        <source>You compiled theDesk on %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"120\"/>\n        <source>theDesk %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"124\"/>\n        <source>Copyright © Victor Tran %1. Licensed under the terms of the GNU General Public License, version 3 or later.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"35\"/>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"189\"/>\n        <source>About</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>Acknowledgements</name>\n    <message>\n        <location filename=\"../systemsettings/about/acknowledgements.ui\" line=\"35\"/>\n        <source>Acknowledgements</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>AppSearchProvider</name>\n    <message>\n        <location filename=\"../gateway/appsearchprovider.cpp\" line=\"151\"/>\n        <source>Application</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>AppSelectionModel</name>\n    <message>\n        <location filename=\"../gateway/appselectionmodel.cpp\" line=\"61\"/>\n        <source>Application</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>Background</name>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"176\"/>\n        <source>Sorry, there was a problem displaying the background.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"198\"/>\n        <source>Try Again</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"379\"/>\n        <source>Background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"427\"/>\n        <source>IMAGE</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"434\"/>\n        <source>Select an image to display on your background and lock screen</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"522\"/>\n        <source>COMMUNITY BACKGROUNDS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"529\"/>\n        <source>Images from the theDesk community will be cycled through every so often.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"536\"/>\n        <source>Show image information</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"584\"/>\n        <source>STRETCH</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"591\"/>\n        <source>Select how you&apos;d like the background image to be sized</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"603\"/>\n        <source>Stretch To Fit</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"629\"/>\n        <source>Zoom and Crop</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"655\"/>\n        <source>Center</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"681\"/>\n        <source>Tile</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"707\"/>\n        <source>Zoom To Fit</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"757\"/>\n        <source>Change Background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"765\"/>\n        <source>End Session</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"201\"/>\n        <source>by %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"299\"/>\n        <source>For desktop</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"331\"/>\n        <source>Select Background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"370\"/>\n        <source>Set Background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"371\"/>\n        <source>Set as Desktop Background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"374\"/>\n        <source>Set as Lock Screen Background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"378\"/>\n        <source>Set for both</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>ChangeHostnamePopover</name>\n    <message>\n        <location filename=\"../systemsettings/about/changehostnamepopover.ui\" line=\"35\"/>\n        <source>Change Device Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/changehostnamepopover.ui\" line=\"62\"/>\n        <source>New Device Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/changehostnamepopover.ui\" line=\"69\"/>\n        <source>This device name is used over the network to identify this device. It is also used to identify this device over Bluetooth.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/changehostnamepopover.ui\" line=\"79\"/>\n        <source>Network Compatible Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/changehostnamepopover.ui\" line=\"95\"/>\n        <source>Rename this Device</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>ChunkContainer</name>\n    <message>\n        <location filename=\"../bar/chunkcontainer.ui\" line=\"41\"/>\n        <source>Open Status Center</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>CommandLine</name>\n    <message>\n        <location filename=\"../cli/commandline.cpp\" line=\"37\"/>\n        <source>Start theDesk in Safe Mode</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../cli/commandline.cpp\" line=\"40\"/>\n        <source>Internal use; the path to a local socket to communicate with the session manager</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../cli/commandline.cpp\" line=\"40\"/>\n        <source>path</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>CurrentAppWidgetMenu</name>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.ui\" line=\"75\"/>\n        <source>Close Window</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.ui\" line=\"188\"/>\n        <source>QUIT IMMEDIATELY</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.ui\" line=\"204\"/>\n        <source>Cancel</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.cpp\" line=\"62\"/>\n        <source>Force Stop</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.cpp\" line=\"63\"/>\n        <location filename=\"../bar/currentappwidgetmenu.cpp\" line=\"65\"/>\n        <source>Force Stop %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.cpp\" line=\"64\"/>\n        <source>%1 will be forced to exit and won&apos;t have a chance to save any unsaved data.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>EndSession</name>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"57\"/>\n        <source>End Session</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"115\"/>\n        <source>Power Off</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"122\"/>\n        <source>Turns off your computer.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"134\"/>\n        <location filename=\"../session/endsession.ui\" line=\"369\"/>\n        <location filename=\"../session/endsession.cpp\" line=\"251\"/>\n        <source>Reboot</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"141\"/>\n        <source>Turns off your computer and turns it on again</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"148\"/>\n        <source>Reboot and install updates</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"155\"/>\n        <source>Turns off your computer, installs pending updates and turns it on again</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"162\"/>\n        <source>Log Out</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"169\"/>\n        <source>Ends your session but keeps your computer on for other people to use</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"176\"/>\n        <source>Suspend</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"183\"/>\n        <source>Puts your computer in a low power state so it reopens quickly</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"190\"/>\n        <source>Lock</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"197\"/>\n        <source>Locks your workspace with your password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"204\"/>\n        <source>Turn Off Screen</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"211\"/>\n        <source>Turns off the screen, but keeps everything else running in the background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"218\"/>\n        <source>Switch Users</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"225\"/>\n        <source>Switches to the logon screen, but keeps your session in the background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"232\"/>\n        <source>Hibernate</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"239\"/>\n        <source>Powers off your computer, but restores the session when powered back on</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"334\"/>\n        <source>Updates are available. What do you want to do?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"349\"/>\n        <source>Reboot and update</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"356\"/>\n        <source>We&apos;ll perform system updates once this device has rebooted.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"376\"/>\n        <source>We&apos;ll reboot your device normally.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"109\"/>\n        <source>power off the system</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"110\"/>\n        <source>reboot the system</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"111\"/>\n        <source>reboot the system and install any pending updates</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"112\"/>\n        <source>log you out</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"113\"/>\n        <source>suspend the system</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"114\"/>\n        <source>lock the screen</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"115\"/>\n        <source>turn off the screen</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"116\"/>\n        <source>switch users</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"117\"/>\n        <source>hibernate the system</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"250\"/>\n        <source>Advanced Reboot</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"260\"/>\n        <source>Reboot into System UEFI Setup</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"49\"/>\n        <source>Hey %1, ready to head out? We&apos;ll %2 in %n seconds if you don&apos;t do anything.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>MainGatewayWidget</name>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"57\"/>\n        <source>Gateway</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"150\"/>\n        <source>CATEGORIES</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"160\"/>\n        <source>All Apps</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"276\"/>\n        <source>Preparing the Gateway...</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"67\"/>\n        <source>Type to search...</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"192\"/>\n        <source>Status Center</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"391\"/>\n        <source>System Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"407\"/>\n        <source>End Session</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"88\"/>\n        <source>A/V</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"89\"/>\n        <source>Development</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"90\"/>\n        <source>Education</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"91\"/>\n        <source>Games</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"92\"/>\n        <source>Graphics</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"93\"/>\n        <source>Networking</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"94\"/>\n        <source>Office</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"95\"/>\n        <source>Science</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"96\"/>\n        <source>Utilities</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"170\"/>\n        <source>Actions for %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>ManagePluginPopover</name>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"135\"/>\n        <source>ERROR DETAILS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"190\"/>\n        <source>ACTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"199\"/>\n        <source>Activate Plugin</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"206\"/>\n        <source>Deactivate Plugin</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"213\"/>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"276\"/>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"296\"/>\n        <source>Blacklist Plugin</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"220\"/>\n        <source>Remove Plugin from Blacklist</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"283\"/>\n        <source>Placing this plugin on the blacklist will prevent it from being loaded next time you log in. If the plugin is not already deactivated, we&apos;ll also deactivate it for you.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.cpp\" line=\"43\"/>\n        <source>UUID: %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>PluginManagement</name>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmanagement.ui\" line=\"35\"/>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmanagement.cpp\" line=\"72\"/>\n        <source>Plugins</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmanagement.ui\" line=\"75\"/>\n        <source>Plugins add core and extra functionality to theDesk.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>PluginModel</name>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmodel.cpp\" line=\"52\"/>\n        <source>Loaded</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmodel.cpp\" line=\"54\"/>\n        <source>Blacklisted</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmodel.cpp\" line=\"56\"/>\n        <source>Unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmodel.cpp\" line=\"58\"/>\n        <source>Inactive</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>Recovery</name>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"35\"/>\n        <location filename=\"../systemsettings/recovery/recovery.cpp\" line=\"67\"/>\n        <source>Recovery</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"113\"/>\n        <source>RESET THEDESK</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"120\"/>\n        <source>If things aren&apos;t working correctly, resetting theDesk might help.\n\nHere&apos;s what will happen:\n- User settings will be cleared and reset to defaults\n- The next time you log into theDesk, you&apos;ll need to run through the setup again\n\nSave your documents and close all apps before starting the reset. This won&apos;t take long, but you&apos;ll need to log out to perform the reset. You won&apos;t be able to use your device while the reset is taking place.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"138\"/>\n        <source>Log Out and Reset theDesk</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"203\"/>\n        <source>RESET DEVICE</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"210\"/>\n        <source>If resetting theDesk didn&apos;t work, or if you just need a fresh start, you can reset this device.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"222\"/>\n        <source>Reset this device</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.cpp\" line=\"92\"/>\n        <source>%1, log out and reset theDesk settings? This action is irreversible.\n\nWe&apos;ll go ahead and reset your settings in %n seconds if you don&apos;t do anything.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>RunDialog</name>\n    <message>\n        <location filename=\"../run/rundialog.ui\" line=\"35\"/>\n        <source>Run</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../run/rundialog.ui\" line=\"60\"/>\n        <source>Enter a command to run.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../run/rundialog.ui\" line=\"73\"/>\n        <source>Run this command</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>StatusCenterLeftPane</name>\n    <message>\n        <location filename=\"../statuscenter/statuscenterleftpane.ui\" line=\"54\"/>\n        <source>Status Center</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SystemSettings</name>\n    <message>\n        <location filename=\"../systemsettings/systemsettings.cpp\" line=\"190\"/>\n        <source>System Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SystemSettingsLeftPane</name>\n    <message>\n        <location filename=\"../systemsettings/systemsettingsleftpane.ui\" line=\"35\"/>\n        <source>System Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/systemsettingsleftpane.ui\" line=\"103\"/>\n        <source>LOG OUT</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/systemsettingsleftpane.ui\" line=\"110\"/>\n        <source>You&apos;ve changed some settings that require you to log out for them to apply completely</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/systemsettingsleftpane.ui\" line=\"135\"/>\n        <source>Log Out</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>TaskbarApplicationWidget</name>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"153\"/>\n        <source>Move to desktop</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"150\"/>\n        <source>For %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"158\"/>\n        <source>All Desktops</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"176\"/>\n        <source>New Desktop</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"181\"/>\n        <source>Close</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"186\"/>\n        <source>For %n %1 windows</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n        </translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"188\"/>\n        <source>For %n windows</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n        </translation>\n    </message>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"190\"/>\n        <source>Close All</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>main</name>\n    <message>\n        <location filename=\"../main.cpp\" line=\"73\"/>\n        <source>Safe Mode</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../main.cpp\" line=\"73\"/>\n        <source>You&apos;re holding the CTRL key. Start theDesk in Safe Mode?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "desktop/translations/en_AU.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"en_AU\" sourcelanguage=\"en_US\">\n<context>\n    <name>About</name>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"165\"/>\n        <source>DISTRIBUTION</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"182\"/>\n        <source>You&apos;re using</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"262\"/>\n        <source>Device Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"362\"/>\n        <source>Processor</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"248\"/>\n        <source>THIS DEVICE</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"276\"/>\n        <source>Available Memory</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"236\"/>\n        <source>Available Swap</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"307\"/>\n        <source>Qt Version</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"255\"/>\n        <source>Kernel Version</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"297\"/>\n        <source>Change Device Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"269\"/>\n        <source>Window System</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"283\"/>\n        <source>Device Type</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"369\"/>\n        <source>Video</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"444\"/>\n        <source>Desktop Environment</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"473\"/>\n        <source>Website</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"484\"/>\n        <source>File Bug</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"495\"/>\n        <source>Sources</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"506\"/>\n        <source>View Debug Log</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"463\"/>\n        <source>Acknowledgements</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"68\"/>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"69\"/>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"105\"/>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"167\"/>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"172\"/>\n        <source>Unknown</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"117\"/>\n        <source>theDesk %1 - Blueprint</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"118\"/>\n        <source>You compiled theDesk on %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"120\"/>\n        <source>theDesk %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"124\"/>\n        <source>Copyright © Victor Tran %1. Licensed under the terms of the GNU General Public License, version 3 or later.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"35\"/>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"189\"/>\n        <source>About</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>Acknowledgements</name>\n    <message>\n        <location filename=\"../systemsettings/about/acknowledgements.ui\" line=\"35\"/>\n        <source>Acknowledgements</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>AppSearchProvider</name>\n    <message>\n        <location filename=\"../gateway/appsearchprovider.cpp\" line=\"151\"/>\n        <source>Application</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>AppSelectionModel</name>\n    <message>\n        <location filename=\"../gateway/appselectionmodel.cpp\" line=\"61\"/>\n        <source>Application</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>Background</name>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"176\"/>\n        <source>Sorry, there was a problem displaying the background.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"198\"/>\n        <source>Try Again</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"379\"/>\n        <source>Background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"427\"/>\n        <source>IMAGE</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"434\"/>\n        <source>Select an image to display on your background and lock screen</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"522\"/>\n        <source>COMMUNITY BACKGROUNDS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"529\"/>\n        <source>Images from the theDesk community will be cycled through every so often.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"536\"/>\n        <source>Show image information</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"584\"/>\n        <source>STRETCH</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"591\"/>\n        <source>Select how you&apos;d like the background image to be sized</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"603\"/>\n        <source>Stretch To Fit</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"629\"/>\n        <source>Zoom and Crop</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"655\"/>\n        <source>Center</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"681\"/>\n        <source>Tile</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"707\"/>\n        <source>Zoom To Fit</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"757\"/>\n        <source>Change Background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"765\"/>\n        <source>End Session</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"201\"/>\n        <source>by %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"299\"/>\n        <source>For desktop</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"331\"/>\n        <source>Select Background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"370\"/>\n        <source>Set Background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"371\"/>\n        <source>Set as Desktop Background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"374\"/>\n        <source>Set as Lock Screen Background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"378\"/>\n        <source>Set for both</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>ChangeHostnamePopover</name>\n    <message>\n        <location filename=\"../systemsettings/about/changehostnamepopover.ui\" line=\"35\"/>\n        <source>Change Device Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/changehostnamepopover.ui\" line=\"62\"/>\n        <source>New Device Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/changehostnamepopover.ui\" line=\"69\"/>\n        <source>This device name is used over the network to identify this device. It is also used to identify this device over Bluetooth.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/changehostnamepopover.ui\" line=\"79\"/>\n        <source>Network Compatible Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/changehostnamepopover.ui\" line=\"95\"/>\n        <source>Rename this Device</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>ChunkContainer</name>\n    <message>\n        <location filename=\"../bar/chunkcontainer.ui\" line=\"41\"/>\n        <source>Open Status Center</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>CommandLine</name>\n    <message>\n        <location filename=\"../cli/commandline.cpp\" line=\"37\"/>\n        <source>Start theDesk in Safe Mode</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../cli/commandline.cpp\" line=\"40\"/>\n        <source>Internal use; the path to a local socket to communicate with the session manager</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../cli/commandline.cpp\" line=\"40\"/>\n        <source>path</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>CurrentAppWidgetMenu</name>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.ui\" line=\"75\"/>\n        <source>Close Window</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.ui\" line=\"188\"/>\n        <source>QUIT IMMEDIATELY</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.ui\" line=\"204\"/>\n        <source>Cancel</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.cpp\" line=\"62\"/>\n        <source>Force Stop</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.cpp\" line=\"63\"/>\n        <location filename=\"../bar/currentappwidgetmenu.cpp\" line=\"65\"/>\n        <source>Force Stop %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.cpp\" line=\"64\"/>\n        <source>%1 will be forced to exit and won&apos;t have a chance to save any unsaved data.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>EndSession</name>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"57\"/>\n        <source>End Session</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"115\"/>\n        <source>Power Off</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"122\"/>\n        <source>Turns off your computer.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"134\"/>\n        <location filename=\"../session/endsession.ui\" line=\"369\"/>\n        <location filename=\"../session/endsession.cpp\" line=\"251\"/>\n        <source>Reboot</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"141\"/>\n        <source>Turns off your computer and turns it on again</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"148\"/>\n        <source>Reboot and install updates</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"155\"/>\n        <source>Turns off your computer, installs pending updates and turns it on again</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"162\"/>\n        <source>Log Out</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"169\"/>\n        <source>Ends your session but keeps your computer on for other people to use</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"176\"/>\n        <source>Suspend</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"183\"/>\n        <source>Puts your computer in a low power state so it reopens quickly</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"190\"/>\n        <source>Lock</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"197\"/>\n        <source>Locks your workspace with your password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"204\"/>\n        <source>Turn Off Screen</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"211\"/>\n        <source>Turns off the screen, but keeps everything else running in the background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"218\"/>\n        <source>Switch Users</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"225\"/>\n        <source>Switches to the logon screen, but keeps your session in the background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"232\"/>\n        <source>Hibernate</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"239\"/>\n        <source>Powers off your computer, but restores the session when powered back on</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"334\"/>\n        <source>Updates are available. What do you want to do?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"349\"/>\n        <source>Reboot and update</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"356\"/>\n        <source>We&apos;ll perform system updates once this device has rebooted.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"376\"/>\n        <source>We&apos;ll reboot your device normally.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"109\"/>\n        <source>power off the system</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"110\"/>\n        <source>reboot the system</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"111\"/>\n        <source>reboot the system and install any pending updates</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"112\"/>\n        <source>log you out</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"113\"/>\n        <source>suspend the system</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"114\"/>\n        <source>lock the screen</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"115\"/>\n        <source>turn off the screen</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"116\"/>\n        <source>switch users</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"117\"/>\n        <source>hibernate the system</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"250\"/>\n        <source>Advanced Reboot</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"260\"/>\n        <source>Reboot into System UEFI Setup</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"49\"/>\n        <source>Hey %1, ready to head out? We&apos;ll %2 in %n seconds if you don&apos;t do anything.</source>\n        <translation type=\"unfinished\">Hey %1, ready to head out? We&apos;ll %2 in %n second if you don&apos;t do anything.</translation>\n    </message>\n</context>\n<context>\n    <name>MainGatewayWidget</name>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"57\"/>\n        <source>Gateway</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"150\"/>\n        <source>CATEGORIES</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"160\"/>\n        <source>All Apps</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"276\"/>\n        <source>Preparing the Gateway...</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"67\"/>\n        <source>Type to search...</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"192\"/>\n        <source>Status Center</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"391\"/>\n        <source>System Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"407\"/>\n        <source>End Session</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"88\"/>\n        <source>A/V</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"89\"/>\n        <source>Development</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"90\"/>\n        <source>Education</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"91\"/>\n        <source>Games</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"92\"/>\n        <source>Graphics</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"93\"/>\n        <source>Networking</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"94\"/>\n        <source>Office</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"95\"/>\n        <source>Science</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"96\"/>\n        <source>Utilities</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"170\"/>\n        <source>Actions for %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>ManagePluginPopover</name>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"135\"/>\n        <source>ERROR DETAILS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"190\"/>\n        <source>ACTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"199\"/>\n        <source>Activate Plugin</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"206\"/>\n        <source>Deactivate Plugin</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"213\"/>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"276\"/>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"296\"/>\n        <source>Blacklist Plugin</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"220\"/>\n        <source>Remove Plugin from Blacklist</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"283\"/>\n        <source>Placing this plugin on the blacklist will prevent it from being loaded next time you log in. If the plugin is not already deactivated, we&apos;ll also deactivate it for you.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.cpp\" line=\"43\"/>\n        <source>UUID: %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>PluginManagement</name>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmanagement.ui\" line=\"35\"/>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmanagement.cpp\" line=\"72\"/>\n        <source>Plugins</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmanagement.ui\" line=\"75\"/>\n        <source>Plugins add core and extra functionality to theDesk.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>PluginModel</name>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmodel.cpp\" line=\"52\"/>\n        <source>Loaded</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmodel.cpp\" line=\"54\"/>\n        <source>Blacklisted</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmodel.cpp\" line=\"56\"/>\n        <source>Unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmodel.cpp\" line=\"58\"/>\n        <source>Inactive</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>Recovery</name>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"35\"/>\n        <location filename=\"../systemsettings/recovery/recovery.cpp\" line=\"67\"/>\n        <source>Recovery</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"113\"/>\n        <source>RESET THEDESK</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"120\"/>\n        <source>If things aren&apos;t working correctly, resetting theDesk might help.\n\nHere&apos;s what will happen:\n- User settings will be cleared and reset to defaults\n- The next time you log into theDesk, you&apos;ll need to run through the setup again\n\nSave your documents and close all apps before starting the reset. This won&apos;t take long, but you&apos;ll need to log out to perform the reset. You won&apos;t be able to use your device while the reset is taking place.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"138\"/>\n        <source>Log Out and Reset theDesk</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"203\"/>\n        <source>RESET DEVICE</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"210\"/>\n        <source>If resetting theDesk didn&apos;t work, or if you just need a fresh start, you can reset this device.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"222\"/>\n        <source>Reset this device</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.cpp\" line=\"92\"/>\n        <source>%1, log out and reset theDesk settings? This action is irreversible.\n\nWe&apos;ll go ahead and reset your settings in %n seconds if you don&apos;t do anything.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>RunDialog</name>\n    <message>\n        <location filename=\"../run/rundialog.ui\" line=\"35\"/>\n        <source>Run</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../run/rundialog.ui\" line=\"60\"/>\n        <source>Enter a command to run.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../run/rundialog.ui\" line=\"73\"/>\n        <source>Run this command</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>StatusCenterLeftPane</name>\n    <message>\n        <location filename=\"../statuscenter/statuscenterleftpane.ui\" line=\"54\"/>\n        <source>Status Center</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SystemSettings</name>\n    <message>\n        <location filename=\"../systemsettings/systemsettings.cpp\" line=\"190\"/>\n        <source>System Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SystemSettingsLeftPane</name>\n    <message>\n        <location filename=\"../systemsettings/systemsettingsleftpane.ui\" line=\"35\"/>\n        <source>System Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/systemsettingsleftpane.ui\" line=\"103\"/>\n        <source>LOG OUT</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/systemsettingsleftpane.ui\" line=\"110\"/>\n        <source>You&apos;ve changed some settings that require you to log out for them to apply completely</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/systemsettingsleftpane.ui\" line=\"135\"/>\n        <source>Log Out</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>TaskbarApplicationWidget</name>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"153\"/>\n        <source>Move to desktop</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"150\"/>\n        <source>For %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"158\"/>\n        <source>All Desktops</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"176\"/>\n        <source>New Desktop</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"181\"/>\n        <source>Close</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"186\"/>\n        <source>For %n %1 windows</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n        </translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"188\"/>\n        <source>For %n windows</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n        </translation>\n    </message>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"190\"/>\n        <source>Close All</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>main</name>\n    <message>\n        <location filename=\"../main.cpp\" line=\"73\"/>\n        <source>Safe Mode</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../main.cpp\" line=\"73\"/>\n        <source>You&apos;re holding the CTRL key. Start theDesk in Safe Mode?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "desktop/translations/en_CA.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"en_CA\" sourcelanguage=\"en_US\">\n<context>\n    <name>About</name>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"165\"/>\n        <source>DISTRIBUTION</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"182\"/>\n        <source>You&apos;re using</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"262\"/>\n        <source>Device Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"362\"/>\n        <source>Processor</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"248\"/>\n        <source>THIS DEVICE</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"276\"/>\n        <source>Available Memory</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"236\"/>\n        <source>Available Swap</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"307\"/>\n        <source>Qt Version</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"255\"/>\n        <source>Kernel Version</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"297\"/>\n        <source>Change Device Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"269\"/>\n        <source>Window System</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"283\"/>\n        <source>Device Type</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"369\"/>\n        <source>Video</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"444\"/>\n        <source>Desktop Environment</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"473\"/>\n        <source>Website</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"484\"/>\n        <source>File Bug</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"495\"/>\n        <source>Sources</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"506\"/>\n        <source>View Debug Log</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"463\"/>\n        <source>Acknowledgements</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"68\"/>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"69\"/>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"105\"/>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"167\"/>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"172\"/>\n        <source>Unknown</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"117\"/>\n        <source>theDesk %1 - Blueprint</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"118\"/>\n        <source>You compiled theDesk on %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"120\"/>\n        <source>theDesk %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"124\"/>\n        <source>Copyright © Victor Tran %1. Licensed under the terms of the GNU General Public License, version 3 or later.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"35\"/>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"189\"/>\n        <source>About</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>Acknowledgements</name>\n    <message>\n        <location filename=\"../systemsettings/about/acknowledgements.ui\" line=\"35\"/>\n        <source>Acknowledgements</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>AppSearchProvider</name>\n    <message>\n        <location filename=\"../gateway/appsearchprovider.cpp\" line=\"151\"/>\n        <source>Application</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>AppSelectionModel</name>\n    <message>\n        <location filename=\"../gateway/appselectionmodel.cpp\" line=\"61\"/>\n        <source>Application</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>Background</name>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"176\"/>\n        <source>Sorry, there was a problem displaying the background.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"198\"/>\n        <source>Try Again</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"379\"/>\n        <source>Background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"427\"/>\n        <source>IMAGE</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"434\"/>\n        <source>Select an image to display on your background and lock screen</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"522\"/>\n        <source>COMMUNITY BACKGROUNDS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"529\"/>\n        <source>Images from the theDesk community will be cycled through every so often.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"536\"/>\n        <source>Show image information</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"584\"/>\n        <source>STRETCH</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"591\"/>\n        <source>Select how you&apos;d like the background image to be sized</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"603\"/>\n        <source>Stretch To Fit</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"629\"/>\n        <source>Zoom and Crop</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"655\"/>\n        <source>Center</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"681\"/>\n        <source>Tile</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"707\"/>\n        <source>Zoom To Fit</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"757\"/>\n        <source>Change Background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"765\"/>\n        <source>End Session</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"201\"/>\n        <source>by %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"299\"/>\n        <source>For desktop</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"331\"/>\n        <source>Select Background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"370\"/>\n        <source>Set Background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"371\"/>\n        <source>Set as Desktop Background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"374\"/>\n        <source>Set as Lock Screen Background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"378\"/>\n        <source>Set for both</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>ChangeHostnamePopover</name>\n    <message>\n        <location filename=\"../systemsettings/about/changehostnamepopover.ui\" line=\"35\"/>\n        <source>Change Device Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/changehostnamepopover.ui\" line=\"62\"/>\n        <source>New Device Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/changehostnamepopover.ui\" line=\"69\"/>\n        <source>This device name is used over the network to identify this device. It is also used to identify this device over Bluetooth.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/changehostnamepopover.ui\" line=\"79\"/>\n        <source>Network Compatible Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/changehostnamepopover.ui\" line=\"95\"/>\n        <source>Rename this Device</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>ChunkContainer</name>\n    <message>\n        <location filename=\"../bar/chunkcontainer.ui\" line=\"41\"/>\n        <source>Open Status Center</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>CommandLine</name>\n    <message>\n        <location filename=\"../cli/commandline.cpp\" line=\"37\"/>\n        <source>Start theDesk in Safe Mode</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../cli/commandline.cpp\" line=\"40\"/>\n        <source>Internal use; the path to a local socket to communicate with the session manager</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../cli/commandline.cpp\" line=\"40\"/>\n        <source>path</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>CurrentAppWidgetMenu</name>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.ui\" line=\"75\"/>\n        <source>Close Window</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.ui\" line=\"188\"/>\n        <source>QUIT IMMEDIATELY</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.ui\" line=\"204\"/>\n        <source>Cancel</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.cpp\" line=\"62\"/>\n        <source>Force Stop</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.cpp\" line=\"63\"/>\n        <location filename=\"../bar/currentappwidgetmenu.cpp\" line=\"65\"/>\n        <source>Force Stop %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.cpp\" line=\"64\"/>\n        <source>%1 will be forced to exit and won&apos;t have a chance to save any unsaved data.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>EndSession</name>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"57\"/>\n        <source>End Session</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"115\"/>\n        <source>Power Off</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"122\"/>\n        <source>Turns off your computer.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"134\"/>\n        <location filename=\"../session/endsession.ui\" line=\"369\"/>\n        <location filename=\"../session/endsession.cpp\" line=\"251\"/>\n        <source>Reboot</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"141\"/>\n        <source>Turns off your computer and turns it on again</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"148\"/>\n        <source>Reboot and install updates</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"155\"/>\n        <source>Turns off your computer, installs pending updates and turns it on again</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"162\"/>\n        <source>Log Out</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"169\"/>\n        <source>Ends your session but keeps your computer on for other people to use</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"176\"/>\n        <source>Suspend</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"183\"/>\n        <source>Puts your computer in a low power state so it reopens quickly</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"190\"/>\n        <source>Lock</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"197\"/>\n        <source>Locks your workspace with your password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"204\"/>\n        <source>Turn Off Screen</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"211\"/>\n        <source>Turns off the screen, but keeps everything else running in the background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"218\"/>\n        <source>Switch Users</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"225\"/>\n        <source>Switches to the logon screen, but keeps your session in the background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"232\"/>\n        <source>Hibernate</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"239\"/>\n        <source>Powers off your computer, but restores the session when powered back on</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"334\"/>\n        <source>Updates are available. What do you want to do?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"349\"/>\n        <source>Reboot and update</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"356\"/>\n        <source>We&apos;ll perform system updates once this device has rebooted.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"376\"/>\n        <source>We&apos;ll reboot your device normally.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"109\"/>\n        <source>power off the system</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"110\"/>\n        <source>reboot the system</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"111\"/>\n        <source>reboot the system and install any pending updates</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"112\"/>\n        <source>log you out</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"113\"/>\n        <source>suspend the system</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"114\"/>\n        <source>lock the screen</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"115\"/>\n        <source>turn off the screen</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"116\"/>\n        <source>switch users</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"117\"/>\n        <source>hibernate the system</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"250\"/>\n        <source>Advanced Reboot</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"260\"/>\n        <source>Reboot into System UEFI Setup</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"49\"/>\n        <source>Hey %1, ready to head out? We&apos;ll %2 in %n seconds if you don&apos;t do anything.</source>\n        <translation type=\"unfinished\">Hey %1, ready to head out? We&apos;ll %2 in %n seconds if you don&apos;t do anything.</translation>\n    </message>\n</context>\n<context>\n    <name>MainGatewayWidget</name>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"57\"/>\n        <source>Gateway</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"150\"/>\n        <source>CATEGORIES</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"160\"/>\n        <source>All Apps</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"276\"/>\n        <source>Preparing the Gateway...</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"67\"/>\n        <source>Type to search...</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"192\"/>\n        <source>Status Center</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"391\"/>\n        <source>System Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"407\"/>\n        <source>End Session</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"88\"/>\n        <source>A/V</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"89\"/>\n        <source>Development</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"90\"/>\n        <source>Education</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"91\"/>\n        <source>Games</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"92\"/>\n        <source>Graphics</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"93\"/>\n        <source>Networking</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"94\"/>\n        <source>Office</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"95\"/>\n        <source>Science</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"96\"/>\n        <source>Utilities</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"170\"/>\n        <source>Actions for %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>ManagePluginPopover</name>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"135\"/>\n        <source>ERROR DETAILS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"190\"/>\n        <source>ACTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"199\"/>\n        <source>Activate Plugin</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"206\"/>\n        <source>Deactivate Plugin</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"213\"/>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"276\"/>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"296\"/>\n        <source>Blacklist Plugin</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"220\"/>\n        <source>Remove Plugin from Blacklist</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"283\"/>\n        <source>Placing this plugin on the blacklist will prevent it from being loaded next time you log in. If the plugin is not already deactivated, we&apos;ll also deactivate it for you.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.cpp\" line=\"43\"/>\n        <source>UUID: %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>PluginManagement</name>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmanagement.ui\" line=\"35\"/>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmanagement.cpp\" line=\"72\"/>\n        <source>Plugins</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmanagement.ui\" line=\"75\"/>\n        <source>Plugins add core and extra functionality to theDesk.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>PluginModel</name>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmodel.cpp\" line=\"52\"/>\n        <source>Loaded</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmodel.cpp\" line=\"54\"/>\n        <source>Blacklisted</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmodel.cpp\" line=\"56\"/>\n        <source>Unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmodel.cpp\" line=\"58\"/>\n        <source>Inactive</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>Recovery</name>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"35\"/>\n        <location filename=\"../systemsettings/recovery/recovery.cpp\" line=\"67\"/>\n        <source>Recovery</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"113\"/>\n        <source>RESET THEDESK</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"120\"/>\n        <source>If things aren&apos;t working correctly, resetting theDesk might help.\n\nHere&apos;s what will happen:\n- User settings will be cleared and reset to defaults\n- The next time you log into theDesk, you&apos;ll need to run through the setup again\n\nSave your documents and close all apps before starting the reset. This won&apos;t take long, but you&apos;ll need to log out to perform the reset. You won&apos;t be able to use your device while the reset is taking place.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"138\"/>\n        <source>Log Out and Reset theDesk</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"203\"/>\n        <source>RESET DEVICE</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"210\"/>\n        <source>If resetting theDesk didn&apos;t work, or if you just need a fresh start, you can reset this device.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"222\"/>\n        <source>Reset this device</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.cpp\" line=\"92\"/>\n        <source>%1, log out and reset theDesk settings? This action is irreversible.\n\nWe&apos;ll go ahead and reset your settings in %n seconds if you don&apos;t do anything.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>RunDialog</name>\n    <message>\n        <location filename=\"../run/rundialog.ui\" line=\"35\"/>\n        <source>Run</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../run/rundialog.ui\" line=\"60\"/>\n        <source>Enter a command to run.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../run/rundialog.ui\" line=\"73\"/>\n        <source>Run this command</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>StatusCenterLeftPane</name>\n    <message>\n        <location filename=\"../statuscenter/statuscenterleftpane.ui\" line=\"54\"/>\n        <source>Status Center</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SystemSettings</name>\n    <message>\n        <location filename=\"../systemsettings/systemsettings.cpp\" line=\"190\"/>\n        <source>System Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SystemSettingsLeftPane</name>\n    <message>\n        <location filename=\"../systemsettings/systemsettingsleftpane.ui\" line=\"35\"/>\n        <source>System Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/systemsettingsleftpane.ui\" line=\"103\"/>\n        <source>LOG OUT</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/systemsettingsleftpane.ui\" line=\"110\"/>\n        <source>You&apos;ve changed some settings that require you to log out for them to apply completely</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/systemsettingsleftpane.ui\" line=\"135\"/>\n        <source>Log Out</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>TaskbarApplicationWidget</name>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"153\"/>\n        <source>Move to desktop</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"150\"/>\n        <source>For %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"158\"/>\n        <source>All Desktops</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"176\"/>\n        <source>New Desktop</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"181\"/>\n        <source>Close</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"186\"/>\n        <source>For %n %1 windows</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n        </translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"188\"/>\n        <source>For %n windows</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n        </translation>\n    </message>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"190\"/>\n        <source>Close All</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>main</name>\n    <message>\n        <location filename=\"../main.cpp\" line=\"73\"/>\n        <source>Safe Mode</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../main.cpp\" line=\"73\"/>\n        <source>You&apos;re holding the CTRL key. Start theDesk in Safe Mode?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "desktop/translations/en_GB.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"en_GB\" sourcelanguage=\"en_US\">\n<context>\n    <name>About</name>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"165\"/>\n        <source>DISTRIBUTION</source>\n        <translation>DISTRIBUTION</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"182\"/>\n        <source>You&apos;re using</source>\n        <translation>You&apos;re using</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"262\"/>\n        <source>Device Name</source>\n        <translation>Device Name</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"362\"/>\n        <source>Processor</source>\n        <translation>Processor</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"248\"/>\n        <source>THIS DEVICE</source>\n        <translation>THIS DEVICE</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"276\"/>\n        <source>Available Memory</source>\n        <translation>Available Memory</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"236\"/>\n        <source>Available Swap</source>\n        <translation>Available Swap</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"307\"/>\n        <source>Qt Version</source>\n        <translation>Qt Version</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"255\"/>\n        <source>Kernel Version</source>\n        <translation>Kernel Version</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"297\"/>\n        <source>Change Device Name</source>\n        <translation>Change Device Name</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"269\"/>\n        <source>Window System</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"283\"/>\n        <source>Device Type</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"369\"/>\n        <source>Video</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"444\"/>\n        <source>Desktop Environment</source>\n        <translation>Desktop Environment</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"473\"/>\n        <source>Website</source>\n        <translation>Website</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"484\"/>\n        <source>File Bug</source>\n        <translation>File Bug</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"495\"/>\n        <source>Sources</source>\n        <translation>Sources</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"506\"/>\n        <source>View Debug Log</source>\n        <translation>View Debug Log</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"463\"/>\n        <source>Acknowledgements</source>\n        <translation>Acknowledgements</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"68\"/>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"69\"/>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"105\"/>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"167\"/>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"172\"/>\n        <source>Unknown</source>\n        <translation>Unknown</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"117\"/>\n        <source>theDesk %1 - Blueprint</source>\n        <translation>theDesk %1 - Blueprint</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"118\"/>\n        <source>You compiled theDesk on %1</source>\n        <translation>You compiled theDesk on %1</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"120\"/>\n        <source>theDesk %1</source>\n        <translation>theDesk %1</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"124\"/>\n        <source>Copyright © Victor Tran %1. Licensed under the terms of the GNU General Public License, version 3 or later.</source>\n        <translation>Copyright © Victor Tran %1. Licensed under the terms of the GNU General Public License, version 3 or later.</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"35\"/>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"189\"/>\n        <source>About</source>\n        <translation>About</translation>\n    </message>\n</context>\n<context>\n    <name>Acknowledgements</name>\n    <message>\n        <location filename=\"../systemsettings/about/acknowledgements.ui\" line=\"35\"/>\n        <source>Acknowledgements</source>\n        <translation>Acknowledgements</translation>\n    </message>\n</context>\n<context>\n    <name>AppSearchProvider</name>\n    <message>\n        <location filename=\"../gateway/appsearchprovider.cpp\" line=\"151\"/>\n        <source>Application</source>\n        <translation type=\"unfinished\">Application</translation>\n    </message>\n</context>\n<context>\n    <name>AppSelectionModel</name>\n    <message>\n        <location filename=\"../gateway/appselectionmodel.cpp\" line=\"61\"/>\n        <source>Application</source>\n        <translation>Application</translation>\n    </message>\n</context>\n<context>\n    <name>Background</name>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"176\"/>\n        <source>Sorry, there was a problem displaying the background.</source>\n        <translation>Sorry, there was a problem displaying the background.</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"198\"/>\n        <source>Try Again</source>\n        <translation>Try Again</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"379\"/>\n        <source>Background</source>\n        <translation>Background</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"427\"/>\n        <source>IMAGE</source>\n        <translation>IMAGE</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"434\"/>\n        <source>Select an image to display on your background and lock screen</source>\n        <translation>Select a photograph to display on your background and lock screen</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"522\"/>\n        <source>COMMUNITY BACKGROUNDS</source>\n        <translation>COMMUNITY BACKGROUNDS</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"529\"/>\n        <source>Images from the theDesk community will be cycled through every so often.</source>\n        <translation>Images from the theDesk community will be cycled through every so often.</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"536\"/>\n        <source>Show image information</source>\n        <translation>Show image information</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"584\"/>\n        <source>STRETCH</source>\n        <translation>STRETCH</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"591\"/>\n        <source>Select how you&apos;d like the background image to be sized</source>\n        <translation>Select how you&apos;d like your background image to be sized</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"603\"/>\n        <source>Stretch To Fit</source>\n        <translation>Stretch To Fit</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"629\"/>\n        <source>Zoom and Crop</source>\n        <translation>Zoom and Crop</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"655\"/>\n        <source>Center</source>\n        <translation>Center</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"681\"/>\n        <source>Tile</source>\n        <translation>Tile</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"707\"/>\n        <source>Zoom To Fit</source>\n        <translation>Zoom To Fit</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"757\"/>\n        <source>Change Background</source>\n        <translation>Change Background</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"765\"/>\n        <source>End Session</source>\n        <translation>End Session</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"201\"/>\n        <source>by %1</source>\n        <translation>by %1</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"299\"/>\n        <source>For desktop</source>\n        <translation>For desktop</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"331\"/>\n        <source>Select Background</source>\n        <translation>Select Background</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"370\"/>\n        <source>Set Background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"371\"/>\n        <source>Set as Desktop Background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"374\"/>\n        <source>Set as Lock Screen Background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"378\"/>\n        <source>Set for both</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>ChangeHostnamePopover</name>\n    <message>\n        <location filename=\"../systemsettings/about/changehostnamepopover.ui\" line=\"35\"/>\n        <source>Change Device Name</source>\n        <translation>Change Device Name</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/changehostnamepopover.ui\" line=\"62\"/>\n        <source>New Device Name</source>\n        <translation>New Device Name</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/changehostnamepopover.ui\" line=\"69\"/>\n        <source>This device name is used over the network to identify this device. It is also used to identify this device over Bluetooth.</source>\n        <translation>This device name is used over the network to identify this device. It is also used to identify this device over Bluetooth.</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/changehostnamepopover.ui\" line=\"79\"/>\n        <source>Network Compatible Name</source>\n        <translation>Network Compatible Name</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/changehostnamepopover.ui\" line=\"95\"/>\n        <source>Rename this Device</source>\n        <translation>Rename this Device</translation>\n    </message>\n</context>\n<context>\n    <name>ChunkContainer</name>\n    <message>\n        <location filename=\"../bar/chunkcontainer.ui\" line=\"41\"/>\n        <source>Open Status Center</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>CommandLine</name>\n    <message>\n        <location filename=\"../cli/commandline.cpp\" line=\"37\"/>\n        <source>Start theDesk in Safe Mode</source>\n        <translation>Start theDesk in Safe Mode</translation>\n    </message>\n    <message>\n        <location filename=\"../cli/commandline.cpp\" line=\"40\"/>\n        <source>Internal use; the path to a local socket to communicate with the session manager</source>\n        <translation>Internal use; the path to a local socket to communicate with the session manager</translation>\n    </message>\n    <message>\n        <location filename=\"../cli/commandline.cpp\" line=\"40\"/>\n        <source>path</source>\n        <translation>path</translation>\n    </message>\n</context>\n<context>\n    <name>CurrentAppWidgetMenu</name>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.ui\" line=\"75\"/>\n        <source>Close Window</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.ui\" line=\"188\"/>\n        <source>QUIT IMMEDIATELY</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.ui\" line=\"204\"/>\n        <source>Cancel</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.cpp\" line=\"62\"/>\n        <source>Force Stop</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.cpp\" line=\"63\"/>\n        <location filename=\"../bar/currentappwidgetmenu.cpp\" line=\"65\"/>\n        <source>Force Stop %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.cpp\" line=\"64\"/>\n        <source>%1 will be forced to exit and won&apos;t have a chance to save any unsaved data.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>EndSession</name>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"57\"/>\n        <source>End Session</source>\n        <translation>End Session</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"115\"/>\n        <source>Power Off</source>\n        <translation>Power Off</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"122\"/>\n        <source>Turns off your computer.</source>\n        <translation>Turns off your computer.</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"134\"/>\n        <location filename=\"../session/endsession.ui\" line=\"369\"/>\n        <location filename=\"../session/endsession.cpp\" line=\"251\"/>\n        <source>Reboot</source>\n        <translation>Reboot</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"141\"/>\n        <source>Turns off your computer and turns it on again</source>\n        <translation>Turns off your computer and turns it on again</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"148\"/>\n        <source>Reboot and install updates</source>\n        <translation>Reboot and install updates</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"155\"/>\n        <source>Turns off your computer, installs pending updates and turns it on again</source>\n        <translation>Turns off your computer, installs pending updates and turns it on again</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"162\"/>\n        <source>Log Out</source>\n        <translation>Log Out</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"169\"/>\n        <source>Ends your session but keeps your computer on for other people to use</source>\n        <translation>Ends your session but keeps your computer on for other people to use</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"176\"/>\n        <source>Suspend</source>\n        <translation>Suspend</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"183\"/>\n        <source>Puts your computer in a low power state so it reopens quickly</source>\n        <translation>Puts your computer in a low power state so it reopens quickly</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"190\"/>\n        <source>Lock</source>\n        <translation>Lock</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"197\"/>\n        <source>Locks your workspace with your password</source>\n        <translation>Locks your workspace with your password</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"204\"/>\n        <source>Turn Off Screen</source>\n        <translation>Turn Off Screen</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"211\"/>\n        <source>Turns off the screen, but keeps everything else running in the background</source>\n        <translation>Turns off the screen, but keeps everything else running in the background</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"218\"/>\n        <source>Switch Users</source>\n        <translation>Switch Users</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"225\"/>\n        <source>Switches to the logon screen, but keeps your session in the background</source>\n        <translation>Switches to the logon screen, but keeps your session in the background</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"232\"/>\n        <source>Hibernate</source>\n        <translation>Hibernate</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"239\"/>\n        <source>Powers off your computer, but restores the session when powered back on</source>\n        <translation>Powers off your computer, but restores the session when powered back on</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"334\"/>\n        <source>Updates are available. What do you want to do?</source>\n        <translation>Updates are available. What would you like to do?</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"349\"/>\n        <source>Reboot and update</source>\n        <translation>Reboot and update</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"356\"/>\n        <source>We&apos;ll perform system updates once this device has rebooted.</source>\n        <translation>We&apos;ll perform system updates once this device has rebooted.</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"376\"/>\n        <source>We&apos;ll reboot your device normally.</source>\n        <translation>We&apos;ll reboot your device normally.</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"109\"/>\n        <source>power off the system</source>\n        <translation>power off the system</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"110\"/>\n        <source>reboot the system</source>\n        <translation>reboot the system</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"111\"/>\n        <source>reboot the system and install any pending updates</source>\n        <translation>reboot the system and install any pending updates</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"112\"/>\n        <source>log you out</source>\n        <translation>log you out</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"113\"/>\n        <source>suspend the system</source>\n        <translation>suspend the system</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"114\"/>\n        <source>lock the screen</source>\n        <translation>lock the screen</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"115\"/>\n        <source>turn off the screen</source>\n        <translation>turn off the screen</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"116\"/>\n        <source>switch users</source>\n        <translation>switch users</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"117\"/>\n        <source>hibernate the system</source>\n        <translation>hibernate the system</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"250\"/>\n        <source>Advanced Reboot</source>\n        <translation>Advanced Reboot</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"260\"/>\n        <source>Reboot into System UEFI Setup</source>\n        <translation>Reboot into System UEFI Setup</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"49\"/>\n        <source>Hey %1, ready to head out? We&apos;ll %2 in %n seconds if you don&apos;t do anything.</source>\n        <translation>Hey %1, ready to head out? We&apos;ll %2 in %n seconds if you don&apos;t do anything.</translation>\n    </message>\n</context>\n<context>\n    <name>MainGatewayWidget</name>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"57\"/>\n        <source>Gateway</source>\n        <translation>Gateway</translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"150\"/>\n        <source>CATEGORIES</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"160\"/>\n        <source>All Apps</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"276\"/>\n        <source>Preparing the Gateway...</source>\n        <translation>Preparing the Gateway...</translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"67\"/>\n        <source>Type to search...</source>\n        <translation>Type to search...</translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"192\"/>\n        <source>Status Center</source>\n        <translation type=\"unfinished\">Status Center</translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"391\"/>\n        <source>System Settings</source>\n        <translation type=\"unfinished\">System Preferences</translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"407\"/>\n        <source>End Session</source>\n        <translation>End Session</translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"88\"/>\n        <source>A/V</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"89\"/>\n        <source>Development</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"90\"/>\n        <source>Education</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"91\"/>\n        <source>Games</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"92\"/>\n        <source>Graphics</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"93\"/>\n        <source>Networking</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"94\"/>\n        <source>Office</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"95\"/>\n        <source>Science</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"96\"/>\n        <source>Utilities</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"170\"/>\n        <source>Actions for %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>ManagePluginPopover</name>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"135\"/>\n        <source>ERROR DETAILS</source>\n        <translation>ERROR DETAILS</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"190\"/>\n        <source>ACTIONS</source>\n        <translation>ACTIONS</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"199\"/>\n        <source>Activate Plugin</source>\n        <translation>Activate Plugin</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"206\"/>\n        <source>Deactivate Plugin</source>\n        <translation>Deactivate Plugin</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"213\"/>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"276\"/>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"296\"/>\n        <source>Blacklist Plugin</source>\n        <translation>Blacklist Plugin</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"220\"/>\n        <source>Remove Plugin from Blacklist</source>\n        <translation>Remove Plugin from Blacklist</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"283\"/>\n        <source>Placing this plugin on the blacklist will prevent it from being loaded next time you log in. If the plugin is not already deactivated, we&apos;ll also deactivate it for you.</source>\n        <translation>Placing this plugin on the blacklist will prevent it from being loaded next time you log in. If the plugin is not already deactivated, we&apos;ll also deactivate it for you.</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.cpp\" line=\"43\"/>\n        <source>UUID: %1</source>\n        <translation>UUID: %1</translation>\n    </message>\n</context>\n<context>\n    <name>PluginManagement</name>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmanagement.ui\" line=\"35\"/>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmanagement.cpp\" line=\"72\"/>\n        <source>Plugins</source>\n        <translation>Plugins</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmanagement.ui\" line=\"75\"/>\n        <source>Plugins add core and extra functionality to theDesk.</source>\n        <translation>Plugins add core and extra functionality to theDesk.</translation>\n    </message>\n</context>\n<context>\n    <name>PluginModel</name>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmodel.cpp\" line=\"52\"/>\n        <source>Loaded</source>\n        <translation>Loaded</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmodel.cpp\" line=\"54\"/>\n        <source>Blacklisted</source>\n        <translation>Blacklisted</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmodel.cpp\" line=\"56\"/>\n        <source>Unavailable</source>\n        <translation>Unavailable</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmodel.cpp\" line=\"58\"/>\n        <source>Inactive</source>\n        <translation>Inactive</translation>\n    </message>\n</context>\n<context>\n    <name>Recovery</name>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"35\"/>\n        <location filename=\"../systemsettings/recovery/recovery.cpp\" line=\"67\"/>\n        <source>Recovery</source>\n        <translation>Recovery</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"113\"/>\n        <source>RESET THEDESK</source>\n        <translation>RESET THEDESK</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"120\"/>\n        <source>If things aren&apos;t working correctly, resetting theDesk might help.\n\nHere&apos;s what will happen:\n- User settings will be cleared and reset to defaults\n- The next time you log into theDesk, you&apos;ll need to run through the setup again\n\nSave your documents and close all apps before starting the reset. This won&apos;t take long, but you&apos;ll need to log out to perform the reset. You won&apos;t be able to use your device while the reset is taking place.</source>\n        <translation>If things aren&apos;t working correctly, resetting theDesk might help.\n\nHere&apos;s what will happen:\n- User preferences will be cleared and reset to defaults\n- The next time you log into theDesk, you&apos;ll need to run through the setup again\n\nSave your documents and close all apps before starting the reset. This won&apos;t take long, but you&apos;ll need to log out to perform the reset. You won&apos;t be able to use your device while the reset is taking place.</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"138\"/>\n        <source>Log Out and Reset theDesk</source>\n        <translation>Log Out and Reset theDesk</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"203\"/>\n        <source>RESET DEVICE</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"210\"/>\n        <source>If resetting theDesk didn&apos;t work, or if you just need a fresh start, you can reset this device.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"222\"/>\n        <source>Reset this device</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.cpp\" line=\"92\"/>\n        <source>%1, log out and reset theDesk settings? This action is irreversible.\n\nWe&apos;ll go ahead and reset your settings in %n seconds if you don&apos;t do anything.</source>\n        <translation>%1, log out and reset theDesk preferences? This action is irreversible.\n\nWe&apos;ll go ahead and reset your preferences in %n seconds if you don&apos;t do anything.</translation>\n    </message>\n</context>\n<context>\n    <name>RunDialog</name>\n    <message>\n        <location filename=\"../run/rundialog.ui\" line=\"35\"/>\n        <source>Run</source>\n        <translation>Run</translation>\n    </message>\n    <message>\n        <location filename=\"../run/rundialog.ui\" line=\"60\"/>\n        <source>Enter a command to run.</source>\n        <translation>Enter a command to run.</translation>\n    </message>\n    <message>\n        <location filename=\"../run/rundialog.ui\" line=\"73\"/>\n        <source>Run this command</source>\n        <translation>Run this command</translation>\n    </message>\n</context>\n<context>\n    <name>StatusCenterLeftPane</name>\n    <message>\n        <location filename=\"../statuscenter/statuscenterleftpane.ui\" line=\"54\"/>\n        <source>Status Center</source>\n        <translation>Status Center</translation>\n    </message>\n</context>\n<context>\n    <name>SystemSettings</name>\n    <message>\n        <location filename=\"../systemsettings/systemsettings.cpp\" line=\"190\"/>\n        <source>System Settings</source>\n        <translation>System Preferences</translation>\n    </message>\n</context>\n<context>\n    <name>SystemSettingsLeftPane</name>\n    <message>\n        <location filename=\"../systemsettings/systemsettingsleftpane.ui\" line=\"35\"/>\n        <source>System Settings</source>\n        <translation>System Preferences</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/systemsettingsleftpane.ui\" line=\"103\"/>\n        <source>LOG OUT</source>\n        <translation>LOG OUT</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/systemsettingsleftpane.ui\" line=\"110\"/>\n        <source>You&apos;ve changed some settings that require you to log out for them to apply completely</source>\n        <translation>You&apos;ve changed some preferences that require you to log out for them to apply completely</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/systemsettingsleftpane.ui\" line=\"135\"/>\n        <source>Log Out</source>\n        <translation>Log Out</translation>\n    </message>\n</context>\n<context>\n    <name>TaskbarApplicationWidget</name>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"153\"/>\n        <source>Move to desktop</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"150\"/>\n        <source>For %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"158\"/>\n        <source>All Desktops</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"176\"/>\n        <source>New Desktop</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"181\"/>\n        <source>Close</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"186\"/>\n        <source>For %n %1 windows</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n        </translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"188\"/>\n        <source>For %n windows</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n        </translation>\n    </message>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"190\"/>\n        <source>Close All</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>main</name>\n    <message>\n        <location filename=\"../main.cpp\" line=\"73\"/>\n        <source>Safe Mode</source>\n        <translation>Safe Mode</translation>\n    </message>\n    <message>\n        <location filename=\"../main.cpp\" line=\"73\"/>\n        <source>You&apos;re holding the CTRL key. Start theDesk in Safe Mode?</source>\n        <translation>You&apos;re holding the CTRL key. Start theDesk in Safe Mode?</translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "desktop/translations/en_NZ.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"en_NZ\" sourcelanguage=\"en_US\">\n<context>\n    <name>About</name>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"165\"/>\n        <source>DISTRIBUTION</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"182\"/>\n        <source>You&apos;re using</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"262\"/>\n        <source>Device Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"362\"/>\n        <source>Processor</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"248\"/>\n        <source>THIS DEVICE</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"276\"/>\n        <source>Available Memory</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"236\"/>\n        <source>Available Swap</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"307\"/>\n        <source>Qt Version</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"255\"/>\n        <source>Kernel Version</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"297\"/>\n        <source>Change Device Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"269\"/>\n        <source>Window System</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"283\"/>\n        <source>Device Type</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"369\"/>\n        <source>Video</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"444\"/>\n        <source>Desktop Environment</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"473\"/>\n        <source>Website</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"484\"/>\n        <source>File Bug</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"495\"/>\n        <source>Sources</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"506\"/>\n        <source>View Debug Log</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"463\"/>\n        <source>Acknowledgements</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"68\"/>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"69\"/>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"105\"/>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"167\"/>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"172\"/>\n        <source>Unknown</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"117\"/>\n        <source>theDesk %1 - Blueprint</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"118\"/>\n        <source>You compiled theDesk on %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"120\"/>\n        <source>theDesk %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"124\"/>\n        <source>Copyright © Victor Tran %1. Licensed under the terms of the GNU General Public License, version 3 or later.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"35\"/>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"189\"/>\n        <source>About</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>Acknowledgements</name>\n    <message>\n        <location filename=\"../systemsettings/about/acknowledgements.ui\" line=\"35\"/>\n        <source>Acknowledgements</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>AppSearchProvider</name>\n    <message>\n        <location filename=\"../gateway/appsearchprovider.cpp\" line=\"151\"/>\n        <source>Application</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>AppSelectionModel</name>\n    <message>\n        <location filename=\"../gateway/appselectionmodel.cpp\" line=\"61\"/>\n        <source>Application</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>Background</name>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"176\"/>\n        <source>Sorry, there was a problem displaying the background.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"198\"/>\n        <source>Try Again</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"379\"/>\n        <source>Background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"427\"/>\n        <source>IMAGE</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"434\"/>\n        <source>Select an image to display on your background and lock screen</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"522\"/>\n        <source>COMMUNITY BACKGROUNDS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"529\"/>\n        <source>Images from the theDesk community will be cycled through every so often.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"536\"/>\n        <source>Show image information</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"584\"/>\n        <source>STRETCH</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"591\"/>\n        <source>Select how you&apos;d like the background image to be sized</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"603\"/>\n        <source>Stretch To Fit</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"629\"/>\n        <source>Zoom and Crop</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"655\"/>\n        <source>Center</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"681\"/>\n        <source>Tile</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"707\"/>\n        <source>Zoom To Fit</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"757\"/>\n        <source>Change Background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"765\"/>\n        <source>End Session</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"201\"/>\n        <source>by %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"299\"/>\n        <source>For desktop</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"331\"/>\n        <source>Select Background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"370\"/>\n        <source>Set Background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"371\"/>\n        <source>Set as Desktop Background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"374\"/>\n        <source>Set as Lock Screen Background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"378\"/>\n        <source>Set for both</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>ChangeHostnamePopover</name>\n    <message>\n        <location filename=\"../systemsettings/about/changehostnamepopover.ui\" line=\"35\"/>\n        <source>Change Device Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/changehostnamepopover.ui\" line=\"62\"/>\n        <source>New Device Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/changehostnamepopover.ui\" line=\"69\"/>\n        <source>This device name is used over the network to identify this device. It is also used to identify this device over Bluetooth.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/changehostnamepopover.ui\" line=\"79\"/>\n        <source>Network Compatible Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/changehostnamepopover.ui\" line=\"95\"/>\n        <source>Rename this Device</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>ChunkContainer</name>\n    <message>\n        <location filename=\"../bar/chunkcontainer.ui\" line=\"41\"/>\n        <source>Open Status Center</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>CommandLine</name>\n    <message>\n        <location filename=\"../cli/commandline.cpp\" line=\"37\"/>\n        <source>Start theDesk in Safe Mode</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../cli/commandline.cpp\" line=\"40\"/>\n        <source>Internal use; the path to a local socket to communicate with the session manager</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../cli/commandline.cpp\" line=\"40\"/>\n        <source>path</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>CurrentAppWidgetMenu</name>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.ui\" line=\"75\"/>\n        <source>Close Window</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.ui\" line=\"188\"/>\n        <source>QUIT IMMEDIATELY</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.ui\" line=\"204\"/>\n        <source>Cancel</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.cpp\" line=\"62\"/>\n        <source>Force Stop</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.cpp\" line=\"63\"/>\n        <location filename=\"../bar/currentappwidgetmenu.cpp\" line=\"65\"/>\n        <source>Force Stop %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.cpp\" line=\"64\"/>\n        <source>%1 will be forced to exit and won&apos;t have a chance to save any unsaved data.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>EndSession</name>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"57\"/>\n        <source>End Session</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"115\"/>\n        <source>Power Off</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"122\"/>\n        <source>Turns off your computer.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"134\"/>\n        <location filename=\"../session/endsession.ui\" line=\"369\"/>\n        <location filename=\"../session/endsession.cpp\" line=\"251\"/>\n        <source>Reboot</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"141\"/>\n        <source>Turns off your computer and turns it on again</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"148\"/>\n        <source>Reboot and install updates</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"155\"/>\n        <source>Turns off your computer, installs pending updates and turns it on again</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"162\"/>\n        <source>Log Out</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"169\"/>\n        <source>Ends your session but keeps your computer on for other people to use</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"176\"/>\n        <source>Suspend</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"183\"/>\n        <source>Puts your computer in a low power state so it reopens quickly</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"190\"/>\n        <source>Lock</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"197\"/>\n        <source>Locks your workspace with your password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"204\"/>\n        <source>Turn Off Screen</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"211\"/>\n        <source>Turns off the screen, but keeps everything else running in the background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"218\"/>\n        <source>Switch Users</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"225\"/>\n        <source>Switches to the logon screen, but keeps your session in the background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"232\"/>\n        <source>Hibernate</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"239\"/>\n        <source>Powers off your computer, but restores the session when powered back on</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"334\"/>\n        <source>Updates are available. What do you want to do?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"349\"/>\n        <source>Reboot and update</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"356\"/>\n        <source>We&apos;ll perform system updates once this device has rebooted.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"376\"/>\n        <source>We&apos;ll reboot your device normally.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"109\"/>\n        <source>power off the system</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"110\"/>\n        <source>reboot the system</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"111\"/>\n        <source>reboot the system and install any pending updates</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"112\"/>\n        <source>log you out</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"113\"/>\n        <source>suspend the system</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"114\"/>\n        <source>lock the screen</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"115\"/>\n        <source>turn off the screen</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"116\"/>\n        <source>switch users</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"117\"/>\n        <source>hibernate the system</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"250\"/>\n        <source>Advanced Reboot</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"260\"/>\n        <source>Reboot into System UEFI Setup</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"49\"/>\n        <source>Hey %1, ready to head out? We&apos;ll %2 in %n seconds if you don&apos;t do anything.</source>\n        <translation type=\"unfinished\">Hey %1, ready to head out? We&apos;ll %2 in %n second if you don&apos;t do anything.</translation>\n    </message>\n</context>\n<context>\n    <name>MainGatewayWidget</name>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"57\"/>\n        <source>Gateway</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"150\"/>\n        <source>CATEGORIES</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"160\"/>\n        <source>All Apps</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"276\"/>\n        <source>Preparing the Gateway...</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"67\"/>\n        <source>Type to search...</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"192\"/>\n        <source>Status Center</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"391\"/>\n        <source>System Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"407\"/>\n        <source>End Session</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"88\"/>\n        <source>A/V</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"89\"/>\n        <source>Development</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"90\"/>\n        <source>Education</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"91\"/>\n        <source>Games</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"92\"/>\n        <source>Graphics</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"93\"/>\n        <source>Networking</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"94\"/>\n        <source>Office</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"95\"/>\n        <source>Science</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"96\"/>\n        <source>Utilities</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"170\"/>\n        <source>Actions for %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>ManagePluginPopover</name>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"135\"/>\n        <source>ERROR DETAILS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"190\"/>\n        <source>ACTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"199\"/>\n        <source>Activate Plugin</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"206\"/>\n        <source>Deactivate Plugin</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"213\"/>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"276\"/>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"296\"/>\n        <source>Blacklist Plugin</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"220\"/>\n        <source>Remove Plugin from Blacklist</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"283\"/>\n        <source>Placing this plugin on the blacklist will prevent it from being loaded next time you log in. If the plugin is not already deactivated, we&apos;ll also deactivate it for you.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.cpp\" line=\"43\"/>\n        <source>UUID: %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>PluginManagement</name>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmanagement.ui\" line=\"35\"/>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmanagement.cpp\" line=\"72\"/>\n        <source>Plugins</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmanagement.ui\" line=\"75\"/>\n        <source>Plugins add core and extra functionality to theDesk.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>PluginModel</name>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmodel.cpp\" line=\"52\"/>\n        <source>Loaded</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmodel.cpp\" line=\"54\"/>\n        <source>Blacklisted</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmodel.cpp\" line=\"56\"/>\n        <source>Unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmodel.cpp\" line=\"58\"/>\n        <source>Inactive</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>Recovery</name>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"35\"/>\n        <location filename=\"../systemsettings/recovery/recovery.cpp\" line=\"67\"/>\n        <source>Recovery</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"113\"/>\n        <source>RESET THEDESK</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"120\"/>\n        <source>If things aren&apos;t working correctly, resetting theDesk might help.\n\nHere&apos;s what will happen:\n- User settings will be cleared and reset to defaults\n- The next time you log into theDesk, you&apos;ll need to run through the setup again\n\nSave your documents and close all apps before starting the reset. This won&apos;t take long, but you&apos;ll need to log out to perform the reset. You won&apos;t be able to use your device while the reset is taking place.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"138\"/>\n        <source>Log Out and Reset theDesk</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"203\"/>\n        <source>RESET DEVICE</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"210\"/>\n        <source>If resetting theDesk didn&apos;t work, or if you just need a fresh start, you can reset this device.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"222\"/>\n        <source>Reset this device</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.cpp\" line=\"92\"/>\n        <source>%1, log out and reset theDesk settings? This action is irreversible.\n\nWe&apos;ll go ahead and reset your settings in %n seconds if you don&apos;t do anything.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>RunDialog</name>\n    <message>\n        <location filename=\"../run/rundialog.ui\" line=\"35\"/>\n        <source>Run</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../run/rundialog.ui\" line=\"60\"/>\n        <source>Enter a command to run.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../run/rundialog.ui\" line=\"73\"/>\n        <source>Run this command</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>StatusCenterLeftPane</name>\n    <message>\n        <location filename=\"../statuscenter/statuscenterleftpane.ui\" line=\"54\"/>\n        <source>Status Center</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SystemSettings</name>\n    <message>\n        <location filename=\"../systemsettings/systemsettings.cpp\" line=\"190\"/>\n        <source>System Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SystemSettingsLeftPane</name>\n    <message>\n        <location filename=\"../systemsettings/systemsettingsleftpane.ui\" line=\"35\"/>\n        <source>System Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/systemsettingsleftpane.ui\" line=\"103\"/>\n        <source>LOG OUT</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/systemsettingsleftpane.ui\" line=\"110\"/>\n        <source>You&apos;ve changed some settings that require you to log out for them to apply completely</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/systemsettingsleftpane.ui\" line=\"135\"/>\n        <source>Log Out</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>TaskbarApplicationWidget</name>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"153\"/>\n        <source>Move to desktop</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"150\"/>\n        <source>For %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"158\"/>\n        <source>All Desktops</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"176\"/>\n        <source>New Desktop</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"181\"/>\n        <source>Close</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"186\"/>\n        <source>For %n %1 windows</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n        </translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"188\"/>\n        <source>For %n windows</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n        </translation>\n    </message>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"190\"/>\n        <source>Close All</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>main</name>\n    <message>\n        <location filename=\"../main.cpp\" line=\"73\"/>\n        <source>Safe Mode</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../main.cpp\" line=\"73\"/>\n        <source>You&apos;re holding the CTRL key. Start theDesk in Safe Mode?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "desktop/translations/en_US.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"en_US\" sourcelanguage=\"en_US\">\n<context>\n    <name>About</name>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"165\"/>\n        <source>DISTRIBUTION</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"182\"/>\n        <source>You&apos;re using</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"262\"/>\n        <source>Device Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"362\"/>\n        <source>Processor</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"248\"/>\n        <source>THIS DEVICE</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"276\"/>\n        <source>Available Memory</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"236\"/>\n        <source>Available Swap</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"307\"/>\n        <source>Qt Version</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"255\"/>\n        <source>Kernel Version</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"297\"/>\n        <source>Change Device Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"269\"/>\n        <source>Window System</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"283\"/>\n        <source>Device Type</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"369\"/>\n        <source>Video</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"444\"/>\n        <source>Desktop Environment</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"473\"/>\n        <source>Website</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"484\"/>\n        <source>File Bug</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"495\"/>\n        <source>Sources</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"506\"/>\n        <source>View Debug Log</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"463\"/>\n        <source>Acknowledgements</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"68\"/>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"69\"/>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"105\"/>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"167\"/>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"172\"/>\n        <source>Unknown</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"117\"/>\n        <source>theDesk %1 - Blueprint</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"118\"/>\n        <source>You compiled theDesk on %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"120\"/>\n        <source>theDesk %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"124\"/>\n        <source>Copyright © Victor Tran %1. Licensed under the terms of the GNU General Public License, version 3 or later.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"35\"/>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"189\"/>\n        <source>About</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>Acknowledgements</name>\n    <message>\n        <location filename=\"../systemsettings/about/acknowledgements.ui\" line=\"35\"/>\n        <source>Acknowledgements</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>AppSearchProvider</name>\n    <message>\n        <location filename=\"../gateway/appsearchprovider.cpp\" line=\"151\"/>\n        <source>Application</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>AppSelectionModel</name>\n    <message>\n        <location filename=\"../gateway/appselectionmodel.cpp\" line=\"61\"/>\n        <source>Application</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>Background</name>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"176\"/>\n        <source>Sorry, there was a problem displaying the background.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"198\"/>\n        <source>Try Again</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"379\"/>\n        <source>Background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"427\"/>\n        <source>IMAGE</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"434\"/>\n        <source>Select an image to display on your background and lock screen</source>\n        <translation>Choose an image for your background and lock screen</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"522\"/>\n        <source>COMMUNITY BACKGROUNDS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"529\"/>\n        <source>Images from the theDesk community will be cycled through every so often.</source>\n        <translation>Images from the theDesk community are cycled through occasionally.</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"536\"/>\n        <source>Show image information</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"584\"/>\n        <source>STRETCH</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"591\"/>\n        <source>Select how you&apos;d like the background image to be sized</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"603\"/>\n        <source>Stretch To Fit</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"629\"/>\n        <source>Zoom and Crop</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"655\"/>\n        <source>Center</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"681\"/>\n        <source>Tile</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"707\"/>\n        <source>Zoom To Fit</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"757\"/>\n        <source>Change Background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"765\"/>\n        <source>End Session</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"201\"/>\n        <source>by %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"299\"/>\n        <source>For desktop</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"331\"/>\n        <source>Select Background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"370\"/>\n        <source>Set Background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"371\"/>\n        <source>Set as Desktop Background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"374\"/>\n        <source>Set as Lock Screen Background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"378\"/>\n        <source>Set for both</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>ChangeHostnamePopover</name>\n    <message>\n        <location filename=\"../systemsettings/about/changehostnamepopover.ui\" line=\"35\"/>\n        <source>Change Device Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/changehostnamepopover.ui\" line=\"62\"/>\n        <source>New Device Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/changehostnamepopover.ui\" line=\"69\"/>\n        <source>This device name is used over the network to identify this device. It is also used to identify this device over Bluetooth.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/changehostnamepopover.ui\" line=\"79\"/>\n        <source>Network Compatible Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/changehostnamepopover.ui\" line=\"95\"/>\n        <source>Rename this Device</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>ChunkContainer</name>\n    <message>\n        <location filename=\"../bar/chunkcontainer.ui\" line=\"41\"/>\n        <source>Open Status Center</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>CommandLine</name>\n    <message>\n        <location filename=\"../cli/commandline.cpp\" line=\"37\"/>\n        <source>Start theDesk in Safe Mode</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../cli/commandline.cpp\" line=\"40\"/>\n        <source>Internal use; the path to a local socket to communicate with the session manager</source>\n        <translation>Internally; the path to a local socket that communicates with the session manager</translation>\n    </message>\n    <message>\n        <location filename=\"../cli/commandline.cpp\" line=\"40\"/>\n        <source>path</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>CurrentAppWidgetMenu</name>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.ui\" line=\"75\"/>\n        <source>Close Window</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.ui\" line=\"188\"/>\n        <source>QUIT IMMEDIATELY</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.ui\" line=\"204\"/>\n        <source>Cancel</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.cpp\" line=\"62\"/>\n        <source>Force Stop</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.cpp\" line=\"63\"/>\n        <location filename=\"../bar/currentappwidgetmenu.cpp\" line=\"65\"/>\n        <source>Force Stop %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.cpp\" line=\"64\"/>\n        <source>%1 will be forced to exit and won&apos;t have a chance to save any unsaved data.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>EndSession</name>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"57\"/>\n        <source>End Session</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"115\"/>\n        <source>Power Off</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"122\"/>\n        <source>Turns off your computer.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"134\"/>\n        <location filename=\"../session/endsession.ui\" line=\"369\"/>\n        <location filename=\"../session/endsession.cpp\" line=\"251\"/>\n        <source>Reboot</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"141\"/>\n        <source>Turns off your computer and turns it on again</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"148\"/>\n        <source>Reboot and install updates</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"155\"/>\n        <source>Turns off your computer, installs pending updates and turns it on again</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"162\"/>\n        <source>Log Out</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"169\"/>\n        <source>Ends your session but keeps your computer on for other people to use</source>\n        <translation>Ends your session but keeps your computer on for others</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"176\"/>\n        <source>Suspend</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"183\"/>\n        <source>Puts your computer in a low power state so it reopens quickly</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"190\"/>\n        <source>Lock</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"197\"/>\n        <source>Locks your workspace with your password</source>\n        <translation>Locks your computer with your password</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"204\"/>\n        <source>Turn Off Screen</source>\n        <translation>Turn Off Display</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"211\"/>\n        <source>Turns off the screen, but keeps everything else running in the background</source>\n        <translation>Turns off the display, but keeps everything running</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"218\"/>\n        <source>Switch Users</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"225\"/>\n        <source>Switches to the logon screen, but keeps your session in the background</source>\n        <translation>Switches to the login screen, but keeps your session running</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"232\"/>\n        <source>Hibernate</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"239\"/>\n        <source>Powers off your computer, but restores the session when powered back on</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"334\"/>\n        <source>Updates are available. What do you want to do?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"349\"/>\n        <source>Reboot and update</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"356\"/>\n        <source>We&apos;ll perform system updates once this device has rebooted.</source>\n        <translation>We&apos;ll update your system after a reboot.</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"376\"/>\n        <source>We&apos;ll reboot your device normally.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"109\"/>\n        <source>power off the system</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"110\"/>\n        <source>reboot the system</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"111\"/>\n        <source>reboot the system and install any pending updates</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"112\"/>\n        <source>log you out</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"113\"/>\n        <source>suspend the system</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"114\"/>\n        <source>lock the screen</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"115\"/>\n        <source>turn off the screen</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"116\"/>\n        <source>switch users</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"117\"/>\n        <source>hibernate the system</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"250\"/>\n        <source>Advanced Reboot</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"260\"/>\n        <source>Reboot into System UEFI Setup</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"49\"/>\n        <source>Hey %1, ready to head out? We&apos;ll %2 in %n seconds if you don&apos;t do anything.</source>\n        <translation type=\"unfinished\">Hey %1, ready to head out? We&apos;ll %2 in %n second if you don&apos;t do anything.</translation>\n    </message>\n</context>\n<context>\n    <name>MainGatewayWidget</name>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"57\"/>\n        <source>Gateway</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"150\"/>\n        <source>CATEGORIES</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"160\"/>\n        <source>All Apps</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"276\"/>\n        <source>Preparing the Gateway...</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"67\"/>\n        <source>Type to search...</source>\n        <translation>Search here...</translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"192\"/>\n        <source>Status Center</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"391\"/>\n        <source>System Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"407\"/>\n        <source>End Session</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"88\"/>\n        <source>A/V</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"89\"/>\n        <source>Development</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"90\"/>\n        <source>Education</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"91\"/>\n        <source>Games</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"92\"/>\n        <source>Graphics</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"93\"/>\n        <source>Networking</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"94\"/>\n        <source>Office</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"95\"/>\n        <source>Science</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"96\"/>\n        <source>Utilities</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"170\"/>\n        <source>Actions for %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>ManagePluginPopover</name>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"135\"/>\n        <source>ERROR DETAILS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"190\"/>\n        <source>ACTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"199\"/>\n        <source>Activate Plugin</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"206\"/>\n        <source>Deactivate Plugin</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"213\"/>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"276\"/>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"296\"/>\n        <source>Blacklist Plugin</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"220\"/>\n        <source>Remove Plugin from Blacklist</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"283\"/>\n        <source>Placing this plugin on the blacklist will prevent it from being loaded next time you log in. If the plugin is not already deactivated, we&apos;ll also deactivate it for you.</source>\n        <translation>Putting this plugin on the blacklist won&apos;t let it load the next time you log in. If it isn&apos;t already deactivated, it&apos;ll also be deactivated.</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.cpp\" line=\"43\"/>\n        <source>UUID: %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>PluginManagement</name>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmanagement.ui\" line=\"35\"/>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmanagement.cpp\" line=\"72\"/>\n        <source>Plugins</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmanagement.ui\" line=\"75\"/>\n        <source>Plugins add core and extra functionality to theDesk.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>PluginModel</name>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmodel.cpp\" line=\"52\"/>\n        <source>Loaded</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmodel.cpp\" line=\"54\"/>\n        <source>Blacklisted</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmodel.cpp\" line=\"56\"/>\n        <source>Unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmodel.cpp\" line=\"58\"/>\n        <source>Inactive</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>Recovery</name>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"35\"/>\n        <location filename=\"../systemsettings/recovery/recovery.cpp\" line=\"67\"/>\n        <source>Recovery</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"113\"/>\n        <source>RESET THEDESK</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"120\"/>\n        <source>If things aren&apos;t working correctly, resetting theDesk might help.\n\nHere&apos;s what will happen:\n- User settings will be cleared and reset to defaults\n- The next time you log into theDesk, you&apos;ll need to run through the setup again\n\nSave your documents and close all apps before starting the reset. This won&apos;t take long, but you&apos;ll need to log out to perform the reset. You won&apos;t be able to use your device while the reset is taking place.</source>\n        <translation>If things aren&apos;t working correctly, resetting theDesk might help.\n\nHere&apos;s what will happen:\n- User settings will be reset\n- The next time you log into theDesk, you&apos;ll need to run through the setup again\n\nSave your documents and close all apps before starting the reset. This won&apos;t take long, but you&apos;ll need to log out to perform the reset. You won&apos;t be able to use your device while it&apos;s being reset.</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"138\"/>\n        <source>Log Out and Reset theDesk</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"203\"/>\n        <source>RESET DEVICE</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"210\"/>\n        <source>If resetting theDesk didn&apos;t work, or if you just need a fresh start, you can reset this device.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"222\"/>\n        <source>Reset this device</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.cpp\" line=\"92\"/>\n        <source>%1, log out and reset theDesk settings? This action is irreversible.\n\nWe&apos;ll go ahead and reset your settings in %n seconds if you don&apos;t do anything.</source>\n        <translation>%1, log out and reset theDesk settings? This action is irreversible.\n\nWe&apos;ll reset your settings in %n seconds if you don&apos;t do anything.</translation>\n    </message>\n</context>\n<context>\n    <name>RunDialog</name>\n    <message>\n        <location filename=\"../run/rundialog.ui\" line=\"35\"/>\n        <source>Run</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../run/rundialog.ui\" line=\"60\"/>\n        <source>Enter a command to run.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../run/rundialog.ui\" line=\"73\"/>\n        <source>Run this command</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>StatusCenterLeftPane</name>\n    <message>\n        <location filename=\"../statuscenter/statuscenterleftpane.ui\" line=\"54\"/>\n        <source>Status Center</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SystemSettings</name>\n    <message>\n        <location filename=\"../systemsettings/systemsettings.cpp\" line=\"190\"/>\n        <source>System Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SystemSettingsLeftPane</name>\n    <message>\n        <location filename=\"../systemsettings/systemsettingsleftpane.ui\" line=\"35\"/>\n        <source>System Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/systemsettingsleftpane.ui\" line=\"103\"/>\n        <source>LOG OUT</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/systemsettingsleftpane.ui\" line=\"110\"/>\n        <source>You&apos;ve changed some settings that require you to log out for them to apply completely</source>\n        <translation>Some settings changed that require a log out to apply</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/systemsettingsleftpane.ui\" line=\"135\"/>\n        <source>Log Out</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>TaskbarApplicationWidget</name>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"153\"/>\n        <source>Move to desktop</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"150\"/>\n        <source>For %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"158\"/>\n        <source>All Desktops</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"176\"/>\n        <source>New Desktop</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"181\"/>\n        <source>Close</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"186\"/>\n        <source>For %n %1 windows</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n        </translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"188\"/>\n        <source>For %n windows</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n        </translation>\n    </message>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"190\"/>\n        <source>Close All</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>main</name>\n    <message>\n        <location filename=\"../main.cpp\" line=\"73\"/>\n        <source>Safe Mode</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../main.cpp\" line=\"73\"/>\n        <source>You&apos;re holding the CTRL key. Start theDesk in Safe Mode?</source>\n        <translation>The CTRL key was held. Start theDesk in Safe Mode?</translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "desktop/translations/es.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"es\" sourcelanguage=\"en_US\">\n<context>\n    <name>About</name>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"165\"/>\n        <source>DISTRIBUTION</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"182\"/>\n        <source>You&apos;re using</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"262\"/>\n        <source>Device Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"362\"/>\n        <source>Processor</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"248\"/>\n        <source>THIS DEVICE</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"276\"/>\n        <source>Available Memory</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"236\"/>\n        <source>Available Swap</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"307\"/>\n        <source>Qt Version</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"255\"/>\n        <source>Kernel Version</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"297\"/>\n        <source>Change Device Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"269\"/>\n        <source>Window System</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"283\"/>\n        <source>Device Type</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"369\"/>\n        <source>Video</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"444\"/>\n        <source>Desktop Environment</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"473\"/>\n        <source>Website</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"484\"/>\n        <source>File Bug</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"495\"/>\n        <source>Sources</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"506\"/>\n        <source>View Debug Log</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"463\"/>\n        <source>Acknowledgements</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"68\"/>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"69\"/>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"105\"/>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"167\"/>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"172\"/>\n        <source>Unknown</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"117\"/>\n        <source>theDesk %1 - Blueprint</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"118\"/>\n        <source>You compiled theDesk on %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"120\"/>\n        <source>theDesk %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"124\"/>\n        <source>Copyright © Victor Tran %1. Licensed under the terms of the GNU General Public License, version 3 or later.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"35\"/>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"189\"/>\n        <source>About</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>Acknowledgements</name>\n    <message>\n        <location filename=\"../systemsettings/about/acknowledgements.ui\" line=\"35\"/>\n        <source>Acknowledgements</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>AppSearchProvider</name>\n    <message>\n        <location filename=\"../gateway/appsearchprovider.cpp\" line=\"151\"/>\n        <source>Application</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>AppSelectionModel</name>\n    <message>\n        <location filename=\"../gateway/appselectionmodel.cpp\" line=\"61\"/>\n        <source>Application</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>Background</name>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"176\"/>\n        <source>Sorry, there was a problem displaying the background.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"198\"/>\n        <source>Try Again</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"379\"/>\n        <source>Background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"427\"/>\n        <source>IMAGE</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"434\"/>\n        <source>Select an image to display on your background and lock screen</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"522\"/>\n        <source>COMMUNITY BACKGROUNDS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"529\"/>\n        <source>Images from the theDesk community will be cycled through every so often.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"536\"/>\n        <source>Show image information</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"584\"/>\n        <source>STRETCH</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"591\"/>\n        <source>Select how you&apos;d like the background image to be sized</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"603\"/>\n        <source>Stretch To Fit</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"629\"/>\n        <source>Zoom and Crop</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"655\"/>\n        <source>Center</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"681\"/>\n        <source>Tile</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"707\"/>\n        <source>Zoom To Fit</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"757\"/>\n        <source>Change Background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"765\"/>\n        <source>End Session</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"201\"/>\n        <source>by %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"299\"/>\n        <source>For desktop</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"331\"/>\n        <source>Select Background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"370\"/>\n        <source>Set Background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"371\"/>\n        <source>Set as Desktop Background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"374\"/>\n        <source>Set as Lock Screen Background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"378\"/>\n        <source>Set for both</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>ChangeHostnamePopover</name>\n    <message>\n        <location filename=\"../systemsettings/about/changehostnamepopover.ui\" line=\"35\"/>\n        <source>Change Device Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/changehostnamepopover.ui\" line=\"62\"/>\n        <source>New Device Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/changehostnamepopover.ui\" line=\"69\"/>\n        <source>This device name is used over the network to identify this device. It is also used to identify this device over Bluetooth.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/changehostnamepopover.ui\" line=\"79\"/>\n        <source>Network Compatible Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/changehostnamepopover.ui\" line=\"95\"/>\n        <source>Rename this Device</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>ChunkContainer</name>\n    <message>\n        <location filename=\"../bar/chunkcontainer.ui\" line=\"41\"/>\n        <source>Open Status Center</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>CommandLine</name>\n    <message>\n        <location filename=\"../cli/commandline.cpp\" line=\"37\"/>\n        <source>Start theDesk in Safe Mode</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../cli/commandline.cpp\" line=\"40\"/>\n        <source>Internal use; the path to a local socket to communicate with the session manager</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../cli/commandline.cpp\" line=\"40\"/>\n        <source>path</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>CurrentAppWidgetMenu</name>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.ui\" line=\"75\"/>\n        <source>Close Window</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.ui\" line=\"188\"/>\n        <source>QUIT IMMEDIATELY</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.ui\" line=\"204\"/>\n        <source>Cancel</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.cpp\" line=\"62\"/>\n        <source>Force Stop</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.cpp\" line=\"63\"/>\n        <location filename=\"../bar/currentappwidgetmenu.cpp\" line=\"65\"/>\n        <source>Force Stop %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.cpp\" line=\"64\"/>\n        <source>%1 will be forced to exit and won&apos;t have a chance to save any unsaved data.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>EndSession</name>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"57\"/>\n        <source>End Session</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"115\"/>\n        <source>Power Off</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"122\"/>\n        <source>Turns off your computer.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"134\"/>\n        <location filename=\"../session/endsession.ui\" line=\"369\"/>\n        <location filename=\"../session/endsession.cpp\" line=\"251\"/>\n        <source>Reboot</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"141\"/>\n        <source>Turns off your computer and turns it on again</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"148\"/>\n        <source>Reboot and install updates</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"155\"/>\n        <source>Turns off your computer, installs pending updates and turns it on again</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"162\"/>\n        <source>Log Out</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"169\"/>\n        <source>Ends your session but keeps your computer on for other people to use</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"176\"/>\n        <source>Suspend</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"183\"/>\n        <source>Puts your computer in a low power state so it reopens quickly</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"190\"/>\n        <source>Lock</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"197\"/>\n        <source>Locks your workspace with your password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"204\"/>\n        <source>Turn Off Screen</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"211\"/>\n        <source>Turns off the screen, but keeps everything else running in the background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"218\"/>\n        <source>Switch Users</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"225\"/>\n        <source>Switches to the logon screen, but keeps your session in the background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"232\"/>\n        <source>Hibernate</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"239\"/>\n        <source>Powers off your computer, but restores the session when powered back on</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"334\"/>\n        <source>Updates are available. What do you want to do?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"349\"/>\n        <source>Reboot and update</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"356\"/>\n        <source>We&apos;ll perform system updates once this device has rebooted.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"376\"/>\n        <source>We&apos;ll reboot your device normally.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"109\"/>\n        <source>power off the system</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"110\"/>\n        <source>reboot the system</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"111\"/>\n        <source>reboot the system and install any pending updates</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"112\"/>\n        <source>log you out</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"113\"/>\n        <source>suspend the system</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"114\"/>\n        <source>lock the screen</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"115\"/>\n        <source>turn off the screen</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"116\"/>\n        <source>switch users</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"117\"/>\n        <source>hibernate the system</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"250\"/>\n        <source>Advanced Reboot</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"260\"/>\n        <source>Reboot into System UEFI Setup</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"49\"/>\n        <source>Hey %1, ready to head out? We&apos;ll %2 in %n seconds if you don&apos;t do anything.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>MainGatewayWidget</name>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"57\"/>\n        <source>Gateway</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"150\"/>\n        <source>CATEGORIES</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"160\"/>\n        <source>All Apps</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"276\"/>\n        <source>Preparing the Gateway...</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"67\"/>\n        <source>Type to search...</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"192\"/>\n        <source>Status Center</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"391\"/>\n        <source>System Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"407\"/>\n        <source>End Session</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"88\"/>\n        <source>A/V</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"89\"/>\n        <source>Development</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"90\"/>\n        <source>Education</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"91\"/>\n        <source>Games</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"92\"/>\n        <source>Graphics</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"93\"/>\n        <source>Networking</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"94\"/>\n        <source>Office</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"95\"/>\n        <source>Science</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"96\"/>\n        <source>Utilities</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"170\"/>\n        <source>Actions for %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>ManagePluginPopover</name>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"135\"/>\n        <source>ERROR DETAILS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"190\"/>\n        <source>ACTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"199\"/>\n        <source>Activate Plugin</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"206\"/>\n        <source>Deactivate Plugin</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"213\"/>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"276\"/>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"296\"/>\n        <source>Blacklist Plugin</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"220\"/>\n        <source>Remove Plugin from Blacklist</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"283\"/>\n        <source>Placing this plugin on the blacklist will prevent it from being loaded next time you log in. If the plugin is not already deactivated, we&apos;ll also deactivate it for you.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.cpp\" line=\"43\"/>\n        <source>UUID: %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>PluginManagement</name>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmanagement.ui\" line=\"35\"/>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmanagement.cpp\" line=\"72\"/>\n        <source>Plugins</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmanagement.ui\" line=\"75\"/>\n        <source>Plugins add core and extra functionality to theDesk.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>PluginModel</name>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmodel.cpp\" line=\"52\"/>\n        <source>Loaded</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmodel.cpp\" line=\"54\"/>\n        <source>Blacklisted</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmodel.cpp\" line=\"56\"/>\n        <source>Unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmodel.cpp\" line=\"58\"/>\n        <source>Inactive</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>Recovery</name>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"35\"/>\n        <location filename=\"../systemsettings/recovery/recovery.cpp\" line=\"67\"/>\n        <source>Recovery</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"113\"/>\n        <source>RESET THEDESK</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"120\"/>\n        <source>If things aren&apos;t working correctly, resetting theDesk might help.\n\nHere&apos;s what will happen:\n- User settings will be cleared and reset to defaults\n- The next time you log into theDesk, you&apos;ll need to run through the setup again\n\nSave your documents and close all apps before starting the reset. This won&apos;t take long, but you&apos;ll need to log out to perform the reset. You won&apos;t be able to use your device while the reset is taking place.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"138\"/>\n        <source>Log Out and Reset theDesk</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"203\"/>\n        <source>RESET DEVICE</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"210\"/>\n        <source>If resetting theDesk didn&apos;t work, or if you just need a fresh start, you can reset this device.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"222\"/>\n        <source>Reset this device</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.cpp\" line=\"92\"/>\n        <source>%1, log out and reset theDesk settings? This action is irreversible.\n\nWe&apos;ll go ahead and reset your settings in %n seconds if you don&apos;t do anything.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>RunDialog</name>\n    <message>\n        <location filename=\"../run/rundialog.ui\" line=\"35\"/>\n        <source>Run</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../run/rundialog.ui\" line=\"60\"/>\n        <source>Enter a command to run.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../run/rundialog.ui\" line=\"73\"/>\n        <source>Run this command</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>StatusCenterLeftPane</name>\n    <message>\n        <location filename=\"../statuscenter/statuscenterleftpane.ui\" line=\"54\"/>\n        <source>Status Center</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SystemSettings</name>\n    <message>\n        <location filename=\"../systemsettings/systemsettings.cpp\" line=\"190\"/>\n        <source>System Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SystemSettingsLeftPane</name>\n    <message>\n        <location filename=\"../systemsettings/systemsettingsleftpane.ui\" line=\"35\"/>\n        <source>System Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/systemsettingsleftpane.ui\" line=\"103\"/>\n        <source>LOG OUT</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/systemsettingsleftpane.ui\" line=\"110\"/>\n        <source>You&apos;ve changed some settings that require you to log out for them to apply completely</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/systemsettingsleftpane.ui\" line=\"135\"/>\n        <source>Log Out</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>TaskbarApplicationWidget</name>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"153\"/>\n        <source>Move to desktop</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"150\"/>\n        <source>For %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"158\"/>\n        <source>All Desktops</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"176\"/>\n        <source>New Desktop</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"181\"/>\n        <source>Close</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"186\"/>\n        <source>For %n %1 windows</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n        </translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"188\"/>\n        <source>For %n windows</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n        </translation>\n    </message>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"190\"/>\n        <source>Close All</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>main</name>\n    <message>\n        <location filename=\"../main.cpp\" line=\"73\"/>\n        <source>Safe Mode</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../main.cpp\" line=\"73\"/>\n        <source>You&apos;re holding the CTRL key. Start theDesk in Safe Mode?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "desktop/translations/es_VE.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"es_VE\" sourcelanguage=\"en_US\">\n<context>\n    <name>About</name>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"165\"/>\n        <source>DISTRIBUTION</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"182\"/>\n        <source>You&apos;re using</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"262\"/>\n        <source>Device Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"362\"/>\n        <source>Processor</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"248\"/>\n        <source>THIS DEVICE</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"276\"/>\n        <source>Available Memory</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"236\"/>\n        <source>Available Swap</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"307\"/>\n        <source>Qt Version</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"255\"/>\n        <source>Kernel Version</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"297\"/>\n        <source>Change Device Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"269\"/>\n        <source>Window System</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"283\"/>\n        <source>Device Type</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"369\"/>\n        <source>Video</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"444\"/>\n        <source>Desktop Environment</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"473\"/>\n        <source>Website</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"484\"/>\n        <source>File Bug</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"495\"/>\n        <source>Sources</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"506\"/>\n        <source>View Debug Log</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"463\"/>\n        <source>Acknowledgements</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"68\"/>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"69\"/>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"105\"/>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"167\"/>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"172\"/>\n        <source>Unknown</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"117\"/>\n        <source>theDesk %1 - Blueprint</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"118\"/>\n        <source>You compiled theDesk on %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"120\"/>\n        <source>theDesk %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"124\"/>\n        <source>Copyright © Victor Tran %1. Licensed under the terms of the GNU General Public License, version 3 or later.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"35\"/>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"189\"/>\n        <source>About</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>Acknowledgements</name>\n    <message>\n        <location filename=\"../systemsettings/about/acknowledgements.ui\" line=\"35\"/>\n        <source>Acknowledgements</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>AppSearchProvider</name>\n    <message>\n        <location filename=\"../gateway/appsearchprovider.cpp\" line=\"151\"/>\n        <source>Application</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>AppSelectionModel</name>\n    <message>\n        <location filename=\"../gateway/appselectionmodel.cpp\" line=\"61\"/>\n        <source>Application</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>Background</name>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"176\"/>\n        <source>Sorry, there was a problem displaying the background.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"198\"/>\n        <source>Try Again</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"379\"/>\n        <source>Background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"427\"/>\n        <source>IMAGE</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"434\"/>\n        <source>Select an image to display on your background and lock screen</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"522\"/>\n        <source>COMMUNITY BACKGROUNDS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"529\"/>\n        <source>Images from the theDesk community will be cycled through every so often.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"536\"/>\n        <source>Show image information</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"584\"/>\n        <source>STRETCH</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"591\"/>\n        <source>Select how you&apos;d like the background image to be sized</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"603\"/>\n        <source>Stretch To Fit</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"629\"/>\n        <source>Zoom and Crop</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"655\"/>\n        <source>Center</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"681\"/>\n        <source>Tile</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"707\"/>\n        <source>Zoom To Fit</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"757\"/>\n        <source>Change Background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"765\"/>\n        <source>End Session</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"201\"/>\n        <source>by %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"299\"/>\n        <source>For desktop</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"331\"/>\n        <source>Select Background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"370\"/>\n        <source>Set Background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"371\"/>\n        <source>Set as Desktop Background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"374\"/>\n        <source>Set as Lock Screen Background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"378\"/>\n        <source>Set for both</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>ChangeHostnamePopover</name>\n    <message>\n        <location filename=\"../systemsettings/about/changehostnamepopover.ui\" line=\"35\"/>\n        <source>Change Device Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/changehostnamepopover.ui\" line=\"62\"/>\n        <source>New Device Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/changehostnamepopover.ui\" line=\"69\"/>\n        <source>This device name is used over the network to identify this device. It is also used to identify this device over Bluetooth.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/changehostnamepopover.ui\" line=\"79\"/>\n        <source>Network Compatible Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/changehostnamepopover.ui\" line=\"95\"/>\n        <source>Rename this Device</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>ChunkContainer</name>\n    <message>\n        <location filename=\"../bar/chunkcontainer.ui\" line=\"41\"/>\n        <source>Open Status Center</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>CommandLine</name>\n    <message>\n        <location filename=\"../cli/commandline.cpp\" line=\"37\"/>\n        <source>Start theDesk in Safe Mode</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../cli/commandline.cpp\" line=\"40\"/>\n        <source>Internal use; the path to a local socket to communicate with the session manager</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../cli/commandline.cpp\" line=\"40\"/>\n        <source>path</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>CurrentAppWidgetMenu</name>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.ui\" line=\"75\"/>\n        <source>Close Window</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.ui\" line=\"188\"/>\n        <source>QUIT IMMEDIATELY</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.ui\" line=\"204\"/>\n        <source>Cancel</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.cpp\" line=\"62\"/>\n        <source>Force Stop</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.cpp\" line=\"63\"/>\n        <location filename=\"../bar/currentappwidgetmenu.cpp\" line=\"65\"/>\n        <source>Force Stop %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.cpp\" line=\"64\"/>\n        <source>%1 will be forced to exit and won&apos;t have a chance to save any unsaved data.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>EndSession</name>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"57\"/>\n        <source>End Session</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"115\"/>\n        <source>Power Off</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"122\"/>\n        <source>Turns off your computer.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"134\"/>\n        <location filename=\"../session/endsession.ui\" line=\"369\"/>\n        <location filename=\"../session/endsession.cpp\" line=\"251\"/>\n        <source>Reboot</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"141\"/>\n        <source>Turns off your computer and turns it on again</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"148\"/>\n        <source>Reboot and install updates</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"155\"/>\n        <source>Turns off your computer, installs pending updates and turns it on again</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"162\"/>\n        <source>Log Out</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"169\"/>\n        <source>Ends your session but keeps your computer on for other people to use</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"176\"/>\n        <source>Suspend</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"183\"/>\n        <source>Puts your computer in a low power state so it reopens quickly</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"190\"/>\n        <source>Lock</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"197\"/>\n        <source>Locks your workspace with your password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"204\"/>\n        <source>Turn Off Screen</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"211\"/>\n        <source>Turns off the screen, but keeps everything else running in the background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"218\"/>\n        <source>Switch Users</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"225\"/>\n        <source>Switches to the logon screen, but keeps your session in the background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"232\"/>\n        <source>Hibernate</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"239\"/>\n        <source>Powers off your computer, but restores the session when powered back on</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"334\"/>\n        <source>Updates are available. What do you want to do?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"349\"/>\n        <source>Reboot and update</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"356\"/>\n        <source>We&apos;ll perform system updates once this device has rebooted.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"376\"/>\n        <source>We&apos;ll reboot your device normally.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"109\"/>\n        <source>power off the system</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"110\"/>\n        <source>reboot the system</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"111\"/>\n        <source>reboot the system and install any pending updates</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"112\"/>\n        <source>log you out</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"113\"/>\n        <source>suspend the system</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"114\"/>\n        <source>lock the screen</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"115\"/>\n        <source>turn off the screen</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"116\"/>\n        <source>switch users</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"117\"/>\n        <source>hibernate the system</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"250\"/>\n        <source>Advanced Reboot</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"260\"/>\n        <source>Reboot into System UEFI Setup</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"49\"/>\n        <source>Hey %1, ready to head out? We&apos;ll %2 in %n seconds if you don&apos;t do anything.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>MainGatewayWidget</name>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"57\"/>\n        <source>Gateway</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"150\"/>\n        <source>CATEGORIES</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"160\"/>\n        <source>All Apps</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"276\"/>\n        <source>Preparing the Gateway...</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"67\"/>\n        <source>Type to search...</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"192\"/>\n        <source>Status Center</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"391\"/>\n        <source>System Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"407\"/>\n        <source>End Session</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"88\"/>\n        <source>A/V</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"89\"/>\n        <source>Development</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"90\"/>\n        <source>Education</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"91\"/>\n        <source>Games</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"92\"/>\n        <source>Graphics</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"93\"/>\n        <source>Networking</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"94\"/>\n        <source>Office</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"95\"/>\n        <source>Science</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"96\"/>\n        <source>Utilities</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"170\"/>\n        <source>Actions for %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>ManagePluginPopover</name>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"135\"/>\n        <source>ERROR DETAILS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"190\"/>\n        <source>ACTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"199\"/>\n        <source>Activate Plugin</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"206\"/>\n        <source>Deactivate Plugin</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"213\"/>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"276\"/>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"296\"/>\n        <source>Blacklist Plugin</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"220\"/>\n        <source>Remove Plugin from Blacklist</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"283\"/>\n        <source>Placing this plugin on the blacklist will prevent it from being loaded next time you log in. If the plugin is not already deactivated, we&apos;ll also deactivate it for you.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.cpp\" line=\"43\"/>\n        <source>UUID: %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>PluginManagement</name>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmanagement.ui\" line=\"35\"/>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmanagement.cpp\" line=\"72\"/>\n        <source>Plugins</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmanagement.ui\" line=\"75\"/>\n        <source>Plugins add core and extra functionality to theDesk.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>PluginModel</name>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmodel.cpp\" line=\"52\"/>\n        <source>Loaded</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmodel.cpp\" line=\"54\"/>\n        <source>Blacklisted</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmodel.cpp\" line=\"56\"/>\n        <source>Unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmodel.cpp\" line=\"58\"/>\n        <source>Inactive</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>Recovery</name>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"35\"/>\n        <location filename=\"../systemsettings/recovery/recovery.cpp\" line=\"67\"/>\n        <source>Recovery</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"113\"/>\n        <source>RESET THEDESK</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"120\"/>\n        <source>If things aren&apos;t working correctly, resetting theDesk might help.\n\nHere&apos;s what will happen:\n- User settings will be cleared and reset to defaults\n- The next time you log into theDesk, you&apos;ll need to run through the setup again\n\nSave your documents and close all apps before starting the reset. This won&apos;t take long, but you&apos;ll need to log out to perform the reset. You won&apos;t be able to use your device while the reset is taking place.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"138\"/>\n        <source>Log Out and Reset theDesk</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"203\"/>\n        <source>RESET DEVICE</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"210\"/>\n        <source>If resetting theDesk didn&apos;t work, or if you just need a fresh start, you can reset this device.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"222\"/>\n        <source>Reset this device</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.cpp\" line=\"92\"/>\n        <source>%1, log out and reset theDesk settings? This action is irreversible.\n\nWe&apos;ll go ahead and reset your settings in %n seconds if you don&apos;t do anything.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>RunDialog</name>\n    <message>\n        <location filename=\"../run/rundialog.ui\" line=\"35\"/>\n        <source>Run</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../run/rundialog.ui\" line=\"60\"/>\n        <source>Enter a command to run.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../run/rundialog.ui\" line=\"73\"/>\n        <source>Run this command</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>StatusCenterLeftPane</name>\n    <message>\n        <location filename=\"../statuscenter/statuscenterleftpane.ui\" line=\"54\"/>\n        <source>Status Center</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SystemSettings</name>\n    <message>\n        <location filename=\"../systemsettings/systemsettings.cpp\" line=\"190\"/>\n        <source>System Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SystemSettingsLeftPane</name>\n    <message>\n        <location filename=\"../systemsettings/systemsettingsleftpane.ui\" line=\"35\"/>\n        <source>System Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/systemsettingsleftpane.ui\" line=\"103\"/>\n        <source>LOG OUT</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/systemsettingsleftpane.ui\" line=\"110\"/>\n        <source>You&apos;ve changed some settings that require you to log out for them to apply completely</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/systemsettingsleftpane.ui\" line=\"135\"/>\n        <source>Log Out</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>TaskbarApplicationWidget</name>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"153\"/>\n        <source>Move to desktop</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"150\"/>\n        <source>For %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"158\"/>\n        <source>All Desktops</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"176\"/>\n        <source>New Desktop</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"181\"/>\n        <source>Close</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"186\"/>\n        <source>For %n %1 windows</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n        </translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"188\"/>\n        <source>For %n windows</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n        </translation>\n    </message>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"190\"/>\n        <source>Close All</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>main</name>\n    <message>\n        <location filename=\"../main.cpp\" line=\"73\"/>\n        <source>Safe Mode</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../main.cpp\" line=\"73\"/>\n        <source>You&apos;re holding the CTRL key. Start theDesk in Safe Mode?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "desktop/translations/fr_FR.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"fr_FR\" sourcelanguage=\"en_US\">\n<context>\n    <name>About</name>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"165\"/>\n        <source>DISTRIBUTION</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"182\"/>\n        <source>You&apos;re using</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"262\"/>\n        <source>Device Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"362\"/>\n        <source>Processor</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"248\"/>\n        <source>THIS DEVICE</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"276\"/>\n        <source>Available Memory</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"236\"/>\n        <source>Available Swap</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"307\"/>\n        <source>Qt Version</source>\n        <translation>Version de Qt</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"255\"/>\n        <source>Kernel Version</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"297\"/>\n        <source>Change Device Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"269\"/>\n        <source>Window System</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"283\"/>\n        <source>Device Type</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"369\"/>\n        <source>Video</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"444\"/>\n        <source>Desktop Environment</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"473\"/>\n        <source>Website</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"484\"/>\n        <source>File Bug</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"495\"/>\n        <source>Sources</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"506\"/>\n        <source>View Debug Log</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"463\"/>\n        <source>Acknowledgements</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"68\"/>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"69\"/>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"105\"/>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"167\"/>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"172\"/>\n        <source>Unknown</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"117\"/>\n        <source>theDesk %1 - Blueprint</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"118\"/>\n        <source>You compiled theDesk on %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"120\"/>\n        <source>theDesk %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"124\"/>\n        <source>Copyright © Victor Tran %1. Licensed under the terms of the GNU General Public License, version 3 or later.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"35\"/>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"189\"/>\n        <source>About</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>Acknowledgements</name>\n    <message>\n        <location filename=\"../systemsettings/about/acknowledgements.ui\" line=\"35\"/>\n        <source>Acknowledgements</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>AppSearchProvider</name>\n    <message>\n        <location filename=\"../gateway/appsearchprovider.cpp\" line=\"151\"/>\n        <source>Application</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>AppSelectionModel</name>\n    <message>\n        <location filename=\"../gateway/appselectionmodel.cpp\" line=\"61\"/>\n        <source>Application</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>Background</name>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"176\"/>\n        <source>Sorry, there was a problem displaying the background.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"198\"/>\n        <source>Try Again</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"379\"/>\n        <source>Background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"427\"/>\n        <source>IMAGE</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"434\"/>\n        <source>Select an image to display on your background and lock screen</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"522\"/>\n        <source>COMMUNITY BACKGROUNDS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"529\"/>\n        <source>Images from the theDesk community will be cycled through every so often.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"536\"/>\n        <source>Show image information</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"584\"/>\n        <source>STRETCH</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"591\"/>\n        <source>Select how you&apos;d like the background image to be sized</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"603\"/>\n        <source>Stretch To Fit</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"629\"/>\n        <source>Zoom and Crop</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"655\"/>\n        <source>Center</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"681\"/>\n        <source>Tile</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"707\"/>\n        <source>Zoom To Fit</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"757\"/>\n        <source>Change Background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"765\"/>\n        <source>End Session</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"201\"/>\n        <source>by %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"299\"/>\n        <source>For desktop</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"331\"/>\n        <source>Select Background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"370\"/>\n        <source>Set Background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"371\"/>\n        <source>Set as Desktop Background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"374\"/>\n        <source>Set as Lock Screen Background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"378\"/>\n        <source>Set for both</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>ChangeHostnamePopover</name>\n    <message>\n        <location filename=\"../systemsettings/about/changehostnamepopover.ui\" line=\"35\"/>\n        <source>Change Device Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/changehostnamepopover.ui\" line=\"62\"/>\n        <source>New Device Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/changehostnamepopover.ui\" line=\"69\"/>\n        <source>This device name is used over the network to identify this device. It is also used to identify this device over Bluetooth.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/changehostnamepopover.ui\" line=\"79\"/>\n        <source>Network Compatible Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/changehostnamepopover.ui\" line=\"95\"/>\n        <source>Rename this Device</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>ChunkContainer</name>\n    <message>\n        <location filename=\"../bar/chunkcontainer.ui\" line=\"41\"/>\n        <source>Open Status Center</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>CommandLine</name>\n    <message>\n        <location filename=\"../cli/commandline.cpp\" line=\"37\"/>\n        <source>Start theDesk in Safe Mode</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../cli/commandline.cpp\" line=\"40\"/>\n        <source>Internal use; the path to a local socket to communicate with the session manager</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../cli/commandline.cpp\" line=\"40\"/>\n        <source>path</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>CurrentAppWidgetMenu</name>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.ui\" line=\"75\"/>\n        <source>Close Window</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.ui\" line=\"188\"/>\n        <source>QUIT IMMEDIATELY</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.ui\" line=\"204\"/>\n        <source>Cancel</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.cpp\" line=\"62\"/>\n        <source>Force Stop</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.cpp\" line=\"63\"/>\n        <location filename=\"../bar/currentappwidgetmenu.cpp\" line=\"65\"/>\n        <source>Force Stop %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.cpp\" line=\"64\"/>\n        <source>%1 will be forced to exit and won&apos;t have a chance to save any unsaved data.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>EndSession</name>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"57\"/>\n        <source>End Session</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"115\"/>\n        <source>Power Off</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"122\"/>\n        <source>Turns off your computer.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"134\"/>\n        <location filename=\"../session/endsession.ui\" line=\"369\"/>\n        <location filename=\"../session/endsession.cpp\" line=\"251\"/>\n        <source>Reboot</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"141\"/>\n        <source>Turns off your computer and turns it on again</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"148\"/>\n        <source>Reboot and install updates</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"155\"/>\n        <source>Turns off your computer, installs pending updates and turns it on again</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"162\"/>\n        <source>Log Out</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"169\"/>\n        <source>Ends your session but keeps your computer on for other people to use</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"176\"/>\n        <source>Suspend</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"183\"/>\n        <source>Puts your computer in a low power state so it reopens quickly</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"190\"/>\n        <source>Lock</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"197\"/>\n        <source>Locks your workspace with your password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"204\"/>\n        <source>Turn Off Screen</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"211\"/>\n        <source>Turns off the screen, but keeps everything else running in the background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"218\"/>\n        <source>Switch Users</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"225\"/>\n        <source>Switches to the logon screen, but keeps your session in the background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"232\"/>\n        <source>Hibernate</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"239\"/>\n        <source>Powers off your computer, but restores the session when powered back on</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"334\"/>\n        <source>Updates are available. What do you want to do?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"349\"/>\n        <source>Reboot and update</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"356\"/>\n        <source>We&apos;ll perform system updates once this device has rebooted.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"376\"/>\n        <source>We&apos;ll reboot your device normally.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"109\"/>\n        <source>power off the system</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"110\"/>\n        <source>reboot the system</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"111\"/>\n        <source>reboot the system and install any pending updates</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"112\"/>\n        <source>log you out</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"113\"/>\n        <source>suspend the system</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"114\"/>\n        <source>lock the screen</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"115\"/>\n        <source>turn off the screen</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"116\"/>\n        <source>switch users</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"117\"/>\n        <source>hibernate the system</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"250\"/>\n        <source>Advanced Reboot</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"260\"/>\n        <source>Reboot into System UEFI Setup</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"49\"/>\n        <source>Hey %1, ready to head out? We&apos;ll %2 in %n seconds if you don&apos;t do anything.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>MainGatewayWidget</name>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"57\"/>\n        <source>Gateway</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"150\"/>\n        <source>CATEGORIES</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"160\"/>\n        <source>All Apps</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"276\"/>\n        <source>Preparing the Gateway...</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"67\"/>\n        <source>Type to search...</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"192\"/>\n        <source>Status Center</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"391\"/>\n        <source>System Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"407\"/>\n        <source>End Session</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"88\"/>\n        <source>A/V</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"89\"/>\n        <source>Development</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"90\"/>\n        <source>Education</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"91\"/>\n        <source>Games</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"92\"/>\n        <source>Graphics</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"93\"/>\n        <source>Networking</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"94\"/>\n        <source>Office</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"95\"/>\n        <source>Science</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"96\"/>\n        <source>Utilities</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"170\"/>\n        <source>Actions for %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>ManagePluginPopover</name>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"135\"/>\n        <source>ERROR DETAILS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"190\"/>\n        <source>ACTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"199\"/>\n        <source>Activate Plugin</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"206\"/>\n        <source>Deactivate Plugin</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"213\"/>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"276\"/>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"296\"/>\n        <source>Blacklist Plugin</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"220\"/>\n        <source>Remove Plugin from Blacklist</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"283\"/>\n        <source>Placing this plugin on the blacklist will prevent it from being loaded next time you log in. If the plugin is not already deactivated, we&apos;ll also deactivate it for you.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.cpp\" line=\"43\"/>\n        <source>UUID: %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>PluginManagement</name>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmanagement.ui\" line=\"35\"/>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmanagement.cpp\" line=\"72\"/>\n        <source>Plugins</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmanagement.ui\" line=\"75\"/>\n        <source>Plugins add core and extra functionality to theDesk.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>PluginModel</name>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmodel.cpp\" line=\"52\"/>\n        <source>Loaded</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmodel.cpp\" line=\"54\"/>\n        <source>Blacklisted</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmodel.cpp\" line=\"56\"/>\n        <source>Unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmodel.cpp\" line=\"58\"/>\n        <source>Inactive</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>Recovery</name>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"35\"/>\n        <location filename=\"../systemsettings/recovery/recovery.cpp\" line=\"67\"/>\n        <source>Recovery</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"113\"/>\n        <source>RESET THEDESK</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"120\"/>\n        <source>If things aren&apos;t working correctly, resetting theDesk might help.\n\nHere&apos;s what will happen:\n- User settings will be cleared and reset to defaults\n- The next time you log into theDesk, you&apos;ll need to run through the setup again\n\nSave your documents and close all apps before starting the reset. This won&apos;t take long, but you&apos;ll need to log out to perform the reset. You won&apos;t be able to use your device while the reset is taking place.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"138\"/>\n        <source>Log Out and Reset theDesk</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"203\"/>\n        <source>RESET DEVICE</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"210\"/>\n        <source>If resetting theDesk didn&apos;t work, or if you just need a fresh start, you can reset this device.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"222\"/>\n        <source>Reset this device</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.cpp\" line=\"92\"/>\n        <source>%1, log out and reset theDesk settings? This action is irreversible.\n\nWe&apos;ll go ahead and reset your settings in %n seconds if you don&apos;t do anything.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>RunDialog</name>\n    <message>\n        <location filename=\"../run/rundialog.ui\" line=\"35\"/>\n        <source>Run</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../run/rundialog.ui\" line=\"60\"/>\n        <source>Enter a command to run.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../run/rundialog.ui\" line=\"73\"/>\n        <source>Run this command</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>StatusCenterLeftPane</name>\n    <message>\n        <location filename=\"../statuscenter/statuscenterleftpane.ui\" line=\"54\"/>\n        <source>Status Center</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SystemSettings</name>\n    <message>\n        <location filename=\"../systemsettings/systemsettings.cpp\" line=\"190\"/>\n        <source>System Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SystemSettingsLeftPane</name>\n    <message>\n        <location filename=\"../systemsettings/systemsettingsleftpane.ui\" line=\"35\"/>\n        <source>System Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/systemsettingsleftpane.ui\" line=\"103\"/>\n        <source>LOG OUT</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/systemsettingsleftpane.ui\" line=\"110\"/>\n        <source>You&apos;ve changed some settings that require you to log out for them to apply completely</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/systemsettingsleftpane.ui\" line=\"135\"/>\n        <source>Log Out</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>TaskbarApplicationWidget</name>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"153\"/>\n        <source>Move to desktop</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"150\"/>\n        <source>For %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"158\"/>\n        <source>All Desktops</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"176\"/>\n        <source>New Desktop</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"181\"/>\n        <source>Close</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"186\"/>\n        <source>For %n %1 windows</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n        </translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"188\"/>\n        <source>For %n windows</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n        </translation>\n    </message>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"190\"/>\n        <source>Close All</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>main</name>\n    <message>\n        <location filename=\"../main.cpp\" line=\"73\"/>\n        <source>Safe Mode</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../main.cpp\" line=\"73\"/>\n        <source>You&apos;re holding the CTRL key. Start theDesk in Safe Mode?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "desktop/translations/id_ID.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"id_ID\" sourcelanguage=\"en_US\">\n<context>\n    <name>About</name>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"165\"/>\n        <source>DISTRIBUTION</source>\n        <translation>DISTRIBUSI</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"182\"/>\n        <source>You&apos;re using</source>\n        <translation>Anda menggunakan</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"262\"/>\n        <source>Device Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"362\"/>\n        <source>Processor</source>\n        <translation>Prosesor</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"248\"/>\n        <source>THIS DEVICE</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"276\"/>\n        <source>Available Memory</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"236\"/>\n        <source>Available Swap</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"307\"/>\n        <source>Qt Version</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"255\"/>\n        <source>Kernel Version</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"297\"/>\n        <source>Change Device Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"269\"/>\n        <source>Window System</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"283\"/>\n        <source>Device Type</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"369\"/>\n        <source>Video</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"444\"/>\n        <source>Desktop Environment</source>\n        <translation>Lingkungan Desktop</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"473\"/>\n        <source>Website</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"484\"/>\n        <source>File Bug</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"495\"/>\n        <source>Sources</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"506\"/>\n        <source>View Debug Log</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"463\"/>\n        <source>Acknowledgements</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"68\"/>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"69\"/>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"105\"/>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"167\"/>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"172\"/>\n        <source>Unknown</source>\n        <translation>Tidak diketahui</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"117\"/>\n        <source>theDesk %1 - Blueprint</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"118\"/>\n        <source>You compiled theDesk on %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"120\"/>\n        <source>theDesk %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"124\"/>\n        <source>Copyright © Victor Tran %1. Licensed under the terms of the GNU General Public License, version 3 or later.</source>\n        <translation>Hak cipta © Victor Tran %1. Dilisensi di bawah ketentuan Lisensi Publik GNU (GNU GPL), versi 3 ke atas.</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"35\"/>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"189\"/>\n        <source>About</source>\n        <translation>Tentang</translation>\n    </message>\n</context>\n<context>\n    <name>Acknowledgements</name>\n    <message>\n        <location filename=\"../systemsettings/about/acknowledgements.ui\" line=\"35\"/>\n        <source>Acknowledgements</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>AppSearchProvider</name>\n    <message>\n        <location filename=\"../gateway/appsearchprovider.cpp\" line=\"151\"/>\n        <source>Application</source>\n        <translation type=\"unfinished\">Aplikasi</translation>\n    </message>\n</context>\n<context>\n    <name>AppSelectionModel</name>\n    <message>\n        <location filename=\"../gateway/appselectionmodel.cpp\" line=\"61\"/>\n        <source>Application</source>\n        <translation>Aplikasi</translation>\n    </message>\n</context>\n<context>\n    <name>Background</name>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"176\"/>\n        <source>Sorry, there was a problem displaying the background.</source>\n        <translation>Maaf, terdapat masalah menampilkan background.</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"198\"/>\n        <source>Try Again</source>\n        <translation>Coba Lagi</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"379\"/>\n        <source>Background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"427\"/>\n        <source>IMAGE</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"434\"/>\n        <source>Select an image to display on your background and lock screen</source>\n        <translation>Pilihlah gambar untuk dipakai sebagai background desktop serta lockscreen</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"522\"/>\n        <source>COMMUNITY BACKGROUNDS</source>\n        <translation>BACKGROUND KOMUNITAS</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"529\"/>\n        <source>Images from the theDesk community will be cycled through every so often.</source>\n        <translation>Gambar dari komunitas theDesk akan diganti secara berkala.</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"536\"/>\n        <source>Show image information</source>\n        <translation>Tampilkan informasi mengenai gambar</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"584\"/>\n        <source>STRETCH</source>\n        <translation>BENTANGAN</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"591\"/>\n        <source>Select how you&apos;d like the background image to be sized</source>\n        <translation>Pilih cara menampilkan background</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"603\"/>\n        <source>Stretch To Fit</source>\n        <translation>Regang Agar Sesuai</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"629\"/>\n        <source>Zoom and Crop</source>\n        <translation>Besarkan dengan Pemotongan</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"655\"/>\n        <source>Center</source>\n        <translation>Taruh di Tengah</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"681\"/>\n        <source>Tile</source>\n        <translation>Mengubin</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"707\"/>\n        <source>Zoom To Fit</source>\n        <translation>Besarkan Agar Sesuai</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"757\"/>\n        <source>Change Background</source>\n        <translation>Ganti Background</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"765\"/>\n        <source>End Session</source>\n        <translation>Akhiri Sesi</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"201\"/>\n        <source>by %1</source>\n        <translation>oleh %1</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"299\"/>\n        <source>For desktop</source>\n        <translation>Untuk desktop</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"331\"/>\n        <source>Select Background</source>\n        <translation>Pilih Background</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"370\"/>\n        <source>Set Background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"371\"/>\n        <source>Set as Desktop Background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"374\"/>\n        <source>Set as Lock Screen Background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"378\"/>\n        <source>Set for both</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>ChangeHostnamePopover</name>\n    <message>\n        <location filename=\"../systemsettings/about/changehostnamepopover.ui\" line=\"35\"/>\n        <source>Change Device Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/changehostnamepopover.ui\" line=\"62\"/>\n        <source>New Device Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/changehostnamepopover.ui\" line=\"69\"/>\n        <source>This device name is used over the network to identify this device. It is also used to identify this device over Bluetooth.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/changehostnamepopover.ui\" line=\"79\"/>\n        <source>Network Compatible Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/changehostnamepopover.ui\" line=\"95\"/>\n        <source>Rename this Device</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>ChunkContainer</name>\n    <message>\n        <location filename=\"../bar/chunkcontainer.ui\" line=\"41\"/>\n        <source>Open Status Center</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>CommandLine</name>\n    <message>\n        <location filename=\"../cli/commandline.cpp\" line=\"37\"/>\n        <source>Start theDesk in Safe Mode</source>\n        <translation>Mulai theDesk dalam Mode Aman</translation>\n    </message>\n    <message>\n        <location filename=\"../cli/commandline.cpp\" line=\"40\"/>\n        <source>Internal use; the path to a local socket to communicate with the session manager</source>\n        <translation>Pemakaian internal saja; lokasi soket lokal untuk berkomunikasi dengan manajer sesi</translation>\n    </message>\n    <message>\n        <location filename=\"../cli/commandline.cpp\" line=\"40\"/>\n        <source>path</source>\n        <translation>lokasi</translation>\n    </message>\n</context>\n<context>\n    <name>CurrentAppWidgetMenu</name>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.ui\" line=\"75\"/>\n        <source>Close Window</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.ui\" line=\"188\"/>\n        <source>QUIT IMMEDIATELY</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.ui\" line=\"204\"/>\n        <source>Cancel</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.cpp\" line=\"62\"/>\n        <source>Force Stop</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.cpp\" line=\"63\"/>\n        <location filename=\"../bar/currentappwidgetmenu.cpp\" line=\"65\"/>\n        <source>Force Stop %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.cpp\" line=\"64\"/>\n        <source>%1 will be forced to exit and won&apos;t have a chance to save any unsaved data.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>EndSession</name>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"57\"/>\n        <source>End Session</source>\n        <translation>Akhiri Sesi</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"115\"/>\n        <source>Power Off</source>\n        <translation>Matikan</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"122\"/>\n        <source>Turns off your computer.</source>\n        <translation>Mematikan komputer Anda.</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"134\"/>\n        <location filename=\"../session/endsession.ui\" line=\"369\"/>\n        <location filename=\"../session/endsession.cpp\" line=\"251\"/>\n        <source>Reboot</source>\n        <translation>Nyalakan ulang</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"141\"/>\n        <source>Turns off your computer and turns it on again</source>\n        <translation>Mematikan komputer Anda kemudian menyalakannya lagi</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"148\"/>\n        <source>Reboot and install updates</source>\n        <translation>Nyalakan ulang dan install update</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"155\"/>\n        <source>Turns off your computer, installs pending updates and turns it on again</source>\n        <translation>Mematikan komputer Anda, menginstall update kemudian menyalakannya lagi</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"162\"/>\n        <source>Log Out</source>\n        <translation>Keluar</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"169\"/>\n        <source>Ends your session but keeps your computer on for other people to use</source>\n        <translation>Mengakhiri sesi Anda namun membiarkan komputer menyala agar dapat dipakai orang lain</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"176\"/>\n        <source>Suspend</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"183\"/>\n        <source>Puts your computer in a low power state so it reopens quickly</source>\n        <translation>Membuat komputer berjalan dengan daya rendah agar dapat dibuka kembali dengan cepat</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"190\"/>\n        <source>Lock</source>\n        <translation>Kunci</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"197\"/>\n        <source>Locks your workspace with your password</source>\n        <translation>Mengunci komputer dengan password Anda</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"204\"/>\n        <source>Turn Off Screen</source>\n        <translation>Matikan Layar</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"211\"/>\n        <source>Turns off the screen, but keeps everything else running in the background</source>\n        <translation>Mematikan layar, namun aplikasi-aplikasi akan tetap berjalan</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"218\"/>\n        <source>Switch Users</source>\n        <translation>Ganti User</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"225\"/>\n        <source>Switches to the logon screen, but keeps your session in the background</source>\n        <translation>Menampilkan logon screen, namun sesi Anda akan tetap berjalan</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"232\"/>\n        <source>Hibernate</source>\n        <translation>Hibernasi</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"239\"/>\n        <source>Powers off your computer, but restores the session when powered back on</source>\n        <translation>Mematikan komputer, namun mengembalikan sesi Anda ketika dinyalakan kembali</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"334\"/>\n        <source>Updates are available. What do you want to do?</source>\n        <translation>Update tersedia. Apa yang ingin Anda lakukan?</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"349\"/>\n        <source>Reboot and update</source>\n        <translation>Nyalakan ulang dan update</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"356\"/>\n        <source>We&apos;ll perform system updates once this device has rebooted.</source>\n        <translation>Sistem akan di-update setelah dinyalakan kembali.</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"376\"/>\n        <source>We&apos;ll reboot your device normally.</source>\n        <translation>Sistem akan reboot seperti biasa.</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"109\"/>\n        <source>power off the system</source>\n        <translation>matikan sistem</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"110\"/>\n        <source>reboot the system</source>\n        <translation>menyalakan ulang sistem</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"111\"/>\n        <source>reboot the system and install any pending updates</source>\n        <translation>nyalakan ulang sistem dan install update-update yang menunggu</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"112\"/>\n        <source>log you out</source>\n        <translation>me-logout</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"113\"/>\n        <source>suspend the system</source>\n        <translation>menonaktifkan sistem</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"114\"/>\n        <source>lock the screen</source>\n        <translation>mengunci desktop</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"115\"/>\n        <source>turn off the screen</source>\n        <translation>mematikan layar</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"116\"/>\n        <source>switch users</source>\n        <translation>mengganti user</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"117\"/>\n        <source>hibernate the system</source>\n        <translation>menonaktifkan sistem</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"250\"/>\n        <source>Advanced Reboot</source>\n        <translation>Reboot Lanjutan</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"260\"/>\n        <source>Reboot into System UEFI Setup</source>\n        <translation>Reboot ke Pengaturan UEFI</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"49\"/>\n        <source>Hey %1, ready to head out? We&apos;ll %2 in %n seconds if you don&apos;t do anything.</source>\n        <translation>Hey %1, ingin keluar? Kami akan %2 dalam %n detik jika Anda tak melakukan apa-apa.</translation>\n    </message>\n</context>\n<context>\n    <name>MainGatewayWidget</name>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"57\"/>\n        <source>Gateway</source>\n        <translation>Gerbang</translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"150\"/>\n        <source>CATEGORIES</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"160\"/>\n        <source>All Apps</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"276\"/>\n        <source>Preparing the Gateway...</source>\n        <translation>Menyiapkan Gerbang Aplikasi...</translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"67\"/>\n        <source>Type to search...</source>\n        <translation>Ketik untuk mencari...</translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"192\"/>\n        <source>Status Center</source>\n        <translation type=\"unfinished\">Status Umum</translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"391\"/>\n        <source>System Settings</source>\n        <translation type=\"unfinished\">Pengaturan Sistem</translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"407\"/>\n        <source>End Session</source>\n        <translation>Akhiri Sesi</translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"88\"/>\n        <source>A/V</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"89\"/>\n        <source>Development</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"90\"/>\n        <source>Education</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"91\"/>\n        <source>Games</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"92\"/>\n        <source>Graphics</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"93\"/>\n        <source>Networking</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"94\"/>\n        <source>Office</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"95\"/>\n        <source>Science</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"96\"/>\n        <source>Utilities</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"170\"/>\n        <source>Actions for %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>ManagePluginPopover</name>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"135\"/>\n        <source>ERROR DETAILS</source>\n        <translation>RINCIAN ERROR</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"190\"/>\n        <source>ACTIONS</source>\n        <translation>AKSI</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"199\"/>\n        <source>Activate Plugin</source>\n        <translation>Aktifkan Plugin</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"206\"/>\n        <source>Deactivate Plugin</source>\n        <translation>Nonaktifkan Plugin</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"213\"/>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"276\"/>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"296\"/>\n        <source>Blacklist Plugin</source>\n        <translation>Larang Plugin</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"220\"/>\n        <source>Remove Plugin from Blacklist</source>\n        <translation>Bolehkan Plugin</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"283\"/>\n        <source>Placing this plugin on the blacklist will prevent it from being loaded next time you log in. If the plugin is not already deactivated, we&apos;ll also deactivate it for you.</source>\n        <translation>Melarang plugin untuk diaktifkan dalam login selanjutnya. Jika belum dinonaktifkan, melarang plugin juga akan menonaktifkan plugin tersebut.</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.cpp\" line=\"43\"/>\n        <source>UUID: %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>PluginManagement</name>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmanagement.ui\" line=\"35\"/>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmanagement.cpp\" line=\"72\"/>\n        <source>Plugins</source>\n        <translation>Plugin</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmanagement.ui\" line=\"75\"/>\n        <source>Plugins add core and extra functionality to theDesk.</source>\n        <translation>Plugin menambahkan fitur pada theDesk.</translation>\n    </message>\n</context>\n<context>\n    <name>PluginModel</name>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmodel.cpp\" line=\"52\"/>\n        <source>Loaded</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmodel.cpp\" line=\"54\"/>\n        <source>Blacklisted</source>\n        <translation>Dilarang</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmodel.cpp\" line=\"56\"/>\n        <source>Unavailable</source>\n        <translation>Tidak Ada</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmodel.cpp\" line=\"58\"/>\n        <source>Inactive</source>\n        <translation>Tidak Aktif</translation>\n    </message>\n</context>\n<context>\n    <name>Recovery</name>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"35\"/>\n        <location filename=\"../systemsettings/recovery/recovery.cpp\" line=\"67\"/>\n        <source>Recovery</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"113\"/>\n        <source>RESET THEDESK</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"120\"/>\n        <source>If things aren&apos;t working correctly, resetting theDesk might help.\n\nHere&apos;s what will happen:\n- User settings will be cleared and reset to defaults\n- The next time you log into theDesk, you&apos;ll need to run through the setup again\n\nSave your documents and close all apps before starting the reset. This won&apos;t take long, but you&apos;ll need to log out to perform the reset. You won&apos;t be able to use your device while the reset is taking place.</source>\n        <translation>Jika theDesk tidak berjalan semestinya, mungkin me-reset akan membantu.\n\nHal berikut akan terjadi:\n- Pengaturan user akan terhapus dan kembali ke default\n- Ketika masuk kembali ke theDesk, Anda harus menjalani setup lagi\n\nSimpan pekerjaan Anda dan tutup semua aplikasi sebelum me-reset. Ini tidak akan memakan waktu lama, namun saat me-reset Anda akan logout. Anda belum dapat memakai sistem saat reset sedang berlangsung.</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"138\"/>\n        <source>Log Out and Reset theDesk</source>\n        <translation>Keluar dan Reset theDesk</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"203\"/>\n        <source>RESET DEVICE</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"210\"/>\n        <source>If resetting theDesk didn&apos;t work, or if you just need a fresh start, you can reset this device.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"222\"/>\n        <source>Reset this device</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.cpp\" line=\"92\"/>\n        <source>%1, log out and reset theDesk settings? This action is irreversible.\n\nWe&apos;ll go ahead and reset your settings in %n seconds if you don&apos;t do anything.</source>\n        <translation>%1, keluar dan reset pengaturan theDesk? Pengaturan Anda tidak dapat dikembalikan.\n\nPengaturan theDesk akan reset dalam %n detik jika Anda tak melakukan apa-apa.</translation>\n    </message>\n</context>\n<context>\n    <name>RunDialog</name>\n    <message>\n        <location filename=\"../run/rundialog.ui\" line=\"35\"/>\n        <source>Run</source>\n        <translation>Jalankan</translation>\n    </message>\n    <message>\n        <location filename=\"../run/rundialog.ui\" line=\"60\"/>\n        <source>Enter a command to run.</source>\n        <translation>Masukkan perintah untuk dijalankan.</translation>\n    </message>\n    <message>\n        <location filename=\"../run/rundialog.ui\" line=\"73\"/>\n        <source>Run this command</source>\n        <translation>Jalankan perintah ini</translation>\n    </message>\n</context>\n<context>\n    <name>StatusCenterLeftPane</name>\n    <message>\n        <location filename=\"../statuscenter/statuscenterleftpane.ui\" line=\"54\"/>\n        <source>Status Center</source>\n        <translation>Status Umum</translation>\n    </message>\n</context>\n<context>\n    <name>SystemSettings</name>\n    <message>\n        <location filename=\"../systemsettings/systemsettings.cpp\" line=\"190\"/>\n        <source>System Settings</source>\n        <translation>Pengaturan Sistem</translation>\n    </message>\n</context>\n<context>\n    <name>SystemSettingsLeftPane</name>\n    <message>\n        <location filename=\"../systemsettings/systemsettingsleftpane.ui\" line=\"35\"/>\n        <source>System Settings</source>\n        <translation>Pengaturan Sistem</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/systemsettingsleftpane.ui\" line=\"103\"/>\n        <source>LOG OUT</source>\n        <translation>KELUAR</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/systemsettingsleftpane.ui\" line=\"110\"/>\n        <source>You&apos;ve changed some settings that require you to log out for them to apply completely</source>\n        <translation>Anda telah mengganti beberapa pengaturan yang mengharuskan Anda log out terlebih dahulu agar dapat diterapkan</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/systemsettingsleftpane.ui\" line=\"135\"/>\n        <source>Log Out</source>\n        <translation>Keluar</translation>\n    </message>\n</context>\n<context>\n    <name>TaskbarApplicationWidget</name>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"153\"/>\n        <source>Move to desktop</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"150\"/>\n        <source>For %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"158\"/>\n        <source>All Desktops</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"176\"/>\n        <source>New Desktop</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"181\"/>\n        <source>Close</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"186\"/>\n        <source>For %n %1 windows</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n        </translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"188\"/>\n        <source>For %n windows</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n        </translation>\n    </message>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"190\"/>\n        <source>Close All</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>main</name>\n    <message>\n        <location filename=\"../main.cpp\" line=\"73\"/>\n        <source>Safe Mode</source>\n        <translation>Mode Aman</translation>\n    </message>\n    <message>\n        <location filename=\"../main.cpp\" line=\"73\"/>\n        <source>You&apos;re holding the CTRL key. Start theDesk in Safe Mode?</source>\n        <translation>Anda sedang menekan tombol CTRL. Mulai theDesk dalam Mode Aman?</translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "desktop/translations/ja.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"ja\" sourcelanguage=\"en_US\">\n<context>\n    <name>About</name>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"165\"/>\n        <source>DISTRIBUTION</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"182\"/>\n        <source>You&apos;re using</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"262\"/>\n        <source>Device Name</source>\n        <translation>デバイスの名前</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"362\"/>\n        <source>Processor</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"248\"/>\n        <source>THIS DEVICE</source>\n        <translation>このデバイス</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"276\"/>\n        <source>Available Memory</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"236\"/>\n        <source>Available Swap</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"307\"/>\n        <source>Qt Version</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"255\"/>\n        <source>Kernel Version</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"297\"/>\n        <source>Change Device Name</source>\n        <translation type=\"unfinished\">構築の名前を変更する</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"269\"/>\n        <source>Window System</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"283\"/>\n        <source>Device Type</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"369\"/>\n        <source>Video</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"444\"/>\n        <source>Desktop Environment</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"473\"/>\n        <source>Website</source>\n        <translation>ウェブサイト</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"484\"/>\n        <source>File Bug</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"495\"/>\n        <source>Sources</source>\n        <translation type=\"unfinished\">ソースコード</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"506\"/>\n        <source>View Debug Log</source>\n        <translation type=\"unfinished\">デバッグの履歴を見る</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"463\"/>\n        <source>Acknowledgements</source>\n        <translation>認知</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"68\"/>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"69\"/>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"105\"/>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"167\"/>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"172\"/>\n        <source>Unknown</source>\n        <translation>未知</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"117\"/>\n        <source>theDesk %1 - Blueprint</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"118\"/>\n        <source>You compiled theDesk on %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"120\"/>\n        <source>theDesk %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"124\"/>\n        <source>Copyright © Victor Tran %1. Licensed under the terms of the GNU General Public License, version 3 or later.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"35\"/>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"189\"/>\n        <source>About</source>\n        <translation>情報</translation>\n    </message>\n</context>\n<context>\n    <name>Acknowledgements</name>\n    <message>\n        <location filename=\"../systemsettings/about/acknowledgements.ui\" line=\"35\"/>\n        <source>Acknowledgements</source>\n        <translation type=\"unfinished\">礼状</translation>\n    </message>\n</context>\n<context>\n    <name>AppSearchProvider</name>\n    <message>\n        <location filename=\"../gateway/appsearchprovider.cpp\" line=\"151\"/>\n        <source>Application</source>\n        <translation type=\"unfinished\">アプリケーション</translation>\n    </message>\n</context>\n<context>\n    <name>AppSelectionModel</name>\n    <message>\n        <location filename=\"../gateway/appselectionmodel.cpp\" line=\"61\"/>\n        <source>Application</source>\n        <translation type=\"unfinished\">アプリケーション</translation>\n    </message>\n</context>\n<context>\n    <name>Background</name>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"176\"/>\n        <source>Sorry, there was a problem displaying the background.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"198\"/>\n        <source>Try Again</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"379\"/>\n        <source>Background</source>\n        <translation>背景</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"427\"/>\n        <source>IMAGE</source>\n        <translation>映像</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"434\"/>\n        <source>Select an image to display on your background and lock screen</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"522\"/>\n        <source>COMMUNITY BACKGROUNDS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"529\"/>\n        <source>Images from the theDesk community will be cycled through every so often.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"536\"/>\n        <source>Show image information</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"584\"/>\n        <source>STRETCH</source>\n        <translation>伸ばす</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"591\"/>\n        <source>Select how you&apos;d like the background image to be sized</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"603\"/>\n        <source>Stretch To Fit</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"629\"/>\n        <source>Zoom and Crop</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"655\"/>\n        <source>Center</source>\n        <translation>中心</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"681\"/>\n        <source>Tile</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"707\"/>\n        <source>Zoom To Fit</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"757\"/>\n        <source>Change Background</source>\n        <translation>壁紙を変更する</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"765\"/>\n        <source>End Session</source>\n        <translation type=\"unfinished\">セッションを終了する</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"201\"/>\n        <source>by %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"299\"/>\n        <source>For desktop</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"331\"/>\n        <source>Select Background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"370\"/>\n        <source>Set Background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"371\"/>\n        <source>Set as Desktop Background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"374\"/>\n        <source>Set as Lock Screen Background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"378\"/>\n        <source>Set for both</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>ChangeHostnamePopover</name>\n    <message>\n        <location filename=\"../systemsettings/about/changehostnamepopover.ui\" line=\"35\"/>\n        <source>Change Device Name</source>\n        <translation>構築の名前を変更する</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/changehostnamepopover.ui\" line=\"62\"/>\n        <source>New Device Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/changehostnamepopover.ui\" line=\"69\"/>\n        <source>This device name is used over the network to identify this device. It is also used to identify this device over Bluetooth.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/changehostnamepopover.ui\" line=\"79\"/>\n        <source>Network Compatible Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/changehostnamepopover.ui\" line=\"95\"/>\n        <source>Rename this Device</source>\n        <translation>構築の名前を変更する</translation>\n    </message>\n</context>\n<context>\n    <name>ChunkContainer</name>\n    <message>\n        <location filename=\"../bar/chunkcontainer.ui\" line=\"41\"/>\n        <source>Open Status Center</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>CommandLine</name>\n    <message>\n        <location filename=\"../cli/commandline.cpp\" line=\"37\"/>\n        <source>Start theDesk in Safe Mode</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../cli/commandline.cpp\" line=\"40\"/>\n        <source>Internal use; the path to a local socket to communicate with the session manager</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../cli/commandline.cpp\" line=\"40\"/>\n        <source>path</source>\n        <translation>経路</translation>\n    </message>\n</context>\n<context>\n    <name>CurrentAppWidgetMenu</name>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.ui\" line=\"75\"/>\n        <source>Close Window</source>\n        <translation>ウィンドウを終了する</translation>\n    </message>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.ui\" line=\"188\"/>\n        <source>QUIT IMMEDIATELY</source>\n        <translation>すぐに止める</translation>\n    </message>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.ui\" line=\"204\"/>\n        <source>Cancel</source>\n        <translation>止める</translation>\n    </message>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.cpp\" line=\"62\"/>\n        <source>Force Stop</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.cpp\" line=\"63\"/>\n        <location filename=\"../bar/currentappwidgetmenu.cpp\" line=\"65\"/>\n        <source>Force Stop %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.cpp\" line=\"64\"/>\n        <source>%1 will be forced to exit and won&apos;t have a chance to save any unsaved data.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>EndSession</name>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"57\"/>\n        <source>End Session</source>\n        <translation type=\"unfinished\">セッションを終了する</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"115\"/>\n        <source>Power Off</source>\n        <translation type=\"unfinished\">電源を消す</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"122\"/>\n        <source>Turns off your computer.</source>\n        <translation type=\"unfinished\">コンピューターを消す</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"134\"/>\n        <location filename=\"../session/endsession.ui\" line=\"369\"/>\n        <location filename=\"../session/endsession.cpp\" line=\"251\"/>\n        <source>Reboot</source>\n        <translation>再起動</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"141\"/>\n        <source>Turns off your computer and turns it on again</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"148\"/>\n        <source>Reboot and install updates</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"155\"/>\n        <source>Turns off your computer, installs pending updates and turns it on again</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"162\"/>\n        <source>Log Out</source>\n        <translation>ログアウト</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"169\"/>\n        <source>Ends your session but keeps your computer on for other people to use</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"176\"/>\n        <source>Suspend</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"183\"/>\n        <source>Puts your computer in a low power state so it reopens quickly</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"190\"/>\n        <source>Lock</source>\n        <translation type=\"unfinished\">セッションをロックする</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"197\"/>\n        <source>Locks your workspace with your password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"204\"/>\n        <source>Turn Off Screen</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"211\"/>\n        <source>Turns off the screen, but keeps everything else running in the background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"218\"/>\n        <source>Switch Users</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"225\"/>\n        <source>Switches to the logon screen, but keeps your session in the background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"232\"/>\n        <source>Hibernate</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"239\"/>\n        <source>Powers off your computer, but restores the session when powered back on</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"334\"/>\n        <source>Updates are available. What do you want to do?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"349\"/>\n        <source>Reboot and update</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"356\"/>\n        <source>We&apos;ll perform system updates once this device has rebooted.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"376\"/>\n        <source>We&apos;ll reboot your device normally.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"109\"/>\n        <source>power off the system</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"110\"/>\n        <source>reboot the system</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"111\"/>\n        <source>reboot the system and install any pending updates</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"112\"/>\n        <source>log you out</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"113\"/>\n        <source>suspend the system</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"114\"/>\n        <source>lock the screen</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"115\"/>\n        <source>turn off the screen</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"116\"/>\n        <source>switch users</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"117\"/>\n        <source>hibernate the system</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"250\"/>\n        <source>Advanced Reboot</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"260\"/>\n        <source>Reboot into System UEFI Setup</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"49\"/>\n        <source>Hey %1, ready to head out? We&apos;ll %2 in %n seconds if you don&apos;t do anything.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>MainGatewayWidget</name>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"57\"/>\n        <source>Gateway</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"150\"/>\n        <source>CATEGORIES</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"160\"/>\n        <source>All Apps</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"276\"/>\n        <source>Preparing the Gateway...</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"67\"/>\n        <source>Type to search...</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"192\"/>\n        <source>Status Center</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"391\"/>\n        <source>System Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"407\"/>\n        <source>End Session</source>\n        <translation type=\"unfinished\">セッションを終了する</translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"88\"/>\n        <source>A/V</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"89\"/>\n        <source>Development</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"90\"/>\n        <source>Education</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"91\"/>\n        <source>Games</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"92\"/>\n        <source>Graphics</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"93\"/>\n        <source>Networking</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"94\"/>\n        <source>Office</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"95\"/>\n        <source>Science</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"96\"/>\n        <source>Utilities</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"170\"/>\n        <source>Actions for %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>ManagePluginPopover</name>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"135\"/>\n        <source>ERROR DETAILS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"190\"/>\n        <source>ACTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"199\"/>\n        <source>Activate Plugin</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"206\"/>\n        <source>Deactivate Plugin</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"213\"/>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"276\"/>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"296\"/>\n        <source>Blacklist Plugin</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"220\"/>\n        <source>Remove Plugin from Blacklist</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"283\"/>\n        <source>Placing this plugin on the blacklist will prevent it from being loaded next time you log in. If the plugin is not already deactivated, we&apos;ll also deactivate it for you.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.cpp\" line=\"43\"/>\n        <source>UUID: %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>PluginManagement</name>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmanagement.ui\" line=\"35\"/>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmanagement.cpp\" line=\"72\"/>\n        <source>Plugins</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmanagement.ui\" line=\"75\"/>\n        <source>Plugins add core and extra functionality to theDesk.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>PluginModel</name>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmodel.cpp\" line=\"52\"/>\n        <source>Loaded</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmodel.cpp\" line=\"54\"/>\n        <source>Blacklisted</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmodel.cpp\" line=\"56\"/>\n        <source>Unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmodel.cpp\" line=\"58\"/>\n        <source>Inactive</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>Recovery</name>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"35\"/>\n        <location filename=\"../systemsettings/recovery/recovery.cpp\" line=\"67\"/>\n        <source>Recovery</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"113\"/>\n        <source>RESET THEDESK</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"120\"/>\n        <source>If things aren&apos;t working correctly, resetting theDesk might help.\n\nHere&apos;s what will happen:\n- User settings will be cleared and reset to defaults\n- The next time you log into theDesk, you&apos;ll need to run through the setup again\n\nSave your documents and close all apps before starting the reset. This won&apos;t take long, but you&apos;ll need to log out to perform the reset. You won&apos;t be able to use your device while the reset is taking place.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"138\"/>\n        <source>Log Out and Reset theDesk</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"203\"/>\n        <source>RESET DEVICE</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"210\"/>\n        <source>If resetting theDesk didn&apos;t work, or if you just need a fresh start, you can reset this device.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"222\"/>\n        <source>Reset this device</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.cpp\" line=\"92\"/>\n        <source>%1, log out and reset theDesk settings? This action is irreversible.\n\nWe&apos;ll go ahead and reset your settings in %n seconds if you don&apos;t do anything.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>RunDialog</name>\n    <message>\n        <location filename=\"../run/rundialog.ui\" line=\"35\"/>\n        <source>Run</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../run/rundialog.ui\" line=\"60\"/>\n        <source>Enter a command to run.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../run/rundialog.ui\" line=\"73\"/>\n        <source>Run this command</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>StatusCenterLeftPane</name>\n    <message>\n        <location filename=\"../statuscenter/statuscenterleftpane.ui\" line=\"54\"/>\n        <source>Status Center</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SystemSettings</name>\n    <message>\n        <location filename=\"../systemsettings/systemsettings.cpp\" line=\"190\"/>\n        <source>System Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SystemSettingsLeftPane</name>\n    <message>\n        <location filename=\"../systemsettings/systemsettingsleftpane.ui\" line=\"35\"/>\n        <source>System Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/systemsettingsleftpane.ui\" line=\"103\"/>\n        <source>LOG OUT</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/systemsettingsleftpane.ui\" line=\"110\"/>\n        <source>You&apos;ve changed some settings that require you to log out for them to apply completely</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/systemsettingsleftpane.ui\" line=\"135\"/>\n        <source>Log Out</source>\n        <translation type=\"unfinished\">ログアウト</translation>\n    </message>\n</context>\n<context>\n    <name>TaskbarApplicationWidget</name>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"153\"/>\n        <source>Move to desktop</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"150\"/>\n        <source>For %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"158\"/>\n        <source>All Desktops</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"176\"/>\n        <source>New Desktop</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"181\"/>\n        <source>Close</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"186\"/>\n        <source>For %n %1 windows</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n        </translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"188\"/>\n        <source>For %n windows</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n        </translation>\n    </message>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"190\"/>\n        <source>Close All</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>main</name>\n    <message>\n        <location filename=\"../main.cpp\" line=\"73\"/>\n        <source>Safe Mode</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../main.cpp\" line=\"73\"/>\n        <source>You&apos;re holding the CTRL key. Start theDesk in Safe Mode?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "desktop/translations/nl.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"nl\" sourcelanguage=\"en_US\">\n<context>\n    <name>About</name>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"165\"/>\n        <source>DISTRIBUTION</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"182\"/>\n        <source>You&apos;re using</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"262\"/>\n        <source>Device Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"362\"/>\n        <source>Processor</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"248\"/>\n        <source>THIS DEVICE</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"276\"/>\n        <source>Available Memory</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"236\"/>\n        <source>Available Swap</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"307\"/>\n        <source>Qt Version</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"255\"/>\n        <source>Kernel Version</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"297\"/>\n        <source>Change Device Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"269\"/>\n        <source>Window System</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"283\"/>\n        <source>Device Type</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"369\"/>\n        <source>Video</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"444\"/>\n        <source>Desktop Environment</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"473\"/>\n        <source>Website</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"484\"/>\n        <source>File Bug</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"495\"/>\n        <source>Sources</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"506\"/>\n        <source>View Debug Log</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"463\"/>\n        <source>Acknowledgements</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"68\"/>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"69\"/>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"105\"/>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"167\"/>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"172\"/>\n        <source>Unknown</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"117\"/>\n        <source>theDesk %1 - Blueprint</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"118\"/>\n        <source>You compiled theDesk on %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"120\"/>\n        <source>theDesk %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"124\"/>\n        <source>Copyright © Victor Tran %1. Licensed under the terms of the GNU General Public License, version 3 or later.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"35\"/>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"189\"/>\n        <source>About</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>Acknowledgements</name>\n    <message>\n        <location filename=\"../systemsettings/about/acknowledgements.ui\" line=\"35\"/>\n        <source>Acknowledgements</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>AppSearchProvider</name>\n    <message>\n        <location filename=\"../gateway/appsearchprovider.cpp\" line=\"151\"/>\n        <source>Application</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>AppSelectionModel</name>\n    <message>\n        <location filename=\"../gateway/appselectionmodel.cpp\" line=\"61\"/>\n        <source>Application</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>Background</name>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"176\"/>\n        <source>Sorry, there was a problem displaying the background.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"198\"/>\n        <source>Try Again</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"379\"/>\n        <source>Background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"427\"/>\n        <source>IMAGE</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"434\"/>\n        <source>Select an image to display on your background and lock screen</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"522\"/>\n        <source>COMMUNITY BACKGROUNDS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"529\"/>\n        <source>Images from the theDesk community will be cycled through every so often.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"536\"/>\n        <source>Show image information</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"584\"/>\n        <source>STRETCH</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"591\"/>\n        <source>Select how you&apos;d like the background image to be sized</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"603\"/>\n        <source>Stretch To Fit</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"629\"/>\n        <source>Zoom and Crop</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"655\"/>\n        <source>Center</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"681\"/>\n        <source>Tile</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"707\"/>\n        <source>Zoom To Fit</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"757\"/>\n        <source>Change Background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"765\"/>\n        <source>End Session</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"201\"/>\n        <source>by %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"299\"/>\n        <source>For desktop</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"331\"/>\n        <source>Select Background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"370\"/>\n        <source>Set Background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"371\"/>\n        <source>Set as Desktop Background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"374\"/>\n        <source>Set as Lock Screen Background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"378\"/>\n        <source>Set for both</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>ChangeHostnamePopover</name>\n    <message>\n        <location filename=\"../systemsettings/about/changehostnamepopover.ui\" line=\"35\"/>\n        <source>Change Device Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/changehostnamepopover.ui\" line=\"62\"/>\n        <source>New Device Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/changehostnamepopover.ui\" line=\"69\"/>\n        <source>This device name is used over the network to identify this device. It is also used to identify this device over Bluetooth.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/changehostnamepopover.ui\" line=\"79\"/>\n        <source>Network Compatible Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/changehostnamepopover.ui\" line=\"95\"/>\n        <source>Rename this Device</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>ChunkContainer</name>\n    <message>\n        <location filename=\"../bar/chunkcontainer.ui\" line=\"41\"/>\n        <source>Open Status Center</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>CommandLine</name>\n    <message>\n        <location filename=\"../cli/commandline.cpp\" line=\"37\"/>\n        <source>Start theDesk in Safe Mode</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../cli/commandline.cpp\" line=\"40\"/>\n        <source>Internal use; the path to a local socket to communicate with the session manager</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../cli/commandline.cpp\" line=\"40\"/>\n        <source>path</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>CurrentAppWidgetMenu</name>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.ui\" line=\"75\"/>\n        <source>Close Window</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.ui\" line=\"188\"/>\n        <source>QUIT IMMEDIATELY</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.ui\" line=\"204\"/>\n        <source>Cancel</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.cpp\" line=\"62\"/>\n        <source>Force Stop</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.cpp\" line=\"63\"/>\n        <location filename=\"../bar/currentappwidgetmenu.cpp\" line=\"65\"/>\n        <source>Force Stop %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.cpp\" line=\"64\"/>\n        <source>%1 will be forced to exit and won&apos;t have a chance to save any unsaved data.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>EndSession</name>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"57\"/>\n        <source>End Session</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"115\"/>\n        <source>Power Off</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"122\"/>\n        <source>Turns off your computer.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"134\"/>\n        <location filename=\"../session/endsession.ui\" line=\"369\"/>\n        <location filename=\"../session/endsession.cpp\" line=\"251\"/>\n        <source>Reboot</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"141\"/>\n        <source>Turns off your computer and turns it on again</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"148\"/>\n        <source>Reboot and install updates</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"155\"/>\n        <source>Turns off your computer, installs pending updates and turns it on again</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"162\"/>\n        <source>Log Out</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"169\"/>\n        <source>Ends your session but keeps your computer on for other people to use</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"176\"/>\n        <source>Suspend</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"183\"/>\n        <source>Puts your computer in a low power state so it reopens quickly</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"190\"/>\n        <source>Lock</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"197\"/>\n        <source>Locks your workspace with your password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"204\"/>\n        <source>Turn Off Screen</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"211\"/>\n        <source>Turns off the screen, but keeps everything else running in the background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"218\"/>\n        <source>Switch Users</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"225\"/>\n        <source>Switches to the logon screen, but keeps your session in the background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"232\"/>\n        <source>Hibernate</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"239\"/>\n        <source>Powers off your computer, but restores the session when powered back on</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"334\"/>\n        <source>Updates are available. What do you want to do?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"349\"/>\n        <source>Reboot and update</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"356\"/>\n        <source>We&apos;ll perform system updates once this device has rebooted.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"376\"/>\n        <source>We&apos;ll reboot your device normally.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"109\"/>\n        <source>power off the system</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"110\"/>\n        <source>reboot the system</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"111\"/>\n        <source>reboot the system and install any pending updates</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"112\"/>\n        <source>log you out</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"113\"/>\n        <source>suspend the system</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"114\"/>\n        <source>lock the screen</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"115\"/>\n        <source>turn off the screen</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"116\"/>\n        <source>switch users</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"117\"/>\n        <source>hibernate the system</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"250\"/>\n        <source>Advanced Reboot</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"260\"/>\n        <source>Reboot into System UEFI Setup</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"49\"/>\n        <source>Hey %1, ready to head out? We&apos;ll %2 in %n seconds if you don&apos;t do anything.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>MainGatewayWidget</name>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"57\"/>\n        <source>Gateway</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"150\"/>\n        <source>CATEGORIES</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"160\"/>\n        <source>All Apps</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"276\"/>\n        <source>Preparing the Gateway...</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"67\"/>\n        <source>Type to search...</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"192\"/>\n        <source>Status Center</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"391\"/>\n        <source>System Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"407\"/>\n        <source>End Session</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"88\"/>\n        <source>A/V</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"89\"/>\n        <source>Development</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"90\"/>\n        <source>Education</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"91\"/>\n        <source>Games</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"92\"/>\n        <source>Graphics</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"93\"/>\n        <source>Networking</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"94\"/>\n        <source>Office</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"95\"/>\n        <source>Science</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"96\"/>\n        <source>Utilities</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"170\"/>\n        <source>Actions for %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>ManagePluginPopover</name>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"135\"/>\n        <source>ERROR DETAILS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"190\"/>\n        <source>ACTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"199\"/>\n        <source>Activate Plugin</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"206\"/>\n        <source>Deactivate Plugin</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"213\"/>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"276\"/>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"296\"/>\n        <source>Blacklist Plugin</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"220\"/>\n        <source>Remove Plugin from Blacklist</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"283\"/>\n        <source>Placing this plugin on the blacklist will prevent it from being loaded next time you log in. If the plugin is not already deactivated, we&apos;ll also deactivate it for you.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.cpp\" line=\"43\"/>\n        <source>UUID: %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>PluginManagement</name>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmanagement.ui\" line=\"35\"/>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmanagement.cpp\" line=\"72\"/>\n        <source>Plugins</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmanagement.ui\" line=\"75\"/>\n        <source>Plugins add core and extra functionality to theDesk.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>PluginModel</name>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmodel.cpp\" line=\"52\"/>\n        <source>Loaded</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmodel.cpp\" line=\"54\"/>\n        <source>Blacklisted</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmodel.cpp\" line=\"56\"/>\n        <source>Unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmodel.cpp\" line=\"58\"/>\n        <source>Inactive</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>Recovery</name>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"35\"/>\n        <location filename=\"../systemsettings/recovery/recovery.cpp\" line=\"67\"/>\n        <source>Recovery</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"113\"/>\n        <source>RESET THEDESK</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"120\"/>\n        <source>If things aren&apos;t working correctly, resetting theDesk might help.\n\nHere&apos;s what will happen:\n- User settings will be cleared and reset to defaults\n- The next time you log into theDesk, you&apos;ll need to run through the setup again\n\nSave your documents and close all apps before starting the reset. This won&apos;t take long, but you&apos;ll need to log out to perform the reset. You won&apos;t be able to use your device while the reset is taking place.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"138\"/>\n        <source>Log Out and Reset theDesk</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"203\"/>\n        <source>RESET DEVICE</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"210\"/>\n        <source>If resetting theDesk didn&apos;t work, or if you just need a fresh start, you can reset this device.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"222\"/>\n        <source>Reset this device</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.cpp\" line=\"92\"/>\n        <source>%1, log out and reset theDesk settings? This action is irreversible.\n\nWe&apos;ll go ahead and reset your settings in %n seconds if you don&apos;t do anything.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>RunDialog</name>\n    <message>\n        <location filename=\"../run/rundialog.ui\" line=\"35\"/>\n        <source>Run</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../run/rundialog.ui\" line=\"60\"/>\n        <source>Enter a command to run.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../run/rundialog.ui\" line=\"73\"/>\n        <source>Run this command</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>StatusCenterLeftPane</name>\n    <message>\n        <location filename=\"../statuscenter/statuscenterleftpane.ui\" line=\"54\"/>\n        <source>Status Center</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SystemSettings</name>\n    <message>\n        <location filename=\"../systemsettings/systemsettings.cpp\" line=\"190\"/>\n        <source>System Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SystemSettingsLeftPane</name>\n    <message>\n        <location filename=\"../systemsettings/systemsettingsleftpane.ui\" line=\"35\"/>\n        <source>System Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/systemsettingsleftpane.ui\" line=\"103\"/>\n        <source>LOG OUT</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/systemsettingsleftpane.ui\" line=\"110\"/>\n        <source>You&apos;ve changed some settings that require you to log out for them to apply completely</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/systemsettingsleftpane.ui\" line=\"135\"/>\n        <source>Log Out</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>TaskbarApplicationWidget</name>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"153\"/>\n        <source>Move to desktop</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"150\"/>\n        <source>For %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"158\"/>\n        <source>All Desktops</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"176\"/>\n        <source>New Desktop</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"181\"/>\n        <source>Close</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"186\"/>\n        <source>For %n %1 windows</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n        </translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"188\"/>\n        <source>For %n windows</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n        </translation>\n    </message>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"190\"/>\n        <source>Close All</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>main</name>\n    <message>\n        <location filename=\"../main.cpp\" line=\"73\"/>\n        <source>Safe Mode</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../main.cpp\" line=\"73\"/>\n        <source>You&apos;re holding the CTRL key. Start theDesk in Safe Mode?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "desktop/translations/pl_PL.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"pl_PL\" sourcelanguage=\"en_US\">\n<context>\n    <name>About</name>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"165\"/>\n        <source>DISTRIBUTION</source>\n        <translation>DYSTRYBUCJA</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"182\"/>\n        <source>You&apos;re using</source>\n        <translation>Używasz</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"262\"/>\n        <source>Device Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"362\"/>\n        <source>Processor</source>\n        <translation>Procesor</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"248\"/>\n        <source>THIS DEVICE</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"276\"/>\n        <source>Available Memory</source>\n        <translation>Dostępna Pamięć</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"236\"/>\n        <source>Available Swap</source>\n        <translation>Dostępne Swap</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"307\"/>\n        <source>Qt Version</source>\n        <translation>Wesja Qt</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"255\"/>\n        <source>Kernel Version</source>\n        <translation>Wesrsja Kernel</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"297\"/>\n        <source>Change Device Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"269\"/>\n        <source>Window System</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"283\"/>\n        <source>Device Type</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"369\"/>\n        <source>Video</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"444\"/>\n        <source>Desktop Environment</source>\n        <translation>Pulpit</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"473\"/>\n        <source>Website</source>\n        <translation>Strona Internetowa</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"484\"/>\n        <source>File Bug</source>\n        <translation>Błąd Pliku</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"495\"/>\n        <source>Sources</source>\n        <translation>Żródła</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"506\"/>\n        <source>View Debug Log</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"463\"/>\n        <source>Acknowledgements</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"68\"/>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"69\"/>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"105\"/>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"167\"/>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"172\"/>\n        <source>Unknown</source>\n        <translation>Nieznany</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"117\"/>\n        <source>theDesk %1 - Blueprint</source>\n        <translation>Program theDesk %1 - Blueprint</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"118\"/>\n        <source>You compiled theDesk on %1</source>\n        <translation>Skompilowałeś theDesk na %1</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"120\"/>\n        <source>theDesk %1</source>\n        <translation>Program theDesk %1</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"124\"/>\n        <source>Copyright © Victor Tran %1. Licensed under the terms of the GNU General Public License, version 3 or later.</source>\n        <translation>Prawa Autorskie © Victor Tran %1. Licencjonowany na warunkach GNU General Public Licence, wersja 3 lub dalej.</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"35\"/>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"189\"/>\n        <source>About</source>\n        <translation>O</translation>\n    </message>\n</context>\n<context>\n    <name>Acknowledgements</name>\n    <message>\n        <location filename=\"../systemsettings/about/acknowledgements.ui\" line=\"35\"/>\n        <source>Acknowledgements</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>AppSearchProvider</name>\n    <message>\n        <location filename=\"../gateway/appsearchprovider.cpp\" line=\"151\"/>\n        <source>Application</source>\n        <translation type=\"unfinished\">Aplikacja</translation>\n    </message>\n</context>\n<context>\n    <name>AppSelectionModel</name>\n    <message>\n        <location filename=\"../gateway/appselectionmodel.cpp\" line=\"61\"/>\n        <source>Application</source>\n        <translation>Aplikacja</translation>\n    </message>\n</context>\n<context>\n    <name>Background</name>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"176\"/>\n        <source>Sorry, there was a problem displaying the background.</source>\n        <translation>Przepraszam, wystąpił problem z wyświetlaniem tła.</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"198\"/>\n        <source>Try Again</source>\n        <translation>Spróbuj Ponownie</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"379\"/>\n        <source>Background</source>\n        <translation>Tło</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"427\"/>\n        <source>IMAGE</source>\n        <translation>OBRAZ</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"434\"/>\n        <source>Select an image to display on your background and lock screen</source>\n        <translation>Wybierz obraz do wyświetlania na tle i ekranie blokady</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"522\"/>\n        <source>COMMUNITY BACKGROUNDS</source>\n        <translation>TŁA ZE SPOŁECZNOŚCI</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"529\"/>\n        <source>Images from the theDesk community will be cycled through every so often.</source>\n        <translation>Obrazy ze społeczności theDesk będą cyklicznie zmieniane.</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"536\"/>\n        <source>Show image information</source>\n        <translation>Wyświetl informacje o obrazie</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"584\"/>\n        <source>STRETCH</source>\n        <translation>STRETCH</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"591\"/>\n        <source>Select how you&apos;d like the background image to be sized</source>\n        <translation>Wybierz, w jaki sposób ma być zmieniany rozmiar obrazu tła</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"603\"/>\n        <source>Stretch To Fit</source>\n        <translation>Rozciągnij, aby dopasować</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"629\"/>\n        <source>Zoom and Crop</source>\n        <translation>Powiększanie i kadrowanie</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"655\"/>\n        <source>Center</source>\n        <translation>Środek</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"681\"/>\n        <source>Tile</source>\n        <translation>Efekt Płytek</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"707\"/>\n        <source>Zoom To Fit</source>\n        <translation>Powiększ, aby Dopasować</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"757\"/>\n        <source>Change Background</source>\n        <translation>Zmień Tło</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"765\"/>\n        <source>End Session</source>\n        <translation>Zakończ sesję</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"201\"/>\n        <source>by %1</source>\n        <translation>przez %1</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"299\"/>\n        <source>For desktop</source>\n        <translation>Dla tła pulpitu</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"331\"/>\n        <source>Select Background</source>\n        <translation>Wybierz Tło</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"370\"/>\n        <source>Set Background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"371\"/>\n        <source>Set as Desktop Background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"374\"/>\n        <source>Set as Lock Screen Background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"378\"/>\n        <source>Set for both</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>ChangeHostnamePopover</name>\n    <message>\n        <location filename=\"../systemsettings/about/changehostnamepopover.ui\" line=\"35\"/>\n        <source>Change Device Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/changehostnamepopover.ui\" line=\"62\"/>\n        <source>New Device Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/changehostnamepopover.ui\" line=\"69\"/>\n        <source>This device name is used over the network to identify this device. It is also used to identify this device over Bluetooth.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/changehostnamepopover.ui\" line=\"79\"/>\n        <source>Network Compatible Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/changehostnamepopover.ui\" line=\"95\"/>\n        <source>Rename this Device</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>ChunkContainer</name>\n    <message>\n        <location filename=\"../bar/chunkcontainer.ui\" line=\"41\"/>\n        <source>Open Status Center</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>CommandLine</name>\n    <message>\n        <location filename=\"../cli/commandline.cpp\" line=\"37\"/>\n        <source>Start theDesk in Safe Mode</source>\n        <translation>Startuj theDesk w trybie bezpieczeństwa</translation>\n    </message>\n    <message>\n        <location filename=\"../cli/commandline.cpp\" line=\"40\"/>\n        <source>Internal use; the path to a local socket to communicate with the session manager</source>\n        <translation>Wewnętrzny użytek; ścieżka do lokalnego gniazda do komunikacji z menedżerem sesji</translation>\n    </message>\n    <message>\n        <location filename=\"../cli/commandline.cpp\" line=\"40\"/>\n        <source>path</source>\n        <translation>ścieżka</translation>\n    </message>\n</context>\n<context>\n    <name>CurrentAppWidgetMenu</name>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.ui\" line=\"75\"/>\n        <source>Close Window</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.ui\" line=\"188\"/>\n        <source>QUIT IMMEDIATELY</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.ui\" line=\"204\"/>\n        <source>Cancel</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.cpp\" line=\"62\"/>\n        <source>Force Stop</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.cpp\" line=\"63\"/>\n        <location filename=\"../bar/currentappwidgetmenu.cpp\" line=\"65\"/>\n        <source>Force Stop %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.cpp\" line=\"64\"/>\n        <source>%1 will be forced to exit and won&apos;t have a chance to save any unsaved data.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>EndSession</name>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"57\"/>\n        <source>End Session</source>\n        <translation>Zakończ tą Sesje</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"115\"/>\n        <source>Power Off</source>\n        <translation>Wyłącz</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"122\"/>\n        <source>Turns off your computer.</source>\n        <translation>Wyłącza twój komputer.</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"134\"/>\n        <location filename=\"../session/endsession.ui\" line=\"369\"/>\n        <location filename=\"../session/endsession.cpp\" line=\"251\"/>\n        <source>Reboot</source>\n        <translation>Restartuj</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"141\"/>\n        <source>Turns off your computer and turns it on again</source>\n        <translation>Wyłacza twój komputer i ponownie włącza go</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"148\"/>\n        <source>Reboot and install updates</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"155\"/>\n        <source>Turns off your computer, installs pending updates and turns it on again</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"162\"/>\n        <source>Log Out</source>\n        <translation>Wyloguj</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"169\"/>\n        <source>Ends your session but keeps your computer on for other people to use</source>\n        <translation>Kończy sesję, ale utrzymuje komputer włączony, aby inni mogli z niego korzystać</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"176\"/>\n        <source>Suspend</source>\n        <translation>Zawieś</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"183\"/>\n        <source>Puts your computer in a low power state so it reopens quickly</source>\n        <translation>Przełącza komputer w stan niskiego zużycia energii, dzięki czemu szybko się ponownie otwiera</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"190\"/>\n        <source>Lock</source>\n        <translation>Zablokuj</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"197\"/>\n        <source>Locks your workspace with your password</source>\n        <translation>Blokuje obszar roboczy za pomocą hasła</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"204\"/>\n        <source>Turn Off Screen</source>\n        <translation>Wyłącz ekran</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"211\"/>\n        <source>Turns off the screen, but keeps everything else running in the background</source>\n        <translation>Wyłącza ekran, ale wszystko pozostaje działać w tle</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"218\"/>\n        <source>Switch Users</source>\n        <translation>Zamień Użytkownika</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"225\"/>\n        <source>Switches to the logon screen, but keeps your session in the background</source>\n        <translation>Przełącza na ekran logowania, ale utrzymuje twoją sesję w tle</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"232\"/>\n        <source>Hibernate</source>\n        <translation>Hibernacja</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"239\"/>\n        <source>Powers off your computer, but restores the session when powered back on</source>\n        <translation>Wyłącza komputer, ale przywraca sesję po ponownym włączeniu</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"334\"/>\n        <source>Updates are available. What do you want to do?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"349\"/>\n        <source>Reboot and update</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"356\"/>\n        <source>We&apos;ll perform system updates once this device has rebooted.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"376\"/>\n        <source>We&apos;ll reboot your device normally.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"109\"/>\n        <source>power off the system</source>\n        <translation>wyłącz system</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"110\"/>\n        <source>reboot the system</source>\n        <translation>zrestartuj system</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"111\"/>\n        <source>reboot the system and install any pending updates</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"112\"/>\n        <source>log you out</source>\n        <translation>wylogować się</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"113\"/>\n        <source>suspend the system</source>\n        <translation>zawiesić system</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"114\"/>\n        <source>lock the screen</source>\n        <translation>zablokuj ekran</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"115\"/>\n        <source>turn off the screen</source>\n        <translation>wyłącz ekran</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"116\"/>\n        <source>switch users</source>\n        <translation>przełącz użytkowników</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"117\"/>\n        <source>hibernate the system</source>\n        <translation>hibernuj system</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"250\"/>\n        <source>Advanced Reboot</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"260\"/>\n        <source>Reboot into System UEFI Setup</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"49\"/>\n        <source>Hey %1, ready to head out? We&apos;ll %2 in %n seconds if you don&apos;t do anything.</source>\n        <translation>Hej %1, gotowy do wyjścia? Otrzymamy %2 za %n sekund, jeśli nic nie zrobisz.</translation>\n    </message>\n</context>\n<context>\n    <name>MainGatewayWidget</name>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"57\"/>\n        <source>Gateway</source>\n        <translation>Brama</translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"150\"/>\n        <source>CATEGORIES</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"160\"/>\n        <source>All Apps</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"276\"/>\n        <source>Preparing the Gateway...</source>\n        <translation>Przygotowywanie Bramy...</translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"67\"/>\n        <source>Type to search...</source>\n        <translation>Wpisz aby wyszukać...</translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"192\"/>\n        <source>Status Center</source>\n        <translation type=\"unfinished\">Centrum Statusu</translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"391\"/>\n        <source>System Settings</source>\n        <translation type=\"unfinished\">Ustawienia Systemu</translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"407\"/>\n        <source>End Session</source>\n        <translation>Zakończ Sesje</translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"88\"/>\n        <source>A/V</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"89\"/>\n        <source>Development</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"90\"/>\n        <source>Education</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"91\"/>\n        <source>Games</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"92\"/>\n        <source>Graphics</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"93\"/>\n        <source>Networking</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"94\"/>\n        <source>Office</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"95\"/>\n        <source>Science</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"96\"/>\n        <source>Utilities</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"170\"/>\n        <source>Actions for %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>ManagePluginPopover</name>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"135\"/>\n        <source>ERROR DETAILS</source>\n        <translation>INFORMACJE O BŁĘDZIE</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"190\"/>\n        <source>ACTIONS</source>\n        <translation>AKCJA</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"199\"/>\n        <source>Activate Plugin</source>\n        <translation>Aktywuj wtyczkę</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"206\"/>\n        <source>Deactivate Plugin</source>\n        <translation>Dezaktywuj Wtyczkę</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"213\"/>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"276\"/>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"296\"/>\n        <source>Blacklist Plugin</source>\n        <translation>Umieść wtyczkę na czarnej liście</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"220\"/>\n        <source>Remove Plugin from Blacklist</source>\n        <translation>Usuń wtyczkę z czarnej listy</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"283\"/>\n        <source>Placing this plugin on the blacklist will prevent it from being loaded next time you log in. If the plugin is not already deactivated, we&apos;ll also deactivate it for you.</source>\n        <translation>Umieszczenie tej wtyczki na czarnej liście zapobiegnie jej wczytaniu przy następnym logowaniu. Jeśli wtyczka nie została jeszcze dezaktywowana, również ją dla Ciebie dezaktywujemy.</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.cpp\" line=\"43\"/>\n        <source>UUID: %1</source>\n        <translation>UUID: %1</translation>\n    </message>\n</context>\n<context>\n    <name>PluginManagement</name>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmanagement.ui\" line=\"35\"/>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmanagement.cpp\" line=\"72\"/>\n        <source>Plugins</source>\n        <translation>Wtyczki</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmanagement.ui\" line=\"75\"/>\n        <source>Plugins add core and extra functionality to theDesk.</source>\n        <translation>Wtyczki dodają główne i dodatkowe funkcje do theDesk.</translation>\n    </message>\n</context>\n<context>\n    <name>PluginModel</name>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmodel.cpp\" line=\"52\"/>\n        <source>Loaded</source>\n        <translation>Załadowane</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmodel.cpp\" line=\"54\"/>\n        <source>Blacklisted</source>\n        <translation>Na czarnej liście</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmodel.cpp\" line=\"56\"/>\n        <source>Unavailable</source>\n        <translation>Niedostępne</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmodel.cpp\" line=\"58\"/>\n        <source>Inactive</source>\n        <translation>Nieaktywny</translation>\n    </message>\n</context>\n<context>\n    <name>Recovery</name>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"35\"/>\n        <location filename=\"../systemsettings/recovery/recovery.cpp\" line=\"67\"/>\n        <source>Recovery</source>\n        <translation>Naprawa</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"113\"/>\n        <source>RESET THEDESK</source>\n        <translation>RESETUJ THEDESK</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"120\"/>\n        <source>If things aren&apos;t working correctly, resetting theDesk might help.\n\nHere&apos;s what will happen:\n- User settings will be cleared and reset to defaults\n- The next time you log into theDesk, you&apos;ll need to run through the setup again\n\nSave your documents and close all apps before starting the reset. This won&apos;t take long, but you&apos;ll need to log out to perform the reset. You won&apos;t be able to use your device while the reset is taking place.</source>\n        <translation>Jeśli coś nie działa poprawnie, resetowanie theDesk może pomóc.\n\nOto co się stanie:\n- Ustawienia użytkownika zostaną usunięte i przywrócone do wartości domyślnych\n- Następnym razem, gdy zalogujesz się do programu, będziesz musiał ponownie uruchomić konfigurację\n\nZapisz dokumenty i zamknij wszystkie aplikacje przed rozpoczęciem resetowania. To nie potrwa długo, ale musisz się wylogować, aby wykonać reset. Podczas resetowania nie będzie można korzystać z urządzenia.</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"138\"/>\n        <source>Log Out and Reset theDesk</source>\n        <translation>Wyloguj i resetuj theDesk</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"203\"/>\n        <source>RESET DEVICE</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"210\"/>\n        <source>If resetting theDesk didn&apos;t work, or if you just need a fresh start, you can reset this device.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"222\"/>\n        <source>Reset this device</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.cpp\" line=\"92\"/>\n        <source>%1, log out and reset theDesk settings? This action is irreversible.\n\nWe&apos;ll go ahead and reset your settings in %n seconds if you don&apos;t do anything.</source>\n        <translation>%1, wylogować i resetować ustawienia theDesk? To działanie jest nieodwracalne.\n\nPójdziemy i zresetujemy twoje ustawienia za %n sekund, jeśli nic nie zrobisz.</translation>\n    </message>\n</context>\n<context>\n    <name>RunDialog</name>\n    <message>\n        <location filename=\"../run/rundialog.ui\" line=\"35\"/>\n        <source>Run</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../run/rundialog.ui\" line=\"60\"/>\n        <source>Enter a command to run.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../run/rundialog.ui\" line=\"73\"/>\n        <source>Run this command</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>StatusCenterLeftPane</name>\n    <message>\n        <location filename=\"../statuscenter/statuscenterleftpane.ui\" line=\"54\"/>\n        <source>Status Center</source>\n        <translation>Centrum Statusu</translation>\n    </message>\n</context>\n<context>\n    <name>SystemSettings</name>\n    <message>\n        <location filename=\"../systemsettings/systemsettings.cpp\" line=\"190\"/>\n        <source>System Settings</source>\n        <translation>Ustawienia Systemu</translation>\n    </message>\n</context>\n<context>\n    <name>SystemSettingsLeftPane</name>\n    <message>\n        <location filename=\"../systemsettings/systemsettingsleftpane.ui\" line=\"35\"/>\n        <source>System Settings</source>\n        <translation>Ustawienia Systemu</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/systemsettingsleftpane.ui\" line=\"103\"/>\n        <source>LOG OUT</source>\n        <translation>WYLOGUJ</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/systemsettingsleftpane.ui\" line=\"110\"/>\n        <source>You&apos;ve changed some settings that require you to log out for them to apply completely</source>\n        <translation>Zmieniłeś niektóre ustawienia, które wymagają wylogowania, aby zostały całkowicie zastosowane</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/systemsettingsleftpane.ui\" line=\"135\"/>\n        <source>Log Out</source>\n        <translation>Wyloguj</translation>\n    </message>\n</context>\n<context>\n    <name>TaskbarApplicationWidget</name>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"153\"/>\n        <source>Move to desktop</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"150\"/>\n        <source>For %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"158\"/>\n        <source>All Desktops</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"176\"/>\n        <source>New Desktop</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"181\"/>\n        <source>Close</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"186\"/>\n        <source>For %n %1 windows</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n        </translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"188\"/>\n        <source>For %n windows</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n        </translation>\n    </message>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"190\"/>\n        <source>Close All</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>main</name>\n    <message>\n        <location filename=\"../main.cpp\" line=\"73\"/>\n        <source>Safe Mode</source>\n        <translation>Tryb bezpieczeństwa</translation>\n    </message>\n    <message>\n        <location filename=\"../main.cpp\" line=\"73\"/>\n        <source>You&apos;re holding the CTRL key. Start theDesk in Safe Mode?</source>\n        <translation>Trzymasz klawisz CTRL. Uruchomić theDesk w trybie awaryjnym?</translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "desktop/translations/pt_BR.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"pt_BR\" sourcelanguage=\"en_US\">\n<context>\n    <name>About</name>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"165\"/>\n        <source>DISTRIBUTION</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"182\"/>\n        <source>You&apos;re using</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"262\"/>\n        <source>Device Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"362\"/>\n        <source>Processor</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"248\"/>\n        <source>THIS DEVICE</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"276\"/>\n        <source>Available Memory</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"236\"/>\n        <source>Available Swap</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"307\"/>\n        <source>Qt Version</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"255\"/>\n        <source>Kernel Version</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"297\"/>\n        <source>Change Device Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"269\"/>\n        <source>Window System</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"283\"/>\n        <source>Device Type</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"369\"/>\n        <source>Video</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"444\"/>\n        <source>Desktop Environment</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"473\"/>\n        <source>Website</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"484\"/>\n        <source>File Bug</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"495\"/>\n        <source>Sources</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"506\"/>\n        <source>View Debug Log</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"463\"/>\n        <source>Acknowledgements</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"68\"/>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"69\"/>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"105\"/>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"167\"/>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"172\"/>\n        <source>Unknown</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"117\"/>\n        <source>theDesk %1 - Blueprint</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"118\"/>\n        <source>You compiled theDesk on %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"120\"/>\n        <source>theDesk %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"124\"/>\n        <source>Copyright © Victor Tran %1. Licensed under the terms of the GNU General Public License, version 3 or later.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"35\"/>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"189\"/>\n        <source>About</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>Acknowledgements</name>\n    <message>\n        <location filename=\"../systemsettings/about/acknowledgements.ui\" line=\"35\"/>\n        <source>Acknowledgements</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>AppSearchProvider</name>\n    <message>\n        <location filename=\"../gateway/appsearchprovider.cpp\" line=\"151\"/>\n        <source>Application</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>AppSelectionModel</name>\n    <message>\n        <location filename=\"../gateway/appselectionmodel.cpp\" line=\"61\"/>\n        <source>Application</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>Background</name>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"176\"/>\n        <source>Sorry, there was a problem displaying the background.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"198\"/>\n        <source>Try Again</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"379\"/>\n        <source>Background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"427\"/>\n        <source>IMAGE</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"434\"/>\n        <source>Select an image to display on your background and lock screen</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"522\"/>\n        <source>COMMUNITY BACKGROUNDS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"529\"/>\n        <source>Images from the theDesk community will be cycled through every so often.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"536\"/>\n        <source>Show image information</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"584\"/>\n        <source>STRETCH</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"591\"/>\n        <source>Select how you&apos;d like the background image to be sized</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"603\"/>\n        <source>Stretch To Fit</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"629\"/>\n        <source>Zoom and Crop</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"655\"/>\n        <source>Center</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"681\"/>\n        <source>Tile</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"707\"/>\n        <source>Zoom To Fit</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"757\"/>\n        <source>Change Background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"765\"/>\n        <source>End Session</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"201\"/>\n        <source>by %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"299\"/>\n        <source>For desktop</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"331\"/>\n        <source>Select Background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"370\"/>\n        <source>Set Background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"371\"/>\n        <source>Set as Desktop Background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"374\"/>\n        <source>Set as Lock Screen Background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"378\"/>\n        <source>Set for both</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>ChangeHostnamePopover</name>\n    <message>\n        <location filename=\"../systemsettings/about/changehostnamepopover.ui\" line=\"35\"/>\n        <source>Change Device Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/changehostnamepopover.ui\" line=\"62\"/>\n        <source>New Device Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/changehostnamepopover.ui\" line=\"69\"/>\n        <source>This device name is used over the network to identify this device. It is also used to identify this device over Bluetooth.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/changehostnamepopover.ui\" line=\"79\"/>\n        <source>Network Compatible Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/changehostnamepopover.ui\" line=\"95\"/>\n        <source>Rename this Device</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>ChunkContainer</name>\n    <message>\n        <location filename=\"../bar/chunkcontainer.ui\" line=\"41\"/>\n        <source>Open Status Center</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>CommandLine</name>\n    <message>\n        <location filename=\"../cli/commandline.cpp\" line=\"37\"/>\n        <source>Start theDesk in Safe Mode</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../cli/commandline.cpp\" line=\"40\"/>\n        <source>Internal use; the path to a local socket to communicate with the session manager</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../cli/commandline.cpp\" line=\"40\"/>\n        <source>path</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>CurrentAppWidgetMenu</name>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.ui\" line=\"75\"/>\n        <source>Close Window</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.ui\" line=\"188\"/>\n        <source>QUIT IMMEDIATELY</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.ui\" line=\"204\"/>\n        <source>Cancel</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.cpp\" line=\"62\"/>\n        <source>Force Stop</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.cpp\" line=\"63\"/>\n        <location filename=\"../bar/currentappwidgetmenu.cpp\" line=\"65\"/>\n        <source>Force Stop %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.cpp\" line=\"64\"/>\n        <source>%1 will be forced to exit and won&apos;t have a chance to save any unsaved data.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>EndSession</name>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"57\"/>\n        <source>End Session</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"115\"/>\n        <source>Power Off</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"122\"/>\n        <source>Turns off your computer.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"134\"/>\n        <location filename=\"../session/endsession.ui\" line=\"369\"/>\n        <location filename=\"../session/endsession.cpp\" line=\"251\"/>\n        <source>Reboot</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"141\"/>\n        <source>Turns off your computer and turns it on again</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"148\"/>\n        <source>Reboot and install updates</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"155\"/>\n        <source>Turns off your computer, installs pending updates and turns it on again</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"162\"/>\n        <source>Log Out</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"169\"/>\n        <source>Ends your session but keeps your computer on for other people to use</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"176\"/>\n        <source>Suspend</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"183\"/>\n        <source>Puts your computer in a low power state so it reopens quickly</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"190\"/>\n        <source>Lock</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"197\"/>\n        <source>Locks your workspace with your password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"204\"/>\n        <source>Turn Off Screen</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"211\"/>\n        <source>Turns off the screen, but keeps everything else running in the background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"218\"/>\n        <source>Switch Users</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"225\"/>\n        <source>Switches to the logon screen, but keeps your session in the background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"232\"/>\n        <source>Hibernate</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"239\"/>\n        <source>Powers off your computer, but restores the session when powered back on</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"334\"/>\n        <source>Updates are available. What do you want to do?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"349\"/>\n        <source>Reboot and update</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"356\"/>\n        <source>We&apos;ll perform system updates once this device has rebooted.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"376\"/>\n        <source>We&apos;ll reboot your device normally.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"109\"/>\n        <source>power off the system</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"110\"/>\n        <source>reboot the system</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"111\"/>\n        <source>reboot the system and install any pending updates</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"112\"/>\n        <source>log you out</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"113\"/>\n        <source>suspend the system</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"114\"/>\n        <source>lock the screen</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"115\"/>\n        <source>turn off the screen</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"116\"/>\n        <source>switch users</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"117\"/>\n        <source>hibernate the system</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"250\"/>\n        <source>Advanced Reboot</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"260\"/>\n        <source>Reboot into System UEFI Setup</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"49\"/>\n        <source>Hey %1, ready to head out? We&apos;ll %2 in %n seconds if you don&apos;t do anything.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>MainGatewayWidget</name>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"57\"/>\n        <source>Gateway</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"150\"/>\n        <source>CATEGORIES</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"160\"/>\n        <source>All Apps</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"276\"/>\n        <source>Preparing the Gateway...</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"67\"/>\n        <source>Type to search...</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"192\"/>\n        <source>Status Center</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"391\"/>\n        <source>System Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"407\"/>\n        <source>End Session</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"88\"/>\n        <source>A/V</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"89\"/>\n        <source>Development</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"90\"/>\n        <source>Education</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"91\"/>\n        <source>Games</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"92\"/>\n        <source>Graphics</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"93\"/>\n        <source>Networking</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"94\"/>\n        <source>Office</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"95\"/>\n        <source>Science</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"96\"/>\n        <source>Utilities</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"170\"/>\n        <source>Actions for %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>ManagePluginPopover</name>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"135\"/>\n        <source>ERROR DETAILS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"190\"/>\n        <source>ACTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"199\"/>\n        <source>Activate Plugin</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"206\"/>\n        <source>Deactivate Plugin</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"213\"/>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"276\"/>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"296\"/>\n        <source>Blacklist Plugin</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"220\"/>\n        <source>Remove Plugin from Blacklist</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"283\"/>\n        <source>Placing this plugin on the blacklist will prevent it from being loaded next time you log in. If the plugin is not already deactivated, we&apos;ll also deactivate it for you.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.cpp\" line=\"43\"/>\n        <source>UUID: %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>PluginManagement</name>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmanagement.ui\" line=\"35\"/>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmanagement.cpp\" line=\"72\"/>\n        <source>Plugins</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmanagement.ui\" line=\"75\"/>\n        <source>Plugins add core and extra functionality to theDesk.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>PluginModel</name>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmodel.cpp\" line=\"52\"/>\n        <source>Loaded</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmodel.cpp\" line=\"54\"/>\n        <source>Blacklisted</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmodel.cpp\" line=\"56\"/>\n        <source>Unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmodel.cpp\" line=\"58\"/>\n        <source>Inactive</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>Recovery</name>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"35\"/>\n        <location filename=\"../systemsettings/recovery/recovery.cpp\" line=\"67\"/>\n        <source>Recovery</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"113\"/>\n        <source>RESET THEDESK</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"120\"/>\n        <source>If things aren&apos;t working correctly, resetting theDesk might help.\n\nHere&apos;s what will happen:\n- User settings will be cleared and reset to defaults\n- The next time you log into theDesk, you&apos;ll need to run through the setup again\n\nSave your documents and close all apps before starting the reset. This won&apos;t take long, but you&apos;ll need to log out to perform the reset. You won&apos;t be able to use your device while the reset is taking place.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"138\"/>\n        <source>Log Out and Reset theDesk</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"203\"/>\n        <source>RESET DEVICE</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"210\"/>\n        <source>If resetting theDesk didn&apos;t work, or if you just need a fresh start, you can reset this device.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"222\"/>\n        <source>Reset this device</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.cpp\" line=\"92\"/>\n        <source>%1, log out and reset theDesk settings? This action is irreversible.\n\nWe&apos;ll go ahead and reset your settings in %n seconds if you don&apos;t do anything.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>RunDialog</name>\n    <message>\n        <location filename=\"../run/rundialog.ui\" line=\"35\"/>\n        <source>Run</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../run/rundialog.ui\" line=\"60\"/>\n        <source>Enter a command to run.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../run/rundialog.ui\" line=\"73\"/>\n        <source>Run this command</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>StatusCenterLeftPane</name>\n    <message>\n        <location filename=\"../statuscenter/statuscenterleftpane.ui\" line=\"54\"/>\n        <source>Status Center</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SystemSettings</name>\n    <message>\n        <location filename=\"../systemsettings/systemsettings.cpp\" line=\"190\"/>\n        <source>System Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SystemSettingsLeftPane</name>\n    <message>\n        <location filename=\"../systemsettings/systemsettingsleftpane.ui\" line=\"35\"/>\n        <source>System Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/systemsettingsleftpane.ui\" line=\"103\"/>\n        <source>LOG OUT</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/systemsettingsleftpane.ui\" line=\"110\"/>\n        <source>You&apos;ve changed some settings that require you to log out for them to apply completely</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/systemsettingsleftpane.ui\" line=\"135\"/>\n        <source>Log Out</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>TaskbarApplicationWidget</name>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"153\"/>\n        <source>Move to desktop</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"150\"/>\n        <source>For %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"158\"/>\n        <source>All Desktops</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"176\"/>\n        <source>New Desktop</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"181\"/>\n        <source>Close</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"186\"/>\n        <source>For %n %1 windows</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n        </translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"188\"/>\n        <source>For %n windows</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n        </translation>\n    </message>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"190\"/>\n        <source>Close All</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>main</name>\n    <message>\n        <location filename=\"../main.cpp\" line=\"73\"/>\n        <source>Safe Mode</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../main.cpp\" line=\"73\"/>\n        <source>You&apos;re holding the CTRL key. Start theDesk in Safe Mode?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "desktop/translations/ro_RO.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"ro_RO\" sourcelanguage=\"en_US\">\n<context>\n    <name>About</name>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"165\"/>\n        <source>DISTRIBUTION</source>\n        <translation>DISTRIBUȚIE</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"182\"/>\n        <source>You&apos;re using</source>\n        <translation>Folosiți</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"262\"/>\n        <source>Device Name</source>\n        <translation>Nume dispozitiv</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"362\"/>\n        <source>Processor</source>\n        <translation>Procesor</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"248\"/>\n        <source>THIS DEVICE</source>\n        <translation>ACEST DISPOZITIV</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"276\"/>\n        <source>Available Memory</source>\n        <translation>Memorie disponibilă</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"236\"/>\n        <source>Available Swap</source>\n        <translation>Memorie Swap disponibilă</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"307\"/>\n        <source>Qt Version</source>\n        <translation>Versiune Qt</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"255\"/>\n        <source>Kernel Version</source>\n        <translation>Versiune nucleu</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"297\"/>\n        <source>Change Device Name</source>\n        <translation>Schimbă numele dispozitivului</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"269\"/>\n        <source>Window System</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"283\"/>\n        <source>Device Type</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"369\"/>\n        <source>Video</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"444\"/>\n        <source>Desktop Environment</source>\n        <translation>Mediu desktop</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"473\"/>\n        <source>Website</source>\n        <translation>Site web</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"484\"/>\n        <source>File Bug</source>\n        <translation>Raportați o problemă</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"495\"/>\n        <source>Sources</source>\n        <translation>Surse</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"506\"/>\n        <source>View Debug Log</source>\n        <translation>Vizualizați jurnalul de depanare</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"463\"/>\n        <source>Acknowledgements</source>\n        <translation>Recunoașteri</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"68\"/>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"69\"/>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"105\"/>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"167\"/>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"172\"/>\n        <source>Unknown</source>\n        <translation>Necunoscut</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"117\"/>\n        <source>theDesk %1 - Blueprint</source>\n        <translation>theDesk %1 - Blueprint</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"118\"/>\n        <source>You compiled theDesk on %1</source>\n        <translation>Ați compilat theDesk pe data de %1</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"120\"/>\n        <source>theDesk %1</source>\n        <translation>theDesk %1</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"124\"/>\n        <source>Copyright © Victor Tran %1. Licensed under the terms of the GNU General Public License, version 3 or later.</source>\n        <translation>Copyright © Victor Tran %1. Licențiat sub termenii licenței GNU General Public Licence, versiunea 3 sau ulterioară.</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"35\"/>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"189\"/>\n        <source>About</source>\n        <translation>Despre</translation>\n    </message>\n</context>\n<context>\n    <name>Acknowledgements</name>\n    <message>\n        <location filename=\"../systemsettings/about/acknowledgements.ui\" line=\"35\"/>\n        <source>Acknowledgements</source>\n        <translation>Mulțumiri</translation>\n    </message>\n</context>\n<context>\n    <name>AppSearchProvider</name>\n    <message>\n        <location filename=\"../gateway/appsearchprovider.cpp\" line=\"151\"/>\n        <source>Application</source>\n        <translation>Aplicație</translation>\n    </message>\n</context>\n<context>\n    <name>AppSelectionModel</name>\n    <message>\n        <location filename=\"../gateway/appselectionmodel.cpp\" line=\"61\"/>\n        <source>Application</source>\n        <translation>Aplicația</translation>\n    </message>\n</context>\n<context>\n    <name>Background</name>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"176\"/>\n        <source>Sorry, there was a problem displaying the background.</source>\n        <translation>Ne pare rău, a intervenit o problemă la afișarea acestui fundal.</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"198\"/>\n        <source>Try Again</source>\n        <translation>Reîncercați</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"379\"/>\n        <source>Background</source>\n        <translation>Fundal</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"427\"/>\n        <source>IMAGE</source>\n        <translation>IMAGINE</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"434\"/>\n        <source>Select an image to display on your background and lock screen</source>\n        <translation>Selectați o imagine pentru a fi folosită ca și fundalul desktopului și al ecranului de blocare</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"522\"/>\n        <source>COMMUNITY BACKGROUNDS</source>\n        <translation>Fundaluri create de comunitate</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"529\"/>\n        <source>Images from the theDesk community will be cycled through every so often.</source>\n        <translation>Imaginile din comunitatea theDesk vor fi schimbate din când în când.</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"536\"/>\n        <source>Show image information</source>\n        <translation>Arată informații despre imagini</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"584\"/>\n        <source>STRETCH</source>\n        <translation>ÎNTINDERE</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"591\"/>\n        <source>Select how you&apos;d like the background image to be sized</source>\n        <translation>Selectați cum ați dori să fie afișată imaginea de fundal</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"603\"/>\n        <source>Stretch To Fit</source>\n        <translation>Întinsă până la potrivire</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"629\"/>\n        <source>Zoom and Crop</source>\n        <translation>Mărită și decupată</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"655\"/>\n        <source>Center</source>\n        <translation>Centrată</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"681\"/>\n        <source>Tile</source>\n        <translation>În mozaic</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"707\"/>\n        <source>Zoom To Fit</source>\n        <translation>Mărită până se potrivește</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"757\"/>\n        <source>Change Background</source>\n        <translation>Schimbă fundalul</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"765\"/>\n        <source>End Session</source>\n        <translation>Închide sesiunea</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"201\"/>\n        <source>by %1</source>\n        <translation>de %1</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"299\"/>\n        <source>For desktop</source>\n        <translation>Pentru desktop</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"331\"/>\n        <source>Select Background</source>\n        <translation>Selectați fundalul</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"370\"/>\n        <source>Set Background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"371\"/>\n        <source>Set as Desktop Background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"374\"/>\n        <source>Set as Lock Screen Background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"378\"/>\n        <source>Set for both</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>ChangeHostnamePopover</name>\n    <message>\n        <location filename=\"../systemsettings/about/changehostnamepopover.ui\" line=\"35\"/>\n        <source>Change Device Name</source>\n        <translation>Schimbă numele dispozitivului</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/changehostnamepopover.ui\" line=\"62\"/>\n        <source>New Device Name</source>\n        <translation>Noul nume al dispozitivului</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/changehostnamepopover.ui\" line=\"69\"/>\n        <source>This device name is used over the network to identify this device. It is also used to identify this device over Bluetooth.</source>\n        <translation>Numele acesta este folosit pentru a identifica dispozitivul în rețea cât și prin Bluetooth.</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/changehostnamepopover.ui\" line=\"79\"/>\n        <source>Network Compatible Name</source>\n        <translation>Nume compatibil în rețea</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/changehostnamepopover.ui\" line=\"95\"/>\n        <source>Rename this Device</source>\n        <translation>Redenumește dispozitivul</translation>\n    </message>\n</context>\n<context>\n    <name>ChunkContainer</name>\n    <message>\n        <location filename=\"../bar/chunkcontainer.ui\" line=\"41\"/>\n        <source>Open Status Center</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>CommandLine</name>\n    <message>\n        <location filename=\"../cli/commandline.cpp\" line=\"37\"/>\n        <source>Start theDesk in Safe Mode</source>\n        <translation>Porniți theDesk în modul de siguranță</translation>\n    </message>\n    <message>\n        <location filename=\"../cli/commandline.cpp\" line=\"40\"/>\n        <source>Internal use; the path to a local socket to communicate with the session manager</source>\n        <translation>Uz intern; calea către un socket local de comunicare cu managerul de sesiune</translation>\n    </message>\n    <message>\n        <location filename=\"../cli/commandline.cpp\" line=\"40\"/>\n        <source>path</source>\n        <translation>cale</translation>\n    </message>\n</context>\n<context>\n    <name>CurrentAppWidgetMenu</name>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.ui\" line=\"75\"/>\n        <source>Close Window</source>\n        <translation>Închide fereastra</translation>\n    </message>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.ui\" line=\"188\"/>\n        <source>QUIT IMMEDIATELY</source>\n        <translation>TERMINĂ IMEDIAT</translation>\n    </message>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.ui\" line=\"204\"/>\n        <source>Cancel</source>\n        <translation>Anulare</translation>\n    </message>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.cpp\" line=\"62\"/>\n        <source>Force Stop</source>\n        <translation>Termină forțat</translation>\n    </message>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.cpp\" line=\"63\"/>\n        <location filename=\"../bar/currentappwidgetmenu.cpp\" line=\"65\"/>\n        <source>Force Stop %1</source>\n        <translation>Termină forțat %1</translation>\n    </message>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.cpp\" line=\"64\"/>\n        <source>%1 will be forced to exit and won&apos;t have a chance to save any unsaved data.</source>\n        <translation>%1 va fi terminat forțat, iar toate datele nesalvate vor fi pierdute.</translation>\n    </message>\n</context>\n<context>\n    <name>EndSession</name>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"57\"/>\n        <source>End Session</source>\n        <translation>Închide sesiunea</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"115\"/>\n        <source>Power Off</source>\n        <translation>Oprire</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"122\"/>\n        <source>Turns off your computer.</source>\n        <translation>Oprește calculatorul.</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"134\"/>\n        <location filename=\"../session/endsession.ui\" line=\"369\"/>\n        <location filename=\"../session/endsession.cpp\" line=\"251\"/>\n        <source>Reboot</source>\n        <translation>Repornire</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"141\"/>\n        <source>Turns off your computer and turns it on again</source>\n        <translation>Orpește calculatorul și îl pornește din nou</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"148\"/>\n        <source>Reboot and install updates</source>\n        <translation>Repornește și instalează actualizările</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"155\"/>\n        <source>Turns off your computer, installs pending updates and turns it on again</source>\n        <translation>Oprește calculatorul, instalează actualizările în așteptare și îl pornește din nou</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"162\"/>\n        <source>Log Out</source>\n        <translation>Deconectare</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"169\"/>\n        <source>Ends your session but keeps your computer on for other people to use</source>\n        <translation>Închide sesiunea dvs, dar menține calculatorul pornit pentru a putea fi folosit de alte persoane</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"176\"/>\n        <source>Suspend</source>\n        <translation>Suspendă</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"183\"/>\n        <source>Puts your computer in a low power state so it reopens quickly</source>\n        <translation>Pune calculatorul dvs într-o stare de consum redus, pentru redeschidere rapidă</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"190\"/>\n        <source>Lock</source>\n        <translation>Blocare</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"197\"/>\n        <source>Locks your workspace with your password</source>\n        <translation>Blochează spațiul dvs de lucru cu parola dvs</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"204\"/>\n        <source>Turn Off Screen</source>\n        <translation>Închide ecranul</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"211\"/>\n        <source>Turns off the screen, but keeps everything else running in the background</source>\n        <translation>Închide ecranul, dar menține programele deschise</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"218\"/>\n        <source>Switch Users</source>\n        <translation>Schimbă utilizatorul</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"225\"/>\n        <source>Switches to the logon screen, but keeps your session in the background</source>\n        <translation>Trece la ecranul de conectare, punând sesiunea curentă în fundal</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"232\"/>\n        <source>Hibernate</source>\n        <translation>Hibernare</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"239\"/>\n        <source>Powers off your computer, but restores the session when powered back on</source>\n        <translation>Oprește calculatorul, dar va restaura această sesiune la următoarea pornire</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"334\"/>\n        <source>Updates are available. What do you want to do?</source>\n        <translation type=\"unfinished\">Sunt disponibile actualizări. Cum doriți să procedați?</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"349\"/>\n        <source>Reboot and update</source>\n        <translation>Repornește și actualizează</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"356\"/>\n        <source>We&apos;ll perform system updates once this device has rebooted.</source>\n        <translation type=\"unfinished\">Vom aplica actualizările de îndată ce sistemul va reporni.</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"376\"/>\n        <source>We&apos;ll reboot your device normally.</source>\n        <translation>Dispozitivul va reporni ca de obicei.</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"109\"/>\n        <source>power off the system</source>\n        <translation>opri sistemul</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"110\"/>\n        <source>reboot the system</source>\n        <translation>reporni sistemul</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"111\"/>\n        <source>reboot the system and install any pending updates</source>\n        <translation>reporni sistemul și vom instala actualizările în așteptare</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"112\"/>\n        <source>log you out</source>\n        <translation>deconecta</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"113\"/>\n        <source>suspend the system</source>\n        <translation>suspenda sistemul</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"114\"/>\n        <source>lock the screen</source>\n        <translation>închide ecranul</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"115\"/>\n        <source>turn off the screen</source>\n        <translation>opri ecranul</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"116\"/>\n        <source>switch users</source>\n        <translation>schimba utilizatorul</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"117\"/>\n        <source>hibernate the system</source>\n        <translation>hibernăm sistemul</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"250\"/>\n        <source>Advanced Reboot</source>\n        <translation>Repornire avansată</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"260\"/>\n        <source>Reboot into System UEFI Setup</source>\n        <translation>Repornește în configurările UEFI ale sistemului</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"49\"/>\n        <source>Hey %1, ready to head out? We&apos;ll %2 in %n seconds if you don&apos;t do anything.</source>\n        <translation>%1, sunteți gata de plecare? O să %2 în %n secunde dacă nu faceți nimic.</translation>\n    </message>\n</context>\n<context>\n    <name>MainGatewayWidget</name>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"57\"/>\n        <source>Gateway</source>\n        <translation>Portal</translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"150\"/>\n        <source>CATEGORIES</source>\n        <translation>CATEGORII</translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"160\"/>\n        <source>All Apps</source>\n        <translation>Toate aplicațiile</translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"276\"/>\n        <source>Preparing the Gateway...</source>\n        <translation>Pregătim portalul...</translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"67\"/>\n        <source>Type to search...</source>\n        <translation>Tastați pentru a căuta...</translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"192\"/>\n        <source>Status Center</source>\n        <translation>Centrul de stare</translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"391\"/>\n        <source>System Settings</source>\n        <translation>Configurări de sistem</translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"407\"/>\n        <source>End Session</source>\n        <translation>Închide sesiunea</translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"88\"/>\n        <source>A/V</source>\n        <translation>Audio/Video</translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"89\"/>\n        <source>Development</source>\n        <translation>Dezvoltare</translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"90\"/>\n        <source>Education</source>\n        <translation>Educație</translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"91\"/>\n        <source>Games</source>\n        <translation>Jocuri</translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"92\"/>\n        <source>Graphics</source>\n        <translation>Grafică</translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"93\"/>\n        <source>Networking</source>\n        <translation>Rețelistică</translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"94\"/>\n        <source>Office</source>\n        <translation>Birou</translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"95\"/>\n        <source>Science</source>\n        <translation>Știință</translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"96\"/>\n        <source>Utilities</source>\n        <translation>Utilitare</translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"170\"/>\n        <source>Actions for %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>ManagePluginPopover</name>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"135\"/>\n        <source>ERROR DETAILS</source>\n        <translation>DETALII EROARE</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"190\"/>\n        <source>ACTIONS</source>\n        <translation>ACȚIUNI</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"199\"/>\n        <source>Activate Plugin</source>\n        <translation>Activează extensia</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"206\"/>\n        <source>Deactivate Plugin</source>\n        <translation>Dezactivează extensia</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"213\"/>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"276\"/>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"296\"/>\n        <source>Blacklist Plugin</source>\n        <translation>Pune extensia pe lista neagră</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"220\"/>\n        <source>Remove Plugin from Blacklist</source>\n        <translation>Elimină extensia de pe lista neagră</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"283\"/>\n        <source>Placing this plugin on the blacklist will prevent it from being loaded next time you log in. If the plugin is not already deactivated, we&apos;ll also deactivate it for you.</source>\n        <translation>Plasarea acestei extensii pe lista neagră va împiedica pornirea sa la următoarea conectare. Extensia va fi dezactivată dacă nu este deja.</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.cpp\" line=\"43\"/>\n        <source>UUID: %1</source>\n        <translation>UUID: %1</translation>\n    </message>\n</context>\n<context>\n    <name>PluginManagement</name>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmanagement.ui\" line=\"35\"/>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmanagement.cpp\" line=\"72\"/>\n        <source>Plugins</source>\n        <translation>Extensii</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmanagement.ui\" line=\"75\"/>\n        <source>Plugins add core and extra functionality to theDesk.</source>\n        <translation>Extensiile activează funcționalitățile theDesk și/sau adaugă unele noi.</translation>\n    </message>\n</context>\n<context>\n    <name>PluginModel</name>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmodel.cpp\" line=\"52\"/>\n        <source>Loaded</source>\n        <translation>În funcțiune</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmodel.cpp\" line=\"54\"/>\n        <source>Blacklisted</source>\n        <translation>Pe lista neagră</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmodel.cpp\" line=\"56\"/>\n        <source>Unavailable</source>\n        <translation>Indisponibilă</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmodel.cpp\" line=\"58\"/>\n        <source>Inactive</source>\n        <translation>Inactivă</translation>\n    </message>\n</context>\n<context>\n    <name>Recovery</name>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"35\"/>\n        <location filename=\"../systemsettings/recovery/recovery.cpp\" line=\"67\"/>\n        <source>Recovery</source>\n        <translation>Recuperare</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"113\"/>\n        <source>RESET THEDESK</source>\n        <translation>RESETEAZĂ THEDESK</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"120\"/>\n        <source>If things aren&apos;t working correctly, resetting theDesk might help.\n\nHere&apos;s what will happen:\n- User settings will be cleared and reset to defaults\n- The next time you log into theDesk, you&apos;ll need to run through the setup again\n\nSave your documents and close all apps before starting the reset. This won&apos;t take long, but you&apos;ll need to log out to perform the reset. You won&apos;t be able to use your device while the reset is taking place.</source>\n        <translation>Dacă lucrurile nu merg cum trebuie puteți reseta theDesk.\n\nCe se va întâmpla:\n- Setările dumneavoastră vor fi readuse la cele din fabrică\n- Atunci când vă veți conecta din nou în theDesk, va trebui să treceți prin procedura de configurare din nou\n\nSalvați-vă documentele și închideți toate aplicațiile deschise înainte de a începe. Resetarea nu va dura mult, dar va trebui să vă deconectați pentru a executa operațiunea. Nu vă veți putea folosi sistemul în timp ce se restaurează.</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"138\"/>\n        <source>Log Out and Reset theDesk</source>\n        <translation>Deconectați-vă și resetați theDesk</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"203\"/>\n        <source>RESET DEVICE</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"210\"/>\n        <source>If resetting theDesk didn&apos;t work, or if you just need a fresh start, you can reset this device.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"222\"/>\n        <source>Reset this device</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.cpp\" line=\"92\"/>\n        <source>%1, log out and reset theDesk settings? This action is irreversible.\n\nWe&apos;ll go ahead and reset your settings in %n seconds if you don&apos;t do anything.</source>\n        <translation>%1, doriți să vă deconectați și să resetați theDesk? Această acțiune este ireversibilă.\n\nO să continuăm cu resetarea în %n secunde dacă nu faceți nimic.</translation>\n    </message>\n</context>\n<context>\n    <name>RunDialog</name>\n    <message>\n        <location filename=\"../run/rundialog.ui\" line=\"35\"/>\n        <source>Run</source>\n        <translation type=\"unfinished\">Execută</translation>\n    </message>\n    <message>\n        <location filename=\"../run/rundialog.ui\" line=\"60\"/>\n        <source>Enter a command to run.</source>\n        <translation>Introduceți o comandă pentru a fi executată.</translation>\n    </message>\n    <message>\n        <location filename=\"../run/rundialog.ui\" line=\"73\"/>\n        <source>Run this command</source>\n        <translation>Executați această comandă</translation>\n    </message>\n</context>\n<context>\n    <name>StatusCenterLeftPane</name>\n    <message>\n        <location filename=\"../statuscenter/statuscenterleftpane.ui\" line=\"54\"/>\n        <source>Status Center</source>\n        <translation>Centrul de stare</translation>\n    </message>\n</context>\n<context>\n    <name>SystemSettings</name>\n    <message>\n        <location filename=\"../systemsettings/systemsettings.cpp\" line=\"190\"/>\n        <source>System Settings</source>\n        <translation>Configurări de sistem</translation>\n    </message>\n</context>\n<context>\n    <name>SystemSettingsLeftPane</name>\n    <message>\n        <location filename=\"../systemsettings/systemsettingsleftpane.ui\" line=\"35\"/>\n        <source>System Settings</source>\n        <translation>Configurări de sistem</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/systemsettingsleftpane.ui\" line=\"103\"/>\n        <source>LOG OUT</source>\n        <translation type=\"unfinished\">DECONECTARE</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/systemsettingsleftpane.ui\" line=\"110\"/>\n        <source>You&apos;ve changed some settings that require you to log out for them to apply completely</source>\n        <translation>Ați schimbat niște setări ce necesită să vă deconectați pentru a se putea aplica în totalitate</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/systemsettingsleftpane.ui\" line=\"135\"/>\n        <source>Log Out</source>\n        <translation>Deconectare</translation>\n    </message>\n</context>\n<context>\n    <name>TaskbarApplicationWidget</name>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"153\"/>\n        <source>Move to desktop</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"150\"/>\n        <source>For %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"158\"/>\n        <source>All Desktops</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"176\"/>\n        <source>New Desktop</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"181\"/>\n        <source>Close</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"186\"/>\n        <source>For %n %1 windows</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n        </translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"188\"/>\n        <source>For %n windows</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n        </translation>\n    </message>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"190\"/>\n        <source>Close All</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>main</name>\n    <message>\n        <location filename=\"../main.cpp\" line=\"73\"/>\n        <source>Safe Mode</source>\n        <translation>Modul de siguranță</translation>\n    </message>\n    <message>\n        <location filename=\"../main.cpp\" line=\"73\"/>\n        <source>You&apos;re holding the CTRL key. Start theDesk in Safe Mode?</source>\n        <translation>Țineți apăsata tasta CTRL. Porniți theDesk în modul de siguranță?</translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "desktop/translations/sv.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"sv\" sourcelanguage=\"en_US\">\n<context>\n    <name>About</name>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"165\"/>\n        <source>DISTRIBUTION</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"182\"/>\n        <source>You&apos;re using</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"262\"/>\n        <source>Device Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"362\"/>\n        <source>Processor</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"248\"/>\n        <source>THIS DEVICE</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"276\"/>\n        <source>Available Memory</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"236\"/>\n        <source>Available Swap</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"307\"/>\n        <source>Qt Version</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"255\"/>\n        <source>Kernel Version</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"297\"/>\n        <source>Change Device Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"269\"/>\n        <source>Window System</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"283\"/>\n        <source>Device Type</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"369\"/>\n        <source>Video</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"444\"/>\n        <source>Desktop Environment</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"473\"/>\n        <source>Website</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"484\"/>\n        <source>File Bug</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"495\"/>\n        <source>Sources</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"506\"/>\n        <source>View Debug Log</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"463\"/>\n        <source>Acknowledgements</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"68\"/>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"69\"/>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"105\"/>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"167\"/>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"172\"/>\n        <source>Unknown</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"117\"/>\n        <source>theDesk %1 - Blueprint</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"118\"/>\n        <source>You compiled theDesk on %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"120\"/>\n        <source>theDesk %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"124\"/>\n        <source>Copyright © Victor Tran %1. Licensed under the terms of the GNU General Public License, version 3 or later.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"35\"/>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"189\"/>\n        <source>About</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>Acknowledgements</name>\n    <message>\n        <location filename=\"../systemsettings/about/acknowledgements.ui\" line=\"35\"/>\n        <source>Acknowledgements</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>AppSearchProvider</name>\n    <message>\n        <location filename=\"../gateway/appsearchprovider.cpp\" line=\"151\"/>\n        <source>Application</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>AppSelectionModel</name>\n    <message>\n        <location filename=\"../gateway/appselectionmodel.cpp\" line=\"61\"/>\n        <source>Application</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>Background</name>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"176\"/>\n        <source>Sorry, there was a problem displaying the background.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"198\"/>\n        <source>Try Again</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"379\"/>\n        <source>Background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"427\"/>\n        <source>IMAGE</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"434\"/>\n        <source>Select an image to display on your background and lock screen</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"522\"/>\n        <source>COMMUNITY BACKGROUNDS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"529\"/>\n        <source>Images from the theDesk community will be cycled through every so often.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"536\"/>\n        <source>Show image information</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"584\"/>\n        <source>STRETCH</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"591\"/>\n        <source>Select how you&apos;d like the background image to be sized</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"603\"/>\n        <source>Stretch To Fit</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"629\"/>\n        <source>Zoom and Crop</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"655\"/>\n        <source>Center</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"681\"/>\n        <source>Tile</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"707\"/>\n        <source>Zoom To Fit</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"757\"/>\n        <source>Change Background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"765\"/>\n        <source>End Session</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"201\"/>\n        <source>by %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"299\"/>\n        <source>For desktop</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"331\"/>\n        <source>Select Background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"370\"/>\n        <source>Set Background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"371\"/>\n        <source>Set as Desktop Background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"374\"/>\n        <source>Set as Lock Screen Background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"378\"/>\n        <source>Set for both</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>ChangeHostnamePopover</name>\n    <message>\n        <location filename=\"../systemsettings/about/changehostnamepopover.ui\" line=\"35\"/>\n        <source>Change Device Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/changehostnamepopover.ui\" line=\"62\"/>\n        <source>New Device Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/changehostnamepopover.ui\" line=\"69\"/>\n        <source>This device name is used over the network to identify this device. It is also used to identify this device over Bluetooth.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/changehostnamepopover.ui\" line=\"79\"/>\n        <source>Network Compatible Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/changehostnamepopover.ui\" line=\"95\"/>\n        <source>Rename this Device</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>ChunkContainer</name>\n    <message>\n        <location filename=\"../bar/chunkcontainer.ui\" line=\"41\"/>\n        <source>Open Status Center</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>CommandLine</name>\n    <message>\n        <location filename=\"../cli/commandline.cpp\" line=\"37\"/>\n        <source>Start theDesk in Safe Mode</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../cli/commandline.cpp\" line=\"40\"/>\n        <source>Internal use; the path to a local socket to communicate with the session manager</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../cli/commandline.cpp\" line=\"40\"/>\n        <source>path</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>CurrentAppWidgetMenu</name>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.ui\" line=\"75\"/>\n        <source>Close Window</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.ui\" line=\"188\"/>\n        <source>QUIT IMMEDIATELY</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.ui\" line=\"204\"/>\n        <source>Cancel</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.cpp\" line=\"62\"/>\n        <source>Force Stop</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.cpp\" line=\"63\"/>\n        <location filename=\"../bar/currentappwidgetmenu.cpp\" line=\"65\"/>\n        <source>Force Stop %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.cpp\" line=\"64\"/>\n        <source>%1 will be forced to exit and won&apos;t have a chance to save any unsaved data.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>EndSession</name>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"57\"/>\n        <source>End Session</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"115\"/>\n        <source>Power Off</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"122\"/>\n        <source>Turns off your computer.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"134\"/>\n        <location filename=\"../session/endsession.ui\" line=\"369\"/>\n        <location filename=\"../session/endsession.cpp\" line=\"251\"/>\n        <source>Reboot</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"141\"/>\n        <source>Turns off your computer and turns it on again</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"148\"/>\n        <source>Reboot and install updates</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"155\"/>\n        <source>Turns off your computer, installs pending updates and turns it on again</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"162\"/>\n        <source>Log Out</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"169\"/>\n        <source>Ends your session but keeps your computer on for other people to use</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"176\"/>\n        <source>Suspend</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"183\"/>\n        <source>Puts your computer in a low power state so it reopens quickly</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"190\"/>\n        <source>Lock</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"197\"/>\n        <source>Locks your workspace with your password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"204\"/>\n        <source>Turn Off Screen</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"211\"/>\n        <source>Turns off the screen, but keeps everything else running in the background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"218\"/>\n        <source>Switch Users</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"225\"/>\n        <source>Switches to the logon screen, but keeps your session in the background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"232\"/>\n        <source>Hibernate</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"239\"/>\n        <source>Powers off your computer, but restores the session when powered back on</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"334\"/>\n        <source>Updates are available. What do you want to do?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"349\"/>\n        <source>Reboot and update</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"356\"/>\n        <source>We&apos;ll perform system updates once this device has rebooted.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"376\"/>\n        <source>We&apos;ll reboot your device normally.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"109\"/>\n        <source>power off the system</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"110\"/>\n        <source>reboot the system</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"111\"/>\n        <source>reboot the system and install any pending updates</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"112\"/>\n        <source>log you out</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"113\"/>\n        <source>suspend the system</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"114\"/>\n        <source>lock the screen</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"115\"/>\n        <source>turn off the screen</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"116\"/>\n        <source>switch users</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"117\"/>\n        <source>hibernate the system</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"250\"/>\n        <source>Advanced Reboot</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"260\"/>\n        <source>Reboot into System UEFI Setup</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"49\"/>\n        <source>Hey %1, ready to head out? We&apos;ll %2 in %n seconds if you don&apos;t do anything.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>MainGatewayWidget</name>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"57\"/>\n        <source>Gateway</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"150\"/>\n        <source>CATEGORIES</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"160\"/>\n        <source>All Apps</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"276\"/>\n        <source>Preparing the Gateway...</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"67\"/>\n        <source>Type to search...</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"192\"/>\n        <source>Status Center</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"391\"/>\n        <source>System Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"407\"/>\n        <source>End Session</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"88\"/>\n        <source>A/V</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"89\"/>\n        <source>Development</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"90\"/>\n        <source>Education</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"91\"/>\n        <source>Games</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"92\"/>\n        <source>Graphics</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"93\"/>\n        <source>Networking</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"94\"/>\n        <source>Office</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"95\"/>\n        <source>Science</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"96\"/>\n        <source>Utilities</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"170\"/>\n        <source>Actions for %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>ManagePluginPopover</name>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"135\"/>\n        <source>ERROR DETAILS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"190\"/>\n        <source>ACTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"199\"/>\n        <source>Activate Plugin</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"206\"/>\n        <source>Deactivate Plugin</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"213\"/>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"276\"/>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"296\"/>\n        <source>Blacklist Plugin</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"220\"/>\n        <source>Remove Plugin from Blacklist</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"283\"/>\n        <source>Placing this plugin on the blacklist will prevent it from being loaded next time you log in. If the plugin is not already deactivated, we&apos;ll also deactivate it for you.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.cpp\" line=\"43\"/>\n        <source>UUID: %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>PluginManagement</name>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmanagement.ui\" line=\"35\"/>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmanagement.cpp\" line=\"72\"/>\n        <source>Plugins</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmanagement.ui\" line=\"75\"/>\n        <source>Plugins add core and extra functionality to theDesk.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>PluginModel</name>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmodel.cpp\" line=\"52\"/>\n        <source>Loaded</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmodel.cpp\" line=\"54\"/>\n        <source>Blacklisted</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmodel.cpp\" line=\"56\"/>\n        <source>Unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmodel.cpp\" line=\"58\"/>\n        <source>Inactive</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>Recovery</name>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"35\"/>\n        <location filename=\"../systemsettings/recovery/recovery.cpp\" line=\"67\"/>\n        <source>Recovery</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"113\"/>\n        <source>RESET THEDESK</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"120\"/>\n        <source>If things aren&apos;t working correctly, resetting theDesk might help.\n\nHere&apos;s what will happen:\n- User settings will be cleared and reset to defaults\n- The next time you log into theDesk, you&apos;ll need to run through the setup again\n\nSave your documents and close all apps before starting the reset. This won&apos;t take long, but you&apos;ll need to log out to perform the reset. You won&apos;t be able to use your device while the reset is taking place.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"138\"/>\n        <source>Log Out and Reset theDesk</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"203\"/>\n        <source>RESET DEVICE</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"210\"/>\n        <source>If resetting theDesk didn&apos;t work, or if you just need a fresh start, you can reset this device.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"222\"/>\n        <source>Reset this device</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.cpp\" line=\"92\"/>\n        <source>%1, log out and reset theDesk settings? This action is irreversible.\n\nWe&apos;ll go ahead and reset your settings in %n seconds if you don&apos;t do anything.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>RunDialog</name>\n    <message>\n        <location filename=\"../run/rundialog.ui\" line=\"35\"/>\n        <source>Run</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../run/rundialog.ui\" line=\"60\"/>\n        <source>Enter a command to run.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../run/rundialog.ui\" line=\"73\"/>\n        <source>Run this command</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>StatusCenterLeftPane</name>\n    <message>\n        <location filename=\"../statuscenter/statuscenterleftpane.ui\" line=\"54\"/>\n        <source>Status Center</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SystemSettings</name>\n    <message>\n        <location filename=\"../systemsettings/systemsettings.cpp\" line=\"190\"/>\n        <source>System Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SystemSettingsLeftPane</name>\n    <message>\n        <location filename=\"../systemsettings/systemsettingsleftpane.ui\" line=\"35\"/>\n        <source>System Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/systemsettingsleftpane.ui\" line=\"103\"/>\n        <source>LOG OUT</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/systemsettingsleftpane.ui\" line=\"110\"/>\n        <source>You&apos;ve changed some settings that require you to log out for them to apply completely</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/systemsettingsleftpane.ui\" line=\"135\"/>\n        <source>Log Out</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>TaskbarApplicationWidget</name>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"153\"/>\n        <source>Move to desktop</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"150\"/>\n        <source>For %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"158\"/>\n        <source>All Desktops</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"176\"/>\n        <source>New Desktop</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"181\"/>\n        <source>Close</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"186\"/>\n        <source>For %n %1 windows</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n        </translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"188\"/>\n        <source>For %n windows</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n        </translation>\n    </message>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"190\"/>\n        <source>Close All</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>main</name>\n    <message>\n        <location filename=\"../main.cpp\" line=\"73\"/>\n        <source>Safe Mode</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../main.cpp\" line=\"73\"/>\n        <source>You&apos;re holding the CTRL key. Start theDesk in Safe Mode?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "desktop/translations/tr_TR.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"tr_TR\" sourcelanguage=\"en_US\">\n<context>\n    <name>About</name>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"165\"/>\n        <source>DISTRIBUTION</source>\n        <translation>DAĞITIM</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"182\"/>\n        <source>You&apos;re using</source>\n        <translation>Kullanıyorsun</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"262\"/>\n        <source>Device Name</source>\n        <translation>Cihaz adı</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"362\"/>\n        <source>Processor</source>\n        <translation>İşlemci</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"248\"/>\n        <source>THIS DEVICE</source>\n        <translation>BU CİHAZ</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"276\"/>\n        <source>Available Memory</source>\n        <translation>Kullanılabilir Hafıza</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"236\"/>\n        <source>Available Swap</source>\n        <translation>Mevcut Takas</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"307\"/>\n        <source>Qt Version</source>\n        <translation>Qt Sürümü</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"255\"/>\n        <source>Kernel Version</source>\n        <translation>Çekirdek sürümü</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"297\"/>\n        <source>Change Device Name</source>\n        <translation>Cihaz Adını Değiştirin</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"269\"/>\n        <source>Window System</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"283\"/>\n        <source>Device Type</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"369\"/>\n        <source>Video</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"444\"/>\n        <source>Desktop Environment</source>\n        <translation>Masaüstü Ortamı</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"473\"/>\n        <source>Website</source>\n        <translation>İnternet sitesi</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"484\"/>\n        <source>File Bug</source>\n        <translation>Dosya Hatası</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"495\"/>\n        <source>Sources</source>\n        <translation>Kaynaklar</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"506\"/>\n        <source>View Debug Log</source>\n        <translation>Hata Ayıklama Günlüğünü Görüntüle</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"463\"/>\n        <source>Acknowledgements</source>\n        <translation>Alındılar</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"68\"/>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"69\"/>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"105\"/>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"167\"/>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"172\"/>\n        <source>Unknown</source>\n        <translation>Bilinmeyen</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"117\"/>\n        <source>theDesk %1 - Blueprint</source>\n        <translation>theDesk %1 - Blueprint</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"118\"/>\n        <source>You compiled theDesk on %1</source>\n        <translation>theDesk %1 üzerinde derlediniz</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"120\"/>\n        <source>theDesk %1</source>\n        <translation>theDesk %1</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"124\"/>\n        <source>Copyright © Victor Tran %1. Licensed under the terms of the GNU General Public License, version 3 or later.</source>\n        <translation>Telif hakkı © Victor Tran %1. GNU Genel Kamu Lisansı, sürüm 3 veya üzeri koşulları kapsamında lisanslanmıştır.</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"35\"/>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"189\"/>\n        <source>About</source>\n        <translation>Hakkında</translation>\n    </message>\n</context>\n<context>\n    <name>Acknowledgements</name>\n    <message>\n        <location filename=\"../systemsettings/about/acknowledgements.ui\" line=\"35\"/>\n        <source>Acknowledgements</source>\n        <translation>Alındılar</translation>\n    </message>\n</context>\n<context>\n    <name>AppSearchProvider</name>\n    <message>\n        <location filename=\"../gateway/appsearchprovider.cpp\" line=\"151\"/>\n        <source>Application</source>\n        <translation>Uygulama</translation>\n    </message>\n</context>\n<context>\n    <name>AppSelectionModel</name>\n    <message>\n        <location filename=\"../gateway/appselectionmodel.cpp\" line=\"61\"/>\n        <source>Application</source>\n        <translation>Uygulama</translation>\n    </message>\n</context>\n<context>\n    <name>Background</name>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"176\"/>\n        <source>Sorry, there was a problem displaying the background.</source>\n        <translation>Üzgünüz, arka planı görüntülerken bir sorun oluştu.</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"198\"/>\n        <source>Try Again</source>\n        <translation>Tekrar deneyin</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"379\"/>\n        <source>Background</source>\n        <translation>Arka fon</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"427\"/>\n        <source>IMAGE</source>\n        <translation>Resim</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"434\"/>\n        <source>Select an image to display on your background and lock screen</source>\n        <translation>Arka planınızda ve kilit ekranınızda görüntülenecek bir resim seçin</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"522\"/>\n        <source>COMMUNITY BACKGROUNDS</source>\n        <translation>TOPLULUK ARKA PLANLARI</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"529\"/>\n        <source>Images from the theDesk community will be cycled through every so often.</source>\n        <translation>theDesk topluluğundaki görseller ara sıra gözden geçirilir.</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"536\"/>\n        <source>Show image information</source>\n        <translation>Görüntü bilgilerini göster</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"584\"/>\n        <source>STRETCH</source>\n        <translation>UZATMAK</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"591\"/>\n        <source>Select how you&apos;d like the background image to be sized</source>\n        <translation>Arka plan resminin nasıl boyutlandırılmasını istediğinizi seçin</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"603\"/>\n        <source>Stretch To Fit</source>\n        <translation>Sığacak şekilde uzatmak</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"629\"/>\n        <source>Zoom and Crop</source>\n        <translation>Yakınlaştır ve Kırp</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"655\"/>\n        <source>Center</source>\n        <translation>Merkez</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"681\"/>\n        <source>Tile</source>\n        <translation>Fayans</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"707\"/>\n        <source>Zoom To Fit</source>\n        <translation>Sığdırmak İçin Yakınlaştır</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"757\"/>\n        <source>Change Background</source>\n        <translation>Arka Planı Değiştir</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"765\"/>\n        <source>End Session</source>\n        <translation>Oturumu Sonlandır</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"201\"/>\n        <source>by %1</source>\n        <translation>%1 tarafından</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"299\"/>\n        <source>For desktop</source>\n        <translation>Masaüstü için</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"331\"/>\n        <source>Select Background</source>\n        <translation>Arkaplan seç</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"370\"/>\n        <source>Set Background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"371\"/>\n        <source>Set as Desktop Background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"374\"/>\n        <source>Set as Lock Screen Background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"378\"/>\n        <source>Set for both</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>ChangeHostnamePopover</name>\n    <message>\n        <location filename=\"../systemsettings/about/changehostnamepopover.ui\" line=\"35\"/>\n        <source>Change Device Name</source>\n        <translation>Cihaz Adını Değiştirin</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/changehostnamepopover.ui\" line=\"62\"/>\n        <source>New Device Name</source>\n        <translation>Yeni Cihaz Adı</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/changehostnamepopover.ui\" line=\"69\"/>\n        <source>This device name is used over the network to identify this device. It is also used to identify this device over Bluetooth.</source>\n        <translation>Bu cihaz adı, bu cihazı tanımlamak için ağ üzerinden kullanılır. Bu cihazı Bluetooth üzerinden tanımlamak için de kullanılır.</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/changehostnamepopover.ui\" line=\"79\"/>\n        <source>Network Compatible Name</source>\n        <translation>Ağ Uyumlu Ad</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/changehostnamepopover.ui\" line=\"95\"/>\n        <source>Rename this Device</source>\n        <translation>Rename This Device</translation>\n    </message>\n</context>\n<context>\n    <name>ChunkContainer</name>\n    <message>\n        <location filename=\"../bar/chunkcontainer.ui\" line=\"41\"/>\n        <source>Open Status Center</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>CommandLine</name>\n    <message>\n        <location filename=\"../cli/commandline.cpp\" line=\"37\"/>\n        <source>Start theDesk in Safe Mode</source>\n        <translation>theDesk Güvenli Modda başlatın</translation>\n    </message>\n    <message>\n        <location filename=\"../cli/commandline.cpp\" line=\"40\"/>\n        <source>Internal use; the path to a local socket to communicate with the session manager</source>\n        <translation>İç kullanım; oturum yöneticisi ile iletişim kurmak için yerel bir sokete giden yol</translation>\n    </message>\n    <message>\n        <location filename=\"../cli/commandline.cpp\" line=\"40\"/>\n        <source>path</source>\n        <translation>yol</translation>\n    </message>\n</context>\n<context>\n    <name>CurrentAppWidgetMenu</name>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.ui\" line=\"75\"/>\n        <source>Close Window</source>\n        <translation>Sekmeyi kapat</translation>\n    </message>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.ui\" line=\"188\"/>\n        <source>QUIT IMMEDIATELY</source>\n        <translation>ŞİMDİ ÇIKIN</translation>\n    </message>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.ui\" line=\"204\"/>\n        <source>Cancel</source>\n        <translation>İptal</translation>\n    </message>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.cpp\" line=\"62\"/>\n        <source>Force Stop</source>\n        <translation>Zorla durdurma</translation>\n    </message>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.cpp\" line=\"63\"/>\n        <location filename=\"../bar/currentappwidgetmenu.cpp\" line=\"65\"/>\n        <source>Force Stop %1</source>\n        <translation>%1 zorla durdurma</translation>\n    </message>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.cpp\" line=\"64\"/>\n        <source>%1 will be forced to exit and won&apos;t have a chance to save any unsaved data.</source>\n        <translation>%1 çıkmak zorunda kalacak ve kaydedilmemiş verileri kaydetme şansı olmayacak.</translation>\n    </message>\n</context>\n<context>\n    <name>EndSession</name>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"57\"/>\n        <source>End Session</source>\n        <translation>Oturum sonu</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"115\"/>\n        <source>Power Off</source>\n        <translation>Kapat</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"122\"/>\n        <source>Turns off your computer.</source>\n        <translation>Bilgisayarınızı kapatır.</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"134\"/>\n        <location filename=\"../session/endsession.ui\" line=\"369\"/>\n        <location filename=\"../session/endsession.cpp\" line=\"251\"/>\n        <source>Reboot</source>\n        <translation>Yeniden başlat</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"141\"/>\n        <source>Turns off your computer and turns it on again</source>\n        <translation>Bilgisayarınızı kapatır ve tekrar açar</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"148\"/>\n        <source>Reboot and install updates</source>\n        <translation>Güncellemeleri yeniden başlatın ve yükleyin</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"155\"/>\n        <source>Turns off your computer, installs pending updates and turns it on again</source>\n        <translation>Bilgisayarınızı kapatır, bekleyen güncellemeleri yükler ve yeniden açar</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"162\"/>\n        <source>Log Out</source>\n        <translation>Çıkış Yap</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"169\"/>\n        <source>Ends your session but keeps your computer on for other people to use</source>\n        <translation>Oturumunuzu sonlandırır ancak bilgisayarınızı başkalarının kullanması için açık tutar</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"176\"/>\n        <source>Suspend</source>\n        <translation>Askıya al</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"183\"/>\n        <source>Puts your computer in a low power state so it reopens quickly</source>\n        <translation>Bilgisayarınızı düşük güç durumuna geçirir, böylece hızlı bir şekilde yeniden açılır</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"190\"/>\n        <source>Lock</source>\n        <translation>Kilit</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"197\"/>\n        <source>Locks your workspace with your password</source>\n        <translation>Çalışma alanınızı şifrenizle kilitler</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"204\"/>\n        <source>Turn Off Screen</source>\n        <translation>Ekranı Kapat</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"211\"/>\n        <source>Turns off the screen, but keeps everything else running in the background</source>\n        <translation>Ekranı kapatır, ancak diğer her şeyin arka planda çalışmasını sağlar</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"218\"/>\n        <source>Switch Users</source>\n        <translation>Kullanıcı Değiştir</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"225\"/>\n        <source>Switches to the logon screen, but keeps your session in the background</source>\n        <translation>Oturum açma ekranına geçer ancak oturumunuzu arka planda tutar</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"232\"/>\n        <source>Hibernate</source>\n        <translation>Hazırda beklet</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"239\"/>\n        <source>Powers off your computer, but restores the session when powered back on</source>\n        <translation>Bilgisayarınızı kapatır, ancak tekrar açıldığında oturumu geri yükler</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"334\"/>\n        <source>Updates are available. What do you want to do?</source>\n        <translation>Güncellemeler mevcuttur. Ne yapmak istiyorsun?</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"349\"/>\n        <source>Reboot and update</source>\n        <translation>Yeniden başlat ve güncelle</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"356\"/>\n        <source>We&apos;ll perform system updates once this device has rebooted.</source>\n        <translation>Bu cihaz yeniden başlatıldığında sistem güncellemelerini gerçekleştireceğiz.</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"376\"/>\n        <source>We&apos;ll reboot your device normally.</source>\n        <translation>Cihazınızı normal şekilde yeniden başlatacağız.</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"109\"/>\n        <source>power off the system</source>\n        <translation>sistemi kapat</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"110\"/>\n        <source>reboot the system</source>\n        <translation>sistemi yeniden başlat</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"111\"/>\n        <source>reboot the system and install any pending updates</source>\n        <translation>sistemi yeniden başlatın ve bekleyen güncellemeleri yükleyin</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"112\"/>\n        <source>log you out</source>\n        <translation>oturumu kapat</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"113\"/>\n        <source>suspend the system</source>\n        <translation>sistemi askıya almak</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"114\"/>\n        <source>lock the screen</source>\n        <translation>ekranı kilitle</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"115\"/>\n        <source>turn off the screen</source>\n        <translation>ekranı kapat</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"116\"/>\n        <source>switch users</source>\n        <translation>kullanıcıları değiştir</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"117\"/>\n        <source>hibernate the system</source>\n        <translation>sistemi hazırda bekletmek</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"250\"/>\n        <source>Advanced Reboot</source>\n        <translation>Gelişmiş Yeniden Başlatma</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"260\"/>\n        <source>Reboot into System UEFI Setup</source>\n        <translation>Sistem UEFI Kurulumunu Yeniden Başlatın</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"49\"/>\n        <source>Hey %1, ready to head out? We&apos;ll %2 in %n seconds if you don&apos;t do anything.</source>\n        <translation>Hey %1, gitmeye hazır mısın? Eğer bir şey yapmazsan, %n saniye içinde %2 yapacağız.</translation>\n    </message>\n</context>\n<context>\n    <name>MainGatewayWidget</name>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"57\"/>\n        <source>Gateway</source>\n        <translation>Ağ geçidi</translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"150\"/>\n        <source>CATEGORIES</source>\n        <translation>KATEGORİLER</translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"160\"/>\n        <source>All Apps</source>\n        <translation>Tüm Uygulamalar</translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"276\"/>\n        <source>Preparing the Gateway...</source>\n        <translation>Ağ Geçidini Hazırlama...</translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"67\"/>\n        <source>Type to search...</source>\n        <translation>Aramak için yazın...</translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"192\"/>\n        <source>Status Center</source>\n        <translation>Durum Merkezi</translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"391\"/>\n        <source>System Settings</source>\n        <translation>Sistem Ayarları</translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"407\"/>\n        <source>End Session</source>\n        <translation>Oturum sonu</translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"88\"/>\n        <source>A/V</source>\n        <translation>A/V</translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"89\"/>\n        <source>Development</source>\n        <translation>Gelişim</translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"90\"/>\n        <source>Education</source>\n        <translation>Eğitim</translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"91\"/>\n        <source>Games</source>\n        <translation>Oyunlar</translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"92\"/>\n        <source>Graphics</source>\n        <translation>Grafik</translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"93\"/>\n        <source>Networking</source>\n        <translation>Ağ</translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"94\"/>\n        <source>Office</source>\n        <translation>Ofisçe</translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"95\"/>\n        <source>Science</source>\n        <translation>Bilim</translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"96\"/>\n        <source>Utilities</source>\n        <translation>Araçlar</translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"170\"/>\n        <source>Actions for %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>ManagePluginPopover</name>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"135\"/>\n        <source>ERROR DETAILS</source>\n        <translation>HATA DETAYLARI</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"190\"/>\n        <source>ACTIONS</source>\n        <translation>HAREKETLER</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"199\"/>\n        <source>Activate Plugin</source>\n        <translation>Eklentiyi Etkinleştir</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"206\"/>\n        <source>Deactivate Plugin</source>\n        <translation>Eklentiyi Devre Dışı Bırak</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"213\"/>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"276\"/>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"296\"/>\n        <source>Blacklist Plugin</source>\n        <translation>Kara Liste Eklentisi</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"220\"/>\n        <source>Remove Plugin from Blacklist</source>\n        <translation>Eklentiyi Kara Listeden Kaldır</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"283\"/>\n        <source>Placing this plugin on the blacklist will prevent it from being loaded next time you log in. If the plugin is not already deactivated, we&apos;ll also deactivate it for you.</source>\n        <translation>Bu eklentiyi kara listeye yerleştirmek, bir sonraki oturum açışınızda yüklenmesini engelleyecektir. Eklenti henüz devre dışı bırakılmamışsa, sizin için devre dışı bırakacağız.</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.cpp\" line=\"43\"/>\n        <source>UUID: %1</source>\n        <translation>UUID: %1</translation>\n    </message>\n</context>\n<context>\n    <name>PluginManagement</name>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmanagement.ui\" line=\"35\"/>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmanagement.cpp\" line=\"72\"/>\n        <source>Plugins</source>\n        <translation>Eklentiler</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmanagement.ui\" line=\"75\"/>\n        <source>Plugins add core and extra functionality to theDesk.</source>\n        <translation>Eklentiler, theDesk&apos;e çekirdek ve ekstra işlevsellik ekler.</translation>\n    </message>\n</context>\n<context>\n    <name>PluginModel</name>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmodel.cpp\" line=\"52\"/>\n        <source>Loaded</source>\n        <translation>Yüklü</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmodel.cpp\" line=\"54\"/>\n        <source>Blacklisted</source>\n        <translation>Kara listeye alındı</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmodel.cpp\" line=\"56\"/>\n        <source>Unavailable</source>\n        <translation>Kullanım dışı</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmodel.cpp\" line=\"58\"/>\n        <source>Inactive</source>\n        <translation>Etkin değil</translation>\n    </message>\n</context>\n<context>\n    <name>Recovery</name>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"35\"/>\n        <location filename=\"../systemsettings/recovery/recovery.cpp\" line=\"67\"/>\n        <source>Recovery</source>\n        <translation>Kurtarma</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"113\"/>\n        <source>RESET THEDESK</source>\n        <translation>THEDESK&apos;İ SIFIRLA</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"120\"/>\n        <source>If things aren&apos;t working correctly, resetting theDesk might help.\n\nHere&apos;s what will happen:\n- User settings will be cleared and reset to defaults\n- The next time you log into theDesk, you&apos;ll need to run through the setup again\n\nSave your documents and close all apps before starting the reset. This won&apos;t take long, but you&apos;ll need to log out to perform the reset. You won&apos;t be able to use your device while the reset is taking place.</source>\n        <translation>İşler düzgün çalışmıyorsa, theDesk sıfırlamak yardımcı olabilir.\n\nİşte ne olacak:\n- Kullanıcı ayarları temizlenir ve varsayılan olarak sıfırlanır\n- Bir dahaki sefere theDesk&apos;e giriş yaptığınızda, kurulumu tekrar çalıştırmanız gerekir\n\nSıfırlamaya başlamadan önce belgelerinizi kaydedin ve tüm uygulamaları kapatın. Bu uzun sürmez, ancak sıfırlamayı gerçekleştirmek için oturumu kapatmanız gerekir. Bunu sıfırlamak yer alıyor, cihazı kullanmak mümkün olmayacaktır.</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"138\"/>\n        <source>Log Out and Reset theDesk</source>\n        <translation>Oturumu Kapatın ve theDesk Sıfırlayın</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"203\"/>\n        <source>RESET DEVICE</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"210\"/>\n        <source>If resetting theDesk didn&apos;t work, or if you just need a fresh start, you can reset this device.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"222\"/>\n        <source>Reset this device</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.cpp\" line=\"92\"/>\n        <source>%1, log out and reset theDesk settings? This action is irreversible.\n\nWe&apos;ll go ahead and reset your settings in %n seconds if you don&apos;t do anything.</source>\n        <translation>%1, oturumu kapat ve çalışma masası Ayarlarını Sıfırla? Bu eylem geri döndürülemez.\n\nHiçbir şey yapmazsanız, ayarlarınızı %n saniye içinde sıfırlayacağız.</translation>\n    </message>\n</context>\n<context>\n    <name>RunDialog</name>\n    <message>\n        <location filename=\"../run/rundialog.ui\" line=\"35\"/>\n        <source>Run</source>\n        <translation>Çalıştırmak</translation>\n    </message>\n    <message>\n        <location filename=\"../run/rundialog.ui\" line=\"60\"/>\n        <source>Enter a command to run.</source>\n        <translation>Çalıştırmak için bir komut girin.</translation>\n    </message>\n    <message>\n        <location filename=\"../run/rundialog.ui\" line=\"73\"/>\n        <source>Run this command</source>\n        <translation>Bu komutu çalıştırın</translation>\n    </message>\n</context>\n<context>\n    <name>StatusCenterLeftPane</name>\n    <message>\n        <location filename=\"../statuscenter/statuscenterleftpane.ui\" line=\"54\"/>\n        <source>Status Center</source>\n        <translation>Durum Merkezi</translation>\n    </message>\n</context>\n<context>\n    <name>SystemSettings</name>\n    <message>\n        <location filename=\"../systemsettings/systemsettings.cpp\" line=\"190\"/>\n        <source>System Settings</source>\n        <translation>Sistem Ayarları</translation>\n    </message>\n</context>\n<context>\n    <name>SystemSettingsLeftPane</name>\n    <message>\n        <location filename=\"../systemsettings/systemsettingsleftpane.ui\" line=\"35\"/>\n        <source>System Settings</source>\n        <translation>Sistem Ayarları</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/systemsettingsleftpane.ui\" line=\"103\"/>\n        <source>LOG OUT</source>\n        <translation>ÇIKIŞ YAP</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/systemsettingsleftpane.ui\" line=\"110\"/>\n        <source>You&apos;ve changed some settings that require you to log out for them to apply completely</source>\n        <translation>Tamamen uygulanmaları için oturumu kapatmanızı gerektiren bazı ayarları değiştirdiniz</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/systemsettingsleftpane.ui\" line=\"135\"/>\n        <source>Log Out</source>\n        <translation>Çıkış yap</translation>\n    </message>\n</context>\n<context>\n    <name>TaskbarApplicationWidget</name>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"153\"/>\n        <source>Move to desktop</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"150\"/>\n        <source>For %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"158\"/>\n        <source>All Desktops</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"176\"/>\n        <source>New Desktop</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"181\"/>\n        <source>Close</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"186\"/>\n        <source>For %n %1 windows</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n        </translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"188\"/>\n        <source>For %n windows</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n        </translation>\n    </message>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"190\"/>\n        <source>Close All</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>main</name>\n    <message>\n        <location filename=\"../main.cpp\" line=\"73\"/>\n        <source>Safe Mode</source>\n        <translation>Güvenli mod</translation>\n    </message>\n    <message>\n        <location filename=\"../main.cpp\" line=\"73\"/>\n        <source>You&apos;re holding the CTRL key. Start theDesk in Safe Mode?</source>\n        <translation>CTRL tuşunu basılı tutuyorsunuz. Güvenli modda theDesk başlatmak?</translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "desktop/translations/vi_VN.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"vi_VN\">\n<context>\n    <name>About</name>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"165\"/>\n        <source>DISTRIBUTION</source>\n        <translation>BẢN PHÂN PHỐI</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"182\"/>\n        <source>You&apos;re using</source>\n        <translation>Bạn đang sử dụng</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"262\"/>\n        <source>Device Name</source>\n        <translation>Tên thiết bị</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"362\"/>\n        <source>Processor</source>\n        <translation>Bộ xử lý</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"248\"/>\n        <source>THIS DEVICE</source>\n        <translation>THIẾT BỊ NÀY</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"276\"/>\n        <source>Available Memory</source>\n        <translation>Bộ nhớ trống</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"236\"/>\n        <source>Available Swap</source>\n        <translation>Bộ nhớ trao đổi trống</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"307\"/>\n        <source>Qt Version</source>\n        <translation>Phiên bản Qt</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"255\"/>\n        <source>Kernel Version</source>\n        <translation>Phiên bản Nhân HĐH</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"297\"/>\n        <source>Change Device Name</source>\n        <translation>Đổi tên thiết bị</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"269\"/>\n        <source>Window System</source>\n        <translation>Hệ thống cửa sổ</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"283\"/>\n        <source>Device Type</source>\n        <translation>Kiểu thiết bị</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"369\"/>\n        <source>Video</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"444\"/>\n        <source>Desktop Environment</source>\n        <translation>Môi trường Desktop</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"473\"/>\n        <source>Website</source>\n        <translation>Trang Web</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"484\"/>\n        <source>File Bug</source>\n        <translation>Báo cáo lỗi</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"495\"/>\n        <source>Sources</source>\n        <translation>Mã nguồn</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"506\"/>\n        <source>View Debug Log</source>\n        <translation>Xem nhật ký gỡ lỗi</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"463\"/>\n        <source>Acknowledgements</source>\n        <translation>Công nhận</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"68\"/>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"69\"/>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"105\"/>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"167\"/>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"172\"/>\n        <source>Unknown</source>\n        <translation>Không xác định</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"117\"/>\n        <source>theDesk %1 - Blueprint</source>\n        <translation>theDesk %1 - Blueprint</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"118\"/>\n        <source>You compiled theDesk on %1</source>\n        <translation>Bạn biên dịch theDesk trong ngày %1</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"120\"/>\n        <source>theDesk %1</source>\n        <translation>theDesk %1</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"124\"/>\n        <source>Copyright © Victor Tran %1. Licensed under the terms of the GNU General Public License, version 3 or later.</source>\n        <translation>Bản Quyền © Victor Tran %1. Được cấp phép theo điều khoản của Giấy phép Công cộng GNU, phiên bản 3, hoặc mới hơn.</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"35\"/>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"189\"/>\n        <source>About</source>\n        <translation>Giới Thiệu</translation>\n    </message>\n</context>\n<context>\n    <name>Acknowledgements</name>\n    <message>\n        <location filename=\"../systemsettings/about/acknowledgements.ui\" line=\"35\"/>\n        <source>Acknowledgements</source>\n        <translation>Công nhận</translation>\n    </message>\n</context>\n<context>\n    <name>AppSearchProvider</name>\n    <message>\n        <location filename=\"../gateway/appsearchprovider.cpp\" line=\"151\"/>\n        <source>Application</source>\n        <translation>Ứng Dụng</translation>\n    </message>\n</context>\n<context>\n    <name>AppSelectionModel</name>\n    <message>\n        <location filename=\"../gateway/appselectionmodel.cpp\" line=\"61\"/>\n        <source>Application</source>\n        <translation>Ứng Dụng</translation>\n    </message>\n</context>\n<context>\n    <name>Background</name>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"176\"/>\n        <source>Sorry, there was a problem displaying the background.</source>\n        <translation>Rất tiếc, chúng tôi gặp sự cố khi có hiển thị hình nền.</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"198\"/>\n        <source>Try Again</source>\n        <translation>Thử lại</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"379\"/>\n        <source>Background</source>\n        <translation>Hình nền</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"427\"/>\n        <source>IMAGE</source>\n        <translation>HÌNH ẢNH</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"434\"/>\n        <source>Select an image to display on your background and lock screen</source>\n        <translation>Chọn một hình ảnh để hiện trên bảng nền và màn hình khóa</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"522\"/>\n        <source>COMMUNITY BACKGROUNDS</source>\n        <translation>HÌNH NỀN CỘNG ĐỒNG</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"529\"/>\n        <source>Images from the theDesk community will be cycled through every so often.</source>\n        <translation>Hình ảnh từ cộng đồng theDesk sẽ được hiện lên và bị đổi thường xuyên.</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"536\"/>\n        <source>Show image information</source>\n        <translation>Hiển thị thông tin về hình ảnh</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"584\"/>\n        <source>STRETCH</source>\n        <translation>KÍCH THƯỚC</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"591\"/>\n        <source>Select how you&apos;d like the background image to be sized</source>\n        <translation>Chọn cách bạn muốn hình nền có kích thước</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"603\"/>\n        <source>Stretch To Fit</source>\n        <translation>Căng để vừa</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"629\"/>\n        <source>Zoom and Crop</source>\n        <translation>Thu phóng và cắt</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"655\"/>\n        <source>Center</source>\n        <translation>Đặt trong giữa</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"681\"/>\n        <source>Tile</source>\n        <translation>Ngói</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"707\"/>\n        <source>Zoom To Fit</source>\n        <translation>Thu phóng để vừa</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"757\"/>\n        <source>Change Background</source>\n        <translation>Đổi hình ảnh nền</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"765\"/>\n        <source>End Session</source>\n        <translation>Kết phiên</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"201\"/>\n        <source>by %1</source>\n        <translation>bởi %1</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"299\"/>\n        <source>For desktop</source>\n        <translation>Cho bảng nền</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"331\"/>\n        <source>Select Background</source>\n        <translation>Chọn hình ảnh nền</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"370\"/>\n        <source>Set Background</source>\n        <translation>Đặt ảnh màn hình</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"371\"/>\n        <source>Set as Desktop Background</source>\n        <translation>Sử dụng cho ảnh màn hình</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"374\"/>\n        <source>Set as Lock Screen Background</source>\n        <translation>Sử dụng cho ảnh màn hình khóa</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"378\"/>\n        <source>Set for both</source>\n        <translation>Sử dụng cho cả hai</translation>\n    </message>\n</context>\n<context>\n    <name>ChangeHostnamePopover</name>\n    <message>\n        <location filename=\"../systemsettings/about/changehostnamepopover.ui\" line=\"35\"/>\n        <source>Change Device Name</source>\n        <translation>Đổi tên thiết bị</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/changehostnamepopover.ui\" line=\"62\"/>\n        <source>New Device Name</source>\n        <translation>Tên thiết bị mới</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/changehostnamepopover.ui\" line=\"69\"/>\n        <source>This device name is used over the network to identify this device. It is also used to identify this device over Bluetooth.</source>\n        <translation>Tên thiết bị sẽ bị sử dụng qua mạng để nhận định thiết bị này. Nó cũng bị dùng để nhận định qua Bluetooth.</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/changehostnamepopover.ui\" line=\"79\"/>\n        <source>Network Compatible Name</source>\n        <translation>Tên tương thích với mạng</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/changehostnamepopover.ui\" line=\"95\"/>\n        <source>Rename this Device</source>\n        <translation>Đổi tên thiết bị này</translation>\n    </message>\n</context>\n<context>\n    <name>ChunkContainer</name>\n    <message>\n        <location filename=\"../bar/chunkcontainer.ui\" line=\"41\"/>\n        <source>Open Status Center</source>\n        <translation>Mở trạng thái</translation>\n    </message>\n</context>\n<context>\n    <name>CommandLine</name>\n    <message>\n        <location filename=\"../cli/commandline.cpp\" line=\"37\"/>\n        <source>Start theDesk in Safe Mode</source>\n        <translation>Khởi chạy theBeat trong chế độ an toàn</translation>\n    </message>\n    <message>\n        <location filename=\"../cli/commandline.cpp\" line=\"40\"/>\n        <source>Internal use; the path to a local socket to communicate with the session manager</source>\n        <translation>Sử dụng nội bộ; đường dẫn đến ổ cắm nội bộ để liên hệ với với trình quản lý phiên</translation>\n    </message>\n    <message>\n        <location filename=\"../cli/commandline.cpp\" line=\"40\"/>\n        <source>path</source>\n        <translation>đường dẫn</translation>\n    </message>\n</context>\n<context>\n    <name>CurrentAppWidgetMenu</name>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.ui\" line=\"75\"/>\n        <source>Close Window</source>\n        <translation>Đóng cửa sổ</translation>\n    </message>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.ui\" line=\"188\"/>\n        <source>QUIT IMMEDIATELY</source>\n        <translation>THOÁT NGAY</translation>\n    </message>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.ui\" line=\"204\"/>\n        <source>Cancel</source>\n        <translation>Hủy</translation>\n    </message>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.cpp\" line=\"62\"/>\n        <source>Force Stop</source>\n        <translation>Buộc dừng</translation>\n    </message>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.cpp\" line=\"63\"/>\n        <location filename=\"../bar/currentappwidgetmenu.cpp\" line=\"65\"/>\n        <source>Force Stop %1</source>\n        <translation>Buộc dừng %1</translation>\n    </message>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.cpp\" line=\"64\"/>\n        <source>%1 will be forced to exit and won&apos;t have a chance to save any unsaved data.</source>\n        <translation>%1 sẽ bị bắt buộc dừng lại, và sẽ không có cơ hội để lưu dữ liệu nào chưa được lưu.</translation>\n    </message>\n</context>\n<context>\n    <name>EndSession</name>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"57\"/>\n        <source>End Session</source>\n        <translation>Kết phiên</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"115\"/>\n        <source>Power Off</source>\n        <translation>Tắt nguồn</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"122\"/>\n        <source>Turns off your computer.</source>\n        <translation>Tắt máy tính của bạn.</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"134\"/>\n        <location filename=\"../session/endsession.ui\" line=\"369\"/>\n        <location filename=\"../session/endsession.cpp\" line=\"251\"/>\n        <source>Reboot</source>\n        <translation>Khởi động lại</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"141\"/>\n        <source>Turns off your computer and turns it on again</source>\n        <translation>Tắt máy tính của bạn, rồi bật nó lại</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"148\"/>\n        <source>Reboot and install updates</source>\n        <translation>Khởi động lại và cài đặt bản cập nhật</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"155\"/>\n        <source>Turns off your computer, installs pending updates and turns it on again</source>\n        <translation>Tắt máy tính của bạn, cài bản cập nhật rồi bắt nó lại</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"162\"/>\n        <source>Log Out</source>\n        <translation>Đăng xuất</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"169\"/>\n        <source>Ends your session but keeps your computer on for other people to use</source>\n        <translation>Kết thúc phiên của bạn, nhưng vẫn giữ máy tính của bạn cho người khác sử dụng</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"176\"/>\n        <source>Suspend</source>\n        <translation>Tạm dừng</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"183\"/>\n        <source>Puts your computer in a low power state so it reopens quickly</source>\n        <translation>Đặt máy tính của bạn vào chế độ tiêu ít năng lượng để cho nó mở lại nhanh</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"190\"/>\n        <source>Lock</source>\n        <translation>Khóa phiên</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"197\"/>\n        <source>Locks your workspace with your password</source>\n        <translation>Khóa phiên của bạn với mật khẩu của bạn</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"204\"/>\n        <source>Turn Off Screen</source>\n        <translation>Tắt màn hình</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"211\"/>\n        <source>Turns off the screen, but keeps everything else running in the background</source>\n        <translation>Tắt màn hình, nhưng giữ mọi thứ khác chạy trong nền</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"218\"/>\n        <source>Switch Users</source>\n        <translation>Chuyển đổi người dùng</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"225\"/>\n        <source>Switches to the logon screen, but keeps your session in the background</source>\n        <translation>Chuyển đổi sang màn hình đăng nhập, nhưng giữ phiên của bạn trong nền</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"232\"/>\n        <source>Hibernate</source>\n        <translation>Ngủ đông</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"239\"/>\n        <source>Powers off your computer, but restores the session when powered back on</source>\n        <translation>Tắt máy tính của bạn, nhưng khôi phục phiên khi bật lại</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"334\"/>\n        <source>Updates are available. What do you want to do?</source>\n        <translation>Bản cập nhật đang chờ xử lý. Bạn muốn làm gì?</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"349\"/>\n        <source>Reboot and update</source>\n        <translation>Khởi động lại và cài</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"356\"/>\n        <source>We&apos;ll perform system updates once this device has rebooted.</source>\n        <translation>Chúng tôi sẽ thực hiện các bản cập nhật sau khi thiết bị này khởi động lại.</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"376\"/>\n        <source>We&apos;ll reboot your device normally.</source>\n        <translation>Chúng tôi sẽ khởi động lại bình thường.</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"109\"/>\n        <source>power off the system</source>\n        <translation>tắt hệ thống</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"110\"/>\n        <source>reboot the system</source>\n        <translation>khởi động hệ thống lại</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"111\"/>\n        <source>reboot the system and install any pending updates</source>\n        <translation>khởi động lại và cài các cập nhật chờ xử lý</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"112\"/>\n        <source>log you out</source>\n        <translation>đăng xuất bản</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"113\"/>\n        <source>suspend the system</source>\n        <translation>tạm dừng hệ thống</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"114\"/>\n        <source>lock the screen</source>\n        <translation>khóa màn hình</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"115\"/>\n        <source>turn off the screen</source>\n        <translation>tắt màn hình</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"116\"/>\n        <source>switch users</source>\n        <translation>chuyển đổi người dùng</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"117\"/>\n        <source>hibernate the system</source>\n        <translation>đặt hệ thống vào chế độ ngủ đông</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"250\"/>\n        <source>Advanced Reboot</source>\n        <translation>Khởi động lại nâng cao</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"260\"/>\n        <source>Reboot into System UEFI Setup</source>\n        <translation>Khởi động lại vào trình thiết lập UEFI hệ thống</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"49\"/>\n        <source>Hey %1, ready to head out? We&apos;ll %2 in %n seconds if you don&apos;t do anything.</source>\n        <translation>%1, sẵn sàng rời đi chưa? Chúng tôi sẽ %2 sau %n giay nếu bạn không làm gì.</translation>\n    </message>\n</context>\n<context>\n    <name>MainGatewayWidget</name>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"57\"/>\n        <source>Gateway</source>\n        <translation>Cửa</translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"150\"/>\n        <source>CATEGORIES</source>\n        <translation>THỂ LOẠI</translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"160\"/>\n        <source>All Apps</source>\n        <translation>Các ứng dụng</translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"276\"/>\n        <source>Preparing the Gateway...</source>\n        <translation>Đang chuẩn bị Cửa...</translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"67\"/>\n        <source>Type to search...</source>\n        <translation>Gõ để tìm kiếm...</translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"192\"/>\n        <source>Status Center</source>\n        <translation>Bảng Trạng thái</translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"391\"/>\n        <source>System Settings</source>\n        <translation>Cài đặt hệ thống</translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"407\"/>\n        <source>End Session</source>\n        <translation>Kết phiên</translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"88\"/>\n        <source>A/V</source>\n        <translation>Âm thanh / Video</translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"89\"/>\n        <source>Development</source>\n        <translation>Phát triển</translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"90\"/>\n        <source>Education</source>\n        <translation>Giáo dục</translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"91\"/>\n        <source>Games</source>\n        <translation>Trò chơi</translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"92\"/>\n        <source>Graphics</source>\n        <translation>Đồ họa</translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"93\"/>\n        <source>Networking</source>\n        <translation>Mạng</translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"94\"/>\n        <source>Office</source>\n        <translation>Văn phòng</translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"95\"/>\n        <source>Science</source>\n        <translation>Khoa học</translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"96\"/>\n        <source>Utilities</source>\n        <translation>Tiện ích</translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"170\"/>\n        <source>Actions for %1</source>\n        <translation>Hoạt động cho %1</translation>\n    </message>\n</context>\n<context>\n    <name>ManagePluginPopover</name>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"135\"/>\n        <source>ERROR DETAILS</source>\n        <translation>CHI TIẾT VỀ LỖI</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"190\"/>\n        <source>ACTIONS</source>\n        <translation>HOẠT ĐỘNG</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"199\"/>\n        <source>Activate Plugin</source>\n        <translation>Kích hoạt phần mở rộng</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"206\"/>\n        <source>Deactivate Plugin</source>\n        <translation>Vô hiệu phần mở rộng</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"213\"/>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"276\"/>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"296\"/>\n        <source>Blacklist Plugin</source>\n        <translation>Đặt phần mở rộng trên danh sách đen</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"220\"/>\n        <source>Remove Plugin from Blacklist</source>\n        <translation>Xóa phần mở rộng khỏi danh sách đen</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"283\"/>\n        <source>Placing this plugin on the blacklist will prevent it from being loaded next time you log in. If the plugin is not already deactivated, we&apos;ll also deactivate it for you.</source>\n        <translation>Khi bạn đặt phần mở rộng này trên danh sách đen, bạn sẽ không cho nó tải khi bạn đăng nhập lần sau. Nếu phần mở rộng này chưa bị vô hiệu, chúng tôi cũng sẽ vô hiệu nó cho bạn.</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.cpp\" line=\"43\"/>\n        <source>UUID: %1</source>\n        <translation>UUID: %1</translation>\n    </message>\n</context>\n<context>\n    <name>PluginManagement</name>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmanagement.ui\" line=\"35\"/>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmanagement.cpp\" line=\"72\"/>\n        <source>Plugins</source>\n        <translation>Phần mở rộng</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmanagement.ui\" line=\"75\"/>\n        <source>Plugins add core and extra functionality to theDesk.</source>\n        <translation>Phần mở rộng sẽ thêm vào tính năng cốt lõi và tính năng bổ sung vào theDesk.</translation>\n    </message>\n</context>\n<context>\n    <name>PluginModel</name>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmodel.cpp\" line=\"52\"/>\n        <source>Loaded</source>\n        <translation>Đã tải</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmodel.cpp\" line=\"54\"/>\n        <source>Blacklisted</source>\n        <translation>Trên danh sách đen</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmodel.cpp\" line=\"56\"/>\n        <source>Unavailable</source>\n        <translation>Không có sẵn</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmodel.cpp\" line=\"58\"/>\n        <source>Inactive</source>\n        <translation>Bị vô hiệu</translation>\n    </message>\n</context>\n<context>\n    <name>Recovery</name>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"35\"/>\n        <location filename=\"../systemsettings/recovery/recovery.cpp\" line=\"67\"/>\n        <source>Recovery</source>\n        <translation>Khôi phục</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"113\"/>\n        <source>RESET THEDESK</source>\n        <translation>ĐẶT LẠI THEDESK</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"120\"/>\n        <source>If things aren&apos;t working correctly, resetting theDesk might help.\n\nHere&apos;s what will happen:\n- User settings will be cleared and reset to defaults\n- The next time you log into theDesk, you&apos;ll need to run through the setup again\n\nSave your documents and close all apps before starting the reset. This won&apos;t take long, but you&apos;ll need to log out to perform the reset. You won&apos;t be able to use your device while the reset is taking place.</source>\n        <translation>Nếu bạn có điều nào không có hoạt dụng đúng, bạn có thể đặt lại Word để xem nếu nó có khắc phục được sự cố không.\n\nĐây là những gì sẽ xảy ra:\n- Các cài đặt của bạn sẽ bị xóa và đặt lại mặc định\n- Lần sau bạn đăng nhập vào theDesk, bạn cần thực hiện các thiết lập lần đầu\n\nLưu các tài liệu, và đóng các ứng dụng trước khi bạn bắt đầu đặt lại. Điều này sẽ không mất nhiều thời gian, nhưng bạn cần đăng xuất để thực hiện hoạt động đặt lại. Bạn không thể sử dụng thiết bị của bạn khi hoạt động đặt lại đang thực hiện.</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"138\"/>\n        <source>Log Out and Reset theDesk</source>\n        <translation>Đăng xuất và đặt lại theDesk</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"203\"/>\n        <source>RESET DEVICE</source>\n        <translation>ĐẶT LẠI THIẾT BỊ</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"210\"/>\n        <source>If resetting theDesk didn&apos;t work, or if you just need a fresh start, you can reset this device.</source>\n        <translation>Nếu hoạt động đặt lại theDesk không giải quyết vấn đề, hoặc nếu bạn chỉ cần bắt đầu lại, bạn có thể đặt lại thiết bị này.</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"222\"/>\n        <source>Reset this device</source>\n        <translation>Đặt lại thiết bị này</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.cpp\" line=\"92\"/>\n        <source>%1, log out and reset theDesk settings? This action is irreversible.\n\nWe&apos;ll go ahead and reset your settings in %n seconds if you don&apos;t do anything.</source>\n        <translation>%1, đăng xuất và đặt lại các cài đặt của theDesk? Hoạt động này sẽ không được bị hoàn tác.\n\nChúng tôi sẽ đặt cài đặt của bạn lại sau %n giay nếu bạn không làm gì.</translation>\n    </message>\n</context>\n<context>\n    <name>RunDialog</name>\n    <message>\n        <location filename=\"../run/rundialog.ui\" line=\"35\"/>\n        <source>Run</source>\n        <translation>Chạy</translation>\n    </message>\n    <message>\n        <location filename=\"../run/rundialog.ui\" line=\"60\"/>\n        <source>Enter a command to run.</source>\n        <translation>Điền vào một lệnh để chạy.</translation>\n    </message>\n    <message>\n        <location filename=\"../run/rundialog.ui\" line=\"73\"/>\n        <source>Run this command</source>\n        <translation>Chạy lệnh này</translation>\n    </message>\n</context>\n<context>\n    <name>StatusCenterLeftPane</name>\n    <message>\n        <location filename=\"../statuscenter/statuscenterleftpane.ui\" line=\"54\"/>\n        <source>Status Center</source>\n        <translation>Bảng Trạng thái</translation>\n    </message>\n</context>\n<context>\n    <name>SystemSettings</name>\n    <message>\n        <location filename=\"../systemsettings/systemsettings.cpp\" line=\"190\"/>\n        <source>System Settings</source>\n        <translation>Cài đặt hệ thống</translation>\n    </message>\n</context>\n<context>\n    <name>SystemSettingsLeftPane</name>\n    <message>\n        <location filename=\"../systemsettings/systemsettingsleftpane.ui\" line=\"35\"/>\n        <source>System Settings</source>\n        <translation>Cài đặt hệ thống</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/systemsettingsleftpane.ui\" line=\"103\"/>\n        <source>LOG OUT</source>\n        <translation>ĐĂNG XUẤT</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/systemsettingsleftpane.ui\" line=\"110\"/>\n        <source>You&apos;ve changed some settings that require you to log out for them to apply completely</source>\n        <translation>Bạn đã thay đổi một số cài đặt yêu cầu bạn đăng xuất để áp dụng nó đầy đủ</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/systemsettingsleftpane.ui\" line=\"135\"/>\n        <source>Log Out</source>\n        <translation>Đăng xuất</translation>\n    </message>\n</context>\n<context>\n    <name>TaskbarApplicationWidget</name>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"153\"/>\n        <source>Move to desktop</source>\n        <translation>Chuyển sang màn hình ảo</translation>\n    </message>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"150\"/>\n        <source>For %1</source>\n        <translation>Cho %1</translation>\n    </message>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"158\"/>\n        <source>All Desktops</source>\n        <translation>Các màn hình ảo</translation>\n    </message>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"176\"/>\n        <source>New Desktop</source>\n        <translation>Màn hình ảo mới</translation>\n    </message>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"181\"/>\n        <source>Close</source>\n        <translation>Đóng</translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"186\"/>\n        <source>For %n %1 windows</source>\n        <translation>\n            <numerusform>Cho %n cửa sổ %1</numerusform>\n        </translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"188\"/>\n        <source>For %n windows</source>\n        <translation>\n            <numerusform>Cho %n cửa sổ</numerusform>\n        </translation>\n    </message>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"190\"/>\n        <source>Close All</source>\n        <translation>Đóng tất cả</translation>\n    </message>\n</context>\n<context>\n    <name>main</name>\n    <message>\n        <location filename=\"../main.cpp\" line=\"73\"/>\n        <source>Safe Mode</source>\n        <translation>Chế độ an toàn</translation>\n    </message>\n    <message>\n        <location filename=\"../main.cpp\" line=\"73\"/>\n        <source>You&apos;re holding the CTRL key. Start theDesk in Safe Mode?</source>\n        <translation>Bạn đang giữ nút CTRL. Khởi chạy theDesk vào chế độ an toàn?</translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "desktop/translations/zh_CN.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"zh_CN\" sourcelanguage=\"en_US\">\n<context>\n    <name>About</name>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"165\"/>\n        <source>DISTRIBUTION</source>\n        <translation>发行</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"182\"/>\n        <source>You&apos;re using</source>\n        <translation>你正在使用</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"262\"/>\n        <source>Device Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"362\"/>\n        <source>Processor</source>\n        <translation>处理器</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"248\"/>\n        <source>THIS DEVICE</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"276\"/>\n        <source>Available Memory</source>\n        <translation>可用内存</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"236\"/>\n        <source>Available Swap</source>\n        <translation>可用虚拟内存</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"307\"/>\n        <source>Qt Version</source>\n        <translation>Qt 版本</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"255\"/>\n        <source>Kernel Version</source>\n        <translation>内核版本</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"297\"/>\n        <source>Change Device Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"269\"/>\n        <source>Window System</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"283\"/>\n        <source>Device Type</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"369\"/>\n        <source>Video</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"444\"/>\n        <source>Desktop Environment</source>\n        <translation>桌面环境</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"473\"/>\n        <source>Website</source>\n        <translation>网页</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"484\"/>\n        <source>File Bug</source>\n        <translation>上传Bug</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"495\"/>\n        <source>Sources</source>\n        <translation>来源</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"506\"/>\n        <source>View Debug Log</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"463\"/>\n        <source>Acknowledgements</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"68\"/>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"69\"/>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"105\"/>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"167\"/>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"172\"/>\n        <source>Unknown</source>\n        <translation>未知</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"117\"/>\n        <source>theDesk %1 - Blueprint</source>\n        <translation>theDesk %1 - 蓝图</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"118\"/>\n        <source>You compiled theDesk on %1</source>\n        <translation>你在 %1 编译了 theDesk</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"120\"/>\n        <source>theDesk %1</source>\n        <translation>theDesk %1。</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"124\"/>\n        <source>Copyright © Victor Tran %1. Licensed under the terms of the GNU General Public License, version 3 or later.</source>\n        <translation>版权  © Victor Tran %1 根据GNU通用公共许可版本3或更高版本许可。</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/about.ui\" line=\"35\"/>\n        <location filename=\"../systemsettings/about/about.cpp\" line=\"189\"/>\n        <source>About</source>\n        <translation>关于</translation>\n    </message>\n</context>\n<context>\n    <name>Acknowledgements</name>\n    <message>\n        <location filename=\"../systemsettings/about/acknowledgements.ui\" line=\"35\"/>\n        <source>Acknowledgements</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>AppSearchProvider</name>\n    <message>\n        <location filename=\"../gateway/appsearchprovider.cpp\" line=\"151\"/>\n        <source>Application</source>\n        <translation type=\"unfinished\">应用程序</translation>\n    </message>\n</context>\n<context>\n    <name>AppSelectionModel</name>\n    <message>\n        <location filename=\"../gateway/appselectionmodel.cpp\" line=\"61\"/>\n        <source>Application</source>\n        <translation>应用程序</translation>\n    </message>\n</context>\n<context>\n    <name>Background</name>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"176\"/>\n        <source>Sorry, there was a problem displaying the background.</source>\n        <translation>抱歉，显示背景时出现问题。</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"198\"/>\n        <source>Try Again</source>\n        <translation>请重试</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"379\"/>\n        <source>Background</source>\n        <translation>背景</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"427\"/>\n        <source>IMAGE</source>\n        <translation>图片</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"434\"/>\n        <source>Select an image to display on your background and lock screen</source>\n        <translation>选择要在背景和锁定屏幕上显示的图像</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"522\"/>\n        <source>COMMUNITY BACKGROUNDS</source>\n        <translation>社区背景</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"529\"/>\n        <source>Images from the theDesk community will be cycled through every so often.</source>\n        <translation>来自theDesk社区的图像循环播放。</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"536\"/>\n        <source>Show image information</source>\n        <translation>显示图片信息</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"584\"/>\n        <source>STRETCH</source>\n        <translation>拉伸</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"591\"/>\n        <source>Select how you&apos;d like the background image to be sized</source>\n        <translation>选择你想要更换大小的背景</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"603\"/>\n        <source>Stretch To Fit</source>\n        <translation>拉抻到屏幕</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"629\"/>\n        <source>Zoom and Crop</source>\n        <translation>放大和裁剪</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"655\"/>\n        <source>Center</source>\n        <translation>居中</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"681\"/>\n        <source>Tile</source>\n        <translation>叠加</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"707\"/>\n        <source>Zoom To Fit</source>\n        <translation>放大以填充</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"757\"/>\n        <source>Change Background</source>\n        <translation>更换背景</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.ui\" line=\"765\"/>\n        <source>End Session</source>\n        <translation>结束进程</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"201\"/>\n        <source>by %1</source>\n        <translation>与 %1</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"299\"/>\n        <source>For desktop</source>\n        <translation>桌面</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"331\"/>\n        <source>Select Background</source>\n        <translation>选择背景</translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"370\"/>\n        <source>Set Background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"371\"/>\n        <source>Set as Desktop Background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"374\"/>\n        <source>Set as Lock Screen Background</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../background/background.cpp\" line=\"378\"/>\n        <source>Set for both</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>ChangeHostnamePopover</name>\n    <message>\n        <location filename=\"../systemsettings/about/changehostnamepopover.ui\" line=\"35\"/>\n        <source>Change Device Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/changehostnamepopover.ui\" line=\"62\"/>\n        <source>New Device Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/changehostnamepopover.ui\" line=\"69\"/>\n        <source>This device name is used over the network to identify this device. It is also used to identify this device over Bluetooth.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/changehostnamepopover.ui\" line=\"79\"/>\n        <source>Network Compatible Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/about/changehostnamepopover.ui\" line=\"95\"/>\n        <source>Rename this Device</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>ChunkContainer</name>\n    <message>\n        <location filename=\"../bar/chunkcontainer.ui\" line=\"41\"/>\n        <source>Open Status Center</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>CommandLine</name>\n    <message>\n        <location filename=\"../cli/commandline.cpp\" line=\"37\"/>\n        <source>Start theDesk in Safe Mode</source>\n        <translation>在安全模式中启动theDesk</translation>\n    </message>\n    <message>\n        <location filename=\"../cli/commandline.cpp\" line=\"40\"/>\n        <source>Internal use; the path to a local socket to communicate with the session manager</source>\n        <translation>内部使用; 与会话管理器进行通信的本地套接字的路径</translation>\n    </message>\n    <message>\n        <location filename=\"../cli/commandline.cpp\" line=\"40\"/>\n        <source>path</source>\n        <translation>路径</translation>\n    </message>\n</context>\n<context>\n    <name>CurrentAppWidgetMenu</name>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.ui\" line=\"75\"/>\n        <source>Close Window</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.ui\" line=\"188\"/>\n        <source>QUIT IMMEDIATELY</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.ui\" line=\"204\"/>\n        <source>Cancel</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.cpp\" line=\"62\"/>\n        <source>Force Stop</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.cpp\" line=\"63\"/>\n        <location filename=\"../bar/currentappwidgetmenu.cpp\" line=\"65\"/>\n        <source>Force Stop %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/currentappwidgetmenu.cpp\" line=\"64\"/>\n        <source>%1 will be forced to exit and won&apos;t have a chance to save any unsaved data.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>EndSession</name>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"57\"/>\n        <source>End Session</source>\n        <translation>结束进程</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"115\"/>\n        <source>Power Off</source>\n        <translation>关机</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"122\"/>\n        <source>Turns off your computer.</source>\n        <translation>将关闭你的计算机。</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"134\"/>\n        <location filename=\"../session/endsession.ui\" line=\"369\"/>\n        <location filename=\"../session/endsession.cpp\" line=\"251\"/>\n        <source>Reboot</source>\n        <translation>重启</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"141\"/>\n        <source>Turns off your computer and turns it on again</source>\n        <translation>重启</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"148\"/>\n        <source>Reboot and install updates</source>\n        <translation>重启安装更新</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"155\"/>\n        <source>Turns off your computer, installs pending updates and turns it on again</source>\n        <translation>关机， 安装更新后重启</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"162\"/>\n        <source>Log Out</source>\n        <translation>注销</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"169\"/>\n        <source>Ends your session but keeps your computer on for other people to use</source>\n        <translation>结束会话，但让计算机保持打开状态以供其他人使用</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"176\"/>\n        <source>Suspend</source>\n        <translation>暂停</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"183\"/>\n        <source>Puts your computer in a low power state so it reopens quickly</source>\n        <translation>使您的计算机处于低功耗状态，因此快速重新打开</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"190\"/>\n        <source>Lock</source>\n        <translation>锁定</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"197\"/>\n        <source>Locks your workspace with your password</source>\n        <translation>锁定工作区域</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"204\"/>\n        <source>Turn Off Screen</source>\n        <translation>关闭屏幕</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"211\"/>\n        <source>Turns off the screen, but keeps everything else running in the background</source>\n        <translation>关闭屏幕，但让其他所有内容在后台运行</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"218\"/>\n        <source>Switch Users</source>\n        <translation>更换用户</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"225\"/>\n        <source>Switches to the logon screen, but keeps your session in the background</source>\n        <translation>切换到登录屏幕，但将会话保持在后台</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"232\"/>\n        <source>Hibernate</source>\n        <translation>休眠</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"239\"/>\n        <source>Powers off your computer, but restores the session when powered back on</source>\n        <translation>关闭计算机电源，但重新开机后恢复会话</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"334\"/>\n        <source>Updates are available. What do you want to do?</source>\n        <translation>有可用的更新。 你想让我做什么？</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"349\"/>\n        <source>Reboot and update</source>\n        <translation>重启与安装更新</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"356\"/>\n        <source>We&apos;ll perform system updates once this device has rebooted.</source>\n        <translation>该设备重新启动后，我们将执行系统更新。</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.ui\" line=\"376\"/>\n        <source>We&apos;ll reboot your device normally.</source>\n        <translation>我们将正常重启您的设备。</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"109\"/>\n        <source>power off the system</source>\n        <translation>关闭系统</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"110\"/>\n        <source>reboot the system</source>\n        <translation>重启系统</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"111\"/>\n        <source>reboot the system and install any pending updates</source>\n        <translation>重新启动系统并安装所有挂起的更新</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"112\"/>\n        <source>log you out</source>\n        <translation>讲注销</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"113\"/>\n        <source>suspend the system</source>\n        <translation>休眠此系统</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"114\"/>\n        <source>lock the screen</source>\n        <translation>锁定屏幕</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"115\"/>\n        <source>turn off the screen</source>\n        <translation>关闭屏幕</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"116\"/>\n        <source>switch users</source>\n        <translation>更换用户</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"117\"/>\n        <source>hibernate the system</source>\n        <translation>休眠此系统</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"250\"/>\n        <source>Advanced Reboot</source>\n        <translation>高级重启</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"260\"/>\n        <source>Reboot into System UEFI Setup</source>\n        <translation>重新启动进入系统UEFI设置</translation>\n    </message>\n    <message>\n        <location filename=\"../session/endsession.cpp\" line=\"49\"/>\n        <source>Hey %1, ready to head out? We&apos;ll %2 in %n seconds if you don&apos;t do anything.</source>\n        <translation>你好 %1， 准备出门了吗？ 我们将 在 %2 %n 秒内将你登出。</translation>\n    </message>\n</context>\n<context>\n    <name>MainGatewayWidget</name>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"57\"/>\n        <source>Gateway</source>\n        <translation>网关</translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"150\"/>\n        <source>CATEGORIES</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"160\"/>\n        <source>All Apps</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"276\"/>\n        <source>Preparing the Gateway...</source>\n        <translation>准备网关中。。。</translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"67\"/>\n        <source>Type to search...</source>\n        <translation>输入以搜索。。。</translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"192\"/>\n        <source>Status Center</source>\n        <translation type=\"unfinished\">状态中心</translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"391\"/>\n        <source>System Settings</source>\n        <translation type=\"unfinished\">系统设置</translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.ui\" line=\"407\"/>\n        <source>End Session</source>\n        <translation>结束进程</translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"88\"/>\n        <source>A/V</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"89\"/>\n        <source>Development</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"90\"/>\n        <source>Education</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"91\"/>\n        <source>Games</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"92\"/>\n        <source>Graphics</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"93\"/>\n        <source>Networking</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"94\"/>\n        <source>Office</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"95\"/>\n        <source>Science</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"96\"/>\n        <source>Utilities</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../gateway/maingatewaywidget.cpp\" line=\"170\"/>\n        <source>Actions for %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>ManagePluginPopover</name>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"135\"/>\n        <source>ERROR DETAILS</source>\n        <translation>错误信息</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"190\"/>\n        <source>ACTIONS</source>\n        <translation>行动</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"199\"/>\n        <source>Activate Plugin</source>\n        <translation>启动插件</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"206\"/>\n        <source>Deactivate Plugin</source>\n        <translation>取消插件</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"213\"/>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"276\"/>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"296\"/>\n        <source>Blacklist Plugin</source>\n        <translation>黑名单插件</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"220\"/>\n        <source>Remove Plugin from Blacklist</source>\n        <translation>将此插件从黑名单中移除</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.ui\" line=\"283\"/>\n        <source>Placing this plugin on the blacklist will prevent it from being loaded next time you log in. If the plugin is not already deactivated, we&apos;ll also deactivate it for you.</source>\n        <translation>将此插件放置在黑名单上可防止您下次登录时加载该插件。如果尚未停用该插件，我们还将为您停用它。</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/managepluginpopover.cpp\" line=\"43\"/>\n        <source>UUID: %1</source>\n        <translation>UUID: %1</translation>\n    </message>\n</context>\n<context>\n    <name>PluginManagement</name>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmanagement.ui\" line=\"35\"/>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmanagement.cpp\" line=\"72\"/>\n        <source>Plugins</source>\n        <translation>插件</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmanagement.ui\" line=\"75\"/>\n        <source>Plugins add core and extra functionality to theDesk.</source>\n        <translation>插件为theDesk添加了核心功能和额外功能。</translation>\n    </message>\n</context>\n<context>\n    <name>PluginModel</name>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmodel.cpp\" line=\"52\"/>\n        <source>Loaded</source>\n        <translation>已加载</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmodel.cpp\" line=\"54\"/>\n        <source>Blacklisted</source>\n        <translation>已加入黑名单</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmodel.cpp\" line=\"56\"/>\n        <source>Unavailable</source>\n        <translation>不可用</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/pluginmanagement/pluginmodel.cpp\" line=\"58\"/>\n        <source>Inactive</source>\n        <translation>待用</translation>\n    </message>\n</context>\n<context>\n    <name>Recovery</name>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"35\"/>\n        <location filename=\"../systemsettings/recovery/recovery.cpp\" line=\"67\"/>\n        <source>Recovery</source>\n        <translation>复原</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"113\"/>\n        <source>RESET THEDESK</source>\n        <translation>重置TheDesk</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"120\"/>\n        <source>If things aren&apos;t working correctly, resetting theDesk might help.\n\nHere&apos;s what will happen:\n- User settings will be cleared and reset to defaults\n- The next time you log into theDesk, you&apos;ll need to run through the setup again\n\nSave your documents and close all apps before starting the reset. This won&apos;t take long, but you&apos;ll need to log out to perform the reset. You won&apos;t be able to use your device while the reset is taking place.</source>\n        <translation>如果一切工作不正常，重置桌面可能会有所帮助。\n\n将会发生以下情况：\n-用户设置将被清除并重置为默认值\n-下次登录桌面时，您需要再次运行设置\n\n在开始重置之前，请保存您的文档并关闭所有应用。 这不会花很长时间，但是您需要注销才能执行重置。 重置发生时，您将无法使用设备。</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"138\"/>\n        <source>Log Out and Reset theDesk</source>\n        <translation>注销并重置桌面</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"203\"/>\n        <source>RESET DEVICE</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"210\"/>\n        <source>If resetting theDesk didn&apos;t work, or if you just need a fresh start, you can reset this device.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.ui\" line=\"222\"/>\n        <source>Reset this device</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/recovery/recovery.cpp\" line=\"92\"/>\n        <source>%1, log out and reset theDesk settings? This action is irreversible.\n\nWe&apos;ll go ahead and reset your settings in %n seconds if you don&apos;t do anything.</source>\n        <translation>％1，注销并重置桌面设置？ 此动作是不可逆的。\n\n如果您什么都不做，我们将在％n秒内继续进行设置。</translation>\n    </message>\n</context>\n<context>\n    <name>RunDialog</name>\n    <message>\n        <location filename=\"../run/rundialog.ui\" line=\"35\"/>\n        <source>Run</source>\n        <translation>运行</translation>\n    </message>\n    <message>\n        <location filename=\"../run/rundialog.ui\" line=\"60\"/>\n        <source>Enter a command to run.</source>\n        <translation>输入要运行的命令。</translation>\n    </message>\n    <message>\n        <location filename=\"../run/rundialog.ui\" line=\"73\"/>\n        <source>Run this command</source>\n        <translation>运行此命令</translation>\n    </message>\n</context>\n<context>\n    <name>StatusCenterLeftPane</name>\n    <message>\n        <location filename=\"../statuscenter/statuscenterleftpane.ui\" line=\"54\"/>\n        <source>Status Center</source>\n        <translation>状态中心</translation>\n    </message>\n</context>\n<context>\n    <name>SystemSettings</name>\n    <message>\n        <location filename=\"../systemsettings/systemsettings.cpp\" line=\"190\"/>\n        <source>System Settings</source>\n        <translation>系统设置</translation>\n    </message>\n</context>\n<context>\n    <name>SystemSettingsLeftPane</name>\n    <message>\n        <location filename=\"../systemsettings/systemsettingsleftpane.ui\" line=\"35\"/>\n        <source>System Settings</source>\n        <translation>系统设置</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/systemsettingsleftpane.ui\" line=\"103\"/>\n        <source>LOG OUT</source>\n        <translation>注销</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/systemsettingsleftpane.ui\" line=\"110\"/>\n        <source>You&apos;ve changed some settings that require you to log out for them to apply completely</source>\n        <translation>您更改了一些设置，要求您注销才能完全应用</translation>\n    </message>\n    <message>\n        <location filename=\"../systemsettings/systemsettingsleftpane.ui\" line=\"135\"/>\n        <source>Log Out</source>\n        <translation>注销</translation>\n    </message>\n</context>\n<context>\n    <name>TaskbarApplicationWidget</name>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"153\"/>\n        <source>Move to desktop</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"150\"/>\n        <source>For %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"158\"/>\n        <source>All Desktops</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"176\"/>\n        <source>New Desktop</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"181\"/>\n        <source>Close</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"186\"/>\n        <source>For %n %1 windows</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n        </translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"188\"/>\n        <source>For %n windows</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n        </translation>\n    </message>\n    <message>\n        <location filename=\"../bar/taskbarapplicationwidget.cpp\" line=\"190\"/>\n        <source>Close All</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>main</name>\n    <message>\n        <location filename=\"../main.cpp\" line=\"73\"/>\n        <source>Safe Mode</source>\n        <translation>安全模式</translation>\n    </message>\n    <message>\n        <location filename=\"../main.cpp\" line=\"73\"/>\n        <source>You&apos;re holding the CTRL key. Start theDesk in Safe Mode?</source>\n        <translation>您按住CTRL键。 以安全模式启动theDesk？</translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "desktop-portal/CMakeLists.txt",
    "content": "cmake_minimum_required(VERSION 3.24.0)\n\nproject(xdg-portal VERSION 1.0.0 LANGUAGES C CXX)\nfind_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS WaylandClient)\n\nfind_program(WAYLAND_SCANNER wayland-scanner)\nif(NOT WAYLAND_SCANNER)\n    message(FATAL_ERROR \"wayland-scanner not found!\")\nendif()\nmessage(STATUS \"Found wayland-scanner: ${WAYLAND_SCANNER}\")\n\nfind_program(QT_WAYLAND_SCANNER qtwaylandscanner)\nif(NOT QT_WAYLAND_SCANNER)\n    message(FATAL_ERROR \"qtwaylandscanner not found!\")\nendif()\nmessage(STATUS \"Found qtwaylandscanner: ${QT_WAYLAND_SCANNER}\")\n\nfunction(portal_register_wayland_protocol_extension target)\n    set(multiValueArgs FILES)\n    cmake_parse_arguments(REGISTER_WAYLAND_PROTOCOL_EXTENSIONS \"\" \"\" \"${multiValueArgs}\" ${ARGN})\n\n    foreach(_file ${REGISTER_WAYLAND_PROTOCOL_EXTENSIONS_FILES})\n        get_filename_component(_basename ${_file} NAME_WE)\n\n        # Wayland scanner\n        add_custom_command(OUTPUT \"${CMAKE_CURRENT_BINARY_DIR}/wayland-${_basename}-client-protocol.h\"\n                           COMMAND ${WAYLAND_SCANNER} client-header ${CMAKE_CURRENT_SOURCE_DIR}/${_file} \"${CMAKE_CURRENT_BINARY_DIR}/wayland-${_basename}-client-protocol.h\"\n                           DEPENDS ${_file}\n                           VERBATIM)\n\n        add_custom_command(OUTPUT \"${CMAKE_CURRENT_BINARY_DIR}/wayland-${_basename}-client-protocol.c\"\n                           COMMAND ${WAYLAND_SCANNER} public-code ${CMAKE_CURRENT_SOURCE_DIR}/${_file} \"${CMAKE_CURRENT_BINARY_DIR}/wayland-${_basename}-client-protocol.c\"\n                           DEPENDS ${_file}\n                           VERBATIM)\n\n        # Qt Wayland scanner\n        add_custom_command(OUTPUT \"${CMAKE_CURRENT_BINARY_DIR}/qwayland-${_basename}.h\"\n                           COMMAND ${QT_WAYLAND_SCANNER} client-header ${CMAKE_CURRENT_SOURCE_DIR}/${_file} > \"${CMAKE_CURRENT_BINARY_DIR}/qwayland-${_basename}.h\"\n                           DEPENDS ${_file}\n                           VERBATIM)\n\n        add_custom_command(OUTPUT \"${CMAKE_CURRENT_BINARY_DIR}/qwayland-${_basename}.cpp\"\n                           COMMAND ${QT_WAYLAND_SCANNER} client-code ${CMAKE_CURRENT_SOURCE_DIR}/${_file} > \"${CMAKE_CURRENT_BINARY_DIR}/qwayland-${_basename}.cpp\"\n                           DEPENDS ${_file}\n                           VERBATIM)\n\n        # Include in sources\n        set_property(SOURCE \"${CMAKE_CURRENT_BINARY_DIR}/qwayland-${_basename}.cpp\" PROPERTY SKIP_AUTOGEN ON)\n        set_property(SOURCE \"${CMAKE_CURRENT_BINARY_DIR}/qwayland-${_basename}.h\" PROPERTY SKIP_AUTOGEN ON)\n        set_property(SOURCE \"${CMAKE_CURRENT_BINARY_DIR}/wayland-${_basename}-client-protocol.c\" PROPERTY SKIP_AUTOGEN ON)\n        set_property(SOURCE \"${CMAKE_CURRENT_BINARY_DIR}/wayland-${_basename}-client-protocol.h\" PROPERTY SKIP_AUTOGEN ON)\n        target_sources(${target} PRIVATE\n            \"${CMAKE_CURRENT_BINARY_DIR}/wayland-${_basename}-client-protocol.c\"\n            \"${CMAKE_CURRENT_BINARY_DIR}/wayland-${_basename}-client-protocol.h\"\n            \"${CMAKE_CURRENT_BINARY_DIR}/qwayland-${_basename}.h\"\n            \"${CMAKE_CURRENT_BINARY_DIR}/qwayland-${_basename}.cpp\")\n    endforeach()\nendfunction()\n\nfind_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets Network DBus)\nfind_package(libcontemporary REQUIRED)\nfind_package(libtdesktopenvironment REQUIRED)\nfind_package(libthefrisbee REQUIRED)\nfind_package(libthefile REQUIRED)\n\nset(SOURCES\n    main.cpp\n    portalhandle.cpp\n    portalcommon.cpp\n    screenshotmanager.cpp\n\n    interfaces/filechooserinterface.cpp\n    interfaces/settingsinterface.cpp\n    interfaces/accessinterface.cpp\n    interfaces/accountinterface.cpp\n    interfaces/screenshotinterface.cpp\n    interfaces/notificationinterface.cpp\n\n    dialogs/filedialog.cpp dialogs/filedialog.ui\n    dialogs/accountdialog.cpp dialogs/accountdialog.ui\n    dialogs/screenshotwindow.cpp dialogs/screenshotwindow.ui\n    dialogs/accessdialog.cpp dialogs/accessdialog.ui\n    dialogs/penbutton.cpp\n\n    backend/abstractportalbackend.cpp\n    backend/x11portalbackend.cpp\n    backend/waylandportalbackend.cpp\n    backend/private/waylandportalscreencopyframe.h\n\n    screenshot_resources.qrc\n)\n\nset(HEADERS\n    portalhandle.h\n    portalcommon.h\n    screenshotmanager.h\n\n    interfaces/filechooserinterface.h\n    interfaces/settingsinterface.h\n    interfaces/accessinterface.h\n    interfaces/accountinterface.h\n    interfaces/screenshotinterface.h\n    interfaces/notificationinterface.h\n\n    dialogs/filedialog.h\n    dialogs/accountdialog.h\n    dialogs/screenshotwindow.h\n    dialogs/penbutton.h\n    dialogs/accessdialog.h\n\n    backend/abstractportalbackend.h\n    backend/x11portalbackend.h\n    backend/waylandportalbackend.h\n    backend/private/waylandportalscreencopyframe.cpp\n)\n\nadd_executable(xdg-portal ${SOURCES} ${HEADERS})\n\nset_target_properties(xdg-portal PROPERTIES\n        MACOSX_BUNDLE TRUE\n        MACOSX_BUNDLE_GUI_IDENTIFIER com.vicr123.thedesk.xdg-portal\n        WIN32_EXECUTABLE TRUE\n        CNTP_DATA_SUBDIR thedesk/portal)\n\ncntp_init(xdg-portal 20)\ncntp_translate(xdg-portal)\ncntp_target_name(xdg-portal \"thedesk-desktop-portal\")\n#cntp_defaults_file(xdg-portal\n#    DEFAULTS_FILE xdg-portal.conf)\n\nportal_register_wayland_protocol_extension(xdg-portal FILES\n    backend/wlr-screencopy-unstable-v1.xml\n)\n\ntarget_link_libraries(xdg-portal Qt::Widgets Qt::Network Qt::DBus Qt::WaylandClient Qt::GuiPrivate libcontemporary libtdesktopenvironment libthedesk libthefile)\ntarget_include_directories(xdg-portal PRIVATE ${CMAKE_CURRENT_BINARY_DIR})\n\ninstall(TARGETS xdg-portal\n        RUNTIME DESTINATION ${CMAKE_INSTALL_LIBDIR}\n        BUNDLE DESTINATION /Applications)\n\nconfigure_file(org.freedesktop.impl.portal.desktop.thedesk.service.in ${CMAKE_BINARY_DIR}/org.freedesktop.impl.portal.desktop.thedesk.service)\nconfigure_file(xdg-desktop-portal-thedesk.service.in ${CMAKE_BINARY_DIR}/xdg-desktop-portal-thedesk.service)\n\ninstall(FILES thedesk.portal\n    DESTINATION ${CMAKE_INSTALL_DATADIR}/xdg-desktop-portal/portals)\ninstall(FILES thedesk-portals.conf\n    DESTINATION ${CMAKE_INSTALL_DATADIR}/xdg-desktop-portal)\ninstall(FILES ${CMAKE_BINARY_DIR}/org.freedesktop.impl.portal.desktop.thedesk.service\n    DESTINATION ${CMAKE_INSTALL_DATADIR}/dbus-1/services)\ninstall(FILES ${CMAKE_BINARY_DIR}/xdg-desktop-portal-thedesk.service\n    DESTINATION ${CMAKE_INSTALL_LIBDIR}/systemd/user/)\n"
  },
  {
    "path": "desktop-portal/backend/abstractportalbackend.cpp",
    "content": "#include \"abstractportalbackend.h\"\n\n#include \"waylandportalbackend.h\"\n#include \"x11portalbackend.h\"\n#include <tx11info.h>\n\nAbstractPortalBackend::AbstractPortalBackend(QObject* parent) :\n    QObject{parent} {\n}\n\nAbstractPortalBackend* AbstractPortalBackend::instance() {\n    static AbstractPortalBackend* instance = nullptr;\n    if (!instance) {\n        if (tX11Info::isPlatformX11()) {\n            instance = new X11PortalBackend();\n        } else {\n            instance = new WaylandPortalBackend();\n        }\n    }\n    return instance;\n}\n"
  },
  {
    "path": "desktop-portal/backend/abstractportalbackend.h",
    "content": "#ifndef ABSTRACTPORTALBACKEND_H\n#define ABSTRACTPORTALBACKEND_H\n\n#include <QCoroTask>\n#include <QObject>\n#include <QScreen>\n\nclass AbstractPortalBackend : public QObject {\n        Q_OBJECT\n    public:\n        explicit AbstractPortalBackend(QObject* parent = nullptr);\n\n        static AbstractPortalBackend* instance();\n\n        virtual QCoro::Task<QPixmap> takeScreenshot(QScreen* screen) = 0;\n\n    signals:\n};\n\n#endif // ABSTRACTPORTALBACKEND_H\n"
  },
  {
    "path": "desktop-portal/backend/private/waylandportalscreencopyframe.cpp",
    "content": "#include \"waylandportalscreencopyframe.h\"\n\n#include <QTemporaryFile>\n#include <QUuid>\n#include <fcntl.h>\n#include <sys/mman.h>\n#include <tlogger.h>\n\nstruct WaylandPortalScreencopyFramePrivate {\n        wl_shm* shm;\n        wl_display* display;\n        bool ok = false;\n\n        QImage::Format qimageFormat;\n        void* data;\n        wl_buffer* buf;\n        quint32 width;\n        quint32 height;\n        quint32 size;\n        std::function<void(quint32*, quint32)> transform;\n\n        QImage image;\n};\n\nWaylandPortalScreencopyFrame::WaylandPortalScreencopyFrame(struct ::zwlr_screencopy_frame_v1* object, wl_shm* shm, wl_display* display) :\n    QObject{nullptr}, QtWayland::zwlr_screencopy_frame_v1{object} {\n    d = new WaylandPortalScreencopyFramePrivate();\n    d->shm = shm;\n    d->display = display;\n    tDebug(\"WaylandPortalScreencopyFrame\") << \"Created screencopy frame\";\n}\n\nWaylandPortalScreencopyFrame::~WaylandPortalScreencopyFrame() {\n    tDebug(\"WaylandPortalScreencopyFrame\") << \"Destroyed screencopy frame\";\n    this->destroy();\n    delete d;\n}\n\nbool WaylandPortalScreencopyFrame::ok() {\n    return d->ok;\n}\n\nQPixmap WaylandPortalScreencopyFrame::pixmap() {\n    return QPixmap::fromImage(d->image);\n}\n\nvoid WaylandPortalScreencopyFrame::zwlr_screencopy_frame_v1_buffer(uint32_t format, uint32_t width, uint32_t height, uint32_t stride) {\n    tDebug(\"WaylandPortalScreencopyFrame\") << \"Buffer f: \" << format << \" w: \" << width << \" h: \" << height << \" s: \" << stride;\n\n    wl_shm_format fmt = static_cast<wl_shm_format>(format);\n    d->qimageFormat = QImage::Format_Invalid;\n    d->transform = [](quint32*, quint32) {\n    }; // noop\n    switch (fmt) {\n        case WL_SHM_FORMAT_ARGB8888:\n            d->qimageFormat = QImage::Format_ARGB32;\n            break;\n        case WL_SHM_FORMAT_XRGB8888:\n            d->qimageFormat = QImage::Format_ARGB32;\n            break;\n        case WL_SHM_FORMAT_XBGR8888:\n            d->qimageFormat = QImage::Format_ARGB32;\n            d->transform = [](quint32* data, quint32 size) {\n                for (auto i = 0; i < size; i++) {\n                    auto r = (data[i] >> 0) & 0xff;\n                    auto g = (data[i] >> 8) & 0xff;\n                    auto b = (data[i] >> 16) & 0xff;\n                    auto a = 0xff;\n\n                    data[i] = (a << 24) | (r << 16) | (g << 8) | b;\n                }\n            };\n            break;\n        case WL_SHM_FORMAT_C8:\n        case WL_SHM_FORMAT_RGB332:\n        case WL_SHM_FORMAT_BGR233:\n        case WL_SHM_FORMAT_XRGB4444:\n        case WL_SHM_FORMAT_XBGR4444:\n        case WL_SHM_FORMAT_RGBX4444:\n        case WL_SHM_FORMAT_BGRX4444:\n        case WL_SHM_FORMAT_ARGB4444:\n        case WL_SHM_FORMAT_ABGR4444:\n        case WL_SHM_FORMAT_RGBA4444:\n        case WL_SHM_FORMAT_BGRA4444:\n        case WL_SHM_FORMAT_XRGB1555:\n        case WL_SHM_FORMAT_XBGR1555:\n        case WL_SHM_FORMAT_RGBX5551:\n        case WL_SHM_FORMAT_BGRX5551:\n        case WL_SHM_FORMAT_ARGB1555:\n        case WL_SHM_FORMAT_ABGR1555:\n        case WL_SHM_FORMAT_RGBA5551:\n        case WL_SHM_FORMAT_BGRA5551:\n        case WL_SHM_FORMAT_RGB565:\n        case WL_SHM_FORMAT_BGR565:\n        case WL_SHM_FORMAT_RGB888:\n        case WL_SHM_FORMAT_BGR888:\n        case WL_SHM_FORMAT_RGBX8888:\n        case WL_SHM_FORMAT_BGRX8888:\n        case WL_SHM_FORMAT_ABGR8888:\n        case WL_SHM_FORMAT_RGBA8888:\n        case WL_SHM_FORMAT_BGRA8888:\n        case WL_SHM_FORMAT_XRGB2101010:\n        case WL_SHM_FORMAT_XBGR2101010:\n        case WL_SHM_FORMAT_RGBX1010102:\n        case WL_SHM_FORMAT_BGRX1010102:\n        case WL_SHM_FORMAT_ARGB2101010:\n        case WL_SHM_FORMAT_ABGR2101010:\n        case WL_SHM_FORMAT_RGBA1010102:\n        case WL_SHM_FORMAT_BGRA1010102:\n        case WL_SHM_FORMAT_YUYV:\n        case WL_SHM_FORMAT_YVYU:\n        case WL_SHM_FORMAT_UYVY:\n        case WL_SHM_FORMAT_VYUY:\n        case WL_SHM_FORMAT_AYUV:\n        case WL_SHM_FORMAT_NV12:\n        case WL_SHM_FORMAT_NV21:\n        case WL_SHM_FORMAT_NV16:\n        case WL_SHM_FORMAT_NV61:\n        case WL_SHM_FORMAT_YUV410:\n        case WL_SHM_FORMAT_YVU410:\n        case WL_SHM_FORMAT_YUV411:\n        case WL_SHM_FORMAT_YVU411:\n        case WL_SHM_FORMAT_YUV420:\n        case WL_SHM_FORMAT_YVU420:\n        case WL_SHM_FORMAT_YUV422:\n        case WL_SHM_FORMAT_YVU422:\n        case WL_SHM_FORMAT_YUV444:\n        case WL_SHM_FORMAT_YVU444:\n        case WL_SHM_FORMAT_R8:\n        case WL_SHM_FORMAT_R16:\n        case WL_SHM_FORMAT_RG88:\n        case WL_SHM_FORMAT_GR88:\n        case WL_SHM_FORMAT_RG1616:\n        case WL_SHM_FORMAT_GR1616:\n        case WL_SHM_FORMAT_XRGB16161616F:\n        case WL_SHM_FORMAT_XBGR16161616F:\n        case WL_SHM_FORMAT_ARGB16161616F:\n        case WL_SHM_FORMAT_ABGR16161616F:\n        case WL_SHM_FORMAT_XYUV8888:\n        case WL_SHM_FORMAT_VUY888:\n        case WL_SHM_FORMAT_VUY101010:\n        case WL_SHM_FORMAT_Y210:\n        case WL_SHM_FORMAT_Y212:\n        case WL_SHM_FORMAT_Y216:\n        case WL_SHM_FORMAT_Y410:\n        case WL_SHM_FORMAT_Y412:\n        case WL_SHM_FORMAT_Y416:\n        case WL_SHM_FORMAT_XVYU2101010:\n        case WL_SHM_FORMAT_XVYU12_16161616:\n        case WL_SHM_FORMAT_XVYU16161616:\n        case WL_SHM_FORMAT_Y0L0:\n        case WL_SHM_FORMAT_X0L0:\n        case WL_SHM_FORMAT_Y0L2:\n        case WL_SHM_FORMAT_X0L2:\n        case WL_SHM_FORMAT_YUV420_8BIT:\n        case WL_SHM_FORMAT_YUV420_10BIT:\n        case WL_SHM_FORMAT_XRGB8888_A8:\n        case WL_SHM_FORMAT_XBGR8888_A8:\n        case WL_SHM_FORMAT_RGBX8888_A8:\n        case WL_SHM_FORMAT_BGRX8888_A8:\n        case WL_SHM_FORMAT_RGB888_A8:\n        case WL_SHM_FORMAT_BGR888_A8:\n        case WL_SHM_FORMAT_RGB565_A8:\n        case WL_SHM_FORMAT_BGR565_A8:\n        case WL_SHM_FORMAT_NV24:\n        case WL_SHM_FORMAT_NV42:\n        case WL_SHM_FORMAT_P210:\n        case WL_SHM_FORMAT_P010:\n        case WL_SHM_FORMAT_P012:\n        case WL_SHM_FORMAT_P016:\n        case WL_SHM_FORMAT_AXBXGXRX106106106106:\n        case WL_SHM_FORMAT_NV15:\n        case WL_SHM_FORMAT_Q410:\n        case WL_SHM_FORMAT_Q401:\n        case WL_SHM_FORMAT_XRGB16161616:\n        case WL_SHM_FORMAT_XBGR16161616:\n        case WL_SHM_FORMAT_ARGB16161616:\n        case WL_SHM_FORMAT_ABGR16161616:\n            tDebug(\"WaylandPortalScreencopyFrame\") << \"Unsupported SHM format: \" << fmt;\n            break;\n    }\n\n    if (d->qimageFormat == QImage::Format_Invalid) {\n        emit done();\n        return;\n    }\n\n    d->width = width;\n    d->height = height;\n    d->size = stride * height;\n\n    QString filename = QStringLiteral(\"/tdportal-%1\").arg(QUuid::createUuid().toString(QUuid::Id128));\n\n    auto fd = shm_open(filename.toUtf8().data(), O_RDWR | O_CREAT | O_EXCL, 0600);\n    shm_unlink(filename.toUtf8().data());\n    ftruncate(fd, d->size);\n\n    d->data = mmap(nullptr, d->size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);\n\n    auto pool = wl_shm_create_pool(d->shm, fd, d->size);\n    d->buf = wl_shm_pool_create_buffer(pool, 0, width, height, stride, format);\n    wl_shm_pool_destroy(pool);\n    close(fd);\n\n    copy(d->buf);\n\n    wl_display_roundtrip(d->display);\n}\n\nvoid WaylandPortalScreencopyFrame::zwlr_screencopy_frame_v1_ready(uint32_t tv_sec_hi, uint32_t tv_sec_lo, uint32_t tv_nsec) {\n    tDebug(\"WaylandPortalScreencopyFrame\") << \"Ready h: \" << tv_sec_hi << \" l: \" << tv_sec_lo << \" n: \" << tv_nsec;\n\n    QImage image(reinterpret_cast<uchar*>(d->data), d->width, d->height, d->qimageFormat);\n    d->image = image.copy();\n    for (auto i = 0; i < image.height(); i++) {\n        d->transform(reinterpret_cast<quint32*>(d->image.scanLine(i)), d->image.bytesPerLine() / 4);\n    }\n    d->ok = true;\n\n    munmap(d->data, d->size);\n    wl_buffer_destroy(d->buf);\n\n    emit done();\n}\n\nvoid WaylandPortalScreencopyFrame::zwlr_screencopy_frame_v1_failed() {\n    tDebug(\"WaylandPortalScreencopyFrame\") << \"Screencopy failed\";\n    munmap(d->data, d->size);\n    wl_buffer_destroy(d->buf);\n\n    emit done();\n}\n"
  },
  {
    "path": "desktop-portal/backend/private/waylandportalscreencopyframe.h",
    "content": "#ifndef WAYLANDPORTALSCREENCOPYFRAME_H\n#define WAYLANDPORTALSCREENCOPYFRAME_H\n\n#include <QObject>\n#include <qwayland-wlr-screencopy-unstable-v1.h>\n\nstruct WaylandPortalScreencopyFramePrivate;\nclass WaylandPortalScreencopyFrame : public QObject,\n                                     public QtWayland::zwlr_screencopy_frame_v1 {\n        Q_OBJECT\n    public:\n        explicit WaylandPortalScreencopyFrame(struct ::zwlr_screencopy_frame_v1* object, wl_shm* shm, wl_display* display);\n        ~WaylandPortalScreencopyFrame();\n\n        bool ok();\n        QPixmap pixmap();\n\n    signals:\n        void done();\n\n    private:\n        WaylandPortalScreencopyFramePrivate* d;\n\n        // zwlr_screencopy_frame_v1 interface\n    protected:\n        void zwlr_screencopy_frame_v1_buffer(uint32_t format, uint32_t width, uint32_t height, uint32_t stride);\n        void zwlr_screencopy_frame_v1_ready(uint32_t tv_sec_hi, uint32_t tv_sec_lo, uint32_t tv_nsec);\n        void zwlr_screencopy_frame_v1_failed();\n};\n\n#endif // WAYLANDPORTALSCREENCOPYFRAME_H\n"
  },
  {
    "path": "desktop-portal/backend/waylandportalbackend.cpp",
    "content": "#include \"waylandportalbackend.h\"\n\n#include \"private/waylandportalscreencopyframe.h\"\n#include <QApplication>\n#include <QCoroCore>\n#include <QPixmap>\n#include <qpa/qplatformnativeinterface.h>\n#include <tlogger.h>\n#include <wayland-client-protocol.h>\n\nstruct WaylandPortalBackendPrivate {\n        WaylandPortalBackend* parent;\n        wl_display* display;\n        wl_seat* seat;\n        QList<wl_output*> outputs;\n        wl_shm* shm;\n};\n\nWaylandPortalBackend::WaylandPortalBackend(QObject* parent) :\n    AbstractPortalBackend{parent} {\n    d = new WaylandPortalBackendPrivate();\n    d->parent = this;\n    d->display = reinterpret_cast<wl_display*>(qApp->platformNativeInterface()->nativeResourceForIntegration(\"display\"));\n\n    wl_registry_listener listener = {\n        [](void* data, wl_registry* registry, quint32 name, const char* interface, quint32 version) {\n        auto* backend = static_cast<WaylandPortalBackendPrivate*>(data);\n        if (strcmp(interface, zwlr_screencopy_manager_v1_interface.name) == 0) {\n            backend->parent->QtWayland::zwlr_screencopy_manager_v1::init(registry, name, 1);\n        } else if (strcmp(interface, wl_output_interface.name) == 0) {\n            auto output = static_cast<wl_output*>(wl_registry_bind(registry, name, &wl_output_interface, std::min(version, static_cast<quint32>(1))));\n            backend->outputs.append(output);\n        } else if (strcmp(interface, wl_seat_interface.name) == 0) {\n            wl_seat* seat = static_cast<wl_seat*>(wl_registry_bind(registry, name, &wl_seat_interface, std::min(version, static_cast<quint32>(1))));\n            backend->seat = seat;\n        } else if (strcmp(interface, wl_shm_interface.name) == 0) {\n            backend->shm = static_cast<wl_shm*>(wl_registry_bind(registry, name, &wl_shm_interface, std::min(version, static_cast<quint32>(1))));\n        }\n        },\n        [](void* data, wl_registry* registry, quint32 name) {\n        Q_UNUSED(data)\n        Q_UNUSED(registry)\n        Q_UNUSED(name)\n    }};\n\n    wl_registry* registry = wl_display_get_registry(d->display);\n    wl_registry_add_listener(registry, &listener, d);\n    wl_display_roundtrip(d->display);\n\n    if (!this->QtWayland::zwlr_screencopy_manager_v1::isInitialized()) {\n        tWarn(\"WaylandPortalBackend\") << \"The compositor doesn't support the wlr-screencopy-manager-v1 protocol\";\n    }\n    wl_registry_destroy(registry);\n}\n\nWaylandPortalBackend::~WaylandPortalBackend() {\n    delete d;\n}\n\nQCoro::Task<QPixmap> WaylandPortalBackend::takeScreenshot(QScreen* screen) {\n    WaylandPortalScreencopyFrame capture(this->capture_output(false, d->outputs.first()), d->shm, d->display);\n    co_await qCoro(&capture, &WaylandPortalScreencopyFrame::done);\n\n    if (capture.ok()) {\n        co_return capture.pixmap();\n    } else {\n        QPixmap px(screen->size());\n        px.fill(Qt::red);\n        co_return px;\n    }\n}\n"
  },
  {
    "path": "desktop-portal/backend/waylandportalbackend.h",
    "content": "#ifndef WAYLANDPORTALBACKEND_H\n#define WAYLANDPORTALBACKEND_H\n\n#include \"abstractportalbackend.h\"\n#include <QObject>\n#include <qwayland-wlr-screencopy-unstable-v1.h>\n\nstruct WaylandPortalBackendPrivate;\nclass WaylandPortalBackend : public AbstractPortalBackend,\n                             public QtWayland::zwlr_screencopy_manager_v1 {\n        Q_OBJECT\n    public:\n        explicit WaylandPortalBackend(QObject* parent = nullptr);\n        ~WaylandPortalBackend();\n\n    private:\n        WaylandPortalBackendPrivate* d;\n\n        // AbstractPortalBackend interface\n    public:\n        QCoro::Task<QPixmap> takeScreenshot(QScreen* screen);\n};\n\n#endif // WAYLANDPORTALBACKEND_H\n"
  },
  {
    "path": "desktop-portal/backend/wlr-screencopy-unstable-v1.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<protocol name=\"wlr_screencopy_unstable_v1\">\n  <copyright>\n    Copyright © 2018 Simon Ser\n\n    Permission is hereby granted, free of charge, to any person obtaining a\n    copy of this software and associated documentation files (the \"Software\"),\n    to deal in the Software without restriction, including without limitation\n    the rights to use, copy, modify, merge, publish, distribute, sublicense,\n    and/or sell copies of the Software, and to permit persons to whom the\n    Software is furnished to do so, subject to the following conditions:\n\n    The above copyright notice and this permission notice (including the next\n    paragraph) shall be included in all copies or substantial portions of the\n    Software.\n\n    THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL\n    THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n    FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n    DEALINGS IN THE SOFTWARE.\n  </copyright>\n\n  <description summary=\"screen content capturing on client buffers\">\n    This protocol allows clients to ask the compositor to copy part of the\n    screen content to a client buffer.\n\n    Warning! The protocol described in this file is experimental and\n    backward incompatible changes may be made. Backward compatible changes\n    may be added together with the corresponding interface version bump.\n    Backward incompatible changes are done by bumping the version number in\n    the protocol and interface names and resetting the interface version.\n    Once the protocol is to be declared stable, the 'z' prefix and the\n    version number in the protocol and interface names are removed and the\n    interface version number is reset.\n  </description>\n\n  <interface name=\"zwlr_screencopy_manager_v1\" version=\"1\">\n    <description summary=\"manager to inform clients and begin capturing\">\n      This object is a manager which offers requests to start capturing from a\n      source.\n    </description>\n\n    <request name=\"capture_output\">\n      <description summary=\"capture an output\">\n        Capture the next frame of an entire output.\n      </description>\n      <arg name=\"frame\" type=\"new_id\" interface=\"zwlr_screencopy_frame_v1\"/>\n      <arg name=\"overlay_cursor\" type=\"int\"\n        summary=\"composite cursor onto the frame\"/>\n      <arg name=\"output\" type=\"object\" interface=\"wl_output\"/>\n    </request>\n\n    <request name=\"capture_output_region\">\n      <description summary=\"capture an output's region\">\n        Capture the next frame of an output's region.\n\n        The region is given in output logical coordinates, see\n        xdg_output.logical_size. The region will be clipped to the output's\n        extents.\n      </description>\n      <arg name=\"frame\" type=\"new_id\" interface=\"zwlr_screencopy_frame_v1\"/>\n      <arg name=\"overlay_cursor\" type=\"int\"\n        summary=\"composite cursor onto the frame\"/>\n      <arg name=\"output\" type=\"object\" interface=\"wl_output\"/>\n      <arg name=\"x\" type=\"int\"/>\n      <arg name=\"y\" type=\"int\"/>\n      <arg name=\"width\" type=\"int\"/>\n      <arg name=\"height\" type=\"int\"/>\n    </request>\n\n    <request name=\"destroy\" type=\"destructor\">\n      <description summary=\"destroy the manager\">\n        All objects created by the manager will still remain valid, until their\n        appropriate destroy request has been called.\n      </description>\n    </request>\n  </interface>\n\n  <interface name=\"zwlr_screencopy_frame_v1\" version=\"1\">\n    <description summary=\"a frame ready for copy\">\n      This object represents a single frame.\n\n      When created, a \"buffer\" event will be sent. The client will then be able\n      to send a \"copy\" request. If the capture is successful, the compositor\n      will send a \"flags\" followed by a \"ready\" event.\n\n      If the capture failed, the \"failed\" event is sent. This can happen anytime\n      before the \"ready\" event.\n\n      Once either a \"ready\" or a \"failed\" event is received, the client should\n      destroy the frame.\n    </description>\n\n    <event name=\"buffer\">\n      <description summary=\"buffer information\">\n        Provides information about the frame's buffer. This event is sent once\n        as soon as the frame is created.\n\n        The client should then create a buffer with the provided attributes, and\n        send a \"copy\" request.\n      </description>\n      <arg name=\"format\" type=\"uint\" summary=\"buffer format\"/>\n      <arg name=\"width\" type=\"uint\" summary=\"buffer width\"/>\n      <arg name=\"height\" type=\"uint\" summary=\"buffer height\"/>\n      <arg name=\"stride\" type=\"uint\" summary=\"buffer stride\"/>\n    </event>\n\n    <request name=\"copy\">\n      <description summary=\"copy the frame\">\n        Copy the frame to the supplied buffer. The buffer must have a the\n        correct size, see zwlr_screencopy_frame_v1.buffer. The buffer needs to\n        have a supported format.\n\n        If the frame is successfully copied, a \"flags\" and a \"ready\" events are\n        sent. Otherwise, a \"failed\" event is sent.\n      </description>\n      <arg name=\"buffer\" type=\"object\" interface=\"wl_buffer\"/>\n    </request>\n\n    <enum name=\"error\">\n      <entry name=\"already_used\" value=\"0\"\n        summary=\"the object has already been used to copy a wl_buffer\"/>\n      <entry name=\"invalid_buffer\" value=\"1\"\n        summary=\"buffer attributes are invalid\"/>\n    </enum>\n\n    <enum name=\"flags\" bitfield=\"true\">\n      <entry name=\"y_invert\" value=\"1\" summary=\"contents are y-inverted\"/>\n    </enum>\n\n    <event name=\"flags\">\n      <description summary=\"frame flags\">\n        Provides flags about the frame. This event is sent once before the\n        \"ready\" event.\n      </description>\n      <arg name=\"flags\" type=\"uint\" enum=\"flags\" summary=\"frame flags\"/>\n    </event>\n\n    <event name=\"ready\">\n      <description summary=\"indicates frame is available for reading\">\n        Called as soon as the frame is copied, indicating it is available\n        for reading. This event includes the time at which presentation happened\n        at.\n\n        The timestamp is expressed as tv_sec_hi, tv_sec_lo, tv_nsec triples,\n        each component being an unsigned 32-bit value. Whole seconds are in\n        tv_sec which is a 64-bit value combined from tv_sec_hi and tv_sec_lo,\n        and the additional fractional part in tv_nsec as nanoseconds. Hence,\n        for valid timestamps tv_nsec must be in [0, 999999999]. The seconds part\n        may have an arbitrary offset at start.\n\n        After receiving this event, the client should destroy the object.\n      </description>\n      <arg name=\"tv_sec_hi\" type=\"uint\"\n           summary=\"high 32 bits of the seconds part of the timestamp\"/>\n      <arg name=\"tv_sec_lo\" type=\"uint\"\n           summary=\"low 32 bits of the seconds part of the timestamp\"/>\n      <arg name=\"tv_nsec\" type=\"uint\"\n           summary=\"nanoseconds part of the timestamp\"/>\n    </event>\n\n    <event name=\"failed\">\n      <description summary=\"frame copy failed\">\n        This event indicates that the attempted frame copy has failed.\n\n        After receiving this event, the client should destroy the object.\n      </description>\n    </event>\n\n    <request name=\"destroy\" type=\"destructor\">\n      <description summary=\"delete this object, used or not\">\n        Destroys the frame. This request can be sent at any time by the client.\n      </description>\n    </request>\n  </interface>\n</protocol>\n"
  },
  {
    "path": "desktop-portal/backend/x11portalbackend.cpp",
    "content": "#include \"x11portalbackend.h\"\n\n#include <QPixmap>\n\nX11PortalBackend::X11PortalBackend(QObject* parent) :\n    AbstractPortalBackend{parent} {\n}\n\nQCoro::Task<QPixmap> X11PortalBackend::takeScreenshot(QScreen* screen) {\n    co_return screen->grabWindow(0);\n}\n"
  },
  {
    "path": "desktop-portal/backend/x11portalbackend.h",
    "content": "#ifndef X11PORTALBACKEND_H\n#define X11PORTALBACKEND_H\n\n#include \"abstractportalbackend.h\"\n#include <QObject>\n\nclass X11PortalBackend : public AbstractPortalBackend {\n        Q_OBJECT\n    public:\n        explicit X11PortalBackend(QObject* parent = nullptr);\n\n        // AbstractPortalBackend interface\n    public:\n        QCoro::Task<QPixmap> takeScreenshot(QScreen* screen);\n};\n\n#endif // X11PORTALBACKEND_H\n"
  },
  {
    "path": "desktop-portal/desktop-portal.pro",
    "content": "QT += gui widgets thelib thefile\nSHARE_APP_NAME = thedesk/portal\n\nTARGET = thedesk-desktop-portal\n\nCONFIG += c++20 console\nCONFIG -= app_bundle\n\n# Include the-libs build tools\ninclude(/usr/share/the-libs/pri/buildmaster.pri)\n\n# You can make your code fail to compile if it uses deprecated APIs.\n# In order to do so, uncomment the following line.\n#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0\n\nSOURCES += \\\n        dialogs/filedialog.cpp \\\n        interfaces/filechooserinterface.cpp \\\n        interfaces/settingsinterface.cpp \\\n        main.cpp \\\n        portalhandle.cpp\n\nDBUS_ADAPTOR_HEADERS = portalhandle.h\n\nqtPrepareTool(QDBUSCPP2XML, qdbuscpp2xml)\n\ncpp2xml.output = ${QMAKE_FILE_BASE}.xml\ncpp2xml.commands = $$QDBUSCPP2XML -a -o ${QMAKE_FILE_OUT} ${QMAKE_FILE_NAME}\ncpp2xml.input = DBUS_ADAPTOR_HEADERS\ncpp2xml.CONFIG = no_link target_predeps\ncpp2xml.variable_out = DBUS_ADAPTORS\nQMAKE_EXTRA_COMPILERS += cpp2xml\n\nDBUS_ADAPTORS = portalhandle.xml\n\nunix {\n    target.path = $$THELIBS_INSTALL_LIB\n\n    portaldef.files = thedesk.portal\n    portaldef.path = $$THELIBS_INSTALL_PREFIX/share/xdg-desktop-portal/portals\n\n    dbusactivation.files = org.freedesktop.impl.portal.desktop.thedesk.service\n    dbusactivation.path = $$THELIBS_INSTALL_PREFIX/share/dbus-1/services\n\n    systemdservice.files = xdg-desktop-portal-thedesk.service\n    systemdservice.path = $$THELIBS_INSTALL_PREFIX/lib/systemd/user/\n\n    INSTALLS += target portaldef dbusactivation systemdservice\n}\n\nDISTFILES += \\\n    org.freedesktop.impl.portal.desktop.thedesk.service \\\n    thedesk.portal \\\n    xdg-desktop-portal-thedesk.service\n\nHEADERS += \\\n    dialogs/filedialog.h \\\n    interfaces/filechooserinterface.h \\\n    interfaces/settingsinterface.h \\\n    portalhandle.h\n\nFORMS += \\\n    dialogs/filedialog.ui\n"
  },
  {
    "path": "desktop-portal/dialogs/accessdialog.cpp",
    "content": "#include \"accessdialog.h\"\n#include \"ui_accessdialog.h\"\n\nAccessDialog::AccessDialog(QWidget* parent) :\n    QWidget(parent),\n    ui(new Ui::AccessDialog) {\n    ui->setupUi(this);\n\n    ui->rejectButton->setProperty(\"type\", \"destructive\");\n}\n\nAccessDialog::~AccessDialog() {\n    delete ui;\n}\n\nvoid AccessDialog::setTitle(QString title) {\n    ui->titleLabel->setText(title);\n}\n\nvoid AccessDialog::setSubtitle(QString subtitle) {\n    ui->subtitleLabel->setText(subtitle);\n}\n\nvoid AccessDialog::setBody(QString body) {\n    ui->bodyLabel->setText(body);\n}\n\nvoid AccessDialog::setDenyButtonText(QString text) {\n    ui->rejectButton->setText(text);\n}\n\nvoid AccessDialog::setAllowButtonText(QString text) {\n    ui->acceptButton->setText(text);\n}\n\nvoid AccessDialog::on_titleLabel_backButtonClicked() {\n    emit reject();\n}\n\nvoid AccessDialog::on_acceptButton_clicked() {\n    emit accept();\n}\n\nvoid AccessDialog::on_rejectButton_clicked() {\n    emit reject();\n}\n"
  },
  {
    "path": "desktop-portal/dialogs/accessdialog.h",
    "content": "#ifndef ACCESSDIALOG_H\n#define ACCESSDIALOG_H\n\n#include <QWidget>\n\nnamespace Ui {\n    class AccessDialog;\n}\n\nclass AccessDialog : public QWidget {\n        Q_OBJECT\n\n    public:\n        explicit AccessDialog(QWidget* parent = nullptr);\n        ~AccessDialog();\n\n        void setTitle(QString title);\n        void setSubtitle(QString subtitle);\n        void setBody(QString body);\n\n        void setDenyButtonText(QString text);\n        void setAllowButtonText(QString text);\n\n    signals:\n        void reject();\n        void accept();\n\n    private slots:\n        void on_titleLabel_backButtonClicked();\n\n        void on_acceptButton_clicked();\n\n        void on_rejectButton_clicked();\n\n    private:\n        Ui::AccessDialog* ui;\n};\n\n#endif // ACCESSDIALOG_H\n"
  },
  {
    "path": "desktop-portal/dialogs/accessdialog.ui",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ui version=\"4.0\">\n <class>AccessDialog</class>\n <widget class=\"QWidget\" name=\"AccessDialog\">\n  <property name=\"geometry\">\n   <rect>\n    <x>0</x>\n    <y>0</y>\n    <width>1440</width>\n    <height>747</height>\n   </rect>\n  </property>\n  <property name=\"windowTitle\">\n   <string>Form</string>\n  </property>\n  <layout class=\"QGridLayout\" name=\"gridLayout\">\n   <property name=\"leftMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"topMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"rightMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"bottomMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"spacing\">\n    <number>0</number>\n   </property>\n   <item row=\"1\" column=\"2\">\n    <spacer name=\"verticalSpacer\">\n     <property name=\"orientation\">\n      <enum>Qt::Vertical</enum>\n     </property>\n     <property name=\"sizeHint\" stdset=\"0\">\n      <size>\n       <width>20</width>\n       <height>307</height>\n      </size>\n     </property>\n    </spacer>\n   </item>\n   <item row=\"2\" column=\"1\">\n    <spacer name=\"horizontalSpacer\">\n     <property name=\"orientation\">\n      <enum>Qt::Horizontal</enum>\n     </property>\n     <property name=\"sizeHint\" stdset=\"0\">\n      <size>\n       <width>627</width>\n       <height>20</height>\n      </size>\n     </property>\n    </spacer>\n   </item>\n   <item row=\"2\" column=\"2\">\n    <widget class=\"QWidget\" name=\"widget\" native=\"true\">\n     <layout class=\"QVBoxLayout\" name=\"verticalLayout\">\n      <item>\n       <widget class=\"QLabel\" name=\"subtitleLabel\">\n        <property name=\"font\">\n         <font>\n          <pointsize>20</pointsize>\n         </font>\n        </property>\n        <property name=\"text\">\n         <string notr=\"true\">TextLabel</string>\n        </property>\n       </widget>\n      </item>\n      <item>\n       <widget class=\"QLabel\" name=\"bodyLabel\">\n        <property name=\"enabled\">\n         <bool>false</bool>\n        </property>\n        <property name=\"text\">\n         <string notr=\"true\">TextLabel</string>\n        </property>\n       </widget>\n      </item>\n      <item>\n       <layout class=\"QHBoxLayout\" name=\"horizontalLayout\">\n        <property name=\"spacing\">\n         <number>0</number>\n        </property>\n        <item>\n         <widget class=\"QPushButton\" name=\"rejectButton\">\n          <property name=\"text\">\n           <string notr=\"true\">PushButton</string>\n          </property>\n          <property name=\"icon\">\n           <iconset theme=\"dialog-cancel\"/>\n          </property>\n         </widget>\n        </item>\n        <item>\n         <widget class=\"QPushButton\" name=\"acceptButton\">\n          <property name=\"text\">\n           <string notr=\"true\">PushButton</string>\n          </property>\n          <property name=\"icon\">\n           <iconset theme=\"dialog-ok\"/>\n          </property>\n         </widget>\n        </item>\n       </layout>\n      </item>\n     </layout>\n    </widget>\n   </item>\n   <item row=\"2\" column=\"3\">\n    <spacer name=\"horizontalSpacer_2\">\n     <property name=\"orientation\">\n      <enum>Qt::Horizontal</enum>\n     </property>\n     <property name=\"sizeHint\" stdset=\"0\">\n      <size>\n       <width>627</width>\n       <height>20</height>\n      </size>\n     </property>\n    </spacer>\n   </item>\n   <item row=\"3\" column=\"2\">\n    <spacer name=\"verticalSpacer_2\">\n     <property name=\"orientation\">\n      <enum>Qt::Vertical</enum>\n     </property>\n     <property name=\"sizeHint\" stdset=\"0\">\n      <size>\n       <width>20</width>\n       <height>306</height>\n      </size>\n     </property>\n    </spacer>\n   </item>\n   <item row=\"0\" column=\"1\" colspan=\"3\">\n    <widget class=\"tTitleLabel\" name=\"titleLabel\">\n     <property name=\"text\">\n      <string notr=\"true\">Permission Request</string>\n     </property>\n    </widget>\n   </item>\n  </layout>\n </widget>\n <customwidgets>\n  <customwidget>\n   <class>tTitleLabel</class>\n   <extends>QLabel</extends>\n   <header location=\"global\">ttitlelabel.h</header>\n   <slots>\n    <signal>backButtonClicked()</signal>\n    <slot>backButtonClicked()</slot>\n   </slots>\n  </customwidget>\n </customwidgets>\n <resources/>\n <connections/>\n</ui>\n"
  },
  {
    "path": "desktop-portal/dialogs/accountdialog.cpp",
    "content": "#include \"accountdialog.h\"\n#include \"ui_accountdialog.h\"\n\n#include <Applications/application.h>\n#include <QTemporaryFile>\n#include <Wm/desktopwm.h>\n#include <tcontentsizer.h>\n\nAccountDialog::AccountDialog(QString appId, QString reason, QWidget* parent) :\n    QDialog(parent),\n    ui(new Ui::AccountDialog) {\n    ui->setupUi(this);\n\n    new tContentSizer(ui->appInfoWidget);\n    new tContentSizer(ui->userInfoWidget);\n    new tContentSizer(ui->okButton);\n\n    Application app(appId);\n\n    ui->appInfoDescriptionLabel->setText(tr(\"%1 is requesting information about your profile.\").arg(QLocale().quoteString(app.getProperty(\"Name\").toString())));\n    if (reason.isEmpty()) {\n        ui->reasonLabel->setVisible(false);\n    } else {\n        ui->reasonLabel->setText(reason);\n    }\n\n    ui->usernameLabel->setText(DesktopWm::userUserName());\n    ui->realNameLabel->setText(DesktopWm::userDisplayName());\n}\n\nAccountDialog::~AccountDialog() {\n    delete ui;\n}\n\nQVariantMap AccountDialog::results() {\n    QTemporaryFile tempFile;\n    tempFile.setAutoRemove(false);\n    tempFile.open();\n    QIcon::fromTheme(\"user\").pixmap(QSize(512, 512)).save(&tempFile, \"PNG\");\n    tempFile.close();\n\n    return {\n        {\"id\",    DesktopWm::userUserName()                          },\n        {\"name\",  DesktopWm::userDisplayName()                       },\n        {\"image\", QUrl::fromLocalFile(tempFile.fileName()).toString()}\n    };\n}\n\nvoid AccountDialog::on_okButton_clicked() {\n    this->accept();\n}\n\nvoid AccountDialog::on_titleLabel_backButtonClicked() {\n    this->reject();\n}\n"
  },
  {
    "path": "desktop-portal/dialogs/accountdialog.h",
    "content": "#ifndef ACCOUNTDIALOG_H\n#define ACCOUNTDIALOG_H\n\n#include <QDialog>\n\nnamespace Ui {\n    class AccountDialog;\n}\n\nclass AccountDialog : public QDialog {\n        Q_OBJECT\n\n    public:\n        explicit AccountDialog(QString appId, QString reason, QWidget* parent = nullptr);\n        ~AccountDialog();\n\n        QVariantMap results();\n\n    private slots:\n        void on_okButton_clicked();\n\n        void on_titleLabel_backButtonClicked();\n\n    private:\n        Ui::AccountDialog* ui;\n};\n\n#endif // ACCOUNTDIALOG_H\n"
  },
  {
    "path": "desktop-portal/dialogs/accountdialog.ui",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ui version=\"4.0\">\n <class>AccountDialog</class>\n <widget class=\"QDialog\" name=\"AccountDialog\">\n  <property name=\"geometry\">\n   <rect>\n    <x>0</x>\n    <y>0</y>\n    <width>655</width>\n    <height>236</height>\n   </rect>\n  </property>\n  <property name=\"windowTitle\">\n   <string>Request for Account Information</string>\n  </property>\n  <layout class=\"QVBoxLayout\" name=\"verticalLayout\">\n   <property name=\"spacing\">\n    <number>0</number>\n   </property>\n   <property name=\"leftMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"topMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"rightMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"bottomMargin\">\n    <number>0</number>\n   </property>\n   <item>\n    <widget class=\"tTitleLabel\" name=\"titleLabel\">\n     <property name=\"text\">\n      <string>Request for Account Information</string>\n     </property>\n    </widget>\n   </item>\n   <item alignment=\"Qt::AlignHCenter\">\n    <widget class=\"QWidget\" name=\"appInfoWidget\" native=\"true\">\n     <layout class=\"QVBoxLayout\" name=\"verticalLayout_3\">\n      <item>\n       <widget class=\"QLabel\" name=\"appInfoDescriptionLabel\">\n        <property name=\"text\">\n         <string notr=\"true\">TextLabel</string>\n        </property>\n        <property name=\"wordWrap\">\n         <bool>true</bool>\n        </property>\n       </widget>\n      </item>\n      <item>\n       <widget class=\"QLabel\" name=\"reasonLabel\">\n        <property name=\"enabled\">\n         <bool>false</bool>\n        </property>\n        <property name=\"text\">\n         <string>TextLabel</string>\n        </property>\n        <property name=\"wordWrap\">\n         <bool>true</bool>\n        </property>\n       </widget>\n      </item>\n     </layout>\n    </widget>\n   </item>\n   <item alignment=\"Qt::AlignHCenter\">\n    <widget class=\"QWidget\" name=\"userInfoWidget\" native=\"true\">\n     <layout class=\"QGridLayout\" name=\"gridLayout\">\n      <item row=\"2\" column=\"0\">\n       <widget class=\"QLabel\" name=\"label_2\">\n        <property name=\"text\">\n         <string>Real Name</string>\n        </property>\n       </widget>\n      </item>\n      <item row=\"1\" column=\"0\">\n       <widget class=\"QLabel\" name=\"label\">\n        <property name=\"text\">\n         <string>Username</string>\n        </property>\n       </widget>\n      </item>\n      <item row=\"1\" column=\"1\">\n       <widget class=\"QLabel\" name=\"usernameLabel\">\n        <property name=\"sizePolicy\">\n         <sizepolicy hsizetype=\"Expanding\" vsizetype=\"Preferred\">\n          <horstretch>0</horstretch>\n          <verstretch>0</verstretch>\n         </sizepolicy>\n        </property>\n        <property name=\"text\">\n         <string notr=\"true\">TextLabel</string>\n        </property>\n       </widget>\n      </item>\n      <item row=\"2\" column=\"1\">\n       <widget class=\"QLabel\" name=\"realNameLabel\">\n        <property name=\"text\">\n         <string notr=\"true\">TextLabel</string>\n        </property>\n       </widget>\n      </item>\n      <item row=\"0\" column=\"0\" colspan=\"2\">\n       <widget class=\"tSubtitleLabel\" name=\"subtitleLabel\">\n        <property name=\"text\">\n         <string>Information to be shared</string>\n        </property>\n       </widget>\n      </item>\n     </layout>\n    </widget>\n   </item>\n   <item alignment=\"Qt::AlignHCenter\">\n    <widget class=\"QPushButton\" name=\"okButton\">\n     <property name=\"text\">\n      <string>Share Account Information</string>\n     </property>\n     <property name=\"icon\">\n      <iconset theme=\"dialog-ok\">\n       <normaloff>.</normaloff>.</iconset>\n     </property>\n    </widget>\n   </item>\n   <item>\n    <spacer name=\"verticalSpacer\">\n     <property name=\"orientation\">\n      <enum>Qt::Vertical</enum>\n     </property>\n     <property name=\"sizeHint\" stdset=\"0\">\n      <size>\n       <width>20</width>\n       <height>40</height>\n      </size>\n     </property>\n    </spacer>\n   </item>\n  </layout>\n </widget>\n <customwidgets>\n  <customwidget>\n   <class>tTitleLabel</class>\n   <extends>QLabel</extends>\n   <header location=\"global\">ttitlelabel.h</header>\n   <slots>\n    <signal>backButtonClicked()</signal>\n    <slot>backButtonClicked()</slot>\n   </slots>\n  </customwidget>\n  <customwidget>\n   <class>tSubtitleLabel</class>\n   <extends>QLabel</extends>\n   <header location=\"global\">tsubtitlelabel.h</header>\n  </customwidget>\n </customwidgets>\n <resources/>\n <connections/>\n</ui>\n"
  },
  {
    "path": "desktop-portal/dialogs/filedialog.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2021 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"filedialog.h\"\n#include \"ui_filedialog.h\"\n\n#include <tinputdialog.h>\n#include <QDBusMetaType>\n#include <resourcemanager.h>\n#include <QMessageBox>\n\nstruct FileDialogPrivate {\n    QStringList urls;\n};\n\nstruct Filter {\n    uint type;\n    QString pattern;\n};\nQ_DECLARE_METATYPE(Filter)\n\nQDBusArgument& operator<<(QDBusArgument& argument, const Filter& filter) {\n    argument.beginStructure();\n    argument << filter.type << filter.pattern;\n    argument.endStructure();\n    return argument;\n}\n\nconst QDBusArgument& operator>>(const QDBusArgument& argument, Filter& filter) {\n    argument.beginStructure();\n    argument >> filter.type >> filter.pattern;\n    argument.endStructure();\n    return argument;\n}\n\nstruct FilterCategory {\n    QString name;\n    QList<Filter> filters;\n};\nQ_DECLARE_METATYPE(FilterCategory)\n\nQDBusArgument& operator<<(QDBusArgument& argument, const FilterCategory& filter) {\n    argument.beginStructure();\n    argument << filter.name << filter.filters;\n    argument.endStructure();\n    return argument;\n}\n\nconst QDBusArgument& operator>>(const QDBusArgument& argument, FilterCategory& filter) {\n    argument.beginStructure();\n    argument >> filter.name >> filter.filters;\n    argument.endStructure();\n    return argument;\n}\n\nFileDialog::FileDialog(bool isSave, QVariantMap options, QWidget* parent) :\n    QDialog(parent),\n    ui(new Ui::FileDialog) {\n    ui->setupUi(this);\n\n    d = new FileDialogPrivate();\n\n    ui->titleLabel->setBackButtonShown(true);\n\n    bool setOpenButton = true;\n    QList<FileTab::ColumnAction> columnActions;\n\n    if (isSave) {\n        columnActions.append({\n            tr(\"Save Here\"),\n            tr(\"Create New File Here\"),\n            [ = ](DirectoryPtr directory) {\n                QUrl directoryUrl = directory->url();\n                if (!directoryUrl.path().endsWith(\"/\")) directoryUrl.setPath(directoryUrl.path() + \"/\");\n\n                bool saved = false;\n                QString filename;\n\n                while (!saved) {\n                    bool ok;\n                    filename = tInputDialog::getText(this, tr(\"Name this file\"), tr(\"What do you want to name the file?\"), QLineEdit::Normal, filename, &ok);\n                    if (!ok) return;\n\n                    saved = acceptSave(directoryUrl.resolved(filename));\n                }\n            }\n        });\n    } else {\n        if (options.value(\"directory\", false).toBool()) {\n            columnActions.append({\n                tr(\"Open Folder\"),\n                tr(\"Choose This Folder\"),\n                [ = ](DirectoryPtr directory) {\n                    d->urls.append(directory->url().toString());\n                    this->accept();\n                }\n            });\n            setOpenButton = false;\n        }\n    }\n\n    ui->filePicker->setColumnActions(columnActions);\n\n    if (setOpenButton) {\n        QString openButtonText = options.value(\"accept_label\", isSave ? tr(\"Overwrite\") : tr(\"Open\")).toString();\n        QIcon openButtonIcon = QIcon::fromTheme(isSave ? \"document-save\" : \"document-open\");\n\n        ui->filePicker->setOpenFileButtons({\n            {\n                openButtonText,\n                openButtonIcon,\n                [ = ](QList<QUrl> selected) {\n                    if (isSave) {\n                        acceptSave(selected.first());\n                    } else {\n                        for (QUrl url : selected) {\n                            d->urls.append(url.toString());\n                        }\n                        this->accept();\n                    }\n                },\n                true\n            }\n        });\n    }\n\n    //Set up filters\n    qDBusRegisterMetaType<Filter>();\n    qDBusRegisterMetaType<FilterCategory>();\n    qDBusRegisterMetaType<QList<Filter>>();\n    qDBusRegisterMetaType<QList<FilterCategory>>();\n\n    QDBusArgument filtersArgument = options.value(\"filters\").value<QDBusArgument>();\n\n    QList<FilterCategory> filters;\n    filtersArgument >> filters;\n\n    QList<FileTab::Filter> pickerFilters;\n    for (FilterCategory filterCatg : filters) {\n        for (Filter filter : filterCatg.filters) {\n            pickerFilters.append(FileTab::Filter{filter.type == 1, filter.pattern});\n        }\n    }\n    ui->filePicker->setFilters(pickerFilters);\n\n    this->resize(SC_DPI_T(this->size(), QSize));\n}\n\nFileDialog::~FileDialog() {\n    delete d;\n    delete ui;\n}\n\nQStringList FileDialog::uris() {\n    return d->urls;\n}\n\nQVariant FileDialog::choices() {\n    return QVariant();\n}\n\nbool FileDialog::isWritable() {\n    return true;\n}\n\nvoid FileDialog::setWindowTitle(QString windowTitle) {\n    QDialog::setWindowTitle(windowTitle);\n    ui->titleLabel->setText(windowTitle);\n}\n\nvoid FileDialog::on_titleLabel_backButtonClicked() {\n    this->reject();\n}\n\nbool FileDialog::acceptSave(QUrl url) {\n    if (ResourceManager::parentDirectoryForUrl(url)->isFile(url.fileName())) {\n        QMessageBox box(this);\n        box.setWindowTitle(tr(\"Overwrite?\"));\n        box.setText(tr(\"A file named %1 already exists. Do you want to overwrite it?\").arg(QLocale().quoteString(url.fileName())));\n        box.setInformativeText(tr(\"Overwriting the file will replace its contents.\"));\n        box.setIcon(QMessageBox::Warning);\n        box.setStandardButtons(QMessageBox::Yes | QMessageBox::No);\n        if (box.exec() == QMessageBox::No) return false;\n    }\n\n    d->urls.append(url.toString());\n    this->accept();\n    return true;\n}\n\n"
  },
  {
    "path": "desktop-portal/dialogs/filedialog.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2021 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef FILEDIALOG_H\n#define FILEDIALOG_H\n\n#include <QDialog>\n#include <QDBusMessage>\n\nnamespace Ui {\n    class FileDialog;\n}\n\nstruct FileDialogPrivate;\nclass FileDialog : public QDialog {\n        Q_OBJECT\n\n    public:\n        explicit FileDialog(bool isSave, QVariantMap options, QWidget* parent = nullptr);\n        ~FileDialog();\n\n        QStringList uris();\n        QVariant choices();\n        bool isWritable();\n\n        void setWindowTitle(QString windowTitle);\n\n    private slots:\n        void on_titleLabel_backButtonClicked();\n\n    private:\n        Ui::FileDialog* ui;\n        FileDialogPrivate* d;\n\n        bool acceptSave(QUrl url);\n};\n\n#endif // FILEDIALOG_H\n"
  },
  {
    "path": "desktop-portal/dialogs/filedialog.ui",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ui version=\"4.0\">\n <class>FileDialog</class>\n <widget class=\"QDialog\" name=\"FileDialog\">\n  <property name=\"geometry\">\n   <rect>\n    <x>0</x>\n    <y>0</y>\n    <width>945</width>\n    <height>661</height>\n   </rect>\n  </property>\n  <property name=\"windowTitle\">\n   <string notr=\"true\">Dialog</string>\n  </property>\n  <layout class=\"QVBoxLayout\" name=\"verticalLayout\">\n   <property name=\"spacing\">\n    <number>0</number>\n   </property>\n   <property name=\"leftMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"topMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"rightMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"bottomMargin\">\n    <number>0</number>\n   </property>\n   <item>\n    <widget class=\"tTitleLabel\" name=\"titleLabel\">\n     <property name=\"text\">\n      <string notr=\"true\">Dialog Title</string>\n     </property>\n    </widget>\n   </item>\n   <item>\n    <widget class=\"FileTab\" name=\"filePicker\" native=\"true\">\n     <property name=\"sizePolicy\">\n      <sizepolicy hsizetype=\"Preferred\" vsizetype=\"Expanding\">\n       <horstretch>0</horstretch>\n       <verstretch>0</verstretch>\n      </sizepolicy>\n     </property>\n    </widget>\n   </item>\n  </layout>\n </widget>\n <customwidgets>\n  <customwidget>\n   <class>tTitleLabel</class>\n   <extends>QLabel</extends>\n   <header location=\"global\">ttitlelabel.h</header>\n   <slots>\n    <signal>backButtonClicked()</signal>\n   </slots>\n  </customwidget>\n  <customwidget>\n   <class>FileTab</class>\n   <extends>QWidget</extends>\n   <header location=\"global\">filetab.h</header>\n   <container>1</container>\n  </customwidget>\n </customwidgets>\n <resources/>\n <connections/>\n</ui>\n"
  },
  {
    "path": "desktop-portal/dialogs/penbutton.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"penbutton.h\"\n\n#include <QPainter>\n#include <QSvgRenderer>\n#include <QFile>\n#include <tvariantanimation.h>\n\nstruct PenButtonPrivate {\n    PenButton::PenType penType;\n    QColor color;\n\n    tVariantAnimation* heightAnim;\n    QSvgRenderer* renderer;\n};\n\nPenButton::PenButton(PenType penType, QColor color, QWidget* parent) : QPushButton(parent) {\n    d = new PenButtonPrivate();\n    d->color = color;\n    d->penType = penType;\n\n    QString data;\n    if (penType == Pen) {\n        this->setFixedSize(SC_DPI_T(QSize(40, 60), QSize));\n\n        QFile penFile(\":/screenshot/icons/pen.svg\");\n        penFile.open(QFile::ReadOnly);\n        data = penFile.readAll();\n        data = data.arg(color.name(QColor::HexRgb));\n    } else {\n        this->setFixedSize(SC_DPI_T(QSize(60, 60), QSize));\n\n        QFile penFile(\":/screenshot/icons/eraser.svg\");\n        penFile.open(QFile::ReadOnly);\n        data = penFile.readAll();\n        data = data.arg(tr(\"Erase-o\", \"This and the next translation span two lines. Be spiffy with these!\"))\n            .arg(tr(\"matic 2000\", \"This and the previous translation span two lines. Be spiffy with these!\"))\n            .arg(this->font().family());\n    }\n\n    d->heightAnim = new tVariantAnimation(this);\n    d->heightAnim->setStartValue(0);\n    d->heightAnim->setEndValue(0);\n    d->heightAnim->setEasingCurve(QEasingCurve::OutCubic);\n    d->heightAnim->setDuration(250);\n    connect(d->heightAnim, &tVariantAnimation::valueChanged, this, [ = ](QVariant value) {\n        this->setFixedHeight(value.toInt());\n    });\n\n    d->renderer = new QSvgRenderer();\n    d->renderer->load(data.toUtf8());\n\n    this->setCheckable(true);\n    this->setAutoExclusive(true);\n}\n\nPenButton::~PenButton() {\n    d->renderer->deleteLater();\n    delete d;\n}\n\nQColor PenButton::color() const {\n    return d->color;\n}\n\nvoid PenButton::paintEvent(QPaintEvent* event) {\n    QPainter painter(this);\n    d->renderer->render(&painter, QRectF(0, 0, this->width(), SC_DPI(100)));\n}\n\nvoid PenButton::updateChecked() {\n    d->heightAnim->setStartValue(this->height());\n    if (this->isChecked()) {\n        d->heightAnim->setEndValue(SC_DPI(100));\n    } else {\n        d->heightAnim->setEndValue(SC_DPI(60));\n    }\n    d->heightAnim->start();\n}\n\n\nvoid PenButton::checkStateSet() {\n    updateChecked();\n}\n\nvoid PenButton::nextCheckState() {\n    this->setChecked(!this->isChecked());\n    updateChecked();\n}\n"
  },
  {
    "path": "desktop-portal/dialogs/penbutton.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef PENBUTTON_H\n#define PENBUTTON_H\n\n#include <QPushButton>\n\nstruct PenButtonPrivate;\nclass PenButton : public QPushButton {\n        Q_OBJECT\n    public:\n        enum PenType {\n            Pen,\n            Eraser\n        };\n\n        explicit PenButton(PenType penType, QColor color, QWidget* parent = nullptr);\n        ~PenButton();\n\n        QColor color() const;\n\n    signals:\n\n    private:\n        void paintEvent(QPaintEvent* event);\n\n        PenButtonPrivate* d;\n\n        void updateChecked();\n\n        // QAbstractButton interface\n    protected:\n        void checkStateSet();\n        void nextCheckState();\n};\n\n#endif // PENBUTTON_H\n"
  },
  {
    "path": "desktop-portal/dialogs/screenshotwindow.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"screenshotwindow.h\"\n#include \"ui_screenshotwindow.h\"\n\n#include \"backend/abstractportalbackend.h\"\n#include \"penbutton.h\"\n#include <QClipboard>\n#include <QMouseEvent>\n#include <QPainter>\n#include <QPicture>\n#include <QScreen>\n#include <QShortcut>\n#include <tvariantanimation.h>\n\nstruct ScreenshotWindowPrivate {\n        enum Operation {\n            Crop,\n            Redact,\n            Pen\n        };\n        Operation currentOperation = Crop;\n        QColor currentColor;\n        QPainter::CompositionMode compMode = QPainter::CompositionMode_SourceOver;\n        qreal penWidth;\n\n        QScreen* screen;\n        QPixmap originalShot;\n\n        tVariantAnimation* darkenAnim;\n        tVariantAnimation* viewportAnim;\n\n        QRect cropRect;\n\n        QPoint topLeftDrag;\n        QRect editingRect;\n\n        QPixmap overlay;\n        ScreenshotWindow::Type type = ScreenshotWindow::Type::ApplicationScreenshot;\n};\n\nScreenshotWindow::ScreenshotWindow(QScreen* screen, QWidget* parent) :\n    QWidget(parent),\n    ui(new Ui::ScreenshotWindow) {\n    ui->setupUi(this);\n\n    this->setWindowFlag(Qt::FramelessWindowHint);\n    this->setWindowFlag(Qt::WindowStaysOnTopHint);\n    this->setAttribute(Qt::WA_TranslucentBackground);\n\n    d = new ScreenshotWindowPrivate();\n    d->screen = screen;\n\n    d->darkenAnim = new tVariantAnimation(this);\n    d->darkenAnim->setStartValue(0.0);\n    d->darkenAnim->setEndValue(0.5);\n    d->darkenAnim->setEasingCurve(QEasingCurve::OutCubic);\n    d->darkenAnim->setDuration(250);\n    connect(d->darkenAnim, &tVariantAnimation::valueChanged, this, [=] {\n        this->update();\n    });\n    connect(d->darkenAnim, &tVariantAnimation::finished, this, [=] {\n        this->update();\n    });\n    d->darkenAnim->start();\n\n    d->viewportAnim = new tVariantAnimation(this);\n    d->viewportAnim->setStartValue(QRect(0, 0, screen->geometry().width(), screen->geometry().height()));\n    d->viewportAnim->setEndValue(QRect(0, 0, screen->geometry().width(), screen->geometry().height()));\n    d->viewportAnim->setEasingCurve(QEasingCurve::OutCubic);\n    d->viewportAnim->setDuration(250);\n    connect(d->viewportAnim, &tVariantAnimation::valueChanged, this, [=] {\n        this->update();\n    });\n    connect(d->viewportAnim, &tVariantAnimation::finished, this, [=] {\n        this->update();\n    });\n\n    this->setGeometry(screen->geometry());\n\n    d->overlay = QPixmap(screen->geometry().size());\n    d->overlay.fill(Qt::transparent);\n\n    for (QColor col : {\n             QColor(255, 0, 0),\n             QColor(0, 255, 0),\n             QColor(0, 0, 255),\n             QColor(255, 255, 0),\n             QColor(0, 255, 255),\n             QColor(255, 0, 255)}) {\n        PenButton* b = new PenButton(PenButton::Pen, col, this);\n        connect(b, &PenButton::toggled, this, [=](bool checked) {\n            if (checked) {\n                d->currentOperation = ScreenshotWindowPrivate::Pen;\n                d->currentColor = b->color();\n                d->compMode = QPainter::CompositionMode_SourceOver;\n                d->penWidth = SC_DPI(3);\n\n                this->update();\n            }\n        });\n        ui->pensLayout->addWidget(b, 0, Qt::AlignBottom);\n    }\n\n    PenButton* eraser = new PenButton(PenButton::Eraser, QColor(0, 0, 0, 0), this);\n    connect(eraser, &PenButton::toggled, this, [=](bool checked) {\n        if (checked) {\n            d->currentOperation = ScreenshotWindowPrivate::Pen;\n            d->currentColor = eraser->color();\n            d->compMode = QPainter::CompositionMode_Source;\n            d->penWidth = SC_DPI(10);\n\n            this->update();\n        }\n    });\n    ui->pensLayout->addWidget(eraser, 0, Qt::AlignBottom);\n\n    QShortcut* discardShortcut = new QShortcut(QKeySequence(Qt::Key_Escape), this);\n    connect(discardShortcut, &QShortcut::activated, this, [=] {\n        ui->discardButton->click();\n    });\n\n    this->setType(Type::ApplicationScreenshot);\n    ui->discardButton->setProperty(\"type\", \"destructive\");\n}\n\nvoid ScreenshotWindow::paintEvent(QPaintEvent* event) {\n    bool editing = d->editingRect.isValid();\n    QRect cropRect;\n\n    if (ui->cropButton->isChecked() && editing) {\n        cropRect = d->editingRect;\n    } else {\n        cropRect = d->cropRect;\n    }\n\n    QPainter painter(this);\n    painter.setViewport(d->viewportAnim->currentValue().toRect());\n    painter.drawPixmap(0, 0, this->width(), this->height(), d->originalShot);\n\n    if (d->type != Type::ColourPicker) {\n        if (cropRect.isValid() || d->currentOperation == ScreenshotWindowPrivate::Crop) {\n            painter.setOpacity(d->darkenAnim->currentValue().toDouble());\n            painter.setPen(Qt::transparent);\n            painter.setBrush(Qt::black);\n            painter.drawRect(0, 0, this->width(), this->height());\n            painter.setOpacity(1);\n\n            if (cropRect.isValid()) {\n                painter.drawPixmap(cropRect, d->originalShot, cropRect);\n            }\n        }\n\n        painter.drawPixmap(0, 0, this->width(), this->height(), d->overlay);\n\n        if (d->currentOperation == ScreenshotWindowPrivate::Redact && editing) {\n            painter.setPen(Qt::transparent);\n            painter.setBrush(Qt::black);\n            painter.drawRect(d->editingRect);\n        }\n\n        if (cropRect.isValid()) {\n            painter.setPen(Qt::white);\n            painter.setBrush(Qt::transparent);\n            painter.drawRect(cropRect.adjusted(-1, -1, 0, 0));\n        }\n    }\n}\n\nScreenshotWindow::~ScreenshotWindow() {\n    delete d;\n    delete ui;\n}\n\nQCoro::Task<> ScreenshotWindow::prepareWindow() {\n    d->originalShot = co_await AbstractPortalBackend::instance()->takeScreenshot(d->screen);\n}\n\nvoid ScreenshotWindow::take(QScreen* screen, int delay) {\n    ScreenshotWindow* w = new ScreenshotWindow(screen);\n    w->showFullScreen();\n}\n\nvoid ScreenshotWindow::animateDiscard() {\n    d->viewportAnim->setEndValue(QRect(0, this->height(), this->width(), this->height()));\n    d->viewportAnim->setEasingCurve(QEasingCurve::InCubic);\n    d->viewportAnim->start();\n\n    tVariantAnimation* paneAnim = new tVariantAnimation(this);\n    paneAnim->setStartValue(ui->bottomPane->height());\n    paneAnim->setEndValue(0);\n    paneAnim->setDuration(250);\n    paneAnim->setEasingCurve(QEasingCurve::OutCubic);\n    connect(paneAnim, &tVariantAnimation::valueChanged, this, [=](QVariant value) {\n        ui->bottomPane->setFixedHeight(value.toInt());\n    });\n    paneAnim->start();\n\n    connect(d->viewportAnim, &tVariantAnimation::finished, this, &ScreenshotWindow::animationComplete);\n}\n\nvoid ScreenshotWindow::animateTake() {\n    d->viewportAnim->setEndValue(QRect(0, -this->height(), this->width(), this->height()));\n    d->viewportAnim->setEasingCurve(QEasingCurve::InCubic);\n    d->viewportAnim->start();\n\n    tVariantAnimation* paneAnim = new tVariantAnimation(this);\n    paneAnim->setStartValue(ui->bottomPane->height());\n    paneAnim->setEndValue(0);\n    paneAnim->setDuration(250);\n    paneAnim->setEasingCurve(QEasingCurve::OutCubic);\n    connect(paneAnim, &tVariantAnimation::valueChanged, this, [=](QVariant value) {\n        ui->bottomPane->setFixedHeight(value.toInt());\n    });\n    paneAnim->start();\n\n    connect(d->viewportAnim, &tVariantAnimation::finished, this, &ScreenshotWindow::animationComplete);\n}\n\nvoid ScreenshotWindow::setType(Type type) {\n    d->type = type;\n    switch (type) {\n        case Type::ApplicationScreenshot:\n            {\n                ui->discardButton->setText(tr(\"Cancel\"));\n                ui->copyButton->setText(tr(\"Share Screenshot\"));\n                ui->copyButton->setIcon(QIcon::fromTheme(\"dialog-ok\"));\n                ui->topPane->setVisible(false);\n                ui->bottomPane->setVisible(true);\n                this->setMouseTracking(false);\n                this->setCursor(QCursor(Qt::CrossCursor));\n                break;\n            }\n        case Type::TheDeskScreenshot:\n            {\n                ui->discardButton->setText(tr(\"Discard\"));\n                ui->copyButton->setText(tr(\"Copy\"));\n                ui->copyButton->setIcon(QIcon::fromTheme(\"edit-copy\"));\n                ui->topPane->setVisible(false);\n                ui->bottomPane->setVisible(true);\n                this->setMouseTracking(false);\n                this->setCursor(QCursor(Qt::CrossCursor));\n                break;\n            }\n        case Type::ColourPicker:\n            {\n                ui->topPane->setVisible(false);\n                ui->bottomPane->setVisible(false);\n                this->setMouseTracking(true);\n                break;\n            }\n    }\n}\n\nvoid ScreenshotWindow::on_discardButton_clicked() {\n    emit cancelled();\n}\n\nvoid ScreenshotWindow::mousePressEvent(QMouseEvent* event) {\n    if (d->type == Type::ColourPicker) {\n        emit colourClicked(d->originalShot.toImage().pixelColor(event->position().toPoint()));\n    } else {\n        d->topLeftDrag = event->pos();\n    }\n}\n\nvoid ScreenshotWindow::mouseReleaseEvent(QMouseEvent* event) {\n    if (d->type == Type::ColourPicker) {\n    } else {\n        if (d->currentOperation == ScreenshotWindowPrivate::Crop) {\n            d->cropRect = d->editingRect;\n            this->update();\n        } else if (d->currentOperation == ScreenshotWindowPrivate::Redact) {\n            QPainter painter(&d->overlay);\n            painter.setPen(Qt::transparent);\n            painter.setBrush(Qt::black);\n            painter.drawRect(d->editingRect);\n        }\n\n        d->editingRect = QRect();\n        this->update();\n    }\n}\n\nvoid ScreenshotWindow::mouseMoveEvent(QMouseEvent* event) {\n    if (d->type == Type::ColourPicker) {\n        auto col = d->originalShot.toImage().pixelColor(event->position().toPoint());\n        QSize cursorSize(32, 32);\n\n        QRect circle(QPoint(0, 0), cursorSize);\n        QRect innerCircle = circle.adjusted(3, 3, -3, -3);\n        QPolygon pointer;\n        pointer.append(circle.topLeft());\n        pointer.append(QPoint(circle.width() / 2, 0));\n        pointer.append(QPoint(0, circle.height() / 2));\n\n        QPixmap cursorPic(cursorSize);\n        cursorPic.fill(Qt::transparent);\n        QPainter painter(&cursorPic);\n\n        painter.setPen(Qt::transparent);\n        painter.setBrush(Qt::black);\n        painter.drawEllipse(circle);\n        painter.drawPolygon(pointer);\n\n        painter.setBrush(col);\n        painter.drawEllipse(innerCircle);\n\n        painter.end();\n\n        QCursor cursor(cursorPic, 0, 0);\n        this->setCursor(cursor);\n    } else {\n        if (d->currentOperation == ScreenshotWindowPrivate::Pen) {\n            QPainter painter(&d->overlay);\n            painter.setCompositionMode(d->compMode);\n            painter.setPen(QPen(d->currentColor, d->penWidth));\n            painter.drawLine(d->topLeftDrag, event->pos());\n\n            d->topLeftDrag = event->pos();\n        } else {\n            d->editingRect = QRect(d->topLeftDrag, event->pos());\n            d->editingRect = d->editingRect.normalized();\n        }\n        this->update();\n    }\n}\n\nQPixmap ScreenshotWindow::finalResult() {\n    QPixmap result = d->originalShot;\n\n    // Draw in any edits\n    QPainter painter(&result);\n    painter.drawPixmap(0, 0, this->width(), this->height(), d->overlay);\n    painter.end();\n\n    // Crop the image\n    if (d->cropRect.isValid()) {\n        result = result.copy(d->cropRect);\n    }\n\n    return result;\n}\n\nvoid ScreenshotWindow::on_copyButton_clicked() {\n    auto result = finalResult();\n    if (d->type == Type::TheDeskScreenshot) {\n        // Also copy to the clipboard\n        QApplication::clipboard()->setPixmap(finalResult());\n    }\n    emit screenshotAvailable(result);\n}\n\nvoid ScreenshotWindow::on_cropButton_toggled(bool checked) {\n    if (checked) {\n        d->currentOperation = ScreenshotWindowPrivate::Crop;\n\n        this->update();\n    }\n}\n\nvoid ScreenshotWindow::on_redactButton_toggled(bool checked) {\n    if (checked) {\n        d->currentOperation = ScreenshotWindowPrivate::Redact;\n\n        this->update();\n    }\n}\n\nvoid ScreenshotWindow::on_resetButton_clicked() {\n    d->overlay.fill(Qt::transparent);\n    this->update();\n}\n"
  },
  {
    "path": "desktop-portal/dialogs/screenshotwindow.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef SCREENSHOTWINDOW_H\n#define SCREENSHOTWINDOW_H\n\n#include <QCoroTask>\n#include <QWidget>\n\nnamespace Ui {\n    class ScreenshotWindow;\n}\n\nstruct ScreenshotWindowPrivate;\nclass ScreenshotWindow : public QWidget {\n        Q_OBJECT\n\n    public:\n        explicit ScreenshotWindow(QScreen* screen, QWidget* parent = nullptr);\n        ~ScreenshotWindow();\n\n        QCoro::Task<> prepareWindow();\n\n        enum class Type {\n            ApplicationScreenshot,\n            TheDeskScreenshot,\n            ColourPicker\n        };\n\n        static void take(QScreen* screen, int delay = 0);\n\n        void animateDiscard();\n        void animateTake();\n\n        void setType(Type type);\n\n    private slots:\n        void on_discardButton_clicked();\n\n        void on_copyButton_clicked();\n\n        void on_cropButton_toggled(bool checked);\n\n        void on_redactButton_toggled(bool checked);\n\n        void on_resetButton_clicked();\n\n    signals:\n        void screenshotAvailable(QPixmap result);\n        void colourClicked(QColor color);\n        void cancelled();\n        void animationComplete();\n\n    private:\n        void paintEvent(QPaintEvent* event);\n        void mousePressEvent(QMouseEvent* event);\n        void mouseReleaseEvent(QMouseEvent* event);\n        void mouseMoveEvent(QMouseEvent* event);\n\n        QPixmap finalResult();\n\n        Ui::ScreenshotWindow* ui;\n        ScreenshotWindowPrivate* d;\n};\n\n#endif // SCREENSHOTWINDOW_H\n"
  },
  {
    "path": "desktop-portal/dialogs/screenshotwindow.ui",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ui version=\"4.0\">\n <class>ScreenshotWindow</class>\n <widget class=\"QWidget\" name=\"ScreenshotWindow\">\n  <property name=\"geometry\">\n   <rect>\n    <x>0</x>\n    <y>0</y>\n    <width>891</width>\n    <height>512</height>\n   </rect>\n  </property>\n  <property name=\"windowTitle\">\n   <string notr=\"true\">Form</string>\n  </property>\n  <layout class=\"QVBoxLayout\" name=\"verticalLayout\">\n   <property name=\"leftMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"topMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"rightMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"bottomMargin\">\n    <number>0</number>\n   </property>\n   <item>\n    <widget class=\"QWidget\" name=\"topPane\" native=\"true\">\n     <layout class=\"QVBoxLayout\" name=\"verticalLayout_3\">\n      <property name=\"leftMargin\">\n       <number>9</number>\n      </property>\n      <property name=\"topMargin\">\n       <number>9</number>\n      </property>\n      <property name=\"rightMargin\">\n       <number>9</number>\n      </property>\n      <property name=\"bottomMargin\">\n       <number>9</number>\n      </property>\n      <item>\n       <widget class=\"QLabel\" name=\"label\">\n        <property name=\"font\">\n         <font>\n          <bold>true</bold>\n         </font>\n        </property>\n        <property name=\"text\">\n         <string>SCREENSHOT</string>\n        </property>\n       </widget>\n      </item>\n     </layout>\n    </widget>\n   </item>\n   <item>\n    <spacer name=\"verticalSpacer\">\n     <property name=\"orientation\">\n      <enum>Qt::Vertical</enum>\n     </property>\n     <property name=\"sizeHint\" stdset=\"0\">\n      <size>\n       <width>20</width>\n       <height>207</height>\n      </size>\n     </property>\n    </spacer>\n   </item>\n   <item>\n    <widget class=\"QWidget\" name=\"bottomPane\" native=\"true\">\n     <layout class=\"QHBoxLayout\" name=\"horizontalLayout_4\">\n      <property name=\"spacing\">\n       <number>0</number>\n      </property>\n      <property name=\"leftMargin\">\n       <number>0</number>\n      </property>\n      <property name=\"topMargin\">\n       <number>0</number>\n      </property>\n      <property name=\"rightMargin\">\n       <number>0</number>\n      </property>\n      <property name=\"bottomMargin\">\n       <number>0</number>\n      </property>\n      <item>\n       <widget class=\"QWidget\" name=\"widget\" native=\"true\">\n        <layout class=\"QHBoxLayout\" name=\"horizontalLayout_3\">\n         <property name=\"spacing\">\n          <number>0</number>\n         </property>\n         <property name=\"leftMargin\">\n          <number>0</number>\n         </property>\n         <property name=\"topMargin\">\n          <number>0</number>\n         </property>\n         <property name=\"rightMargin\">\n          <number>0</number>\n         </property>\n         <property name=\"bottomMargin\">\n          <number>0</number>\n         </property>\n         <item>\n          <layout class=\"QHBoxLayout\" name=\"horizontalLayout_2\">\n           <property name=\"spacing\">\n            <number>0</number>\n           </property>\n           <property name=\"leftMargin\">\n            <number>9</number>\n           </property>\n           <property name=\"topMargin\">\n            <number>9</number>\n           </property>\n           <property name=\"rightMargin\">\n            <number>9</number>\n           </property>\n           <property name=\"bottomMargin\">\n            <number>9</number>\n           </property>\n           <item alignment=\"Qt::AlignBottom\">\n            <widget class=\"QPushButton\" name=\"cropButton\">\n             <property name=\"text\">\n              <string>Crop</string>\n             </property>\n             <property name=\"icon\">\n              <iconset theme=\"image-crop\">\n               <normaloff>.</normaloff>.</iconset>\n             </property>\n             <property name=\"checkable\">\n              <bool>true</bool>\n             </property>\n             <property name=\"checked\">\n              <bool>true</bool>\n             </property>\n             <property name=\"autoExclusive\">\n              <bool>true</bool>\n             </property>\n            </widget>\n           </item>\n           <item alignment=\"Qt::AlignBottom\">\n            <widget class=\"QPushButton\" name=\"redactButton\">\n             <property name=\"text\">\n              <string>Redact</string>\n             </property>\n             <property name=\"icon\">\n              <iconset theme=\"visibility\">\n               <normaloff>.</normaloff>.</iconset>\n             </property>\n             <property name=\"checkable\">\n              <bool>true</bool>\n             </property>\n             <property name=\"autoExclusive\">\n              <bool>true</bool>\n             </property>\n            </widget>\n           </item>\n          </layout>\n         </item>\n         <item>\n          <layout class=\"QHBoxLayout\" name=\"pensLayout\"/>\n         </item>\n        </layout>\n       </widget>\n      </item>\n      <item>\n       <spacer name=\"horizontalSpacer\">\n        <property name=\"orientation\">\n         <enum>Qt::Horizontal</enum>\n        </property>\n        <property name=\"sizeHint\" stdset=\"0\">\n         <size>\n          <width>40</width>\n          <height>20</height>\n         </size>\n        </property>\n       </spacer>\n      </item>\n      <item>\n       <layout class=\"QHBoxLayout\" name=\"horizontalLayout\">\n        <property name=\"spacing\">\n         <number>0</number>\n        </property>\n        <property name=\"leftMargin\">\n         <number>9</number>\n        </property>\n        <property name=\"topMargin\">\n         <number>9</number>\n        </property>\n        <property name=\"rightMargin\">\n         <number>9</number>\n        </property>\n        <property name=\"bottomMargin\">\n         <number>9</number>\n        </property>\n        <item alignment=\"Qt::AlignBottom\">\n         <widget class=\"QPushButton\" name=\"resetButton\">\n          <property name=\"text\">\n           <string>Reset Markup</string>\n          </property>\n          <property name=\"icon\">\n           <iconset theme=\"view-refresh\">\n            <normaloff>.</normaloff>.</iconset>\n          </property>\n         </widget>\n        </item>\n        <item alignment=\"Qt::AlignBottom\">\n         <widget class=\"QPushButton\" name=\"discardButton\">\n          <property name=\"text\">\n           <string notr=\"true\">Cancel</string>\n          </property>\n          <property name=\"icon\">\n           <iconset theme=\"edit-delete\">\n            <normaloff>.</normaloff>.</iconset>\n          </property>\n         </widget>\n        </item>\n        <item alignment=\"Qt::AlignBottom\">\n         <widget class=\"QPushButton\" name=\"copyButton\">\n          <property name=\"text\">\n           <string notr=\"true\">Share Screenshot</string>\n          </property>\n          <property name=\"icon\">\n           <iconset theme=\"edit-copy\">\n            <normaloff>.</normaloff>.</iconset>\n          </property>\n         </widget>\n        </item>\n       </layout>\n      </item>\n     </layout>\n    </widget>\n   </item>\n  </layout>\n </widget>\n <resources/>\n <connections/>\n</ui>\n"
  },
  {
    "path": "desktop-portal/interfaces/accessinterface.cpp",
    "content": "#include \"accessinterface.h\"\n\n#include \"dialogs/accessdialog.h\"\n#include <QDBusConnection>\n#include <QDBusMessage>\n#include <Screens/systempopover.h>\n\nAccessInterface::AccessInterface(QObject* parent) :\n    QDBusAbstractAdaptor{parent} {\n}\n\nuint AccessInterface::AccessDialog(QDBusObjectPath handle, QString appId, QString parentWindow, QString title, QString subtitle, QString body, QVariantMap options, const QDBusMessage& message, QVariantMap& results) {\n    auto dialog = new class AccessDialog();\n    dialog->setTitle(title);\n    dialog->setSubtitle(subtitle);\n    dialog->setBody(body);\n    dialog->setDenyButtonText(options.value(\"deny_label\", tr(\"Deny\")).toString());\n    dialog->setAllowButtonText(options.value(\"grant_label\", tr(\"Allow\")).toString());\n\n    auto replyTemplate = message.createReply();\n\n    auto* popover = new SystemPopover(dialog);\n    popover->setPopoverWidth(600);\n    popover->setPopoverSide(tPopover::Bottom);\n    connect(dialog, &AccessDialog::accept, this, [popover, replyTemplate] {\n        auto reply = QDBusMessage(replyTemplate);\n        reply.setArguments({uint(0), QVariantMap()});\n        QDBusConnection::sessionBus().send(replyTemplate);\n        popover->dismiss();\n    });\n    connect(dialog, &AccessDialog::reject, this, [popover, replyTemplate] {\n        auto reply = QDBusMessage(replyTemplate);\n        reply.setArguments({uint(1), QVariantMap()});\n        QDBusConnection::sessionBus().send(replyTemplate);\n        popover->dismiss();\n    });\n    connect(popover, &tPopover::dismissed, this, [popover] {\n        popover->deleteLater();\n    });\n    popover->show();\n\n    message.setDelayedReply(true);\n    return 1;\n}\n"
  },
  {
    "path": "desktop-portal/interfaces/accessinterface.h",
    "content": "#ifndef ACCESSINTERFACE_H\n#define ACCESSINTERFACE_H\n\n#include <QDBusAbstractAdaptor>\n#include <QDBusObjectPath>\n\nclass QDBusMessage;\nclass AccessInterface : public QDBusAbstractAdaptor {\n        Q_OBJECT\n        Q_CLASSINFO(\"D-Bus Interface\", \"org.freedesktop.impl.portal.Access\")\n\n    public:\n        explicit AccessInterface(QObject* parent = nullptr);\n\n    public slots:\n        Q_SCRIPTABLE uint AccessDialog(QDBusObjectPath handle, QString appId, QString parentWindow, QString title, QString subtitle, QString body, QVariantMap options, const QDBusMessage& message, QVariantMap& results);\n\n    signals:\n};\n\n#endif // ACCESSINTERFACE_H\n"
  },
  {
    "path": "desktop-portal/interfaces/accountinterface.cpp",
    "content": "#include \"accountinterface.h\"\n\n#include \"dialogs/accountdialog.h\"\n#include \"portalcommon.h\"\n#include <QCoroCore>\n#include <QDBusConnection>\n#include <QDBusMessage>\n#include <QDBusObjectPath>\n\nAccountInterface::AccountInterface(QObject* parent) :\n    QDBusAbstractAdaptor{parent} {\n}\n\nuint AccountInterface::version() {\n    return 1;\n}\n\nuint AccountInterface::GetUserInformation(QDBusObjectPath handle, QString appId, QString window, QVariantMap options, const QDBusMessage& message, QVariantMap& results) {\n    PortalCommon::setupCoro([message, options, appId, window](QDBusMessage reply) -> QCoro::Task<> {\n        QString reason;\n        if (options.contains(\"reason\")) reason = options.value(\"reason\").toString();\n        auto dialog = new AccountDialog(appId, reason);\n        PortalCommon::reparentWindow(dialog, window);\n        dialog->show();\n\n        auto result = co_await qCoro(dialog, &AccountDialog::finished);\n\n        if (result == AccountDialog::Rejected) {\n            reply.setArguments({uint(1), QVariantMap()});\n            QDBusConnection::sessionBus().send(reply);\n        } else {\n            reply.setArguments({uint(0), dialog->results()});\n            QDBusConnection::sessionBus().send(reply);\n        }\n    },\n        message);\n    return 0;\n}\n"
  },
  {
    "path": "desktop-portal/interfaces/accountinterface.h",
    "content": "#ifndef ACCOUNTINTERFACE_H\n#define ACCOUNTINTERFACE_H\n\n#include <QDBusAbstractAdaptor>\n#include <QDBusObjectPath>\n\nclass QDBusMessage;\nclass AccountInterface : public QDBusAbstractAdaptor {\n        Q_OBJECT\n        Q_CLASSINFO(\"D-Bus Interface\", \"org.freedesktop.impl.portal.Account\")\n        Q_PROPERTY(uint version READ version)\n\n    public:\n        explicit AccountInterface(QObject* parent = nullptr);\n\n        uint version();\n\n    public slots:\n        Q_SCRIPTABLE uint GetUserInformation(QDBusObjectPath handle, QString appId, QString window, QVariantMap options, const QDBusMessage& message, QVariantMap& results);\n};\n\n#endif // ACCOUNTINTERFACE_H\n"
  },
  {
    "path": "desktop-portal/interfaces/filechooserinterface.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2021 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"filechooserinterface.h\"\n\n#include \"dialogs/filedialog.h\"\n#include \"portalcommon.h\"\n#include \"portalhandle.h\"\n#include <QCoroCore>\n#include <QDBusConnection>\n#include <QDBusVariant>\n#include <QWindow>\n#include <tlogger.h>\n\nFileChooserInterface::FileChooserInterface(QObject* parent) :\n    QDBusAbstractAdaptor(parent) {\n}\n\nuint FileChooserInterface::OpenFile(const QDBusObjectPath& handle, const QString& app_id, const QString& parent_window, const QString& title, const QVariantMap& options, const QDBusMessage& message, QVariantMap& results) {\n    tDebug(\"FileChooserInterface\") << \"Open File\";\n\n    PortalCommon::setupCoro([options, parent_window, handle, title, this](QDBusMessage reply) -> QCoro::Task<> {\n        auto* portalHandle = new PortalHandle(handle);\n\n        FileDialog dialog(false, options);\n        PortalCommon::reparentWindow(&dialog, parent_window);\n        if (title.isEmpty()) {\n            dialog.setWindowTitle(tr(\"Open\"));\n        } else {\n            dialog.setWindowTitle(title);\n        }\n        connect(portalHandle, &PortalHandle::closed, &dialog, [&dialog] {\n            dialog.close();\n        });\n\n        dialog.open();\n\n        auto result = co_await qCoro(&dialog, &FileDialog::finished);\n\n        if (result == FileDialog::Accepted) {\n            reply.setArguments({\n                uint(0), QVariantMap{\n                                     {\"uris\", dialog.uris()},\n                                     {\"writable\", dialog.isWritable()}}\n            });\n            QDBusConnection::sessionBus().send(reply);\n        } else {\n            reply.setArguments({uint(1), QVariantMap()});\n            QDBusConnection::sessionBus().send(reply);\n        }\n        portalHandle->deleteLater();\n    },\n        message);\n    return 0;\n}\n\nuint FileChooserInterface::SaveFile(const QDBusObjectPath& handle, const QString& app_id, const QString& parent_window, const QString& title, const QVariantMap& options, const QDBusMessage& message, QVariantMap& results) {\n    PortalCommon::setupCoro([options, parent_window, handle, title, this](QDBusMessage reply) -> QCoro::Task<> {\n        auto* portalHandle = new PortalHandle(handle);\n\n        FileDialog dialog(true, options);\n        PortalCommon::reparentWindow(&dialog, parent_window);\n        if (title.isEmpty()) {\n            dialog.setWindowTitle(tr(\"Save\"));\n        } else {\n            dialog.setWindowTitle(title);\n        }\n        connect(portalHandle, &PortalHandle::closed, &dialog, [&dialog] {\n            dialog.close();\n        });\n\n        dialog.open();\n\n        auto result = co_await qCoro(&dialog, &FileDialog::finished);\n\n        if (result == FileDialog::Accepted) {\n            reply.setArguments({\n                uint(0), QVariantMap{\n                                     {\"uris\", dialog.uris()},\n                                     {\"writable\", dialog.isWritable()}}\n            });\n            QDBusConnection::sessionBus().send(reply);\n        } else {\n            reply.setArguments({uint(1), QVariantMap()});\n            QDBusConnection::sessionBus().send(reply);\n        }\n        portalHandle->deleteLater();\n    },\n        message);\n    return 0;\n}\n\nuint FileChooserInterface::SaveFiles(const QDBusObjectPath& handle, const QString& app_id, const QString& parent_window, const QString& title, const QVariantMap& options, const QDBusMessage& message, QVariantMap& results) {\n    return 0;\n}\n"
  },
  {
    "path": "desktop-portal/interfaces/filechooserinterface.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2021 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef FILECHOOSERINTERFACE_H\n#define FILECHOOSERINTERFACE_H\n\n#include <QObject>\n#include <QDBusAbstractAdaptor>\n#include <QDBusObjectPath>\n#include <QDBusMessage>\n\nclass FileChooserInterface : public QDBusAbstractAdaptor {\n        Q_OBJECT\n        Q_CLASSINFO(\"D-Bus Interface\", \"org.freedesktop.impl.portal.FileChooser\")\n\n    public:\n        explicit FileChooserInterface(QObject* parent = nullptr);\n\n    public slots:\n        Q_SCRIPTABLE uint OpenFile(const QDBusObjectPath& handle, const QString& app_id, const QString& parent_window, const QString& title, const QVariantMap& options, const QDBusMessage& message, QVariantMap& results);\n        Q_SCRIPTABLE uint SaveFile(const QDBusObjectPath& handle, const QString& app_id, const QString& parent_window, const QString& title, const QVariantMap& options, const QDBusMessage& message, QVariantMap& results);\n        Q_SCRIPTABLE uint SaveFiles(const QDBusObjectPath& handle, const QString& app_id, const QString& parent_window, const QString& title, const QVariantMap& options, const QDBusMessage& message, QVariantMap& results);\n\n    signals:\n\n};\n\n#endif // FILECHOOSERINTERFACE_H\n"
  },
  {
    "path": "desktop-portal/interfaces/notificationinterface.cpp",
    "content": "#include \"notificationinterface.h\"\n\n#include <Applications/application.h>\n#include <tnotification.h>\n\ntypedef QPair<QString, QString> NotificationIdentifier;\n\nstruct NotificationInterfacePrivate {\n        QMap<QPair<QString, QString>, tNotification*> notifications;\n};\n\nNotificationInterface::NotificationInterface(QObject* parent) :\n    QDBusAbstractAdaptor{parent} {\n    d = new NotificationInterfacePrivate();\n}\n\nNotificationInterface::~NotificationInterface() {\n    delete d;\n}\n\nvoid NotificationInterface::AddNotification(QString app_id, QString id, QVariantMap notification) {\n    auto title = notification.value(\"title\").toString();\n    auto body = notification.value(\"body\").toString();\n    auto priority = notification.value(\"priority\").toString();\n    auto defaultAction = notification.value(\"default-action\").toString();\n    auto defaultActionTarget = notification.value(\"default-action-target\");\n    auto buttons = qdbus_cast<QList<QVariantMap>>(notification.value(\"buttons\").value<QDBusArgument>());\n\n    Application app(app_id);\n\n    NotificationIdentifier nid{app_id, id};\n    tNotification* n;\n    if (d->notifications.contains(nid)) {\n        n = d->notifications.value(nid);\n    } else {\n        n = new tNotification();\n        connect(n, &tNotification::actionClicked, this, [app_id, id, this, buttons, defaultActionTarget, defaultAction](QString key) {\n            if (key == defaultAction) {\n                emit ActionInvoked(app_id, id, key, {defaultActionTarget});\n            }\n\n            for (const auto &button : buttons) {\n                auto action = button.value(\"action\").toString();\n                if (action == key) {\n                    auto target = button.value(\"target\");\n                    emit ActionInvoked(app_id, id, key, {target});\n                }\n            }\n        });\n    }\n\n    n->insertHint(\"desktop-entry\", app_id);\n    n->setAppName(app.getProperty(\"Name\").toString());\n    n->setAppIcon(app.getProperty(\"Icon\").toString());\n    n->setSummary(title);\n    n->setText(body);\n\n    if (priority == \"low\") n->setUrgency(tNotification::Low);\n    if (priority == \"normal\") n->setUrgency(tNotification::Normal);\n    if (priority == \"high\") n->setUrgency(tNotification::Critical);\n    if (priority == \"urgent\") n->setUrgency(tNotification::Critical);\n\n    n->insertAction(defaultAction, tr(\"Activate\"));\n    for (const auto &button : buttons) {\n        n->insertAction(button.value(\"action\").toString(), button.value(\"label\").toString());\n    }\n\n    n->post(false);\n    d->notifications.insert(nid, n);\n}\n\nvoid NotificationInterface::RemoveNotification(QString app_id, QString id) {\n    NotificationIdentifier nid{app_id, id};\n    if (d->notifications.contains(nid)) {\n        auto notification = d->notifications.take(nid);\n        notification->dismiss();\n        notification->deleteLater();\n    }\n}\n"
  },
  {
    "path": "desktop-portal/interfaces/notificationinterface.h",
    "content": "#ifndef NOTIFICATIONINTERFACE_H\n#define NOTIFICATIONINTERFACE_H\n\n#include <QDBusAbstractAdaptor>\n\nstruct NotificationInterfacePrivate;\nclass NotificationInterface : public QDBusAbstractAdaptor {\n        Q_OBJECT\n        Q_CLASSINFO(\"D-Bus Interface\", \"org.freedesktop.impl.portal.Notification\")\n    public:\n        explicit NotificationInterface(QObject* parent = nullptr);\n        ~NotificationInterface();\n\n    public slots:\n        Q_SCRIPTABLE void AddNotification(QString app_id, QString id, QVariantMap notification);\n        Q_SCRIPTABLE void RemoveNotification(QString app_id, QString id);\n\n    signals:\n        Q_SCRIPTABLE void ActionInvoked(QString app_id, QString id, QString action, QVariantList parameter);\n\n    private:\n        NotificationInterfacePrivate* d;\n};\n\n#endif // NOTIFICATIONINTERFACE_H\n"
  },
  {
    "path": "desktop-portal/interfaces/screenshotinterface.cpp",
    "content": "#include \"screenshotinterface.h\"\n\n#include \"backend/abstractportalbackend.h\"\n#include \"portalcommon.h\"\n#include \"screenshotmanager.h\"\n#include <QCoroCore>\n#include <QDBusConnection>\n#include <QDBusMetaType>\n#include <QPainter>\n#include <QScreen>\n#include <QTemporaryFile>\n#include <QUrl>\n#include <tapplication.h>\n\nQDBusArgument& operator<<(QDBusArgument& argument, const ScreenshotColorReply& myStruct) {\n    argument.beginStructure();\n    argument << myStruct.red << myStruct.green << myStruct.blue;\n    argument.endStructure();\n    return argument;\n}\n\nconst QDBusArgument& operator>>(const QDBusArgument& argument, ScreenshotColorReply& myStruct) {\n    argument.beginStructure();\n    argument >> myStruct.red >> myStruct.green >> myStruct.blue;\n    argument.endStructure();\n    return argument;\n}\n\nScreenshotInterface::ScreenshotInterface(QObject* parent) :\n    QDBusAbstractAdaptor{parent} {\n    qDBusRegisterMetaType<ScreenshotColorReply>();\n}\n\nuint ScreenshotInterface::version() {\n    return 2;\n}\n\nuint ScreenshotInterface::Screenshot(QDBusObjectPath handle, QString app_id, QString parent_window, QVariantMap options, const QDBusMessage& message, QVariantMap& results) {\n    PortalCommon::setupCoro([options, parent_window, handle, this, app_id](QDBusMessage reply) -> QCoro::Task<> {\n        auto interactive = options.value(\"interactive\", false).toBool();\n        auto permissionStoreChecked = options.value(\"permission_store_checked\", false).toBool();\n        auto isTheDesk = app_id == \"com.vicr123.thedesk\" && options.value(\"x-thedesk-screenshot\", false).toBool();\n\n        QPixmap finalPixmap;\n        if (interactive) {\n            ScreenshotManager mgr;\n            if (isTheDesk) {\n                mgr.setType(ScreenshotWindow::Type::TheDeskScreenshot);\n            }\n            co_await mgr.prepareScreenshotWindows();\n            mgr.showScreenshotWindows();\n\n            co_await qCoro(&mgr, &ScreenshotManager::finished);\n            if (!mgr.accepted()) {\n                reply.setArguments({uint(1), QVariantMap()});\n                QDBusConnection::sessionBus().send(reply);\n                co_return;\n            }\n\n            finalPixmap = mgr.finalPixmap();\n        } else {\n            if (!permissionStoreChecked) {\n                // We haven't checked permissions of the app, so deny the request\n                reply.setArguments({uint(2), QVariantMap()});\n                QDBusConnection::sessionBus().send(reply);\n                co_return;\n            }\n\n            // Compile a picture\n            QRect rect;\n            for (auto screen : qApp->screens()) {\n                rect = rect.united(screen->geometry());\n            }\n\n            QPixmap pixmap(rect.size());\n            pixmap.fill(Qt::black);\n            QPainter painter(&pixmap);\n            for (auto screen : qApp->screens()) {\n                painter.drawPixmap(screen->geometry(), co_await AbstractPortalBackend::instance()->takeScreenshot(screen));\n            }\n\n            finalPixmap = pixmap;\n        }\n\n        QTemporaryFile temp;\n        temp.setAutoRemove(false);\n        temp.open();\n\n        finalPixmap.save(&temp, \"PNG\");\n        temp.close();\n\n        reply.setArguments({\n            uint(0), QVariantMap({{\"uri\", QUrl::fromLocalFile(temp.fileName()).toString()}}\n             )\n        });\n        QDBusConnection::sessionBus().send(reply);\n    },\n        message);\n    return 0;\n}\n\nuint ScreenshotInterface::PickColor(QDBusObjectPath handle, QString app_id, QString parent_window, QVariantMap options, const QDBusMessage& message, QVariantMap& results) {\n    PortalCommon::setupCoro([options, parent_window, handle, this, app_id](QDBusMessage reply) -> QCoro::Task<> {\n        ScreenshotManager mgr;\n        mgr.setType(ScreenshotWindow::Type::ColourPicker);\n        co_await mgr.prepareScreenshotWindows();\n        mgr.showScreenshotWindows();\n\n        co_await qCoro(&mgr, &ScreenshotManager::finished);\n        if (!mgr.accepted()) {\n            reply.setArguments({uint(1), QVariantMap()});\n            QDBusConnection::sessionBus().send(reply);\n            co_return;\n        }\n\n        auto color = mgr.clickedColor();\n\n        ScreenshotColorReply replyArg;\n        replyArg.red = color.redF();\n        replyArg.green = color.greenF();\n        replyArg.blue = color.blueF();\n\n        QDBusArgument arg;\n        arg << replyArg;\n\n        reply.setArguments({uint(0), QVariantMap{{\"color\", QVariant::fromValue(arg)}}});\n        QDBusConnection::sessionBus().send(reply);\n    },\n        message);\n    return 0;\n}\n"
  },
  {
    "path": "desktop-portal/interfaces/screenshotinterface.h",
    "content": "#ifndef SCREENSHOTINTERFACE_H\n#define SCREENSHOTINTERFACE_H\n\n#include <QDBusAbstractAdaptor>\n#include <QDBusObjectPath>\n\nclass QDBusMessage;\nclass ScreenshotInterface : public QDBusAbstractAdaptor {\n        Q_OBJECT\n        Q_CLASSINFO(\"D-Bus Interface\", \"org.freedesktop.impl.portal.Screenshot\")\n        Q_PROPERTY(uint version READ version)\n\n    public:\n        explicit ScreenshotInterface(QObject* parent = nullptr);\n\n        uint version();\n\n    public slots:\n        Q_SCRIPTABLE uint Screenshot(QDBusObjectPath handle, QString app_id, QString parent_window, QVariantMap options, const QDBusMessage& message, QVariantMap& results);\n        Q_SCRIPTABLE uint PickColor(QDBusObjectPath handle, QString app_id, QString parent_window, QVariantMap options, const QDBusMessage& message, QVariantMap& results);\n};\n\nstruct ScreenshotColorReply {\n        double red;\n        double green;\n        double blue;\n};\n\nQ_DECLARE_METATYPE(ScreenshotColorReply);\n\n#endif // SCREENSHOTINTERFACE_H\n"
  },
  {
    "path": "desktop-portal/interfaces/settingsinterface.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2021 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"settingsinterface.h\"\n#include <tsettings.h>\n\n#include <QDBusMetaType>\n\nSettingsInterface::SettingsInterface(QObject* parent) :\n    QDBusAbstractAdaptor(parent) {\n    qDBusRegisterMetaType<QMap<QString, QDBusVariant>>();\n    qDBusRegisterMetaType<QMap<QString, QMap<QString, QDBusVariant>>>();\n}\n\nuint SettingsInterface::version() {\n    return 1;\n}\n\nQMap<QString, QMap<QString, QDBusVariant>> SettingsInterface::ReadAll(QStringList namespaces) {\n    return {\n        {\"org.freedesktop.appearance\", {{\"color-scheme\", QDBusVariant(0u)}}}\n    };\n}\n\nQDBusVariant SettingsInterface::Read(QString ns, QString key) {\n    if (ns == \"org.freedesktop.appearance\" && key == \"color-scheme\") {\n        tSettings themeSettings(\"theDesk.platform\");\n\n        QString baseColor = themeSettings.value(\"Palette/base\").toString();\n        if (baseColor == \"dark\") {\n            return QDBusVariant(1u);\n        } else if (baseColor == \"light\") {\n            return QDBusVariant(2u);\n        } else {\n            return QDBusVariant(0u);\n        }\n    }\n    return QDBusVariant(QVariant());\n}\n"
  },
  {
    "path": "desktop-portal/interfaces/settingsinterface.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2021 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef SETTINGSINTERFACE_H\n#define SETTINGSINTERFACE_H\n\n#include <QDBusAbstractAdaptor>\n#include <QDBusVariant>\n#include <QObject>\n\nclass SettingsInterface : public QDBusAbstractAdaptor {\n        Q_OBJECT\n        Q_CLASSINFO(\"D-Bus Interface\", \"org.freedesktop.impl.portal.Settings\");\n        Q_PROPERTY(uint version READ version)\n\n    public:\n        explicit SettingsInterface(QObject* parent = nullptr);\n\n        uint version();\n\n    public slots:\n        Q_SCRIPTABLE QMap<QString, QMap<QString, QDBusVariant> > ReadAll(QStringList namespaces);\n        Q_SCRIPTABLE QDBusVariant Read(QString ns, QString key);\n\n    signals:\n        Q_SCRIPTABLE void SettingChanged(QString ns, QString key, QDBusVariant value);\n};\n\n#endif // SETTINGSINTERFACE_H\n"
  },
  {
    "path": "desktop-portal/main.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2021 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include <tapplication.h>\n\n#include \"interfaces/accessinterface.h\"\n#include \"interfaces/accountinterface.h\"\n#include \"interfaces/filechooserinterface.h\"\n#include \"interfaces/notificationinterface.h\"\n#include \"interfaces/screenshotinterface.h\"\n#include \"interfaces/settingsinterface.h\"\n#include <tsettings.h>\n\n#include <QDBusConnection>\n\nint main(int argc, char* argv[]) {\n    // Turn off flatpak forwarding for ourselves\n    qputenv(\"TD_PLATFORM_NO_FLATPAK_FORWARD\", \"1\");\n\n    tApplication a(argc, argv);\n    a.setQuitOnLastWindowClosed(false);\n\n    QDBusConnection::sessionBus().registerService(\"org.freedesktop.impl.portal.desktop.thedesk\");\n\n    tSettings::registerDefaults(\"theSuite\", \"theDesk.platform\", \"/usr/share/defaults/thedesk-platform.conf\");\n\n    QObject* rootDbusObject = new QObject();\n    new FileChooserInterface(rootDbusObject);\n    new SettingsInterface(rootDbusObject);\n    new AccessInterface(rootDbusObject);\n    new AccountInterface(rootDbusObject);\n    new ScreenshotInterface(rootDbusObject);\n    new NotificationInterface(rootDbusObject);\n\n    QDBusConnection::sessionBus().registerObject(\"/org/freedesktop/portal/desktop\", rootDbusObject, QDBusConnection::ExportAdaptors);\n\n    return a.exec();\n}\n"
  },
  {
    "path": "desktop-portal/org.freedesktop.impl.portal.desktop.thedesk.service.in",
    "content": "[D-BUS Service]\nName=org.freedesktop.impl.portal.desktop.thedesk\nExec=${CMAKE_INSTALL_FULL_LIBDIR}/xdg-desktop-portal-thedesk\nSystemdService=xdg-desktop-portal-thedesk.service\n"
  },
  {
    "path": "desktop-portal/portalcommon.cpp",
    "content": "#include \"portalcommon.h\"\n\n#include <QWindow>\n\nvoid PortalCommon::reparentWindow(QWidget* w, QString parentWindow) {\n    if (parentWindow.startsWith(\"x11:\")) {\n        w->setAttribute(Qt::WA_NativeWindow, true);\n        w->setWindowModality(Qt::WindowModal);\n        auto parent = QWindow::fromWinId(parentWindow.mid(4).toULongLong(nullptr, 16));\n        w->windowHandle()->setTransientParent(parent);\n\n        QObject::connect(w, &QWidget::destroyed, parent, &QWindow::deleteLater);\n    }\n}\n\nvoid PortalCommon::setupCoro(std::function<QCoro::Task<>(QDBusMessage)> coro, const QDBusMessage& message) {\n    message.setDelayedReply(true);\n    coro(message.createReply());\n}\n"
  },
  {
    "path": "desktop-portal/portalcommon.h",
    "content": "#ifndef PORTALCOMMON_H\n#define PORTALCOMMON_H\n\n#include <QCoroTask>\n#include <QDBusMessage>\n#include <QWidget>\n\nnamespace PortalCommon {\n    void reparentWindow(QWidget* w, QString parentWindow);\n    void setupCoro(std::function<QCoro::Task<>(QDBusMessage)> coro, const QDBusMessage& message);\n}; // namespace PortalCommon\n\n#endif // PORTALCOMMON_H\n"
  },
  {
    "path": "desktop-portal/portalhandle.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2021 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"portalhandle.h\"\n\n#include <QDBusConnection>\n\nPortalHandle::PortalHandle(QDBusObjectPath path, QObject* parent) :\n    QObject(parent) {\n    QDBusConnection::sessionBus().registerObject(path.path(), this, QDBusConnection::ExportScriptableContents);\n}\n\nvoid PortalHandle::Close() {\n    emit closed();\n}\n"
  },
  {
    "path": "desktop-portal/portalhandle.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2021 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef PORTALHANDLE_H\n#define PORTALHANDLE_H\n\n#include <QObject>\n#include <QDBusObjectPath>\n\nclass PortalHandle : public QObject {\n        Q_OBJECT\n        Q_CLASSINFO(\"D-Bus Interface\", \"org.freedesktop.impl.portal.Request\");\n\n    public:\n        explicit PortalHandle(QDBusObjectPath path, QObject* parent = nullptr);\n\n    public slots:\n        Q_SCRIPTABLE void Close();\n\n    signals:\n        void closed();\n};\n\n#endif // PORTALHANDLE_H\n"
  },
  {
    "path": "desktop-portal/screenshot_resources.qrc",
    "content": "<RCC>\n    <qresource prefix=\"/screenshot\">\n        <file>icons/pen.svg</file>\n        <file>icons/eraser.svg</file>\n    </qresource>\n</RCC>\n"
  },
  {
    "path": "desktop-portal/screenshotmanager.cpp",
    "content": "#include \"screenshotmanager.h\"\n\n#include \"dialogs/screenshotwindow.h\"\n#include <tapplication.h>\n\nstruct ScreenshotManagerPrivate {\n        QPixmap finalResult;\n        QColor clickedColor;\n        bool accepted = false;\n        QList<ScreenshotWindow*> screenshotWindows;\n        ScreenshotWindow::Type type = ScreenshotWindow::Type::ApplicationScreenshot;\n};\n\nScreenshotManager::ScreenshotManager(QObject* parent) :\n    QObject{parent} {\n    d = new ScreenshotManagerPrivate();\n\n    for (auto screen : qApp->screens()) {\n        auto w = new ScreenshotWindow(screen);\n        connect(w, &ScreenshotWindow::screenshotAvailable, this, &ScreenshotManager::acceptPixmap);\n        connect(w, &ScreenshotWindow::colourClicked, this, &ScreenshotManager::acceptColor);\n        connect(w, &ScreenshotWindow::cancelled, this, &ScreenshotManager::reject);\n        d->screenshotWindows.append(w);\n    }\n}\n\nScreenshotManager::~ScreenshotManager() {\n    for (auto window : d->screenshotWindows) {\n        window->deleteLater();\n    }\n    delete d;\n}\n\nvoid ScreenshotManager::setType(ScreenshotWindow::Type type) {\n    d->type = type;\n    for (auto window : d->screenshotWindows) {\n        window->setType(type);\n    }\n}\n\nQCoro::Task<> ScreenshotManager::prepareScreenshotWindows() {\n    for (auto window : d->screenshotWindows) {\n        co_await window->prepareWindow();\n    }\n}\n\nvoid ScreenshotManager::showScreenshotWindows() {\n    for (auto window : d->screenshotWindows) {\n        window->showFullScreen();\n    }\n}\n\nQPixmap ScreenshotManager::finalPixmap() {\n    return d->finalResult;\n}\n\nQColor ScreenshotManager::clickedColor() {\n    return d->clickedColor;\n}\n\nbool ScreenshotManager::accepted() {\n    return d->accepted;\n}\n\nvoid ScreenshotManager::acceptPixmap(QPixmap pixmap) {\n    d->finalResult = pixmap;\n    d->accepted = true;\n\n    auto w = d->screenshotWindows.constFirst();\n    connect(w, &ScreenshotWindow::animationComplete, this, &ScreenshotManager::finished);\n\n    for (auto window : d->screenshotWindows) {\n        window->animateTake();\n    }\n}\n\nvoid ScreenshotManager::acceptColor(QColor color) {\n    d->clickedColor = color;\n    d->accepted = true;\n\n    // Skip the animation since this is a colour picker\n    emit finished();\n}\n\nvoid ScreenshotManager::reject() {\n    d->accepted = false;\n    auto w = d->screenshotWindows.constFirst();\n    connect(w, &ScreenshotWindow::animationComplete, this, &ScreenshotManager::finished);\n\n    for (auto window : d->screenshotWindows) {\n        window->animateDiscard();\n    }\n}\n"
  },
  {
    "path": "desktop-portal/screenshotmanager.h",
    "content": "#ifndef SCREENSHOTMANAGER_H\n#define SCREENSHOTMANAGER_H\n\n#include \"dialogs/screenshotwindow.h\"\n#include <QObject>\n\nstruct ScreenshotManagerPrivate;\nclass ScreenshotManager : public QObject {\n        Q_OBJECT\n    public:\n        explicit ScreenshotManager(QObject* parent = nullptr);\n        ~ScreenshotManager();\n\n        void setType(ScreenshotWindow::Type type);\n        QCoro::Task<> prepareScreenshotWindows();\n        void showScreenshotWindows();\n\n        QPixmap finalPixmap();\n        QColor clickedColor();\n        bool accepted();\n\n    signals:\n        void finished();\n\n    private:\n        ScreenshotManagerPrivate* d;\n\n        void acceptPixmap(QPixmap pixmap);\n        void acceptColor(QColor color);\n        void reject();\n};\n\n#endif // SCREENSHOTMANAGER_H\n"
  },
  {
    "path": "desktop-portal/thedesk-portals.conf",
    "content": "[preferred]\ndefault=thedesk\n"
  },
  {
    "path": "desktop-portal/thedesk.portal",
    "content": "[portal]\nDBusName=org.freedesktop.impl.portal.desktop.thedesk\nInterfaces=org.freedesktop.impl.portal.FileChooser;org.freedesktop.impl.portal.Settings;org.freedesktop.impl.portal.Account;org.freedesktop.impl.portal.Screenshot;org.freedesktop.impl.portal.Access;org.freedesktop.impl.portal.Notification\nUseIn=theDesk\n"
  },
  {
    "path": "desktop-portal/translations/ar_SA.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"ar_SA\" sourcelanguage=\"en_US\">\n<context>\n    <name>AccessDialog</name>\n    <message>\n        <location filename=\"../dialogs/accessdialog.ui\" line=\"14\"/>\n        <source>Form</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>AccessInterface</name>\n    <message>\n        <location filename=\"../interfaces/accessinterface.cpp\" line=\"17\"/>\n        <source>Deny</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../interfaces/accessinterface.cpp\" line=\"18\"/>\n        <source>Allow</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>AccountDialog</name>\n    <message>\n        <location filename=\"../dialogs/accountdialog.ui\" line=\"14\"/>\n        <location filename=\"../dialogs/accountdialog.ui\" line=\"35\"/>\n        <source>Request for Account Information</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/accountdialog.ui\" line=\"58\"/>\n        <source>TextLabel</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/accountdialog.ui\" line=\"74\"/>\n        <source>Real Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/accountdialog.ui\" line=\"81\"/>\n        <source>Username</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/accountdialog.ui\" line=\"108\"/>\n        <source>Information to be shared</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/accountdialog.ui\" line=\"118\"/>\n        <source>Share Account Information</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/accountdialog.cpp\" line=\"20\"/>\n        <source>%1 is requesting information about your profile.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>FileChooserInterface</name>\n    <message>\n        <location filename=\"../interfaces/filechooserinterface.cpp\" line=\"44\"/>\n        <source>Open</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../interfaces/filechooserinterface.cpp\" line=\"80\"/>\n        <source>Save</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>FileDialog</name>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"121\"/>\n        <source>Open</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"121\"/>\n        <source>Overwrite</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"86\"/>\n        <source>Save Here</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"87\"/>\n        <source>Create New File Here</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"107\"/>\n        <source>Open Folder</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"108\"/>\n        <source>Choose This Folder</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"97\"/>\n        <source>Name this file</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"97\"/>\n        <source>What do you want to name the file?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"194\"/>\n        <source>Overwrite?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"195\"/>\n        <source>A file named %1 already exists. Do you want to overwrite it?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"196\"/>\n        <source>Overwriting the file will replace its contents.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>NotificationInterface</name>\n    <message>\n        <location filename=\"../interfaces/notificationinterface.cpp\" line=\"63\"/>\n        <source>Activate</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>PenButton</name>\n    <message>\n        <location filename=\"../dialogs/penbutton.cpp\" line=\"54\"/>\n        <source>Erase-o</source>\n        <comment>This and the next translation span two lines. Be spiffy with these!</comment>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/penbutton.cpp\" line=\"55\"/>\n        <source>matic 2000</source>\n        <comment>This and the previous translation span two lines. Be spiffy with these!</comment>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>ScreenshotWindow</name>\n    <message>\n        <location filename=\"../dialogs/screenshotwindow.ui\" line=\"52\"/>\n        <source>SCREENSHOT</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/screenshotwindow.ui\" line=\"128\"/>\n        <source>Crop</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/screenshotwindow.ui\" line=\"148\"/>\n        <source>Redact</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/screenshotwindow.ui\" line=\"203\"/>\n        <source>Reset Markup</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/screenshotwindow.cpp\" line=\"242\"/>\n        <source>Cancel</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/screenshotwindow.cpp\" line=\"243\"/>\n        <source>Share Screenshot</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/screenshotwindow.cpp\" line=\"253\"/>\n        <source>Discard</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/screenshotwindow.cpp\" line=\"254\"/>\n        <source>Copy</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "desktop-portal/translations/au_AU.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"au_AU\" sourcelanguage=\"en_US\">\n<context>\n    <name>AccessDialog</name>\n    <message>\n        <location filename=\"../dialogs/accessdialog.ui\" line=\"14\"/>\n        <source>Form</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>AccessInterface</name>\n    <message>\n        <location filename=\"../interfaces/accessinterface.cpp\" line=\"17\"/>\n        <source>Deny</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../interfaces/accessinterface.cpp\" line=\"18\"/>\n        <source>Allow</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>AccountDialog</name>\n    <message>\n        <location filename=\"../dialogs/accountdialog.ui\" line=\"14\"/>\n        <location filename=\"../dialogs/accountdialog.ui\" line=\"35\"/>\n        <source>Request for Account Information</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/accountdialog.ui\" line=\"58\"/>\n        <source>TextLabel</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/accountdialog.ui\" line=\"74\"/>\n        <source>Real Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/accountdialog.ui\" line=\"81\"/>\n        <source>Username</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/accountdialog.ui\" line=\"108\"/>\n        <source>Information to be shared</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/accountdialog.ui\" line=\"118\"/>\n        <source>Share Account Information</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/accountdialog.cpp\" line=\"20\"/>\n        <source>%1 is requesting information about your profile.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>FileChooserInterface</name>\n    <message>\n        <location filename=\"../interfaces/filechooserinterface.cpp\" line=\"44\"/>\n        <source>Open</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../interfaces/filechooserinterface.cpp\" line=\"80\"/>\n        <source>Save</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>FileDialog</name>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"121\"/>\n        <source>Open</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"121\"/>\n        <source>Overwrite</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"86\"/>\n        <source>Save Here</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"87\"/>\n        <source>Create New File Here</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"107\"/>\n        <source>Open Folder</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"108\"/>\n        <source>Choose This Folder</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"97\"/>\n        <source>Name this file</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"97\"/>\n        <source>What do you want to name the file?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"194\"/>\n        <source>Overwrite?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"195\"/>\n        <source>A file named %1 already exists. Do you want to overwrite it?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"196\"/>\n        <source>Overwriting the file will replace its contents.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>NotificationInterface</name>\n    <message>\n        <location filename=\"../interfaces/notificationinterface.cpp\" line=\"63\"/>\n        <source>Activate</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>PenButton</name>\n    <message>\n        <location filename=\"../dialogs/penbutton.cpp\" line=\"54\"/>\n        <source>Erase-o</source>\n        <comment>This and the next translation span two lines. Be spiffy with these!</comment>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/penbutton.cpp\" line=\"55\"/>\n        <source>matic 2000</source>\n        <comment>This and the previous translation span two lines. Be spiffy with these!</comment>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>ScreenshotWindow</name>\n    <message>\n        <location filename=\"../dialogs/screenshotwindow.ui\" line=\"52\"/>\n        <source>SCREENSHOT</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/screenshotwindow.ui\" line=\"128\"/>\n        <source>Crop</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/screenshotwindow.ui\" line=\"148\"/>\n        <source>Redact</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/screenshotwindow.ui\" line=\"203\"/>\n        <source>Reset Markup</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/screenshotwindow.cpp\" line=\"242\"/>\n        <source>Cancel</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/screenshotwindow.cpp\" line=\"243\"/>\n        <source>Share Screenshot</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/screenshotwindow.cpp\" line=\"253\"/>\n        <source>Discard</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/screenshotwindow.cpp\" line=\"254\"/>\n        <source>Copy</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "desktop-portal/translations/cy.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"cy\" sourcelanguage=\"en_US\">\n<context>\n    <name>AccessDialog</name>\n    <message>\n        <location filename=\"../dialogs/accessdialog.ui\" line=\"14\"/>\n        <source>Form</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>AccessInterface</name>\n    <message>\n        <location filename=\"../interfaces/accessinterface.cpp\" line=\"17\"/>\n        <source>Deny</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../interfaces/accessinterface.cpp\" line=\"18\"/>\n        <source>Allow</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>AccountDialog</name>\n    <message>\n        <location filename=\"../dialogs/accountdialog.ui\" line=\"14\"/>\n        <location filename=\"../dialogs/accountdialog.ui\" line=\"35\"/>\n        <source>Request for Account Information</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/accountdialog.ui\" line=\"58\"/>\n        <source>TextLabel</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/accountdialog.ui\" line=\"74\"/>\n        <source>Real Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/accountdialog.ui\" line=\"81\"/>\n        <source>Username</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/accountdialog.ui\" line=\"108\"/>\n        <source>Information to be shared</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/accountdialog.ui\" line=\"118\"/>\n        <source>Share Account Information</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/accountdialog.cpp\" line=\"20\"/>\n        <source>%1 is requesting information about your profile.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>FileChooserInterface</name>\n    <message>\n        <location filename=\"../interfaces/filechooserinterface.cpp\" line=\"44\"/>\n        <source>Open</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../interfaces/filechooserinterface.cpp\" line=\"80\"/>\n        <source>Save</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>FileDialog</name>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"121\"/>\n        <source>Open</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"121\"/>\n        <source>Overwrite</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"86\"/>\n        <source>Save Here</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"87\"/>\n        <source>Create New File Here</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"107\"/>\n        <source>Open Folder</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"108\"/>\n        <source>Choose This Folder</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"97\"/>\n        <source>Name this file</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"97\"/>\n        <source>What do you want to name the file?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"194\"/>\n        <source>Overwrite?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"195\"/>\n        <source>A file named %1 already exists. Do you want to overwrite it?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"196\"/>\n        <source>Overwriting the file will replace its contents.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>NotificationInterface</name>\n    <message>\n        <location filename=\"../interfaces/notificationinterface.cpp\" line=\"63\"/>\n        <source>Activate</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>PenButton</name>\n    <message>\n        <location filename=\"../dialogs/penbutton.cpp\" line=\"54\"/>\n        <source>Erase-o</source>\n        <comment>This and the next translation span two lines. Be spiffy with these!</comment>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/penbutton.cpp\" line=\"55\"/>\n        <source>matic 2000</source>\n        <comment>This and the previous translation span two lines. Be spiffy with these!</comment>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>ScreenshotWindow</name>\n    <message>\n        <location filename=\"../dialogs/screenshotwindow.ui\" line=\"52\"/>\n        <source>SCREENSHOT</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/screenshotwindow.ui\" line=\"128\"/>\n        <source>Crop</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/screenshotwindow.ui\" line=\"148\"/>\n        <source>Redact</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/screenshotwindow.ui\" line=\"203\"/>\n        <source>Reset Markup</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/screenshotwindow.cpp\" line=\"242\"/>\n        <source>Cancel</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/screenshotwindow.cpp\" line=\"243\"/>\n        <source>Share Screenshot</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/screenshotwindow.cpp\" line=\"253\"/>\n        <source>Discard</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/screenshotwindow.cpp\" line=\"254\"/>\n        <source>Copy</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "desktop-portal/translations/da.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"da\" sourcelanguage=\"en_US\">\n<context>\n    <name>AccessDialog</name>\n    <message>\n        <location filename=\"../dialogs/accessdialog.ui\" line=\"14\"/>\n        <source>Form</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>AccessInterface</name>\n    <message>\n        <location filename=\"../interfaces/accessinterface.cpp\" line=\"17\"/>\n        <source>Deny</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../interfaces/accessinterface.cpp\" line=\"18\"/>\n        <source>Allow</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>AccountDialog</name>\n    <message>\n        <location filename=\"../dialogs/accountdialog.ui\" line=\"14\"/>\n        <location filename=\"../dialogs/accountdialog.ui\" line=\"35\"/>\n        <source>Request for Account Information</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/accountdialog.ui\" line=\"58\"/>\n        <source>TextLabel</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/accountdialog.ui\" line=\"74\"/>\n        <source>Real Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/accountdialog.ui\" line=\"81\"/>\n        <source>Username</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/accountdialog.ui\" line=\"108\"/>\n        <source>Information to be shared</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/accountdialog.ui\" line=\"118\"/>\n        <source>Share Account Information</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/accountdialog.cpp\" line=\"20\"/>\n        <source>%1 is requesting information about your profile.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>FileChooserInterface</name>\n    <message>\n        <location filename=\"../interfaces/filechooserinterface.cpp\" line=\"44\"/>\n        <source>Open</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../interfaces/filechooserinterface.cpp\" line=\"80\"/>\n        <source>Save</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>FileDialog</name>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"121\"/>\n        <source>Open</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"121\"/>\n        <source>Overwrite</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"86\"/>\n        <source>Save Here</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"87\"/>\n        <source>Create New File Here</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"107\"/>\n        <source>Open Folder</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"108\"/>\n        <source>Choose This Folder</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"97\"/>\n        <source>Name this file</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"97\"/>\n        <source>What do you want to name the file?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"194\"/>\n        <source>Overwrite?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"195\"/>\n        <source>A file named %1 already exists. Do you want to overwrite it?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"196\"/>\n        <source>Overwriting the file will replace its contents.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>NotificationInterface</name>\n    <message>\n        <location filename=\"../interfaces/notificationinterface.cpp\" line=\"63\"/>\n        <source>Activate</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>PenButton</name>\n    <message>\n        <location filename=\"../dialogs/penbutton.cpp\" line=\"54\"/>\n        <source>Erase-o</source>\n        <comment>This and the next translation span two lines. Be spiffy with these!</comment>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/penbutton.cpp\" line=\"55\"/>\n        <source>matic 2000</source>\n        <comment>This and the previous translation span two lines. Be spiffy with these!</comment>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>ScreenshotWindow</name>\n    <message>\n        <location filename=\"../dialogs/screenshotwindow.ui\" line=\"52\"/>\n        <source>SCREENSHOT</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/screenshotwindow.ui\" line=\"128\"/>\n        <source>Crop</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/screenshotwindow.ui\" line=\"148\"/>\n        <source>Redact</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/screenshotwindow.ui\" line=\"203\"/>\n        <source>Reset Markup</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/screenshotwindow.cpp\" line=\"242\"/>\n        <source>Cancel</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/screenshotwindow.cpp\" line=\"243\"/>\n        <source>Share Screenshot</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/screenshotwindow.cpp\" line=\"253\"/>\n        <source>Discard</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/screenshotwindow.cpp\" line=\"254\"/>\n        <source>Copy</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "desktop-portal/translations/de.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"de\" sourcelanguage=\"en_US\">\n<context>\n    <name>AccessDialog</name>\n    <message>\n        <location filename=\"../dialogs/accessdialog.ui\" line=\"14\"/>\n        <source>Form</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>AccessInterface</name>\n    <message>\n        <location filename=\"../interfaces/accessinterface.cpp\" line=\"17\"/>\n        <source>Deny</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../interfaces/accessinterface.cpp\" line=\"18\"/>\n        <source>Allow</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>AccountDialog</name>\n    <message>\n        <location filename=\"../dialogs/accountdialog.ui\" line=\"14\"/>\n        <location filename=\"../dialogs/accountdialog.ui\" line=\"35\"/>\n        <source>Request for Account Information</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/accountdialog.ui\" line=\"58\"/>\n        <source>TextLabel</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/accountdialog.ui\" line=\"74\"/>\n        <source>Real Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/accountdialog.ui\" line=\"81\"/>\n        <source>Username</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/accountdialog.ui\" line=\"108\"/>\n        <source>Information to be shared</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/accountdialog.ui\" line=\"118\"/>\n        <source>Share Account Information</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/accountdialog.cpp\" line=\"20\"/>\n        <source>%1 is requesting information about your profile.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>FileChooserInterface</name>\n    <message>\n        <location filename=\"../interfaces/filechooserinterface.cpp\" line=\"44\"/>\n        <source>Open</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../interfaces/filechooserinterface.cpp\" line=\"80\"/>\n        <source>Save</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>FileDialog</name>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"121\"/>\n        <source>Open</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"121\"/>\n        <source>Overwrite</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"86\"/>\n        <source>Save Here</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"87\"/>\n        <source>Create New File Here</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"107\"/>\n        <source>Open Folder</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"108\"/>\n        <source>Choose This Folder</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"97\"/>\n        <source>Name this file</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"97\"/>\n        <source>What do you want to name the file?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"194\"/>\n        <source>Overwrite?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"195\"/>\n        <source>A file named %1 already exists. Do you want to overwrite it?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"196\"/>\n        <source>Overwriting the file will replace its contents.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>NotificationInterface</name>\n    <message>\n        <location filename=\"../interfaces/notificationinterface.cpp\" line=\"63\"/>\n        <source>Activate</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>PenButton</name>\n    <message>\n        <location filename=\"../dialogs/penbutton.cpp\" line=\"54\"/>\n        <source>Erase-o</source>\n        <comment>This and the next translation span two lines. Be spiffy with these!</comment>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/penbutton.cpp\" line=\"55\"/>\n        <source>matic 2000</source>\n        <comment>This and the previous translation span two lines. Be spiffy with these!</comment>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>ScreenshotWindow</name>\n    <message>\n        <location filename=\"../dialogs/screenshotwindow.ui\" line=\"52\"/>\n        <source>SCREENSHOT</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/screenshotwindow.ui\" line=\"128\"/>\n        <source>Crop</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/screenshotwindow.ui\" line=\"148\"/>\n        <source>Redact</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/screenshotwindow.ui\" line=\"203\"/>\n        <source>Reset Markup</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/screenshotwindow.cpp\" line=\"242\"/>\n        <source>Cancel</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/screenshotwindow.cpp\" line=\"243\"/>\n        <source>Share Screenshot</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/screenshotwindow.cpp\" line=\"253\"/>\n        <source>Discard</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/screenshotwindow.cpp\" line=\"254\"/>\n        <source>Copy</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "desktop-portal/translations/en_US.qm",
    "content": "<d\u0018!\u001c`"
  },
  {
    "path": "desktop-portal/translations/en_US.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" sourcelanguage=\"en_US\">\n<context>\n    <name>AccessDialog</name>\n    <message>\n        <location filename=\"../dialogs/accessdialog.ui\" line=\"14\"/>\n        <source>Form</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>AccessInterface</name>\n    <message>\n        <location filename=\"../interfaces/accessinterface.cpp\" line=\"17\"/>\n        <source>Deny</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../interfaces/accessinterface.cpp\" line=\"18\"/>\n        <source>Allow</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>AccountDialog</name>\n    <message>\n        <location filename=\"../dialogs/accountdialog.ui\" line=\"14\"/>\n        <location filename=\"../dialogs/accountdialog.ui\" line=\"35\"/>\n        <source>Request for Account Information</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/accountdialog.ui\" line=\"58\"/>\n        <source>TextLabel</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/accountdialog.ui\" line=\"74\"/>\n        <source>Real Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/accountdialog.ui\" line=\"81\"/>\n        <source>Username</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/accountdialog.ui\" line=\"108\"/>\n        <source>Information to be shared</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/accountdialog.ui\" line=\"118\"/>\n        <source>Share Account Information</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/accountdialog.cpp\" line=\"20\"/>\n        <source>%1 is requesting information about your profile.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>FileChooserInterface</name>\n    <message>\n        <location filename=\"../interfaces/filechooserinterface.cpp\" line=\"44\"/>\n        <source>Open</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../interfaces/filechooserinterface.cpp\" line=\"80\"/>\n        <source>Save</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>FileDialog</name>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"121\"/>\n        <source>Open</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"121\"/>\n        <source>Overwrite</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"86\"/>\n        <source>Save Here</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"87\"/>\n        <source>Create New File Here</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"107\"/>\n        <source>Open Folder</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"108\"/>\n        <source>Choose This Folder</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"97\"/>\n        <source>Name this file</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"97\"/>\n        <source>What do you want to name the file?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"194\"/>\n        <source>Overwrite?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"195\"/>\n        <source>A file named %1 already exists. Do you want to overwrite it?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"196\"/>\n        <source>Overwriting the file will replace its contents.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>NotificationInterface</name>\n    <message>\n        <location filename=\"../interfaces/notificationinterface.cpp\" line=\"63\"/>\n        <source>Activate</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>PenButton</name>\n    <message>\n        <location filename=\"../dialogs/penbutton.cpp\" line=\"54\"/>\n        <source>Erase-o</source>\n        <comment>This and the next translation span two lines. Be spiffy with these!</comment>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/penbutton.cpp\" line=\"55\"/>\n        <source>matic 2000</source>\n        <comment>This and the previous translation span two lines. Be spiffy with these!</comment>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>ScreenshotWindow</name>\n    <message>\n        <location filename=\"../dialogs/screenshotwindow.ui\" line=\"52\"/>\n        <source>SCREENSHOT</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/screenshotwindow.ui\" line=\"128\"/>\n        <source>Crop</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/screenshotwindow.ui\" line=\"148\"/>\n        <source>Redact</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/screenshotwindow.ui\" line=\"203\"/>\n        <source>Reset Markup</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/screenshotwindow.cpp\" line=\"242\"/>\n        <source>Cancel</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/screenshotwindow.cpp\" line=\"243\"/>\n        <source>Share Screenshot</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/screenshotwindow.cpp\" line=\"253\"/>\n        <source>Discard</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/screenshotwindow.cpp\" line=\"254\"/>\n        <source>Copy</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "desktop-portal/translations/es.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"es\" sourcelanguage=\"en_US\">\n<context>\n    <name>AccessDialog</name>\n    <message>\n        <location filename=\"../dialogs/accessdialog.ui\" line=\"14\"/>\n        <source>Form</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>AccessInterface</name>\n    <message>\n        <location filename=\"../interfaces/accessinterface.cpp\" line=\"17\"/>\n        <source>Deny</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../interfaces/accessinterface.cpp\" line=\"18\"/>\n        <source>Allow</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>AccountDialog</name>\n    <message>\n        <location filename=\"../dialogs/accountdialog.ui\" line=\"14\"/>\n        <location filename=\"../dialogs/accountdialog.ui\" line=\"35\"/>\n        <source>Request for Account Information</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/accountdialog.ui\" line=\"58\"/>\n        <source>TextLabel</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/accountdialog.ui\" line=\"74\"/>\n        <source>Real Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/accountdialog.ui\" line=\"81\"/>\n        <source>Username</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/accountdialog.ui\" line=\"108\"/>\n        <source>Information to be shared</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/accountdialog.ui\" line=\"118\"/>\n        <source>Share Account Information</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/accountdialog.cpp\" line=\"20\"/>\n        <source>%1 is requesting information about your profile.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>FileChooserInterface</name>\n    <message>\n        <location filename=\"../interfaces/filechooserinterface.cpp\" line=\"44\"/>\n        <source>Open</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../interfaces/filechooserinterface.cpp\" line=\"80\"/>\n        <source>Save</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>FileDialog</name>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"121\"/>\n        <source>Open</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"121\"/>\n        <source>Overwrite</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"86\"/>\n        <source>Save Here</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"87\"/>\n        <source>Create New File Here</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"107\"/>\n        <source>Open Folder</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"108\"/>\n        <source>Choose This Folder</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"97\"/>\n        <source>Name this file</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"97\"/>\n        <source>What do you want to name the file?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"194\"/>\n        <source>Overwrite?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"195\"/>\n        <source>A file named %1 already exists. Do you want to overwrite it?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"196\"/>\n        <source>Overwriting the file will replace its contents.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>NotificationInterface</name>\n    <message>\n        <location filename=\"../interfaces/notificationinterface.cpp\" line=\"63\"/>\n        <source>Activate</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>PenButton</name>\n    <message>\n        <location filename=\"../dialogs/penbutton.cpp\" line=\"54\"/>\n        <source>Erase-o</source>\n        <comment>This and the next translation span two lines. Be spiffy with these!</comment>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/penbutton.cpp\" line=\"55\"/>\n        <source>matic 2000</source>\n        <comment>This and the previous translation span two lines. Be spiffy with these!</comment>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>ScreenshotWindow</name>\n    <message>\n        <location filename=\"../dialogs/screenshotwindow.ui\" line=\"52\"/>\n        <source>SCREENSHOT</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/screenshotwindow.ui\" line=\"128\"/>\n        <source>Crop</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/screenshotwindow.ui\" line=\"148\"/>\n        <source>Redact</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/screenshotwindow.ui\" line=\"203\"/>\n        <source>Reset Markup</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/screenshotwindow.cpp\" line=\"242\"/>\n        <source>Cancel</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/screenshotwindow.cpp\" line=\"243\"/>\n        <source>Share Screenshot</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/screenshotwindow.cpp\" line=\"253\"/>\n        <source>Discard</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/screenshotwindow.cpp\" line=\"254\"/>\n        <source>Copy</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "desktop-portal/translations/es_VE.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"es_VE\" sourcelanguage=\"en_US\">\n<context>\n    <name>AccessDialog</name>\n    <message>\n        <location filename=\"../dialogs/accessdialog.ui\" line=\"14\"/>\n        <source>Form</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>AccessInterface</name>\n    <message>\n        <location filename=\"../interfaces/accessinterface.cpp\" line=\"17\"/>\n        <source>Deny</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../interfaces/accessinterface.cpp\" line=\"18\"/>\n        <source>Allow</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>AccountDialog</name>\n    <message>\n        <location filename=\"../dialogs/accountdialog.ui\" line=\"14\"/>\n        <location filename=\"../dialogs/accountdialog.ui\" line=\"35\"/>\n        <source>Request for Account Information</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/accountdialog.ui\" line=\"58\"/>\n        <source>TextLabel</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/accountdialog.ui\" line=\"74\"/>\n        <source>Real Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/accountdialog.ui\" line=\"81\"/>\n        <source>Username</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/accountdialog.ui\" line=\"108\"/>\n        <source>Information to be shared</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/accountdialog.ui\" line=\"118\"/>\n        <source>Share Account Information</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/accountdialog.cpp\" line=\"20\"/>\n        <source>%1 is requesting information about your profile.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>FileChooserInterface</name>\n    <message>\n        <location filename=\"../interfaces/filechooserinterface.cpp\" line=\"44\"/>\n        <source>Open</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../interfaces/filechooserinterface.cpp\" line=\"80\"/>\n        <source>Save</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>FileDialog</name>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"121\"/>\n        <source>Open</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"121\"/>\n        <source>Overwrite</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"86\"/>\n        <source>Save Here</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"87\"/>\n        <source>Create New File Here</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"107\"/>\n        <source>Open Folder</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"108\"/>\n        <source>Choose This Folder</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"97\"/>\n        <source>Name this file</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"97\"/>\n        <source>What do you want to name the file?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"194\"/>\n        <source>Overwrite?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"195\"/>\n        <source>A file named %1 already exists. Do you want to overwrite it?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"196\"/>\n        <source>Overwriting the file will replace its contents.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>NotificationInterface</name>\n    <message>\n        <location filename=\"../interfaces/notificationinterface.cpp\" line=\"63\"/>\n        <source>Activate</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>PenButton</name>\n    <message>\n        <location filename=\"../dialogs/penbutton.cpp\" line=\"54\"/>\n        <source>Erase-o</source>\n        <comment>This and the next translation span two lines. Be spiffy with these!</comment>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/penbutton.cpp\" line=\"55\"/>\n        <source>matic 2000</source>\n        <comment>This and the previous translation span two lines. Be spiffy with these!</comment>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>ScreenshotWindow</name>\n    <message>\n        <location filename=\"../dialogs/screenshotwindow.ui\" line=\"52\"/>\n        <source>SCREENSHOT</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/screenshotwindow.ui\" line=\"128\"/>\n        <source>Crop</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/screenshotwindow.ui\" line=\"148\"/>\n        <source>Redact</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/screenshotwindow.ui\" line=\"203\"/>\n        <source>Reset Markup</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/screenshotwindow.cpp\" line=\"242\"/>\n        <source>Cancel</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/screenshotwindow.cpp\" line=\"243\"/>\n        <source>Share Screenshot</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/screenshotwindow.cpp\" line=\"253\"/>\n        <source>Discard</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/screenshotwindow.cpp\" line=\"254\"/>\n        <source>Copy</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "desktop-portal/translations/id.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"id\" sourcelanguage=\"en_US\">\n<context>\n    <name>AccessDialog</name>\n    <message>\n        <location filename=\"../dialogs/accessdialog.ui\" line=\"14\"/>\n        <source>Form</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>AccessInterface</name>\n    <message>\n        <location filename=\"../interfaces/accessinterface.cpp\" line=\"17\"/>\n        <source>Deny</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../interfaces/accessinterface.cpp\" line=\"18\"/>\n        <source>Allow</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>AccountDialog</name>\n    <message>\n        <location filename=\"../dialogs/accountdialog.ui\" line=\"14\"/>\n        <location filename=\"../dialogs/accountdialog.ui\" line=\"35\"/>\n        <source>Request for Account Information</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/accountdialog.ui\" line=\"58\"/>\n        <source>TextLabel</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/accountdialog.ui\" line=\"74\"/>\n        <source>Real Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/accountdialog.ui\" line=\"81\"/>\n        <source>Username</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/accountdialog.ui\" line=\"108\"/>\n        <source>Information to be shared</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/accountdialog.ui\" line=\"118\"/>\n        <source>Share Account Information</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/accountdialog.cpp\" line=\"20\"/>\n        <source>%1 is requesting information about your profile.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>FileChooserInterface</name>\n    <message>\n        <location filename=\"../interfaces/filechooserinterface.cpp\" line=\"44\"/>\n        <source>Open</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../interfaces/filechooserinterface.cpp\" line=\"80\"/>\n        <source>Save</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>FileDialog</name>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"121\"/>\n        <source>Open</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"121\"/>\n        <source>Overwrite</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"86\"/>\n        <source>Save Here</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"87\"/>\n        <source>Create New File Here</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"107\"/>\n        <source>Open Folder</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"108\"/>\n        <source>Choose This Folder</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"97\"/>\n        <source>Name this file</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"97\"/>\n        <source>What do you want to name the file?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"194\"/>\n        <source>Overwrite?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"195\"/>\n        <source>A file named %1 already exists. Do you want to overwrite it?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"196\"/>\n        <source>Overwriting the file will replace its contents.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>NotificationInterface</name>\n    <message>\n        <location filename=\"../interfaces/notificationinterface.cpp\" line=\"63\"/>\n        <source>Activate</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>PenButton</name>\n    <message>\n        <location filename=\"../dialogs/penbutton.cpp\" line=\"54\"/>\n        <source>Erase-o</source>\n        <comment>This and the next translation span two lines. Be spiffy with these!</comment>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/penbutton.cpp\" line=\"55\"/>\n        <source>matic 2000</source>\n        <comment>This and the previous translation span two lines. Be spiffy with these!</comment>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>ScreenshotWindow</name>\n    <message>\n        <location filename=\"../dialogs/screenshotwindow.ui\" line=\"52\"/>\n        <source>SCREENSHOT</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/screenshotwindow.ui\" line=\"128\"/>\n        <source>Crop</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/screenshotwindow.ui\" line=\"148\"/>\n        <source>Redact</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/screenshotwindow.ui\" line=\"203\"/>\n        <source>Reset Markup</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/screenshotwindow.cpp\" line=\"242\"/>\n        <source>Cancel</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/screenshotwindow.cpp\" line=\"243\"/>\n        <source>Share Screenshot</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/screenshotwindow.cpp\" line=\"253\"/>\n        <source>Discard</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/screenshotwindow.cpp\" line=\"254\"/>\n        <source>Copy</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "desktop-portal/translations/nl.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"nl\" sourcelanguage=\"en_US\">\n<context>\n    <name>AccessDialog</name>\n    <message>\n        <location filename=\"../dialogs/accessdialog.ui\" line=\"14\"/>\n        <source>Form</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>AccessInterface</name>\n    <message>\n        <location filename=\"../interfaces/accessinterface.cpp\" line=\"17\"/>\n        <source>Deny</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../interfaces/accessinterface.cpp\" line=\"18\"/>\n        <source>Allow</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>AccountDialog</name>\n    <message>\n        <location filename=\"../dialogs/accountdialog.ui\" line=\"14\"/>\n        <location filename=\"../dialogs/accountdialog.ui\" line=\"35\"/>\n        <source>Request for Account Information</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/accountdialog.ui\" line=\"58\"/>\n        <source>TextLabel</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/accountdialog.ui\" line=\"74\"/>\n        <source>Real Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/accountdialog.ui\" line=\"81\"/>\n        <source>Username</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/accountdialog.ui\" line=\"108\"/>\n        <source>Information to be shared</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/accountdialog.ui\" line=\"118\"/>\n        <source>Share Account Information</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/accountdialog.cpp\" line=\"20\"/>\n        <source>%1 is requesting information about your profile.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>FileChooserInterface</name>\n    <message>\n        <location filename=\"../interfaces/filechooserinterface.cpp\" line=\"44\"/>\n        <source>Open</source>\n        <translation>Openen</translation>\n    </message>\n    <message>\n        <location filename=\"../interfaces/filechooserinterface.cpp\" line=\"80\"/>\n        <source>Save</source>\n        <translation>Opslaan</translation>\n    </message>\n</context>\n<context>\n    <name>FileDialog</name>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"121\"/>\n        <source>Open</source>\n        <translation>Openen</translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"121\"/>\n        <source>Overwrite</source>\n        <translation>Overschrijven</translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"86\"/>\n        <source>Save Here</source>\n        <translation>Hier Opslaan</translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"87\"/>\n        <source>Create New File Here</source>\n        <translation>Hier een Nieuw Bestand Maken</translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"107\"/>\n        <source>Open Folder</source>\n        <translation>Map Openen</translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"108\"/>\n        <source>Choose This Folder</source>\n        <translation>Deze Map Kiezen</translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"97\"/>\n        <source>Name this file</source>\n        <translation>Geef dit bestand een naam</translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"97\"/>\n        <source>What do you want to name the file?</source>\n        <translation>Hoe wil je dit bestand noemen?</translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"194\"/>\n        <source>Overwrite?</source>\n        <translation>Overschrijven?</translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"195\"/>\n        <source>A file named %1 already exists. Do you want to overwrite it?</source>\n        <translation>Er bestaat al een bestand met de naam %1. Wil je deze overschrijven?</translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"196\"/>\n        <source>Overwriting the file will replace its contents.</source>\n        <translation>Het bestand overschrijven zal de inhoud ervan vervangen.</translation>\n    </message>\n</context>\n<context>\n    <name>NotificationInterface</name>\n    <message>\n        <location filename=\"../interfaces/notificationinterface.cpp\" line=\"63\"/>\n        <source>Activate</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>PenButton</name>\n    <message>\n        <location filename=\"../dialogs/penbutton.cpp\" line=\"54\"/>\n        <source>Erase-o</source>\n        <comment>This and the next translation span two lines. Be spiffy with these!</comment>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/penbutton.cpp\" line=\"55\"/>\n        <source>matic 2000</source>\n        <comment>This and the previous translation span two lines. Be spiffy with these!</comment>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>ScreenshotWindow</name>\n    <message>\n        <location filename=\"../dialogs/screenshotwindow.ui\" line=\"52\"/>\n        <source>SCREENSHOT</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/screenshotwindow.ui\" line=\"128\"/>\n        <source>Crop</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/screenshotwindow.ui\" line=\"148\"/>\n        <source>Redact</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/screenshotwindow.ui\" line=\"203\"/>\n        <source>Reset Markup</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/screenshotwindow.cpp\" line=\"242\"/>\n        <source>Cancel</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/screenshotwindow.cpp\" line=\"243\"/>\n        <source>Share Screenshot</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/screenshotwindow.cpp\" line=\"253\"/>\n        <source>Discard</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/screenshotwindow.cpp\" line=\"254\"/>\n        <source>Copy</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "desktop-portal/translations/pt_BR.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"pt_BR\" sourcelanguage=\"en_US\">\n<context>\n    <name>AccessDialog</name>\n    <message>\n        <location filename=\"../dialogs/accessdialog.ui\" line=\"14\"/>\n        <source>Form</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>AccessInterface</name>\n    <message>\n        <location filename=\"../interfaces/accessinterface.cpp\" line=\"17\"/>\n        <source>Deny</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../interfaces/accessinterface.cpp\" line=\"18\"/>\n        <source>Allow</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>AccountDialog</name>\n    <message>\n        <location filename=\"../dialogs/accountdialog.ui\" line=\"14\"/>\n        <location filename=\"../dialogs/accountdialog.ui\" line=\"35\"/>\n        <source>Request for Account Information</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/accountdialog.ui\" line=\"58\"/>\n        <source>TextLabel</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/accountdialog.ui\" line=\"74\"/>\n        <source>Real Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/accountdialog.ui\" line=\"81\"/>\n        <source>Username</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/accountdialog.ui\" line=\"108\"/>\n        <source>Information to be shared</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/accountdialog.ui\" line=\"118\"/>\n        <source>Share Account Information</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/accountdialog.cpp\" line=\"20\"/>\n        <source>%1 is requesting information about your profile.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>FileChooserInterface</name>\n    <message>\n        <location filename=\"../interfaces/filechooserinterface.cpp\" line=\"44\"/>\n        <source>Open</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../interfaces/filechooserinterface.cpp\" line=\"80\"/>\n        <source>Save</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>FileDialog</name>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"121\"/>\n        <source>Open</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"121\"/>\n        <source>Overwrite</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"86\"/>\n        <source>Save Here</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"87\"/>\n        <source>Create New File Here</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"107\"/>\n        <source>Open Folder</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"108\"/>\n        <source>Choose This Folder</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"97\"/>\n        <source>Name this file</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"97\"/>\n        <source>What do you want to name the file?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"194\"/>\n        <source>Overwrite?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"195\"/>\n        <source>A file named %1 already exists. Do you want to overwrite it?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"196\"/>\n        <source>Overwriting the file will replace its contents.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>NotificationInterface</name>\n    <message>\n        <location filename=\"../interfaces/notificationinterface.cpp\" line=\"63\"/>\n        <source>Activate</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>PenButton</name>\n    <message>\n        <location filename=\"../dialogs/penbutton.cpp\" line=\"54\"/>\n        <source>Erase-o</source>\n        <comment>This and the next translation span two lines. Be spiffy with these!</comment>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/penbutton.cpp\" line=\"55\"/>\n        <source>matic 2000</source>\n        <comment>This and the previous translation span two lines. Be spiffy with these!</comment>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>ScreenshotWindow</name>\n    <message>\n        <location filename=\"../dialogs/screenshotwindow.ui\" line=\"52\"/>\n        <source>SCREENSHOT</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/screenshotwindow.ui\" line=\"128\"/>\n        <source>Crop</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/screenshotwindow.ui\" line=\"148\"/>\n        <source>Redact</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/screenshotwindow.ui\" line=\"203\"/>\n        <source>Reset Markup</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/screenshotwindow.cpp\" line=\"242\"/>\n        <source>Cancel</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/screenshotwindow.cpp\" line=\"243\"/>\n        <source>Share Screenshot</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/screenshotwindow.cpp\" line=\"253\"/>\n        <source>Discard</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/screenshotwindow.cpp\" line=\"254\"/>\n        <source>Copy</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "desktop-portal/translations/sv.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"sv\" sourcelanguage=\"en_US\">\n<context>\n    <name>AccessDialog</name>\n    <message>\n        <location filename=\"../dialogs/accessdialog.ui\" line=\"14\"/>\n        <source>Form</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>AccessInterface</name>\n    <message>\n        <location filename=\"../interfaces/accessinterface.cpp\" line=\"17\"/>\n        <source>Deny</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../interfaces/accessinterface.cpp\" line=\"18\"/>\n        <source>Allow</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>AccountDialog</name>\n    <message>\n        <location filename=\"../dialogs/accountdialog.ui\" line=\"14\"/>\n        <location filename=\"../dialogs/accountdialog.ui\" line=\"35\"/>\n        <source>Request for Account Information</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/accountdialog.ui\" line=\"58\"/>\n        <source>TextLabel</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/accountdialog.ui\" line=\"74\"/>\n        <source>Real Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/accountdialog.ui\" line=\"81\"/>\n        <source>Username</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/accountdialog.ui\" line=\"108\"/>\n        <source>Information to be shared</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/accountdialog.ui\" line=\"118\"/>\n        <source>Share Account Information</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/accountdialog.cpp\" line=\"20\"/>\n        <source>%1 is requesting information about your profile.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>FileChooserInterface</name>\n    <message>\n        <location filename=\"../interfaces/filechooserinterface.cpp\" line=\"44\"/>\n        <source>Open</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../interfaces/filechooserinterface.cpp\" line=\"80\"/>\n        <source>Save</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>FileDialog</name>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"121\"/>\n        <source>Open</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"121\"/>\n        <source>Overwrite</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"86\"/>\n        <source>Save Here</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"87\"/>\n        <source>Create New File Here</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"107\"/>\n        <source>Open Folder</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"108\"/>\n        <source>Choose This Folder</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"97\"/>\n        <source>Name this file</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"97\"/>\n        <source>What do you want to name the file?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"194\"/>\n        <source>Overwrite?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"195\"/>\n        <source>A file named %1 already exists. Do you want to overwrite it?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"196\"/>\n        <source>Overwriting the file will replace its contents.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>NotificationInterface</name>\n    <message>\n        <location filename=\"../interfaces/notificationinterface.cpp\" line=\"63\"/>\n        <source>Activate</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>PenButton</name>\n    <message>\n        <location filename=\"../dialogs/penbutton.cpp\" line=\"54\"/>\n        <source>Erase-o</source>\n        <comment>This and the next translation span two lines. Be spiffy with these!</comment>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/penbutton.cpp\" line=\"55\"/>\n        <source>matic 2000</source>\n        <comment>This and the previous translation span two lines. Be spiffy with these!</comment>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>ScreenshotWindow</name>\n    <message>\n        <location filename=\"../dialogs/screenshotwindow.ui\" line=\"52\"/>\n        <source>SCREENSHOT</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/screenshotwindow.ui\" line=\"128\"/>\n        <source>Crop</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/screenshotwindow.ui\" line=\"148\"/>\n        <source>Redact</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/screenshotwindow.ui\" line=\"203\"/>\n        <source>Reset Markup</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/screenshotwindow.cpp\" line=\"242\"/>\n        <source>Cancel</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/screenshotwindow.cpp\" line=\"243\"/>\n        <source>Share Screenshot</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/screenshotwindow.cpp\" line=\"253\"/>\n        <source>Discard</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/screenshotwindow.cpp\" line=\"254\"/>\n        <source>Copy</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "desktop-portal/translations/vi.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"vi\" sourcelanguage=\"en_US\">\n<context>\n    <name>AccessDialog</name>\n    <message>\n        <location filename=\"../dialogs/accessdialog.ui\" line=\"14\"/>\n        <source>Form</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>AccessInterface</name>\n    <message>\n        <location filename=\"../interfaces/accessinterface.cpp\" line=\"17\"/>\n        <source>Deny</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../interfaces/accessinterface.cpp\" line=\"18\"/>\n        <source>Allow</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>AccountDialog</name>\n    <message>\n        <location filename=\"../dialogs/accountdialog.ui\" line=\"14\"/>\n        <location filename=\"../dialogs/accountdialog.ui\" line=\"35\"/>\n        <source>Request for Account Information</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/accountdialog.ui\" line=\"58\"/>\n        <source>TextLabel</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/accountdialog.ui\" line=\"74\"/>\n        <source>Real Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/accountdialog.ui\" line=\"81\"/>\n        <source>Username</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/accountdialog.ui\" line=\"108\"/>\n        <source>Information to be shared</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/accountdialog.ui\" line=\"118\"/>\n        <source>Share Account Information</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/accountdialog.cpp\" line=\"20\"/>\n        <source>%1 is requesting information about your profile.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>FileChooserInterface</name>\n    <message>\n        <location filename=\"../interfaces/filechooserinterface.cpp\" line=\"44\"/>\n        <source>Open</source>\n        <translation>Mở</translation>\n    </message>\n    <message>\n        <location filename=\"../interfaces/filechooserinterface.cpp\" line=\"80\"/>\n        <source>Save</source>\n        <translation>Lưu</translation>\n    </message>\n</context>\n<context>\n    <name>FileDialog</name>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"121\"/>\n        <source>Open</source>\n        <translation>Mở</translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"121\"/>\n        <source>Overwrite</source>\n        <translation>Ghi đè</translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"86\"/>\n        <source>Save Here</source>\n        <translation>Lưu đây</translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"87\"/>\n        <source>Create New File Here</source>\n        <translation>Tạo tệp mới đây</translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"107\"/>\n        <source>Open Folder</source>\n        <translation>Mở thư mục</translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"108\"/>\n        <source>Choose This Folder</source>\n        <translation>Chọn thư mục này</translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"97\"/>\n        <source>Name this file</source>\n        <translation>Đặt tên tệp này</translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"97\"/>\n        <source>What do you want to name the file?</source>\n        <translation>Bạn muốn gọi tệp này tên gì?</translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"194\"/>\n        <source>Overwrite?</source>\n        <translation>Ghi đè?</translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"195\"/>\n        <source>A file named %1 already exists. Do you want to overwrite it?</source>\n        <translation>Tệp tên %1 đã tồn tại. Bạn có muốn ghi đè không?</translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/filedialog.cpp\" line=\"196\"/>\n        <source>Overwriting the file will replace its contents.</source>\n        <translation>Việc ghi đè tệp này sẽ thay thế nội dung của nó.</translation>\n    </message>\n</context>\n<context>\n    <name>NotificationInterface</name>\n    <message>\n        <location filename=\"../interfaces/notificationinterface.cpp\" line=\"63\"/>\n        <source>Activate</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>PenButton</name>\n    <message>\n        <location filename=\"../dialogs/penbutton.cpp\" line=\"54\"/>\n        <source>Erase-o</source>\n        <comment>This and the next translation span two lines. Be spiffy with these!</comment>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/penbutton.cpp\" line=\"55\"/>\n        <source>matic 2000</source>\n        <comment>This and the previous translation span two lines. Be spiffy with these!</comment>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>ScreenshotWindow</name>\n    <message>\n        <location filename=\"../dialogs/screenshotwindow.ui\" line=\"52\"/>\n        <source>SCREENSHOT</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/screenshotwindow.ui\" line=\"128\"/>\n        <source>Crop</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/screenshotwindow.ui\" line=\"148\"/>\n        <source>Redact</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/screenshotwindow.ui\" line=\"203\"/>\n        <source>Reset Markup</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/screenshotwindow.cpp\" line=\"242\"/>\n        <source>Cancel</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/screenshotwindow.cpp\" line=\"243\"/>\n        <source>Share Screenshot</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/screenshotwindow.cpp\" line=\"253\"/>\n        <source>Discard</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../dialogs/screenshotwindow.cpp\" line=\"254\"/>\n        <source>Copy</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "desktop-portal/xdg-desktop-portal-thedesk.service.in",
    "content": "[Unit]\nDescription=XDG Portal (theDesk)\n\n[Service]\nType=dbus\nBusName=org.freedesktop.impl.portal.desktop.thedesk\nExecStart=${CMAKE_INSTALL_FULL_LIBDIR}/thedesk-desktop-portal\nRestart=no\n"
  },
  {
    "path": "dist/thedesk-blueprint.spec",
    "content": "Name:           thedesk-blueprint\nVersion:        beta5\nRelease:        2%{?dist}\nSummary:        Desktop Environment built on Qt\n\nLicense:        GPLv3+\nURL:            https://github.com/vicr123/thedesk\nSource0:        https://github.com/vicr123/thedesk/archive/%{version}.tar.gz\nConflicts:      thedesk\nProvides:       thedesk\n\n%if 0%{?fedora} >= 33\nBuildRequires:  make qt5-qtbase-devel the-libs-blueprint-devel libtdesktopenvironment-blueprint-devel libX11-devel libXi-devel xorg-x11-drv-libinput-devel kf5-networkmanager-qt-devel kf5-modemmanager-qt-devel pulseaudio-qt-devel polkit-qt5-devel libtwebservices-blueprint-devel qt5-qtmultimedia-devel qt5-qtquickcontrols2-devel qt5-qtx11extras-devel qt5-qtlocation-devel qt5-qtbase-private-devel qt5-qtsvg-devel qt5-linguist qrencode-devel kf5-bluez-qt-devel wayfire-devel wayland-devel wlroots-devel\nRequires:       qt5-qtbase kwin the-libs-blueprint libtdesktopenvironment-blueprint libX11 libXi kf5-networkmanager-qt kf5-modemmanager-qt pulseaudio-qt accountsservice contemporary-widgets-blueprint contemporary-icons ttf-contemporary polkit-qt5 libtwebservices-blueprint qt5-qtmultimedia qt5-qtquickcontrols2 qt5-qtx11extras qt5-qtlocation qt5-qtsvg libthedesk-blueprint qrencode kf5-bluez-qt thedesk-xdg-utils-blueprint\n%endif\n\n%define debug_package %{nil}\n%define _unpackaged_files_terminate_build 0\n\n%description\nDesktop Environment built on Qt\n\n%package -n libthedesk-blueprint\nSummary:        Libraries for %{name} plugins\nConflicts:      libthedesk\nProvides:       libthedesk\n\n%description -n libthedesk-blueprint\nLibraries for theDesk plugins\n\n%package -n libthedesk-blueprint-devel\nSummary:        Development files for libthedesk-blueprint\nRequires:       libthedesk-blueprint%{?_isa} = %{version}-%{release}\nConflicts:      libthedesk-devel\nProvides:       libthedesk-devel\n\n\n%description -n libthedesk-blueprint-devel\nThe libthedesk-blueprint-devel package contains libraries and header files for\ndeveloping applications that use libthedesk-blueprint.\n\n%prep\n%setup\n\n%build\nmkdir build\ncd build\nqmake-qt5 ..\nmake\n\n%install\ncd build\nrm -rf $RPM_BUILD_ROOT\nmake install INSTALL_ROOT=$RPM_BUILD_ROOT\nfind $RPM_BUILD_ROOT -name '*.la' -exec rm -f {} ';'\n\n%post -p /sbin/ldconfig\n\n%postun -p /sbin/ldconfig\n\n%files\n%{_bindir}/*\n%{_datarootdir}/*\n%{_libdir}/td-polkitagent\n%{_libdir}/thedesk/plugins/*.so\n%{_libdir}/qt5/plugins/platformthemes/*.so\n%{_libdir}/wayfire/*.so\n%{_sysconfdir}/*\n\n%files -n libthedesk-blueprint\n%{_libdir}/libthedesk.so*\n\n%files -n libthedesk-blueprint-devel\n%{_includedir}/*\n\n%changelog\n* Sun May  3 2020 Victor Tran\n- \n"
  },
  {
    "path": "dist/thedesk.spec",
    "content": "Name:           thedesk\nVersion:        beta4\nRelease:        12%{?dist}\nSummary:        Desktop Environment built on Qt\n\nLicense:        GPLv3+\nURL:            https://github.com/vicr123/thedesk\nSource0:        https://github.com/vicr123/thedesk/archive/%{version}.tar.gz\n\n\n%if 0%{?fedora} >= 33\nBuildRequires:  make qt5-qtbase-devel the-libs-devel libtdesktopenvironment-devel libX11-devel libXi-devel xorg-x11-drv-libinput-devel kf5-networkmanager-qt-devel kf5-modemmanager-qt-devel pulseaudio-qt-devel polkit-qt5-devel libtwebservices-devel qt5-qtmultimedia-devel qt5-qtquickcontrols2-devel qt5-qtx11extras-devel qt5-qtlocation-devel qt5-qtbase-private-devel qt5-qtsvg-devel qt5-linguist qrencode-devel kf5-bluez-qt-devel\nRequires:       qt5-qtbase kwin the-libs libtdesktopenvironment libX11 libXi kf5-networkmanager-qt kf5-modemmanager-qt pulseaudio-qt accountsservice contemporary-widgets contemporary-icons ttf-contemporary polkit-qt5 libtwebservices qt5-qtmultimedia qt5-qtquickcontrols2 qt5-qtx11extras qt5-qtlocation qt5-qtsvg libthedesk qrencode kf5-bluez-qt thedesk-xdg-utils\n%endif\n\n%define debug_package %{nil}\n%define _unpackaged_files_terminate_build 0\n\n%description\nDesktop Environment built on Qt\n\n%package -n libthedesk\nSummary:        Libraries for %{name} plugins\nConflicts:      libthedesk\nProvides:       libthedesk\n\n%description -n libthedesk\nLibraries for theDesk plugins\n\n%package -n libthedesk-devel\nSummary:        Development files for libthedesk\nRequires:       libthedesk%{?_isa} = %{version}-%{release}\nConflicts:      libthedesk-devel\nProvides:       libthedesk-devel\n\n\n%description -n libthedesk-devel\nThe libthedesk-devel package contains libraries and header files for\ndeveloping applications that use libthedesk.\n\n%prep\n%setup\n\n%build\nmkdir build\ncd build\nqmake-qt5 ..\nmake\n\n%install\ncd build\nrm -rf $RPM_BUILD_ROOT\nmake install INSTALL_ROOT=$RPM_BUILD_ROOT\nfind $RPM_BUILD_ROOT -name '*.la' -exec rm -f {} ';'\n\n%post -p /sbin/ldconfig\n\n%postun -p /sbin/ldconfig\n\n%files\n%{_bindir}/*\n%{_datarootdir}/*\n%{_libdir}/td-polkitagent\n%{_libdir}/thedesk/plugins/*.so\n%{_libdir}/qt5/plugins/platformthemes/*.so\n%{_sysconfdir}/*\n\n%files -n libthedesk\n%{_libdir}/libthedesk.so*\n\n%files -n libthedesk-devel\n%{_includedir}/*\n\n%changelog\n* Sun May  3 2020 Victor Tran\n-\n"
  },
  {
    "path": "libthedesk/CMakeLists.txt",
    "content": "cmake_minimum_required(VERSION 3.24.0)\n\nproject(lib VERSION 1.0.0 LANGUAGES CXX)\n\nfind_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets Multimedia DBus Svg QuickWidgets MultimediaWidgets)\nfind_package(libcontemporary REQUIRED)\nfind_package(libtdesktopenvironment REQUIRED)\n\n# TODO: Port NetworkManager portions\n# TODO: Port Wayland portions\n# TODO: Port pulseaudip portions\n\nset(SOURCES\n    actionquickwidget.cpp\n    barmanager.cpp\n    chunk.cpp\n    common.cpp\n    gatewaymanager.cpp\n    gatewaysearchprovider.cpp\n    hudmanager.cpp\n    icontextchunk.cpp\n    keygrab.cpp\n    localemanager.cpp\n    onboarding/onboarding.cpp\n    onboarding/onboardingbar.cpp\n    onboarding/onboardingcontroller.cpp\n    onboarding/onboardingfinal.cpp\n    onboarding/onboardingstepper.cpp\n    onboarding/onboardingvideo.cpp\n    onboarding/onboardingwelcome.cpp\n    onboardingmanager.cpp\n    onboardingpage.cpp\n    plugins/pluginmanager.cpp\n    powermanager.cpp\n    private/keyboardlayoutmodel.cpp\n    private/keyboardlayoutselector.cpp\n    private/localeselector.cpp\n    private/quickwidgetcontainer.cpp\n    quickswitch.cpp\n    quietmodemanager.cpp\n    server/sessionserver.cpp\n    statemanager.cpp\n    statuscentermanager.cpp\n    statuscenterpane.cpp\n    transparentdialog.cpp\n\n    actionquickwidget.ui\n    icontextchunk.ui\n    onboarding/onboarding.ui\n    onboarding/onboardingbar.ui\n    onboarding/onboardingfinal.ui\n    onboarding/onboardingvideo.ui\n    onboarding/onboardingwelcome.ui\n    private/keyboardlayoutselector.ui\n    private/localeselector.ui\n    private/quickwidgetcontainer.ui\n    transparentdialog.ui\n\n    libthedesk_resources.qrc\n)\n\nset(HEADERS\n    actionquickwidget.h\n    barmanager.h\n    chunk.h\n    common.h\n    gatewaymanager.h\n    gatewaysearchprovider.h\n    hudmanager.h\n    icontextchunk.h\n    keygrab.h\n    libthedesk_global.h\n    localemanager.h\n    onboarding/onboarding.h\n    onboarding/onboardingbar.h\n    onboarding/onboardingcontroller.h\n    onboarding/onboardingfinal.h\n    onboarding/onboardingstepper.h\n    onboarding/onboardingvideo.h\n    onboarding/onboardingwelcome.h\n    onboardingmanager.h\n    onboardingpage.h\n    plugins/pluginmanager.h\n    plugins/plugininterface.h\n    powermanager.h\n    private/keyboardlayoutmodel.h\n    private/keyboardlayoutselector.h\n    private/localeselector.h\n    private/onboardingmanager_p.h\n    private/quickwidgetcontainer.h\n    quickswitch.h\n    quietmodemanager.h\n    server/sessionserver.h\n    statemanager.h\n    statuscentermanager.h\n    statuscenterpane.h\n    transparentdialog.h\n)\n\nset(PRIVATE_HEADERS\n\n)\n\nadd_library(libthedesk SHARED)\ncntp_init(libthedesk 20)\nset_target_properties(libthedesk PROPERTIES\n        OUTPUT_NAME thedesk\n        FRAMEWORK TRUE\n        MACOSX_FRAMEWORK_IDENTIFIER com.vicr123.libthedesk\n        VERSION 1.0.0)\ncntp_target_public_headers(libthedesk\n    DESTINATION_DIRECTORY libthedesk\n    HEADERS ${HEADERS}\n)\n\ntarget_link_libraries(libthedesk Qt::Widgets Qt::DBus Qt::Multimedia Qt::Svg Qt::QuickWidgets Qt::MultimediaWidgets libcontemporary libtdesktopenvironment)\ntarget_compile_definitions(libthedesk PRIVATE LIBTHEDESK_LIBRARY)\n\nIF(${CMAKE_SYSTEM_NAME} MATCHES \"Darwin\")\n    set(CMAKECONFIG_INSTALL_DIR ${CMAKE_CURRENT_BINARY_DIR}/libthedesk.framework/Resources/CMake)\n    set(HEADER_INSTALL_DIR ${CMAKE_INSTALL_PREFIX})\n    set(INCLUDE_INSTALL_DIR ${CMAKE_INSTALL_LIBDIR}/libthedesk.framework/Headers)\n    set(LIBRARY_INSTALL_DIR ../)\nELSE()\n    set(CMAKECONFIG_INSTALL_DIR ${CMAKE_INSTALL_LIBDIR}/cmake/libthedesk)\n    set(HEADER_INSTALL_DIR ${CMAKE_INSTALL_INCLUDEDIR}/libthedesk)\n    set(INCLUDE_INSTALL_DIR ${HEADER_INSTALL_DIR})\n    set(LIBRARY_INSTALL_DIR ${CMAKE_INSTALL_LIBDIR})\nENDIF()\n\ntarget_sources(libthedesk PRIVATE ${SOURCES} ${HEADERS} ${PRIVATE_HEADERS})\n\nconfigure_package_config_file(libthedeskConfig.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/libthedeskConfig.cmake\n        INSTALL_DESTINATION ${CMAKECONFIG_INSTALL_DIR}\n        PATH_VARS HEADER_INSTALL_DIR LIBRARY_INSTALL_DIR)\n\ninstall(FILES ${CMAKE_CURRENT_BINARY_DIR}/libthedeskConfig.cmake\n        DESTINATION ${CMAKECONFIG_INSTALL_DIR})\ninstall(EXPORT libthedeskTargets\n        FILE libthedeskTargets.cmake\n        DESTINATION ${CMAKECONFIG_INSTALL_DIR})\n\ninstall(TARGETS libthedesk\n        EXPORT libthedeskTargets\n        PUBLIC_HEADER DESTINATION ${HEADER_INSTALL_DIR}\n        INCLUDES DESTINATION ${INCLUDE_INSTALL_DIR}\n        LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}\n        FRAMEWORK DESTINATION ${CMAKE_INSTALL_LIBDIR})\n\ncntp_mark_support_library_directory()\n"
  },
  {
    "path": "libthedesk/actionquickwidget.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"actionquickwidget.h\"\n#include \"ui_actionquickwidget.h\"\n\n#include <QPushButton>\n#include <QActionEvent>\n#include <QAction>\n#include \"private/quickwidgetcontainer.h\"\n#include \"chunk.h\"\n\nstruct ActionQuickWidgetPrivate {\n    Chunk* parentChunk = nullptr;\n    QuickWidgetContainer* parentQuickWidget = nullptr;\n    QMap<QAction*, QWidget*> buttons;\n};\n\nActionQuickWidget::ActionQuickWidget(Chunk* parent) :\n    QWidget(parent),\n    ui(new Ui::ActionQuickWidget) {\n    ui->setupUi(this);\n\n    d = new ActionQuickWidgetPrivate();\n    d->parentChunk = parent;\n}\n\nActionQuickWidget::ActionQuickWidget(QuickWidgetContainer* parent) :\n    QWidget(parent),\n    ui(new Ui::ActionQuickWidget) {\n    ui->setupUi(this);\n\n    d = new ActionQuickWidgetPrivate();\n    d->parentQuickWidget = parent;\n}\n\nActionQuickWidget::~ActionQuickWidget() {\n    delete ui;\n    delete d;\n}\n\nvoid ActionQuickWidget::addAction(QAction* action) {\n    QWidget::addAction(action);\n}\n\nQAction* ActionQuickWidget::addAction(QString text, std::function<void ()> triggered) {\n    QAction* action = new QAction(text, this);\n    connect(action, &QAction::triggered, this, triggered);\n    QWidget::addAction(action);\n    return action;\n}\n\nQAction* ActionQuickWidget::addAction(QIcon icon, QString text, std::function<void ()> triggered) {\n    QAction* action = new QAction(icon, text, this);\n    connect(action, &QAction::triggered, this, triggered);\n    QWidget::addAction(action);\n    return action;\n}\n\nbool ActionQuickWidget::event(QEvent* event) {\n    QActionEvent* e = static_cast<QActionEvent*>(event);\n    switch (event->type()) {\n        case QEvent::ActionAdded: {\n            QAction* action = e->action();\n            QPushButton* button = new QPushButton();\n            button->setText(action->text());\n            button->setIcon(action->icon());\n            button->setEnabled(action->isEnabled());\n            button->setVisible(action->isVisible());\n\n            connect(button, &QPushButton::clicked, this, [ = ] {\n                if (d->parentChunk) {\n                    d->parentChunk->hideQuickWidget();\n                } else {\n                    d->parentQuickWidget->hideContainer();\n                }\n                action->trigger();\n            });\n            connect(action, &QAction::changed, this, [ = ] {\n                button->setText(action->text());\n                button->setIcon(action->icon());\n                button->setEnabled(action->isEnabled());\n                button->setVisible(action->isVisible());\n            });\n\n            d->buttons.insert(action, button);\n            ui->actionsLayout->addWidget(button);\n            break;\n        }\n        case QEvent::ActionChanged:\n            break;\n        case QEvent::ActionRemoved: {\n            QWidget* button = d->buttons.value(e->action());\n            ui->actionsLayout->removeWidget(button);\n            button->deleteLater();\n            d->buttons.remove(e->action());\n            break;\n        }\n        default:\n            break;\n    }\n\n    return QWidget::event(event);\n}\n"
  },
  {
    "path": "libthedesk/actionquickwidget.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef ACTIONQUICKWIDGET_H\n#define ACTIONQUICKWIDGET_H\n\n#include <QWidget>\n#include <functional>\n\nnamespace Ui {\n    class ActionQuickWidget;\n}\n\nclass Chunk;\nclass QuickWidgetContainer;\nstruct ActionQuickWidgetPrivate;\nclass ActionQuickWidget : public QWidget {\n        Q_OBJECT\n\n    public:\n        explicit ActionQuickWidget(Chunk* parent = nullptr);\n        explicit ActionQuickWidget(QuickWidgetContainer* parent = nullptr);\n        ~ActionQuickWidget();\n\n        void addAction(QAction* action);\n        QAction* addAction(QString text, std::function<void()> triggered);\n        QAction* addAction(QIcon icon, QString text, std::function<void()> triggered);\n\n    private:\n        Ui::ActionQuickWidget* ui;\n        ActionQuickWidgetPrivate* d;\n\n        bool event(QEvent* event);\n};\n\n#endif // ACTIONQUICKWIDGET_H\n"
  },
  {
    "path": "libthedesk/actionquickwidget.ui",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ui version=\"4.0\">\n <class>ActionQuickWidget</class>\n <widget class=\"QWidget\" name=\"ActionQuickWidget\">\n  <property name=\"geometry\">\n   <rect>\n    <x>0</x>\n    <y>0</y>\n    <width>295</width>\n    <height>192</height>\n   </rect>\n  </property>\n  <property name=\"windowTitle\">\n   <string notr=\"true\">Form</string>\n  </property>\n  <layout class=\"QVBoxLayout\" name=\"verticalLayout_2\">\n   <property name=\"spacing\">\n    <number>0</number>\n   </property>\n   <property name=\"leftMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"topMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"rightMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"bottomMargin\">\n    <number>0</number>\n   </property>\n   <item>\n    <layout class=\"QVBoxLayout\" name=\"actionsLayout\"/>\n   </item>\n  </layout>\n </widget>\n <resources/>\n <connections/>\n</ui>\n"
  },
  {
    "path": "libthedesk/barmanager.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"barmanager.h\"\n\n#include <statemanager.h>\n\nstruct BarManagerPrivate {\n    QList<Chunk*> chunks;\n    int barHeight;\n    int locks = 0;\n};\n\nBarManager::BarManager(QObject* parent) : QObject(parent) {\n    d = new BarManagerPrivate();\n}\n\nBarManager::~BarManager() {\n    delete d;\n}\n\nvoid BarManager::addChunk(Chunk* chunk) {\n    if (!d->chunks.contains(chunk)) {\n        d->chunks.append(chunk);\n        emit chunkAdded(chunk);\n    }\n}\n\nvoid BarManager::removeChunk(Chunk* chunk) {\n    if (d->chunks.contains(chunk)) {\n        d->chunks.removeOne(chunk);\n        emit chunkRemoved(chunk);\n    }\n}\n\nbool BarManager::isChunkRegistered(Chunk* chunk) {\n    return d->chunks.contains(chunk);\n}\n\nbool BarManager::isBarLocked() {\n    return d->locks != 0;\n}\n\nBarManager::BarLockPtr BarManager::acquireLock() {\n    return BarLockPtr(new BarLock());\n}\n\nint BarManager::barHeight() {\n    return d->barHeight;\n}\n\nQList<Chunk*> BarManager::chunks() {\n    return d->chunks;\n}\n\nvoid BarManager::setBarHeight(int barHeight) {\n    d->barHeight = barHeight;\n    emit barHeightChanged(barHeight);\n}\n\nBarManager::BarLock::BarLock() {\n    isLocked = true;\n    StateManager::barManager()->d->locks++;\n\n    //Lock the bar\n    emit StateManager::barManager()->barLockedChanged(true);\n}\n\nBarManager::BarLock::~BarLock() {\n    unlock();\n}\n\nvoid BarManager::BarLock::unlock() {\n    if (isLocked) {\n        isLocked = false;\n        int locks = --StateManager::barManager()->d->locks;\n        if (locks == 0) {\n            //Unlock the bar\n            emit StateManager::barManager()->barLockedChanged(false);\n        }\n    }\n}\n"
  },
  {
    "path": "libthedesk/barmanager.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef BARMANAGER_H\n#define BARMANAGER_H\n\n#include <QObject>\n#include <QSharedPointer>\n\nclass Chunk;\nclass ChunkContainer;\nclass BarWindow;\nstruct BarManagerPrivate;\nclass BarManager : public QObject {\n        Q_OBJECT\n\n    public:\n        class BarLock {\n            public:\n                ~BarLock();\n                void unlock();\n\n            protected:\n                friend BarManager;\n\n                BarLock();\n                bool isLocked = false;\n        };\n        typedef QSharedPointer<BarLock> BarLockPtr;\n\n        explicit BarManager(QObject* parent = nullptr);\n        ~BarManager();\n\n        void addChunk(Chunk* chunk);\n        void removeChunk(Chunk* chunk);\n        bool isChunkRegistered(Chunk* chunk);\n\n        bool isBarLocked();\n\n        BarLockPtr acquireLock();\n\n        int barHeight();\n\n    protected:\n        friend ChunkContainer;\n        friend BarWindow;\n        QList<Chunk*> chunks();\n        void setBarHeight(int barHeight);\n\n    signals:\n        void chunkAdded(Chunk* chunk);\n        void chunkRemoved(Chunk* chunk);\n        void barHeightTransitioning(qreal percentage);\n        void barHeightChanged(int height);\n        void barLockedChanged(bool isBarLocked);\n\n    protected:\n        BarManagerPrivate* d;\n};\n\n#endif // BARMANAGER_H\n"
  },
  {
    "path": "libthedesk/chunk.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"chunk.h\"\n\n#include <statemanager.h>\n#include <barmanager.h>\n#include <QMouseEvent>\n#include \"private/quickwidgetcontainer.h\"\n\nstruct ChunkPrivate {\n    QuickWidgetContainer* quickWidgetContainer;\n};\n\nChunk::Chunk() : QWidget(nullptr) {\n    d = new ChunkPrivate();\n    d->quickWidgetContainer = new QuickWidgetContainer(this);\n}\n\nChunk::~Chunk() {\n    delete d;\n}\n\nbool Chunk::chunkRegistered() {\n    return StateManager::instance()->barManager()->isChunkRegistered(this);\n}\n\nvoid Chunk::performStatusBarTransition(qreal percentage) {\n    Q_UNUSED(percentage);\n    //noop\n}\n\nvoid Chunk::showQuickWidget() {\n    if (quickWidget()) {\n        //Show the quick widget\n        d->quickWidgetContainer->showContainer();\n    }\n}\n\nvoid Chunk::hideQuickWidget() {\n    d->quickWidgetContainer->hideContainer();\n}\n\nvoid Chunk::mousePressEvent(QMouseEvent* event) {\n    event->accept();\n}\n\nvoid Chunk::mouseReleaseEvent(QMouseEvent* event) {\n    if (event->pos().x() < this->width() && event->pos().x() > 0 &&\n        event->pos().y() < this->height() && event->pos().y() > 0) {\n        emit clicked();\n    }\n}\n\nQWidget* Chunk::quickWidget() {\n    return nullptr;\n}\n"
  },
  {
    "path": "libthedesk/chunk.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef CHUNK_H\n#define CHUNK_H\n\n#include <QWidget>\n\nclass QuickWidgetContainer;\nstruct ChunkPrivate;\nclass Chunk : public QWidget {\n        Q_OBJECT\n    public:\n        explicit Chunk();\n        ~Chunk();\n\n        virtual QString name() = 0;\n        bool chunkRegistered();\n\n        virtual int expandedHeight() = 0;\n        virtual int statusBarHeight() = 0;\n        void performStatusBarTransition(qreal percentage);\n\n        void showQuickWidget();\n        void hideQuickWidget();\n\n    signals:\n        void statusBarHeightChanged();\n        void expandedHeightChanged();\n\n        void clicked();\n\n    protected:\n        friend QuickWidgetContainer;\n        virtual QWidget* quickWidget();\n\n    private:\n        ChunkPrivate* d;\n\n        void mousePressEvent(QMouseEvent* event);\n        void mouseReleaseEvent(QMouseEvent* event);\n};\n\n#endif // CHUNK_H\n"
  },
  {
    "path": "libthedesk/common.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"common.h\"\n\nint Common::getInsertionIndex(QStringList preferredOrder, QStringList currentItems, QString item) {\n    //First, check to see if there is a preferred order for this item\n    if (!preferredOrder.contains(item)) {\n        //No preferred order so just add it at the end\n        return -1;\n    }\n\n    //Find where this item is supposed to go\n    int beforeIndex = preferredOrder.indexOf(item) - 1;\n    if (beforeIndex == -1) {\n        //Add this item at the beginning\n        return 0;\n    }\n\n    //Iterate over the currently loaded items and insert the item at the correct place\n    QStringList itemsBefore = preferredOrder.mid(0, beforeIndex + 1);\n    for (int i = currentItems.count() - 1; i >= 0; i--) {\n        if (itemsBefore.contains(currentItems.at(i))) {\n            return i + 1;\n        }\n    }\n\n    //None of the other items were found so just add it at the beginning\n    return 0;\n}\n"
  },
  {
    "path": "libthedesk/common.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef COMMON_H\n#define COMMON_H\n\n#include <QStringList>\n\nnamespace Common {\n    /**\n     * Given a list of items, find the correct index to insert this item into\n     *\n     * @param preferredOrder   The preferred order of items\n     * @param currentItems     The items that are currently in the layout\n     * @param item             The name of the current item\n     * @return                 An index, or -1 to add to the end of the layout\n     */\n    int getInsertionIndex(QStringList preferredOrder, QStringList currentItems, QString item);\n}\n\n#endif // COMMON_H\n"
  },
  {
    "path": "libthedesk/gatewaymanager.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"gatewaymanager.h\"\n\nstruct GatewayManagerPrivate {\n    QList<GatewaySearchProvider*> providers;\n    int gatewayWidth = 0;\n};\n\nGatewayManager::GatewayManager(QObject* parent) : QObject(parent) {\n    d = new GatewayManagerPrivate();\n}\n\nGatewayManager::~GatewayManager() {\n    delete d;\n}\n\nvoid GatewayManager::registerSearchProvider(GatewaySearchProvider* provider) {\n    if (!d->providers.contains(provider)) {\n        d->providers.append(provider);\n        emit searchProviderRegistered(provider);\n    }\n}\n\nvoid GatewayManager::deregisterSearchProvider(GatewaySearchProvider* provider) {\n    if (d->providers.contains(provider)) {\n        d->providers.removeOne(provider);\n        emit searchProviderDeregistered(provider);\n    }\n}\n\nbool GatewayManager::isSearchProviderRegistered(GatewaySearchProvider* provider) {\n    return d->providers.contains(provider);\n}\n\nQList<GatewaySearchProvider*> GatewayManager::searchProviders() {\n    return d->providers;\n}\n\nint GatewayManager::gatewayWidth() {\n    return d->gatewayWidth;\n}\n\nvoid GatewayManager::setGatewayWidth(int width) {\n    d->gatewayWidth = width;\n    emit gatewayWidthChanged(width);\n}\n"
  },
  {
    "path": "libthedesk/gatewaymanager.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef GATEWAYMANAGER_H\n#define GATEWAYMANAGER_H\n\n#include <QObject>\n\nclass Gateway;\nclass GatewaySearchProvider;\nstruct GatewayManagerPrivate;\nclass GatewayManager : public QObject {\n        Q_OBJECT\n    public:\n        explicit GatewayManager(QObject* parent = nullptr);\n        ~GatewayManager();\n\n        void registerSearchProvider(GatewaySearchProvider* provider);\n        void deregisterSearchProvider(GatewaySearchProvider* provider);\n        bool isSearchProviderRegistered(GatewaySearchProvider* provider);\n        QList<GatewaySearchProvider*> searchProviders();\n\n        int gatewayWidth();\n\n    signals:\n        void searchProviderRegistered(GatewaySearchProvider* provider);\n        void searchProviderDeregistered(GatewaySearchProvider* provider);\n        void gatewayWidthChanged(int width);\n\n    protected:\n        friend Gateway;\n        void setGatewayWidth(int width);\n\n    private:\n        GatewayManagerPrivate* d;\n\n};\n\n#endif // GATEWAYMANAGER_H\n"
  },
  {
    "path": "libthedesk/gatewaysearchprovider.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2021 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"gatewaysearchprovider.h\"\n\n#include <statemanager.h>\n#include <gatewaymanager.h>\n\nGatewaySearchProvider::GatewaySearchProvider(QObject* parent) : QObject(parent) {\n\n}\n\nGatewaySearchProvider::~GatewaySearchProvider() {\n    if (StateManager::gatewayManager()->isSearchProviderRegistered(this)) StateManager::gatewayManager()->deregisterSearchProvider(this);\n}\n"
  },
  {
    "path": "libthedesk/gatewaysearchprovider.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2021 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef GATEWAYSEARCHPROVIDER_H\n#define GATEWAYSEARCHPROVIDER_H\n\n#include <QObject>\n#include <QStyleOptionViewItem>\n#include <tpromise.h>\n\nclass GatewaySearchProvider : public QObject {\n        Q_OBJECT\n    public:\n        explicit GatewaySearchProvider(QObject* parent = nullptr);\n        ~GatewaySearchProvider();\n\n        virtual tPromise<QList<QVariantMap>>* searchResults(QString query) = 0;\n        virtual void launch(QVariantMap data) = 0;\n\n        virtual void paint(QPainter* painter, const QStyleOptionViewItem& option, const QVariantMap data) const = 0;\n        virtual QSize sizeHint(const QStyleOptionViewItem& option, const QVariantMap data) const = 0;\n\n    signals:\n\n};\n\n#endif // GATEWAYSEARCHPROVIDER_H\n"
  },
  {
    "path": "libthedesk/hudmanager.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"hudmanager.h\"\n\nHudManager::HudManager(QObject* parent) : QObject(parent) {\n\n}\n\nvoid HudManager::showHud(QVariantMap parameters) {\n    emit requestHud(parameters);\n}\n\nvoid HudManager::hideHud() {\n    emit requestHideHud();\n}\n"
  },
  {
    "path": "libthedesk/hudmanager.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef HUDMANAGER_H\n#define HUDMANAGER_H\n\n#include <QObject>\n#include <QVariantMap>\n\nclass HudManager : public QObject {\n        Q_OBJECT\n    public:\n        explicit HudManager(QObject* parent = nullptr);\n\n        void showHud(QVariantMap parameters);\n        void hideHud();\n\n    signals:\n        void requestHud(QVariantMap parameters);\n        void requestHideHud();\n};\n\n#endif // HUDMANAGER_H\n"
  },
  {
    "path": "libthedesk/icontextchunk.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"icontextchunk.h\"\n#include \"ui_icontextchunk.h\"\n\n#include \"barmanager.h\"\n#include \"statemanager.h\"\n#include <QIcon>\n#include <libcontemporary_global.h>\n\nstruct IconTextChunkPrivate {\n        QString name;\n        QWidget* quickWidget = nullptr;\n};\n\nIconTextChunk::IconTextChunk(QString name) :\n    Chunk(),\n    ui(new Ui::IconTextChunk) {\n    ui->setupUi(this);\n    d = new IconTextChunkPrivate();\n    d->name = name;\n\n    connect(StateManager::barManager(), &BarManager::barHeightTransitioning, this, [=](qreal percentage) {\n        int padding = 3 + 6 * percentage;\n        this->layout()->setContentsMargins(6, padding, 6, padding);\n\n        if (qFuzzyCompare(percentage, 1)) {\n            ui->textLabel->setFixedWidth(QWIDGETSIZE_MAX);\n        } else {\n            ui->textLabel->setFixedWidth(ui->textLabel->sizeHint().width() * percentage);\n        }\n    });\n\n    connect(this, &IconTextChunk::clicked, this, [=] {\n        showQuickWidget();\n    });\n}\n\nIconTextChunk::~IconTextChunk() {\n    delete d;\n    delete ui;\n}\n\nvoid IconTextChunk::setIcon(QIcon icon) {\n    ui->iconLabel->setPixmap(icon.pixmap(SC_DPI_T(QSize(16, 16), QSize)));\n}\n\nvoid IconTextChunk::setText(QString text) {\n    ui->textLabel->setText(text);\n}\n\nvoid IconTextChunk::setQuickWidget(QWidget* widget) {\n    d->quickWidget = widget;\n}\n\nvoid IconTextChunk::deleteLater() {\n    Chunk::deleteLater();\n}\n\nQString IconTextChunk::name() {\n    return d->name;\n}\n\nint IconTextChunk::expandedHeight() {\n    return qMax(SC_DPI(16), this->fontMetrics().height()) + 18;\n}\n\nint IconTextChunk::statusBarHeight() {\n    return qMax(SC_DPI(16), this->fontMetrics().height()) + 6;\n}\n\nQWidget* IconTextChunk::quickWidget() {\n    return d->quickWidget;\n}\n"
  },
  {
    "path": "libthedesk/icontextchunk.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef ICONTEXTCHUNK_H\n#define ICONTEXTCHUNK_H\n\n#include <QWidget>\n#include \"chunk.h\"\n\nnamespace Ui {\n    class IconTextChunk;\n}\n\nstruct IconTextChunkPrivate;\nclass IconTextChunk : public Chunk {\n        Q_OBJECT\n\n    public:\n        explicit IconTextChunk(QString name);\n        ~IconTextChunk();\n\n        void setIcon(QIcon icon);\n        void setText(QString text);\n        void setQuickWidget(QWidget* widget);\n\n        void deleteLater();\n\n    private:\n        Ui::IconTextChunk* ui;\n        IconTextChunkPrivate* d;\n\n        // Chunk interface\n    public:\n        QString name();\n        int expandedHeight();\n        int statusBarHeight();\n\n    protected:\n        virtual QWidget* quickWidget();\n};\n\n#endif // ICONTEXTCHUNK_H\n\n"
  },
  {
    "path": "libthedesk/icontextchunk.ui",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ui version=\"4.0\">\n <class>IconTextChunk</class>\n <widget class=\"QWidget\" name=\"IconTextChunk\">\n  <property name=\"geometry\">\n   <rect>\n    <x>0</x>\n    <y>0</y>\n    <width>124</width>\n    <height>35</height>\n   </rect>\n  </property>\n  <property name=\"windowTitle\">\n   <string notr=\"true\">Form</string>\n  </property>\n  <layout class=\"QHBoxLayout\" name=\"horizontalLayout\">\n   <property name=\"leftMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"rightMargin\">\n    <number>0</number>\n   </property>\n   <item>\n    <widget class=\"QLabel\" name=\"iconLabel\">\n     <property name=\"text\">\n      <string notr=\"true\">TextLabel</string>\n     </property>\n    </widget>\n   </item>\n   <item>\n    <widget class=\"QLabel\" name=\"textLabel\">\n     <property name=\"text\">\n      <string notr=\"true\">TextLabel</string>\n     </property>\n    </widget>\n   </item>\n  </layout>\n </widget>\n <resources/>\n <connections/>\n</ui>\n"
  },
  {
    "path": "libthedesk/keygrab.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"keygrab.h\"\n\n#include <QKeySequence>\n#include <Wm/desktopwm.h>\n\n#include <QDBusConnection>\n#include <QDBusConnectionInterface>\n\nstruct KeyGrabPrivate {\n    QKeySequence seq;\n    quint64 grabId;\n    bool isPaused = true;\n};\n\nKeyGrab::KeyGrab(QKeySequence seq, QObject* parent) : QObject(parent) {\n    d = new KeyGrabPrivate();\n    d->seq = seq;\n\n    init();\n}\n\nKeyGrab::KeyGrab(QKeySequence defaultSeq, QString settingName, QObject* parent) : QObject(parent) {\n    d = new KeyGrabPrivate();\n    d->seq = defaultSeq; //TODO\n\n    init();\n}\n\nKeyGrab::~KeyGrab() {\n    if (!d->isPaused) this->pause();\n    delete d;\n}\n\nvoid KeyGrab::pause() {\n    DesktopWm::ungrabKey(d->grabId);\n    d->isPaused = true;\n}\n\nvoid KeyGrab::resume() {\n    //Before we grab the key, if KGlobalAccel is running, ask it to quit\n    if (QDBusConnection::sessionBus().interface()->isServiceRegistered(\"org.kde.kglobalaccel\").value()) {\n        QDBusMessage message = QDBusMessage::createMethodCall(\"org.kde.kglobalaccel\", \"/MainApplication\", \"org.qtproject.Qt.QCoreApplication\", \"quit\");\n        QDBusConnection::sessionBus().call(message);\n    }\n\n    Qt::Key key = static_cast<Qt::Key>(static_cast<uint>(d->seq[0]) & ~(Qt::ShiftModifier | Qt::ControlModifier | Qt::AltModifier | Qt::MetaModifier));\n    Qt::KeyboardModifiers mod = static_cast<Qt::KeyboardModifiers>(static_cast<uint>(d->seq[0]) & (Qt::ShiftModifier | Qt::ControlModifier | Qt::AltModifier | Qt::MetaModifier));\n    d->grabId = DesktopWm::grabKey(key, mod);\n    d->isPaused = false;\n}\n\nvoid KeyGrab::init() {\n    connect(DesktopWm::instance(), &DesktopWm::grabbedKeyPressed, this, [ = ](quint64 grabId) {\n        if (d->grabId == grabId) emit activated();\n    });\n    resume();\n}\n"
  },
  {
    "path": "libthedesk/keygrab.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef KEYGRAB_H\n#define KEYGRAB_H\n\n#include <QObject>\n\nstruct KeyGrabPrivate;\nclass KeyGrab : public QObject {\n        Q_OBJECT\n    public:\n        explicit KeyGrab(QKeySequence seq, QObject* parent = nullptr);\n        explicit KeyGrab(QKeySequence defaultSeq, QString settingName, QObject* parent = nullptr);\n        ~KeyGrab();\n\n        void pause();\n        void resume();\n\n    signals:\n        void activated();\n\n    private:\n        KeyGrabPrivate* d;\n\n        void init();\n};\n\n#endif // KEYGRAB_H\n"
  },
  {
    "path": "libthedesk/libthedesk.pro",
    "content": "QT += widgets thelib tdesktopenvironment dbus multimedia multimediawidgets quickwidgets svg\n\nTEMPLATE = lib\nDEFINES += LIBTHEDESK_LIBRARY\nTARGET = thedesk\n\nCONFIG += c++11\n\n# Include the-libs build tools\ninclude(/usr/share/the-libs/pri/gentranslations.pri)\ninclude(/usr/share/the-libs/pri/varset.pri)\n\n# The following define makes your compiler emit warnings if you use\n# any Qt feature that has been marked deprecated (the exact warnings\n# depend on your compiler). Please consult the documentation of the\n# deprecated API in order to know how to port your code away from it.\nDEFINES += QT_DEPRECATED_WARNINGS\n\n# You can also make your code fail to compile if it uses deprecated APIs.\n# In order to do so, uncomment the following line.\n# You can also select to disable deprecated APIs only up to a certain version of Qt.\nDEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0\n\nSOURCES += \\\n    actionquickwidget.cpp \\\n    barmanager.cpp \\\n    chunk.cpp \\\n    common.cpp \\\n    gatewaymanager.cpp \\\n    gatewaysearchprovider.cpp \\\n    hudmanager.cpp \\\n    icontextchunk.cpp \\\n    keygrab.cpp \\\n    localemanager.cpp \\\n    onboarding/onboarding.cpp \\\n    onboarding/onboardingbar.cpp \\\n    onboarding/onboardingcontroller.cpp \\\n    onboarding/onboardingfinal.cpp \\\n    onboarding/onboardingstepper.cpp \\\n    onboarding/onboardingvideo.cpp \\\n    onboarding/onboardingwelcome.cpp \\\n    onboardingmanager.cpp \\\n    onboardingpage.cpp \\\n    plugins/pluginmanager.cpp \\\n    powermanager.cpp \\\n    private/keyboardlayoutmodel.cpp \\\n    private/keyboardlayoutselector.cpp \\\n    private/localeselector.cpp \\\n    private/quickwidgetcontainer.cpp \\\n    quickswitch.cpp \\\n    quietmodemanager.cpp \\\n    server/sessionserver.cpp \\\n    statemanager.cpp \\\n    statuscentermanager.cpp \\\n    statuscenterpane.cpp \\\n    transparentdialog.cpp\n\nHEADERS += \\\n    actionquickwidget.h \\\n    barmanager.h \\\n    chunk.h \\\n    common.h \\\n    gatewaymanager.h \\\n    gatewaysearchprovider.h \\\n    hudmanager.h \\\n    icontextchunk.h \\\n    keygrab.h \\\n    libthedesk_global.h \\\n    localemanager.h \\\n    onboarding/onboarding.h \\\n    onboarding/onboardingbar.h \\\n    onboarding/onboardingcontroller.h \\\n    onboarding/onboardingfinal.h \\\n    onboarding/onboardingstepper.h \\\n    onboarding/onboardingvideo.h \\\n    onboarding/onboardingwelcome.h \\\n    onboardingmanager.h \\\n    onboardingpage.h \\\n    plugins/pluginmanager.h \\\n    plugins/plugininterface.h \\\n    powermanager.h \\\n    private/keyboardlayoutmodel.h \\\n    private/keyboardlayoutselector.h \\\n    private/localeselector.h \\\n    private/onboardingmanager_p.h \\\n    private/quickwidgetcontainer.h \\\n    quickswitch.h \\\n    quietmodemanager.h \\\n    server/sessionserver.h \\\n    statemanager.h \\\n    statuscentermanager.h \\\n    statuscenterpane.h \\\n    transparentdialog.h\n\n# Default rules for deployment.\nunix {\n    target.path = $$THELIBS_INSTALL_LIB\n\n    headers.files = *.h\n    headers.path = $$[QT_INSTALL_HEADERS]/libthedesk/\n\n    pluginheaders.files = plugins/plugininterface.h\n    pluginheaders.path = $$[QT_INSTALL_HEADERS]/thedesk/\n\n    pluginmanagerheaders.files = plugins/pluginmanager.h\n    pluginmanagerheaders.path = $$[QT_INSTALL_HEADERS]/libthedesk/plugins\n\n    onboardingheaders.files = onboarding/onboardingcontroller.h\n    onboardingheaders.path = $$[QT_INSTALL_HEADERS]/libthedesk/onboarding\n\n    translations.files = translations/*.qm\n    translations.path = /usr/share/thedesk/libthedesk/translations\n\n    INSTALLS += target translations headers pluginheaders onboardingheaders pluginmanagerheaders\n}\n\nDEFINES += SYSTEM_LIBRARY_DIRECTORY=\\\\\\\"$$THELIBS_INSTALL_LIB\\\\\\\"\n\nFORMS += \\\n    actionquickwidget.ui \\\n    icontextchunk.ui \\\n    onboarding/onboarding.ui \\\n    onboarding/onboardingbar.ui \\\n    onboarding/onboardingfinal.ui \\\n    onboarding/onboardingvideo.ui \\\n    onboarding/onboardingwelcome.ui \\\n    private/keyboardlayoutselector.ui \\\n    private/localeselector.ui \\\n    private/quickwidgetcontainer.ui \\\n    transparentdialog.ui\n\nDISTFILES += \\\n    onboarding/OnboardingVideoForm.qml\n\nRESOURCES += \\\n    libthedesk_resources.qrc\n"
  },
  {
    "path": "libthedesk/libthedeskConfig.cmake.in",
    "content": "set(libthebranch_VERSION 1.0.0)\n\n@PACKAGE_INIT@\n\ninclude(\"${CMAKE_CURRENT_LIST_DIR}/libthedeskTargets.cmake\")\n\nfind_package(Qt6 REQUIRED COMPONENTS Widgets Multimedia DBus Svg QuickWidgets MultimediaWidgets)\n\ncheck_required_components(libthedesk)\n"
  },
  {
    "path": "libthedesk/libthedesk_global.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef LIBTHEDESK_GLOBAL_H\n#define LIBTHEDESK_GLOBAL_H\n\n#include <QtCore/qglobal.h>\n\n#if defined(LIBTHEDESK_LIBRARY)\n#  define LIBTHEDESK_EXPORT Q_DECL_EXPORT\n#else\n#  define LIBTHEDESK_EXPORT Q_DECL_IMPORT\n#endif\n\n#endif // LIBTHEDESK_GLOBAL_H\n"
  },
  {
    "path": "libthedesk/libthedesk_resources.qrc",
    "content": "<RCC>\n    <qresource prefix=\"/libthedesk\">\n        <file>onboarding/OnboardingVideoForm.qml</file>\n        <file>images/splash-background.svg</file>\n    </qresource>\n</RCC>\n"
  },
  {
    "path": "libthedesk/localemanager.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"localemanager.h\"\n\n#include \"private/keyboardlayoutselector.h\"\n#include \"private/localeselector.h\"\n#include <QDir>\n#include <QMap>\n#include <QTranslator>\n#include <tapplication.h>\n#include <tpopover.h>\n#include <tpromise.h>\n#include <tsettings.h>\n\nstruct LocaleManagerPrivate {\n        QMap<int, QTranslator*> translators;\n        QMap<int, QStringList> searchPaths;\n\n        tSettings settings;\n        QStringList preferredLocales;\n        QString formats;\n\n        int current = 0;\n};\n\nLocaleManager::LocaleManager(QObject* parent) :\n    QObject(parent) {\n    d = new LocaleManagerPrivate();\n\n    d->preferredLocales = d->settings.delimitedList(\"Locale/locales\");\n    if (d->preferredLocales.count() == 1 && d->preferredLocales.first() == \"\") d->preferredLocales = QStringList({\"C\"});\n    d->formats = d->settings.value(\"Locale/formats\").toString();\n\n    this->updateLocales();\n    this->addTranslationSet({QDir::cleanPath(qApp->applicationDirPath() + \"/../libthedesk/translations\"),\n        \"/usr/share/thedesk/libthedesk/translations\"});\n\n    connect(&d->settings, &tSettings::settingChanged, this, [=](QString key, QVariant value) {\n        if (key == \"Locale/locales\") {\n            d->preferredLocales = d->settings.delimitedList(\"Locale/locales\");\n            if (d->preferredLocales.count() == 1 && d->preferredLocales.first() == \"\") d->preferredLocales = QStringList({\"C\"});\n            this->updateLocales();\n            emit localesChanged();\n        } else if (key == \"Locale/formats\") {\n            d->formats = value.toString();\n            this->updateLocales();\n            emit formatCountryChanged();\n        }\n    });\n}\n\nLocaleManager::~LocaleManager() {\n    delete d;\n}\n\nint LocaleManager::addTranslationSet(QStringList searchPaths) {\n    int id = d->current;\n    d->current++;\n\n    QTranslator* translator = new QTranslator(this);\n    qApp->installTranslator(translator);\n\n    d->translators.insert(id, translator);\n    d->searchPaths.insert(id, searchPaths);\n\n    updateTranslator(id);\n\n    return id;\n}\n\nvoid LocaleManager::removeTranslationSet(int translationSet) {\n    if (!d->translators.contains(translationSet)) return;\n\n    QTranslator* translator = d->translators.value(translationSet);\n    qApp->removeTranslator(translator);\n    translator->deleteLater();\n\n    d->translators.remove(translationSet);\n    d->searchPaths.remove(translationSet);\n}\n\nQLocale LocaleManager::showLocaleSelector(QWidget* parent, bool* ok) {\n    if (ok) *ok = true;\n\n    tPromiseResults<QLocale> results = TPROMISE_CREATE_SAME_THREAD(QLocale, {\n        bool* stillValid = new bool(true);\n\n        LocaleSelector* selector = new LocaleSelector();\n        tPopover* popover = new tPopover(selector);\n        popover->setPopoverWidth(SC_DPI(500));\n        connect(selector, &LocaleSelector::rejected, this, [=] {\n            rej(\"\");\n            *stillValid = false;\n            popover->dismiss();\n        });\n        connect(selector, &LocaleSelector::accepted, this, [=](QLocale locale) {\n            res(locale);\n            *stillValid = false;\n            popover->dismiss();\n        });\n        connect(popover, &tPopover::dismissed, this, [=] {\n            if (*stillValid) rej(\"\");\n            popover->deleteLater();\n            selector->deleteLater();\n            delete stillValid;\n        });\n        popover->show(parent);\n    })->await();\n\n    if (!results.error.isEmpty() && ok) *ok = false;\n    return results.result;\n}\n\nvoid LocaleManager::addLocale(QLocale locale) {\n    if (!d->preferredLocales.contains(locale.bcp47Name())) {\n        d->preferredLocales.append(locale.bcp47Name());\n        if (d->preferredLocales.contains(\"C\")) d->preferredLocales.removeAll(\"C\");\n        d->settings.setDelimitedList(\"Locale/locales\", d->preferredLocales);\n    }\n}\n\nvoid LocaleManager::prependLocale(QLocale locale) {\n    if (!d->preferredLocales.contains(locale.bcp47Name())) {\n        d->preferredLocales.prepend(locale.bcp47Name());\n        if (d->preferredLocales.contains(\"C\")) d->preferredLocales.removeAll(\"C\");\n        d->settings.setDelimitedList(\"Locale/locales\", d->preferredLocales);\n    }\n}\n\nvoid LocaleManager::removeLocale(QLocale locale) {\n    d->preferredLocales.removeAll(locale.bcp47Name());\n    d->settings.setDelimitedList(\"Locale/locales\", d->preferredLocales);\n}\n\nvoid LocaleManager::moveLocaleUp(QLocale locale) {\n    int index = d->preferredLocales.indexOf(locale.bcp47Name());\n    if (index != 0) {\n        d->preferredLocales.removeAt(index);\n        d->preferredLocales.insert(index - 1, locale.bcp47Name());\n        d->settings.setDelimitedList(\"Locale/locales\", d->preferredLocales);\n    }\n}\n\nvoid LocaleManager::moveLocaleDown(QLocale locale) {\n    int index = d->preferredLocales.indexOf(locale.bcp47Name());\n    if (index != d->preferredLocales.count() - 1) {\n        d->preferredLocales.removeAt(index);\n        d->preferredLocales.insert(index + 1, locale.bcp47Name());\n        d->settings.setDelimitedList(\"Locale/locales\", d->preferredLocales);\n    }\n}\n\nQList<QLocale> LocaleManager::locales() {\n    QList<QLocale> locales;\n    for (QString locale : d->preferredLocales) {\n        locales.append(QLocale(locale));\n    }\n    return locales;\n}\n\nQLocale::Country LocaleManager::formatCountry() {\n    return QLocale(d->formats).country();\n}\n\nvoid LocaleManager::setFormatCountry(QLocale::Country country) {\n    // Choose the first locale\n    QList<QLocale> locales = QLocale::matchingLocales(QLocale::AnyLanguage, QLocale::AnyScript, country);\n    if (locales.isEmpty()) locales.append(QLocale());\n    d->settings.setValue(\"Locale/formats\", locales.first().name());\n}\n\nQString LocaleManager::showKeyboardLayoutSelector(QWidget* parent, bool* ok) {\n    if (ok) *ok = true;\n\n    tPromiseResults<QString> results = TPROMISE_CREATE_SAME_THREAD(QString, {\n        bool* stillValid = new bool(true);\n\n        KeyboardLayoutSelector* selector = new KeyboardLayoutSelector();\n        tPopover* popover = new tPopover(selector);\n        popover->setPopoverWidth(SC_DPI(500));\n        connect(selector, &KeyboardLayoutSelector::rejected, this, [=] {\n            rej(\"\");\n            *stillValid = false;\n            popover->dismiss();\n        });\n        connect(selector, &KeyboardLayoutSelector::accepted, this, [=](QString locale) {\n            res(locale);\n            *stillValid = false;\n            popover->dismiss();\n        });\n        connect(popover, &tPopover::dismissed, this, [=] {\n            if (*stillValid) rej(\"\");\n            popover->deleteLater();\n            selector->deleteLater();\n            delete stillValid;\n        });\n        popover->show(parent);\n    })->await();\n\n    if (!results.error.isEmpty() && ok) *ok = false;\n    return results.result;\n}\n\nQLocale LocaleManager::formatLocale() {\n    QLocale locale(d->preferredLocales.first());\n    QLocale formatsTryLocale(d->formats);\n    QLocale formatsLocale(locale.language(), formatsTryLocale.country());\n    if (formatsLocale.country() != formatsTryLocale.country()) formatsLocale = formatsTryLocale;\n\n    return formatsLocale;\n}\n\nvoid LocaleManager::updateTranslator(int id) {\n    QTranslator* translator = d->translators.value(id);\n    QStringList searchPaths = d->searchPaths.value(id);\n    for (QString path : searchPaths) {\n        if (translator->load(QLocale(), \"\", \"\", path, \".qm\")) return; // Success!\n    }\n}\n\nvoid LocaleManager::updateLocales() {\n    if (d->preferredLocales.isEmpty()) d->preferredLocales.append(\"C\");\n    QLocale locale(d->preferredLocales.first());\n    QLocale::setDefault(locale);\n\n    QLocale formatsLocale = this->formatLocale();\n\n    QByteArray mainLocale = glibName(locale).toUtf8();\n    QByteArray formatsLocaleStr = glibName(formatsLocale).toUtf8();\n    qputenv(\"LANG\", mainLocale);\n    qputenv(\"LC_CTYPE\", mainLocale);\n    qputenv(\"LC_COLLATE\", mainLocale);\n    qputenv(\"LC_TIME\", formatsLocaleStr);\n    qputenv(\"LC_NUMERIC\", formatsLocaleStr);\n    qputenv(\"LC_MONETARY\", formatsLocaleStr);\n    qputenv(\"LC_MESSAGES\", mainLocale);\n    qputenv(\"LC_PAPER\", formatsLocaleStr);\n    qputenv(\"LC_MEASUREMENT\", formatsLocaleStr);\n    qputenv(\"LC_NAME\", formatsLocaleStr);\n    qputenv(\"LC_ADDRESS\", formatsLocaleStr);\n    qputenv(\"LC_TELEPHONE\", formatsLocaleStr);\n    //    qputenv(\"LC_ALL\", glibName(locale).toUtf8());\n\n    QStringList languages;\n    for (QString locale : d->preferredLocales) {\n        languages.append(glibName(QLocale(locale)));\n    }\n    qputenv(\"LANGUAGE\", languages.join(\":\").toUtf8());\n\n    // Update all the translators\n    for (int id : d->translators.keys()) {\n        updateTranslator(id);\n    }\n\n    static_cast<tApplication*>(tApplication::instance())->installTranslators();\n}\n\nQString LocaleManager::glibName(QLocale locale, QString encoding) {\n    return locale.name() + \".\" + encoding;\n}\n"
  },
  {
    "path": "libthedesk/localemanager.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef LOCALEMANAGER_H\n#define LOCALEMANAGER_H\n\n#include <QLocale>\n\nstruct LocaleManagerPrivate;\nclass LocaleManager : public QObject {\n        Q_OBJECT\n    public:\n        explicit LocaleManager(QObject* parent = nullptr);\n        ~LocaleManager();\n\n        int addTranslationSet(QStringList searchPaths);\n        void removeTranslationSet(int translationSet);\n\n        QLocale showLocaleSelector(QWidget* parent, bool* ok = nullptr);\n        void addLocale(QLocale locale);\n        void prependLocale(QLocale locale);\n        void removeLocale(QLocale locale);\n        void moveLocaleUp(QLocale locale);\n        void moveLocaleDown(QLocale locale);\n        QList<QLocale> locales();\n\n        QLocale::Country formatCountry();\n        void setFormatCountry(QLocale::Country country);\n\n        QString showKeyboardLayoutSelector(QWidget* parent, bool* ok = nullptr);\n\n        QLocale formatLocale();\n\n    signals:\n        void formatCountryChanged();\n        void localesChanged();\n\n    private:\n        LocaleManagerPrivate* d;\n\n        void updateTranslator(int id);\n        void updateLocales();\n        QString glibName(QLocale locale, QString encoding = \"UTF-8\");\n};\n\n#endif // LOCALEMANAGER_H\n"
  },
  {
    "path": "libthedesk/onboarding/OnboardingVideoForm.qml",
    "content": "import QtQuick 2.0\nimport QtMultimedia 6.4\n\nItem {\n    VideoOutput {\n        id: video\n        x: 0\n        y: 0\n        width: parent.width\n        height: parent.height\n//        flushMode: VideoOutput.LastFrame\n        fillMode: VideoOutput.PreserveAspectCrop\n//        source: sourceVideo\n    }\n}\n"
  },
  {
    "path": "libthedesk/onboarding/onboarding.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"onboarding.h\"\n#include \"ui_onboarding.h\"\n\n#include \"onboardingbar.h\"\n#include \"onboardingstepper.h\"\n#include <QAudioDecoder>\n#include <QAudioOutput>\n#include <QKeyEvent>\n#include <QPainter>\n#include <common.h>\n#include <onboardingmanager.h>\n#include <onboardingpage.h>\n#include <powermanager.h>\n#include <statemanager.h>\n#include <tscrim.h>\n#include <tsettings.h>\n#include <tvariantanimation.h>\n\n#include <QAudioSink>\n#include <QMediaDevices>\n#include <QMediaPlayer>\n#include <QShortcut>\n\n#include <private/onboardingmanager_p.h>\n\nstruct OnboardingPrivate {\n        QStringList preferredOnboardingOrder;\n        QList<QPair<QString, OnboardingPage*>> steps;\n        QList<QPair<OnboardingStepper*, OnboardingPage*>> steppers;\n\n        QByteArray singleAudioData;\n        QByteArray loopAudioData;\n        QAudioSink* audioOutput = nullptr;\n        QIODevice* audioOutputDevice;\n        int audioPointer = 0;\n        bool audioEnabled = true;\n\n        OnboardingBar* bar;\n        bool barVisible = false;\n\n        tVariantAnimation* contentAnim;\n        tVariantAnimation* barAnim;\n        tVariantAnimation* fadeAnim;\n\n        bool onboardingStarted = false;\n        tSettings settings;\n};\n\nOnboarding::Onboarding(QWidget* parent) :\n    QDialog(parent),\n    ui(new Ui::Onboarding) {\n    ui->setupUi(this);\n\n    Q_INIT_RESOURCE(libthedesk_resources);\n\n    this->setWindowFlag(Qt::WindowStaysOnTopHint);\n    this->setWindowFlag(Qt::FramelessWindowHint);\n\n    this->setCursor(QCursor(Qt::BlankCursor));\n\n    d = new OnboardingPrivate();\n    d->preferredOnboardingOrder = d->settings.delimitedList(\"Onboarding/order\");\n\n    ui->stepperFrame->setFixedSize(SC_DPI_T(QSize(200, 600), QSize));\n    ui->stackedWidget->setFixedSize(SC_DPI_T(QSize(800, 600), QSize));\n    ui->stackedWidget->setCurrentAnimation(tStackedWidget::SlideHorizontal);\n    ui->contentWrapper->setFixedHeight(0);\n    ui->contentWrapper->setVisible(false);\n\n    OnboardingManager* manager = StateManager::onboardingManager();\n    manager->d->onboardingRunning = true;\n    connect(manager, &OnboardingManager::nextStep, this, [=] {\n        if (ui->stackedWidget->count() == ui->stackedWidget->currentIndex() + 1) {\n            completeOnboarding();\n        } else {\n            ui->stackedWidget->setCurrentIndex(ui->stackedWidget->currentIndex() + 1);\n        }\n    });\n    connect(manager, &OnboardingManager::previousStep, this, [=] {\n        ui->stackedWidget->setCurrentIndex(ui->stackedWidget->currentIndex() - 1);\n    });\n\n    // Populate the stacked widget with all the onboarding items\n    QStringList currentItems;\n    for (OnboardingPage* step : qAsConst(manager->d->steps)) {\n        OnboardingStepper* stepper = new OnboardingStepper(this);\n        stepper->setText(step->displayName());\n        connect(ui->stackedWidget, &tStackedWidget::switchingFrame, this, [=](int step) {\n            stepper->setCurrentStep(step + 1);\n        });\n\n        int index = Common::getInsertionIndex(d->preferredOnboardingOrder, currentItems, step->name());\n\n        // Make sure this pane is actually configured to be in the onboarding\n        if (index != -1) {\n            // Add this pane at the correct index\n            ui->stackedWidget->insertWidget(index, step);\n            currentItems.insert(index, step->name());\n            d->steps.insert(index, {step->name(), step});\n\n            ui->stepperLayout->insertWidget(index, stepper);\n            d->steppers.insert(index, {stepper, step});\n        } else {\n            // Hide the stepper so it doesn't show up in the background\n            stepper->setVisible(false);\n        }\n    }\n\n    for (int i = 0; i < d->steppers.count(); i++) {\n        d->steppers.at(i).first->setStep(i + 1);\n        if (i == d->steppers.count() - 1) d->steppers.at(i).first->setIsFinal(true);\n    }\n\n    d->bar = new OnboardingBar(this);\n    d->bar->setParent(this);\n    connect(d->bar, &OnboardingBar::muteToggled, this, [=](bool mute) {\n        if (d->audioOutput) d->audioOutput->setVolume(mute ? 0 : 100);\n    });\n    connect(d->bar, &OnboardingBar::closeClicked, this, [=] {\n        StateManager::instance()->powerManager()->showPowerOffConfirmation();\n    });\n    d->bar->setVisible(false);\n    d->bar->installEventFilter(this);\n\n    d->contentAnim = new tVariantAnimation(this);\n    d->contentAnim->setEasingCurve(QEasingCurve::OutCubic);\n    d->contentAnim->setDuration(500);\n    connect(d->contentAnim, &tVariantAnimation::valueChanged, this, [=](QVariant value) {\n        ui->contentWrapper->setFixedHeight(value.toInt());\n    });\n\n    d->barAnim = new tVariantAnimation(this);\n    d->barAnim->setEasingCurve(QEasingCurve::OutCubic);\n    d->barAnim->setDuration(500);\n    connect(d->barAnim, &tVariantAnimation::valueChanged, this, [=](QVariant value) {\n        d->bar->move(0, value.toInt());\n    });\n\n    d->fadeAnim = new tVariantAnimation(this);\n    d->fadeAnim->setStartValue(0);\n    d->fadeAnim->setEndValue(255);\n    d->fadeAnim->setEasingCurve(QEasingCurve::OutCubic);\n    d->fadeAnim->setDuration(500);\n    connect(d->fadeAnim, &tVariantAnimation::valueChanged, this, [=] {\n        this->update();\n    });\n\n    if (d->settings.value(\"Onboarding/onboardingAudio\").toBool()) {\n        auto format = QMediaDevices::defaultAudioOutput().preferredFormat();\n\n        QEventLoop* loop = new QEventLoop();\n        for (int i = 0; i < 2; i++) {\n            QByteArray* array = (i == 0 ? &d->singleAudioData : &d->loopAudioData);\n            QString setting = (i == 0 ? \"Onboarding/audio.start\" : \"Onboarding/audio.loop\");\n            auto file = QUrl::fromLocalFile(d->settings.value(setting).toString());\n\n            QEventLoopLocker* locker = new QEventLoopLocker(loop);\n            QAudioDecoder* audioDecoder = new QAudioDecoder();\n            audioDecoder->setSource(file);\n            audioDecoder->setAudioFormat(format);\n            connect(audioDecoder, &QAudioDecoder::bufferReady, this, [=] {\n                QAudioBuffer buf = audioDecoder->read();\n                array->append(buf.constData<char>(), buf.byteCount());\n            });\n            connect(audioDecoder, &QAudioDecoder::finished, this, [=] {\n                delete locker;\n                audioDecoder->deleteLater();\n            });\n            connect(audioDecoder, QOverload<QAudioDecoder::Error>::of(&QAudioDecoder::error), this, [=](QAudioDecoder::Error error) {\n                delete locker;\n                audioDecoder->deleteLater();\n            });\n            audioDecoder->start();\n        }\n        loop->exec();\n        loop->deleteLater();\n\n        d->audioOutput = new QAudioSink(format);\n        d->audioOutput->setBufferSize(176400);\n        d->audioOutputDevice = d->audioOutput->start();\n\n        QTimer* audioTimer = new QTimer(d->audioOutput);\n        audioTimer->setInterval(100);\n        connect(audioTimer, &QTimer::timeout, this, &Onboarding::writeAudio);\n        audioTimer->start();\n\n        writeAudio();\n    }\n\n    if (d->settings.value(\"Onboarding/onboardingVideo\").toBool()) {\n        this->setAttribute(Qt::WA_TranslucentBackground);\n    } else {\n        this->startOnboarding();\n    }\n\n    auto* terminalShortcut = new QShortcut(QKeySequence(Qt::ControlModifier | Qt::AltModifier | Qt::Key_T), this);\n    connect(terminalShortcut, &QShortcut::activated, this, [this] {\n        this->hide();\n\n        auto env = QProcessEnvironment::systemEnvironment();\n        env.remove(\"LD_LIBRARY_PATH\");\n\n        auto* proc = new QProcess(this);\n        proc->setProgram(\"theterminal\");\n        proc->setArguments({\"-e\", \"/bin/bash\"});\n        proc->setWorkingDirectory(QDir::rootPath());\n        proc->setProcessEnvironment(env);\n        proc->start();\n        connect(proc, &QProcess::finished, this, [proc, this] {\n            proc->deleteLater();\n            this->show();\n        });\n    });\n}\n\nOnboarding::~Onboarding() {\n    if (d->audioOutput) {\n        d->audioOutput->stop();\n        d->audioOutput->deleteLater();\n    }\n    delete d;\n    delete ui;\n}\n\nvoid Onboarding::on_stackedWidget_currentChanged(int arg1) {\n    if (d->steps.count() > arg1) d->steps.at(arg1).second->pageActivated();\n}\n\nvoid Onboarding::on_bar_closeClicked() {\n    StateManager::instance()->powerManager()->showPowerOffConfirmation();\n}\n\nvoid Onboarding::resizeEvent(QResizeEvent* event) {\n    if (this->geometry().width() <= SC_DPI(800)) {\n        ui->contentWrapper->setFrameShape(QFrame::NoFrame);\n        ui->stepperFrame->setVisible(false);\n        ui->line->setVisible(false);\n    } else if (this->geometry().width() < SC_DPI(1000)) {\n        ui->contentWrapper->setFrameShape(QFrame::StyledPanel);\n        ui->stepperFrame->setVisible(false);\n        ui->line->setVisible(false);\n    } else {\n        ui->contentWrapper->setFrameShape(QFrame::StyledPanel);\n        ui->stepperFrame->setVisible(true);\n        ui->line->setVisible(true);\n    }\n    updateBarVisiblity();\n}\n\nvoid Onboarding::paintEvent(QPaintEvent* event) {\n    QPainter painter(this);\n\n    QLinearGradient grad;\n    grad.setStart(0, 0);\n    grad.setFinalStop(0, d->bar->height() * 2);\n    grad.setColorAt(0, QColor(0, 0, 0, 127));\n    grad.setColorAt(1, QColor(0, 0, 0, 0));\n\n    painter.setPen(Qt::transparent);\n    painter.setBrush(grad);\n    painter.drawRect(0, 0, this->width(), this->height());\n\n    int opacity = d->fadeAnim->currentValue().toInt();\n    if (opacity > 0) {\n        QColor col = this->palette().color(QPalette::Window);\n        col.setAlpha(opacity);\n        painter.setBrush(col);\n        painter.drawRect(0, 0, this->width(), this->height());\n    }\n}\n\nvoid Onboarding::startOnboarding() {\n    if (ui->contentWrapper->isVisible()) return;\n\n    this->setCursor(QCursor(Qt::ArrowCursor));\n\n    d->contentAnim->setStartValue(0);\n    d->contentAnim->setEndValue(ui->contentWrapper->sizeHint().height());\n\n    QMetaObject::Connection* c = new QMetaObject::Connection();\n    *c = connect(d->contentAnim, &tVariantAnimation::finished, this, [=] {\n        disconnect(*c);\n        delete c;\n\n        // Animate in the bar\n        if (this->geometry().height() >= SC_DPI(600) + 2 * d->bar->height()) {\n            QMetaObject::Connection* c = new QMetaObject::Connection();\n            *c = connect(d->barAnim, &tVariantAnimation::finished, this, [=] {\n                disconnect(*c);\n                delete c;\n\n                d->onboardingStarted = true;\n                updateBarVisiblity();\n            });\n            showBar();\n        } else {\n            d->onboardingStarted = true;\n            d->barVisible = true;\n            updateBarVisiblity();\n        }\n\n        d->bar->setVisible(true);\n    });\n    d->contentAnim->start();\n    ui->contentWrapper->setVisible(true);\n}\n\nvoid Onboarding::writeAudio() {\n    if (!d->audioEnabled) return;\n    if (!d->audioOutputDevice) return;\n\n    int bytesFree = d->audioOutput->bytesFree();\n    if (d->audioPointer < d->singleAudioData.length()) {\n        QByteArray chunk = d->singleAudioData.mid(d->audioPointer, bytesFree);\n        d->audioPointer += chunk.length();\n        bytesFree -= chunk.length();\n        d->audioOutputDevice->write(chunk);\n    }\n\n    // Prevent ourselves from locking up in this loop\n    QDeadlineTimer lockTimer(50);\n    while (bytesFree != 0 && d->audioPointer >= d->singleAudioData.length() && !lockTimer.hasExpired()) {\n        if (d->audioPointer >= d->singleAudioData.length() + d->loopAudioData.length()) d->audioPointer -= d->loopAudioData.length();\n        QByteArray chunk = d->loopAudioData.mid(d->audioPointer - d->singleAudioData.length(), bytesFree);\n        d->audioPointer += chunk.length();\n        bytesFree -= chunk.length();\n        d->audioOutputDevice->write(chunk);\n    }\n\n    // Disable the audio\n    if (lockTimer.hasExpired()) {\n        d->audioEnabled = false;\n    }\n}\n\nvoid Onboarding::changeEvent(QEvent* event) {\n    if (event->type() == QEvent::LanguageChange) {\n        ui->retranslateUi(this);\n\n        for (QPair<OnboardingStepper*, OnboardingPage*> stepper : d->steppers) {\n            stepper.first->setText(stepper.second->displayName());\n        }\n    }\n}\n\nvoid Onboarding::keyPressEvent(QKeyEvent* event) {\n    if (event->key() == Qt::Key_Space) {\n        if (!ui->contentWrapper->isVisible()) {\n            // Skip the intro sequence\n            startOnboarding();\n            event->accept();\n        }\n    } else if (event->key() == Qt::Key_Escape) {\n        StateManager::instance()->powerManager()->showPowerOffConfirmation();\n        event->accept();\n    }\n}\n\nbool Onboarding::eventFilter(QObject* watched, QEvent* event) {\n    if (watched == d->bar) {\n        if (event->type() == QEvent::Enter || event->type() == QEvent::Leave) {\n            updateBarVisiblity();\n        }\n    }\n    return false;\n}\n\nvoid Onboarding::completeOnboarding() {\n    d->contentAnim->setStartValue(ui->contentWrapper->sizeHint().height());\n    d->contentAnim->setEndValue(0);\n    d->contentAnim->start();\n\n    // Animate out the bar\n    QMetaObject::Connection* c = new QMetaObject::Connection();\n    *c = connect(d->barAnim, &tVariantAnimation::finished, this, [=] {\n        disconnect(*c);\n        delete c;\n\n        StateManager::onboardingManager()->d->onboardingRunning = false;\n        emit onboardingCompleted(true);\n        this->accept();\n    });\n    hideBar();\n\n    // Fade out the music\n    if (d->audioOutput) {\n        tVariantAnimation* volAnim = new tVariantAnimation(this);\n        volAnim->setStartValue(d->audioOutput->volume());\n        volAnim->setEndValue(0);\n        volAnim->setEasingCurve(QEasingCurve::OutCubic);\n        volAnim->setDuration(500);\n        connect(volAnim, &tVariantAnimation::valueChanged, this, [=](QVariant value) {\n            d->audioOutput->setVolume(value.toInt());\n        });\n        connect(volAnim, &tVariantAnimation::finished, this, [=] {\n            volAnim->deleteLater();\n        });\n        volAnim->start();\n    }\n\n    // Fade out the background\n    d->fadeAnim->start();\n}\n\nvoid Onboarding::showBar() {\n    if (d->barVisible) return;\n    d->barAnim->setStartValue(-d->bar->height());\n    d->barAnim->setEndValue(0);\n    d->barAnim->start();\n    d->barVisible = true;\n}\n\nvoid Onboarding::hideBar() {\n    if (!d->barVisible) return;\n    d->barAnim->setStartValue(0);\n    d->barAnim->setEndValue(-d->bar->height());\n    d->barAnim->start();\n    d->barVisible = false;\n}\n\nvoid Onboarding::updateBarVisiblity() {\n    if (d->onboardingStarted) {\n        if (this->geometry().height() < SC_DPI(600) + 2 * d->bar->height()) {\n            if (d->bar->underMouse()) {\n                d->bar->move(0, d->barAnim->currentValue().toInt());\n            } else {\n                d->bar->move(0, -d->bar->height() + 1);\n            }\n            d->bar->setAutoFillBackground(true);\n            tScrim::scrimForWidget(this)->setBlurEnabled(true);\n        } else {\n            d->bar->move(0, d->barAnim->currentValue().toInt());\n            d->bar->setAutoFillBackground(false);\n            tScrim::scrimForWidget(this)->setBlurEnabled(false);\n        }\n    } else {\n        d->bar->move(0, -d->bar->height());\n    }\n\n    d->bar->setFixedWidth(this->width());\n    d->bar->setFixedHeight(d->bar->height());\n}\n"
  },
  {
    "path": "libthedesk/onboarding/onboarding.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef ONBOARDING_H\n#define ONBOARDING_H\n\n#include <QDialog>\n\nnamespace Ui {\n    class Onboarding;\n}\n\nstruct OnboardingPrivate;\nclass Onboarding : public QDialog {\n        Q_OBJECT\n\n    public:\n        explicit Onboarding(QWidget* parent = nullptr);\n        ~Onboarding();\n\n        void startOnboarding();\n\n        void writeAudio();\n\n    signals:\n        void onboardingCompleted(bool complete);\n\n    private slots:\n        void on_stackedWidget_currentChanged(int arg1);\n\n        void on_bar_closeClicked();\n\n    private:\n        Ui::Onboarding* ui;\n        OnboardingPrivate* d;\n\n        void resizeEvent(QResizeEvent* event);\n        void paintEvent(QPaintEvent* event);\n        void changeEvent(QEvent* event);\n        void keyPressEvent(QKeyEvent* event);\n        bool eventFilter(QObject* watched, QEvent* event);\n\n        void completeOnboarding();\n\n        void showBar();\n        void hideBar();\n        void updateBarVisiblity();\n};\n\n#endif // ONBOARDING_H\n"
  },
  {
    "path": "libthedesk/onboarding/onboarding.ui",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ui version=\"4.0\">\n <class>Onboarding</class>\n <widget class=\"QDialog\" name=\"Onboarding\">\n  <property name=\"geometry\">\n   <rect>\n    <x>0</x>\n    <y>0</y>\n    <width>723</width>\n    <height>519</height>\n   </rect>\n  </property>\n  <property name=\"windowTitle\">\n   <string notr=\"true\">Dialog</string>\n  </property>\n  <layout class=\"QVBoxLayout\" name=\"verticalLayout\">\n   <property name=\"spacing\">\n    <number>0</number>\n   </property>\n   <property name=\"leftMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"topMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"rightMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"bottomMargin\">\n    <number>0</number>\n   </property>\n   <item>\n    <spacer name=\"verticalSpacer_2\">\n     <property name=\"orientation\">\n      <enum>Qt::Vertical</enum>\n     </property>\n     <property name=\"sizeHint\" stdset=\"0\">\n      <size>\n       <width>20</width>\n       <height>40</height>\n      </size>\n     </property>\n    </spacer>\n   </item>\n   <item alignment=\"Qt::AlignHCenter|Qt::AlignVCenter\">\n    <widget class=\"QFrame\" name=\"contentWrapper\">\n     <property name=\"autoFillBackground\">\n      <bool>true</bool>\n     </property>\n     <property name=\"frameShape\">\n      <enum>QFrame::StyledPanel</enum>\n     </property>\n     <layout class=\"QHBoxLayout\" name=\"horizontalLayout\">\n      <property name=\"spacing\">\n       <number>0</number>\n      </property>\n      <property name=\"leftMargin\">\n       <number>0</number>\n      </property>\n      <property name=\"topMargin\">\n       <number>0</number>\n      </property>\n      <property name=\"rightMargin\">\n       <number>0</number>\n      </property>\n      <property name=\"bottomMargin\">\n       <number>0</number>\n      </property>\n      <item>\n       <widget class=\"QFrame\" name=\"stepperFrame\">\n        <property name=\"frameShape\">\n         <enum>QFrame::NoFrame</enum>\n        </property>\n        <property name=\"frameShadow\">\n         <enum>QFrame::Raised</enum>\n        </property>\n        <layout class=\"QVBoxLayout\">\n         <property name=\"spacing\">\n          <number>0</number>\n         </property>\n         <property name=\"leftMargin\">\n          <number>0</number>\n         </property>\n         <property name=\"topMargin\">\n          <number>0</number>\n         </property>\n         <property name=\"rightMargin\">\n          <number>0</number>\n         </property>\n         <property name=\"bottomMargin\">\n          <number>0</number>\n         </property>\n         <item>\n          <layout class=\"QVBoxLayout\" name=\"stepperLayout\">\n           <property name=\"spacing\">\n            <number>0</number>\n           </property>\n          </layout>\n         </item>\n         <item>\n          <spacer name=\"verticalSpacer\">\n           <property name=\"orientation\">\n            <enum>Qt::Vertical</enum>\n           </property>\n           <property name=\"sizeHint\" stdset=\"0\">\n            <size>\n             <width>20</width>\n             <height>40</height>\n            </size>\n           </property>\n          </spacer>\n         </item>\n        </layout>\n       </widget>\n      </item>\n      <item>\n       <widget class=\"Line\" name=\"line\">\n        <property name=\"maximumSize\">\n         <size>\n          <width>1</width>\n          <height>16777215</height>\n         </size>\n        </property>\n        <property name=\"orientation\">\n         <enum>Qt::Vertical</enum>\n        </property>\n       </widget>\n      </item>\n      <item>\n       <widget class=\"tStackedWidget\" name=\"stackedWidget\"/>\n      </item>\n     </layout>\n    </widget>\n   </item>\n   <item>\n    <spacer name=\"verticalSpacer_3\">\n     <property name=\"orientation\">\n      <enum>Qt::Vertical</enum>\n     </property>\n     <property name=\"sizeHint\" stdset=\"0\">\n      <size>\n       <width>20</width>\n       <height>40</height>\n      </size>\n     </property>\n    </spacer>\n   </item>\n  </layout>\n </widget>\n <customwidgets>\n  <customwidget>\n   <class>tStackedWidget</class>\n   <extends>QStackedWidget</extends>\n   <header location=\"global\">tstackedwidget.h</header>\n   <container>1</container>\n   <slots>\n    <signal>switchingFrame(int)</signal>\n   </slots>\n  </customwidget>\n </customwidgets>\n <resources/>\n <connections/>\n</ui>\n"
  },
  {
    "path": "libthedesk/onboarding/onboardingbar.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"onboardingbar.h\"\n#include \"ui_onboardingbar.h\"\n\n#include <statemanager.h>\n#include <onboardingmanager.h>\n#include <tvariantanimation.h>\n#include <TimeDate/desktoptimedate.h>\n#include <QGraphicsOpacityEffect>\n\nstruct OnboardingBarPrivate {\n    QGraphicsOpacityEffect* dateOpacity;\n};\n\nOnboardingBar::OnboardingBar(QWidget* parent) :\n    QWidget(parent),\n    ui(new Ui::OnboardingBar) {\n    ui->setupUi(this);\n\n    d = new OnboardingBarPrivate();\n    d->dateOpacity = new QGraphicsOpacityEffect();\n    d->dateOpacity->setOpacity(StateManager::onboardingManager()->dateVisible() ? 1.0 : 0.0);\n    ui->dateWidget->setGraphicsEffect(d->dateOpacity);\n\n    QPalette pal = this->palette();\n    pal.setColor(QPalette::WindowText, Qt::white);\n    this->setPalette(pal);\n\n    DesktopTimeDate::makeTimeLabel(ui->clock, DesktopTimeDate::Time);\n    DesktopTimeDate::makeTimeLabel(ui->date, DesktopTimeDate::StandardDate);\n\n    connect(StateManager::onboardingManager(), &OnboardingManager::dateVisibleChanged, this, [ = ](bool dateVisible) {\n        tVariantAnimation* anim = new tVariantAnimation();\n        anim->setStartValue(d->dateOpacity->opacity());\n        anim->setEndValue(dateVisible ? 1.0 : 0.0);\n        anim->setDuration(500);\n        anim->setEasingCurve(QEasingCurve::OutCubic);\n        connect(anim, &tVariantAnimation::valueChanged, this, [ = ](QVariant value) {\n            d->dateOpacity->setOpacity(value.toReal());\n        });\n        connect(anim, &tVariantAnimation::finished, anim, &tVariantAnimation::deleteLater);\n        anim->start();\n    });\n}\n\nOnboardingBar::~OnboardingBar() {\n    delete ui;\n}\n\nvoid OnboardingBar::on_closeButton_clicked() {\n    emit closeClicked();\n}\n\nvoid OnboardingBar::on_muteButton_toggled(bool checked) {\n    emit muteToggled(checked);\n}\n"
  },
  {
    "path": "libthedesk/onboarding/onboardingbar.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef ONBOARDINGBAR_H\n#define ONBOARDINGBAR_H\n\n#include <QWidget>\n\nnamespace Ui {\n    class OnboardingBar;\n}\n\nstruct OnboardingBarPrivate;\nclass OnboardingBar : public QWidget {\n        Q_OBJECT\n\n    public:\n        explicit OnboardingBar(QWidget* parent = nullptr);\n        ~OnboardingBar();\n\n    private slots:\n        void on_closeButton_clicked();\n\n        void on_muteButton_toggled(bool checked);\n\n    signals:\n        void closeClicked();\n        void muteToggled(bool mute);\n\n    private:\n        Ui::OnboardingBar* ui;\n        OnboardingBarPrivate* d;\n};\n\n#endif // ONBOARDINGBAR_H\n"
  },
  {
    "path": "libthedesk/onboarding/onboardingbar.ui",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ui version=\"4.0\">\n <class>OnboardingBar</class>\n <widget class=\"QWidget\" name=\"OnboardingBar\">\n  <property name=\"geometry\">\n   <rect>\n    <x>0</x>\n    <y>0</y>\n    <width>625</width>\n    <height>42</height>\n   </rect>\n  </property>\n  <property name=\"windowTitle\">\n   <string notr=\"true\">Form</string>\n  </property>\n  <layout class=\"QVBoxLayout\" name=\"verticalLayout\">\n   <property name=\"spacing\">\n    <number>0</number>\n   </property>\n   <property name=\"leftMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"topMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"rightMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"bottomMargin\">\n    <number>0</number>\n   </property>\n   <item>\n    <widget class=\"QWidget\" name=\"widget\" native=\"true\">\n     <layout class=\"QHBoxLayout\" name=\"horizontalLayout\">\n      <property name=\"spacing\">\n       <number>0</number>\n      </property>\n      <property name=\"leftMargin\">\n       <number>0</number>\n      </property>\n      <property name=\"topMargin\">\n       <number>0</number>\n      </property>\n      <property name=\"rightMargin\">\n       <number>0</number>\n      </property>\n      <property name=\"bottomMargin\">\n       <number>0</number>\n      </property>\n      <item>\n       <widget class=\"QWidget\" name=\"dateWidget\" native=\"true\">\n        <layout class=\"QHBoxLayout\" name=\"horizontalLayout_2\">\n         <property name=\"spacing\">\n          <number>6</number>\n         </property>\n         <property name=\"leftMargin\">\n          <number>9</number>\n         </property>\n         <property name=\"topMargin\">\n          <number>9</number>\n         </property>\n         <property name=\"rightMargin\">\n          <number>9</number>\n         </property>\n         <property name=\"bottomMargin\">\n          <number>9</number>\n         </property>\n         <item>\n          <widget class=\"QLabel\" name=\"clock\">\n           <property name=\"font\">\n            <font>\n             <pointsize>15</pointsize>\n             <weight>75</weight>\n             <bold>true</bold>\n            </font>\n           </property>\n           <property name=\"text\">\n            <string notr=\"true\">Clock</string>\n           </property>\n          </widget>\n         </item>\n         <item>\n          <widget class=\"QLabel\" name=\"date\">\n           <property name=\"text\">\n            <string notr=\"true\">Date</string>\n           </property>\n          </widget>\n         </item>\n        </layout>\n       </widget>\n      </item>\n      <item>\n       <spacer name=\"horizontalSpacer\">\n        <property name=\"orientation\">\n         <enum>Qt::Horizontal</enum>\n        </property>\n        <property name=\"sizeHint\" stdset=\"0\">\n         <size>\n          <width>516</width>\n          <height>20</height>\n         </size>\n        </property>\n       </spacer>\n      </item>\n      <item>\n       <widget class=\"QToolButton\" name=\"muteButton\">\n        <property name=\"sizePolicy\">\n         <sizepolicy hsizetype=\"Preferred\" vsizetype=\"Preferred\">\n          <horstretch>0</horstretch>\n          <verstretch>0</verstretch>\n         </sizepolicy>\n        </property>\n        <property name=\"text\">\n         <string/>\n        </property>\n        <property name=\"icon\">\n         <iconset theme=\"audio-volume-muted\">\n          <normaloff>.</normaloff>.</iconset>\n        </property>\n        <property name=\"checkable\">\n         <bool>true</bool>\n        </property>\n        <property name=\"autoRaise\">\n         <bool>true</bool>\n        </property>\n       </widget>\n      </item>\n      <item>\n       <widget class=\"QToolButton\" name=\"closeButton\">\n        <property name=\"sizePolicy\">\n         <sizepolicy hsizetype=\"Preferred\" vsizetype=\"Preferred\">\n          <horstretch>0</horstretch>\n          <verstretch>0</verstretch>\n         </sizepolicy>\n        </property>\n        <property name=\"text\">\n         <string notr=\"true\"/>\n        </property>\n        <property name=\"icon\">\n         <iconset theme=\"dialog-close\">\n          <normaloff>.</normaloff>.</iconset>\n        </property>\n        <property name=\"autoRaise\">\n         <bool>true</bool>\n        </property>\n       </widget>\n      </item>\n     </layout>\n    </widget>\n   </item>\n  </layout>\n </widget>\n <resources/>\n <connections/>\n</ui>\n"
  },
  {
    "path": "libthedesk/onboarding/onboardingbetathankyou.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"onboardingbetathankyou.h\"\n#include \"ui_onboardingbetathankyou.h\"\n\n#include <statemanager.h>\n#include <onboardingmanager.h>\n\nOnboardingBetaThankYou::OnboardingBetaThankYou(QWidget* parent) :\n    OnboardingPage(parent),\n    ui(new Ui::OnboardingBetaThankYou) {\n    ui->setupUi(this);\n    ui->titleLabel->setBackButtonShown(true);\n}\n\nOnboardingBetaThankYou::~OnboardingBetaThankYou() {\n    delete ui;\n}\n\nvoid OnboardingBetaThankYou::on_titleLabel_backButtonClicked() {\n    StateManager::onboardingManager()->previousStep();\n}\n\n\nQString OnboardingBetaThankYou::name() {\n    return \"OnboardingBetaThankYou\";\n}\n\nQString OnboardingBetaThankYou::displayName() {\n    return tr(\"A Message\");\n}\nvoid OnboardingBetaThankYou::on_nextButton_clicked() {\n    StateManager::onboardingManager()->nextStep();\n}\n"
  },
  {
    "path": "libthedesk/onboarding/onboardingbetathankyou.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef ONBOARDINGBETATHANKYOU_H\n#define ONBOARDINGBETATHANKYOU_H\n\n#include <onboardingpage.h>\n\nnamespace Ui {\n    class OnboardingBetaThankYou;\n}\n\nclass OnboardingBetaThankYou : public OnboardingPage {\n        Q_OBJECT\n\n    public:\n        explicit OnboardingBetaThankYou(QWidget* parent = nullptr);\n        ~OnboardingBetaThankYou();\n\n    private slots:\n        void on_titleLabel_backButtonClicked();\n\n        void on_nextButton_clicked();\n\n    private:\n        Ui::OnboardingBetaThankYou* ui;\n\n        // OnboardingPage interface\n    public:\n        QString name();\n        QString displayName();\n};\n\n#endif // ONBOARDINGBETATHANKYOU_H\n"
  },
  {
    "path": "libthedesk/onboarding/onboardingbetathankyou.ui",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ui version=\"4.0\">\n <class>OnboardingBetaThankYou</class>\n <widget class=\"QWidget\" name=\"OnboardingBetaThankYou\">\n  <property name=\"geometry\">\n   <rect>\n    <x>0</x>\n    <y>0</y>\n    <width>400</width>\n    <height>300</height>\n   </rect>\n  </property>\n  <property name=\"windowTitle\">\n   <string notr=\"true\">Form</string>\n  </property>\n  <layout class=\"QVBoxLayout\" name=\"verticalLayout\">\n   <property name=\"spacing\">\n    <number>0</number>\n   </property>\n   <property name=\"leftMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"topMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"rightMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"bottomMargin\">\n    <number>0</number>\n   </property>\n   <item>\n    <widget class=\"tTitleLabel\" name=\"titleLabel\">\n     <property name=\"text\">\n      <string>Thank you!</string>\n     </property>\n    </widget>\n   </item>\n   <item>\n    <widget class=\"QLabel\" name=\"label\">\n     <property name=\"text\">\n      <string notr=\"true\">Welcome to theDesk Beta 4!\n\nBefore we continue, please bear in mind that this is a beta. Not everything will be working correctly, and you may experience some strange behaviour in some parts.\n\nAs always, feedback is appreciated! If you've got any ideas for me, or if something seems a little strange, please let me know!\n\nOnce again, thanks for giving theDesk a go!\n- Victor :)</string>\n     </property>\n     <property name=\"wordWrap\">\n      <bool>true</bool>\n     </property>\n     <property name=\"margin\">\n      <number>9</number>\n     </property>\n    </widget>\n   </item>\n   <item>\n    <spacer name=\"verticalSpacer\">\n     <property name=\"orientation\">\n      <enum>Qt::Vertical</enum>\n     </property>\n     <property name=\"sizeHint\" stdset=\"0\">\n      <size>\n       <width>20</width>\n       <height>40</height>\n      </size>\n     </property>\n    </spacer>\n   </item>\n   <item>\n    <widget class=\"Line\" name=\"line\">\n     <property name=\"maximumSize\">\n      <size>\n       <width>16777215</width>\n       <height>1</height>\n      </size>\n     </property>\n     <property name=\"orientation\">\n      <enum>Qt::Horizontal</enum>\n     </property>\n    </widget>\n   </item>\n   <item>\n    <layout class=\"QHBoxLayout\" name=\"horizontalLayout\">\n     <property name=\"spacing\">\n      <number>6</number>\n     </property>\n     <property name=\"leftMargin\">\n      <number>9</number>\n     </property>\n     <property name=\"topMargin\">\n      <number>9</number>\n     </property>\n     <property name=\"rightMargin\">\n      <number>9</number>\n     </property>\n     <property name=\"bottomMargin\">\n      <number>9</number>\n     </property>\n     <item>\n      <spacer name=\"horizontalSpacer\">\n       <property name=\"orientation\">\n        <enum>Qt::Horizontal</enum>\n       </property>\n       <property name=\"sizeHint\" stdset=\"0\">\n        <size>\n         <width>40</width>\n         <height>20</height>\n        </size>\n       </property>\n      </spacer>\n     </item>\n     <item>\n      <widget class=\"QPushButton\" name=\"nextButton\">\n       <property name=\"text\">\n        <string>Next</string>\n       </property>\n       <property name=\"icon\">\n        <iconset theme=\"go-next\">\n         <normaloff>.</normaloff>.</iconset>\n       </property>\n      </widget>\n     </item>\n    </layout>\n   </item>\n  </layout>\n </widget>\n <customwidgets>\n  <customwidget>\n   <class>tTitleLabel</class>\n   <extends>QLabel</extends>\n   <header location=\"global\">ttitlelabel.h</header>\n   <slots>\n    <signal>backButtonClicked()</signal>\n   </slots>\n  </customwidget>\n </customwidgets>\n <resources/>\n <connections/>\n</ui>\n"
  },
  {
    "path": "libthedesk/onboarding/onboardingcontroller.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"onboardingcontroller.h\"\n\n#include \"onboarding.h\"\n#include \"server/sessionserver.h\"\n#include <QCoroCore>\n#include <QScreen>\n#include <onboardingmanager.h>\n#include <statemanager.h>\n#include <tsettings.h>\n\n#include \"onboardingfinal.h\"\n#include \"onboardingvideo.h\"\n#include \"onboardingwelcome.h\"\n\nOnboardingController::OnboardingController(QObject* parent) :\n    QObject(parent) {\n}\n\nbool OnboardingController::performOnboarding(bool isSystemOnboarding) {\n    tSettings settings;\n    if (settings.value(\"Onboarding/lastOnboarding\").toInt() < 1) {\n        OnboardingManager* manager = StateManager::onboardingManager();\n        manager->setIsSystemOnboarding(isSystemOnboarding);\n        manager->addOnboardingStep(new OnboardingWelcome);\n        manager->addOnboardingStep(new OnboardingFinal);\n        emit manager->onboardingRequired();\n\n        Onboarding o;\n\n        QList<OnboardingVideo*> videoScreens;\n        if (settings.value(\"Onboarding/onboardingVideo\").toBool()) {\n            for (QScreen* screen : qApp->screens()) {\n                OnboardingVideo* video = new OnboardingVideo();\n                video->setGeometry(screen->geometry());\n                video->showFullScreen();\n                videoScreens.append(video);\n            }\n        }\n\n        o.setGeometry(qApp->primaryScreen()->geometry());\n        o.showFullScreen();\n\n        if (videoScreens.count() > 0) {\n            connect(videoScreens.first(), &OnboardingVideo::startOnboarding, &o, &Onboarding::startOnboarding);\n            connect(videoScreens.first(), &OnboardingVideo::playAudio, &o, &Onboarding::writeAudio);\n        }\n\n        // Hide the splashes if needed\n        SessionServer::instance()->hideSplashes();\n\n        auto result = QCoro::waitFor(qCoro(&o, &Onboarding::onboardingCompleted));\n        for (OnboardingVideo* video : videoScreens) {\n            video->close();\n            video->deleteLater();\n        }\n\n        if (result) {\n            // Show the splashes again\n            SessionServer::instance()->showSplashes();\n\n            // Set the onboarding flag\n            settings.setValue(\"Onboarding/lastOnboarding\", 1);\n            settings.sync();\n\n            return true;\n        } else {\n            return false;\n        }\n    }\n    return true;\n}\n"
  },
  {
    "path": "libthedesk/onboarding/onboardingcontroller.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef ONBOARDINGCONTROLLER_H\n#define ONBOARDINGCONTROLLER_H\n\n#include <QObject>\n\nclass OnboardingController : public QObject {\n        Q_OBJECT\n    public:\n        explicit OnboardingController(QObject* parent = nullptr);\n\n        static bool performOnboarding(bool isSystemOnboarding);\n\n    signals:\n\n};\n\n#endif // ONBOARDINGCONTROLLER_H\n"
  },
  {
    "path": "libthedesk/onboarding/onboardingfinal.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"onboardingfinal.h\"\n#include \"ui_onboardingfinal.h\"\n\n#include <statemanager.h>\n#include <onboardingmanager.h>\n\nOnboardingFinal::OnboardingFinal(QWidget* parent) :\n    OnboardingPage(parent),\n    ui(new Ui::OnboardingFinal) {\n    ui->setupUi(this);\n}\n\nOnboardingFinal::~OnboardingFinal() {\n    delete ui;\n}\n\nvoid OnboardingFinal::changeEvent(QEvent* event) {\n    if (event->type() == QEvent::LanguageChange) {\n        ui->retranslateUi(this);\n    }\n}\n\nQString OnboardingFinal::name() {\n    return \"OnboardingFinal\";\n}\n\nQString OnboardingFinal::displayName() {\n    return tr(\"Done\");\n}\n\nvoid OnboardingFinal::on_finishButton_clicked() {\n    StateManager::onboardingManager()->nextStep();\n}\n"
  },
  {
    "path": "libthedesk/onboarding/onboardingfinal.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef ONBOARDINGFINAL_H\n#define ONBOARDINGFINAL_H\n\n#include <onboardingpage.h>\n\nnamespace Ui {\n    class OnboardingFinal;\n}\n\nclass OnboardingFinal : public OnboardingPage {\n        Q_OBJECT\n\n    public:\n        explicit OnboardingFinal(QWidget* parent = nullptr);\n        ~OnboardingFinal();\n\n    private:\n        Ui::OnboardingFinal* ui;\n\n        void changeEvent(QEvent* event);\n\n        // OnboardingPage interface\n    public:\n        QString name();\n        QString displayName();\n    private slots:\n        void on_finishButton_clicked();\n};\n\n#endif // ONBOARDINGFINAL_H\n"
  },
  {
    "path": "libthedesk/onboarding/onboardingfinal.ui",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ui version=\"4.0\">\n <class>OnboardingFinal</class>\n <widget class=\"QWidget\" name=\"OnboardingFinal\">\n  <property name=\"geometry\">\n   <rect>\n    <x>0</x>\n    <y>0</y>\n    <width>642</width>\n    <height>439</height>\n   </rect>\n  </property>\n  <property name=\"windowTitle\">\n   <string notr=\"true\">Form</string>\n  </property>\n  <layout class=\"QVBoxLayout\" name=\"verticalLayout\">\n   <property name=\"leftMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"topMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"rightMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"bottomMargin\">\n    <number>0</number>\n   </property>\n   <item>\n    <spacer name=\"verticalSpacer_2\">\n     <property name=\"orientation\">\n      <enum>Qt::Vertical</enum>\n     </property>\n     <property name=\"sizeHint\" stdset=\"0\">\n      <size>\n       <width>20</width>\n       <height>40</height>\n      </size>\n     </property>\n    </spacer>\n   </item>\n   <item>\n    <widget class=\"QLabel\" name=\"label\">\n     <property name=\"font\">\n      <font>\n       <pointsize>15</pointsize>\n      </font>\n     </property>\n     <property name=\"text\">\n      <string>That's everything!</string>\n     </property>\n     <property name=\"alignment\">\n      <set>Qt::AlignCenter</set>\n     </property>\n    </widget>\n   </item>\n   <item>\n    <widget class=\"QLabel\" name=\"label_3\">\n     <property name=\"text\">\n      <string/>\n     </property>\n     <property name=\"pixmap\">\n      <pixmap>:/thedesk/desktop/icons/cactus.svg</pixmap>\n     </property>\n     <property name=\"alignment\">\n      <set>Qt::AlignCenter</set>\n     </property>\n    </widget>\n   </item>\n   <item>\n    <widget class=\"QLabel\" name=\"label_2\">\n     <property name=\"text\">\n      <string>We hope you enjoy using theDesk!</string>\n     </property>\n     <property name=\"alignment\">\n      <set>Qt::AlignCenter</set>\n     </property>\n    </widget>\n   </item>\n   <item>\n    <layout class=\"QHBoxLayout\" name=\"horizontalLayout\">\n     <item>\n      <spacer name=\"horizontalSpacer\">\n       <property name=\"orientation\">\n        <enum>Qt::Horizontal</enum>\n       </property>\n       <property name=\"sizeHint\" stdset=\"0\">\n        <size>\n         <width>40</width>\n         <height>20</height>\n        </size>\n       </property>\n      </spacer>\n     </item>\n     <item>\n      <widget class=\"QPushButton\" name=\"finishButton\">\n       <property name=\"text\">\n        <string>Get Started</string>\n       </property>\n      </widget>\n     </item>\n     <item>\n      <spacer name=\"horizontalSpacer_2\">\n       <property name=\"orientation\">\n        <enum>Qt::Horizontal</enum>\n       </property>\n       <property name=\"sizeHint\" stdset=\"0\">\n        <size>\n         <width>40</width>\n         <height>20</height>\n        </size>\n       </property>\n      </spacer>\n     </item>\n    </layout>\n   </item>\n   <item>\n    <spacer name=\"verticalSpacer\">\n     <property name=\"orientation\">\n      <enum>Qt::Vertical</enum>\n     </property>\n     <property name=\"sizeHint\" stdset=\"0\">\n      <size>\n       <width>20</width>\n       <height>40</height>\n      </size>\n     </property>\n    </spacer>\n   </item>\n  </layout>\n </widget>\n <resources/>\n <connections/>\n</ui>\n"
  },
  {
    "path": "libthedesk/onboarding/onboardingstepper.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"onboardingstepper.h\"\n\n#include <QPainter>\n#include <libcontemporary_global.h>\n#include <tpaintcalculator.h>\n\nstruct OnboardingStepperPrivate {\n        QString text;\n        int step = 1;\n        int currentStep = 1;\n        bool isFinal = false;\n};\n\nOnboardingStepper::OnboardingStepper(QWidget* parent) :\n    QWidget(parent) {\n    d = new OnboardingStepperPrivate();\n\n    QFont fnt = this->font();\n    fnt.setPointSize(13);\n    this->setFont(fnt);\n}\n\nOnboardingStepper::~OnboardingStepper() {\n    delete d;\n}\n\nvoid OnboardingStepper::setText(QString text) {\n    d->text = text;\n    this->update();\n}\n\nvoid OnboardingStepper::setStep(int step) {\n    d->step = step;\n    this->update();\n}\n\nvoid OnboardingStepper::setCurrentStep(int step) {\n    d->currentStep = step;\n    this->update();\n}\n\nvoid OnboardingStepper::setIsFinal(bool isFinal) {\n    d->isFinal = isFinal;\n    this->update();\n}\n\nQSize OnboardingStepper::sizeHint() const {\n    return QSize(300, this->fontMetrics().height() + 18);\n}\n\nvoid OnboardingStepper::paintEvent(QPaintEvent* event) {\n    QPainter* painter = new QPainter(this);\n    painter->setRenderHint(QPainter::Antialiasing);\n\n    tPaintCalculator calculator;\n    calculator.setPainter(painter);\n    calculator.setDrawBounds(this->size());\n    calculator.setLayoutDirection(this->layoutDirection());\n\n    QPalette::ColorGroup group = d->currentStep < d->step ? QPalette::Disabled : QPalette::Normal;\n\n    int radius = this->height() - SC_DPI(5);\n    QRect circleRect;\n    circleRect.setSize(QSize(radius, radius));\n    circleRect.moveLeft(SC_DPI(9));\n    circleRect.moveTop(this->height() / 2 - radius / 2);\n\n    calculator.addRect(circleRect, [=](QRectF drawBounds) {\n        painter->setPen(Qt::transparent);\n        painter->setBrush(this->palette().color(group, QPalette::WindowText));\n        painter->drawEllipse(drawBounds);\n\n        painter->setPen(this->palette().color(group, QPalette::Window));\n        painter->drawText(drawBounds, Qt::AlignCenter, QLocale().toString(d->step));\n    });\n\n    QRect textRect;\n    textRect.setWidth(this->fontMetrics().horizontalAdvance(d->text));\n    textRect.setHeight(this->fontMetrics().height());\n    textRect.moveLeft(circleRect.right() + SC_DPI(9));\n    textRect.moveTop(this->height() / 2 - textRect.height() / 2);\n\n    calculator.addRect(textRect, [=](QRectF drawBounds) {\n        painter->setPen(this->palette().color(group, QPalette::WindowText));\n        painter->drawText(drawBounds, Qt::AlignLeft, d->text);\n    });\n\n    if (d->step != 1) {\n        calculator.addRect(circleRect, [=](QRectF drawBounds) {\n            painter->drawLine(drawBounds.center().x(), 0, drawBounds.center().x(), drawBounds.top());\n        });\n    }\n    if (!d->isFinal) {\n        calculator.addRect(circleRect, [=](QRectF drawBounds) {\n            painter->drawLine(drawBounds.center().x(), drawBounds.bottom(), drawBounds.center().x(), this->height());\n        });\n    }\n\n    calculator.performPaint();\n\n    delete painter;\n}\n"
  },
  {
    "path": "libthedesk/onboarding/onboardingstepper.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef ONBOARDINGSTEPPER_H\n#define ONBOARDINGSTEPPER_H\n\n#include <QWidget>\n\nstruct OnboardingStepperPrivate;\nclass OnboardingStepper : public QWidget {\n        Q_OBJECT\n    public:\n        explicit OnboardingStepper(QWidget* parent = nullptr);\n        ~OnboardingStepper();\n\n        void setText(QString text);\n        void setStep(int step);\n        void setCurrentStep(int step);\n        void setIsFinal(bool isFinal);\n\n        QSize sizeHint() const;\n\n    signals:\n\n    private:\n        OnboardingStepperPrivate* d;\n\n        void paintEvent(QPaintEvent* event);\n};\n\n#endif // ONBOARDINGSTEPPER_H\n"
  },
  {
    "path": "libthedesk/onboarding/onboardingvideo.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"onboardingvideo.h\"\n#include \"ui_onboardingvideo.h\"\n\n#include <QMediaPlayer>\n#include <QPainter>\n#include <QQmlContext>\n#include <QTimer>\n#include <QVideoFrame>\n#include <QVideoSink>\n#include <tsettings.h>\n\nstruct OnboardingVideoPrivate {\n        QMediaPlayer* videoPlayer;\n        QPixmap pixmap;\n};\n\nOnboardingVideo::OnboardingVideo(QWidget* parent) :\n    QDialog(parent),\n    ui(new Ui::OnboardingVideo) {\n    ui->setupUi(this);\n\n    d = new OnboardingVideoPrivate();\n    this->setCursor(QCursor(Qt::BlankCursor));\n\n    this->setWindowFlag(Qt::FramelessWindowHint);\n    this->setWindowFlag(Qt::WindowStaysOnBottomHint);\n\n    ui->videoWidget->setAspectRatioMode(Qt::KeepAspectRatioByExpanding);\n\n    tSettings settings;\n    auto startPlayer = mediaPlayerForFile(settings.value(\"Onboarding/videos.start\").toString());\n    auto middlePlayer = mediaPlayerForFile(settings.value(\"Onboarding/videos.middle\").toString());\n    auto loopPlayer = mediaPlayerForFile(settings.value(\"Onboarding/videos.loop\").toString());\n\n    startPlayer->setVideoOutput(ui->videoWidget);\n    connect(startPlayer, &QMediaPlayer::mediaStatusChanged, this, [this, middlePlayer](QMediaPlayer::MediaStatus state) {\n        if (state == QMediaPlayer::BufferedMedia || state == QMediaPlayer::BufferingMedia) {\n            emit playAudio();\n        } else if (state == QMediaPlayer::EndOfMedia) {\n            middlePlayer->play();\n            middlePlayer->setVideoOutput(ui->videoWidget);\n            QTimer::singleShot(0, this, &OnboardingVideo::startOnboarding);\n        }\n    });\n    connect(middlePlayer, &QMediaPlayer::mediaStatusChanged, this, [this, loopPlayer](QMediaPlayer::MediaStatus state) {\n        if (state == QMediaPlayer::EndOfMedia) {\n            loopPlayer->play();\n            loopPlayer->setVideoOutput(ui->videoWidget);\n        }\n    });\n    loopPlayer->setLoops(QMediaPlayer::Infinite);\n\n    QVideoFrame::PaintOptions framePaintOptions;\n    framePaintOptions.aspectRatioMode = Qt::KeepAspectRatioByExpanding;\n    framePaintOptions.backgroundColor = Qt::black;\n\n    startPlayer->play();\n}\n\nOnboardingVideo::~OnboardingVideo() {\n    delete d;\n    delete ui;\n}\n\nQMediaPlayer* OnboardingVideo::mediaObject() const {\n    return d->videoPlayer;\n}\n\nQMediaPlayer* OnboardingVideo::mediaPlayerForFile(QString file) {\n    auto player = new QMediaPlayer(this);\n    player->setSource(QUrl::fromLocalFile(file));\n    return player;\n}\n"
  },
  {
    "path": "libthedesk/onboarding/onboardingvideo.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef ONBOARDINGVIDEO_H\n#define ONBOARDINGVIDEO_H\n\n#include <QDialog>\n#include <QMediaPlayer>\n\nnamespace Ui {\n    class OnboardingVideo;\n}\n\nstruct OnboardingVideoPrivate;\nclass OnboardingVideo : public QDialog {\n        Q_OBJECT\n        Q_PROPERTY(QMediaPlayer* mediaObject READ mediaObject NOTIFY mediaObjectChanged)\n\n    public:\n        explicit OnboardingVideo(QWidget* parent = nullptr);\n        ~OnboardingVideo();\n\n        QMediaPlayer* mediaObject() const;\n\n    signals:\n        void startOnboarding();\n        void mediaObjectChanged();\n        void playAudio();\n\n    private:\n        Ui::OnboardingVideo* ui;\n        OnboardingVideoPrivate* d;\n\n        QMediaPlayer* mediaPlayerForFile(QString file);\n};\n\n#endif // ONBOARDINGVIDEO_H\n"
  },
  {
    "path": "libthedesk/onboarding/onboardingvideo.ui",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ui version=\"4.0\">\n <class>OnboardingVideo</class>\n <widget class=\"QDialog\" name=\"OnboardingVideo\">\n  <property name=\"geometry\">\n   <rect>\n    <x>0</x>\n    <y>0</y>\n    <width>400</width>\n    <height>300</height>\n   </rect>\n  </property>\n  <property name=\"windowTitle\">\n   <string notr=\"true\">Dialog</string>\n  </property>\n  <layout class=\"QVBoxLayout\" name=\"verticalLayout\">\n   <property name=\"spacing\">\n    <number>0</number>\n   </property>\n   <property name=\"leftMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"topMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"rightMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"bottomMargin\">\n    <number>0</number>\n   </property>\n   <item>\n    <widget class=\"QVideoWidget\" name=\"videoWidget\" native=\"true\"/>\n   </item>\n  </layout>\n </widget>\n <customwidgets>\n  <customwidget>\n   <class>QVideoWidget</class>\n   <extends>QWidget</extends>\n   <header location=\"global\">qvideowidget.h</header>\n   <container>1</container>\n  </customwidget>\n </customwidgets>\n <resources/>\n <connections/>\n</ui>\n"
  },
  {
    "path": "libthedesk/onboarding/onboardingwelcome.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"onboardingwelcome.h\"\n#include \"ui_onboardingwelcome.h\"\n\n#include <statemanager.h>\n#include <onboardingmanager.h>\n#include <localemanager.h>\n#include <tsettings.h>\n#include <Wm/desktopwm.h>\n#include <QSvgRenderer>\n#include <QPainter>\n#include <QDBusInterface>\n\nstruct OnboardingWelcomePrivate {\n    tSettings settings;\n    QSvgRenderer backgroundRenderer;\n    QDBusInterface* hostnamed;\n};\n\nOnboardingWelcome::OnboardingWelcome(QWidget* parent) :\n    OnboardingPage(parent),\n    ui(new Ui::OnboardingWelcome) {\n    ui->setupUi(this);\n\n    d = new OnboardingWelcomePrivate();\n    d->backgroundRenderer.load(d->settings.value(\"Onboarding/welcomeGraphic\").toString());\n\n    ui->emergencyButton->setVisible(false);\n\n    connect(DesktopWm::instance(), &DesktopWm::currentKeyboardLayoutChanged, this, [ = ] {\n        ui->keyboardButton->setText(DesktopWm::currentKeyboardLayout());\n    });\n    ui->keyboardButton->setText(DesktopWm::currentKeyboardLayout());\n\n    d->hostnamed = new QDBusInterface(\"org.freedesktop.hostname1\", \"/org/freedesktop/hostname1\", \"org.freedesktop.hostname1\", QDBusConnection::systemBus(), this);\n\n    if (StateManager::onboardingManager()->isSystemOnboarding()) {\n        ui->titleLabel->setText(tr(\"Welcome to %1!\").arg(d->hostnamed->property(\"OperatingSystemPrettyName\").toString()));\n        ui->descriptionLabel->setText(tr(\"You've made it! We'll quickly go through some important setup like setting up accounts and connecting to the Internet, and then you'll be up and running.\"));\n    } else {\n        ui->titleLabel->setText(tr(\"Welcome to %1!\").arg(QApplication::applicationName()));\n        ui->descriptionLabel->setText(tr(\"Just a bit of important setup to do before you get started. This won't take long!\"));\n    }\n\n    QPalette pal = this->palette();\n    pal.setColor(QPalette::WindowText, Qt::white);\n    this->setPalette(pal);\n}\n\nOnboardingWelcome::~OnboardingWelcome() {\n    delete d;\n    delete ui;\n}\n\nvoid OnboardingWelcome::changeEvent(QEvent* event) {\n    if (event->type() == QEvent::LanguageChange) {\n        ui->retranslateUi(this);\n    }\n}\n\n\nQString OnboardingWelcome::name() {\n    return \"OnboardingWelcome\";\n}\n\nQString OnboardingWelcome::displayName() {\n    return tr(\"Welcome\");\n}\n\nvoid OnboardingWelcome::on_nextButton_clicked() {\n    StateManager::onboardingManager()->nextStep();\n}\n\nvoid OnboardingWelcome::on_languageButton_clicked() {\n    LocaleManager* manager = StateManager::localeManager();\n    bool ok;\n    QLocale locale = manager->showLocaleSelector(this->window(), &ok);\n    if (ok) {\n        if (manager->locales().contains(locale)) manager->removeLocale(locale);\n        manager->prependLocale(locale);\n    }\n}\n\nvoid OnboardingWelcome::on_keyboardButton_clicked() {\n    bool ok;\n    QString newLayout = StateManager::localeManager()->showKeyboardLayoutSelector(this->window(), &ok);\n    if (!ok) return;\n\n    QStringList layouts = d->settings.delimitedList(\"Input/keyboard.layouts\");\n    if (!layouts.contains(newLayout)) {\n        layouts.append(newLayout);\n        layouts.removeAll(\"\");\n        d->settings.setDelimitedList(\"Input/keyboard.layouts\", layouts);\n    }\n\n    DesktopWm::setCurrentKeyboardLayout(newLayout);\n}\n\n\nvoid OnboardingWelcome::paintEvent(QPaintEvent* event) {\n    QPainter painter(this);\n    d->backgroundRenderer.render(&painter);\n}\n"
  },
  {
    "path": "libthedesk/onboarding/onboardingwelcome.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef ONBOARDINGWELCOME_H\n#define ONBOARDINGWELCOME_H\n\n#include <onboardingpage.h>\n\nnamespace Ui {\n    class OnboardingWelcome;\n}\n\nstruct OnboardingWelcomePrivate;\nclass OnboardingWelcome : public OnboardingPage {\n        Q_OBJECT\n\n    public:\n        explicit OnboardingWelcome(QWidget* parent = nullptr);\n        ~OnboardingWelcome();\n\n    private:\n        Ui::OnboardingWelcome* ui;\n        OnboardingWelcomePrivate* d;\n\n        void changeEvent(QEvent* event);\n\n        // OnboardingPage interface\n    public:\n        QString name();\n        QString displayName();\n    private slots:\n        void on_nextButton_clicked();\n        void on_languageButton_clicked();\n        void on_keyboardButton_clicked();\n\n        // QWidget interface\n    protected:\n        void paintEvent(QPaintEvent* event);\n};\n\n#endif // ONBOARDINGWELCOME_H\n"
  },
  {
    "path": "libthedesk/onboarding/onboardingwelcome.ui",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ui version=\"4.0\">\n <class>OnboardingWelcome</class>\n <widget class=\"QWidget\" name=\"OnboardingWelcome\">\n  <property name=\"geometry\">\n   <rect>\n    <x>0</x>\n    <y>0</y>\n    <width>771</width>\n    <height>518</height>\n   </rect>\n  </property>\n  <property name=\"windowTitle\">\n   <string notr=\"true\">Form</string>\n  </property>\n  <layout class=\"QVBoxLayout\" name=\"verticalLayout\">\n   <property name=\"leftMargin\">\n    <number>340</number>\n   </property>\n   <property name=\"topMargin\">\n    <number>20</number>\n   </property>\n   <property name=\"rightMargin\">\n    <number>20</number>\n   </property>\n   <property name=\"bottomMargin\">\n    <number>20</number>\n   </property>\n   <item>\n    <widget class=\"QLabel\" name=\"titleLabel\">\n     <property name=\"font\">\n      <font>\n       <pointsize>20</pointsize>\n      </font>\n     </property>\n     <property name=\"text\">\n      <string notr=\"true\">Welcome!</string>\n     </property>\n     <property name=\"wordWrap\">\n      <bool>true</bool>\n     </property>\n    </widget>\n   </item>\n   <item>\n    <widget class=\"QLabel\" name=\"descriptionLabel\">\n     <property name=\"text\">\n      <string notr=\"true\">Let's get you up and running!</string>\n     </property>\n     <property name=\"wordWrap\">\n      <bool>true</bool>\n     </property>\n    </widget>\n   </item>\n   <item>\n    <spacer name=\"verticalSpacer\">\n     <property name=\"orientation\">\n      <enum>Qt::Vertical</enum>\n     </property>\n     <property name=\"sizeHint\" stdset=\"0\">\n      <size>\n       <width>20</width>\n       <height>129</height>\n      </size>\n     </property>\n    </spacer>\n   </item>\n   <item>\n    <layout class=\"QHBoxLayout\" name=\"horizontalLayout\">\n     <item>\n      <widget class=\"QPushButton\" name=\"nextButton\">\n       <property name=\"font\">\n        <font>\n         <pointsize>15</pointsize>\n        </font>\n       </property>\n       <property name=\"text\">\n        <string>Let's go!</string>\n       </property>\n       <property name=\"icon\">\n        <iconset theme=\"go-next\">\n         <normaloff>.</normaloff>.</iconset>\n       </property>\n       <property name=\"iconSize\">\n        <size>\n         <width>32</width>\n         <height>32</height>\n        </size>\n       </property>\n      </widget>\n     </item>\n     <item>\n      <spacer name=\"horizontalSpacer\">\n       <property name=\"orientation\">\n        <enum>Qt::Horizontal</enum>\n       </property>\n       <property name=\"sizeHint\" stdset=\"0\">\n        <size>\n         <width>40</width>\n         <height>20</height>\n        </size>\n       </property>\n      </spacer>\n     </item>\n    </layout>\n   </item>\n   <item>\n    <spacer name=\"verticalSpacer_2\">\n     <property name=\"orientation\">\n      <enum>Qt::Vertical</enum>\n     </property>\n     <property name=\"sizeHint\" stdset=\"0\">\n      <size>\n       <width>20</width>\n       <height>40</height>\n      </size>\n     </property>\n    </spacer>\n   </item>\n   <item>\n    <widget class=\"QLabel\" name=\"label\">\n     <property name=\"font\">\n      <font>\n       <bold>true</bold>\n      </font>\n     </property>\n     <property name=\"text\">\n      <string>OTHER OPTIONS</string>\n     </property>\n    </widget>\n   </item>\n   <item>\n    <layout class=\"QHBoxLayout\" name=\"horizontalLayout_2\">\n     <item>\n      <widget class=\"QToolButton\" name=\"languageButton\">\n       <property name=\"text\">\n        <string>Language</string>\n       </property>\n       <property name=\"icon\">\n        <iconset theme=\"preferences-system-locale\">\n         <normaloff>.</normaloff>.</iconset>\n       </property>\n       <property name=\"iconSize\">\n        <size>\n         <width>32</width>\n         <height>32</height>\n        </size>\n       </property>\n       <property name=\"toolButtonStyle\">\n        <enum>Qt::ToolButtonTextUnderIcon</enum>\n       </property>\n       <property name=\"autoRaise\">\n        <bool>true</bool>\n       </property>\n      </widget>\n     </item>\n     <item>\n      <widget class=\"QToolButton\" name=\"keyboardButton\">\n       <property name=\"text\">\n        <string notr=\"true\">Keyboard</string>\n       </property>\n       <property name=\"icon\">\n        <iconset theme=\"input-keyboard\"/>\n       </property>\n       <property name=\"iconSize\">\n        <size>\n         <width>32</width>\n         <height>32</height>\n        </size>\n       </property>\n       <property name=\"toolButtonStyle\">\n        <enum>Qt::ToolButtonTextUnderIcon</enum>\n       </property>\n       <property name=\"autoRaise\">\n        <bool>true</bool>\n       </property>\n      </widget>\n     </item>\n     <item>\n      <widget class=\"QToolButton\" name=\"emergencyButton\">\n       <property name=\"enabled\">\n        <bool>false</bool>\n       </property>\n       <property name=\"text\">\n        <string>Emergency</string>\n       </property>\n       <property name=\"icon\">\n        <iconset theme=\"call-start\">\n         <normaloff>.</normaloff>.</iconset>\n       </property>\n       <property name=\"iconSize\">\n        <size>\n         <width>32</width>\n         <height>32</height>\n        </size>\n       </property>\n       <property name=\"toolButtonStyle\">\n        <enum>Qt::ToolButtonTextUnderIcon</enum>\n       </property>\n       <property name=\"autoRaise\">\n        <bool>true</bool>\n       </property>\n      </widget>\n     </item>\n     <item>\n      <spacer name=\"horizontalSpacer_2\">\n       <property name=\"orientation\">\n        <enum>Qt::Horizontal</enum>\n       </property>\n       <property name=\"sizeHint\" stdset=\"0\">\n        <size>\n         <width>40</width>\n         <height>20</height>\n        </size>\n       </property>\n      </spacer>\n     </item>\n    </layout>\n   </item>\n  </layout>\n </widget>\n <resources/>\n <connections/>\n</ui>\n"
  },
  {
    "path": "libthedesk/onboardingmanager.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"onboardingmanager.h\"\n\n#include \"private/onboardingmanager_p.h\"\n\nOnboardingManager::OnboardingManager(QObject* parent) : QObject(parent) {\n    d = new OnboardingManagerPrivate();\n}\n\nOnboardingManager::~OnboardingManager() {\n    delete d;\n}\n\nvoid OnboardingManager::addOnboardingStep(OnboardingPage* onboardingStep) {\n    d->steps.append(onboardingStep);\n}\n\nbool OnboardingManager::isOnboardingRunning() {\n    return d->onboardingRunning;\n}\n\nvoid OnboardingManager::setDateVisible(bool dateVisible) {\n    d->dateVisible = dateVisible;\n    emit dateVisibleChanged(dateVisible);\n}\n\nbool OnboardingManager::dateVisible() {\n    return d->dateVisible;\n}\n\nbool OnboardingManager::isSystemOnboarding() {\n    return d->isSystemOnboarding;\n}\n\nQList<OnboardingPage*> OnboardingManager::onboardingSteps() {\n    return d->steps;\n}\n\nvoid OnboardingManager::setIsSystemOnboarding(bool isSystemOnboarding) {\n    d->isSystemOnboarding = isSystemOnboarding;\n}\n"
  },
  {
    "path": "libthedesk/onboardingmanager.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef ONBOARDINGMANAGER_H\n#define ONBOARDINGMANAGER_H\n\n#include <QObject>\n\nclass Onboarding;\nclass OnboardingController;\nclass OnboardingPage;\nstruct OnboardingManagerPrivate;\nclass OnboardingManager : public QObject {\n        Q_OBJECT\n    public:\n        explicit OnboardingManager(QObject* parent = nullptr);\n        ~OnboardingManager();\n\n        void addOnboardingStep(OnboardingPage* onboardingStep);\n        bool isOnboardingRunning();\n\n        void setDateVisible(bool dateVisible);\n        bool dateVisible();\n\n        bool isSystemOnboarding();\n\n    signals:\n        void onboardingRequired();\n\n        //Call these functions to step forwards/backwards in the onboarding\n        void nextStep();\n        void previousStep();\n\n        void dateVisibleChanged(bool dateVisible);\n\n    protected:\n        friend Onboarding;\n        friend OnboardingController;\n\n        OnboardingManagerPrivate* d;\n        QList<OnboardingPage*> onboardingSteps();\n        void setIsSystemOnboarding(bool isSystemOnboarding);\n};\n\n#endif // ONBOARDINGMANAGER_H\n"
  },
  {
    "path": "libthedesk/onboardingpage.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"onboardingpage.h\"\n\nOnboardingPage::OnboardingPage(QWidget* parent) : QWidget(parent) {\n\n}\n\nvoid OnboardingPage::pageActivated() {\n    //noop\n}\n"
  },
  {
    "path": "libthedesk/onboardingpage.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef ONBOARDINGPAGE_H\n#define ONBOARDINGPAGE_H\n\n#include <QWidget>\n\nclass OnboardingPage : public QWidget {\n        Q_OBJECT\n    public:\n        explicit OnboardingPage(QWidget* parent = nullptr);\n\n        virtual QString name() = 0;\n        virtual QString displayName() = 0;\n\n        virtual void pageActivated();\n\n    signals:\n\n};\n\n#endif // ONBOARDINGPAGE_H\n"
  },
  {
    "path": "libthedesk/plugins/plugininterface.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef PLUGININTERFACE_H\n#define PLUGININTERFACE_H\n\n#include <QObject>\n\nclass PluginInterface {\n    public:\n        virtual ~PluginInterface() {}\n\n        virtual void activate() = 0;\n        virtual void deactivate() = 0;\n};\n\n#define PluginInterface_iid \"com.vicr123.thedesk.PluginInterface/1.0\"\nQ_DECLARE_INTERFACE(PluginInterface, PluginInterface_iid);\n\n#endif // PLUGININTERFACE_H\n"
  },
  {
    "path": "libthedesk/plugins/pluginmanager.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"pluginmanager.h\"\n\n#include <QSharedPointer>\n#include <QApplication>\n#include <QDir>\n#include <QDirIterator>\n#include <QPluginLoader>\n#include <QDebug>\n#include <QUuid>\n#include <tsettings.h>\n#include \"plugininterface.h\"\n\ntypedef QSharedPointer<QPluginLoader> QPluginLoaderPtr;\n\nstruct PluginManagerPrivate {\n    PluginManager* instance = nullptr;\n\n    QList<QUuid> loadedPlugins;\n    QList<QUuid> erroredPlugins;\n    QMap<QUuid, QPluginLoaderPtr> foundPlugins;\n\n    tSettings* settings;\n    QList<QUuid> blacklistedPlugins;\n\n    bool safeMode = false;\n};\n\nPluginManagerPrivate* PluginManager::d = new PluginManagerPrivate();\n\nPluginManager* PluginManager::instance() {\n    if (!d->instance) d->instance = new PluginManager();\n    return d->instance;\n}\n\nvoid PluginManager::setSafeMode(bool safeMode) {\n    d->safeMode = safeMode;\n}\n\nbool PluginManager::isSafeMode() {\n    return d->safeMode;\n}\n\nvoid PluginManager::scanPlugins() {\n    //Load all available plugins\n    QStringList searchPaths = {\n        QDir::cleanPath(qApp->applicationDirPath() + \"/../plugins\"),\n        QString(SYSTEM_LIBRARY_DIRECTORY).append(\"/thedesk/plugins\")\n    };\n    QStringList seenUuids;\n\n    for (QString searchPath : searchPaths) {\n        QDirIterator iterator(searchPath, {\"*.so\"}, QDir::NoFilter, QDirIterator::Subdirectories);\n        while (iterator.hasNext()) {\n            QPluginLoaderPtr loader(new QPluginLoader(iterator.next()));\n            QJsonObject metadata = loader->metaData().value(\"MetaData\").toObject();\n            if (metadata.isEmpty()) continue;\n\n            QUuid uuid = QUuid::fromString(metadata.value(\"uuid\").toString());\n            if (d->foundPlugins.contains(uuid)) continue;\n\n            //Register this plugin\n            d->foundPlugins.insert(uuid, loader);\n\n            if (!d->safeMode) {\n                //Load this plugin\n                this->activatePlugin(uuid);\n            }\n        }\n    }\n}\n\nvoid PluginManager::activatePlugin(QUuid uuid) {\n    if (!d->foundPlugins.contains(uuid)) return;\n    if (d->blacklistedPlugins.contains(uuid)) return;\n    QPluginLoaderPtr loader = d->foundPlugins.value(uuid);\n\n    d->erroredPlugins.removeAll(uuid);\n\n    if (!loader->load()) {\n        //Error!\n        d->erroredPlugins.append(uuid);\n        emit pluginsChanged();\n        return;\n    }\n\n    PluginInterface* instance = qobject_cast<PluginInterface*>(loader->instance());\n    if (!instance) {\n        //Error!\n        loader->unload();\n        emit pluginsChanged();\n        return;\n    }\n\n    instance->activate();\n    d->loadedPlugins.append(uuid);\n    emit pluginsChanged();\n}\n\nvoid PluginManager::deactivatePlugin(QUuid uuid) {\n    if (!d->loadedPlugins.contains(uuid)) return;\n    QPluginLoaderPtr loader = d->foundPlugins.value(uuid);\n    PluginInterface* instance = qobject_cast<PluginInterface*>(loader->instance());\n\n    instance->deactivate();\n    loader->unload();\n    d->loadedPlugins.removeOne(uuid);\n    emit pluginsChanged();\n}\n\nvoid PluginManager::blacklistPlugin(QUuid uuid) {\n    if (d->blacklistedPlugins.contains(uuid)) return;\n\n    d->blacklistedPlugins.append(uuid);\n    QStringList blacklisted;\n    for (QUuid uuid : d->blacklistedPlugins) {\n        blacklisted.append(uuid.toString());\n    }\n    d->settings->setDelimitedList(\"Plugins/blacklist\", blacklisted);\n    d->settings->sync();\n\n    //Deactivate the plugin after we add it to the blacklist in case the plugin is having problems deactivating\n    //At least if we crash, the plugin will be deactivated\n    if (d->loadedPlugins.contains(uuid)) deactivatePlugin(uuid);\n}\n\nvoid PluginManager::removeBlacklistPlugin(QUuid uuid) {\n    if (!d->blacklistedPlugins.contains(uuid)) return;\n\n    d->blacklistedPlugins.removeAll(uuid);\n    QStringList blacklisted;\n    for (QUuid uuid : d->blacklistedPlugins) {\n        blacklisted.append(uuid.toString());\n    }\n    d->settings->setDelimitedList(\"Plugins/blacklist\", blacklisted);\n    d->settings->sync();\n}\n\nQList<QUuid> PluginManager::availablePlugins() {\n    return d->foundPlugins.keys();\n}\n\nQList<QUuid> PluginManager::loadedPlugins() {\n    return d->loadedPlugins;\n}\n\nQList<QUuid> PluginManager::erroredPlugins() {\n    return d->erroredPlugins;\n}\n\nQList<QUuid> PluginManager::blacklistedPlugins() {\n    return d->blacklistedPlugins;\n}\n\nQJsonValue PluginManager::pluginMetadata(QUuid plugin, QString key) {\n    QPluginLoaderPtr loader = d->foundPlugins.value(plugin);\n    QJsonObject metadata = loader->metaData().value(\"MetaData\").toObject();\n    QLocale locale;\n\n    QStringList languages = locale.uiLanguages();\n    languages.append(\"\");\n    for (QString language : languages) {\n        QJsonValue root = metadata;\n        if (!language.isEmpty()) {\n            root = metadata.value(language);\n        }\n\n        bool success = true;\n        QStringList parts = key.split(\".\");\n        for (QString part : parts) {\n            if (root.isObject()) {\n                root = root.toObject().value(part);\n            } else {\n                success = false;\n            }\n        }\n\n        if (success) return root;\n    }\n\n    return QJsonValue();\n}\n\nQString PluginManager::pluginErrorReason(QUuid plugin) {\n    QPluginLoaderPtr loader = d->foundPlugins.value(plugin);\n    return loader->errorString();\n}\n\nPluginManager::PluginManager(QObject* parent) : QObject(parent) {\n    d->settings = new tSettings();\n\n    //Find out which plugins are blacklisted\n    connect(d->settings, &tSettings::settingChanged, this, [ = ](QString key) {\n        if (key == \"Plugins/blacklist\") updateBlacklistedPlugins();\n    });\n    updateBlacklistedPlugins();\n}\n\nvoid PluginManager::updateBlacklistedPlugins() {\n    d->blacklistedPlugins.clear();\n    for (QString plugin : d->settings->delimitedList(\"Plugins/blacklist\")) {\n        d->blacklistedPlugins.append(QUuid::fromString(plugin));\n    }\n    emit pluginsChanged();\n}\n"
  },
  {
    "path": "libthedesk/plugins/pluginmanager.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef PLUGINMANAGER_H\n#define PLUGINMANAGER_H\n\n#include <QObject>\n\nstruct PluginManagerPrivate;\nclass PluginManager : public QObject {\n        Q_OBJECT\n    public:\n        static PluginManager* instance();\n\n        void setSafeMode(bool safeMode);\n        bool isSafeMode();\n\n        void scanPlugins();\n\n        void activatePlugin(QUuid uuid);\n        void deactivatePlugin(QUuid uuid);\n\n        void blacklistPlugin(QUuid uuid);\n        void removeBlacklistPlugin(QUuid uuid);\n\n        QList<QUuid> availablePlugins();\n        QList<QUuid> loadedPlugins();\n        QList<QUuid> erroredPlugins();\n        QList<QUuid> blacklistedPlugins();\n        QJsonValue pluginMetadata(QUuid plugin, QString key);\n        QString pluginErrorReason(QUuid plugin);\n\n    signals:\n        void pluginsChanged();\n\n    private:\n        explicit PluginManager(QObject* parent = nullptr);\n        static PluginManagerPrivate* d;\n\n        void updateBlacklistedPlugins();\n};\n\n#endif // PLUGINMANAGER_H\n"
  },
  {
    "path": "libthedesk/powermanager.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"powermanager.h\"\n\n#include <QApplication>\n#include <QDBusConnection>\n#include <QDBusInterface>\n#include <QDBusMessage>\n#include <QPointer>\n#include <QProcess>\n\n#include \"keygrab.h\"\n#include <QKeySequence>\n#include <Wm/desktopwm.h>\n#include <tnotification.h>\n\n#include \"onboardingmanager.h\"\n#include \"statemanager.h\"\n\nstruct PowerManagerPrivate {\n        QPointer<QProcess> lockScreenProcess;\n        QDBusInterface* logindInterface;\n};\n\nPowerManager::PowerManager(QObject* parent) :\n    QObject(parent) {\n    d = new PowerManagerPrivate();\n\n    connect(new KeyGrab(QKeySequence(Qt::Key_L | Qt::MetaModifier), \"lockScreen\"), &KeyGrab::activated, this, [=] {\n        this->performPowerOperation(PowerManager::Lock);\n    });\n\n    // Find this session ID\n    d->logindInterface = new QDBusInterface(\"org.freedesktop.login1\", \"/org/freedesktop/login1/session/self\", \"org.freedesktop.login1.Session\", QDBusConnection::systemBus(), this);\n    QString id = d->logindInterface->property(\"Id\").toString();\n    if (!id.isEmpty()) {\n        QDBusMessage sessionRequest = QDBusMessage::createMethodCall(\"org.freedesktop.login1\", \"/org/freedesktop/login1\", \"org.freedesktop.login1.Manager\", \"GetSession\");\n        sessionRequest.setArguments({id});\n        QDBusMessage sessionReply = QDBusConnection::systemBus().call(sessionRequest);\n        if (sessionReply.type() == QDBusMessage::ReplyMessage) {\n            // Register event handlers for logind\n            QDBusObjectPath path = sessionReply.arguments().first().value<QDBusObjectPath>();\n            QDBusConnection::systemBus().connect(\"org.freedesktop.login1\", path.path(), \"org.freedesktop.login1.Session\", \"Lock\", this, SLOT(logindRequestLock()));\n            QDBusConnection::systemBus().connect(\"org.freedesktop.login1\", path.path(), \"org.freedesktop.login1.Session\", \"Unlock\", this, SLOT(logindRequestUnlock()));\n        }\n    }\n}\n\nPowerManager::~PowerManager() {\n    delete d;\n}\n\ntPromise<void>* PowerManager::showPowerOffConfirmation(PowerManager::PowerOperation operation, QString message, QStringList flags) {\n    return tPromise<void>::runOnSameThread([=](tPromiseFunctions<void>::SuccessFunction res, tPromiseFunctions<void>::FailureFunction rej) {\n        Q_UNUSED(rej)\n\n        emit powerOffConfirmationRequested(operation, message, flags, res);\n    });\n}\n\nvoid PowerManager::logindRequestLock() {\n    this->performPowerOperation(Lock);\n}\n\nvoid PowerManager::logindRequestUnlock() {\n    if (d->lockScreenProcess) d->lockScreenProcess->terminate();\n    // Process will be automatically deleted\n}\n\nvoid PowerManager::performPowerOperation(PowerManager::PowerOperation operation, QStringList flags) {\n    emit powerOffOperationCommencing(operation);\n\n    switch (operation) {\n        case PowerManager::PowerOff:\n        case PowerManager::Reboot:\n        case PowerManager::Suspend:\n        case PowerManager::Hibernate:\n            {\n                QMap<PowerManager::PowerOperation, QString> methods = {\n                    {PowerManager::PowerOff,  \"PowerOff\" },\n                    {PowerManager::Reboot,    \"Reboot\"   },\n                    {PowerManager::Suspend,   \"Suspend\"  },\n                    {PowerManager::Hibernate, \"Hibernate\"}\n                };\n\n                if (flags.contains(\"update\")) {\n                    // Ask PackageKit to prepare for updates\n\n                    QDBusMessage message = QDBusMessage::createMethodCall(\"org.freedesktop.PackageKit\", \"/org/freedesktop/PackageKit\", \"org.freedesktop.PackageKit.Offline\", \"Trigger\");\n                    message.setArguments({operation == PowerManager::Reboot ? \"reboot\" : \"shutdown\"});\n                    QDBusMessage msg = QDBusConnection::systemBus().call(message);\n\n                    // Fall through\n                }\n\n                if (flags.contains(\"setup\")) {\n                    QDBusMessage message = QDBusMessage::createMethodCall(\"org.freedesktop.login1\", \"/org/freedesktop/login1\", \"org.freedesktop.login1.Manager\", \"SetRebootToFirmwareSetup\");\n                    message.setArguments({true});\n                    QDBusMessage msg = QDBusConnection::systemBus().call(message);\n\n                    // Fall through\n                }\n\n                QDBusMessage message = QDBusMessage::createMethodCall(\"org.freedesktop.login1\", \"/org/freedesktop/login1\", \"org.freedesktop.login1.Manager\", methods.value(operation));\n                message.setArguments({true});\n                QDBusConnection::systemBus().call(message);\n                break;\n            }\n        case PowerManager::LogOut:\n            // Quit theDesk\n            qApp->exit();\n            break;\n        case PowerManager::Lock:\n            // Lock the screen\n            if (d->lockScreenProcess) return;                                     // Screen is already locked\n            if (StateManager::onboardingManager()->isOnboardingRunning()) return; // Onboarding is currently running\n\n            d->lockScreenProcess = new QProcess();\n            connect(d->lockScreenProcess, QOverload<int, QProcess::ExitStatus>::of(&QProcess::finished), this, [this] {\n                // Tell logind that we're not locked\n                d->logindInterface->asyncCall(\"SetLockedHint\", false);\n\n                d->lockScreenProcess->deleteLater();\n            });\n            connect(d->lockScreenProcess, &QProcess::errorOccurred, this, [this](QProcess::ProcessError error) {\n                if (error == QProcess::FailedToStart) {\n                    // Send a notification\n                    auto notification = new tNotification();\n                    notification->setSummary(tr(\"Unable to lock screen\"));\n                    notification->setText(tr(\"Sorry, the screen lock was unable to be started.\"));\n                    notification->post();\n\n                    // Tell logind that we're not locked\n                    d->logindInterface->asyncCall(\"SetLockedHint\", false);\n\n                    d->lockScreenProcess->deleteLater();\n                }\n            });\n\n            // TODO: Don't hardcode!\n            d->lockScreenProcess->start(\"/usr/lib/td-locker\", QStringList()); // Lock Screen\n\n            // Tell logind that we're locked\n            d->logindInterface->asyncCall(\"SetLockedHint\", true);\n            break;\n        case PowerManager::SwitchUsers:\n            {\n                QDBusMessage message = QDBusMessage::createMethodCall(\"org.freedesktop.DisplayManager\", qEnvironmentVariable(\"XDG_SEAT_PATH\"), \"org.freedesktop.DisplayManager.Seat\", \"SwitchToGreeter\");\n                QDBusConnection::systemBus().call(message);\n                break;\n            }\n        case PowerManager::TurnOffScreen:\n            DesktopWm::setScreenOff(true);\n            break;\n        case PowerManager::All:\n            // Doesn't make sense ???\n            break;\n    }\n}\n"
  },
  {
    "path": "libthedesk/powermanager.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef POWERMANAGER_H\n#define POWERMANAGER_H\n\n#include <QObject>\n#include <tpromise.h>\n\nclass EndSession;\nclass EventHandler;\nclass SleepMonitor;\nstruct PowerManagerPrivate;\nclass PowerManager : public QObject {\n        Q_OBJECT\n    public:\n        enum PowerOperation {\n            PowerOff,\n            Reboot,\n            LogOut,\n            Suspend,\n            Lock,\n            TurnOffScreen,\n            SwitchUsers,\n            Hibernate,\n            All\n        };\n\n        explicit PowerManager(QObject* parent = nullptr);\n        ~PowerManager();\n\n        tPromise<void>* showPowerOffConfirmation(PowerOperation operation = All, QString message = \"\", QStringList flags = {});\n\n    private slots:\n        void logindRequestLock();\n        void logindRequestUnlock();\n\n    signals:\n        void powerOffConfirmationRequested(PowerOperation operation, QString message, QStringList flags, tPromiseFunctions<void>::SuccessFunction cb);\n        void powerOffOperationCommencing(PowerOperation operation);\n\n    protected:\n        friend EndSession;\n        friend EventHandler;\n        friend SleepMonitor;\n        void performPowerOperation(PowerOperation operation, QStringList flags = {});\n\n    private:\n        PowerManagerPrivate* d;\n};\n\n#endif // POWERMANAGER_H\n"
  },
  {
    "path": "libthedesk/private/keyboardlayoutmodel.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2022 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"keyboardlayoutmodel.h\"\n\n#include <Wm/desktopwm.h>\n\nstruct KeyboardLayoutModelPrivate {\n    QStringList layouts;\n};\n\nKeyboardLayoutModel::KeyboardLayoutModel(QObject* parent)\n    : QAbstractListModel(parent) {\n    d = new KeyboardLayoutModelPrivate();\n    d->layouts = DesktopWm::availableKeyboardLayouts();\n\n    std::sort(d->layouts.begin(), d->layouts.end(), [ = ](const QString & first, const QString & second) {\n        return DesktopWm::keyboardLayoutDescription(first).localeAwareCompare(DesktopWm::keyboardLayoutDescription(second)) < 0;\n    });\n}\n\nKeyboardLayoutModel::~KeyboardLayoutModel() {\n    delete d;\n}\n\nint KeyboardLayoutModel::rowCount(const QModelIndex& parent) const {\n    if (parent.isValid()) return 0;\n\n    return d->layouts.length();\n}\n\nQVariant KeyboardLayoutModel::data(const QModelIndex& index, int role) const {\n    if (!index.isValid()) return QVariant();\n\n    QString layout = d->layouts.at(index.row());\n\n    switch (role) {\n        case Qt::DisplayRole:\n            return DesktopWm::keyboardLayoutDescription(layout);\n        case Qt::UserRole:\n            return layout;\n    }\n\n    return QVariant();\n}\n"
  },
  {
    "path": "libthedesk/private/keyboardlayoutmodel.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2022 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef KEYBOARDLAYOUTMODEL_H\n#define KEYBOARDLAYOUTMODEL_H\n\n#include <QAbstractListModel>\n\nstruct KeyboardLayoutModelPrivate;\nclass KeyboardLayoutModel : public QAbstractListModel {\n        Q_OBJECT\n\n    public:\n        explicit KeyboardLayoutModel(QObject* parent = nullptr);\n        ~KeyboardLayoutModel();\n\n        // Basic functionality:\n        int rowCount(const QModelIndex& parent = QModelIndex()) const override;\n\n        QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const override;\n\n    private:\n        KeyboardLayoutModelPrivate* d;\n};\n\n#endif // KEYBOARDLAYOUTMODEL_H\n"
  },
  {
    "path": "libthedesk/private/keyboardlayoutselector.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2022 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"keyboardlayoutselector.h\"\n#include \"ui_keyboardlayoutselector.h\"\n\n#include \"keyboardlayoutmodel.h\"\n\nstruct KeyboardLayoutSelectorPrivate {\n    KeyboardLayoutModel* model;\n};\n\nKeyboardLayoutSelector::KeyboardLayoutSelector(QWidget* parent) :\n    QWidget(parent),\n    ui(new Ui::KeyboardLayoutSelector) {\n    ui->setupUi(this);\n    d = new KeyboardLayoutSelectorPrivate();\n\n    ui->titleLabel->setBackButtonShown(true);\n\n    d->model = new KeyboardLayoutModel(this);\n    ui->keyboardLayoutSelection->setModel(d->model);\n}\n\nKeyboardLayoutSelector::~KeyboardLayoutSelector() {\n    delete ui;\n    delete d;\n}\n\nvoid KeyboardLayoutSelector::on_keyboardLayoutSelection_activated(const QModelIndex& index) {\n    emit accepted(index.data(Qt::UserRole).toString());\n}\n\nvoid KeyboardLayoutSelector::on_titleLabel_backButtonClicked() {\n    emit rejected();\n}\n\n"
  },
  {
    "path": "libthedesk/private/keyboardlayoutselector.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2022 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef KEYBOARDLAYOUTSELECTOR_H\n#define KEYBOARDLAYOUTSELECTOR_H\n\n#include <QWidget>\n\nnamespace Ui {\n    class KeyboardLayoutSelector;\n}\n\nstruct KeyboardLayoutSelectorPrivate;\nclass KeyboardLayoutSelector : public QWidget {\n        Q_OBJECT\n\n    public:\n        explicit KeyboardLayoutSelector(QWidget* parent = nullptr);\n        ~KeyboardLayoutSelector();\n\n    signals:\n        void rejected();\n        void accepted(QString layout);\n\n    private slots:\n        void on_keyboardLayoutSelection_activated(const QModelIndex& index);\n\n        void on_titleLabel_backButtonClicked();\n\n    private:\n        Ui::KeyboardLayoutSelector* ui;\n        KeyboardLayoutSelectorPrivate* d;\n};\n\n#endif // KEYBOARDLAYOUTSELECTOR_H\n"
  },
  {
    "path": "libthedesk/private/keyboardlayoutselector.ui",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ui version=\"4.0\">\n <class>KeyboardLayoutSelector</class>\n <widget class=\"QWidget\" name=\"KeyboardLayoutSelector\">\n  <property name=\"geometry\">\n   <rect>\n    <x>0</x>\n    <y>0</y>\n    <width>400</width>\n    <height>300</height>\n   </rect>\n  </property>\n  <property name=\"windowTitle\">\n   <string notr=\"true\">Form</string>\n  </property>\n  <layout class=\"QVBoxLayout\" name=\"verticalLayout\">\n   <property name=\"spacing\">\n    <number>0</number>\n   </property>\n   <property name=\"leftMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"topMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"rightMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"bottomMargin\">\n    <number>0</number>\n   </property>\n   <item>\n    <widget class=\"tTitleLabel\" name=\"titleLabel\">\n     <property name=\"text\">\n      <string>Select a keyboard layout</string>\n     </property>\n    </widget>\n   </item>\n   <item>\n    <widget class=\"QListView\" name=\"keyboardLayoutSelection\">\n     <property name=\"frameShape\">\n      <enum>QFrame::NoFrame</enum>\n     </property>\n    </widget>\n   </item>\n  </layout>\n </widget>\n <customwidgets>\n  <customwidget>\n   <class>tTitleLabel</class>\n   <extends>QLabel</extends>\n   <header location=\"global\">ttitlelabel.h</header>\n   <slots>\n    <signal>backButtonClicked()</signal>\n   </slots>\n  </customwidget>\n </customwidgets>\n <resources/>\n <connections/>\n</ui>\n"
  },
  {
    "path": "libthedesk/private/localeselector.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"localeselector.h\"\n#include \"ui_localeselector.h\"\n\nstruct LocaleSelectorPrivate {\n    QLocale::Language currentLanguage;\n};\n\nLocaleSelector::LocaleSelector(QWidget* parent) :\n    QWidget(parent),\n    ui(new Ui::LocaleSelector) {\n    ui->setupUi(this);\n\n    d = new LocaleSelectorPrivate();\n    ui->titleLabel->setBackButtonShown(true);\n    ui->languageTitle->setBackButtonShown(true);\n    ui->stackedWidget->setCurrentAnimation(tStackedWidget::SlideHorizontal);\n\n    QList<QListWidgetItem*> languages;\n    for (int i = QLocale::C + 1; i < QLocale::LastLanguage; i++) {\n#if !QT_VERSION_CHECK(5, 15, 0)\n        if (i == QLocale::UncodedLanguages) continue;\n#endif\n        QLocale locale(static_cast<QLocale::Language>(i));\n        if (locale.language() != i) continue;\n        if (!locale.nativeLanguageName().isEmpty()) {\n            QString text;\n            QString native = locale.nativeLanguageName();\n            if (locale.language() == QLocale::English) {\n                text = \"English\"; //Do not localise\n            } else if (native.isEmpty()) {\n                text = QLocale::languageToString(locale.language());\n            } else {\n                text = QStringLiteral(\"%1 (%2)\").arg(native).arg(QLocale::languageToString(locale.language()));\n            }\n\n            QListWidgetItem* item = new QListWidgetItem();\n            item->setText(text);\n            item->setData(Qt::UserRole, i);\n            languages.append(item);\n        }\n    }\n\n    std::sort(languages.begin(), languages.end(), [ = ](const QListWidgetItem * first, const QListWidgetItem * second) {\n        return first->text().localeAwareCompare(second->text()) < 0;\n    });\n\n    for (QListWidgetItem* item : languages) {\n        ui->languageSelection->addItem(item);\n    }\n}\n\nLocaleSelector::~LocaleSelector() {\n    delete d;\n    delete ui;\n}\n\nvoid LocaleSelector::on_titleLabel_backButtonClicked() {\n    emit rejected();\n}\n\nvoid LocaleSelector::on_languageSelection_itemActivated(QListWidgetItem* item) {\n    QLocale::Language lang = static_cast<QLocale::Language>(item->data(Qt::UserRole).toInt());\n    d->currentLanguage = lang;\n    QList<QLocale::Country> countries = QLocale::countriesForLanguage(lang);\n    if (countries.count() == 1) {\n        emit accepted(QLocale(lang, countries.first()));\n    } else {\n        ui->localeSelection->clear();\n\n        for (QLocale::Country country : countries) {\n            QLocale locale(lang, country);\n            QListWidgetItem* item = new QListWidgetItem();\n            item->setText(QStringLiteral(\"%1 (%2)\").arg(QLocale::countryToString(country)).arg(locale.nativeCountryName()));\n            item->setData(Qt::UserRole, country);\n            ui->localeSelection->addItem(item);\n        }\n\n        ui->languageTitle->setText(QLocale::languageToString(lang));\n        ui->stackedWidget->setCurrentWidget(ui->localePage);\n    }\n}\n\nvoid LocaleSelector::on_localeSelection_itemActivated(QListWidgetItem* item) {\n    QLocale::Country country = static_cast<QLocale::Country>(item->data(Qt::UserRole).toInt());\n    emit accepted(QLocale(d->currentLanguage, country));\n}\n\nvoid LocaleSelector::on_languageTitle_backButtonClicked() {\n    ui->stackedWidget->setCurrentWidget(ui->languagePage);\n}\n"
  },
  {
    "path": "libthedesk/private/localeselector.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef LOCALESELECTOR_H\n#define LOCALESELECTOR_H\n\n#include <QWidget>\n#include <QLocale>\n#include <QListWidgetItem>\n\nnamespace Ui {\n    class LocaleSelector;\n}\n\nstruct LocaleSelectorPrivate;\nclass LocaleSelector : public QWidget {\n        Q_OBJECT\n\n    public:\n        explicit LocaleSelector(QWidget* parent = nullptr);\n        ~LocaleSelector();\n\n    signals:\n        void rejected();\n        void accepted(QLocale locale);\n\n    private slots:\n        void on_titleLabel_backButtonClicked();\n\n        void on_languageSelection_itemActivated(QListWidgetItem* item);\n\n        void on_localeSelection_itemActivated(QListWidgetItem* item);\n\n        void on_languageTitle_backButtonClicked();\n\n    private:\n        Ui::LocaleSelector* ui;\n        LocaleSelectorPrivate* d;\n};\n\n#endif // LOCALESELECTOR_H\n"
  },
  {
    "path": "libthedesk/private/localeselector.ui",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ui version=\"4.0\">\n <class>LocaleSelector</class>\n <widget class=\"QWidget\" name=\"LocaleSelector\">\n  <property name=\"geometry\">\n   <rect>\n    <x>0</x>\n    <y>0</y>\n    <width>503</width>\n    <height>381</height>\n   </rect>\n  </property>\n  <property name=\"windowTitle\">\n   <string notr=\"true\">Form</string>\n  </property>\n  <layout class=\"QVBoxLayout\" name=\"verticalLayout\">\n   <property name=\"spacing\">\n    <number>0</number>\n   </property>\n   <property name=\"leftMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"topMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"rightMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"bottomMargin\">\n    <number>0</number>\n   </property>\n   <item>\n    <widget class=\"tStackedWidget\" name=\"stackedWidget\">\n     <property name=\"currentIndex\">\n      <number>0</number>\n     </property>\n     <widget class=\"QWidget\" name=\"languagePage\">\n      <layout class=\"QVBoxLayout\" name=\"verticalLayout_2\">\n       <property name=\"spacing\">\n        <number>0</number>\n       </property>\n       <property name=\"leftMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"topMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"rightMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"bottomMargin\">\n        <number>0</number>\n       </property>\n       <item>\n        <widget class=\"tTitleLabel\" name=\"titleLabel\">\n         <property name=\"text\">\n          <string>Select a locale</string>\n         </property>\n        </widget>\n       </item>\n       <item>\n        <widget class=\"QListWidget\" name=\"languageSelection\">\n         <property name=\"frameShape\">\n          <enum>QFrame::NoFrame</enum>\n         </property>\n        </widget>\n       </item>\n      </layout>\n     </widget>\n     <widget class=\"QWidget\" name=\"localePage\">\n      <layout class=\"QVBoxLayout\" name=\"verticalLayout_3\">\n       <property name=\"spacing\">\n        <number>0</number>\n       </property>\n       <property name=\"leftMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"topMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"rightMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"bottomMargin\">\n        <number>0</number>\n       </property>\n       <item>\n        <widget class=\"tTitleLabel\" name=\"languageTitle\">\n         <property name=\"text\">\n          <string notr=\"true\">Language Name</string>\n         </property>\n        </widget>\n       </item>\n       <item>\n        <widget class=\"QListWidget\" name=\"localeSelection\">\n         <property name=\"frameShape\">\n          <enum>QFrame::NoFrame</enum>\n         </property>\n        </widget>\n       </item>\n      </layout>\n     </widget>\n    </widget>\n   </item>\n  </layout>\n </widget>\n <customwidgets>\n  <customwidget>\n   <class>tTitleLabel</class>\n   <extends>QLabel</extends>\n   <header location=\"global\">ttitlelabel.h</header>\n   <slots>\n    <signal>backButtonClicked()</signal>\n   </slots>\n  </customwidget>\n  <customwidget>\n   <class>tStackedWidget</class>\n   <extends>QStackedWidget</extends>\n   <header location=\"global\">tstackedwidget.h</header>\n   <container>1</container>\n   <slots>\n    <signal>switchingFrame(int)</signal>\n   </slots>\n  </customwidget>\n </customwidgets>\n <resources/>\n <connections/>\n</ui>\n"
  },
  {
    "path": "libthedesk/private/onboardingmanager_p.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef ONBOARDINGMANAGER_P_H\n#define ONBOARDINGMANAGER_P_H\n\n#include <QList>\nclass OnboardingPage;\n\nstruct OnboardingManagerPrivate {\n    QList<OnboardingPage*> steps;\n    bool onboardingRunning = false;\n    bool dateVisible = true;\n    bool isSystemOnboarding = false;\n};\n\n#endif // ONBOARDINGMANAGER_P_H\n"
  },
  {
    "path": "libthedesk/private/quickwidgetcontainer.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"quickwidgetcontainer.h\"\n#include \"ui_quickwidgetcontainer.h\"\n\n#include \"chunk.h\"\n#include <QPainter>\n#include <QScreen>\n#include <QTimer>\n#include <Wm/desktopwm.h>\n#include <barmanager.h>\n#include <libcontemporary_global.h>\n#include <statemanager.h>\n#include <tlogger.h>\n#include <tvariantanimation.h>\n\nstruct QuickWidgetContainerPrivate {\n        QWidget* parentChunk;\n        QWidget* quickWidget;\n        int pointX = 0;\n\n        tVariantAnimation* yAnim;\n        tVariantAnimation* opacityAnim;\n        bool isShowing = false;\n\n        BarManager::BarLockPtr barLock;\n};\n\nQuickWidgetContainer::QuickWidgetContainer(QWidget* parent) :\n    QWidget(parent),\n    ui(new Ui::QuickWidgetContainer) {\n    ui->setupUi(this);\n\n    //    this->setWindowFlags(Qt::Dialog | Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint | Qt::Popup);\n    this->setWindowFlags(Qt::Popup);\n    this->setAttribute(Qt::WA_TranslucentBackground);\n\n    d = new QuickWidgetContainerPrivate();\n    d->parentChunk = parent;\n\n    d->yAnim = new tVariantAnimation(this);\n    d->yAnim->setEasingCurve(QEasingCurve::OutCubic);\n    d->yAnim->setDuration(100);\n    connect(d->yAnim, &tVariantAnimation::valueChanged, this, [=](QVariant value) {\n        this->move(this->x(), value.toInt());\n    });\n\n    d->opacityAnim = new tVariantAnimation(this);\n    d->opacityAnim->setStartValue(0.0);\n    d->opacityAnim->setEndValue(1.0);\n    d->opacityAnim->setEasingCurve(QEasingCurve::OutCubic);\n    d->opacityAnim->setDuration(100);\n    connect(d->opacityAnim, &tVariantAnimation::valueChanged, this, [=](QVariant value) {\n        this->setWindowOpacity(value.toDouble());\n    });\n    connect(d->opacityAnim, &tVariantAnimation::finished, this, [=] {\n        if (d->opacityAnim->direction() == tVariantAnimation::Backward) this->hide();\n    });\n\n    this->setWindowOpacity(0);\n    this->setContentsMargins(1, 6, 1, 1);\n    ui->chunkContainerLayout->installEventFilter(this);\n}\n\nQuickWidgetContainer::~QuickWidgetContainer() {\n    delete ui;\n    delete d;\n}\n\nQSize QuickWidgetContainer::sizeHint() const {\n    QSize sizeHint;\n    Chunk* chunk = qobject_cast<Chunk*>(d->parentChunk);\n    if (chunk) {\n        sizeHint = chunk->quickWidget()->sizeHint();\n    } else {\n        sizeHint = d->quickWidget->sizeHint();\n    }\n\n    return sizeHint.grownBy(this->contentsMargins());\n}\n\nvoid QuickWidgetContainer::showContainer() {\n    Chunk* chunk = qobject_cast<Chunk*>(d->parentChunk);\n    if (chunk) {\n        ui->chunkContainerLayout->addWidget(chunk->quickWidget());\n        chunk->quickWidget()->installEventFilter(this);\n    } else {\n        ui->chunkContainerLayout->addWidget(d->quickWidget);\n        d->quickWidget->installEventFilter(this);\n    }\n    calculatePosition();\n\n    d->isShowing = true;\n\n    this->show();\n    DesktopWm::setSystemWindow(this, DesktopWm::SystemWindowTypeSkipTaskbarOnly);\n    this->activateWindow();\n    calculatePosition();\n\n    d->yAnim->setDirection(tVariantAnimation::Forward);\n    d->opacityAnim->setDirection(tVariantAnimation::Forward);\n    d->yAnim->start();\n    d->opacityAnim->start();\n\n    d->barLock = StateManager::barManager()->acquireLock();\n    emit showing();\n}\n\nvoid QuickWidgetContainer::hideContainer() {\n    d->yAnim->setDirection(tVariantAnimation::Backward);\n    d->opacityAnim->setDirection(tVariantAnimation::Backward);\n    d->yAnim->start();\n    d->opacityAnim->start();\n\n    d->isShowing = false;\n\n    d->barLock->unlock();\n    emit hiding();\n}\n\nbool QuickWidgetContainer::isShowing() {\n    return d->isShowing;\n}\n\nvoid QuickWidgetContainer::setQuickWidget(QWidget* widget) {\n    d->quickWidget = widget;\n}\n\nvoid QuickWidgetContainer::paintEvent(QPaintEvent* event) {\n    QPainter painter(this);\n    painter.setPen(this->palette().color(QPalette::WindowText));\n    painter.setBrush(this->palette().color(QPalette::Window));\n\n    QPolygon poly;\n    int topEdge = 5;\n    int leftPoint = qMax(0, d->pointX - 5);\n    int rightPoint = qMin(this->width() - 1, d->pointX + 5);\n\n    poly.append(QPoint(0, topEdge));\n    poly.append(QPoint(leftPoint, topEdge));\n    poly.append(QPoint(d->pointX, 0));\n    poly.append(QPoint(rightPoint, topEdge));\n    poly.append(QPoint(this->width() - 1, topEdge));\n    poly.append(QPoint(this->width() - 1, this->height() - 1));\n    poly.append(QPoint(0, this->height() - 1));\n    poly.append(QPoint(0, topEdge));\n    painter.drawPolygon(poly);\n}\n\nvoid QuickWidgetContainer::changeEvent(QEvent* event) {\n    QWidget::changeEvent(event);\n    switch (event->type()) {\n        case QEvent::ActivationChange:\n            if (!this->isActiveWindow()) this->hideContainer();\n            break;\n        default:\n            break;\n    }\n}\n\nvoid QuickWidgetContainer::calculatePosition() {\n    this->setFixedSize(this->sizeHint());\n\n    QPoint midpoint = d->parentChunk->mapToGlobal(QPoint(d->parentChunk->width() / 2, d->parentChunk->height()));\n    QRect screenGeometry = qApp->screenAt(midpoint)->geometry();\n\n    QRect geom = this->geometry();\n    geom.setSize(this->sizeHint());\n    geom.moveLeft(midpoint.x() - geom.width() / 2);\n    if (geom.left() < screenGeometry.left() + 9) geom.moveLeft(screenGeometry.left() + 9);\n    if (geom.right() > screenGeometry.right() - 9) geom.moveRight(screenGeometry.right() - 9);\n    this->setGeometry(geom);\n\n    d->pointX = this->mapFromGlobal(midpoint).x();\n\n    d->yAnim->setStartValue(midpoint.y() - 50);\n    d->yAnim->setEndValue(midpoint.y());\n}\n\nbool QuickWidgetContainer::eventFilter(QObject* watched, QEvent* event) {\n    if (event->type() == QEvent::Resize || event->type() == QEvent::LayoutRequest) {\n        QTimer::singleShot(0, this, &QuickWidgetContainer::calculatePosition);\n    }\n    return false;\n}\n\nvoid QuickWidgetContainer::hideEvent(QHideEvent* event) {\n    if (d->isShowing) this->hideContainer();\n}\n"
  },
  {
    "path": "libthedesk/private/quickwidgetcontainer.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef QUICKWIDGETCONTAINER_H\n#define QUICKWIDGETCONTAINER_H\n\n#include <QWidget>\n\nnamespace Ui {\n    class QuickWidgetContainer;\n}\n\nclass Chunk;\nclass CurrentAppWidget;\nclass TaskbarApplicationWidget;\nstruct QuickWidgetContainerPrivate;\nclass QuickWidgetContainer : public QWidget {\n        Q_OBJECT\n\n    public:\n        explicit QuickWidgetContainer(QWidget* parent = nullptr);\n        ~QuickWidgetContainer();\n\n        QSize sizeHint() const;\n\n        void showContainer();\n        void hideContainer();\n        bool isShowing();\n\n    signals:\n        void showing();\n        void hiding();\n\n    protected:\n        friend CurrentAppWidget;\n        friend TaskbarApplicationWidget;\n        void setQuickWidget(QWidget* widget);\n\n    private:\n        Ui::QuickWidgetContainer* ui;\n        QuickWidgetContainerPrivate* d;\n\n        void paintEvent(QPaintEvent* event);\n        void changeEvent(QEvent* event);\n        bool eventFilter(QObject* watched, QEvent* event);\n\n        void calculatePosition();\n\n\n        // QWidget interface\n    protected:\n        void hideEvent(QHideEvent *event);\n};\n\n#endif // QUICKWIDGETCONTAINER_H\n"
  },
  {
    "path": "libthedesk/private/quickwidgetcontainer.ui",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ui version=\"4.0\">\n <class>QuickWidgetContainer</class>\n <widget class=\"QWidget\" name=\"QuickWidgetContainer\">\n  <property name=\"geometry\">\n   <rect>\n    <x>0</x>\n    <y>0</y>\n    <width>242</width>\n    <height>268</height>\n   </rect>\n  </property>\n  <property name=\"windowTitle\">\n   <string notr=\"true\">Form</string>\n  </property>\n  <layout class=\"QVBoxLayout\" name=\"verticalLayout_2\">\n   <property name=\"spacing\">\n    <number>0</number>\n   </property>\n   <property name=\"leftMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"topMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"rightMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"bottomMargin\">\n    <number>0</number>\n   </property>\n   <item>\n    <layout class=\"QVBoxLayout\" name=\"chunkContainerLayout\"/>\n   </item>\n  </layout>\n </widget>\n <resources/>\n <connections/>\n</ui>\n"
  },
  {
    "path": "libthedesk/quickswitch.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"quickswitch.h\"\n\n#include <QPointer>\n#include <tswitch.h>\n\nstruct QuickSwitchPrivate {\n    QString name;\n    QString title;\n    bool checked = false;\n\n    QPointer<tSwitch> s;\n};\n\nQuickSwitch::QuickSwitch(QString name, QObject* parent) : QObject(parent) {\n    d = new QuickSwitchPrivate();\n    d->name = name;\n}\n\nQuickSwitch::~QuickSwitch() {\n    delete d;\n}\n\nQString QuickSwitch::name() {\n    return d->name;\n}\n\nvoid QuickSwitch::setTitle(QString title) {\n    if (d->title == title) return;\n    d->title = title;\n    emit titleChanged(title);\n}\n\nQString QuickSwitch::title() {\n    return d->title;\n}\n\nvoid QuickSwitch::setChecked(bool isChecked) {\n    if (d->checked == isChecked) return;\n    d->checked = isChecked;\n    emit toggled(isChecked);\n\n    if (d->s) d->s->setChecked(isChecked);\n}\n\nbool QuickSwitch::isChecked() {\n    return d->checked;\n}\n\nvoid QuickSwitch::setSwitch(tSwitch* s) {\n    d->s = s;\n}\n"
  },
  {
    "path": "libthedesk/quickswitch.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef BARSWITCH_H\n#define BARSWITCH_H\n\n#include <QObject>\n\nstruct QuickSwitchPrivate;\nclass tSwitch;\nclass QuickSwitch : public QObject {\n        Q_OBJECT\n    public:\n        explicit QuickSwitch(QString name, QObject* parent = nullptr);\n        ~QuickSwitch();\n\n        QString name();\n\n        void setTitle(QString title);\n        QString title();\n\n        void setChecked(bool isChecked);\n        bool isChecked();\n\n        void setSwitch(tSwitch* s);\n\n    signals:\n        void titleChanged(QString title);\n        void toggled(bool checked);\n\n    private:\n        QuickSwitchPrivate* d;\n\n};\n\n#endif // BARSWITCH_H\n"
  },
  {
    "path": "libthedesk/quietmodemanager.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"quietmodemanager.h\"\n\n#include \"statemanager.h\"\n#include \"onboardingmanager.h\"\n\nstruct QuietModeManagerPrivate {\n    QuietModeManagerTd::QuietMode quietMode = QuietModeManagerTd::Sound;\n};\n\nQuietModeManagerTd::QuietModeManagerTd(QObject* parent) : QObject(parent) {\n    d = new QuietModeManagerPrivate();\n}\n\nQuietModeManagerTd::~QuietModeManagerTd() {\n    delete d;\n}\n\nvoid QuietModeManagerTd::setQuietMode(QuietModeManagerTd::QuietMode quietMode) {\n    QuietModeManagerTd::QuietMode oldMode = d->quietMode;\n    d->quietMode = quietMode;\n    emit quietModeChanged(quietMode, oldMode);\n}\n\nQuietModeManagerTd::QuietMode QuietModeManagerTd::currentMode() {\n    return d->quietMode;\n}\n\nQuietModeManagerTd::QuietMode QuietModeManagerTd::nextQuietMode() const {\n    switch (d->quietMode) {\n        case QuietModeManagerTd::Sound:\n            //If we're in onboarding, mute the audio if the user hits mute\n            return StateManager::onboardingManager()->isOnboardingRunning() ? Mute : CriticalOnly;\n        case QuietModeManagerTd::CriticalOnly:\n            //If we're in onboarding, mute the audio if the user hits mute\n            return StateManager::onboardingManager()->isOnboardingRunning() ? Mute : NoNotifications;\n        case QuietModeManagerTd::NoNotifications:\n            return Mute;\n        case QuietModeManagerTd::Mute:\n            return Sound;\n        default:\n            return QuietModeManagerTd::Sound;\n    }\n}\n\nQString QuietModeManagerTd::name(QuietModeManagerTd::QuietMode quietMode) {\n    switch (quietMode) {\n        case QuietModeManagerTd::Sound:\n            return tr(\"Sound\");\n        case QuietModeManagerTd::CriticalOnly:\n            return tr(\"Critical Only\");\n        case QuietModeManagerTd::NoNotifications:\n            return tr(\"No Notifications\");\n        case QuietModeManagerTd::Mute:\n            return tr(\"Mute\");\n        default:\n            return \"\";\n    }\n}\n\nQString QuietModeManagerTd::description(QuietModeManagerTd::QuietMode quietMode) {\n    switch (quietMode) {\n        case QuietModeManagerTd::Sound:\n            return tr(\"Allows all sounds\");\n        case QuietModeManagerTd::CriticalOnly:\n            return tr(\"Hides non-critical notifications\");\n        case QuietModeManagerTd::NoNotifications:\n            return tr(\"Hides all notifications\");\n        case QuietModeManagerTd::Mute:\n            return tr(\"Mutes all sound altogether\");\n        default:\n            return \"\";\n    }\n}\n\nQString QuietModeManagerTd::icon(QuietModeManagerTd::QuietMode quietMode) {\n    switch (quietMode) {\n        case QuietModeManagerTd::Sound:\n            return \"audio-volume-high\";\n        case QuietModeManagerTd::CriticalOnly:\n            return \"quiet-mode-critical-only\";\n        case QuietModeManagerTd::NoNotifications:\n            return \"quiet-mode\";\n        case QuietModeManagerTd::Mute:\n            return \"audio-volume-muted\";\n        default:\n            return \"\";\n    }\n}\n\nQList<QuietModeManagerTd::QuietMode> QuietModeManagerTd::availableQuietModes() const {\n    QList<QuietMode> modes;\n    for (QuietMode mode = Sound; mode != LastQuietMode; mode = static_cast<QuietMode>(mode + 1)) {\n        modes.append(mode);\n    }\n    return modes;\n}\n"
  },
  {
    "path": "libthedesk/quietmodemanager.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef QUIETMODEMANAGER_H\n#define QUIETMODEMANAGER_H\n\n#include <QObject>\n\nstruct QuietModeManagerPrivate;\nclass QuietModeManagerTd : public QObject {\n        Q_OBJECT\n    public:\n        enum QuietMode {\n            Sound = 0,\n            CriticalOnly,\n            NoNotifications,\n            Mute,\n\n            LastQuietMode\n        };\n\n        explicit QuietModeManagerTd(QObject* parent = nullptr);\n        ~QuietModeManagerTd();\n\n        void setQuietMode(QuietMode quietMode);\n        QuietMode currentMode();\n\n        QuietMode nextQuietMode() const;\n\n        static QString name(QuietMode quietMode);\n        static QString description(QuietMode quietMode);\n        static QString icon(QuietMode quietMode);\n\n        QList<QuietMode> availableQuietModes() const;\n\n    signals:\n        void quietModeChanged(QuietMode newQuietMode, QuietMode oldQuietMode);\n\n    private:\n        QuietModeManagerPrivate* d;\n};\n\n#endif // QUIETMODEMANAGER_H\n"
  },
  {
    "path": "libthedesk/server/sessionserver.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"sessionserver.h\"\n\n#include <QJsonDocument>\n#include <QJsonObject>\n#include <QLocalSocket>\n#include <QDebug>\n#include <QMessageBox>\n\nstruct SessionServerPrivate {\n    QLocalSocket* socket;\n    SessionServer* instance = nullptr;\n\n    bool available = false;\n\n    bool havePendingQuestion = false;\n    tPromiseFunctions<bool>::SuccessFunction questionRes;\n};\n\nSessionServerPrivate* SessionServer::d = new SessionServerPrivate();\n\nSessionServer* SessionServer::instance() {\n    if (!d->instance) d->instance = new SessionServer();\n    return d->instance;\n}\n\nvoid SessionServer::setServerPath(QString serverPath) {\n    d->socket->connectToServer(serverPath);\n\n    //Wait until connection so we can send messages\n    d->socket->waitForConnected();\n}\n\nvoid SessionServer::hideSplashes() {\n    if (!d->available) return;\n    d->socket->write(QJsonDocument(QJsonObject({\n        {\"type\", \"hideSplash\"}\n    })).toJson());\n    d->socket->flush();\n}\n\nvoid SessionServer::showSplashes() {\n    if (!d->available) return;\n    d->socket->write(QJsonDocument(QJsonObject({\n        {\"type\", \"showSplash\"}\n    })).toJson());\n    d->socket->flush();\n}\n\nvoid SessionServer::performAutostart() {\n    if (!d->available) return;\n    d->socket->write(QJsonDocument(QJsonObject({\n        {\"type\", \"autoStart\"}\n    })).toJson());\n    d->socket->flush();\n}\n\ntPromise<bool>* SessionServer::askQuestion(QString title, QString question) {\n    return tPromise<bool>::runOnSameThread([ = ](tPromiseFunctions<bool>::SuccessFunction res, tPromiseFunctions<bool>::FailureFunction rej) {\n        if (!d->available) {\n            bool answer = QMessageBox::question(nullptr, title, question, QMessageBox::Yes | QMessageBox::No, QMessageBox::No) == QMessageBox::Yes;\n            res(answer);\n        } else {\n            d->questionRes = [ = ](bool result) {\n                d->havePendingQuestion = false;\n                res(result);\n            };\n            d->havePendingQuestion = true;\n\n            d->socket->write(QJsonDocument(QJsonObject({\n                {\"type\", \"question\"},\n                {\"title\", title},\n                {\"question\", question}\n            })).toJson());\n            d->socket->flush();\n        }\n    });\n}\n\nSessionServer::SessionServer(QObject* parent) : QObject(parent) {\n    d->socket = new QLocalSocket();\n    connect(d->socket, &QLocalSocket::connected, this, [ = ] {\n        d->available = true;\n\n    });\n    connect(d->socket, &QLocalSocket::disconnected, this, [ = ] {\n        d->available = false;\n    });\n\n    connect(d->socket, &QLocalSocket::readyRead, this, &SessionServer::readData);\n}\n\nvoid SessionServer::readData() {\n    QByteArray data = d->socket->readAll();\n    QJsonDocument doc = QJsonDocument::fromJson(data);\n    if (doc.isObject()) {\n        QJsonObject obj = doc.object();\n        if (obj.contains(\"type\")) {\n            QString type = obj.value(\"type\").toString();\n            if (type == \"questionResponse\" && d->havePendingQuestion) {\n                d->questionRes(obj.value(\"response\").toBool());\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "libthedesk/server/sessionserver.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef SESSIONSERVER_H\n#define SESSIONSERVER_H\n\n#include <QObject>\n#include <tpromise.h>\n\nstruct SessionServerPrivate;\nclass SessionServer : public QObject {\n        Q_OBJECT\n    public:\n        static SessionServer* instance();\n\n        void setServerPath(QString serverPath);\n\n        void hideSplashes();\n        void showSplashes();\n        void performAutostart();\n\n        tPromise<bool>* askQuestion(QString title, QString question);\n\n    signals:\n\n    private:\n        explicit SessionServer(QObject* parent = nullptr);\n        static SessionServerPrivate* d;\n\n        void readData();\n};\n\n#endif // SESSIONSERVER_H\n"
  },
  {
    "path": "libthedesk/statemanager.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"statemanager.h\"\n\n#include \"barmanager.h\"\n#include \"powermanager.h\"\n#include \"statuscentermanager.h\"\n#include \"localemanager.h\"\n#include \"hudmanager.h\"\n#include \"gatewaymanager.h\"\n#include \"onboardingmanager.h\"\n#include \"quietmodemanager.h\"\n\nstruct StateManagerPrivate {\n    StateManager* instance = nullptr;\n    BarManager* barManager;\n    GatewayManager* gatewayManager;\n    StatusCenterManager* statusCenterManager;\n    PowerManager* powerManager;\n    LocaleManager* localeManager;\n    HudManager* hudManager;\n    OnboardingManager* onboardingManager;\n    QuietModeManagerTd* quietModeManager;\n};\n\nStateManagerPrivate* StateManager::d = new StateManagerPrivate();\n\nStateManager::StateManager() : QObject(nullptr) {\n    d->barManager = new BarManager(this);\n    d->gatewayManager = new GatewayManager(this);\n    d->statusCenterManager = new StatusCenterManager(this);\n    d->powerManager = new PowerManager(this);\n    d->localeManager = new LocaleManager(this);\n    d->hudManager = new HudManager(this);\n    d->onboardingManager = new OnboardingManager(this);\n    d->quietModeManager = new QuietModeManagerTd(this);\n}\n\nStateManager* StateManager::instance() {\n    if (d->instance == nullptr) d->instance = new StateManager();\n    return d->instance;\n}\n\nBarManager* StateManager::barManager() {\n    return d->barManager;\n}\n\nGatewayManager* StateManager::gatewayManager() {\n    return d->gatewayManager;\n}\n\nPowerManager* StateManager::powerManager() {\n    return d->powerManager;\n}\n\nStatusCenterManager* StateManager::statusCenterManager() {\n    return d->statusCenterManager;\n}\n\nLocaleManager* StateManager::localeManager() {\n    return d->localeManager;\n}\n\nHudManager* StateManager::hudManager() {\n    return d->hudManager;\n}\n\nOnboardingManager* StateManager::onboardingManager() {\n    return d->onboardingManager;\n}\n\nQuietModeManagerTd* StateManager::quietModeManager() {\n    return d->quietModeManager;\n}\n"
  },
  {
    "path": "libthedesk/statemanager.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef STATEMANAGER_H\n#define STATEMANAGER_H\n\n#include \"libthedesk_global.h\"\n#include <QObject>\n\nclass BarManager;\nclass GatewayManager;\nclass PowerManager;\nclass StatusCenterManager;\nclass LocaleManager;\nclass HudManager;\nclass OnboardingManager;\nclass QuietModeManagerTd;\n\nstruct StateManagerPrivate;\nclass LIBTHEDESK_EXPORT StateManager : public QObject {\n        Q_OBJECT\n\n    public:\n        static StateManager* instance();\n        static BarManager* barManager();\n        static GatewayManager* gatewayManager();\n        static PowerManager* powerManager();\n        static StatusCenterManager* statusCenterManager();\n        static LocaleManager* localeManager();\n        static HudManager* hudManager();\n        static OnboardingManager* onboardingManager();\n        static QuietModeManagerTd* quietModeManager();\n\n    private:\n        explicit StateManager();\n\n        static StateManagerPrivate* d;\n};\n\n#endif // STATEMANAGER_H\n"
  },
  {
    "path": "libthedesk/statuscentermanager.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"statuscentermanager.h\"\n\n#include <QMap>\n#include <libcontemporary_global.h>\n\nstruct StatusCenterManagerPrivate {\n        bool isShowing = false;\n        bool hamburgerMenuRequired = false;\n\n        QList<StatusCenterPane*> panes;\n        QMap<StatusCenterPane*, StatusCenterManager::PaneType> paneTypes;\n\n        QList<QuickSwitch*> switches;\n};\n\nStatusCenterManager::StatusCenterManager(QObject* parent) :\n    QObject(parent) {\n    d = new StatusCenterManagerPrivate();\n}\n\nStatusCenterManager::~StatusCenterManager() {\n    delete d;\n}\n\nvoid StatusCenterManager::show() {\n    emit showStatusCenter();\n}\n\nvoid StatusCenterManager::hide() {\n    emit hideStatusCenter();\n}\n\nbool StatusCenterManager::isShowingStatusCenter() {\n    return d->isShowing;\n}\n\nbool StatusCenterManager::isHamburgerMenuRequired() {\n    return d->hamburgerMenuRequired;\n}\n\nvoid StatusCenterManager::showStatusCenterHamburgerMenu() {\n    emit showHamburgerMenu();\n}\n\nvoid StatusCenterManager::hideStatusCenterHamburgerMenu() {\n    emit hideHamburgerMenu();\n}\n\nvoid StatusCenterManager::returnToRootMenu() {\n    emit rootMenu();\n}\n\nvoid StatusCenterManager::addPane(StatusCenterPane* pane, StatusCenterManager::PaneType type) {\n    if (!d->panes.contains(pane)) {\n        d->paneTypes.insert(pane, type);\n        d->panes.append(pane);\n        emit paneAdded(pane, type);\n    }\n}\n\nvoid StatusCenterManager::removePane(StatusCenterPane* pane) {\n    if (d->panes.contains(pane)) {\n        d->paneTypes.remove(pane);\n        d->panes.removeOne(pane);\n        emit paneRemoved(pane);\n    }\n}\n\nvoid StatusCenterManager::setPane(QString pane) {\n    emit paneRequest(pane);\n}\n\nvoid StatusCenterManager::setPane(StatusCenterPane* pane) {\n    emit paneRequest(pane);\n}\n\nvoid StatusCenterManager::showWithPane(QString pane) {\n    setPane(pane);\n    emit showStatusCenter();\n}\n\nvoid StatusCenterManager::showWithPane(StatusCenterPane* pane) {\n    setPane(pane);\n    emit showStatusCenter();\n}\n\nvoid StatusCenterManager::addSwitch(QuickSwitch* sw) {\n    if (!d->switches.contains(sw)) {\n        d->switches.append(sw);\n        emit switchAdded(sw);\n    }\n}\n\nvoid StatusCenterManager::removeSwitch(QuickSwitch* sw) {\n    if (d->switches.contains(sw)) {\n        d->switches.removeOne(sw);\n        emit switchRemoved(sw);\n    }\n}\n\nbool StatusCenterManager::isSwitchRegistered(QuickSwitch* sw) {\n    return d->switches.contains(sw);\n}\n\nint StatusCenterManager::preferredContentWidth() {\n    return SC_DPI(600);\n}\n\nQList<StatusCenterPane*> StatusCenterManager::panes() {\n    return d->panes;\n}\n\nQList<QuickSwitch*> StatusCenterManager::switches() {\n    return d->switches;\n}\n\nStatusCenterManager::PaneType StatusCenterManager::paneType(StatusCenterPane* pane) {\n    return d->paneTypes.value(pane);\n}\n\nvoid StatusCenterManager::setIsShowingStatusCenter(bool isShowing) {\n    d->isShowing = isShowing;\n}\n\nvoid StatusCenterManager::setIsHamburgerMenuRequired(bool isRequired) {\n    d->hamburgerMenuRequired = isRequired;\n    emit isHamburgerMenuRequiredChanged(isRequired);\n}\n"
  },
  {
    "path": "libthedesk/statuscentermanager.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef STATUSCENTERMANAGER_H\n#define STATUSCENTERMANAGER_H\n\n#include <QObject>\n\nclass BarWindow;\nclass StatusCenterPane;\nclass StatusCenter;\nclass SystemSettings;\nclass QuickSwitch;\nstruct StatusCenterManagerPrivate;\nclass StatusCenterManager : public QObject {\n        Q_OBJECT\n    public:\n        enum PaneType {\n            Informational,\n            SystemSettings\n        };\n\n        explicit StatusCenterManager(QObject* parent = nullptr);\n        ~StatusCenterManager();\n\n        void show();\n        void hide();\n        bool isShowingStatusCenter();\n\n        bool isHamburgerMenuRequired();\n        void showStatusCenterHamburgerMenu();\n        void hideStatusCenterHamburgerMenu();\n\n        void returnToRootMenu();\n\n        void addPane(StatusCenterPane* pane, PaneType type = Informational);\n        void removePane(StatusCenterPane* pane);\n\n        void setPane(QString pane);\n        void setPane(StatusCenterPane* pane);\n        void showWithPane(QString pane);\n        void showWithPane(StatusCenterPane* pane);\n\n        void addSwitch(QuickSwitch* sw);\n        void removeSwitch(QuickSwitch* sw);\n        bool isSwitchRegistered(QuickSwitch* sw);\n\n        int preferredContentWidth();\n\n    signals:\n        void showStatusCenter();\n        void hideStatusCenter();\n        void showHamburgerMenu();\n        void hideHamburgerMenu();\n        void rootMenu();\n\n        void requestLogout();\n\n        void paneAdded(StatusCenterPane* pane, StatusCenterManager::PaneType type);\n        void paneRemoved(StatusCenterPane* pane);\n        void switchAdded(QuickSwitch* sw);\n        void switchRemoved(QuickSwitch* sw);\n\n        void paneRequest(QString pane);\n        void paneRequest(StatusCenterPane* pane);\n\n        void isHamburgerMenuRequiredChanged(bool isHamburgerMenuRequired);\n\n    protected:\n        friend BarWindow;\n        friend StatusCenter;\n        friend class SystemSettings;\n        void setIsShowingStatusCenter(bool isShowing);\n        void setIsHamburgerMenuRequired(bool isRequired);\n        QList<StatusCenterPane*> panes();\n        QList<QuickSwitch*> switches();\n        PaneType paneType(StatusCenterPane* pane);\n\n    private:\n        StatusCenterManagerPrivate* d;\n};\n\n#endif // STATUSCENTERMANAGER_H\n"
  },
  {
    "path": "libthedesk/statuscenterpane.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"statuscenterpane.h\"\n\nStatusCenterPane::StatusCenterPane() : QWidget(nullptr) {\n\n}\n"
  },
  {
    "path": "libthedesk/statuscenterpane.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef STATUSCENTERPANE_H\n#define STATUSCENTERPANE_H\n\n#include <QWidget>\n\nclass StatusCenterPane : public QWidget {\n        Q_OBJECT\n    public:\n        enum PaneType {\n            Informational,\n            SystemSettings\n        };\n\n        explicit StatusCenterPane();\n\n        virtual QString name() = 0;\n        virtual QString displayName() = 0;\n        virtual QIcon icon() = 0;\n        virtual QWidget* leftPane() = 0;\n\n    signals:\n        void displayNameChanged();\n        void iconChanged();\n};\n\n#endif // STATUSCENTERPANE_H\n"
  },
  {
    "path": "libthedesk/translations/ar_SA.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"ar_SA\" sourcelanguage=\"en_US\">\n<context>\n    <name>KeyboardLayoutSelector</name>\n    <message>\n        <source>Select a keyboard layout</source>\n        <translation>حدد تخطيط لوحة المفاتيح</translation>\n    </message>\n</context>\n<context>\n    <name>LocaleSelector</name>\n    <message>\n        <source>Select a locale</source>\n        <translation>حدد لغة</translation>\n    </message>\n</context>\n<context>\n    <name>OnboardingFinal</name>\n    <message>\n        <source>That&apos;s everything!</source>\n        <translation>هذا كل شئ!</translation>\n    </message>\n    <message>\n        <source>We hope you enjoy using theDesk!</source>\n        <translation>نأمل أن تستمتع باستخدام theDesk!</translation>\n    </message>\n    <message>\n        <source>Get Started</source>\n        <translation>ابدء</translation>\n    </message>\n    <message>\n        <source>Done</source>\n        <translation>تم</translation>\n    </message>\n</context>\n<context>\n    <name>OnboardingVideo</name>\n    <message>\n        <source>qrc:/libthedesk/onboarding/OnboardingVideoForm.qml</source>\n        <translation>qrc:/libthedesk/onboarding/OnboardingVideoForm.qml</translation>\n    </message>\n</context>\n<context>\n    <name>OnboardingWelcome</name>\n    <message>\n        <source>Language</source>\n        <translation>الغة</translation>\n    </message>\n    <message>\n        <source>Emergency</source>\n        <translation>طوارئ</translation>\n    </message>\n    <message>\n        <source>Let&apos;s go!</source>\n        <translation>هيا نذهب!</translation>\n    </message>\n    <message>\n        <source>Welcome</source>\n        <translation>مرحبا</translation>\n    </message>\n    <message>\n        <source>Welcome to %1!</source>\n        <translation>مرحباً بك في %1!</translation>\n    </message>\n    <message>\n        <source>You&apos;ve made it! We&apos;ll quickly go through some important setup like setting up accounts and connecting to the Internet, and then you&apos;ll be up and running.</source>\n        <translation>لقد وصلت! سننتقل سريعًا إلى بعض الإعدادات المهمة مثل إعداد الحسابات والاتصال بالإنترنت ، وبعد ذلك ستكون جاهزاين للعمل.</translation>\n    </message>\n    <message>\n        <source>Just a bit of important setup to do before you get started. This won&apos;t take long!</source>\n        <translation>مجرد القليل من الإعداد المهم الذي يجب القيام به قبل العمل. هذا لن يأخذ وقت طويل!</translation>\n    </message>\n    <message>\n        <source>OTHER OPTIONS</source>\n        <translation>خيارات الأخرى</translation>\n    </message>\n</context>\n<context>\n    <name>QuietModeManagerTd</name>\n    <message>\n        <source>Sound</source>\n        <translation>الصوت</translation>\n    </message>\n    <message>\n        <source>Critical Only</source>\n        <translation>المهمه فقط</translation>\n    </message>\n    <message>\n        <source>No Notifications</source>\n        <translation>لا توجد اي إشعارات</translation>\n    </message>\n    <message>\n        <source>Mute</source>\n        <translation>كتم الصوت</translation>\n    </message>\n    <message>\n        <source>Allows all sounds</source>\n        <translation>يسمح بكل الأصوات</translation>\n    </message>\n    <message>\n        <source>Hides non-critical notifications</source>\n        <translation>يخفي الإنظارات غير المهمه</translation>\n    </message>\n    <message>\n        <source>Hides all notifications</source>\n        <translation>يخفي كل الإنظارات</translation>\n    </message>\n    <message>\n        <source>Mutes all sound altogether</source>\n        <translation>يكتم كل الأصوات تمامًا</translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "libthedesk/translations/au_AU.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"au_AU\" sourcelanguage=\"en_US\">\n<context>\n    <name>KeyboardLayoutSelector</name>\n    <message>\n        <source>Select a keyboard layout</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>LocaleSelector</name>\n    <message>\n        <source>Select a locale</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>OnboardingFinal</name>\n    <message>\n        <source>That&apos;s everything!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>We hope you enjoy using theDesk!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Get Started</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Done</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>OnboardingVideo</name>\n    <message>\n        <source>qrc:/libthedesk/onboarding/OnboardingVideoForm.qml</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>OnboardingWelcome</name>\n    <message>\n        <source>Language</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Emergency</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Let&apos;s go!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Welcome</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Welcome to %1!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>You&apos;ve made it! We&apos;ll quickly go through some important setup like setting up accounts and connecting to the Internet, and then you&apos;ll be up and running.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Just a bit of important setup to do before you get started. This won&apos;t take long!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>OTHER OPTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>QuietModeManagerTd</name>\n    <message>\n        <source>Sound</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Critical Only</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>No Notifications</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Mute</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Allows all sounds</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Hides non-critical notifications</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Hides all notifications</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Mutes all sound altogether</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "libthedesk/translations/cs_CZ.ts",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<TS version=\"2.1\" language=\"cs_CZ\">\n  <context>\n    <name>KeyboardLayoutSelector</name>\n    <message>\n      <translation></translation>\n      <source>Select a keyboard layout</source>\n    </message>\n  </context>\n  <context>\n    <name>LocaleSelector</name>\n    <message>\n      <translation></translation>\n      <source>Select a locale</source>\n    </message>\n  </context>\n  <context>\n    <name>OnboardingFinal</name>\n    <message>\n      <translation></translation>\n      <source>That's everything!</source>\n    </message>\n    <message>\n      <translation></translation>\n      <source>We hope you enjoy using theDesk!</source>\n    </message>\n    <message>\n      <translation></translation>\n      <source>Get Started</source>\n    </message>\n    <message>\n      <translation></translation>\n      <source>Done</source>\n    </message>\n  </context>\n  <context>\n    <name>OnboardingVideo</name>\n    <message>\n      <translation></translation>\n      <source>qrc:/libthedesk/onboarding/OnboardingVideoForm.qml</source>\n    </message>\n  </context>\n  <context>\n    <name>OnboardingWelcome</name>\n    <message>\n      <translation></translation>\n      <source>Language</source>\n    </message>\n    <message>\n      <translation></translation>\n      <source>Emergency</source>\n    </message>\n    <message>\n      <translation></translation>\n      <source>Let's go!</source>\n    </message>\n    <message>\n      <translation></translation>\n      <source>Welcome</source>\n    </message>\n    <message>\n      <translation></translation>\n      <source>Welcome to %1!</source>\n    </message>\n    <message>\n      <translation></translation>\n      <source>You've made it! We'll quickly go through some important setup like setting up accounts and connecting to the Internet, and then you'll be up and running.</source>\n    </message>\n    <message>\n      <translation></translation>\n      <source>Just a bit of important setup to do before you get started. This won't take long!</source>\n    </message>\n    <message>\n      <translation></translation>\n      <source>OTHER OPTIONS</source>\n    </message>\n  </context>\n  <context>\n    <name>QuietModeManagerTd</name>\n    <message>\n      <translation></translation>\n      <source>Sound</source>\n    </message>\n    <message>\n      <translation></translation>\n      <source>Critical Only</source>\n    </message>\n    <message>\n      <translation></translation>\n      <source>No Notifications</source>\n    </message>\n    <message>\n      <translation></translation>\n      <source>Mute</source>\n    </message>\n    <message>\n      <translation></translation>\n      <source>Allows all sounds</source>\n    </message>\n    <message>\n      <translation></translation>\n      <source>Hides non-critical notifications</source>\n    </message>\n    <message>\n      <translation></translation>\n      <source>Hides all notifications</source>\n    </message>\n    <message>\n      <translation></translation>\n      <source>Mutes all sound altogether</source>\n    </message>\n  </context>\n</TS>"
  },
  {
    "path": "libthedesk/translations/cy.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"cy\" sourcelanguage=\"en_US\">\n<context>\n    <name>KeyboardLayoutSelector</name>\n    <message>\n        <source>Select a keyboard layout</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>LocaleSelector</name>\n    <message>\n        <source>Select a locale</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>OnboardingFinal</name>\n    <message>\n        <source>That&apos;s everything!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>We hope you enjoy using theDesk!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Get Started</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Done</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>OnboardingVideo</name>\n    <message>\n        <source>qrc:/libthedesk/onboarding/OnboardingVideoForm.qml</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>OnboardingWelcome</name>\n    <message>\n        <source>Language</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Emergency</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Let&apos;s go!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Welcome</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Welcome to %1!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>You&apos;ve made it! We&apos;ll quickly go through some important setup like setting up accounts and connecting to the Internet, and then you&apos;ll be up and running.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Just a bit of important setup to do before you get started. This won&apos;t take long!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>OTHER OPTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>QuietModeManagerTd</name>\n    <message>\n        <source>Sound</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Critical Only</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>No Notifications</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Mute</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Allows all sounds</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Hides non-critical notifications</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Hides all notifications</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Mutes all sound altogether</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "libthedesk/translations/da.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"da\" sourcelanguage=\"en_US\">\n<context>\n    <name>KeyboardLayoutSelector</name>\n    <message>\n        <source>Select a keyboard layout</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>LocaleSelector</name>\n    <message>\n        <source>Select a locale</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>OnboardingFinal</name>\n    <message>\n        <source>That&apos;s everything!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>We hope you enjoy using theDesk!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Get Started</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Done</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>OnboardingVideo</name>\n    <message>\n        <source>qrc:/libthedesk/onboarding/OnboardingVideoForm.qml</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>OnboardingWelcome</name>\n    <message>\n        <source>Language</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Emergency</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Let&apos;s go!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Welcome</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Welcome to %1!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>You&apos;ve made it! We&apos;ll quickly go through some important setup like setting up accounts and connecting to the Internet, and then you&apos;ll be up and running.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Just a bit of important setup to do before you get started. This won&apos;t take long!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>OTHER OPTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>QuietModeManagerTd</name>\n    <message>\n        <source>Sound</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Critical Only</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>No Notifications</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Mute</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Allows all sounds</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Hides non-critical notifications</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Hides all notifications</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Mutes all sound altogether</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "libthedesk/translations/de.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"de\" sourcelanguage=\"en_US\">\n<context>\n    <name>KeyboardLayoutSelector</name>\n    <message>\n        <source>Select a keyboard layout</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>LocaleSelector</name>\n    <message>\n        <source>Select a locale</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>OnboardingFinal</name>\n    <message>\n        <source>That&apos;s everything!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>We hope you enjoy using theDesk!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Get Started</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Done</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>OnboardingVideo</name>\n    <message>\n        <source>qrc:/libthedesk/onboarding/OnboardingVideoForm.qml</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>OnboardingWelcome</name>\n    <message>\n        <source>Language</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Emergency</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Let&apos;s go!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Welcome</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Welcome to %1!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>You&apos;ve made it! We&apos;ll quickly go through some important setup like setting up accounts and connecting to the Internet, and then you&apos;ll be up and running.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Just a bit of important setup to do before you get started. This won&apos;t take long!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>OTHER OPTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>QuietModeManagerTd</name>\n    <message>\n        <source>Sound</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Critical Only</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>No Notifications</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Mute</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Allows all sounds</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Hides non-critical notifications</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Hides all notifications</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Mutes all sound altogether</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "libthedesk/translations/en_GB.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"en_GB\" sourcelanguage=\"en_US\">\n<context>\n    <name>KeyboardLayoutSelector</name>\n    <message>\n        <source>Select a keyboard layout</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>LocaleSelector</name>\n    <message>\n        <source>Select a locale</source>\n        <translation>Select a locale</translation>\n    </message>\n</context>\n<context>\n    <name>OnboardingFinal</name>\n    <message>\n        <source>That&apos;s everything!</source>\n        <translation>That&apos;s everything!</translation>\n    </message>\n    <message>\n        <source>We hope you enjoy using theDesk!</source>\n        <translation>We hope you enjoy using theDesk!</translation>\n    </message>\n    <message>\n        <source>Get Started</source>\n        <translation>Get Started</translation>\n    </message>\n    <message>\n        <source>Done</source>\n        <translation>Done</translation>\n    </message>\n</context>\n<context>\n    <name>OnboardingVideo</name>\n    <message>\n        <source>qrc:/libthedesk/onboarding/OnboardingVideoForm.qml</source>\n        <translation>qrc:/libthedesk/onboarding/OnboardingVideoForm.qml</translation>\n    </message>\n</context>\n<context>\n    <name>OnboardingWelcome</name>\n    <message>\n        <source>Language</source>\n        <translation>Language</translation>\n    </message>\n    <message>\n        <source>Emergency</source>\n        <translation>Emergency</translation>\n    </message>\n    <message>\n        <source>Let&apos;s go!</source>\n        <translation>Let&apos;s go!</translation>\n    </message>\n    <message>\n        <source>Welcome</source>\n        <translation>Welcome</translation>\n    </message>\n    <message>\n        <source>Welcome to %1!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>You&apos;ve made it! We&apos;ll quickly go through some important setup like setting up accounts and connecting to the Internet, and then you&apos;ll be up and running.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Just a bit of important setup to do before you get started. This won&apos;t take long!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>OTHER OPTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>QuietModeManagerTd</name>\n    <message>\n        <source>Sound</source>\n        <translation type=\"unfinished\">Sound</translation>\n    </message>\n    <message>\n        <source>Critical Only</source>\n        <translation type=\"unfinished\">Critical Only</translation>\n    </message>\n    <message>\n        <source>No Notifications</source>\n        <translation type=\"unfinished\">No Notifications</translation>\n    </message>\n    <message>\n        <source>Mute</source>\n        <translation type=\"unfinished\">Mute</translation>\n    </message>\n    <message>\n        <source>Allows all sounds</source>\n        <translation type=\"unfinished\">Allows all sounds</translation>\n    </message>\n    <message>\n        <source>Hides non-critical notifications</source>\n        <translation type=\"unfinished\">Hides non-critical notifications</translation>\n    </message>\n    <message>\n        <source>Hides all notifications</source>\n        <translation type=\"unfinished\">Hides all notifications</translation>\n    </message>\n    <message>\n        <source>Mutes all sound altogether</source>\n        <translation type=\"unfinished\">Mutes all sound altogether</translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "libthedesk/translations/en_US.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"en_US\" sourcelanguage=\"en_US\">\n<context>\n    <name>KeyboardLayoutSelector</name>\n    <message>\n        <source>Select a keyboard layout</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>LocaleSelector</name>\n    <message>\n        <source>Select a locale</source>\n        <translation>Choose a locale</translation>\n    </message>\n</context>\n<context>\n    <name>OnboardingFinal</name>\n    <message>\n        <source>That&apos;s everything!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>We hope you enjoy using theDesk!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Get Started</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Done</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>OnboardingVideo</name>\n    <message>\n        <source>qrc:/libthedesk/onboarding/OnboardingVideoForm.qml</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>OnboardingWelcome</name>\n    <message>\n        <source>Language</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Emergency</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Let&apos;s go!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Welcome</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Welcome to %1!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>You&apos;ve made it! We&apos;ll quickly go through some important setup like setting up accounts and connecting to the Internet, and then you&apos;ll be up and running.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Just a bit of important setup to do before you get started. This won&apos;t take long!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>OTHER OPTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>QuietModeManagerTd</name>\n    <message>\n        <source>Sound</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Critical Only</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>No Notifications</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Mute</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Allows all sounds</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Hides non-critical notifications</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Hides all notifications</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Mutes all sound altogether</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "libthedesk/translations/es.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"es\" sourcelanguage=\"en_US\">\n<context>\n    <name>KeyboardLayoutSelector</name>\n    <message>\n        <source>Select a keyboard layout</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>LocaleSelector</name>\n    <message>\n        <source>Select a locale</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>OnboardingFinal</name>\n    <message>\n        <source>That&apos;s everything!</source>\n        <translation>Eso es todo!</translation>\n    </message>\n    <message>\n        <source>We hope you enjoy using theDesk!</source>\n        <translation type=\"unfinished\">Te esperamos disfrutar usando theDesk!</translation>\n    </message>\n    <message>\n        <source>Get Started</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Done</source>\n        <translation>Hecho</translation>\n    </message>\n</context>\n<context>\n    <name>OnboardingVideo</name>\n    <message>\n        <source>qrc:/libthedesk/onboarding/OnboardingVideoForm.qml</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>OnboardingWelcome</name>\n    <message>\n        <source>Language</source>\n        <translation>Idioma</translation>\n    </message>\n    <message>\n        <source>Emergency</source>\n        <translation>Emergencia</translation>\n    </message>\n    <message>\n        <source>Let&apos;s go!</source>\n        <translation>Vamos!</translation>\n    </message>\n    <message>\n        <source>Welcome</source>\n        <translation>Bienvenido</translation>\n    </message>\n    <message>\n        <source>Welcome to %1!</source>\n        <translation type=\"unfinished\">Bienvenido a %1!</translation>\n    </message>\n    <message>\n        <source>You&apos;ve made it! We&apos;ll quickly go through some important setup like setting up accounts and connecting to the Internet, and then you&apos;ll be up and running.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Just a bit of important setup to do before you get started. This won&apos;t take long!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>OTHER OPTIONS</source>\n        <translation>OTRAS OPCIONES</translation>\n    </message>\n</context>\n<context>\n    <name>QuietModeManagerTd</name>\n    <message>\n        <source>Sound</source>\n        <translation>Sonido</translation>\n    </message>\n    <message>\n        <source>Critical Only</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>No Notifications</source>\n        <translation>No Notificaciones</translation>\n    </message>\n    <message>\n        <source>Mute</source>\n        <translation>Silencio</translation>\n    </message>\n    <message>\n        <source>Allows all sounds</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Hides non-critical notifications</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Hides all notifications</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Mutes all sound altogether</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "libthedesk/translations/es_VE.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"es_VE\" sourcelanguage=\"en_US\">\n<context>\n    <name>KeyboardLayoutSelector</name>\n    <message>\n        <source>Select a keyboard layout</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>LocaleSelector</name>\n    <message>\n        <source>Select a locale</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>OnboardingFinal</name>\n    <message>\n        <source>That&apos;s everything!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>We hope you enjoy using theDesk!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Get Started</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Done</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>OnboardingVideo</name>\n    <message>\n        <source>qrc:/libthedesk/onboarding/OnboardingVideoForm.qml</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>OnboardingWelcome</name>\n    <message>\n        <source>Language</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Emergency</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Let&apos;s go!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Welcome</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Welcome to %1!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>You&apos;ve made it! We&apos;ll quickly go through some important setup like setting up accounts and connecting to the Internet, and then you&apos;ll be up and running.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Just a bit of important setup to do before you get started. This won&apos;t take long!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>OTHER OPTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>QuietModeManagerTd</name>\n    <message>\n        <source>Sound</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Critical Only</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>No Notifications</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Mute</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Allows all sounds</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Hides non-critical notifications</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Hides all notifications</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Mutes all sound altogether</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "libthedesk/translations/id.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"id\" sourcelanguage=\"en_US\">\n<context>\n    <name>KeyboardLayoutSelector</name>\n    <message>\n        <source>Select a keyboard layout</source>\n        <translation>Pilihlah susunan keyboard yang sesuai</translation>\n    </message>\n</context>\n<context>\n    <name>LocaleSelector</name>\n    <message>\n        <source>Select a locale</source>\n        <translation>Pilih bahasa yang diinginkan</translation>\n    </message>\n</context>\n<context>\n    <name>OnboardingFinal</name>\n    <message>\n        <source>That&apos;s everything!</source>\n        <translation>Selesai!</translation>\n    </message>\n    <message>\n        <source>We hope you enjoy using theDesk!</source>\n        <translation>Kami harap Anda dapat menikmati theDesk!</translation>\n    </message>\n    <message>\n        <source>Get Started</source>\n        <translation>Mulai</translation>\n    </message>\n    <message>\n        <source>Done</source>\n        <translation>Selesai</translation>\n    </message>\n</context>\n<context>\n    <name>OnboardingVideo</name>\n    <message>\n        <source>qrc:/libthedesk/onboarding/OnboardingVideoForm.qml</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>OnboardingWelcome</name>\n    <message>\n        <source>Language</source>\n        <translation>Bahasa</translation>\n    </message>\n    <message>\n        <source>Emergency</source>\n        <translation>Darurat</translation>\n    </message>\n    <message>\n        <source>Let&apos;s go!</source>\n        <translation>Mari kita mulai!</translation>\n    </message>\n    <message>\n        <source>Welcome</source>\n        <translation>Selamat Datang</translation>\n    </message>\n    <message>\n        <source>Welcome to %1!</source>\n        <translation>Selamat datang di %1!</translation>\n    </message>\n    <message>\n        <source>You&apos;ve made it! We&apos;ll quickly go through some important setup like setting up accounts and connecting to the Internet, and then you&apos;ll be up and running.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Just a bit of important setup to do before you get started. This won&apos;t take long!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>OTHER OPTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>QuietModeManagerTd</name>\n    <message>\n        <source>Sound</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Critical Only</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>No Notifications</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Mute</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Allows all sounds</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Hides non-critical notifications</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Hides all notifications</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Mutes all sound altogether</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "libthedesk/translations/nl.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"nl\" sourcelanguage=\"en_US\">\n<context>\n    <name>KeyboardLayoutSelector</name>\n    <message>\n        <source>Select a keyboard layout</source>\n        <translation>Selecteer een toetsenbordindeling</translation>\n    </message>\n</context>\n<context>\n    <name>LocaleSelector</name>\n    <message>\n        <source>Select a locale</source>\n        <translation>Selecteer een taal</translation>\n    </message>\n</context>\n<context>\n    <name>OnboardingFinal</name>\n    <message>\n        <source>That&apos;s everything!</source>\n        <translation>Dat was het!</translation>\n    </message>\n    <message>\n        <source>We hope you enjoy using theDesk!</source>\n        <translation>We hopen dat je theDesk goed vindt!</translation>\n    </message>\n    <message>\n        <source>Get Started</source>\n        <translation>Beginnen</translation>\n    </message>\n    <message>\n        <source>Done</source>\n        <translation>Klaar</translation>\n    </message>\n</context>\n<context>\n    <name>OnboardingVideo</name>\n    <message>\n        <source>qrc:/libthedesk/onboarding/OnboardingVideoForm.qml</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>OnboardingWelcome</name>\n    <message>\n        <source>Language</source>\n        <translation>Taal</translation>\n    </message>\n    <message>\n        <source>Emergency</source>\n        <translation>Noodgeval</translation>\n    </message>\n    <message>\n        <source>Let&apos;s go!</source>\n        <translation type=\"unfinished\">Laten we gaan!</translation>\n    </message>\n    <message>\n        <source>Welcome</source>\n        <translation>Welkom</translation>\n    </message>\n    <message>\n        <source>Welcome to %1!</source>\n        <translation>Welkom bij %1!</translation>\n    </message>\n    <message>\n        <source>You&apos;ve made it! We&apos;ll quickly go through some important setup like setting up accounts and connecting to the Internet, and then you&apos;ll be up and running.</source>\n        <translation>Je hebt het gehaald! We zullen snel wat belangrijke instellingen doornemen zoals accounts instellen en met het Internet verbinden en daarna is alles klaar.</translation>\n    </message>\n    <message>\n        <source>Just a bit of important setup to do before you get started. This won&apos;t take long!</source>\n        <translation>Een paar belangrijke instellingen voordat je kunt beginnen. Dit duurt niet lang!</translation>\n    </message>\n    <message>\n        <source>OTHER OPTIONS</source>\n        <translation>ANDERE OPTIES</translation>\n    </message>\n</context>\n<context>\n    <name>QuietModeManagerTd</name>\n    <message>\n        <source>Sound</source>\n        <translation>Geluid</translation>\n    </message>\n    <message>\n        <source>Critical Only</source>\n        <translation>Alleen Belangrijk</translation>\n    </message>\n    <message>\n        <source>No Notifications</source>\n        <translation>Geen Meldingen</translation>\n    </message>\n    <message>\n        <source>Mute</source>\n        <translation>Stil</translation>\n    </message>\n    <message>\n        <source>Allows all sounds</source>\n        <translation>Alle geluiden toestaan</translation>\n    </message>\n    <message>\n        <source>Hides non-critical notifications</source>\n        <translation>Verbergt niet-belangrijke meldingen</translation>\n    </message>\n    <message>\n        <source>Hides all notifications</source>\n        <translation>Verbergt alle meldingen</translation>\n    </message>\n    <message>\n        <source>Mutes all sound altogether</source>\n        <translation>Zet geluid helemaal uit</translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "libthedesk/translations/pl_PL.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"pl_PL\" sourcelanguage=\"en_US\">\n<context>\n    <name>KeyboardLayoutSelector</name>\n    <message>\n        <source>Select a keyboard layout</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>LocaleSelector</name>\n    <message>\n        <source>Select a locale</source>\n        <translation>Wybierz widownie</translation>\n    </message>\n</context>\n<context>\n    <name>OnboardingFinal</name>\n    <message>\n        <source>That&apos;s everything!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>We hope you enjoy using theDesk!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Get Started</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Done</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>OnboardingVideo</name>\n    <message>\n        <source>qrc:/libthedesk/onboarding/OnboardingVideoForm.qml</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>OnboardingWelcome</name>\n    <message>\n        <source>Language</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Emergency</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Let&apos;s go!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Welcome</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Welcome to %1!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>You&apos;ve made it! We&apos;ll quickly go through some important setup like setting up accounts and connecting to the Internet, and then you&apos;ll be up and running.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Just a bit of important setup to do before you get started. This won&apos;t take long!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>OTHER OPTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>QuietModeManagerTd</name>\n    <message>\n        <source>Sound</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Critical Only</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>No Notifications</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Mute</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Allows all sounds</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Hides non-critical notifications</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Hides all notifications</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Mutes all sound altogether</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "libthedesk/translations/pt_BR.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"pt_BR\" sourcelanguage=\"en_US\">\n<context>\n    <name>KeyboardLayoutSelector</name>\n    <message>\n        <source>Select a keyboard layout</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>LocaleSelector</name>\n    <message>\n        <source>Select a locale</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>OnboardingFinal</name>\n    <message>\n        <source>That&apos;s everything!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>We hope you enjoy using theDesk!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Get Started</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Done</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>OnboardingVideo</name>\n    <message>\n        <source>qrc:/libthedesk/onboarding/OnboardingVideoForm.qml</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>OnboardingWelcome</name>\n    <message>\n        <source>Language</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Emergency</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Let&apos;s go!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Welcome</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Welcome to %1!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>You&apos;ve made it! We&apos;ll quickly go through some important setup like setting up accounts and connecting to the Internet, and then you&apos;ll be up and running.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Just a bit of important setup to do before you get started. This won&apos;t take long!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>OTHER OPTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>QuietModeManagerTd</name>\n    <message>\n        <source>Sound</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Critical Only</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>No Notifications</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Mute</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Allows all sounds</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Hides non-critical notifications</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Hides all notifications</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Mutes all sound altogether</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "libthedesk/translations/ro_RO.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"ro_RO\" sourcelanguage=\"en_US\">\n<context>\n    <name>KeyboardLayoutSelector</name>\n    <message>\n        <source>Select a keyboard layout</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>LocaleSelector</name>\n    <message>\n        <source>Select a locale</source>\n        <translation>Selectați limba și regiunea dumneavoastră</translation>\n    </message>\n</context>\n<context>\n    <name>OnboardingFinal</name>\n    <message>\n        <source>That&apos;s everything!</source>\n        <translation>Asta e tot!</translation>\n    </message>\n    <message>\n        <source>We hope you enjoy using theDesk!</source>\n        <translation>Sperăm că veți folosi cu plăcere theDesk!</translation>\n    </message>\n    <message>\n        <source>Get Started</source>\n        <translation>Să începem</translation>\n    </message>\n    <message>\n        <source>Done</source>\n        <translation>Gata</translation>\n    </message>\n</context>\n<context>\n    <name>OnboardingVideo</name>\n    <message>\n        <source>qrc:/libthedesk/onboarding/OnboardingVideoForm.qml</source>\n        <translation>qrc:/libthedesk/onboarding/OnboardingVideoForm.qml</translation>\n    </message>\n</context>\n<context>\n    <name>OnboardingWelcome</name>\n    <message>\n        <source>Language</source>\n        <translation>Limbă</translation>\n    </message>\n    <message>\n        <source>Emergency</source>\n        <translation>Urgență</translation>\n    </message>\n    <message>\n        <source>Let&apos;s go!</source>\n        <translation>Să începem!</translation>\n    </message>\n    <message>\n        <source>Welcome</source>\n        <translation>Bine ați venit</translation>\n    </message>\n    <message>\n        <source>Welcome to %1!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>You&apos;ve made it! We&apos;ll quickly go through some important setup like setting up accounts and connecting to the Internet, and then you&apos;ll be up and running.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Just a bit of important setup to do before you get started. This won&apos;t take long!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>OTHER OPTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>QuietModeManagerTd</name>\n    <message>\n        <source>Sound</source>\n        <translation type=\"unfinished\">Sunet</translation>\n    </message>\n    <message>\n        <source>Critical Only</source>\n        <translation type=\"unfinished\">Doar critice</translation>\n    </message>\n    <message>\n        <source>No Notifications</source>\n        <translation type=\"unfinished\">Notificări dezactivate</translation>\n    </message>\n    <message>\n        <source>Mute</source>\n        <translation type=\"unfinished\">Mut</translation>\n    </message>\n    <message>\n        <source>Allows all sounds</source>\n        <translation type=\"unfinished\">Permite toate sunetele</translation>\n    </message>\n    <message>\n        <source>Hides non-critical notifications</source>\n        <translation type=\"unfinished\">Ascunde toate notificările care nu sunt critice</translation>\n    </message>\n    <message>\n        <source>Hides all notifications</source>\n        <translation type=\"unfinished\">Ascunde toate notificările</translation>\n    </message>\n    <message>\n        <source>Mutes all sound altogether</source>\n        <translation type=\"unfinished\">Dezactivează toate sunetele</translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "libthedesk/translations/sl_SI.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"si_LK\" sourcelanguage=\"en_US\">\n<context>\n    <name>KeyboardLayoutSelector</name>\n    <message>\n        <source>Select a keyboard layout</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>LocaleSelector</name>\n    <message>\n        <source>Select a locale</source>\n        <translation>izberite lokacijo</translation>\n    </message>\n</context>\n<context>\n    <name>OnboardingFinal</name>\n    <message>\n        <source>That&apos;s everything!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>We hope you enjoy using theDesk!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Get Started</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Done</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>OnboardingVideo</name>\n    <message>\n        <source>qrc:/libthedesk/onboarding/OnboardingVideoForm.qml</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>OnboardingWelcome</name>\n    <message>\n        <source>Language</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Emergency</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Let&apos;s go!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Welcome</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Welcome to %1!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>You&apos;ve made it! We&apos;ll quickly go through some important setup like setting up accounts and connecting to the Internet, and then you&apos;ll be up and running.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Just a bit of important setup to do before you get started. This won&apos;t take long!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>OTHER OPTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>QuietModeManagerTd</name>\n    <message>\n        <source>Sound</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Critical Only</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>No Notifications</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Mute</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Allows all sounds</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Hides non-critical notifications</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Hides all notifications</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Mutes all sound altogether</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "libthedesk/translations/sv.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"sv\" sourcelanguage=\"en_US\">\n<context>\n    <name>KeyboardLayoutSelector</name>\n    <message>\n        <source>Select a keyboard layout</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>LocaleSelector</name>\n    <message>\n        <source>Select a locale</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>OnboardingFinal</name>\n    <message>\n        <source>That&apos;s everything!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>We hope you enjoy using theDesk!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Get Started</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Done</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>OnboardingVideo</name>\n    <message>\n        <source>qrc:/libthedesk/onboarding/OnboardingVideoForm.qml</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>OnboardingWelcome</name>\n    <message>\n        <source>Language</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Emergency</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Let&apos;s go!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Welcome</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Welcome to %1!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>You&apos;ve made it! We&apos;ll quickly go through some important setup like setting up accounts and connecting to the Internet, and then you&apos;ll be up and running.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Just a bit of important setup to do before you get started. This won&apos;t take long!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>OTHER OPTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>QuietModeManagerTd</name>\n    <message>\n        <source>Sound</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Critical Only</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>No Notifications</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Mute</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Allows all sounds</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Hides non-critical notifications</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Hides all notifications</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Mutes all sound altogether</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "libthedesk/translations/tr_TR.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"tr_TR\" sourcelanguage=\"en_US\">\n<context>\n    <name>KeyboardLayoutSelector</name>\n    <message>\n        <source>Select a keyboard layout</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>LocaleSelector</name>\n    <message>\n        <source>Select a locale</source>\n        <translation>Bir yerel ayar seçin</translation>\n    </message>\n</context>\n<context>\n    <name>OnboardingFinal</name>\n    <message>\n        <source>That&apos;s everything!</source>\n        <translation>Biz bittik!</translation>\n    </message>\n    <message>\n        <source>We hope you enjoy using theDesk!</source>\n        <translation>theDesk kullanmaktan keyif alacağınızı umuyoruz!</translation>\n    </message>\n    <message>\n        <source>Get Started</source>\n        <translation>Başlamak</translation>\n    </message>\n    <message>\n        <source>Done</source>\n        <translation>Bitti</translation>\n    </message>\n</context>\n<context>\n    <name>OnboardingVideo</name>\n    <message>\n        <source>qrc:/libthedesk/onboarding/OnboardingVideoForm.qml</source>\n        <translation>qrc:/libthedesk/onboarding/OnboardingVideoForm.qml</translation>\n    </message>\n</context>\n<context>\n    <name>OnboardingWelcome</name>\n    <message>\n        <source>Language</source>\n        <translation>Dil</translation>\n    </message>\n    <message>\n        <source>Emergency</source>\n        <translation>Acil Durum</translation>\n    </message>\n    <message>\n        <source>Let&apos;s go!</source>\n        <translation>Gidelim!</translation>\n    </message>\n    <message>\n        <source>Welcome</source>\n        <translation>Hoş geldin</translation>\n    </message>\n    <message>\n        <source>Welcome to %1!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>You&apos;ve made it! We&apos;ll quickly go through some important setup like setting up accounts and connecting to the Internet, and then you&apos;ll be up and running.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Just a bit of important setup to do before you get started. This won&apos;t take long!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>OTHER OPTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>QuietModeManagerTd</name>\n    <message>\n        <source>Sound</source>\n        <translation type=\"unfinished\">Ses</translation>\n    </message>\n    <message>\n        <source>Critical Only</source>\n        <translation type=\"unfinished\">Yalnızca Kritik</translation>\n    </message>\n    <message>\n        <source>No Notifications</source>\n        <translation type=\"unfinished\">Bildirim Yok</translation>\n    </message>\n    <message>\n        <source>Mute</source>\n        <translation type=\"unfinished\">Sessiz</translation>\n    </message>\n    <message>\n        <source>Allows all sounds</source>\n        <translation type=\"unfinished\">Tüm seslere izin verir</translation>\n    </message>\n    <message>\n        <source>Hides non-critical notifications</source>\n        <translation type=\"unfinished\">Kritik olmayan bildirimleri gizler</translation>\n    </message>\n    <message>\n        <source>Hides all notifications</source>\n        <translation type=\"unfinished\">Tüm bildirimleri gizler</translation>\n    </message>\n    <message>\n        <source>Mutes all sound altogether</source>\n        <translation type=\"unfinished\">Tüm sesleri tamamen kapatır</translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "libthedesk/translations/vi_VN.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"vi_VN\" sourcelanguage=\"en_US\">\n<context>\n    <name>KeyboardLayoutSelector</name>\n    <message>\n        <source>Select a keyboard layout</source>\n        <translation>Chọn bố trí bàn phím</translation>\n    </message>\n</context>\n<context>\n    <name>LocaleSelector</name>\n    <message>\n        <source>Select a locale</source>\n        <translation>Chọn một ngôn ngữ</translation>\n    </message>\n</context>\n<context>\n    <name>OnboardingFinal</name>\n    <message>\n        <source>That&apos;s everything!</source>\n        <translation>Đó là tất cả!</translation>\n    </message>\n    <message>\n        <source>We hope you enjoy using theDesk!</source>\n        <translation>Chúng tôi hy vọng bạn thích sử dụng theDesk!</translation>\n    </message>\n    <message>\n        <source>Get Started</source>\n        <translation>Bắt đầu</translation>\n    </message>\n    <message>\n        <source>Done</source>\n        <translation>Hoàn thành</translation>\n    </message>\n</context>\n<context>\n    <name>OnboardingVideo</name>\n    <message>\n        <source>qrc:/libthedesk/onboarding/OnboardingVideoForm.qml</source>\n        <translation>qrc:/libthedesk/onboarding/OnboardingVideoForm.qml</translation>\n    </message>\n</context>\n<context>\n    <name>OnboardingWelcome</name>\n    <message>\n        <source>Language</source>\n        <translation>Ngôn ngữ</translation>\n    </message>\n    <message>\n        <source>Emergency</source>\n        <translation>Khẩn cấp</translation>\n    </message>\n    <message>\n        <source>Let&apos;s go!</source>\n        <translation>Bắt đầu!</translation>\n    </message>\n    <message>\n        <source>Welcome</source>\n        <translation>Chào mừng</translation>\n    </message>\n    <message>\n        <source>Welcome to %1!</source>\n        <translation>Chào mừng bạn với %1!</translation>\n    </message>\n    <message>\n        <source>You&apos;ve made it! We&apos;ll quickly go through some important setup like setting up accounts and connecting to the Internet, and then you&apos;ll be up and running.</source>\n        <translation>Bạn đã đến! Chúng tôi sẽ thực hiện một số thiết lập quan trọng, ví dụ thiết lập tài khoản và kết nối Internet, sau đó bạn sẵn sàng sử dụng thiết bị của bạn.</translation>\n    </message>\n    <message>\n        <source>Just a bit of important setup to do before you get started. This won&apos;t take long!</source>\n        <translation>Chỉ có một chút thiết lập quan trọng chúng tôi cần thực hiện trước khi bạn bắt đầu được. Điều này sẽ không mất nhiều thời gian!</translation>\n    </message>\n    <message>\n        <source>OTHER OPTIONS</source>\n        <translation>TÙY CHỌN KHÁC</translation>\n    </message>\n</context>\n<context>\n    <name>QuietModeManagerTd</name>\n    <message>\n        <source>Sound</source>\n        <translation>Âm thanh</translation>\n    </message>\n    <message>\n        <source>Critical Only</source>\n        <translation>Chỉ quan trọng</translation>\n    </message>\n    <message>\n        <source>No Notifications</source>\n        <translation>Không có thông báo</translation>\n    </message>\n    <message>\n        <source>Mute</source>\n        <translation>Im lặng</translation>\n    </message>\n    <message>\n        <source>Allows all sounds</source>\n        <translation>Phát các âm thanh</translation>\n    </message>\n    <message>\n        <source>Hides non-critical notifications</source>\n        <translation>Ẩn thông báo không quan trọng</translation>\n    </message>\n    <message>\n        <source>Hides all notifications</source>\n        <translation>Ẩn các thông báo</translation>\n    </message>\n    <message>\n        <source>Mutes all sound altogether</source>\n        <translation>Tắt âm hoàn toàn</translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "libthedesk/translations/zh_CN.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"zh_CN\" sourcelanguage=\"en_US\">\n<context>\n    <name>KeyboardLayoutSelector</name>\n    <message>\n        <source>Select a keyboard layout</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>LocaleSelector</name>\n    <message>\n        <source>Select a locale</source>\n        <translation>选择地区</translation>\n    </message>\n</context>\n<context>\n    <name>OnboardingFinal</name>\n    <message>\n        <source>That&apos;s everything!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>We hope you enjoy using theDesk!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Get Started</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Done</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>OnboardingVideo</name>\n    <message>\n        <source>qrc:/libthedesk/onboarding/OnboardingVideoForm.qml</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>OnboardingWelcome</name>\n    <message>\n        <source>Language</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Emergency</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Let&apos;s go!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Welcome</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Welcome to %1!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>You&apos;ve made it! We&apos;ll quickly go through some important setup like setting up accounts and connecting to the Internet, and then you&apos;ll be up and running.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>Just a bit of important setup to do before you get started. This won&apos;t take long!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <source>OTHER OPTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>QuietModeManagerTd</name>\n    <message>\n        <source>Sound</source>\n        <translation type=\"unfinished\">声音</translation>\n    </message>\n    <message>\n        <source>Critical Only</source>\n        <translation type=\"unfinished\">限紧急</translation>\n    </message>\n    <message>\n        <source>No Notifications</source>\n        <translation type=\"unfinished\">无通知</translation>\n    </message>\n    <message>\n        <source>Mute</source>\n        <translation type=\"unfinished\">静音</translation>\n    </message>\n    <message>\n        <source>Allows all sounds</source>\n        <translation type=\"unfinished\">允许所有的声音</translation>\n    </message>\n    <message>\n        <source>Hides non-critical notifications</source>\n        <translation type=\"unfinished\">隐藏不重要的通知</translation>\n    </message>\n    <message>\n        <source>Hides all notifications</source>\n        <translation type=\"unfinished\">隐藏所有通知</translation>\n    </message>\n    <message>\n        <source>Mutes all sound altogether</source>\n        <translation type=\"unfinished\">开启全局静音</translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "libthedesk/transparentdialog.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"transparentdialog.h\"\n#include \"ui_transparentdialog.h\"\n\n#include <Wm/desktopwm.h>\n#include <tscrim.h>\n\nTransparentDialog::TransparentDialog(QWidget* parent) :\n    QDialog(parent),\n    ui(new Ui::TransparentDialog) {\n    ui->setupUi(this);\n\n//    this->setWindowFlag(Qt::FramelessWindowHint);\n    this->setWindowFlag(Qt::WindowStaysOnTopHint);\n    this->setAttribute(Qt::WA_TranslucentBackground);\n\n    tScrim::scrimForWidget(this)->setBlurEnabled(false);\n}\n\nTransparentDialog::~TransparentDialog() {\n    delete ui;\n}\n\n\nvoid TransparentDialog::showEvent(QShowEvent *event)\n{\n    DesktopWm::setSystemWindow(this, DesktopWm::SystemWindowTypeLockScreen);\n}\n"
  },
  {
    "path": "libthedesk/transparentdialog.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef TRANSPARENTDIALOG_H\n#define TRANSPARENTDIALOG_H\n\n#include <QDialog>\n\nnamespace Ui {\n    class TransparentDialog;\n}\n\nclass TransparentDialog : public QDialog {\n        Q_OBJECT\n\n    public:\n        explicit TransparentDialog(QWidget* parent = nullptr);\n        ~TransparentDialog();\n\n    private:\n        Ui::TransparentDialog* ui;\n\n        // QWidget interface\n    protected:\n        void showEvent(QShowEvent *event);\n};\n\n#endif // TRANSPARENTDIALOG_H\n"
  },
  {
    "path": "libthedesk/transparentdialog.ui",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ui version=\"4.0\">\n <class>TransparentDialog</class>\n <widget class=\"QDialog\" name=\"TransparentDialog\">\n  <property name=\"geometry\">\n   <rect>\n    <x>0</x>\n    <y>0</y>\n    <width>400</width>\n    <height>300</height>\n   </rect>\n  </property>\n  <property name=\"windowTitle\">\n   <string notr=\"true\">Dialog</string>\n  </property>\n </widget>\n <resources/>\n <connections/>\n</ui>\n"
  },
  {
    "path": "locker/CMakeLists.txt",
    "content": "add_subdirectory(locker-common)\nadd_subdirectory(locker-ui)\nadd_subdirectory(locker-checker)\n"
  },
  {
    "path": "locker/locker-checker/CMakeLists.txt",
    "content": "project(locker VERSION 1.0.0 LANGUAGES CXX)\n\nfind_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Core)\n\nset(SOURCES\n        main.cpp\n    )\n\nadd_executable(locker-checker ${SOURCES} ${HEADERS})\ncntp_target_name(locker-checker \"td-locker-checker\")\n\ntarget_link_libraries(locker-checker Qt::Core crypt)\n\ninstall(TARGETS locker-checker\n        PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE SETUID\n        RUNTIME DESTINATION ${CMAKE_INSTALL_LIBDIR}\n        BUNDLE DESTINATION /Applications)\n"
  },
  {
    "path": "locker/locker-checker/main.cpp",
    "content": "#include <QCommandLineParser>\n#include <QCoreApplication>\n#include <QCryptographicHash>\n#include <QFile>\n#include <termios.h>\n#include <unistd.h>\n\nint main(int argc, char* argv[]) {\n    QCoreApplication::setSetuidAllowed(true);\n    QCoreApplication a(argc, argv);\n\n    QCommandLineParser parser;\n    parser.addHelpOption();\n    parser.addPositionalArgument(\"username\", \"Username to check the password of\", \"<username>\");\n    parser.process(a);\n\n    QFile shadow(\"/etc/shadow\");\n\n    shadow.open(QFile::ReadOnly);\n    if (!shadow.isReadable()) {\n        QTextStream(stderr) << \"Can't read the shadow file.\\n\";\n        QTextStream(stderr) << \"This command needs to be run as root.\\n\";\n        return 2;\n    }\n\n    if (parser.positionalArguments().count() < 1) {\n        QTextStream(stderr) << \"Not enough arguments\\n\";\n        return 2;\n    }\n\n    // TODO: THIS IS BAD.\n    // We should not be reading the shadow file directly.\n    // Consider invoking PAM\n    QStringList shadowFile(QString(shadow.readAll()).split(\"\\n\"));\n    for (const QString& user : shadowFile) {\n        auto parts = user.split(\":\");\n        if (parts.length() < 2) continue;\n\n        if (parts.constFirst() == parser.positionalArguments().at(0)) {\n            QString hashedPassword = parts.at(1);\n            QStringList passwordParts = hashedPassword.split(\"$\");\n            if (passwordParts.count() == 1) {\n                QTextStream(stdout) << \"No password.\\n\";\n                return 0;\n            } else if (passwordParts.count() != 4) {\n                QTextStream(stdout) << \"Unable to parse shadow file\\n\";\n                return 2;\n            } else {\n                QTextStream in(stdin, QIODevice::ReadOnly);\n\n                // Turn off echo\n                struct termios term;\n                tcgetattr(fileno(stdin), &term);\n\n                term.c_lflag &= ~ECHO;\n                tcsetattr(fileno(stdin), 0, &term);\n\n                QTextStream(stderr) << \"Password: \";\n\n                const char* characters = (crypt(in.readLine().toUtf8().data(), QString(\"$\" + passwordParts.at(1) + \"$\" + passwordParts.at(2)).toStdString().c_str()));\n                QString encryptedPass(characters);\n\n                QTextStream(stderr) << \"\\n\";\n\n                if (encryptedPass.split(\"$\").at(3) == passwordParts.at(3)) {\n                    QTextStream(stdout) << \"Password correct\\n\";\n                    return 0;\n                } else {\n                    QTextStream(stderr) << \"Password incorrect\\n\";\n                    return 1;\n                }\n            }\n        }\n    }\n\n    QTextStream(stderr) << \"Unable to find user in shadow file\\n\";\n    return 2;\n}\n"
  },
  {
    "path": "locker/locker-common/CMakeLists.txt",
    "content": "project(locker VERSION 1.0.0 LANGUAGES CXX)\n\nfind_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Core)\nfind_package(libcontemporary REQUIRED)\ncntp_find_pkgconfig(X11 x11)\n\nset(SOURCES\n    lockergrabs.cpp\n    )\n\nset(HEADERS\n    lockergrabs.h\n    )\n\nadd_library(locker-common STATIC ${SOURCES} ${HEADERS})\ntarget_link_libraries(locker-common Qt::Core libcontemporary)\n\nIF(${X11_FOUND})\n    target_link_libraries(locker-common PkgConfig::X11)\n    target_compile_definitions(locker-common PRIVATE HAVE_X11)\nENDIF()\n"
  },
  {
    "path": "locker/locker-common/lockergrabs.cpp",
    "content": "#include \"lockergrabs.h\"\n\n#ifdef HAVE_X11\n    #include <tx11info.h>\n\n    #include <X11/Xlib.h>\n#endif\n\nvoid LockerGrabs::establishGrab() {\n#ifdef HAVE_X11\n    if (tX11Info::isPlatformX11()) {\n        XGrabKeyboard(tX11Info::display(), tX11Info::appRootWindow(), True, GrabModeAsync, GrabModeAsync, CurrentTime);\n        XGrabPointer(tX11Info::display(), tX11Info::appRootWindow(), True, None, GrabModeAsync, GrabModeAsync, tX11Info::appRootWindow(), None, CurrentTime);\n    }\n#endif\n}\n\nvoid LockerGrabs::releaseGrab() {\n#ifdef HAVE_X11\n    if (tX11Info::isPlatformX11()) {\n        XUngrabKeyboard(tX11Info::display(), CurrentTime);\n        XUngrabPointer(tX11Info::display(), CurrentTime);\n    }\n#endif\n}\n"
  },
  {
    "path": "locker/locker-common/lockergrabs.h",
    "content": "#ifndef LOCKERGRABS_H\n#define LOCKERGRABS_H\n\nnamespace LockerGrabs {\n    void establishGrab();\n    void releaseGrab();\n}; // namespace LockerGrabs\n\n#endif // LOCKERGRABS_H\n"
  },
  {
    "path": "locker/locker-ui/CMakeLists.txt",
    "content": "project(locker VERSION 1.0.0 LANGUAGES CXX)\n\nfind_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets DBus Sql PrintSupport)\nfind_package(libcontemporary REQUIRED)\nfind_package(libtdesktopenvironment REQUIRED)\ncntp_find_pkgconfig(X11 x11)\n\nset(SOURCES\n        main.cpp\n        mainwindow.cpp mainwindow.ui\n        underlineanimation.cpp\n        lockmanager.cpp\n    )\n\nset(HEADERS\n        mainwindow.h\n        underlineanimation.h\n        lockmanager.h\n    )\n\nadd_executable(locker-ui ${SOURCES} ${HEADERS})\n\nset_target_properties(locker-ui PROPERTIES\n        MACOSX_BUNDLE TRUE\n        MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/Info.plist.in\n        MACOSX_BUNDLE_GUI_IDENTIFIER com.vicr123.locker\n        WIN32_EXECUTABLE TRUE\n        CNTP_DATA_SUBDIR locker)\n\ncntp_init(locker-ui 20)\ncntp_translate(locker-ui)\ncntp_target_name(locker-ui \"td-locker\")\n\ntarget_link_libraries(locker-ui Qt::Widgets Qt::DBus Qt::Sql Qt::PrintSupport libcontemporary libtdesktopenvironment libthedesk locker-common)\ntarget_include_directories(locker-ui PUBLIC ../locker-common/)\n\ninstall(TARGETS locker-ui\n        RUNTIME DESTINATION ${CMAKE_INSTALL_LIBDIR}\n        BUNDLE DESTINATION /Applications)\n"
  },
  {
    "path": "locker/locker-ui/lockmanager.cpp",
    "content": "#include \"lockmanager.h\"\n\n#include \"mainwindow.h\"\n#include <QTimer>\n#include <Screens/screendaemon.h>\n#include <Screens/systemscreen.h>\n#include <Wm/desktopwm.h>\n#include <lockergrabs.h>\n\nstruct LockManagerPrivate {\n        QList<MainWindow*> openWindows;\n        QTimer* grabTimer;\n\n        bool debugMode = false;\n};\n\nLockManager* LockManager::instance() {\n    static auto manager = new LockManager();\n    return manager;\n}\n\nvoid LockManager::setDebug(bool debugMode) {\n    d->debugMode = debugMode;\n    if (debugMode) {\n        LockerGrabs::releaseGrab();\n    }\n\n    this->openLockWindows();\n}\n\nvoid LockManager::openLockWindows() {\n    for (auto window : d->openWindows) {\n        window->close();\n        window->deleteLater();\n    }\n    d->openWindows.clear();\n\n    if (d->debugMode) {\n        auto* w = new MainWindow();\n        w->show();\n        d->openWindows.append(w);\n    } else {\n        for (auto screen : ScreenDaemon::instance()->screens()) {\n            auto* w = new MainWindow();\n            w->setWindowFlags(Qt::WindowStaysOnTopHint);\n            w->show();\n            w->setGeometry(screen->geometry());\n            w->showFullScreen();\n            d->openWindows.append(w);\n        }\n    }\n}\n\nvoid LockManager::establishGrab() {\n    if (d->debugMode) return;\n\n    LockerGrabs::establishGrab();\n}\n\nvoid LockManager::raiseAll() {\n    for (auto w : d->openWindows) {\n        w->raise();\n    }\n}\n\nLockManager::LockManager(QObject* parent) :\n    QObject{parent} {\n    d = new LockManagerPrivate();\n\n    connect(ScreenDaemon::instance(), &ScreenDaemon::screensUpdated, this, &LockManager::openLockWindows);\n    openLockWindows();\n\n    d->grabTimer = new QTimer();\n    d->grabTimer->setInterval(5000);\n    connect(d->grabTimer, &QTimer::timeout, this, &LockManager::establishGrab);\n    connect(d->grabTimer, &QTimer::timeout, this, &LockManager::raiseAll);\n    d->grabTimer->start();\n\n    establishGrab();\n}\n"
  },
  {
    "path": "locker/locker-ui/lockmanager.h",
    "content": "#ifndef LOCKMANAGER_H\n#define LOCKMANAGER_H\n\n#include <QObject>\n\nstruct LockManagerPrivate;\nclass LockManager : public QObject {\n        Q_OBJECT\n    public:\n        static LockManager* instance();\n\n        void setDebug(bool debugMode);\n\n        void openLockWindows();\n        void establishGrab();\n        void raiseAll();\n\n    signals:\n\n    private:\n        explicit LockManager(QObject* parent = nullptr);\n\n        LockManagerPrivate* d;\n};\n\n#endif // LOCKMANAGER_H\n"
  },
  {
    "path": "locker/locker-ui/main.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"lockmanager.h\"\n\n#include <QCommandLineParser>\n#include <tapplication.h>\n\nint main(int argc, char* argv[]) {\n    tApplication a(argc, argv);\n    a.setApplicationShareDir(\"thedesk/locker\");\n    a.installTranslators();\n\n    QCommandLineParser parser;\n    parser.addHelpOption();\n    parser.addOption({\n        {\"d\", \"debug\"},\n        \"Enable Debug Mode\"\n    });\n    parser.process(a);\n\n    a.setApplicationVersion(\"4.0\");\n    a.setGenericName(QApplication::translate(\"main\", \"Screen Locker\"));\n    a.setApplicationLicense(tApplication::Gpl3OrLater);\n    a.setCopyrightHolder(\"Victor Tran\");\n    a.setCopyrightYear(\"2022\");\n    a.setOrganizationName(\"theSuite\");\n    a.setApplicationName(T_APPMETA_READABLE_NAME);\n    a.setDesktopFileName(T_APPMETA_DESKTOP_ID);\n\n    a.registerCrashTrap();\n\n    LockManager::instance()->setDebug(parser.isSet(\"debug\"));\n\n    int retval = a.exec();\n    return retval;\n}\n"
  },
  {
    "path": "locker/locker-ui/mainwindow.cpp",
    "content": "#include \"mainwindow.h\"\n#include \"ui_mainwindow.h\"\n\n#include <QCoroProcess>\n#include <QProcess>\n#include <SystemSlide/systemslide.h>\n#include <Wm/desktopwm.h>\n#include <lockmanager.h>\n#include <terrorflash.h>\n\nstruct MainWindowPrivate {\n        QString lockCheckProcess;\n\n        SystemSlide* slide;\n};\n\nMainWindow::MainWindow(QWidget* parent) :\n    QMainWindow(parent),\n    ui(new Ui::MainWindow) {\n    ui->setupUi(this);\n\n    d = new MainWindowPrivate();\n    d->slide = new SystemSlide(this);\n    d->slide->setBackgroundMode(SystemSlide::LockScreenBackground);\n    d->slide->setAction(tr(\"Unlock\"), tr(\"Resume your session, continuing where you left off\"));\n    d->slide->setActionIcon(QIcon::fromTheme(\"go-up\"));\n    d->slide->setDragResultWidget(this->centralWidget());\n\n    if (qEnvironmentVariableIsSet(\"TD_LOCK_CHECKER\")) {\n        d->lockCheckProcess = qEnvironmentVariable(\"TD_LOCK_CHECKER\");\n    } else {\n        d->lockCheckProcess = \"/usr/lib/td-locker-checker\"; // TODO: Don't hardcode\n    }\n\n    ui->usernameLabel->setText(DesktopWm::userDisplayName());\n    ui->capsLockOn->setVisible(false);\n\n    connect(d->slide, &SystemSlide::deactivated, this, [this] {\n        if (this->checkPassword(\"\")) {\n            QApplication::exit(0);\n            return;\n        }\n\n        ui->password->setFocus();\n\n        QTimer::singleShot(100, this, [this] {\n            ui->PasswordUnderline->startAnimation();\n        });\n    });\n}\n\nMainWindow::~MainWindow() {\n    delete d;\n    delete ui;\n}\n\nvoid MainWindow::on_titleLabel_backButtonClicked() {\n    d->slide->activate();\n}\n\nbool MainWindow::checkPassword(QString password) {\n    QString name = qgetenv(\"USER\");\n    if (name.isEmpty()) {\n        name = qgetenv(\"USERNAME\");\n    }\n\n    QProcess checker;\n    checker.start(d->lockCheckProcess, {name});\n    checker.write(password.toUtf8());\n    checker.write(\"\\n\");\n    checker.closeWriteChannel();\n    checker.waitForFinished();\n    return checker.exitCode() == 0;\n}\n\nvoid MainWindow::on_unlockButton_clicked() {\n    this->setEnabled(false);\n    if (checkPassword(ui->password->text())) {\n        QApplication::exit(0);\n        return;\n    }\n\n    this->setEnabled(true);\n    ui->password->setText(\"\");\n    ui->password->setFocus();\n\n    tErrorFlash::flashError(ui->password);\n}\n\nvoid MainWindow::on_password_returnPressed() {\n    ui->unlockButton->click();\n}\n\nvoid MainWindow::changeEvent(QEvent* event) {\n    if (event->type() == QEvent::ActivationChange) {\n        LockManager::instance()->raiseAll();\n    }\n}\n\nvoid MainWindow::showEvent(QShowEvent* event) {\n    DesktopWm::instance()->setSystemWindow(this, DesktopWm::SystemWindowTypeLockScreen);\n}\n"
  },
  {
    "path": "locker/locker-ui/mainwindow.h",
    "content": "#ifndef MAINWINDOW_H\n#define MAINWINDOW_H\n\n#include <QMainWindow>\n\nnamespace Ui {\n    class MainWindow;\n}\n\nstruct MainWindowPrivate;\nclass MainWindow : public QMainWindow {\n        Q_OBJECT\n\n    public:\n        explicit MainWindow(QWidget* parent = nullptr);\n        ~MainWindow();\n\n    private slots:\n        void on_titleLabel_backButtonClicked();\n\n        void on_unlockButton_clicked();\n\n        void on_password_returnPressed();\n\n    private:\n        Ui::MainWindow* ui;\n        MainWindowPrivate* d;\n\n        bool checkPassword(QString password);\n\n        // QWidget interface\n    protected:\n        void changeEvent(QEvent* event);\n\n        // QWidget interface\n    protected:\n        void showEvent(QShowEvent *event);\n};\n\n#endif // MAINWINDOW_H\n"
  },
  {
    "path": "locker/locker-ui/mainwindow.ui",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ui version=\"4.0\">\n <class>MainWindow</class>\n <widget class=\"QMainWindow\" name=\"MainWindow\">\n  <property name=\"geometry\">\n   <rect>\n    <x>0</x>\n    <y>0</y>\n    <width>800</width>\n    <height>600</height>\n   </rect>\n  </property>\n  <property name=\"windowTitle\">\n   <string>MainWindow</string>\n  </property>\n  <widget class=\"QWidget\" name=\"centralwidget\">\n   <layout class=\"QVBoxLayout\" name=\"verticalLayout\">\n    <property name=\"spacing\">\n     <number>0</number>\n    </property>\n    <property name=\"leftMargin\">\n     <number>0</number>\n    </property>\n    <property name=\"topMargin\">\n     <number>0</number>\n    </property>\n    <property name=\"rightMargin\">\n     <number>0</number>\n    </property>\n    <property name=\"bottomMargin\">\n     <number>0</number>\n    </property>\n    <item>\n     <widget class=\"tTitleLabel\" name=\"titleLabel\">\n      <property name=\"text\">\n       <string>Unlock Session</string>\n      </property>\n     </widget>\n    </item>\n    <item>\n     <layout class=\"QGridLayout\" name=\"gridLayout\">\n      <property name=\"leftMargin\">\n       <number>9</number>\n      </property>\n      <property name=\"topMargin\">\n       <number>9</number>\n      </property>\n      <property name=\"rightMargin\">\n       <number>9</number>\n      </property>\n      <property name=\"bottomMargin\">\n       <number>9</number>\n      </property>\n      <item row=\"1\" column=\"0\">\n       <spacer name=\"horizontalSpacer\">\n        <property name=\"orientation\">\n         <enum>Qt::Horizontal</enum>\n        </property>\n        <property name=\"sizeHint\" stdset=\"0\">\n         <size>\n          <width>40</width>\n          <height>20</height>\n         </size>\n        </property>\n       </spacer>\n      </item>\n      <item row=\"2\" column=\"1\">\n       <spacer name=\"verticalSpacer_2\">\n        <property name=\"orientation\">\n         <enum>Qt::Vertical</enum>\n        </property>\n        <property name=\"sizeHint\" stdset=\"0\">\n         <size>\n          <width>20</width>\n          <height>40</height>\n         </size>\n        </property>\n       </spacer>\n      </item>\n      <item row=\"0\" column=\"1\">\n       <spacer name=\"verticalSpacer\">\n        <property name=\"orientation\">\n         <enum>Qt::Vertical</enum>\n        </property>\n        <property name=\"sizeHint\" stdset=\"0\">\n         <size>\n          <width>20</width>\n          <height>40</height>\n         </size>\n        </property>\n       </spacer>\n      </item>\n      <item row=\"1\" column=\"1\">\n       <widget class=\"QFrame\" name=\"lockFrame\">\n        <property name=\"minimumSize\">\n         <size>\n          <width>500</width>\n          <height>0</height>\n         </size>\n        </property>\n        <property name=\"autoFillBackground\">\n         <bool>false</bool>\n        </property>\n        <property name=\"frameShape\">\n         <enum>QFrame::NoFrame</enum>\n        </property>\n        <property name=\"frameShadow\">\n         <enum>QFrame::Plain</enum>\n        </property>\n        <property name=\"lineWidth\">\n         <number>0</number>\n        </property>\n        <layout class=\"QVBoxLayout\" name=\"verticalLayout_2\">\n         <item>\n          <widget class=\"QLabel\" name=\"usernameLabel\">\n           <property name=\"font\">\n            <font>\n             <pointsize>15</pointsize>\n            </font>\n           </property>\n           <property name=\"text\">\n            <string notr=\"true\">Username</string>\n           </property>\n           <property name=\"buddy\">\n            <cstring></cstring>\n           </property>\n          </widget>\n         </item>\n         <item>\n          <widget class=\"QLabel\" name=\"label_3\">\n           <property name=\"font\">\n            <font>\n             <pointsize>20</pointsize>\n            </font>\n           </property>\n           <property name=\"text\">\n            <string>Please enter your password</string>\n           </property>\n          </widget>\n         </item>\n         <item>\n          <spacer name=\"verticalSpacer_7\">\n           <property name=\"orientation\">\n            <enum>Qt::Vertical</enum>\n           </property>\n           <property name=\"sizeType\">\n            <enum>QSizePolicy::Fixed</enum>\n           </property>\n           <property name=\"sizeHint\" stdset=\"0\">\n            <size>\n             <width>20</width>\n             <height>40</height>\n            </size>\n           </property>\n          </spacer>\n         </item>\n         <item>\n          <layout class=\"QVBoxLayout\" name=\"verticalLayout_14\">\n           <property name=\"spacing\">\n            <number>0</number>\n           </property>\n           <property name=\"bottomMargin\">\n            <number>0</number>\n           </property>\n           <item>\n            <layout class=\"QHBoxLayout\" name=\"horizontalLayout_8\">\n             <property name=\"bottomMargin\">\n              <number>0</number>\n             </property>\n             <item>\n              <widget class=\"QLineEdit\" name=\"password\">\n               <property name=\"font\">\n                <font>\n                 <pointsize>30</pointsize>\n                </font>\n               </property>\n               <property name=\"autoFillBackground\">\n                <bool>true</bool>\n               </property>\n               <property name=\"frame\">\n                <bool>false</bool>\n               </property>\n               <property name=\"echoMode\">\n                <enum>QLineEdit::Password</enum>\n               </property>\n               <property name=\"alignment\">\n                <set>Qt::AlignCenter</set>\n               </property>\n               <property name=\"clearButtonEnabled\">\n                <bool>false</bool>\n               </property>\n              </widget>\n             </item>\n             <item>\n              <widget class=\"QLabel\" name=\"capsLockOn\">\n               <property name=\"toolTip\">\n                <string>Caps Lock is on</string>\n               </property>\n               <property name=\"text\">\n                <string notr=\"true\">Caps Lock is on</string>\n               </property>\n              </widget>\n             </item>\n             <item>\n              <widget class=\"QPushButton\" name=\"unlockButton\">\n               <property name=\"sizePolicy\">\n                <sizepolicy hsizetype=\"Preferred\" vsizetype=\"Preferred\">\n                 <horstretch>0</horstretch>\n                 <verstretch>0</verstretch>\n                </sizepolicy>\n               </property>\n               <property name=\"text\">\n                <string/>\n               </property>\n               <property name=\"icon\">\n                <iconset theme=\"go-next\"/>\n               </property>\n               <property name=\"default\">\n                <bool>false</bool>\n               </property>\n               <property name=\"flat\">\n                <bool>true</bool>\n               </property>\n              </widget>\n             </item>\n            </layout>\n           </item>\n           <item>\n            <widget class=\"UnderlineAnimation\" name=\"PasswordUnderline\" native=\"true\"/>\n           </item>\n          </layout>\n         </item>\n        </layout>\n       </widget>\n      </item>\n      <item row=\"1\" column=\"2\">\n       <spacer name=\"horizontalSpacer_2\">\n        <property name=\"orientation\">\n         <enum>Qt::Horizontal</enum>\n        </property>\n        <property name=\"sizeHint\" stdset=\"0\">\n         <size>\n          <width>40</width>\n          <height>20</height>\n         </size>\n        </property>\n       </spacer>\n      </item>\n     </layout>\n    </item>\n   </layout>\n  </widget>\n </widget>\n <customwidgets>\n  <customwidget>\n   <class>tTitleLabel</class>\n   <extends>QLabel</extends>\n   <header location=\"global\">ttitlelabel.h</header>\n   <slots>\n    <slot>backButtonClicked()</slot>\n   </slots>\n  </customwidget>\n  <customwidget>\n   <class>UnderlineAnimation</class>\n   <extends>QWidget</extends>\n   <header>underlineanimation.h</header>\n   <container>1</container>\n  </customwidget>\n </customwidgets>\n <resources/>\n <connections/>\n</ui>\n"
  },
  {
    "path": "locker/locker-ui/translations/en_US.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\">\n<context>\n    <name>MainWindow</name>\n    <message>\n        <location filename=\"../mainwindow.ui\" line=\"14\"/>\n        <location filename=\"../../../../build-thedesk-Chroot_6-Debug/locker/locker-ui/locker-ui_autogen/include/ui_mainwindow.h\" line=\"188\"/>\n        <source>MainWindow</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../mainwindow.ui\" line=\"36\"/>\n        <location filename=\"../../../../build-thedesk-Chroot_6-Debug/locker/locker-ui/locker-ui_autogen/include/ui_mainwindow.h\" line=\"189\"/>\n        <source>Unlock Session</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../mainwindow.ui\" line=\"137\"/>\n        <location filename=\"../../../../build-thedesk-Chroot_6-Debug/locker/locker-ui/locker-ui_autogen/include/ui_mainwindow.h\" line=\"190\"/>\n        <source>Please enter your password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../mainwindow.ui\" line=\"197\"/>\n        <location filename=\"../../../../build-thedesk-Chroot_6-Debug/locker/locker-ui/locker-ui_autogen/include/ui_mainwindow.h\" line=\"192\"/>\n        <source>Caps Lock is on</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../mainwindow.cpp\" line=\"25\"/>\n        <source>Unlock</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../mainwindow.cpp\" line=\"25\"/>\n        <source>Resume your session, continuing where you left off</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>main</name>\n    <message>\n        <location filename=\"../main.cpp\" line=\"39\"/>\n        <source>Screen Locker</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "locker/locker-ui/underlineanimation.cpp",
    "content": "#include \"underlineanimation.h\"\n\nUnderlineAnimation::UnderlineAnimation(QWidget *parent) : QWidget(parent)\n{\n    anim1 = new tVariantAnimation();\n    anim1->setStartValue(0);\n    anim1->setEndValue(this->width() / 2);\n    anim1->setDuration(500);\n    anim1->setEasingCurve(QEasingCurve::OutCubic);\n    connect(anim1, &tVariantAnimation::valueChanged, [=](QVariant value) {\n        this->repaint();\n    });\n\n    QColor col = this->palette().color(QPalette::WindowText).toRgb();\n    anim2 = new tVariantAnimation();\n    anim2->setStartValue(col);\n\n    col.setAlpha(0);\n    anim2->setEndValue(col);\n    anim2->setDuration(500);\n    anim2->setEasingCurve(QEasingCurve::OutCubic);\n}\n\nQSize UnderlineAnimation::sizeHint() const {\n    return QSize(20, 1);\n}\n\nvoid UnderlineAnimation::startAnimation() {\n    anim1->setEndValue(this->width() / 2);\n    anim1->start();\n\n    anim2->setCurrentTime(0);\n    //QTimer::singleShot(500, [=] {\n        anim2->start();\n    //});\n}\n\nvoid UnderlineAnimation::paintEvent(QPaintEvent *event) {\n    QPainter p(this);\n    p.setPen(Qt::transparent);\n    p.setBrush(anim2->currentValue().value<QColor>());\n\n    int mid = this->width() / 2;\n    p.drawRect(mid - anim1->currentValue().toInt(), 0, anim1->currentValue().toInt() * 2, this->height());\n}\n"
  },
  {
    "path": "locker/locker-ui/underlineanimation.h",
    "content": "#ifndef UNDERLINEANIMATION_H\n#define UNDERLINEANIMATION_H\n\n#include <QWidget>\n#include <QPaintEvent>\n#include <tvariantanimation.h>\n#include <QPainter>\n#include <QTimer>\n\nclass UnderlineAnimation : public QWidget\n{\n        Q_OBJECT\n    public:\n        explicit UnderlineAnimation(QWidget *parent = nullptr);\n\n\n        QSize sizeHint() const;\n    signals:\n\n    public slots:\n        void startAnimation();\n\n    private:\n        void paintEvent(QPaintEvent* event);\n\n        tVariantAnimation *anim1, *anim2;\n};\n\n#endif // UNDERLINEANIMATION_H\n"
  },
  {
    "path": "platform/CMakeLists.txt",
    "content": "cmake_minimum_required(VERSION 3.24.0)\n\nfind_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets)\nfind_package(libcontemporary)\n\ncntp_define_build_dirs()\n\nset(SOURCES\n    cursorhandler.cpp\n    fontformat.cpp\n    iconloaderengine.cpp\n    messagedialog/messagedialog.cpp\n    messagedialog/messagedialogcontroller.cpp\n    messagedialog/messagedialoghelper.cpp\n    paletteformat.cpp\n    platformtheme.cpp\n    plugin.cpp\n\n    messagedialog/messagedialog.ui\n\n    thedesk-platform-resources.qrc\n)\n\nset(HEADERS\n    cursorhandler.h\n    fontformat.h\n    iconloaderengine.h\n    messagedialog/messagedialog.h\n    messagedialog/messagedialogcontroller.h\n    messagedialog/messagedialoghelper.h\n    paletteformat.h\n    platformtheme.h\n    plugin.h\n)\n\nadd_library(thedesk-platform-plugin SHARED ${SOURCES} ${HEADERS})\ntarget_include_directories(thedesk-platform-plugin PUBLIC ../libthedesk/)\n\nset_target_properties(thedesk-platform-plugin PROPERTIES\n        OUTPUT_NAME thedesk-platform\n        FRAMEWORK FALSE\n        CNTP_DATA_SUBDIR thedesk/platform\n    )\n\ncntp_init_plugin(thedesk thedesk-platform-plugin 20 thedesk-platform-plugin)\ncntp_translate(thedesk-platform-plugin)\ncntp_defaults_file(thedesk-platform-plugin\n    DEFAULTS_FILE thedesk-platform.conf)\n\ntarget_link_libraries(thedesk-platform-plugin Qt::Widgets Qt::GuiPrivate libcontemporary)\ntarget_include_directories(thedesk-platform-plugin PRIVATE ${Qt${QT_VERSION_MAJOR}Gui_PRIVATE_INCLUDE_DIRS})\n\ninstall(TARGETS thedesk-platform-plugin\n        LIBRARY DESTINATION ${CNTP_INSTALL_PLUGINS}/platformthemes/\n        RUNTIME DESTINATION ${CNTP_INSTALL_PLUGINS}/platformthemes/)\n"
  },
  {
    "path": "platform/cursorhandler.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"cursorhandler.h\"\n\n#include <tlogger.h>\n#include <tsettings.h>\n#include <QLibrary>\n\n#ifdef HAVE_X11\n    #include <QX11Info>\n#endif\n\n\nstruct CursorHandlerPrivate {\n    tSettings* settings;\n};\n\nCursorHandler::CursorHandler(QObject* parent) : QObject(parent) {\n    d = new CursorHandlerPrivate();\n    d->settings = new tSettings(\"theSuite\", \"theDesk.platform\", this);\n\n    connect(d->settings, &tSettings::settingChanged, this, [ = ](QString key, QVariant value) {\n        if (key == \"Platform/cursor\" || key == \"Platform/cursorSize\") {\n            this->updateApplicationCursor();\n        }\n    });\n    this->updateApplicationCursor();\n}\n\nCursorHandler::~CursorHandler() {\n    delete d;\n}\n\nvoid CursorHandler::updateApplicationCursor() {\n#ifdef HAVE_X11\n    if (QX11Info::isPlatformX11()) {\n        //Load cursor library\n        QLibrary xc(QString(SYSTEM_LIBRARY_DIRECTORY).append(\"/libXcursor.so\"));\n\n        if (xc.load()) {\n            typedef int (*setThemeFunc) (Display*, const char*);\n            typedef int (*setSizeFunc) (Display*, int);\n\n            auto XcursorSetTheme = reinterpret_cast<setThemeFunc>(xc.resolve(\"XcursorSetTheme\"));\n            auto XcursorSetDefaultSize = reinterpret_cast<setSizeFunc>(xc.resolve(\"XcursorSetDefaultSize\"));\n\n            //Set cursors\n            XcursorSetTheme(QX11Info::display(), qPrintable(d->settings->value(\"Platform/cursor\").toString()));\n            XcursorSetDefaultSize(QX11Info::display(), d->settings->value(\"Platform/cursorSize\").toInt());\n        } else {\n            tDebug(\"CursorHandler\") << \"Could not load XCursor library: \" + xc.errorString();\n        }\n    }\n#endif\n}\n"
  },
  {
    "path": "platform/cursorhandler.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef CURSORHANDLER_H\n#define CURSORHANDLER_H\n\n#include <QObject>\n\nstruct CursorHandlerPrivate;\nclass CursorHandler : public QObject {\n        Q_OBJECT\n    public:\n        explicit CursorHandler(QObject* parent = nullptr);\n        ~CursorHandler();\n\n    signals:\n\n    private:\n        CursorHandlerPrivate* d;\n\n        void updateApplicationCursor();\n};\n\n#endif // CURSORHANDLER_H\n"
  },
  {
    "path": "platform/fontformat.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"fontformat.h\"\n\n#include <QMap>\n\nconst QMap<QString, QPlatformTheme::Font> fontTypes = {\n    {\"system\", QPlatformTheme::SystemFont},\n    {\"menu\", QPlatformTheme::MenuFont},\n    {\"menubar\", QPlatformTheme::MenuBarFont},\n    {\"menuItem\", QPlatformTheme::MenuItemFont},\n    {\"messageBox\", QPlatformTheme::MessageBoxFont},\n    {\"label\", QPlatformTheme::LabelFont},\n    {\"tipLabel\", QPlatformTheme::TipLabelFont},\n    {\"statusBar\", QPlatformTheme::StatusBarFont},\n    {\"titleBar\", QPlatformTheme::TitleBarFont},\n    {\"titleBar.mdi\", QPlatformTheme::MdiSubWindowTitleFont},\n    {\"titleBar.dock\", QPlatformTheme::DockWidgetTitleFont},\n    {\"button\", QPlatformTheme::PushButtonFont},\n    {\"button.tool\", QPlatformTheme::ToolButtonFont},\n    {\"button.tab\", QPlatformTheme::TabButtonFont},\n    {\"checkbox\", QPlatformTheme::CheckBoxFont},\n    {\"radio\", QPlatformTheme::RadioButtonFont},\n    {\"view.item\", QPlatformTheme::ItemViewFont},\n    {\"view.list\", QPlatformTheme::ListViewFont},\n    {\"view.header\", QPlatformTheme::HeaderViewFont},\n    {\"combo\", QPlatformTheme::ListBoxFont},\n    {\"combo.item\", QPlatformTheme::ComboMenuItemFont},\n    {\"combo.edit\", QPlatformTheme::ComboLineEditFont},\n    {\"small\", QPlatformTheme::SmallFont},\n    {\"mini\", QPlatformTheme::MiniFont},\n    {\"groupboxTitle\", QPlatformTheme::GroupBoxTitleFont},\n    {\"editor\", QPlatformTheme::EditorFont},\n    {\"fixed\", QPlatformTheme::FixedFont}\n};\n\nQPlatformTheme::Font FontFormat::fontForString(QString string) {\n    return fontTypes.value(string);\n}\n"
  },
  {
    "path": "platform/fontformat.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef FONTFORMAT_H\n#define FONTFORMAT_H\n\n#include <qpa/qplatformtheme.h>\n\nnamespace FontFormat {\n    QPlatformTheme::Font fontForString(QString string);\n}\n\n#endif // FONTFORMAT_H\n"
  },
  {
    "path": "platform/iconloaderengine.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"iconloaderengine.h\"\n\n#include <libcontemporary_global.h>\n\nstruct IconLoaderEnginePrivate {\n        QString iconName;\n        QIconEngine* parentEngine;\n        //        QIconEngine* rtlParentEngine;\n};\n\nIconLoaderEngine::IconLoaderEngine(QString iconName, QIconEngine* parentEngine, QIconEngine* rtlParentEngine) {\n    d = new IconLoaderEnginePrivate();\n    d->iconName = iconName;\n    d->parentEngine = parentEngine;\n    //    d->rtlParentEngine = rtlParentEngine;\n}\n\nIconLoaderEngine::~IconLoaderEngine() {\n    delete d->parentEngine;\n    delete d;\n}\n\nQPixmap IconLoaderEngine::pixmap(const QSize& size, QIcon::Mode mode, QIcon::State state) {\n    QImage image;\n    //    if (QApplication::layoutDirection() == Qt::RightToLeft && d->rtlParentEngine->availableSizes(mode, state).length() > 0) {\n    //        image = d->rtlParentEngine->pixmap(size, mode, state).toImage();\n    //    } else {\n    image = d->parentEngine->pixmap(size, mode, state).toImage();\n    //    }\n    libContemporaryCommon::tintImage(image, QApplication::palette().color(QPalette::WindowText));\n    return QPixmap::fromImage(image);\n}\n\nvoid IconLoaderEngine::paint(QPainter* painter, const QRect& rect, QIcon::Mode mode, QIcon::State state) {\n    //    if (QApplication::layoutDirection() == Qt::RightToLeft && d->rtlParentEngine->availableSizes(mode, state).length() > 0) {\n    //        d->rtlParentEngine->paint(painter, rect, mode, state);\n    //    } else {\n    d->parentEngine->paint(painter, rect, mode, state);\n    //    }\n}\n\nQSize IconLoaderEngine::actualSize(const QSize& size, QIcon::Mode mode, QIcon::State state) {\n    //    if (QApplication::layoutDirection() == Qt::RightToLeft) {\n    //        return d->rtlParentEngine->actualSize(size, mode, state);\n    //    } else {\n    return d->parentEngine->actualSize(size, mode, state);\n    //    }\n}\n\nvoid IconLoaderEngine::addPixmap(const QPixmap& pixmap, QIcon::Mode mode, QIcon::State state) {\n    d->parentEngine->addPixmap(pixmap, mode, state);\n    //    d->rtlParentEngine->addPixmap(pixmap, mode, state);\n}\n\nvoid IconLoaderEngine::addFile(const QString& fileName, const QSize& size, QIcon::Mode mode, QIcon::State state) {\n    d->parentEngine->addFile(fileName, size, mode, state);\n    //    d->rtlParentEngine->addFile(fileName, size, mode, state);\n}\n\nQString IconLoaderEngine::key() const {\n    return d->parentEngine->key();\n}\n\nQIconEngine* IconLoaderEngine::clone() const {\n    //    return new IconLoaderEngine(d->iconName, d->parentEngine->clone(), d->rtlParentEngine->clone());\n    return new IconLoaderEngine(d->iconName, d->parentEngine->clone(), nullptr);\n}\n\nbool IconLoaderEngine::read(QDataStream& in) {\n    return d->parentEngine->read(in);\n}\n\nbool IconLoaderEngine::write(QDataStream& out) const {\n    return d->parentEngine->write(out);\n}\n\nQList<QSize> IconLoaderEngine::availableSizes(QIcon::Mode mode, QIcon::State state) {\n    //    if (QApplication::layoutDirection() == Qt::RightToLeft) {\n    //        return d->rtlParentEngine->availableSizes(mode, state);\n    //    } else {\n    return d->parentEngine->availableSizes(mode, state);\n    //    }\n}\n\nQString IconLoaderEngine::iconName() {\n    return d->iconName;\n}\n\nvoid IconLoaderEngine::virtual_hook(int id, void* data) {\n    d->parentEngine->virtual_hook(id, data);\n}\n\nbool IconLoaderEngine::isNull() {\n    return d->parentEngine->isNull();\n}\n\nQPixmap IconLoaderEngine::scaledPixmap(const QSize& size, QIcon::Mode mode, QIcon::State state, qreal scale) {\n    //    if (QApplication::layoutDirection() == Qt::RightToLeft && d->rtlParentEngine->availableSizes(mode, state).length() > 0) {\n    //        return d->rtlParentEngine->scaledPixmap(size, mode, state, scale);\n    //    } else {\n    return d->parentEngine->scaledPixmap(size, mode, state, scale);\n    //    }\n}\n"
  },
  {
    "path": "platform/iconloaderengine.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef ICONLOADERENGINE_H\n#define ICONLOADERENGINE_H\n\n#include <QIconEngine>\n\nstruct IconLoaderEnginePrivate;\nclass IconLoaderEngine : public QIconEngine {\n    public:\n        explicit IconLoaderEngine(QString iconName, QIconEngine* parentEngine, QIconEngine* rtlParentEngine);\n        ~IconLoaderEngine();\n\n    private:\n        IconLoaderEnginePrivate* d;\n\n        // QIconEngine interface\n    public:\n        QPixmap pixmap(const QSize& size, QIcon::Mode mode, QIcon::State state);\n        void paint(QPainter* painter, const QRect& rect, QIcon::Mode mode, QIcon::State state);\n        QSize actualSize(const QSize& size, QIcon::Mode mode, QIcon::State state);\n        void addPixmap(const QPixmap& pixmap, QIcon::Mode mode, QIcon::State state);\n        void addFile(const QString& fileName, const QSize& size, QIcon::Mode mode, QIcon::State state);\n        QString key() const;\n        QIconEngine* clone() const;\n        bool read(QDataStream& in);\n        bool write(QDataStream& out) const;\n        QList<QSize> availableSizes(QIcon::Mode mode, QIcon::State state);\n        QString iconName();\n        void virtual_hook(int id, void* data);\n        bool isNull();\n        QPixmap scaledPixmap(const QSize& size, QIcon::Mode mode, QIcon::State state, qreal scale);\n};\n\n#endif // ICONLOADERENGINE_H\n"
  },
  {
    "path": "platform/messagedialog/messagedialog.cpp",
    "content": "/****************************************\n *\n *INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *Copyright (C) 2020 Victor Tran\n *\n *This program is free software: you can redistribute it and/or modify\n *it under the terms of the GNU General Public License as published by\n *the Free Software Foundation, either version 3 of the License, or\n *(at your option) any later version.\n *\n *This program is distributed in the hope that it will be useful,\n *but WITHOUT ANY WARRANTY; without even the implied warranty of\n *MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *GNU General Public License for more details.\n *\n *You should have received a copy of the GNU General Public License\n *along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"messagedialog.h\"\n#include \"ui_messagedialog.h\"\n\n#include <QGraphicsOpacityEffect>\n#include <QPushButton>\n#include <tvariantanimation.h>\n\nstruct MessageDialogPrivate {\n        QList<QPushButton*> buttons;\n        QGraphicsOpacityEffect* opacity;\n        bool showingDetails = false;\n};\n\nMessageDialog::MessageDialog(QWidget* parent) :\n    QWidget(parent),\n    ui(new Ui::MessageDialog) {\n    ui->setupUi(this);\n\n    d = new MessageDialogPrivate();\n\n    //    this->setWindowFlags(Qt::Widget);\n    ui->frame->setMinimumWidth(400);\n\n    d->opacity = new QGraphicsOpacityEffect(this);\n    d->opacity->setEnabled(false);\n    ui->frame->setGraphicsEffect(d->opacity);\n\n    ui->detailsWidget->setVisible(false);\n\n    ui->dialogTypeWidget->setFixedWidth(3);\n}\n\nMessageDialog::~MessageDialog() {\n    delete d;\n    delete ui;\n}\n\nvoid MessageDialog::setOptions(const QSharedPointer<QMessageDialogOptions>& options) {\n    for (QPushButton* btn : d->buttons) {\n        ui->buttonLayout->removeWidget(btn);\n        btn->deleteLater();\n    }\n    d->buttons.clear();\n\n    this->setWindowTitle(options->windowTitle());\n    ui->titleLabel->setText(options->windowTitle().toUpper());\n    ui->messageLabel->setText(options->text());\n    if (options->informativeText().isEmpty()) {\n        ui->informativeTextLabel->setVisible(false);\n    } else {\n        ui->informativeTextLabel->setVisible(true);\n        ui->informativeTextLabel->setText(options->informativeText());\n    }\n    if (options->detailedText().isEmpty()) {\n        ui->detailsButton->setVisible(false);\n    } else {\n        ui->detailsButton->setVisible(true);\n        ui->detailsLabel->setText(options->detailedText());\n    }\n\n    QPalette pal = ui->dialogTypeWidget->palette();\n#if QT_VERSION >= QT_VERSION_CHECK(6, 6, 0)\n    switch (options->standardIcon()) {\n#else\n    switch (options->icon()) {\n#endif\n        case QMessageDialogOptions::NoIcon:\n        case QMessageDialogOptions::Information:\n            pal.setColor(QPalette::Window, Qt::transparent);\n            break;\n        case QMessageDialogOptions::Question:\n            pal.setColor(QPalette::Window, QColor(0, 150, 255));\n            break;\n        case QMessageDialogOptions::Warning:\n            pal.setColor(QPalette::Window, QColor(255, 150, 0));\n            break;\n        case QMessageDialogOptions::Critical:\n            pal.setColor(QPalette::Window, QColor(200, 0, 0));\n            break;\n    }\n    ui->dialogTypeWidget->setPalette(pal);\n\n    QVector<QMessageDialogOptions::CustomButton> buttons;\n\n    if (options->standardButtons() & QPlatformDialogHelper::Ok) buttons.append(QMessageDialogOptions::CustomButton(QPlatformDialogHelper::Ok, tr(\"OK\"), QPlatformDialogHelper::AcceptRole));\n    if (options->standardButtons() & QPlatformDialogHelper::Save) buttons.append(QMessageDialogOptions::CustomButton(QPlatformDialogHelper::Save, tr(\"Save\"), QPlatformDialogHelper::AcceptRole));\n    if (options->standardButtons() & QPlatformDialogHelper::SaveAll) buttons.append(QMessageDialogOptions::CustomButton(QPlatformDialogHelper::SaveAll, tr(\"Save All\"), QPlatformDialogHelper::AcceptRole));\n    if (options->standardButtons() & QPlatformDialogHelper::Open) buttons.append(QMessageDialogOptions::CustomButton(QPlatformDialogHelper::Open, tr(\"Open\"), QPlatformDialogHelper::AcceptRole));\n    if (options->standardButtons() & QPlatformDialogHelper::Yes) buttons.append(QMessageDialogOptions::CustomButton(QPlatformDialogHelper::Yes, tr(\"Yes\"), QPlatformDialogHelper::YesRole));\n    if (options->standardButtons() & QPlatformDialogHelper::YesToAll) buttons.append(QMessageDialogOptions::CustomButton(QPlatformDialogHelper::YesToAll, tr(\"Yes to All\"), QPlatformDialogHelper::YesRole));\n    if (options->standardButtons() & QPlatformDialogHelper::No) buttons.append(QMessageDialogOptions::CustomButton(QPlatformDialogHelper::No, tr(\"No\"), QPlatformDialogHelper::NoRole));\n    if (options->standardButtons() & QPlatformDialogHelper::NoToAll) buttons.append(QMessageDialogOptions::CustomButton(QPlatformDialogHelper::NoToAll, tr(\"No to All\"), QPlatformDialogHelper::NoRole));\n    if (options->standardButtons() & QPlatformDialogHelper::Abort) buttons.append(QMessageDialogOptions::CustomButton(QPlatformDialogHelper::Abort, tr(\"Abort\"), QPlatformDialogHelper::DestructiveRole));\n    if (options->standardButtons() & QPlatformDialogHelper::Retry) buttons.append(QMessageDialogOptions::CustomButton(QPlatformDialogHelper::Retry, tr(\"Retry\"), QPlatformDialogHelper::AcceptRole));\n    if (options->standardButtons() & QPlatformDialogHelper::Ignore) buttons.append(QMessageDialogOptions::CustomButton(QPlatformDialogHelper::Ignore, tr(\"Ignore\"), QPlatformDialogHelper::AcceptRole));\n    if (options->standardButtons() & QPlatformDialogHelper::Close) buttons.append(QMessageDialogOptions::CustomButton(QPlatformDialogHelper::Close, tr(\"Close\"), QPlatformDialogHelper::AcceptRole));\n    if (options->standardButtons() & QPlatformDialogHelper::Cancel) buttons.append(QMessageDialogOptions::CustomButton(QPlatformDialogHelper::Cancel, tr(\"Cancel\"), QPlatformDialogHelper::RejectRole));\n    if (options->standardButtons() & QPlatformDialogHelper::Discard) buttons.append(QMessageDialogOptions::CustomButton(QPlatformDialogHelper::Discard, tr(\"Discard\"), QPlatformDialogHelper::DestructiveRole));\n    if (options->standardButtons() & QPlatformDialogHelper::Help) buttons.append(QMessageDialogOptions::CustomButton(QPlatformDialogHelper::Help, tr(\"Help\"), QPlatformDialogHelper::ActionRole));\n    if (options->standardButtons() & QPlatformDialogHelper::Apply) buttons.append(QMessageDialogOptions::CustomButton(QPlatformDialogHelper::Apply, tr(\"Apply\"), QPlatformDialogHelper::AcceptRole));\n    if (options->standardButtons() & QPlatformDialogHelper::Reset) buttons.append(QMessageDialogOptions::CustomButton(QPlatformDialogHelper::Reset, tr(\"Reset\"), QPlatformDialogHelper::ResetRole));\n    if (options->standardButtons() & QPlatformDialogHelper::RestoreDefaults) buttons.append(QMessageDialogOptions::CustomButton(QPlatformDialogHelper::RestoreDefaults, tr(\"Restore Defaults\"), QPlatformDialogHelper::ResetRole));\n\n    buttons.append(options->customButtons());\n\n    for (int i = 0; i < buttons.length(); i++) {\n        if (buttons.at(i).label == \"Show Details...\") {\n            buttons.removeAt(i);\n        }\n    }\n\n    if (buttons.isEmpty()) {\n        // Add a failsafe button\n        buttons.append(QMessageDialogOptions::CustomButton(QPlatformDialogHelper::Ok, tr(\"OK\"), QPlatformDialogHelper::AcceptRole));\n    }\n\n    for (const QMessageDialogOptions::CustomButton& btn : buttons) {\n        QPushButton* button = new QPushButton(this);\n        button->setText(btn.label);\n        if (btn.role == QPlatformDialogHelper::DestructiveRole) button->setProperty(\"type\", \"destructive\");\n        connect(button, &QPushButton::clicked, this, [=] {\n            emit clicked(static_cast<QPlatformDialogHelper::StandardButton>(btn.id), btn.role);\n        });\n        ui->buttonLayout->addWidget(button);\n        d->buttons.append(button);\n    }\n\n    if (options->checkBoxLabel().isEmpty()) {\n        ui->checkBox->setVisible(false);\n    } else {\n        ui->checkBox->setVisible(true);\n        ui->checkBox->setText(options->checkBoxLabel());\n        ui->checkBox->setCheckState(options->checkBoxState());\n    }\n}\n\nvoid MessageDialog::setParent(QWidget* parent) {\n    parent->installEventFilter(this);\n    QWidget::setParent(parent);\n}\n\nvoid MessageDialog::animateIn() {\n    d->opacity->setEnabled(true);\n    d->opacity->setOpacity(0);\n\n    tVariantAnimation* anim = new tVariantAnimation(this);\n    anim->setStartValue(0.0);\n    anim->setEndValue(1.0);\n    anim->setDuration(400);\n    anim->setEasingCurve(QEasingCurve::OutCubic);\n    connect(anim, &tVariantAnimation::valueChanged, this, [=](QVariant value) {\n        d->opacity->setOpacity(value.toReal());\n\n        QRect geometry = frameGeometry();\n        geometry.moveTop(geometry.top() - 10 * (1.0 - value.toReal()));\n        this->setFixedSize(QSize(0, 0));\n        this->setFixedSize(geometry.size());\n        this->setGeometry(geometry);\n    });\n    connect(anim, &tVariantAnimation::finished, this, [=] {\n        d->opacity->setEnabled(false);\n        anim->deleteLater();\n    });\n    anim->start();\n}\n\nvoid MessageDialog::animateOut() {\n    d->opacity->setEnabled(true);\n\n    tVariantAnimation* anim = new tVariantAnimation(this);\n    anim->setStartValue(1.0);\n    anim->setEndValue(0.0);\n    anim->setDuration(400);\n    anim->setEasingCurve(QEasingCurve::OutCubic);\n    connect(anim, &tVariantAnimation::valueChanged, this, [=](QVariant value) {\n        d->opacity->setOpacity(value.toReal());\n\n        QRect geometry = frameGeometry();\n        geometry.moveTop(geometry.top() + 10 * (1.0 - value.toReal()));\n        this->setFixedSize(QSize(0, 0));\n        this->setFixedSize(geometry.size());\n        this->setGeometry(geometry);\n    });\n    connect(anim, &tVariantAnimation::finished, this, [=] {\n        anim->deleteLater();\n        this->hide();\n    });\n    anim->start();\n}\n\nQRect MessageDialog::frameGeometry() {\n    QRect geometry = this->geometry();\n    if (d->showingDetails) {\n        if (ui->detailsContents->sizeHint().width() > 400) {\n            geometry.setSize(ui->detailsContents->sizeHint());\n        } else {\n            geometry.setSize(QSize(400, ui->detailsContents->heightForWidth(400)));\n        }\n        if (this->parentWidget() && geometry.height() > this->parentWidget()->height()) geometry.setHeight(this->parentWidget()->height());\n    } else {\n        if (ui->frame->sizeHint().width() > 400) {\n            geometry.setSize(ui->frame->sizeHint());\n        } else {\n            geometry.setSize(QSize(400, ui->frame->heightForWidth(400)));\n        }\n    }\n    if (this->parentWidget()) {\n        geometry.moveCenter(QRect(0, 0, this->parentWidget()->width(), this->parentWidget()->height()).center());\n    }\n\n    return geometry;\n}\n\nvoid MessageDialog::updateGeometry() {\n    QRect geometry = frameGeometry();\n    this->setFixedSize(geometry.size());\n    this->setGeometry(geometry);\n}\n\nvoid MessageDialog::resizeEvent(QResizeEvent* event) {\n    updateGeometry();\n}\n\nvoid MessageDialog::on_backButton_clicked() {\n    ui->detailsWidget->setVisible(false);\n    d->showingDetails = false;\n    updateGeometry();\n    ui->frame->setVisible(true);\n}\n\nvoid MessageDialog::on_detailsButton_clicked() {\n    ui->frame->setVisible(false);\n    d->showingDetails = true;\n    updateGeometry();\n    ui->detailsWidget->setVisible(true);\n}\n\nbool MessageDialog::eventFilter(QObject* watched, QEvent* event) {\n    if (watched == this->parentWidget() && event->type() == QEvent::Resize) {\n        updateGeometry();\n    }\n    return false;\n}\n\nvoid MessageDialog::on_checkBox_stateChanged(int arg1) {\n    emit checkBoxStateChanged(static_cast<Qt::CheckState>(arg1));\n}\n"
  },
  {
    "path": "platform/messagedialog/messagedialog.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef MESSAGEDIALOG_H\n#define MESSAGEDIALOG_H\n\n#include <QWidget>\n#include <qpa/qplatformdialoghelper.h>\n\nnamespace Ui {\n    class MessageDialog;\n}\n\nstruct MessageDialogPrivate;\nclass MessageDialog : public QWidget {\n        Q_OBJECT\n\n    public:\n        explicit MessageDialog(QWidget* parent = nullptr);\n        ~MessageDialog();\n\n        void extracted(QVector<QMessageDialogOptions::CustomButton>& buttons);\n        void setOptions(const QSharedPointer<QMessageDialogOptions>& options);\n        void setParent(QWidget* parent);\n\n        void animateIn();\n        void animateOut();\n\n        QRect frameGeometry();\n        void updateGeometry();\n\n    signals:\n        void clicked(QPlatformDialogHelper::StandardButton button, QPlatformDialogHelper::ButtonRole role);\n        void checkBoxStateChanged(Qt::CheckState state);\n\n    private:\n        Ui::MessageDialog* ui;\n        MessageDialogPrivate* d;\n\n        // QWidget interface\n    protected:\n        void resizeEvent(QResizeEvent* event);\n\n    private slots:\n        void on_backButton_clicked();\n        void on_detailsButton_clicked();\n\n        // QObject interface\n        void on_checkBox_stateChanged(int arg1);\n\n    public:\n        bool eventFilter(QObject* watched, QEvent* event);\n};\n\n#endif // MESSAGEDIALOG_H\n"
  },
  {
    "path": "platform/messagedialog/messagedialog.ui",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ui version=\"4.0\">\n <class>MessageDialog</class>\n <widget class=\"QWidget\" name=\"MessageDialog\">\n  <property name=\"geometry\">\n   <rect>\n    <x>0</x>\n    <y>0</y>\n    <width>581</width>\n    <height>370</height>\n   </rect>\n  </property>\n  <property name=\"windowTitle\">\n   <string notr=\"true\">Dialog</string>\n  </property>\n  <layout class=\"QVBoxLayout\" name=\"verticalLayout_3\">\n   <property name=\"spacing\">\n    <number>0</number>\n   </property>\n   <property name=\"leftMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"topMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"rightMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"bottomMargin\">\n    <number>0</number>\n   </property>\n   <item>\n    <widget class=\"QFrame\" name=\"frame\">\n     <property name=\"sizePolicy\">\n      <sizepolicy hsizetype=\"Preferred\" vsizetype=\"Preferred\">\n       <horstretch>0</horstretch>\n       <verstretch>0</verstretch>\n      </sizepolicy>\n     </property>\n     <property name=\"frameShape\">\n      <enum>QFrame::NoFrame</enum>\n     </property>\n     <property name=\"frameShadow\">\n      <enum>QFrame::Raised</enum>\n     </property>\n     <layout class=\"QHBoxLayout\" name=\"horizontalLayout_2\">\n      <property name=\"spacing\">\n       <number>6</number>\n      </property>\n      <property name=\"leftMargin\">\n       <number>0</number>\n      </property>\n      <property name=\"topMargin\">\n       <number>0</number>\n      </property>\n      <property name=\"rightMargin\">\n       <number>0</number>\n      </property>\n      <property name=\"bottomMargin\">\n       <number>0</number>\n      </property>\n      <item>\n       <widget class=\"QWidget\" name=\"dialogTypeWidget\" native=\"true\">\n        <property name=\"autoFillBackground\">\n         <bool>true</bool>\n        </property>\n       </widget>\n      </item>\n      <item>\n       <layout class=\"QVBoxLayout\" name=\"verticalLayout\">\n        <property name=\"spacing\">\n         <number>0</number>\n        </property>\n        <property name=\"leftMargin\">\n         <number>0</number>\n        </property>\n        <property name=\"topMargin\">\n         <number>0</number>\n        </property>\n        <property name=\"rightMargin\">\n         <number>0</number>\n        </property>\n        <property name=\"bottomMargin\">\n         <number>0</number>\n        </property>\n        <item>\n         <layout class=\"QVBoxLayout\" name=\"verticalLayout_2\">\n          <property name=\"leftMargin\">\n           <number>0</number>\n          </property>\n          <property name=\"topMargin\">\n           <number>0</number>\n          </property>\n          <property name=\"rightMargin\">\n           <number>0</number>\n          </property>\n          <property name=\"bottomMargin\">\n           <number>6</number>\n          </property>\n          <item>\n           <widget class=\"QLabel\" name=\"titleLabel\">\n            <property name=\"font\">\n             <font>\n              <bold>true</bold>\n             </font>\n            </property>\n            <property name=\"text\">\n             <string notr=\"true\">Title</string>\n            </property>\n           </widget>\n          </item>\n          <item>\n           <widget class=\"QLabel\" name=\"messageLabel\">\n            <property name=\"text\">\n             <string notr=\"true\">TextLabel</string>\n            </property>\n            <property name=\"wordWrap\">\n             <bool>true</bool>\n            </property>\n           </widget>\n          </item>\n          <item>\n           <widget class=\"QLabel\" name=\"informativeTextLabel\">\n            <property name=\"enabled\">\n             <bool>false</bool>\n            </property>\n            <property name=\"text\">\n             <string notr=\"true\">TextLabel</string>\n            </property>\n            <property name=\"wordWrap\">\n             <bool>true</bool>\n            </property>\n           </widget>\n          </item>\n          <item>\n           <widget class=\"QCheckBox\" name=\"checkBox\">\n            <property name=\"text\">\n             <string notr=\"true\">CheckBox</string>\n            </property>\n           </widget>\n          </item>\n         </layout>\n        </item>\n        <item>\n         <layout class=\"QHBoxLayout\" name=\"buttonLayout\">\n          <item>\n           <widget class=\"QPushButton\" name=\"detailsButton\">\n            <property name=\"text\">\n             <string>Details...</string>\n            </property>\n           </widget>\n          </item>\n         </layout>\n        </item>\n       </layout>\n      </item>\n     </layout>\n    </widget>\n   </item>\n   <item>\n    <widget class=\"QWidget\" name=\"detailsWidget\" native=\"true\">\n     <layout class=\"QVBoxLayout\" name=\"verticalLayout_4\">\n      <property name=\"spacing\">\n       <number>0</number>\n      </property>\n      <property name=\"leftMargin\">\n       <number>0</number>\n      </property>\n      <property name=\"topMargin\">\n       <number>0</number>\n      </property>\n      <property name=\"rightMargin\">\n       <number>0</number>\n      </property>\n      <property name=\"bottomMargin\">\n       <number>0</number>\n      </property>\n      <item>\n       <widget class=\"QScrollArea\" name=\"scrollArea\">\n        <property name=\"frameShape\">\n         <enum>QFrame::NoFrame</enum>\n        </property>\n        <property name=\"widgetResizable\">\n         <bool>true</bool>\n        </property>\n        <widget class=\"QWidget\" name=\"detailsContents\">\n         <property name=\"geometry\">\n          <rect>\n           <x>0</x>\n           <y>0</y>\n           <width>581</width>\n           <height>247</height>\n          </rect>\n         </property>\n         <property name=\"autoFillBackground\">\n          <bool>true</bool>\n         </property>\n         <layout class=\"QVBoxLayout\" name=\"verticalLayout_5\">\n          <item>\n           <widget class=\"QLabel\" name=\"label\">\n            <property name=\"font\">\n             <font>\n              <bold>true</bold>\n             </font>\n            </property>\n            <property name=\"text\">\n             <string>DETAILS</string>\n            </property>\n           </widget>\n          </item>\n          <item>\n           <widget class=\"QLabel\" name=\"detailsLabel\">\n            <property name=\"text\">\n             <string notr=\"true\">TextLabel</string>\n            </property>\n            <property name=\"wordWrap\">\n             <bool>true</bool>\n            </property>\n           </widget>\n          </item>\n          <item>\n           <widget class=\"QPushButton\" name=\"backButton\">\n            <property name=\"text\">\n             <string>Back</string>\n            </property>\n           </widget>\n          </item>\n         </layout>\n        </widget>\n       </widget>\n      </item>\n     </layout>\n    </widget>\n   </item>\n  </layout>\n </widget>\n <resources/>\n <connections/>\n</ui>\n"
  },
  {
    "path": "platform/messagedialog/messagedialogcontroller.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"messagedialogcontroller.h\"\n\nMessageDialogController::MessageDialogController(QObject *parent) : QObject(parent)\n{\n\n}\n"
  },
  {
    "path": "platform/messagedialog/messagedialogcontroller.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef MESSAGEDIALOGCONTROLLER_H\n#define MESSAGEDIALOGCONTROLLER_H\n\n#include <QObject>\n\nstruct MessageDialogControllerPrivate;\nclass MessageDialogController : public QObject\n{\n        Q_OBJECT\n    public:\n        explicit MessageDialogController(QObject *parent = nullptr);\n\n    signals:\n\n    private:\n        MessageDialogControllerPrivate* d;\n\n};\n\n#endif // MESSAGEDIALOGCONTROLLER_H\n"
  },
  {
    "path": "platform/messagedialog/messagedialoghelper.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"messagedialoghelper.h\"\n\n#include \"messagedialog.h\"\n#include <QApplication>\n#include <QDebug>\n#include <QGraphicsBlurEffect>\n#include <QMainWindow>\n#include <QPainter>\n#include <QPointer>\n#include <QWindow>\n#include <tcsdtools.h>\n#include <tscrim.h>\n#include <tvariantanimation.h>\n\nstruct MessageDialogHelperPrivate {\n        MessageDialog* dlg;\n        QEventLoop eventLoop;\n        QPointer<QWindow> parent;\n        QPointer<QWidget> parentWidget;\n        QPointer<QWidget> cover2;\n\n        const int coverOverscan = 50;\n};\n\nMessageDialogHelper::MessageDialogHelper() :\n    QPlatformMessageDialogHelper() {\n    d = new MessageDialogHelperPrivate();\n    d->dlg = new MessageDialog();\n    connect(d->dlg, &MessageDialog::clicked, this, [this] {\n        if (d->eventLoop.isRunning()) d->eventLoop.exit();\n        this->hide();\n    });\n    connect(d->dlg, &MessageDialog::checkBoxStateChanged, this, &MessageDialogHelper::checkBoxStateChanged);\n    connect(d->dlg, &MessageDialog::clicked, this, &MessageDialogHelper::clicked);\n}\n\nMessageDialogHelper::~MessageDialogHelper() {\n    d->dlg->deleteLater();\n    if (d->cover2) d->cover2->deleteLater();\n    delete d;\n}\n\nvoid MessageDialogHelper::updateWindowGeometry() {\n    if (d->parent) {\n        QRect geometry;\n        if (d->parentWidget) {\n            geometry = QRect(-d->coverOverscan, -d->coverOverscan, d->parentWidget->width() + 2 * d->coverOverscan, d->parentWidget->height() + 2 * d->coverOverscan);\n        } else {\n            geometry = QRect(-d->coverOverscan, -d->coverOverscan, d->parent->width() + 2 * d->coverOverscan, d->parent->height() + 2 * d->coverOverscan);\n        }\n        if (d->cover2) d->cover2->setGeometry(geometry);\n        d->dlg->updateGeometry();\n    } else {\n        d->dlg->setFixedSize(d->dlg->frameGeometry().size());\n    }\n}\n\nvoid MessageDialogHelper::exec() {\n    d->dlg->setOptions(this->options());\n    d->eventLoop.exec();\n}\n\nbool MessageDialogHelper::show(Qt::WindowFlags windowFlags, Qt::WindowModality windowModality, QWindow* parent) {\n    QWidget* widget = nullptr;\n\n    if (parent) {\n        for (QWidget* w : QApplication::allWidgets()) {\n            if (w->winId() == parent->winId()) widget = w->window();\n        }\n    }\n    QMainWindow* mainWindow = qobject_cast<QMainWindow*>(widget);\n    if (mainWindow && tCsdTools::csdsInstalled(mainWindow)) widget = mainWindow->centralWidget();\n\n    d->parentWidget = widget;\n\n    d->dlg->setOptions(this->options());\n    d->dlg->setWindowFlags(windowFlags);\n\n    if (d->parent) {\n        d->parent->disconnect(this);\n    }\n    d->parent = parent;\n    connect(parent, &QWindow::widthChanged, this, &MessageDialogHelper::updateWindowGeometry);\n    connect(parent, &QWindow::heightChanged, this, &MessageDialogHelper::updateWindowGeometry);\n    connect(parent, &QWindow::xChanged, this, &MessageDialogHelper::updateWindowGeometry);\n    connect(parent, &QWindow::yChanged, this, &MessageDialogHelper::updateWindowGeometry);\n\n    if (widget) {\n        tScrim::scrimForWidget(widget)->show();\n\n        d->dlg->setParent(widget);\n        d->dlg->show();\n        d->dlg->raise();\n\n        // For some reason, Qt doesn't render this properly on tCsd apps\n        // but it fixes itself if we have a transparent widget on top\n        d->cover2 = new QWidget();\n        d->cover2->setAttribute(Qt::WA_TransparentForMouseEvents);\n        d->cover2->setParent(widget);\n        d->cover2->show();\n        d->cover2->raise();\n\n        d->dlg->animateIn();\n    }\n\n    updateWindowGeometry();\n\n    d->dlg->show();\n\n    return true;\n}\n\nvoid MessageDialogHelper::hide() {\n    if (d->parentWidget) {\n        d->dlg->animateOut();\n        tScrim::scrimForWidget(d->parentWidget)->hide();\n        if (d->cover2) d->cover2->hide();\n    } else {\n        d->dlg->hide();\n        if (d->cover2) d->cover2->hide();\n    }\n}\n\nvoid MessageDialogHelper::setOptions(const QSharedPointer<QMessageDialogOptions>& options) {\n    QPlatformMessageDialogHelper::setOptions(options);\n    d->dlg->setOptions(options);\n}\n\nQVariant MessageDialogHelper::styleHint(StyleHint hint) const {\n    if (hint == DialogIsQtWindow) {\n        return true;\n    }\n    return QPlatformMessageDialogHelper::StyleHint(hint);\n}\n"
  },
  {
    "path": "platform/messagedialog/messagedialoghelper.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef MESSAGEDIALOGHELPER_H\n#define MESSAGEDIALOGHELPER_H\n\n#include <qpa/qplatformdialoghelper.h>\n\nstruct MessageDialogHelperPrivate;\nclass MessageDialogHelper : public QPlatformMessageDialogHelper {\n        Q_OBJECT\n    public:\n        explicit MessageDialogHelper();\n        ~MessageDialogHelper();\n\n    signals:\n\n    private:\n        MessageDialogHelperPrivate* d;\n\n        void updateWindowGeometry();\n\n        // QPlatformMessageDialogHelper interface\n    public:\n        void exec();\n        bool show(Qt::WindowFlags windowFlags, Qt::WindowModality windowModality, QWindow* parent);\n        void hide();\n        void setOptions(const QSharedPointer<QMessageDialogOptions>& options);\n\n        // QPlatformDialogHelper interface\n    public:\n        QVariant styleHint(StyleHint hint) const;\n};\n\n#endif // MESSAGEDIALOGHELPER_H\n"
  },
  {
    "path": "platform/paletteformat.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n\n#include <paletteformat.h>\n\n#include <QJsonArray>\n#include <QJsonObject>\n#include <QJsonValue>\n\nconst QMap<QString, QPalette::ColorRole> roles = {\n    {\"window\",          QPalette::Window         },\n    {\"windowText\",      QPalette::WindowText     },\n    {\"base\",            QPalette::Base           },\n    {\"altBase\",         QPalette::AlternateBase  },\n    {\"alternateBase\",   QPalette::AlternateBase  },\n    {\"text\",            QPalette::Text           },\n    {\"brightText\",      QPalette::BrightText     },\n    {\"button\",          QPalette::Button         },\n    {\"buttonText\",      QPalette::ButtonText     },\n    {\"highlight\",       QPalette::Highlight      },\n    {\"highlightText\",   QPalette::HighlightedText},\n    {\"highlightedText\", QPalette::HighlightedText},\n    {\"link\",            QPalette::Link           },\n    {\"linkVisited\",     QPalette::LinkVisited    },\n    {\"tooltip\",         QPalette::ToolTipBase    },\n    {\"tooltipBase\",     QPalette::ToolTipBase    },\n    {\"tooltipText\",     QPalette::ToolTipText    },\n    {\"placeholderText\", QPalette::PlaceholderText},\n    {\"light\",           QPalette::Light          },\n    {\"midLight\",        QPalette::Midlight       },\n    {\"mid\",             QPalette::Mid            },\n    {\"dark\",            QPalette::Dark           },\n    {\"shadow\",          QPalette::Shadow         }\n};\n\nconst QMap<QString, QPalette::ColorGroup> groups = {\n    {\"normal\",   QPalette::Normal  },\n    {\"inactive\", QPalette::Inactive},\n    {\"disabled\", QPalette::Disabled}\n};\n\nQPalette::ColorRole PaletteFormat::roleForString(QString string) {\n    return roles.value(string);\n}\n\nvoid PaletteFormat::applyColor(QPalette* pal, QString key, QJsonValue value) {\n    QPalette::ColorRole role = PaletteFormat::roleForString(key);\n\n    if (value.type() == QJsonValue::Object) {\n        QJsonObject obj = value.toObject();\n        for (auto i = obj.constBegin(); i != obj.constEnd(); i++) {\n            QPalette::ColorGroup group = PaletteFormat::groupForString(i.key());\n            pal->setColor(group, role, PaletteFormat::colorFromValue(i.value()));\n        }\n    } else {\n        pal->setColor(role, PaletteFormat::colorFromValue(value));\n    }\n}\n\nQColor PaletteFormat::colorFromValue(QJsonValue value) {\n    switch (value.type()) {\n        case QJsonValue::Double:\n            {\n                // Grayscale value\n                int v = value.toInt();\n                return QColor(v, v, v);\n            }\n        case QJsonValue::String:\n            // Name color\n            return QColor(value.toString());\n        case QJsonValue::Array:\n            {\n                // RGB Triplet\n                QJsonArray array = value.toArray();\n                return QColor(array.at(0).toInt(), array.at(1).toInt(), array.at(2).toInt());\n            }\n        default:\n            //??? invalid format\n            return QColor();\n    }\n}\n\nQPalette::ColorGroup PaletteFormat::groupForString(QString string) {\n    return groups.value(string);\n}\n"
  },
  {
    "path": "platform/paletteformat.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef PALETTEFORMAT_H\n#define PALETTEFORMAT_H\n\n#include <QJsonValue>\n#include <QMap>\n#include <QPalette>\n\nnamespace PaletteFormat {\n    QPalette::ColorRole roleForString(QString string);\n    QPalette::ColorGroup groupForString(QString string);\n\n    void applyColor(QPalette* pal, QString key, QJsonValue value);\n    QColor colorFromValue(QJsonValue value);\n} // namespace PaletteFormat\n\n#endif // PALETTEFORMAT_H\n"
  },
  {
    "path": "platform/palettes.json",
    "content": "{\n    \"dark\": {\n        \"bases\": {\n            \"window\": 40,\n            \"windowText\": {\n                \"normal\": \"white\",\n                \"inactive\": \"white\",\n                \"disabled\": 150\n            },\n            \"base\": 40,\n            \"text\": \"white\",\n            \"placeholderText\": 150,\n            \"tooltipText\": \"white\",\n            \"alternateBase\": 40,\n            \"link\": [0,200,255]\n        },\n        \"accents\": {\n            \"blue\": {\n                \"button\": {\n                    \"normal\": [0,50,150],\n                    \"inactive\": [0,50,150],\n                    \"disabled\": [0,30,100]\n                },\n                \"buttonText\": {\n                    \"normal\": \"white\",\n                    \"inactive\": \"white\",\n                    \"disabled\": 150\n                },\n                \"highlight\": [0,80,170],\n                \"highlightText\": \"white\"\n            },\n            \"green\": {\n                \"button\": {\n                    \"normal\": [0,85,0],\n                    \"inactive\": [0,85,0],\n                    \"disabled\": [0,50,0]\n                },\n                \"buttonText\": {\n                    \"normal\": \"white\",\n                    \"inactive\": \"white\",\n                    \"disabled\": 150\n                },\n                \"highlight\": [0,100,0],\n                \"highlightText\": \"white\"\n            },\n            \"orange\": {\n                \"button\": {\n                    \"normal\": [200,50,0],\n                    \"inactive\": [200,50,0],\n                    \"disabled\": [100,25,0]\n                },\n                \"buttonText\": {\n                    \"normal\": \"white\",\n                    \"inactive\": \"white\",\n                    \"disabled\": 150\n                },\n                \"highlight\": [200,100,0],\n                \"highlightText\": \"white\"\n            },\n            \"pink\": {\n                \"button\": {\n                    \"normal\": [150,0,150],\n                    \"inactive\": [150,0,150],\n                    \"disabled\": [100,0,100]\n                },\n                \"buttonText\": {\n                    \"normal\": \"white\",\n                    \"inactive\": \"white\",\n                    \"disabled\": 150\n                },\n                \"highlight\": [200,0,200],\n                \"highlightText\": \"white\"\n            }\n        }\n    },\n    \"light\": {\n        \"bases\": {\n            \"window\": 210,\n            \"windowText\": {\n                \"normal\": \"black\",\n                \"inactive\": \"black\",\n                \"disabled\": 100\n            },\n            \"base\": 210,\n            \"text\": \"black\",\n            \"placeholderText\": 100,\n            \"tooltipText\": \"black\",\n            \"alternateBase\": 210,\n            \"link\": [0,100,255]\n        },\n        \"accents\": {\n            \"blue\": {\n                \"button\": {\n                    \"normal\": [0,200,255],\n                    \"inactive\": [0,200,255],\n                    \"disabled\": [0,150,200]\n                },\n                \"buttonText\": {\n                    \"normal\": \"black\",\n                    \"inactive\": \"black\",\n                    \"disabled\": 100\n                },\n                \"highlight\": [0,175,200],\n                \"highlightText\": \"black\"\n            },\n            \"green\": {\n                \"button\": {\n                    \"normal\": [36,175,62],\n                    \"inactive\": [36,175,62],\n                    \"disabled\": [0,150,200]\n                },\n                \"buttonText\": {\n                    \"normal\": \"black\",\n                    \"inactive\": \"black\",\n                    \"disabled\": 100\n                },\n                \"highlight\": [45,220,77],\n                \"highlightText\": \"black\"\n            },\n            \"orange\": {\n                \"button\": {\n                    \"normal\": [255,100,0],\n                    \"inactive\": [255,100,0],\n                    \"disabled\": [150,50,0]\n                },\n                \"buttonText\": {\n                    \"normal\": \"black\",\n                    \"inactive\": \"black\",\n                    \"disabled\": 100\n                },\n                \"highlight\": [255,150,50],\n                \"highlightText\": \"black\"\n            },\n            \"pink\": {\n                \"button\": {\n                    \"normal\": [255,0,255],\n                    \"inactive\": [255,0,255],\n                    \"disabled\": [100,0,100]\n                },\n                \"buttonText\": {\n                    \"normal\": \"black\",\n                    \"inactive\": \"black\",\n                    \"disabled\": 150\n                },\n                \"highlight\": [255,0,255],\n                \"highlightText\": \"black\"\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "platform/platform.pro",
    "content": "QT += gui gui-private widgets thelib\n\nTEMPLATE = lib\nCONFIG += plugin\nTARGET = thedesk-platform\n\nCONFIG += c++11\n\nunix {\n    # Include the-libs build tools\n    equals(THELIBS_BUILDTOOLS_PATH, \"\") {\n        THELIBS_BUILDTOOLS_PATH = $$[QT_INSTALL_PREFIX]/share/the-libs/pri\n    }\n    include($$THELIBS_BUILDTOOLS_PATH/gentranslations.pri)\n    include($$THELIBS_BUILDTOOLS_PATH/varset.pri)\n\n    CONFIG += link_pkgconfig\n\n    packagesExist(x11) {\n        message(\"Building with X11 support\");\n        PKGCONFIG += x11\n        DEFINES += HAVE_X11\n        QT += x11extras\n    } else {\n        message(\"X11 not found on this system.\");\n    }\n}\n\n# The following define makes your compiler emit warnings if you use\n# any Qt feature that has been marked deprecated (the exact warnings\n# depend on your compiler). Please consult the documentation of the\n# deprecated API in order to know how to port your code away from it.\nDEFINES += QT_DEPRECATED_WARNINGS\n\n# You can also make your code fail to compile if it uses deprecated APIs.\n# In order to do so, uncomment the following line.\n# You can also select to disable deprecated APIs only up to a certain version of Qt.\n#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0\n\nSOURCES += \\\n    cursorhandler.cpp \\\n    fontformat.cpp \\\n    iconloaderengine.cpp \\\n    messagedialog/messagedialog.cpp \\\n    messagedialog/messagedialogcontroller.cpp \\\n    messagedialog/messagedialoghelper.cpp \\\n    paletteformat.cpp \\\n    platformtheme.cpp \\\n    plugin.cpp\n\nHEADERS += \\\n    cursorhandler.h \\\n    fontformat.h \\\n    iconloaderengine.h \\\n    messagedialog/messagedialog.h \\\n    messagedialog/messagedialogcontroller.h \\\n    messagedialog/messagedialoghelper.h \\\n    paletteformat.h \\\n    platformtheme.h \\\n    plugin.h\n\nDISTFILES += \\\n    palettes.json \\\n    platformdefaults.conf \\\n    plugin.json\n\n\nunix {\n    target.path = $$[QT_INSTALL_PLUGINS]/platformthemes/\n\n    translations.path = /usr/share/thedesk/thedesk-platform/translations\n    translations.files = translations/*\n\n    defaults.files = platformdefaults.conf\n    defaults.path = /etc/theSuite/theDesk/\n\n    INSTALLS += target translations defaults\n}\n\nDEFINES += SYSTEM_LIBRARY_DIRECTORY=\\\\\\\"$$[QT_INSTALL_LIBS]\\\\\\\"\n\nRESOURCES += \\\n    thedesk-platform-resources.qrc\n\nFORMS += \\\n    messagedialog/messagedialog.ui\n"
  },
  {
    "path": "platform/platformtheme.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"platformtheme.h\"\n\n#include <private/qguiapplication_p.h>\n#include <qpa/qplatformintegration.h>\n#include <qpa/qplatformtheme_p.h>\n#include <qpa/qplatformthemefactory_p.h>\n\n#include \"cursorhandler.h\"\n#include \"iconloaderengine.h\"\n#include <QDir>\n#include <QFile>\n#include <QIcon>\n#include <QJsonDocument>\n#include <QJsonObject>\n#include <QMessageBox>\n#include <QMimeDatabase>\n#include <QMimeType>\n#include <QPixmap>\n#include <QScrollerProperties>\n#include <QTextCharFormat>\n#include <QTimer>\n#include <QVariant>\n#include <limits>\n#include <tlogger.h>\n#include <tsettings.h>\n\n#include \"messagedialog/messagedialoghelper.h\"\n\n#include \"fontformat.h\"\n#include \"paletteformat.h\"\n\nstruct PlatformThemePrivate {\n        QObject* parent;\n        tSettings* settings;\n        QPalette pal;\n        CursorHandler* cursorHandler;\n\n        QMimeDatabase mimeDb;\n\n        QMap<QPlatformTheme::Font, QFont*> fonts;\n\n        QPlatformTheme* flatpakPlatformTheme = nullptr;\n};\n\nPlatformTheme::PlatformTheme() :\n    QPlatformTheme() {\n    // Register settings locations\n    tSettings::registerDefaults(\"theSuite\", \"theDesk.platform\", \"/usr/share/defaults/thedesk-platform.conf\");\n\n    d = new PlatformThemePrivate();\n    d->parent = new QObject();\n    d->settings = new tSettings(\"theSuite\", \"theDesk.platform\", d->parent);\n    d->cursorHandler = new CursorHandler(d->parent);\n    d->pal.setResolveMask(std::numeric_limits<QPalette::ResolveMask>().max());\n\n    QObject::connect(d->settings, &tSettings::settingChanged, d->parent, [=](QString key, QVariant value) {\n        // Qt Creator might crash heh...\n        if (QApplication::applicationName() == \"QtCreator\") return;\n\n        if (key.startsWith(\"Fonts/\")) {\n            updateFont();\n\n            // Update the font in the application\n            if (qobject_cast<QApplication*>(QCoreApplication::instance())) {\n                qApp->setFont(*d->fonts.value(SystemFont));\n                emit qApp->setFont(*d->fonts.value(SystemFont));\n            } else if (qobject_cast<QGuiApplication*>(QCoreApplication::instance())) {\n                qGuiApp->setFont(*d->fonts.value(SystemFont));\n            }\n        } else if (key.startsWith(\"Palette/\")) {\n            updatePalette();\n\n            // Update the palette in the application\n            if (qobject_cast<QApplication*>(QCoreApplication::instance())) {\n                qApp->setPalette(d->pal);\n                emit qApp->paletteChanged(d->pal);\n            } else if (qobject_cast<QGuiApplication*>(QCoreApplication::instance())) {\n                qGuiApp->setPalette(d->pal);\n            }\n        } else if (key == \"Platform/style\") {\n            if (qobject_cast<QApplication*>(QCoreApplication::instance())) {\n                qApp->setStyle(d->settings->delimitedList(key).first());\n            }\n        }\n    });\n\n    QScrollerProperties scrollerProperties;\n    scrollerProperties.setScrollMetric(QScrollerProperties::OvershootDragResistanceFactor, 0.1);\n    scrollerProperties.setScrollMetric(QScrollerProperties::OvershootScrollDistanceFactor, 0.1);\n    QScrollerProperties::setDefaultScrollerProperties(scrollerProperties);\n\n    this->updateFont();\n    this->updatePalette();\n\n    tDebug(\"PlatformTheme\") << \"Using theDesk platform theme\";\n\n    // Initialise the Flatpak platform theme so that we can use the portal to open files\n    if (!qEnvironmentVariableIsSet(\"TD_PLATFORM_NO_FLATPAK_FORWARD\")) {\n        d->flatpakPlatformTheme = QPlatformThemeFactory::create(\"flatpak\", nullptr);\n        if (d->flatpakPlatformTheme) {\n            tDebug(\"PlatformTheme\") << \"Created Flatpak platform theme\";\n        }\n    }\n}\n\nPlatformTheme::~PlatformTheme() {\n    d->parent->deleteLater();\n    delete d;\n}\n\nQPlatformMenuItem* PlatformTheme::createPlatformMenuItem() const {\n    return QPlatformTheme::createPlatformMenuItem();\n}\n\nQPlatformMenu* PlatformTheme::createPlatformMenu() const {\n    return QPlatformTheme::createPlatformMenu();\n}\n\nQPlatformMenuBar* PlatformTheme::createPlatformMenuBar() const {\n    return QPlatformTheme::createPlatformMenuBar();\n}\n\nvoid PlatformTheme::showPlatformMenuBar() {\n    QPlatformTheme::showPlatformMenuBar();\n}\n\nbool PlatformTheme::usePlatformNativeDialog(QPlatformTheme::DialogType type) const {\n    switch (type) {\n        case QPlatformTheme::ColorDialog:\n        case QPlatformTheme::FontDialog:\n            return false;\n        case QPlatformTheme::MessageDialog:\n            return true;\n        case QPlatformTheme::FileDialog:\n            if (d->flatpakPlatformTheme) return d->flatpakPlatformTheme->usePlatformNativeDialog(type);\n            return false;\n    }\n}\n\nQPlatformDialogHelper* PlatformTheme::createPlatformDialogHelper(QPlatformTheme::DialogType type) const {\n    switch (type) {\n        case QPlatformTheme::MessageDialog:\n            return new MessageDialogHelper();\n        case QPlatformTheme::FileDialog:\n            if (d->flatpakPlatformTheme && d->flatpakPlatformTheme->usePlatformNativeDialog(type)) return d->flatpakPlatformTheme->createPlatformDialogHelper(type);\n            return QPlatformTheme::createPlatformDialogHelper(type);\n        case QPlatformTheme::ColorDialog:\n        case QPlatformTheme::FontDialog:\n            return QPlatformTheme::createPlatformDialogHelper(type);\n    }\n}\n\nQPlatformSystemTrayIcon* PlatformTheme::createPlatformSystemTrayIcon() const {\n    return QPlatformTheme::createPlatformSystemTrayIcon();\n}\n\nconst QPalette* PlatformTheme::palette(QPlatformTheme::Palette type) const {\n    //    if (type == QPlatformTheme::SystemPalette) return d->pal;\n\n    //    return QPlatformTheme::palette(type);\n    return &d->pal;\n}\n\nconst QFont* PlatformTheme::font(QPlatformTheme::Font type) const {\n    if (d->fonts.contains(type)) {\n        return d->fonts.value(type);\n    } else {\n        return d->fonts.value(QPlatformTheme::SystemFont);\n    }\n\n    // return QPlatformTheme::font(type);\n}\n\nQVariant PlatformTheme::themeHint(QPlatformTheme::ThemeHint hint) const {\n    switch (hint) {\n        case QPlatformTheme::SystemIconThemeName:\n            return d->settings->value(\"Platform/icons\");\n        case QPlatformTheme::SystemIconFallbackThemeName:\n            return d->settings->value(\"Platform/icons.fallback\");\n        case QPlatformTheme::StyleNames:\n            return d->settings->delimitedList(\"Platform/style\");\n        case QPlatformTheme::IconThemeSearchPaths:\n        case QPlatformTheme::IconFallbackSearchPaths:\n            return QStringList({QDir::homePath() + \"/.local/share/icons/\", \"/usr/share/icons\", \"/var/lib/flatpak/exports/share/icons\", QDir::homePath() + \"/.local/share/flatpak/exports/share/icons\"});\n        case QPlatformTheme::KeyboardScheme:\n            return KdeKeyboardScheme;\n        case QPlatformTheme::SpellCheckUnderlineStyle:\n            return QTextCharFormat::SingleUnderline;\n        case QPlatformTheme::ItemViewActivateItemOnSingleClick:\n        case QPlatformTheme::DialogButtonBoxButtonsHaveIcons:\n        case QPlatformTheme::ShowShortcutsInContextMenus:\n        case QPlatformTheme::UiEffects:\n            return true;\n        case QPlatformTheme::PasswordMaskCharacter:\n            return QChar(0x2022);\n        case QPlatformTheme::CursorFlashTime:\n        case QPlatformTheme::KeyboardInputInterval:\n        case QPlatformTheme::MouseDoubleClickInterval:\n        case QPlatformTheme::StartDragDistance:\n        case QPlatformTheme::StartDragTime:\n        case QPlatformTheme::KeyboardAutoRepeatRate:\n        case QPlatformTheme::PasswordMaskDelay:\n        case QPlatformTheme::StartDragVelocity:\n        case QPlatformTheme::TextCursorWidth:\n        case QPlatformTheme::DropShadow:\n        case QPlatformTheme::MaximumScrollBarDragDistance:\n        case QPlatformTheme::ToolButtonStyle:\n        case QPlatformTheme::ToolBarIconSize:\n        case QPlatformTheme::WindowAutoPlacement:\n        case QPlatformTheme::DialogButtonBoxLayout:\n        case QPlatformTheme::UseFullScreenForPopupMenu:\n        case QPlatformTheme::TabFocusBehavior:\n        case QPlatformTheme::IconPixmapSizes:\n        case QPlatformTheme::DialogSnapToDefaultButton:\n        case QPlatformTheme::ContextMenuOnMouseRelease:\n        case QPlatformTheme::MousePressAndHoldInterval:\n        case QPlatformTheme::MouseDoubleClickDistance:\n        case QPlatformTheme::WheelScrollLines:\n        case QPlatformTheme::TouchDoubleTapDistance:\n        case QPlatformTheme::MouseQuickSelectionThreshold:\n        default:\n            return QPlatformTheme::themeHint(hint);\n    }\n}\n\nQPixmap PlatformTheme::standardPixmap(QPlatformTheme::StandardPixmap sp, const QSizeF& size) const {\n    return QPlatformTheme::standardPixmap(sp, size);\n}\n\nQIcon PlatformTheme::fileIcon(const QFileInfo& fileInfo, QPlatformTheme::IconOptions iconOptions) const {\n    QMimeType mt = d->mimeDb.mimeTypeForFile(fileInfo);\n    return QIcon::fromTheme(mt.iconName(), QIcon::fromTheme(\"unknown\"));\n}\n\nQIconEngine* PlatformTheme::createIconEngine(const QString& iconName) const {\n    auto iconEngine = QPlatformTheme::createIconEngine(iconName);\n    if (iconEngine) {\n        return new IconLoaderEngine(iconName, iconEngine, nullptr);\n    }\n    return nullptr;\n}\n\nQList<QKeySequence> PlatformTheme::keyBindings(QKeySequence::StandardKey key) const {\n    return QPlatformTheme::keyBindings(key);\n}\n\nQString PlatformTheme::standardButtonText(int button) const {\n    return QPlatformTheme::standardButtonText(button);\n}\n\nQKeySequence PlatformTheme::standardButtonShortcut(int button) const {\n    return QPlatformTheme::standardButtonShortcut(button);\n}\n\nvoid PlatformTheme::updatePalette() {\n    QString base = d->settings->value(\"Palette/base\").toString();\n    QString accent = d->settings->value(\"Palette/accent\").toString();\n\n    QFile palettesFile(\":/thedesk-platform/palettes.json\");\n    palettesFile.open(QFile::ReadOnly);\n    QJsonDocument doc = QJsonDocument::fromJson(palettesFile.readAll());\n    QJsonObject rootObj = doc.object();\n\n    QJsonObject baseDefinitions;\n    QJsonValue definitions;\n\n    if (rootObj.contains(base)) {\n        QJsonObject baseObject = rootObj.value(base).toObject();\n        baseDefinitions = baseObject.value(\"bases\").toObject();\n        if (baseObject.value(\"accents\").toObject().contains(accent)) {\n            definitions = baseObject.value(\"accents\").toObject().value(accent);\n        }\n    }\n\n    if (definitions.type() != QJsonValue::Null) {\n        QJsonObject accentDefinitions = definitions.toObject();\n\n        // Apply the palette\n        for (QJsonObject obj : {\n                 baseDefinitions, accentDefinitions}) {\n            for (auto i = obj.constBegin(); i != obj.constEnd(); i++) {\n                PaletteFormat::applyColor(&d->pal, i.key(), i.value());\n            }\n        }\n    }\n}\n\nvoid PlatformTheme::updateFont() {\n    QStringList fonts = d->settings->keysInGroup(\"Fonts\");\n    for (QString fontTypeStr : fonts) {\n        QPlatformTheme::Font fontType = FontFormat::fontForString(fontTypeStr);\n\n        QStringList parts = d->settings->value(\"Fonts/\" + fontTypeStr).toStringList();\n\n        QFont* font;\n        if (d->fonts.contains(fontType)) {\n            font = d->fonts.value(fontType);\n            font->setFamily(parts.at(0));\n        } else {\n            font = new QFont(parts.at(0));\n            d->fonts.insert(fontType, font);\n        }\n\n        font->setPointSizeF(parts.at(1).toDouble());\n    }\n}\n\n#if QT_VERSION < QT_VERSION_CHECK(6, 5, 0)\nPlatformTheme::Appearance PlatformTheme::appearance() const {\n    return PlatformTheme::Appearance::Dark;\n}\n#else\nQt::ColorScheme PlatformTheme::colorScheme() const {\n    return Qt::ColorScheme::Dark;\n}\n#endif\n"
  },
  {
    "path": "platform/platformtheme.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef PLATFORMTHEME_H\n#define PLATFORMTHEME_H\n\n#include <qpa/qplatformtheme.h>\n\nstruct PlatformThemePrivate;\nclass PlatformTheme : public QPlatformTheme {\n    public:\n        explicit PlatformTheme();\n        ~PlatformTheme();\n\n        // QPlatformTheme interface\n    public:\n        QPlatformMenuItem* createPlatformMenuItem() const override;\n        QPlatformMenu* createPlatformMenu() const override;\n        QPlatformMenuBar* createPlatformMenuBar() const override;\n        void showPlatformMenuBar() override;\n        bool usePlatformNativeDialog(DialogType type) const override;\n        QPlatformDialogHelper* createPlatformDialogHelper(DialogType type) const override;\n        QPlatformSystemTrayIcon* createPlatformSystemTrayIcon() const override;\n        const QPalette* palette(Palette type) const override;\n        const QFont* font(Font type) const override;\n        QVariant themeHint(ThemeHint hint) const override;\n        QPixmap standardPixmap(StandardPixmap sp, const QSizeF& size) const override;\n        QIcon fileIcon(const QFileInfo& fileInfo, QPlatformTheme::IconOptions iconOptions) const override;\n        QIconEngine* createIconEngine(const QString& iconName) const override;\n        QList<QKeySequence> keyBindings(QKeySequence::StandardKey key) const override;\n        QString standardButtonText(int button) const override;\n        QKeySequence standardButtonShortcut(int button) const override;\n#if QT_VERSION < QT_VERSION_CHECK(6, 5, 0)\n        Appearance appearance() const override;\n#else\n        Qt::ColorScheme colorScheme() const;\n#endif\n\n    private:\n        PlatformThemePrivate* d;\n\n        void updatePalette();\n        void updateFont();\n};\n\n#endif // PLATFORMTHEME_H\n"
  },
  {
    "path": "platform/plugin.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"plugin.h\"\n\n#include \"platformtheme.h\"\n\nPlugin::Plugin(QObject* parent)\n    : QPlatformThemePlugin(parent) {\n}\n\n\nQPlatformTheme* Plugin::create(const QString& key, const QStringList& paramList) {\n    if (key.toLower() == \"thedesk-platform\") {\n        return new PlatformTheme();\n    }\n    return nullptr;\n}\n"
  },
  {
    "path": "platform/plugin.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef PLUGIN_H\n#define PLUGIN_H\n\n#include <qpa/qplatformthemeplugin.h>\n\nclass Plugin : public QPlatformThemePlugin {\n        Q_OBJECT\n        Q_PLUGIN_METADATA(IID \"org.qt-project.Qt.QPA.QPlatformThemeFactoryInterface.5.1\" FILE \"plugin.json\")\n\n    public:\n        explicit Plugin(QObject* parent = nullptr);\n\n    private:\n        QPlatformTheme* create(const QString& key, const QStringList& paramList);\n};\n\n#endif // PLUGIN_H\n"
  },
  {
    "path": "platform/plugin.json",
    "content": "{\n    \"Keys\": [ \"thedesk-platform\" ]\n}\n"
  },
  {
    "path": "platform/psAMLQ.json",
    "content": ""
  },
  {
    "path": "platform/thedesk-platform-resources.qrc",
    "content": "<RCC>\n    <qresource prefix=\"/thedesk-platform\">\n        <file>palettes.json</file>\n    </qresource>\n</RCC>\n"
  },
  {
    "path": "platform/thedesk-platform.conf",
    "content": "[Platform]\nstyle=Contemporary\nicons=contemporary\nicons.fallback=breeze\ncursor=contemporary_cursors\ncursorSize=24\n\n[Palette]\nbase=dark\naccent=blue\n\n[Fonts]\nsystem=Contemporary,10\nfixed=Hack,10\n"
  },
  {
    "path": "platform/translations/ar_SA.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"ar_SA\" sourcelanguage=\"en_US\">\n<context>\n    <name>MessageDialog</name>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.ui\" line=\"149\"/>\n        <source>Details...</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.ui\" line=\"207\"/>\n        <source>DETAILS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.ui\" line=\"224\"/>\n        <source>Back</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"104\"/>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"133\"/>\n        <source>OK</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"105\"/>\n        <source>Save</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"106\"/>\n        <source>Save All</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"107\"/>\n        <source>Open</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"108\"/>\n        <source>Yes</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"109\"/>\n        <source>Yes to All</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"110\"/>\n        <source>No</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"111\"/>\n        <source>No to All</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"112\"/>\n        <source>Abort</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"113\"/>\n        <source>Retry</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"114\"/>\n        <source>Ignore</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"115\"/>\n        <source>Close</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"116\"/>\n        <source>Cancel</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"117\"/>\n        <source>Discard</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"118\"/>\n        <source>Help</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"119\"/>\n        <source>Apply</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"120\"/>\n        <source>Reset</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"121\"/>\n        <source>Restore Defaults</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "platform/translations/au_AU.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"au_AU\" sourcelanguage=\"en_US\">\n<context>\n    <name>MessageDialog</name>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.ui\" line=\"149\"/>\n        <source>Details...</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.ui\" line=\"207\"/>\n        <source>DETAILS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.ui\" line=\"224\"/>\n        <source>Back</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"104\"/>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"133\"/>\n        <source>OK</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"105\"/>\n        <source>Save</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"106\"/>\n        <source>Save All</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"107\"/>\n        <source>Open</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"108\"/>\n        <source>Yes</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"109\"/>\n        <source>Yes to All</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"110\"/>\n        <source>No</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"111\"/>\n        <source>No to All</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"112\"/>\n        <source>Abort</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"113\"/>\n        <source>Retry</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"114\"/>\n        <source>Ignore</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"115\"/>\n        <source>Close</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"116\"/>\n        <source>Cancel</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"117\"/>\n        <source>Discard</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"118\"/>\n        <source>Help</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"119\"/>\n        <source>Apply</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"120\"/>\n        <source>Reset</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"121\"/>\n        <source>Restore Defaults</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "platform/translations/cy.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"cy\" sourcelanguage=\"en_US\">\n<context>\n    <name>MessageDialog</name>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.ui\" line=\"149\"/>\n        <source>Details...</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.ui\" line=\"207\"/>\n        <source>DETAILS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.ui\" line=\"224\"/>\n        <source>Back</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"104\"/>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"133\"/>\n        <source>OK</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"105\"/>\n        <source>Save</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"106\"/>\n        <source>Save All</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"107\"/>\n        <source>Open</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"108\"/>\n        <source>Yes</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"109\"/>\n        <source>Yes to All</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"110\"/>\n        <source>No</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"111\"/>\n        <source>No to All</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"112\"/>\n        <source>Abort</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"113\"/>\n        <source>Retry</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"114\"/>\n        <source>Ignore</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"115\"/>\n        <source>Close</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"116\"/>\n        <source>Cancel</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"117\"/>\n        <source>Discard</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"118\"/>\n        <source>Help</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"119\"/>\n        <source>Apply</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"120\"/>\n        <source>Reset</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"121\"/>\n        <source>Restore Defaults</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "platform/translations/da.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"da\" sourcelanguage=\"en_US\">\n<context>\n    <name>MessageDialog</name>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.ui\" line=\"149\"/>\n        <source>Details...</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.ui\" line=\"207\"/>\n        <source>DETAILS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.ui\" line=\"224\"/>\n        <source>Back</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"104\"/>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"133\"/>\n        <source>OK</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"105\"/>\n        <source>Save</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"106\"/>\n        <source>Save All</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"107\"/>\n        <source>Open</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"108\"/>\n        <source>Yes</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"109\"/>\n        <source>Yes to All</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"110\"/>\n        <source>No</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"111\"/>\n        <source>No to All</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"112\"/>\n        <source>Abort</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"113\"/>\n        <source>Retry</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"114\"/>\n        <source>Ignore</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"115\"/>\n        <source>Close</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"116\"/>\n        <source>Cancel</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"117\"/>\n        <source>Discard</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"118\"/>\n        <source>Help</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"119\"/>\n        <source>Apply</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"120\"/>\n        <source>Reset</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"121\"/>\n        <source>Restore Defaults</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "platform/translations/de.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"de\" sourcelanguage=\"en_US\">\n<context>\n    <name>MessageDialog</name>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.ui\" line=\"149\"/>\n        <source>Details...</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.ui\" line=\"207\"/>\n        <source>DETAILS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.ui\" line=\"224\"/>\n        <source>Back</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"104\"/>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"133\"/>\n        <source>OK</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"105\"/>\n        <source>Save</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"106\"/>\n        <source>Save All</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"107\"/>\n        <source>Open</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"108\"/>\n        <source>Yes</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"109\"/>\n        <source>Yes to All</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"110\"/>\n        <source>No</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"111\"/>\n        <source>No to All</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"112\"/>\n        <source>Abort</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"113\"/>\n        <source>Retry</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"114\"/>\n        <source>Ignore</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"115\"/>\n        <source>Close</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"116\"/>\n        <source>Cancel</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"117\"/>\n        <source>Discard</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"118\"/>\n        <source>Help</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"119\"/>\n        <source>Apply</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"120\"/>\n        <source>Reset</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"121\"/>\n        <source>Restore Defaults</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "platform/translations/en_GB.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"en_GB\" sourcelanguage=\"en_US\">\n<context>\n    <name>MessageDialog</name>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"104\"/>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"133\"/>\n        <source>OK</source>\n        <translation>OK</translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"105\"/>\n        <source>Save</source>\n        <translation>Save</translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"106\"/>\n        <source>Save All</source>\n        <translation>Save All</translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"107\"/>\n        <source>Open</source>\n        <translation>Open</translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"108\"/>\n        <source>Yes</source>\n        <translation>Yes</translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"109\"/>\n        <source>Yes to All</source>\n        <translation>Yes to All</translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"110\"/>\n        <source>No</source>\n        <translation>No</translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"111\"/>\n        <source>No to All</source>\n        <translation>No to All</translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"112\"/>\n        <source>Abort</source>\n        <translation>Abort</translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"113\"/>\n        <source>Retry</source>\n        <translation>Retry</translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"114\"/>\n        <source>Ignore</source>\n        <translation>Ignore</translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"115\"/>\n        <source>Close</source>\n        <translation>Close</translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"116\"/>\n        <source>Cancel</source>\n        <translation>Cancel</translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"117\"/>\n        <source>Discard</source>\n        <translation>Discard</translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"118\"/>\n        <source>Help</source>\n        <translation>Help</translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"119\"/>\n        <source>Apply</source>\n        <translation>Apply</translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"120\"/>\n        <source>Reset</source>\n        <translation>Reset</translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"121\"/>\n        <source>Restore Defaults</source>\n        <translation>Restore Defaults</translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.ui\" line=\"149\"/>\n        <source>Details...</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.ui\" line=\"207\"/>\n        <source>DETAILS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.ui\" line=\"224\"/>\n        <source>Back</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "platform/translations/en_US.qm",
    "content": "<d\u0018!\u001c`"
  },
  {
    "path": "platform/translations/en_US.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" sourcelanguage=\"en_US\">\n<context>\n    <name>MessageDialog</name>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.ui\" line=\"149\"/>\n        <source>Details...</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.ui\" line=\"207\"/>\n        <source>DETAILS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.ui\" line=\"224\"/>\n        <source>Back</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"104\"/>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"133\"/>\n        <source>OK</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"105\"/>\n        <source>Save</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"106\"/>\n        <source>Save All</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"107\"/>\n        <source>Open</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"108\"/>\n        <source>Yes</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"109\"/>\n        <source>Yes to All</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"110\"/>\n        <source>No</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"111\"/>\n        <source>No to All</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"112\"/>\n        <source>Abort</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"113\"/>\n        <source>Retry</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"114\"/>\n        <source>Ignore</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"115\"/>\n        <source>Close</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"116\"/>\n        <source>Cancel</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"117\"/>\n        <source>Discard</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"118\"/>\n        <source>Help</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"119\"/>\n        <source>Apply</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"120\"/>\n        <source>Reset</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"121\"/>\n        <source>Restore Defaults</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "platform/translations/es.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"es\" sourcelanguage=\"en_US\">\n<context>\n    <name>MessageDialog</name>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.ui\" line=\"149\"/>\n        <source>Details...</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.ui\" line=\"207\"/>\n        <source>DETAILS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.ui\" line=\"224\"/>\n        <source>Back</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"104\"/>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"133\"/>\n        <source>OK</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"105\"/>\n        <source>Save</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"106\"/>\n        <source>Save All</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"107\"/>\n        <source>Open</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"108\"/>\n        <source>Yes</source>\n        <translation>Sí</translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"109\"/>\n        <source>Yes to All</source>\n        <translation>Sí a todo</translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"110\"/>\n        <source>No</source>\n        <translation>No</translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"111\"/>\n        <source>No to All</source>\n        <translation>No a todo</translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"112\"/>\n        <source>Abort</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"113\"/>\n        <source>Retry</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"114\"/>\n        <source>Ignore</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"115\"/>\n        <source>Close</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"116\"/>\n        <source>Cancel</source>\n        <translation>Cancellar</translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"117\"/>\n        <source>Discard</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"118\"/>\n        <source>Help</source>\n        <translation>Ayudar</translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"119\"/>\n        <source>Apply</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"120\"/>\n        <source>Reset</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"121\"/>\n        <source>Restore Defaults</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "platform/translations/es_VE.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"es_VE\" sourcelanguage=\"en_US\">\n<context>\n    <name>MessageDialog</name>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.ui\" line=\"149\"/>\n        <source>Details...</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.ui\" line=\"207\"/>\n        <source>DETAILS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.ui\" line=\"224\"/>\n        <source>Back</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"104\"/>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"133\"/>\n        <source>OK</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"105\"/>\n        <source>Save</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"106\"/>\n        <source>Save All</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"107\"/>\n        <source>Open</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"108\"/>\n        <source>Yes</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"109\"/>\n        <source>Yes to All</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"110\"/>\n        <source>No</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"111\"/>\n        <source>No to All</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"112\"/>\n        <source>Abort</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"113\"/>\n        <source>Retry</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"114\"/>\n        <source>Ignore</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"115\"/>\n        <source>Close</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"116\"/>\n        <source>Cancel</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"117\"/>\n        <source>Discard</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"118\"/>\n        <source>Help</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"119\"/>\n        <source>Apply</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"120\"/>\n        <source>Reset</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"121\"/>\n        <source>Restore Defaults</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "platform/translations/id.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"id\" sourcelanguage=\"en_US\">\n<context>\n    <name>MessageDialog</name>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.ui\" line=\"149\"/>\n        <source>Details...</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.ui\" line=\"207\"/>\n        <source>DETAILS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.ui\" line=\"224\"/>\n        <source>Back</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"104\"/>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"133\"/>\n        <source>OK</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"105\"/>\n        <source>Save</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"106\"/>\n        <source>Save All</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"107\"/>\n        <source>Open</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"108\"/>\n        <source>Yes</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"109\"/>\n        <source>Yes to All</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"110\"/>\n        <source>No</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"111\"/>\n        <source>No to All</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"112\"/>\n        <source>Abort</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"113\"/>\n        <source>Retry</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"114\"/>\n        <source>Ignore</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"115\"/>\n        <source>Close</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"116\"/>\n        <source>Cancel</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"117\"/>\n        <source>Discard</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"118\"/>\n        <source>Help</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"119\"/>\n        <source>Apply</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"120\"/>\n        <source>Reset</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"121\"/>\n        <source>Restore Defaults</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "platform/translations/nl.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"nl\" sourcelanguage=\"en_US\">\n<context>\n    <name>MessageDialog</name>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.ui\" line=\"149\"/>\n        <source>Details...</source>\n        <translation>Details...</translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.ui\" line=\"207\"/>\n        <source>DETAILS</source>\n        <translation>DETAILS</translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.ui\" line=\"224\"/>\n        <source>Back</source>\n        <translation>Terug</translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"104\"/>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"133\"/>\n        <source>OK</source>\n        <translation>OK</translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"105\"/>\n        <source>Save</source>\n        <translation>Opslaan</translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"106\"/>\n        <source>Save All</source>\n        <translation>Alles Opslaan</translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"107\"/>\n        <source>Open</source>\n        <translation>OPenen</translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"108\"/>\n        <source>Yes</source>\n        <translation>Ja</translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"109\"/>\n        <source>Yes to All</source>\n        <translation>Ja voor Alles</translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"110\"/>\n        <source>No</source>\n        <translation>Nee</translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"111\"/>\n        <source>No to All</source>\n        <translation>Nee voor Alles</translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"112\"/>\n        <source>Abort</source>\n        <translation>Onderbreken</translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"113\"/>\n        <source>Retry</source>\n        <translation>Opnieuw Proberen</translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"114\"/>\n        <source>Ignore</source>\n        <translation>Negeren</translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"115\"/>\n        <source>Close</source>\n        <translation>Sluiten</translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"116\"/>\n        <source>Cancel</source>\n        <translation>Annuleren</translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"117\"/>\n        <source>Discard</source>\n        <translation type=\"unfinished\">Verwijderen</translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"118\"/>\n        <source>Help</source>\n        <translation>Hulp</translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"119\"/>\n        <source>Apply</source>\n        <translation>Toepassen</translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"120\"/>\n        <source>Reset</source>\n        <translation>Herstellen</translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"121\"/>\n        <source>Restore Defaults</source>\n        <translation>Standaarden Herstellen</translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "platform/translations/pt_BR.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"pt_BR\" sourcelanguage=\"en_US\">\n<context>\n    <name>MessageDialog</name>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.ui\" line=\"149\"/>\n        <source>Details...</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.ui\" line=\"207\"/>\n        <source>DETAILS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.ui\" line=\"224\"/>\n        <source>Back</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"104\"/>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"133\"/>\n        <source>OK</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"105\"/>\n        <source>Save</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"106\"/>\n        <source>Save All</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"107\"/>\n        <source>Open</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"108\"/>\n        <source>Yes</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"109\"/>\n        <source>Yes to All</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"110\"/>\n        <source>No</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"111\"/>\n        <source>No to All</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"112\"/>\n        <source>Abort</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"113\"/>\n        <source>Retry</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"114\"/>\n        <source>Ignore</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"115\"/>\n        <source>Close</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"116\"/>\n        <source>Cancel</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"117\"/>\n        <source>Discard</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"118\"/>\n        <source>Help</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"119\"/>\n        <source>Apply</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"120\"/>\n        <source>Reset</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"121\"/>\n        <source>Restore Defaults</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "platform/translations/ro_RO.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"ro_RO\" sourcelanguage=\"en_US\">\n<context>\n    <name>MessageDialog</name>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"104\"/>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"133\"/>\n        <source>OK</source>\n        <translation>OK</translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"105\"/>\n        <source>Save</source>\n        <translation>Salvați</translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"106\"/>\n        <source>Save All</source>\n        <translation>Salvați tot</translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"107\"/>\n        <source>Open</source>\n        <translation>Deschide</translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"108\"/>\n        <source>Yes</source>\n        <translation>Da</translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"109\"/>\n        <source>Yes to All</source>\n        <translation>Da la tot</translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"110\"/>\n        <source>No</source>\n        <translation>Nu</translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"111\"/>\n        <source>No to All</source>\n        <translation>Nu la tot</translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"112\"/>\n        <source>Abort</source>\n        <translation>Anulează</translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"113\"/>\n        <source>Retry</source>\n        <translation>Încearcă din nou</translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"114\"/>\n        <source>Ignore</source>\n        <translation>Ignoră</translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"115\"/>\n        <source>Close</source>\n        <translation>Închide</translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"116\"/>\n        <source>Cancel</source>\n        <translation>Anulare</translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"117\"/>\n        <source>Discard</source>\n        <translation>Renunță</translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"118\"/>\n        <source>Help</source>\n        <translation>Ajutor</translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"119\"/>\n        <source>Apply</source>\n        <translation>Aplică</translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"120\"/>\n        <source>Reset</source>\n        <translation>Resetează</translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"121\"/>\n        <source>Restore Defaults</source>\n        <translation>Revenire la setările inițiale</translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.ui\" line=\"149\"/>\n        <source>Details...</source>\n        <translation type=\"unfinished\">Detalii...</translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.ui\" line=\"207\"/>\n        <source>DETAILS</source>\n        <translation type=\"unfinished\">DETALII</translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.ui\" line=\"224\"/>\n        <source>Back</source>\n        <translation type=\"unfinished\">Înapoi</translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "platform/translations/sv.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"sv\" sourcelanguage=\"en_US\">\n<context>\n    <name>MessageDialog</name>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.ui\" line=\"149\"/>\n        <source>Details...</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.ui\" line=\"207\"/>\n        <source>DETAILS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.ui\" line=\"224\"/>\n        <source>Back</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"104\"/>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"133\"/>\n        <source>OK</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"105\"/>\n        <source>Save</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"106\"/>\n        <source>Save All</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"107\"/>\n        <source>Open</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"108\"/>\n        <source>Yes</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"109\"/>\n        <source>Yes to All</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"110\"/>\n        <source>No</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"111\"/>\n        <source>No to All</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"112\"/>\n        <source>Abort</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"113\"/>\n        <source>Retry</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"114\"/>\n        <source>Ignore</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"115\"/>\n        <source>Close</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"116\"/>\n        <source>Cancel</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"117\"/>\n        <source>Discard</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"118\"/>\n        <source>Help</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"119\"/>\n        <source>Apply</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"120\"/>\n        <source>Reset</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"121\"/>\n        <source>Restore Defaults</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "platform/translations/tr_TR.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"tr_TR\" sourcelanguage=\"en_US\">\n<context>\n    <name>MessageDialog</name>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"104\"/>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"133\"/>\n        <source>OK</source>\n        <translation>PEKİ</translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"105\"/>\n        <source>Save</source>\n        <translation>Kaydet</translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"106\"/>\n        <source>Save All</source>\n        <translation>Hepsini Kaydet</translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"107\"/>\n        <source>Open</source>\n        <translation>Aç</translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"108\"/>\n        <source>Yes</source>\n        <translation>Evet</translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"109\"/>\n        <source>Yes to All</source>\n        <translation>Hepsine Evet</translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"110\"/>\n        <source>No</source>\n        <translation>Yok</translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"111\"/>\n        <source>No to All</source>\n        <translation>Tümüne yok</translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"112\"/>\n        <source>Abort</source>\n        <translation>Vazgeç</translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"113\"/>\n        <source>Retry</source>\n        <translation>Yeniden dene</translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"114\"/>\n        <source>Ignore</source>\n        <translation>Aldırmamak</translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"115\"/>\n        <source>Close</source>\n        <translation>Kapat</translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"116\"/>\n        <source>Cancel</source>\n        <translation>İptal</translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"117\"/>\n        <source>Discard</source>\n        <translation>Kurtulmak</translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"118\"/>\n        <source>Help</source>\n        <translation>Yardımcı</translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"119\"/>\n        <source>Apply</source>\n        <translation>Uygulamak</translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"120\"/>\n        <source>Reset</source>\n        <translation>Reset</translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"121\"/>\n        <source>Restore Defaults</source>\n        <translation>Varsayılanları Geri Yükle</translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.ui\" line=\"149\"/>\n        <source>Details...</source>\n        <translation>Ayrıntı...</translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.ui\" line=\"207\"/>\n        <source>DETAILS</source>\n        <translation>DETAYLAR</translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.ui\" line=\"224\"/>\n        <source>Back</source>\n        <translation>Geri</translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "platform/translations/vi.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"vi\" sourcelanguage=\"en_US\">\n<context>\n    <name>MessageDialog</name>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.ui\" line=\"149\"/>\n        <source>Details...</source>\n        <translation>Chi tiết...</translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.ui\" line=\"207\"/>\n        <source>DETAILS</source>\n        <translation>CHI TIẾT</translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.ui\" line=\"224\"/>\n        <source>Back</source>\n        <translation>Lại</translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"104\"/>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"133\"/>\n        <source>OK</source>\n        <translation>OK</translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"105\"/>\n        <source>Save</source>\n        <translation>Lưu</translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"106\"/>\n        <source>Save All</source>\n        <translation>Lưu tất cả</translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"107\"/>\n        <source>Open</source>\n        <translation>Mở</translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"108\"/>\n        <source>Yes</source>\n        <translation>Có</translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"109\"/>\n        <source>Yes to All</source>\n        <translation>Có với tất cả</translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"110\"/>\n        <source>No</source>\n        <translation>Không</translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"111\"/>\n        <source>No to All</source>\n        <translation>Không với tất cả</translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"112\"/>\n        <source>Abort</source>\n        <translation>Bỏ dở</translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"113\"/>\n        <source>Retry</source>\n        <translation>Thử lại</translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"114\"/>\n        <source>Ignore</source>\n        <translation>Bỏ qua</translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"115\"/>\n        <source>Close</source>\n        <translation>Đóng</translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"116\"/>\n        <source>Cancel</source>\n        <translation>Hủy</translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"117\"/>\n        <source>Discard</source>\n        <translation>Vứt đi</translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"118\"/>\n        <source>Help</source>\n        <translation>Trợ giúp</translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"119\"/>\n        <source>Apply</source>\n        <translation>Áp dụng</translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"120\"/>\n        <source>Reset</source>\n        <translation>Đặt lại</translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"121\"/>\n        <source>Restore Defaults</source>\n        <translation>Đặt về mặc định</translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "platform/translations/vi_VN.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"vi_VN\">\n<context>\n    <name>MessageDialog</name>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.ui\" line=\"149\"/>\n        <source>Details...</source>\n        <translation>Chỉ tiết...</translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.ui\" line=\"207\"/>\n        <source>DETAILS</source>\n        <translation>CHI TIẾT</translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.ui\" line=\"224\"/>\n        <source>Back</source>\n        <translation>Lại</translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"104\"/>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"133\"/>\n        <source>OK</source>\n        <translation>OK</translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"105\"/>\n        <source>Save</source>\n        <translation>Lưu</translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"106\"/>\n        <source>Save All</source>\n        <translation>Lưu tất cả</translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"107\"/>\n        <source>Open</source>\n        <translation>Mở</translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"108\"/>\n        <source>Yes</source>\n        <translation>Có</translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"109\"/>\n        <source>Yes to All</source>\n        <translation>Có cho tất cả</translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"110\"/>\n        <source>No</source>\n        <translation>Không</translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"111\"/>\n        <source>No to All</source>\n        <translation>Không cho tất cả</translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"112\"/>\n        <source>Abort</source>\n        <translation>Hủy bỏ</translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"113\"/>\n        <source>Retry</source>\n        <translation>Thủ lại</translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"114\"/>\n        <source>Ignore</source>\n        <translation>Bỏ qua</translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"115\"/>\n        <source>Close</source>\n        <translation>Đóng</translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"116\"/>\n        <source>Cancel</source>\n        <translation>Hủy</translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"117\"/>\n        <source>Discard</source>\n        <translation>Bỏ</translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"118\"/>\n        <source>Help</source>\n        <translation>Trợ giúp</translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"119\"/>\n        <source>Apply</source>\n        <translation>Áp dụng</translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"120\"/>\n        <source>Reset</source>\n        <translation>Đặt lại</translation>\n    </message>\n    <message>\n        <location filename=\"../messagedialog/messagedialog.cpp\" line=\"121\"/>\n        <source>Restore Defaults</source>\n        <translation>Hoàn lại mặc định</translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/AccessibilityPlugin/AccessibilityPlugin.pro",
    "content": "QT += gui widgets\n\nTEMPLATE = lib\nCONFIG += plugin\n\nCONFIG += c++11\n\n# Include the-libs build tools\ninclude(/usr/share/the-libs/pri/gentranslations.pri)\n\n# The following define makes your compiler emit warnings if you use\n# any Qt feature that has been marked deprecated (the exact warnings\n# depend on your compiler). Please consult the documentation of the\n# deprecated API in order to know how to port your code away from it.\nDEFINES += QT_DEPRECATED_WARNINGS\n\n# You can also make your code fail to compile if it uses deprecated APIs.\n# In order to do so, uncomment the following line.\n# You can also select to disable deprecated APIs only up to a certain version of Qt.\n#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0\n\nSOURCES += \\\n    accessibilitydaemon.cpp \\\n    chunks/stickykeyschunk.cpp \\\n    plugin.cpp \\\n    settings/accessibilitysettingspane.cpp\n\nHEADERS += \\\n    accessibilitydaemon.h \\\n    chunks/stickykeyschunk.h \\\n    plugin.h \\\n    settings/accessibilitysettingspane.h\n\nDISTFILES += \\\n    Plugin.json \\\n    defaults.conf\n\n\nunix {\n    translations.files = translations/*.qm\n    translations.path = /usr/share/thedesk/AccessibilityPlugin/translations\n\n    defaults.files = defaults.conf\n    defaults.path = /etc/theSuite/theDesk/AccessibilityPlugin/\n\n    INSTALLS += translations defaults\n}\n\ninclude(../plugins.pri)\n\nFORMS += \\\n    settings/accessibilitysettingspane.ui\n"
  },
  {
    "path": "plugins/AccessibilityPlugin/CMakeLists.txt",
    "content": "cmake_minimum_required(VERSION 3.24.0)\n\nfind_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets)\nfind_package(libcontemporary)\n\nset(SOURCES\n    accessibilitydaemon.cpp\n    chunks/stickykeyschunk.cpp\n    plugin.cpp\n    settings/accessibilitysettingspane.cpp\n\n    settings/accessibilitysettingspane.ui\n)\n\nset(HEADERS\n    accessibilitydaemon.h\n    chunks/stickykeyschunk.h\n    plugin.h\n    settings/accessibilitysettingspane.h\n)\n\nset(PLUGIN_NAME accessibility)\nadd_plugin_td(${PLUGIN_NAME})\ntarget_sources(plugin-${PLUGIN_NAME} PRIVATE ${SOURCES} ${HEADERS})\ncntp_defaults_file(${PLUGIN_NAME}\n    DEFAULTS_FILE thedesk-accessibility.conf)\n\ntarget_link_libraries(plugin-${PLUGIN_NAME} Qt::Widgets libcontemporary libthedesk)\n"
  },
  {
    "path": "plugins/AccessibilityPlugin/Plugin.json",
    "content": "{\n    \"name\": \"Accessibility Management\",\n    \"icon\": \"preferences-desktop-accessibility\",\n    \"uuid\": \"e248ffb9-7a7c-452c-95c3-c4ef5cc033c4\",\n    \"vi\": {\n        \"name\": \"Quản lý trở năng\"\n    }\n}\n"
  },
  {
    "path": "plugins/AccessibilityPlugin/accessibilitydaemon.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"accessibilitydaemon.h\"\n\n#include <Wm/desktopwm.h>\n#include <Wm/desktopaccessibility.h>\n#include <tsettings.h>\n#include <QDebug>\n\nstruct AccessibilityDaemonPrivate {\n    tSettings settings;\n};\n\nAccessibilityDaemon::AccessibilityDaemon(QObject* parent) : QObject(parent) {\n    d = new AccessibilityDaemonPrivate();\n\n    connect(&d->settings, &tSettings::settingChanged, this, &AccessibilityDaemon::updateSetting);\n    for (QString setting : {\n            \"Accessibility/stickykeys.active\",\n            \"Accessibility/mousekeys.active\"\n        }) {\n        updateSetting(setting, d->settings.value(setting));\n    }\n\n    connect(DesktopWm::accessibility(), &DesktopAccessibility::accessibilityOptionEnabledChanged, this, [ = ](DesktopAccessibility::AccessibilityOption option, bool enabled) {\n        switch (option) {\n            case DesktopAccessibility::StickyKeys:\n                d->settings.setValue(\"Accessibility/stickykeys.active\", enabled);\n                break;\n            case DesktopAccessibility::MouseKeys:\n                d->settings.setValue(\"Accessibility/mousekeys.active\", enabled);\n                break;\n            case DesktopAccessibility::LastAccessibilityOption:\n                break;\n        }\n    });\n\n}\n\nAccessibilityDaemon::~AccessibilityDaemon() {\n    delete d;\n}\n\nvoid AccessibilityDaemon::updateSetting(QString key, QVariant value) {\n    if (key == \"Accessibility/stickykeys.active\") {\n        DesktopWm::accessibility()->setAccessibilityOptionEnabled(DesktopAccessibility::StickyKeys, value.toBool());\n    } else if (key == \"Accessibility/mousekeys.active\") {\n        DesktopWm::accessibility()->setAccessibilityOptionEnabled(DesktopAccessibility::MouseKeys, value.toBool());\n    }\n}\n"
  },
  {
    "path": "plugins/AccessibilityPlugin/accessibilitydaemon.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef ACCESSIBILITYDAEMON_H\n#define ACCESSIBILITYDAEMON_H\n\n#include <QObject>\n\nstruct AccessibilityDaemonPrivate;\nclass AccessibilityDaemon : public QObject {\n        Q_OBJECT\n    public:\n        explicit AccessibilityDaemon(QObject* parent = nullptr);\n        ~AccessibilityDaemon();\n\n    signals:\n\n    private:\n        AccessibilityDaemonPrivate* d;\n\n        void updateSetting(QString key, QVariant value);\n};\n\n#endif // ACCESSIBILITYDAEMON_H\n"
  },
  {
    "path": "plugins/AccessibilityPlugin/chunks/stickykeyschunk.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"stickykeyschunk.h\"\n\n#include <QPainter>\n#include <Wm/desktopaccessibility.h>\n#include <Wm/desktopwm.h>\n#include <actionquickwidget.h>\n#include <barmanager.h>\n#include <libcontemporary_global.h>\n#include <statemanager.h>\n#include <tsettings.h>\n\nstruct StickyKeysChunkPrivate {\n        Qt::KeyboardModifiers latched;\n        Qt::KeyboardModifiers locked;\n\n        ActionQuickWidget* quickWidget;\n        tSettings settings;\n\n        bool registered = false;\n};\n\nStickyKeysChunk::StickyKeysChunk() :\n    Chunk() {\n    d = new StickyKeysChunkPrivate();\n\n    connect(DesktopWm::accessibility(), &DesktopAccessibility::accessibilityOptionEnabledChanged, this, [this](DesktopAccessibility::AccessibilityOption option, bool enabled) {\n        if (option == DesktopAccessibility::StickyKeys) {\n            updateRegistration(enabled);\n        }\n    });\n    connect(DesktopWm::accessibility(), &DesktopAccessibility::stickyKeysStateChanged, this, [this](Qt::KeyboardModifiers latched, Qt::KeyboardModifiers locked) {\n        d->latched = latched;\n        d->locked = locked;\n\n        this->update();\n    });\n\n    d->quickWidget = new ActionQuickWidget(this);\n    d->quickWidget->addAction(tr(\"Disable Sticky Keys\"), [=] {\n        d->settings.setValue(\"Accessibility/stickykeys.active\", false);\n    });\n\n    updateRegistration(DesktopWm::accessibility()->isAccessibilityOptionEnabled(DesktopAccessibility::StickyKeys));\n}\n\nStickyKeysChunk::~StickyKeysChunk() {\n    updateRegistration(false);\n    delete d;\n}\n\nQSize StickyKeysChunk::sizeHint() const {\n    return QSize(16, 16);\n}\n\nvoid StickyKeysChunk::updateRegistration(bool reg) {\n    if (d->registered == reg) return;\n    if (reg) {\n        StateManager::barManager()->addChunk(this);\n        this->setVisible(true);\n    } else {\n        StateManager::barManager()->removeChunk(this);\n        this->setVisible(false);\n    }\n    d->registered = reg;\n}\n\nQString StickyKeysChunk::name() {\n    return \"Accessibility-StickyKeys\";\n}\n\nint StickyKeysChunk::expandedHeight() {\n    return 16;\n}\n\nint StickyKeysChunk::statusBarHeight() {\n    return 16;\n}\n\nvoid StickyKeysChunk::paintEvent(QPaintEvent* event) {\n    QPainter painter(this);\n\n    QRect rect;\n    rect.setSize(QSize(16, 16));\n    rect.moveCenter(QPoint(this->width() / 2, this->height() / 2));\n\n    QRect shiftRect;\n    shiftRect.setHeight(rect.height() / 2 - 2);\n    shiftRect.setWidth(rect.width() - 6);\n    shiftRect.moveTopLeft(rect.topLeft() + QPoint(2, 2));\n\n    QRect ctrlRect;\n    ctrlRect.setHeight(shiftRect.height());\n    ctrlRect.setWidth(4);\n    ctrlRect.moveTop(shiftRect.bottom() + 1);\n    ctrlRect.moveLeft(shiftRect.left());\n\n    QRect superRect = ctrlRect;\n    superRect.moveLeft(ctrlRect.right() + 1);\n\n    QRect altRect = superRect;\n    altRect.moveLeft(superRect.right() + 1);\n\n    painter.setPen(this->palette().color(QPalette::WindowText));\n    painter.setBrush(Qt::transparent);\n    painter.drawRect(shiftRect);\n    painter.drawRect(ctrlRect);\n    painter.drawRect(superRect);\n    painter.drawRect(altRect);\n\n    painter.setPen(Qt::transparent);\n    painter.setBrush(this->palette().color(QPalette::WindowText));\n\n    if (d->locked & Qt::ShiftModifier || d->latched & Qt::ShiftModifier) {\n        painter.drawRect(shiftRect);\n    }\n    if (d->locked & Qt::ControlModifier || d->latched & Qt::ControlModifier) {\n        painter.drawRect(ctrlRect);\n    }\n    if (d->locked & Qt::MetaModifier || d->latched & Qt::MetaModifier) {\n        painter.drawRect(superRect);\n    }\n    if (d->locked & Qt::AltModifier || d->latched & Qt::AltModifier) {\n        painter.drawRect(altRect);\n    }\n}\n\nQWidget* StickyKeysChunk::quickWidget() {\n    return d->quickWidget;\n}\n"
  },
  {
    "path": "plugins/AccessibilityPlugin/chunks/stickykeyschunk.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef STICKYKEYSCHUNK_H\n#define STICKYKEYSCHUNK_H\n\n#include <chunk.h>\n\nstruct StickyKeysChunkPrivate;\nclass StickyKeysChunk : public Chunk {\n        Q_OBJECT\n    public:\n        explicit StickyKeysChunk();\n        ~StickyKeysChunk();\n\n        QSize sizeHint() const;\n\n    signals:\n\n    private:\n        StickyKeysChunkPrivate* d;\n\n        void updateRegistration(bool reg);\n\n        // Chunk interface\n    public:\n        QString name();\n        int expandedHeight();\n        int statusBarHeight();\n\n    protected:\n        QWidget* quickWidget();\n\n        // QWidget interface\n    protected:\n        void paintEvent(QPaintEvent* event);\n\n};\n\n#endif // STICKYKEYSCHUNK_H\n"
  },
  {
    "path": "plugins/AccessibilityPlugin/plugin.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"plugin.h\"\n\n#include <QApplication>\n#include <QDebug>\n#include <QDir>\n#include <localemanager.h>\n#include <onboardingmanager.h>\n#include <statemanager.h>\n#include <statuscentermanager.h>\n#include <tapplication.h>\n#include <tsettings.h>\n\n#include \"accessibilitydaemon.h\"\n#include \"chunks/stickykeyschunk.h\"\n#include \"settings/accessibilitysettingspane.h\"\n\nstruct PluginPrivate {\n        AccessibilitySettingsPane* settingsPane;\n        AccessibilityDaemon* daemon;\n        StickyKeysChunk* stickyKeysChunk;\n};\n\nPlugin::Plugin() {\n    d = new PluginPrivate();\n}\n\nPlugin::~Plugin() {\n    delete d;\n}\n\nvoid Plugin::activate() {\n    tApplication::addPluginTranslator(CNTP_TARGET_NAME);\n\n    tSettings::registerDefaults(QDir::cleanPath(qApp->applicationDirPath() + \"/../plugins/AccessibilityPlugin/thedesk-accessibility.conf\"));\n    tSettings::registerDefaults(\"/usr/share/defaults/thedesk-accessibility.conf\");\n\n    d->daemon = new AccessibilityDaemon();\n    d->stickyKeysChunk = new StickyKeysChunk();\n\n    d->settingsPane = new AccessibilitySettingsPane();\n    StateManager::statusCenterManager()->addPane(d->settingsPane, StatusCenterManager::SystemSettings);\n}\n\nvoid Plugin::deactivate() {\n    StateManager::statusCenterManager()->removePane(d->settingsPane);\n    d->settingsPane->deleteLater();\n    d->stickyKeysChunk->deleteLater();\n    d->daemon->deleteLater();\n    tApplication::removePluginTranslator(CNTP_TARGET_NAME);\n}\n"
  },
  {
    "path": "plugins/AccessibilityPlugin/plugin.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef PLUGIN_H\n#define PLUGIN_H\n\n#include \"plugins/plugininterface.h\"\n\nstruct PluginPrivate;\nclass Plugin : public QObject,\n               public PluginInterface {\n        Q_OBJECT\n        Q_PLUGIN_METADATA(IID PluginInterface_iid FILE \"Plugin.json\")\n        Q_INTERFACES(PluginInterface)\n\n    public:\n        Plugin();\n        ~Plugin();\n\n    private:\n        PluginPrivate* d;\n\n        // PluginInterface interface\n    public:\n        void activate();\n        void deactivate();\n};\n\n#endif // PLUGIN_H\n"
  },
  {
    "path": "plugins/AccessibilityPlugin/settings/accessibilitysettingspane.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"accessibilitysettingspane.h\"\n#include \"ui_accessibilitysettingspane.h\"\n\n#include <QIcon>\n#include <statemanager.h>\n#include <statuscentermanager.h>\n#include <tsettings.h>\n\nstruct AccessibilitySettingsPanePrivate {\n    tSettings settings;\n};\n\nAccessibilitySettingsPane::AccessibilitySettingsPane() :\n    StatusCenterPane(),\n    ui(new Ui::AccessibilitySettingsPane) {\n    ui->setupUi(this);\n\n    d = new AccessibilitySettingsPanePrivate();\n\n    ui->titleLabel->setBackButtonIsMenu(true);\n    ui->titleLabel->setBackButtonShown(StateManager::instance()->statusCenterManager()->isHamburgerMenuRequired());\n    connect(StateManager::instance()->statusCenterManager(), &StatusCenterManager::isHamburgerMenuRequiredChanged, ui->titleLabel, &tTitleLabel::setBackButtonShown);\n\n    const int contentWidth = StateManager::instance()->statusCenterManager()->preferredContentWidth();\n    ui->typingWidget->setFixedWidth(contentWidth);\n    ui->pointingWidget->setFixedWidth(contentWidth);\n\n    connect(&d->settings, &tSettings::settingChanged, this, &AccessibilitySettingsPane::updateSetting);\n    for (QString setting : {\n            \"Accessibility/stickykeys.active\",\n            \"Accessibility/mousekeys.active\"\n        }) {\n        updateSetting(setting, d->settings.value(setting));\n    }\n}\n\nAccessibilitySettingsPane::~AccessibilitySettingsPane() {\n    delete d;\n    delete ui;\n}\n\nQString AccessibilitySettingsPane::name() {\n    return \"AccessibilitySettings\";\n}\n\nQString AccessibilitySettingsPane::displayName() {\n    return tr(\"Accessibility\");\n}\n\nQIcon AccessibilitySettingsPane::icon() {\n    return QIcon::fromTheme(\"preferences-desktop-accessibility\");\n}\n\nQWidget* AccessibilitySettingsPane::leftPane() {\n    return nullptr;\n}\n\nvoid AccessibilitySettingsPane::on_titleLabel_backButtonClicked() {\n    StateManager::statusCenterManager()->showStatusCenterHamburgerMenu();\n}\n\nvoid AccessibilitySettingsPane::on_stickyKeysSwitch_toggled(bool checked) {\n    d->settings.setValue(\"Accessibility/stickykeys.active\", checked);\n}\n\nvoid AccessibilitySettingsPane::updateSetting(QString key, QVariant value) {\n    if (key == \"Accessibility/stickykeys.active\") {\n        ui->stickyKeysSwitch->setChecked(value.toBool());\n    } else if (key == \"Accessibility/mousekeys.active\") {\n        ui->mouseKeysSwitch->setChecked(value.toBool());\n    }\n}\n\nvoid AccessibilitySettingsPane::on_mouseKeysSwitch_toggled(bool checked) {\n    d->settings.setValue(\"Accessibility/mousekeys.active\", checked);\n}\n\n\nvoid AccessibilitySettingsPane::changeEvent(QEvent* event) {\n    if (event->type() == QEvent::LanguageChange) {\n        ui->retranslateUi(this);\n        emit displayNameChanged();\n    }\n}\n"
  },
  {
    "path": "plugins/AccessibilityPlugin/settings/accessibilitysettingspane.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef ACCESSIBILITYSETTINGSPANE_H\n#define ACCESSIBILITYSETTINGSPANE_H\n\n#include <statuscenterpane.h>\n\nnamespace Ui {\n    class AccessibilitySettingsPane;\n}\n\nstruct AccessibilitySettingsPanePrivate;\nclass AccessibilitySettingsPane : public StatusCenterPane {\n        Q_OBJECT\n\n    public:\n        explicit AccessibilitySettingsPane();\n        ~AccessibilitySettingsPane();\n\n    private slots:\n        void on_titleLabel_backButtonClicked();\n        void on_stickyKeysSwitch_toggled(bool checked);\n\n        void on_mouseKeysSwitch_toggled(bool checked);\n\n    private:\n        Ui::AccessibilitySettingsPane* ui;\n        AccessibilitySettingsPanePrivate* d;\n\n        void updateSetting(QString key, QVariant value);\n\n        // StatusCenterPane interface\n    public:\n        QString name();\n        QString displayName();\n        QIcon icon();\n        QWidget* leftPane();\n\n        // QWidget interface\n    protected:\n        void changeEvent(QEvent* event);\n};\n\n#endif // ACCESSIBILITYSETTINGSPANE_H\n"
  },
  {
    "path": "plugins/AccessibilityPlugin/settings/accessibilitysettingspane.ui",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ui version=\"4.0\">\n <class>AccessibilitySettingsPane</class>\n <widget class=\"QWidget\" name=\"AccessibilitySettingsPane\">\n  <property name=\"geometry\">\n   <rect>\n    <x>0</x>\n    <y>0</y>\n    <width>781</width>\n    <height>323</height>\n   </rect>\n  </property>\n  <property name=\"windowTitle\">\n   <string notr=\"true\">Form</string>\n  </property>\n  <layout class=\"QVBoxLayout\" name=\"verticalLayout\">\n   <property name=\"spacing\">\n    <number>0</number>\n   </property>\n   <property name=\"leftMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"topMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"rightMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"bottomMargin\">\n    <number>0</number>\n   </property>\n   <item>\n    <widget class=\"tTitleLabel\" name=\"titleLabel\">\n     <property name=\"text\">\n      <string>Accessibility</string>\n     </property>\n    </widget>\n   </item>\n   <item>\n    <widget class=\"QScrollArea\" name=\"scrollArea\">\n     <property name=\"frameShape\">\n      <enum>QFrame::NoFrame</enum>\n     </property>\n     <property name=\"widgetResizable\">\n      <bool>true</bool>\n     </property>\n     <widget class=\"QWidget\" name=\"scrollAreaWidgetContents\">\n      <property name=\"geometry\">\n       <rect>\n        <x>0</x>\n        <y>0</y>\n        <width>781</width>\n        <height>306</height>\n       </rect>\n      </property>\n      <layout class=\"QVBoxLayout\" name=\"verticalLayout_2\">\n       <property name=\"spacing\">\n        <number>0</number>\n       </property>\n       <property name=\"leftMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"topMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"rightMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"bottomMargin\">\n        <number>0</number>\n       </property>\n       <item alignment=\"Qt::AlignHCenter\">\n        <widget class=\"QWidget\" name=\"typingWidget\" native=\"true\">\n         <layout class=\"QGridLayout\" name=\"gridLayout\">\n          <item row=\"1\" column=\"0\">\n           <widget class=\"QLabel\" name=\"label_2\">\n            <property name=\"sizePolicy\">\n             <sizepolicy hsizetype=\"Expanding\" vsizetype=\"Preferred\">\n              <horstretch>0</horstretch>\n              <verstretch>0</verstretch>\n             </sizepolicy>\n            </property>\n            <property name=\"text\">\n             <string>Sticky Keys</string>\n            </property>\n           </widget>\n          </item>\n          <item row=\"1\" column=\"1\">\n           <widget class=\"tSwitch\" name=\"stickyKeysSwitch\">\n            <property name=\"text\">\n             <string notr=\"true\">StickyKeysSwitch</string>\n            </property>\n           </widget>\n          </item>\n          <item row=\"0\" column=\"0\" colspan=\"2\">\n           <widget class=\"QLabel\" name=\"label\">\n            <property name=\"font\">\n             <font>\n              <weight>75</weight>\n              <bold>true</bold>\n             </font>\n            </property>\n            <property name=\"text\">\n             <string>TYPING</string>\n            </property>\n           </widget>\n          </item>\n          <item row=\"2\" column=\"0\" colspan=\"2\">\n           <widget class=\"QLabel\" name=\"label_3\">\n            <property name=\"enabled\">\n             <bool>false</bool>\n            </property>\n            <property name=\"text\">\n             <string>Allows you to press modifier keys sequentially</string>\n            </property>\n            <property name=\"wordWrap\">\n             <bool>true</bool>\n            </property>\n           </widget>\n          </item>\n         </layout>\n        </widget>\n       </item>\n       <item>\n        <widget class=\"Line\" name=\"line\">\n         <property name=\"maximumSize\">\n          <size>\n           <width>16777215</width>\n           <height>1</height>\n          </size>\n         </property>\n         <property name=\"orientation\">\n          <enum>Qt::Horizontal</enum>\n         </property>\n        </widget>\n       </item>\n       <item alignment=\"Qt::AlignHCenter\">\n        <widget class=\"QWidget\" name=\"pointingWidget\" native=\"true\">\n         <layout class=\"QGridLayout\" name=\"gridLayout_2\">\n          <item row=\"0\" column=\"0\" colspan=\"2\">\n           <widget class=\"QLabel\" name=\"label_4\">\n            <property name=\"font\">\n             <font>\n              <weight>75</weight>\n              <bold>true</bold>\n             </font>\n            </property>\n            <property name=\"text\">\n             <string>POINTING</string>\n            </property>\n           </widget>\n          </item>\n          <item row=\"1\" column=\"1\">\n           <widget class=\"tSwitch\" name=\"mouseKeysSwitch\">\n            <property name=\"text\">\n             <string notr=\"true\">MouseKeysSwitch</string>\n            </property>\n           </widget>\n          </item>\n          <item row=\"1\" column=\"0\">\n           <widget class=\"QLabel\" name=\"label_5\">\n            <property name=\"text\">\n             <string>Mouse Keys</string>\n            </property>\n           </widget>\n          </item>\n          <item row=\"2\" column=\"0\" colspan=\"2\">\n           <widget class=\"QLabel\" name=\"label_6\">\n            <property name=\"enabled\">\n             <bool>false</bool>\n            </property>\n            <property name=\"text\">\n             <string>Allows you to move the cursor using the number pad</string>\n            </property>\n            <property name=\"wordWrap\">\n             <bool>true</bool>\n            </property>\n           </widget>\n          </item>\n         </layout>\n        </widget>\n       </item>\n       <item>\n        <spacer name=\"verticalSpacer\">\n         <property name=\"orientation\">\n          <enum>Qt::Vertical</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>20</width>\n           <height>101</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n      </layout>\n     </widget>\n    </widget>\n   </item>\n  </layout>\n </widget>\n <customwidgets>\n  <customwidget>\n   <class>tTitleLabel</class>\n   <extends>QLabel</extends>\n   <header location=\"global\">ttitlelabel.h</header>\n   <slots>\n    <signal>backButtonClicked()</signal>\n   </slots>\n  </customwidget>\n  <customwidget>\n   <class>tSwitch</class>\n   <extends>QPushButton</extends>\n   <header location=\"global\">tswitch.h</header>\n  </customwidget>\n </customwidgets>\n <resources/>\n <connections/>\n</ui>\n"
  },
  {
    "path": "plugins/AccessibilityPlugin/thedesk-accessibility.conf",
    "content": "[Accessibility]\nstickykeys.active=false\nmousekeys.active=false\n"
  },
  {
    "path": "plugins/AccessibilityPlugin/translations/ar_SA.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"ar_SA\" sourcelanguage=\"en_US\">\n<context>\n    <name>AccessibilitySettingsPane</name>\n    <message>\n        <location filename=\"../settings/accessibilitysettingspane.ui\" line=\"35\"/>\n        <location filename=\"../settings/accessibilitysettingspane.cpp\" line=\"66\"/>\n        <source>Accessibility</source>\n        <translation>سهولة الأستخدام</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/accessibilitysettingspane.ui\" line=\"84\"/>\n        <source>Sticky Keys</source>\n        <translation>مفاتيح الملتصقه</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/accessibilitysettingspane.ui\" line=\"104\"/>\n        <source>TYPING</source>\n        <translation>الكابه</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/accessibilitysettingspane.ui\" line=\"114\"/>\n        <source>Allows you to press modifier keys sequentially</source>\n        <translation>يسمح لك بالضغط مفاتيح التعديل وره بعد</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/accessibilitysettingspane.ui\" line=\"149\"/>\n        <source>POINTING</source>\n        <translation>تحدد إلى</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/accessibilitysettingspane.ui\" line=\"163\"/>\n        <source>Mouse Keys</source>\n        <translation>مفاتيح الماوس</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/accessibilitysettingspane.ui\" line=\"173\"/>\n        <source>Allows you to move the cursor using the number pad</source>\n        <translation>يسمح لك بتحريك المؤشر باستخدام لوحة الأرقام</translation>\n    </message>\n</context>\n<context>\n    <name>StickyKeysChunk</name>\n    <message>\n        <location filename=\"../chunks/stickykeyschunk.cpp\" line=\"58\"/>\n        <source>Disable Sticky Keys</source>\n        <translation>ايقاف المفاتيح الملتصقه</translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/AccessibilityPlugin/translations/au_AU.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"au_AU\" sourcelanguage=\"en_US\">\n<context>\n    <name>AccessibilitySettingsPane</name>\n    <message>\n        <location filename=\"../settings/accessibilitysettingspane.ui\" line=\"35\"/>\n        <location filename=\"../settings/accessibilitysettingspane.cpp\" line=\"66\"/>\n        <source>Accessibility</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/accessibilitysettingspane.ui\" line=\"84\"/>\n        <source>Sticky Keys</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/accessibilitysettingspane.ui\" line=\"104\"/>\n        <source>TYPING</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/accessibilitysettingspane.ui\" line=\"114\"/>\n        <source>Allows you to press modifier keys sequentially</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/accessibilitysettingspane.ui\" line=\"149\"/>\n        <source>POINTING</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/accessibilitysettingspane.ui\" line=\"163\"/>\n        <source>Mouse Keys</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/accessibilitysettingspane.ui\" line=\"173\"/>\n        <source>Allows you to move the cursor using the number pad</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>StickyKeysChunk</name>\n    <message>\n        <location filename=\"../chunks/stickykeyschunk.cpp\" line=\"58\"/>\n        <source>Disable Sticky Keys</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/AccessibilityPlugin/translations/cy.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"cy\" sourcelanguage=\"en_US\">\n<context>\n    <name>AccessibilitySettingsPane</name>\n    <message>\n        <location filename=\"../settings/accessibilitysettingspane.ui\" line=\"35\"/>\n        <location filename=\"../settings/accessibilitysettingspane.cpp\" line=\"66\"/>\n        <source>Accessibility</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/accessibilitysettingspane.ui\" line=\"84\"/>\n        <source>Sticky Keys</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/accessibilitysettingspane.ui\" line=\"104\"/>\n        <source>TYPING</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/accessibilitysettingspane.ui\" line=\"114\"/>\n        <source>Allows you to press modifier keys sequentially</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/accessibilitysettingspane.ui\" line=\"149\"/>\n        <source>POINTING</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/accessibilitysettingspane.ui\" line=\"163\"/>\n        <source>Mouse Keys</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/accessibilitysettingspane.ui\" line=\"173\"/>\n        <source>Allows you to move the cursor using the number pad</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>StickyKeysChunk</name>\n    <message>\n        <location filename=\"../chunks/stickykeyschunk.cpp\" line=\"58\"/>\n        <source>Disable Sticky Keys</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/AccessibilityPlugin/translations/da.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"da\" sourcelanguage=\"en_US\">\n<context>\n    <name>AccessibilitySettingsPane</name>\n    <message>\n        <location filename=\"../settings/accessibilitysettingspane.ui\" line=\"35\"/>\n        <location filename=\"../settings/accessibilitysettingspane.cpp\" line=\"66\"/>\n        <source>Accessibility</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/accessibilitysettingspane.ui\" line=\"84\"/>\n        <source>Sticky Keys</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/accessibilitysettingspane.ui\" line=\"104\"/>\n        <source>TYPING</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/accessibilitysettingspane.ui\" line=\"114\"/>\n        <source>Allows you to press modifier keys sequentially</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/accessibilitysettingspane.ui\" line=\"149\"/>\n        <source>POINTING</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/accessibilitysettingspane.ui\" line=\"163\"/>\n        <source>Mouse Keys</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/accessibilitysettingspane.ui\" line=\"173\"/>\n        <source>Allows you to move the cursor using the number pad</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>StickyKeysChunk</name>\n    <message>\n        <location filename=\"../chunks/stickykeyschunk.cpp\" line=\"58\"/>\n        <source>Disable Sticky Keys</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/AccessibilityPlugin/translations/de.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"de\" sourcelanguage=\"en_US\">\n<context>\n    <name>AccessibilitySettingsPane</name>\n    <message>\n        <location filename=\"../settings/accessibilitysettingspane.ui\" line=\"35\"/>\n        <location filename=\"../settings/accessibilitysettingspane.cpp\" line=\"66\"/>\n        <source>Accessibility</source>\n        <translation>Barrrierefreiheit</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/accessibilitysettingspane.ui\" line=\"84\"/>\n        <source>Sticky Keys</source>\n        <translation>Sticky Keys</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/accessibilitysettingspane.ui\" line=\"104\"/>\n        <source>TYPING</source>\n        <translation>TIPPEN</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/accessibilitysettingspane.ui\" line=\"114\"/>\n        <source>Allows you to press modifier keys sequentially</source>\n        <translation>Lässt dich mehrere Modifikatortasten hintereinander drücken</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/accessibilitysettingspane.ui\" line=\"149\"/>\n        <source>POINTING</source>\n        <translation type=\"unfinished\">MAUSZEIGER</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/accessibilitysettingspane.ui\" line=\"163\"/>\n        <source>Mouse Keys</source>\n        <translation>Mouse Keys</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/accessibilitysettingspane.ui\" line=\"173\"/>\n        <source>Allows you to move the cursor using the number pad</source>\n        <translation>Lässt dich den Mauscursor mit dem Ziffernblock steuern</translation>\n    </message>\n</context>\n<context>\n    <name>StickyKeysChunk</name>\n    <message>\n        <location filename=\"../chunks/stickykeyschunk.cpp\" line=\"58\"/>\n        <source>Disable Sticky Keys</source>\n        <translation>Sticky Keys deaktivieren</translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/AccessibilityPlugin/translations/en_US.qm",
    "content": "<d\u0018!\u001c`"
  },
  {
    "path": "plugins/AccessibilityPlugin/translations/en_US.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" sourcelanguage=\"en_US\">\n<context>\n    <name>AccessibilitySettingsPane</name>\n    <message>\n        <location filename=\"../settings/accessibilitysettingspane.ui\" line=\"35\"/>\n        <location filename=\"../settings/accessibilitysettingspane.cpp\" line=\"66\"/>\n        <source>Accessibility</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/accessibilitysettingspane.ui\" line=\"84\"/>\n        <source>Sticky Keys</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/accessibilitysettingspane.ui\" line=\"104\"/>\n        <source>TYPING</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/accessibilitysettingspane.ui\" line=\"114\"/>\n        <source>Allows you to press modifier keys sequentially</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/accessibilitysettingspane.ui\" line=\"149\"/>\n        <source>POINTING</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/accessibilitysettingspane.ui\" line=\"163\"/>\n        <source>Mouse Keys</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/accessibilitysettingspane.ui\" line=\"173\"/>\n        <source>Allows you to move the cursor using the number pad</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>StickyKeysChunk</name>\n    <message>\n        <location filename=\"../chunks/stickykeyschunk.cpp\" line=\"58\"/>\n        <source>Disable Sticky Keys</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/AccessibilityPlugin/translations/es.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"es\" sourcelanguage=\"en_US\">\n<context>\n    <name>AccessibilitySettingsPane</name>\n    <message>\n        <location filename=\"../settings/accessibilitysettingspane.ui\" line=\"35\"/>\n        <location filename=\"../settings/accessibilitysettingspane.cpp\" line=\"66\"/>\n        <source>Accessibility</source>\n        <translation>Accesibilidad</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/accessibilitysettingspane.ui\" line=\"84\"/>\n        <source>Sticky Keys</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/accessibilitysettingspane.ui\" line=\"104\"/>\n        <source>TYPING</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/accessibilitysettingspane.ui\" line=\"114\"/>\n        <source>Allows you to press modifier keys sequentially</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/accessibilitysettingspane.ui\" line=\"149\"/>\n        <source>POINTING</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/accessibilitysettingspane.ui\" line=\"163\"/>\n        <source>Mouse Keys</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/accessibilitysettingspane.ui\" line=\"173\"/>\n        <source>Allows you to move the cursor using the number pad</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>StickyKeysChunk</name>\n    <message>\n        <location filename=\"../chunks/stickykeyschunk.cpp\" line=\"58\"/>\n        <source>Disable Sticky Keys</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/AccessibilityPlugin/translations/es_VE.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"es_VE\" sourcelanguage=\"en_US\">\n<context>\n    <name>AccessibilitySettingsPane</name>\n    <message>\n        <location filename=\"../settings/accessibilitysettingspane.ui\" line=\"35\"/>\n        <location filename=\"../settings/accessibilitysettingspane.cpp\" line=\"66\"/>\n        <source>Accessibility</source>\n        <translation>Accesibilidad</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/accessibilitysettingspane.ui\" line=\"84\"/>\n        <source>Sticky Keys</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/accessibilitysettingspane.ui\" line=\"104\"/>\n        <source>TYPING</source>\n        <translation>teclando</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/accessibilitysettingspane.ui\" line=\"114\"/>\n        <source>Allows you to press modifier keys sequentially</source>\n        <translation type=\"unfinished\">The permite presar las teclas modificadoras de la forma secuencial</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/accessibilitysettingspane.ui\" line=\"149\"/>\n        <source>POINTING</source>\n        <translation>apuntar</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/accessibilitysettingspane.ui\" line=\"163\"/>\n        <source>Mouse Keys</source>\n        <translation>teclas del mouse</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/accessibilitysettingspane.ui\" line=\"173\"/>\n        <source>Allows you to move the cursor using the number pad</source>\n        <translation type=\"unfinished\">De deja mover su el cursor con el teclado numérico</translation>\n    </message>\n</context>\n<context>\n    <name>StickyKeysChunk</name>\n    <message>\n        <location filename=\"../chunks/stickykeyschunk.cpp\" line=\"58\"/>\n        <source>Disable Sticky Keys</source>\n        <translation>Deshabilitar las Teclas Adhesivas</translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/AccessibilityPlugin/translations/id.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"id\" sourcelanguage=\"en_US\">\n<context>\n    <name>AccessibilitySettingsPane</name>\n    <message>\n        <location filename=\"../settings/accessibilitysettingspane.ui\" line=\"35\"/>\n        <location filename=\"../settings/accessibilitysettingspane.cpp\" line=\"66\"/>\n        <source>Accessibility</source>\n        <translation>Aksesibilitas</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/accessibilitysettingspane.ui\" line=\"84\"/>\n        <source>Sticky Keys</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/accessibilitysettingspane.ui\" line=\"104\"/>\n        <source>TYPING</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/accessibilitysettingspane.ui\" line=\"114\"/>\n        <source>Allows you to press modifier keys sequentially</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/accessibilitysettingspane.ui\" line=\"149\"/>\n        <source>POINTING</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/accessibilitysettingspane.ui\" line=\"163\"/>\n        <source>Mouse Keys</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/accessibilitysettingspane.ui\" line=\"173\"/>\n        <source>Allows you to move the cursor using the number pad</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>StickyKeysChunk</name>\n    <message>\n        <location filename=\"../chunks/stickykeyschunk.cpp\" line=\"58\"/>\n        <source>Disable Sticky Keys</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/AccessibilityPlugin/translations/ja.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"ja\" sourcelanguage=\"en_US\">\n<context>\n    <name>AccessibilitySettingsPane</name>\n    <message>\n        <location filename=\"../settings/accessibilitysettingspane.ui\" line=\"35\"/>\n        <location filename=\"../settings/accessibilitysettingspane.cpp\" line=\"66\"/>\n        <source>Accessibility</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/accessibilitysettingspane.ui\" line=\"84\"/>\n        <source>Sticky Keys</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/accessibilitysettingspane.ui\" line=\"104\"/>\n        <source>TYPING</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/accessibilitysettingspane.ui\" line=\"114\"/>\n        <source>Allows you to press modifier keys sequentially</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/accessibilitysettingspane.ui\" line=\"149\"/>\n        <source>POINTING</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/accessibilitysettingspane.ui\" line=\"163\"/>\n        <source>Mouse Keys</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/accessibilitysettingspane.ui\" line=\"173\"/>\n        <source>Allows you to move the cursor using the number pad</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>StickyKeysChunk</name>\n    <message>\n        <location filename=\"../chunks/stickykeyschunk.cpp\" line=\"58\"/>\n        <source>Disable Sticky Keys</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/AccessibilityPlugin/translations/nl.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"nl\" sourcelanguage=\"en_US\">\n<context>\n    <name>AccessibilitySettingsPane</name>\n    <message>\n        <location filename=\"../settings/accessibilitysettingspane.ui\" line=\"35\"/>\n        <location filename=\"../settings/accessibilitysettingspane.cpp\" line=\"66\"/>\n        <source>Accessibility</source>\n        <translation>Toegankelijkheid</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/accessibilitysettingspane.ui\" line=\"84\"/>\n        <source>Sticky Keys</source>\n        <translation>Plaktoetsen</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/accessibilitysettingspane.ui\" line=\"104\"/>\n        <source>TYPING</source>\n        <translation>TYPEN</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/accessibilitysettingspane.ui\" line=\"114\"/>\n        <source>Allows you to press modifier keys sequentially</source>\n        <translation>Laat je speciale toetsen achter elkaar indrukken</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/accessibilitysettingspane.ui\" line=\"149\"/>\n        <source>POINTING</source>\n        <translation>AANWIJZEN</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/accessibilitysettingspane.ui\" line=\"163\"/>\n        <source>Mouse Keys</source>\n        <translation>Muistoetsen</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/accessibilitysettingspane.ui\" line=\"173\"/>\n        <source>Allows you to move the cursor using the number pad</source>\n        <translation>Laat je de cursor bewegen met het nummerieke toetsenbord</translation>\n    </message>\n</context>\n<context>\n    <name>StickyKeysChunk</name>\n    <message>\n        <location filename=\"../chunks/stickykeyschunk.cpp\" line=\"58\"/>\n        <source>Disable Sticky Keys</source>\n        <translation>Plaktoetsen Uitschakelen</translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/AccessibilityPlugin/translations/pt_BR.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"pt_BR\" sourcelanguage=\"en_US\">\n<context>\n    <name>AccessibilitySettingsPane</name>\n    <message>\n        <location filename=\"../settings/accessibilitysettingspane.ui\" line=\"35\"/>\n        <location filename=\"../settings/accessibilitysettingspane.cpp\" line=\"66\"/>\n        <source>Accessibility</source>\n        <translation>Acessibilidade</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/accessibilitysettingspane.ui\" line=\"84\"/>\n        <source>Sticky Keys</source>\n        <translation>Teclas aderentes</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/accessibilitysettingspane.ui\" line=\"104\"/>\n        <source>TYPING</source>\n        <translation>TECLADO</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/accessibilitysettingspane.ui\" line=\"114\"/>\n        <source>Allows you to press modifier keys sequentially</source>\n        <translation>Permite apertar teclas modificadores em sequência</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/accessibilitysettingspane.ui\" line=\"149\"/>\n        <source>POINTING</source>\n        <translation>MOUSE</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/accessibilitysettingspane.ui\" line=\"163\"/>\n        <source>Mouse Keys</source>\n        <translation>Teclas do mouse</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/accessibilitysettingspane.ui\" line=\"173\"/>\n        <source>Allows you to move the cursor using the number pad</source>\n        <translation>Permite mover o cursor do mouse usando o teclado numérico</translation>\n    </message>\n</context>\n<context>\n    <name>StickyKeysChunk</name>\n    <message>\n        <location filename=\"../chunks/stickykeyschunk.cpp\" line=\"58\"/>\n        <source>Disable Sticky Keys</source>\n        <translation>Desativar teclas aderentes</translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/AccessibilityPlugin/translations/ro.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"ro\" sourcelanguage=\"en_US\">\n<context>\n    <name>AccessibilitySettingsPane</name>\n    <message>\n        <location filename=\"../settings/accessibilitysettingspane.ui\" line=\"35\"/>\n        <location filename=\"../settings/accessibilitysettingspane.cpp\" line=\"66\"/>\n        <source>Accessibility</source>\n        <translation>Accesibilitate</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/accessibilitysettingspane.ui\" line=\"84\"/>\n        <source>Sticky Keys</source>\n        <translation>Taste persistente</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/accessibilitysettingspane.ui\" line=\"104\"/>\n        <source>TYPING</source>\n        <translation>TASTARE</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/accessibilitysettingspane.ui\" line=\"114\"/>\n        <source>Allows you to press modifier keys sequentially</source>\n        <translation>Vă permite să apăsați secvențial tastele modificator</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/accessibilitysettingspane.ui\" line=\"149\"/>\n        <source>POINTING</source>\n        <translation>INDICARE</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/accessibilitysettingspane.ui\" line=\"163\"/>\n        <source>Mouse Keys</source>\n        <translation>Mouse din tastatură</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/accessibilitysettingspane.ui\" line=\"173\"/>\n        <source>Allows you to move the cursor using the number pad</source>\n        <translation>Vă permite să mutați cursorul cu ajutorul tastaturii numerice</translation>\n    </message>\n</context>\n<context>\n    <name>StickyKeysChunk</name>\n    <message>\n        <location filename=\"../chunks/stickykeyschunk.cpp\" line=\"58\"/>\n        <source>Disable Sticky Keys</source>\n        <translation>Dezactivați tastele persistente</translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/AccessibilityPlugin/translations/sv.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"sv\" sourcelanguage=\"en_US\">\n<context>\n    <name>AccessibilitySettingsPane</name>\n    <message>\n        <location filename=\"../settings/accessibilitysettingspane.ui\" line=\"35\"/>\n        <location filename=\"../settings/accessibilitysettingspane.cpp\" line=\"66\"/>\n        <source>Accessibility</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/accessibilitysettingspane.ui\" line=\"84\"/>\n        <source>Sticky Keys</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/accessibilitysettingspane.ui\" line=\"104\"/>\n        <source>TYPING</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/accessibilitysettingspane.ui\" line=\"114\"/>\n        <source>Allows you to press modifier keys sequentially</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/accessibilitysettingspane.ui\" line=\"149\"/>\n        <source>POINTING</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/accessibilitysettingspane.ui\" line=\"163\"/>\n        <source>Mouse Keys</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/accessibilitysettingspane.ui\" line=\"173\"/>\n        <source>Allows you to move the cursor using the number pad</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>StickyKeysChunk</name>\n    <message>\n        <location filename=\"../chunks/stickykeyschunk.cpp\" line=\"58\"/>\n        <source>Disable Sticky Keys</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/AccessibilityPlugin/translations/tr.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"tr\" sourcelanguage=\"en_US\">\n<context>\n    <name>AccessibilitySettingsPane</name>\n    <message>\n        <location filename=\"../settings/accessibilitysettingspane.ui\" line=\"35\"/>\n        <location filename=\"../settings/accessibilitysettingspane.cpp\" line=\"66\"/>\n        <source>Accessibility</source>\n        <translation>Ulaşılabilirlik</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/accessibilitysettingspane.ui\" line=\"84\"/>\n        <source>Sticky Keys</source>\n        <translation>Yapışkan Tuşlar</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/accessibilitysettingspane.ui\" line=\"104\"/>\n        <source>TYPING</source>\n        <translation>YAZIYOR</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/accessibilitysettingspane.ui\" line=\"114\"/>\n        <source>Allows you to press modifier keys sequentially</source>\n        <translation>Değiştirici tuşlara sırayla basmanıza izin verir</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/accessibilitysettingspane.ui\" line=\"149\"/>\n        <source>POINTING</source>\n        <translation>PUANLAMA</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/accessibilitysettingspane.ui\" line=\"163\"/>\n        <source>Mouse Keys</source>\n        <translation>Mouse Tuşları</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/accessibilitysettingspane.ui\" line=\"173\"/>\n        <source>Allows you to move the cursor using the number pad</source>\n        <translation>Sayısal tuş takımını kullanarak imleci hareket ettirmenize izin verir</translation>\n    </message>\n</context>\n<context>\n    <name>StickyKeysChunk</name>\n    <message>\n        <location filename=\"../chunks/stickykeyschunk.cpp\" line=\"58\"/>\n        <source>Disable Sticky Keys</source>\n        <translation>Yapışkan Tuşları Devre Dışı Bırak</translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/AccessibilityPlugin/translations/vi.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"vi\" sourcelanguage=\"en_US\">\n<context>\n    <name>AccessibilitySettingsPane</name>\n    <message>\n        <location filename=\"../settings/accessibilitysettingspane.ui\" line=\"35\"/>\n        <location filename=\"../settings/accessibilitysettingspane.cpp\" line=\"66\"/>\n        <source>Accessibility</source>\n        <translation>Trở nặng</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/accessibilitysettingspane.ui\" line=\"84\"/>\n        <source>Sticky Keys</source>\n        <translation>Phím dính</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/accessibilitysettingspane.ui\" line=\"104\"/>\n        <source>TYPING</source>\n        <translation>ĐÁNH MÁY</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/accessibilitysettingspane.ui\" line=\"114\"/>\n        <source>Allows you to press modifier keys sequentially</source>\n        <translation>Cho bạn nhấn các phím bổ trợ liên tiếp</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/accessibilitysettingspane.ui\" line=\"149\"/>\n        <source>POINTING</source>\n        <translation>CHỈ TRỎ</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/accessibilitysettingspane.ui\" line=\"163\"/>\n        <source>Mouse Keys</source>\n        <translation>Phím chuột</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/accessibilitysettingspane.ui\" line=\"173\"/>\n        <source>Allows you to move the cursor using the number pad</source>\n        <translation>Cho bạn di chuyển chuột sử dụng bàn phím số</translation>\n    </message>\n</context>\n<context>\n    <name>StickyKeysChunk</name>\n    <message>\n        <location filename=\"../chunks/stickykeyschunk.cpp\" line=\"58\"/>\n        <source>Disable Sticky Keys</source>\n        <translation>Tắt phím dính</translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/AccessibilityPlugin/translations/vi_VN.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"vi_VN\">\n<context>\n    <name>AccessibilitySettingsPane</name>\n    <message>\n        <location filename=\"../settings/accessibilitysettingspane.ui\" line=\"35\"/>\n        <location filename=\"../settings/accessibilitysettingspane.cpp\" line=\"66\"/>\n        <source>Accessibility</source>\n        <translation>Khả năng</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/accessibilitysettingspane.ui\" line=\"84\"/>\n        <source>Sticky Keys</source>\n        <translation>Phím dính</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/accessibilitysettingspane.ui\" line=\"104\"/>\n        <source>TYPING</source>\n        <translation>ĐÁNH MÁY</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/accessibilitysettingspane.ui\" line=\"114\"/>\n        <source>Allows you to press modifier keys sequentially</source>\n        <translation>Cho phép bạn nhấn các phím bổ trợ liên tục thay vì song song</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/accessibilitysettingspane.ui\" line=\"149\"/>\n        <source>POINTING</source>\n        <translation>CHỈ TRỎ</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/accessibilitysettingspane.ui\" line=\"163\"/>\n        <source>Mouse Keys</source>\n        <translation>Phím chuột</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/accessibilitysettingspane.ui\" line=\"173\"/>\n        <source>Allows you to move the cursor using the number pad</source>\n        <translation>Cho phép bạn di chuyển con trỏ bằng bàn phím số</translation>\n    </message>\n</context>\n<context>\n    <name>StickyKeysChunk</name>\n    <message>\n        <location filename=\"../chunks/stickykeyschunk.cpp\" line=\"58\"/>\n        <source>Disable Sticky Keys</source>\n        <translation>Tất phím dính</translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/AudioPlugin/AudioPlugin.pro",
    "content": "QT += gui widgets\n\nTEMPLATE = lib\nCONFIG += plugin\n\nCONFIG += c++11\n\n# Include the-libs build tools\ninclude(/usr/share/the-libs/pri/gentranslations.pri)\n\nLIBS += -lKF5PulseAudioQt\nINCLUDEPATH += /usr/include/KF5/KF5PulseAudioQt/PulseAudioQt\n\n# The following define makes your compiler emit warnings if you use\n# any Qt feature that has been marked deprecated (the exact warnings\n# depend on your compiler). Please consult the documentation of the\n# deprecated API in order to know how to port your code away from it.\nDEFINES += QT_DEPRECATED_WARNINGS\n\n# You can also make your code fail to compile if it uses deprecated APIs.\n# In order to do so, uncomment the following line.\n# You can also select to disable deprecated APIs only up to a certain version of Qt.\n#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0\n\nSOURCES += \\\n    audiochunk.cpp \\\n    audioquickwidget.cpp \\\n    common.cpp \\\n    eventhandler.cpp \\\n    micchunk.cpp \\\n    plugin.cpp \\\n    quickwidgetsink.cpp \\\n    quickwidgetsinkinput.cpp\n\nHEADERS += \\\n    audiochunk.h \\\n    audioquickwidget.h \\\n    common.h \\\n    eventhandler.h \\\n    micchunk.h \\\n    plugin.h \\\n    quickwidgetsink.h \\\n    quickwidgetsinkinput.h\n\nDISTFILES += \\\n    Plugin.json \\\n    defaults.conf\n\nunix {\n    translations.files = translations/*.qm\n    translations.path = /usr/share/thedesk/AudioPlugin/translations\n\n    defaults.files = defaults.conf\n    defaults.path = /etc/theSuite/theDesk/AudioPlugin/\n\n    INSTALLS += translations defaults\n}\n\ninclude(../plugins.pri)\n\nFORMS += \\\n    audioquickwidget.ui \\\n    quickwidgetsink.ui \\\n    quickwidgetsinkinput.ui\n"
  },
  {
    "path": "plugins/AudioPlugin/CMakeLists.txt",
    "content": "cmake_minimum_required(VERSION 3.4.0)\n\nfind_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets)\nfind_package(libcontemporary)\nfind_package(KF${KF_VERSION_MAJOR}PulseAudioQt REQUIRED)\n\nset(SOURCES\n    audiochunk.cpp\n    audioquickwidget.cpp\n    common.cpp\n    eventhandler.cpp\n    micchunk.cpp\n    plugin.cpp\n    quickwidgetsink.cpp\n    quickwidgetsinkinput.cpp\n)\n\nset(HEADERS\n    audiochunk.h\n    audioquickwidget.h\n    common.h\n    eventhandler.h\n    micchunk.h\n    plugin.h\n    quickwidgetsink.h\n    quickwidgetsinkinput.h\n)\n\nset(PLUGIN_NAME pulseaudio)\nadd_plugin_td(${PLUGIN_NAME})\ntarget_sources(plugin-${PLUGIN_NAME} PRIVATE ${SOURCES} ${HEADERS})\ncntp_defaults_file(${PLUGIN_NAME}\n    DEFAULTS_FILE thedesk-audio.conf)\n\ntarget_link_libraries(plugin-${PLUGIN_NAME} Qt${QT_VERSION_MAJOR}::Widgets KF${KF_VERSION_MAJOR}::PulseAudioQt libcontemporary libthedesk)\n"
  },
  {
    "path": "plugins/AudioPlugin/Plugin.json",
    "content": "{\n    \"name\": \"Audio Management\",\n    \"icon\": \"preferences-desktop-audio\",\n    \"uuid\": \"6a978f09-c3f4-4843-b32f-4e377ed6cd0f\",\n    \"vi\": {\n        \"name\": \"Quản lý âm thanh\"\n    }\n}\n"
  },
  {
    "path": "plugins/AudioPlugin/audiochunk.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2021 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"audiochunk.h\"\n\n#include <statemanager.h>\n#include <quietmodemanager.h>\n#include <QIcon>\n#include \"audioquickwidget.h\"\n\nstruct AudioChunkPrivate {\n    AudioQuickWidget* qw = new AudioQuickWidget();\n};\n\nAudioChunk::AudioChunk() : IconTextChunk(\"audio\") {\n    d = new AudioChunkPrivate();\n\n    connect(StateManager::quietModeManager(), &QuietModeManagerTd::quietModeChanged, this, &AudioChunk::updateData);\n    updateData();\n\n    d->qw = new AudioQuickWidget();\n    this->setQuickWidget(d->qw);\n}\n\nAudioChunk::~AudioChunk() {\n    d->qw->deleteLater();\n    delete d;\n}\n\nvoid AudioChunk::updateData() {\n    this->setIcon(QIcon::fromTheme(QuietModeManagerTd::icon(StateManager::quietModeManager()->currentMode())));\n    this->setText(QuietModeManagerTd::name(StateManager::quietModeManager()->currentMode()));\n}\n"
  },
  {
    "path": "plugins/AudioPlugin/audiochunk.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2021 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef AUDIOCHUNK_H\n#define AUDIOCHUNK_H\n\n#include <icontextchunk.h>\n\nstruct AudioChunkPrivate;\nclass AudioChunk : public IconTextChunk {\n        Q_OBJECT\n    public:\n        explicit AudioChunk();\n        ~AudioChunk();\n\n    signals:\n\n    private:\n        AudioChunkPrivate* d;\n\n        void updateData();\n};\n\n#endif // AUDIOCHUNK_H\n"
  },
  {
    "path": "plugins/AudioPlugin/audioquickwidget.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2021 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"audioquickwidget.h\"\n#include \"ui_audioquickwidget.h\"\n\n#include <QPushButton>\n#include <QScreen>\n#include <quietmodemanager.h>\n#include <statemanager.h>\n\n#include \"quickwidgetsink.h\"\n#include \"quickwidgetsinkinput.h\"\n#include <PulseAudioQt/Context>\n\nstruct AudioQuickWidgetPrivate {\n        QScreen* primaryScreen = nullptr;\n\n        QMap<PulseAudioQt::Sink*, QuickWidgetSink*> sinkWidgets;\n        QMap<PulseAudioQt::SinkInput*, QuickWidgetSinkInput*> sinkInputWidgets;\n};\n\nAudioQuickWidget::AudioQuickWidget(QWidget* parent) :\n    QWidget(parent),\n    ui(new Ui::AudioQuickWidget) {\n    ui->setupUi(this);\n    d = new AudioQuickWidgetPrivate();\n\n    connect(PulseAudioQt::Context::instance(), &PulseAudioQt::Context::sinkAdded, this, &AudioQuickWidget::sinkAdded);\n    connect(PulseAudioQt::Context::instance(), &PulseAudioQt::Context::sinkRemoved, this, &AudioQuickWidget::sinkRemoved);\n    connect(PulseAudioQt::Context::instance(), &PulseAudioQt::Context::sinkInputAdded, this, &AudioQuickWidget::sinkInputAdded);\n    connect(PulseAudioQt::Context::instance(), &PulseAudioQt::Context::sinkInputRemoved, this, &AudioQuickWidget::sinkInputRemoved);\n\n    for (PulseAudioQt::Sink* sink : PulseAudioQt::Context::instance()->sinks()) sinkAdded(sink);\n    for (PulseAudioQt::SinkInput* sinkInput : PulseAudioQt::Context::instance()->sinkInputs()) sinkInputAdded(sinkInput);\n    ui->sinkInputsWidget->setVisible(false);\n\n    for (QuietModeManagerTd::QuietMode mode : StateManager::quietModeManager()->availableQuietModes()) {\n        QuietModeManagerTd::QuietMode m = mode;\n        QPushButton* button = new QPushButton(this);\n        button->setText(StateManager::quietModeManager()->name(m));\n        button->setIcon(QIcon::fromTheme(StateManager::quietModeManager()->icon(m)));\n        button->setCheckable(true);\n        button->setAutoExclusive(true);\n        button->setChecked(StateManager::quietModeManager()->currentMode() == m);\n        connect(button, &QPushButton::toggled, this, [=](bool checked) {\n            if (checked) {\n                StateManager::quietModeManager()->setQuietMode(m);\n            }\n        });\n        connect(StateManager::quietModeManager(), &QuietModeManagerTd::quietModeChanged, this, [=](QuietModeManagerTd::QuietMode newMode, QuietModeManagerTd::QuietMode oldMode) {\n            Q_UNUSED(oldMode);\n            button->setChecked(newMode == m);\n        });\n        ui->quietModesLayout->addWidget(button);\n    }\n\n    connect(qApp, &QApplication::primaryScreenChanged, this, &AudioQuickWidget::updatePrimaryScreen);\n    updatePrimaryScreen();\n}\n\nAudioQuickWidget::~AudioQuickWidget() {\n    delete ui;\n    delete d;\n}\n\nQSize AudioQuickWidget::sizeHint() const {\n    QSize sizeHint = ui->scrollAreaWidgetContents->sizeHint();\n    if (sizeHint.height() > this->maximumHeight()) sizeHint.setHeight(this->maximumHeight());\n    return sizeHint;\n}\n\nvoid AudioQuickWidget::sinkAdded(PulseAudioQt::Sink* sink) {\n    QuickWidgetSink* sinkWidget = new QuickWidgetSink(sink);\n    sinkWidget->installEventFilter(this);\n    ui->sinksLayout->addWidget(sinkWidget);\n    d->sinkWidgets.insert(sink, sinkWidget);\n}\n\nvoid AudioQuickWidget::sinkRemoved(PulseAudioQt::Sink* sink) {\n    QuickWidgetSink* sinkWidget = d->sinkWidgets.take(sink);\n    ui->sinksLayout->removeWidget(sinkWidget);\n    sinkWidget->setVisible(false);\n    sinkWidget->deleteLater();\n}\n\nvoid AudioQuickWidget::sinkInputAdded(PulseAudioQt::SinkInput* sinkInput) {\n    QuickWidgetSinkInput* sinkInputWidget = new QuickWidgetSinkInput(sinkInput);\n    sinkInputWidget->installEventFilter(this);\n    ui->sinkInputsLayout->addWidget(sinkInputWidget);\n    d->sinkInputWidgets.insert(sinkInput, sinkInputWidget);\n    ui->sinkInputsWidget->setVisible(true);\n}\n\nvoid AudioQuickWidget::sinkInputRemoved(PulseAudioQt::SinkInput* sinkInput) {\n    QuickWidgetSinkInput* sinkInputWidget = d->sinkInputWidgets.take(sinkInput);\n    ui->sinksLayout->removeWidget(sinkInputWidget);\n    sinkInputWidget->setVisible(false);\n    sinkInputWidget->deleteLater();\n\n    if (d->sinkInputWidgets.isEmpty()) ui->sinkInputsWidget->setVisible(false);\n}\n\nbool AudioQuickWidget::eventFilter(QObject* watched, QEvent* event) {\n    if (event->type() == QEvent::Show || event->type() == QEvent::Hide) {\n        this->updateGeometry();\n\n        QEvent* event = new QEvent(QEvent::LayoutRequest);\n        qApp->postEvent(this, event);\n    }\n    return false;\n}\n\nvoid AudioQuickWidget::updatePrimaryScreen() {\n    if (d->primaryScreen) d->primaryScreen->disconnect(this);\n    d->primaryScreen = qApp->primaryScreen();\n    connect(d->primaryScreen, &QScreen::geometryChanged, this, &AudioQuickWidget::updateMaxHeight);\n    updateMaxHeight();\n}\n\nvoid AudioQuickWidget::updateMaxHeight() {\n    this->setMaximumHeight(d->primaryScreen->geometry().height() * 0.7);\n}\n"
  },
  {
    "path": "plugins/AudioPlugin/audioquickwidget.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2021 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef AUDIOQUICKWIDGET_H\n#define AUDIOQUICKWIDGET_H\n\n#include <PulseAudioQt/Sink>\n#include <PulseAudioQt/SinkInput>\n#include <QWidget>\n\nnamespace Ui {\n    class AudioQuickWidget;\n}\n\nstruct AudioQuickWidgetPrivate;\nclass AudioQuickWidget : public QWidget {\n        Q_OBJECT\n\n    public:\n        explicit AudioQuickWidget(QWidget* parent = nullptr);\n        ~AudioQuickWidget();\n\n        QSize sizeHint() const;\n\n        void sinkAdded(PulseAudioQt::Sink* sink);\n        void sinkRemoved(PulseAudioQt::Sink* sink);\n\n        void sinkInputAdded(PulseAudioQt::SinkInput* sinkInput);\n        void sinkInputRemoved(PulseAudioQt::SinkInput* sinkInput);\n\n    private:\n        Ui::AudioQuickWidget* ui;\n        AudioQuickWidgetPrivate* d;\n\n        bool eventFilter(QObject* watched, QEvent* event);\n\n        void updatePrimaryScreen();\n        void updateMaxHeight();\n};\n\n#endif // AUDIOQUICKWIDGET_H\n"
  },
  {
    "path": "plugins/AudioPlugin/audioquickwidget.ui",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ui version=\"4.0\">\n <class>AudioQuickWidget</class>\n <widget class=\"QWidget\" name=\"AudioQuickWidget\">\n  <property name=\"geometry\">\n   <rect>\n    <x>0</x>\n    <y>0</y>\n    <width>366</width>\n    <height>238</height>\n   </rect>\n  </property>\n  <property name=\"windowTitle\">\n   <string notr=\"true\">Form</string>\n  </property>\n  <layout class=\"QVBoxLayout\" name=\"verticalLayout\">\n   <property name=\"spacing\">\n    <number>0</number>\n   </property>\n   <property name=\"leftMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"topMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"rightMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"bottomMargin\">\n    <number>0</number>\n   </property>\n   <item>\n    <widget class=\"QScrollArea\" name=\"scrollArea\">\n     <property name=\"frameShape\">\n      <enum>QFrame::NoFrame</enum>\n     </property>\n     <property name=\"widgetResizable\">\n      <bool>true</bool>\n     </property>\n     <widget class=\"QWidget\" name=\"scrollAreaWidgetContents\">\n      <property name=\"geometry\">\n       <rect>\n        <x>0</x>\n        <y>0</y>\n        <width>366</width>\n        <height>238</height>\n       </rect>\n      </property>\n      <layout class=\"QVBoxLayout\" name=\"verticalLayout_3\">\n       <item>\n        <widget class=\"QLabel\" name=\"label\">\n         <property name=\"font\">\n          <font>\n           <weight>75</weight>\n           <bold>true</bold>\n          </font>\n         </property>\n         <property name=\"text\">\n          <string>VOLUME</string>\n         </property>\n        </widget>\n       </item>\n       <item>\n        <layout class=\"QVBoxLayout\" name=\"sinksLayout\"/>\n       </item>\n       <item>\n        <widget class=\"QWidget\" name=\"sinkInputsWidget\" native=\"true\">\n         <layout class=\"QVBoxLayout\" name=\"verticalLayout_2\">\n          <property name=\"leftMargin\">\n           <number>0</number>\n          </property>\n          <property name=\"topMargin\">\n           <number>0</number>\n          </property>\n          <property name=\"rightMargin\">\n           <number>0</number>\n          </property>\n          <property name=\"bottomMargin\">\n           <number>0</number>\n          </property>\n          <item>\n           <widget class=\"QLabel\" name=\"label_3\">\n            <property name=\"font\">\n             <font>\n              <weight>75</weight>\n              <bold>true</bold>\n             </font>\n            </property>\n            <property name=\"text\">\n             <string>APPLICATIONS</string>\n            </property>\n           </widget>\n          </item>\n          <item>\n           <layout class=\"QVBoxLayout\" name=\"sinkInputsLayout\"/>\n          </item>\n         </layout>\n        </widget>\n       </item>\n       <item>\n        <widget class=\"QLabel\" name=\"label_2\">\n         <property name=\"font\">\n          <font>\n           <weight>75</weight>\n           <bold>true</bold>\n          </font>\n         </property>\n         <property name=\"text\">\n          <string>QUIET MODE</string>\n         </property>\n        </widget>\n       </item>\n       <item>\n        <layout class=\"QHBoxLayout\" name=\"quietModesLayout\">\n         <property name=\"spacing\">\n          <number>0</number>\n         </property>\n        </layout>\n       </item>\n      </layout>\n     </widget>\n    </widget>\n   </item>\n  </layout>\n </widget>\n <resources/>\n <connections/>\n</ui>\n"
  },
  {
    "path": "plugins/AudioPlugin/common.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"common.h\"\n\n#include <PulseAudioQt/Port>\n#include <QVariantMap>\n\nCommon::DevicePort Common::portForSink(PulseAudioQt::Sink* sink) {\n    QVariantMap properties = sink->properties();\n    QString api = properties.value(\"device.api\").toString();\n    if (api == QStringLiteral(\"bluez\")) {\n        return Bluetooth;\n    } else {\n        if (sink->ports().count() <= sink->activePortIndex()) return Unknown;\n\n        PulseAudioQt::Port* port = sink->ports().at(sink->activePortIndex());\n        if (port->availability() == PulseAudioQt::Port::Unavailable) {\n            // Weird thing? Use a workaround here\n            QList<PulseAudioQt::Port*> availablePorts;\n            for (PulseAudioQt::Port* port : sink->ports()) {\n                if (port->availability() != PulseAudioQt::Port::Unavailable) availablePorts.append(port);\n            }\n\n            if (availablePorts.count() == 1) {\n                port = availablePorts.first();\n            } else {\n                port = nullptr;\n            }\n        }\n\n        if (port != nullptr) {\n            QString newPort;\n            if (port->name().contains(\"headphones\", Qt::CaseInsensitive)) {\n                return Headphones;\n            } else if (port->name().contains(\"speaker\", Qt::CaseInsensitive)) {\n                return Speakers;\n            } else if (port->name().contains(\"lineout\", Qt::CaseInsensitive)) {\n                return LineOut;\n            }\n        }\n        return Unknown;\n    }\n}\n\nQString Common::nameForSink(PulseAudioQt::Sink* sink) {\n    QVariantMap properties = sink->properties();\n    QString api = properties.value(\"device.api\").toString();\n    if (api == QStringLiteral(\"alsa\")) {\n        return properties.value(\"device.product.name\", properties.value(\"node.nick\")).toString();\n    } else if (api == QStringLiteral(\"bluez\")) {\n        return properties.value(\"bluez.alias\").toString();\n    } else {\n        return sink->description();\n    }\n}\n"
  },
  {
    "path": "plugins/AudioPlugin/common.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef COMMON_H\n#define COMMON_H\n\n#include <PulseAudioQt/Sink>\n\nnamespace Common {\n    enum DevicePort {\n        Speakers,\n        Headphones,\n        LineOut,\n        Bluetooth,\n        Unknown\n    };\n\n    DevicePort portForSink(PulseAudioQt::Sink* sink);\n    QString nameForSink(PulseAudioQt::Sink* sink);\n} // namespace Common\n\n#endif // COMMON_H\n"
  },
  {
    "path": "plugins/AudioPlugin/eventhandler.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"eventhandler.h\"\n\n#include \"common.h\"\n#include <QKeySequence>\n#include <hudmanager.h>\n#include <keygrab.h>\n#include <quietmodemanager.h>\n#include <statemanager.h>\n\n#include <PulseAudioQt/Context>\n#include <PulseAudioQt/Server>\n#include <QIcon>\n\nstruct EventHandlerPrivate {\n        KeyGrab* volumeUp;\n        KeyGrab* volumeDown;\n        KeyGrab* volumeMute;\n\n        PulseAudioQt::Sink* defaultSink = nullptr;\n        bool firstSink = true;\n\n        quint32 oldActivePortIndex;\n};\n\nEventHandler::EventHandler(QObject* parent) :\n    QObject(parent) {\n    d = new EventHandlerPrivate();\n\n    connect(PulseAudioQt::Context::instance()->server(), &PulseAudioQt::Server::defaultSinkChanged, this, &EventHandler::defaultSinkChanged);\n    defaultSinkChanged(PulseAudioQt::Context::instance()->server()->defaultSink());\n\n    d->volumeUp = new KeyGrab(QKeySequence(Qt::Key_VolumeUp), \"volumeUp\");\n    d->volumeDown = new KeyGrab(QKeySequence(Qt::Key_VolumeDown), \"volumeDown\");\n    d->volumeMute = new KeyGrab(QKeySequence(Qt::Key_VolumeMute), \"volumeMute\");\n    connect(d->volumeUp, &KeyGrab::activated, this, [=] {\n        this->adjustVolume(5);\n    });\n    connect(d->volumeDown, &KeyGrab::activated, this, [=] {\n        this->adjustVolume(-5);\n    });\n    connect(d->volumeMute, &KeyGrab::activated, this, [=] {\n        QuietModeManagerTd::QuietMode newMode = StateManager::quietModeManager()->nextQuietMode();\n        StateManager::quietModeManager()->setQuietMode(newMode);\n\n        StateManager::instance()->hudManager()->showHud({\n            {\"icon\",  StateManager::quietModeManager()->icon(newMode)       },\n            {\"title\", StateManager::quietModeManager()->name(newMode)       },\n            {\"text\",  StateManager::quietModeManager()->description(newMode)}\n        });\n    });\n\n    connect(StateManager::quietModeManager(), &QuietModeManagerTd::quietModeChanged, this, &EventHandler::quietModeChanged);\n    quietModeChanged();\n}\n\nEventHandler::~EventHandler() {\n    d->volumeUp->deleteLater();\n    d->volumeDown->deleteLater();\n    d->volumeMute->deleteLater();\n    delete d;\n}\n\nvoid EventHandler::adjustVolume(int percentageChange) {\n    if (StateManager::quietModeManager()->currentMode() == QuietModeManagerTd::Mute) {\n        showHud(nullptr);\n        return;\n    }\n\n    // Get the default sink and find the widget for this sink\n    PulseAudioQt::Sink* sink = PulseAudioQt::Context::instance()->server()->defaultSink();\n    if (!sink) {\n        StateManager::instance()->hudManager()->showHud({\n            {\"icon\",  \"audio-volume-muted\"  },\n            {\"title\", tr(\"No Audio Devices\")}\n        });\n        return;\n    }\n\n    qint64 factor = PulseAudioQt::normalVolume();\n    qint64 newVolume = sink->volume() + (factor / 100) * percentageChange;\n    if (newVolume < PulseAudioQt::minimumVolume()) newVolume = PulseAudioQt::minimumVolume();\n\n    sink->setVolume(newVolume);\n    showHud(sink, newVolume);\n}\n\nvoid EventHandler::defaultSinkChanged(PulseAudioQt::Sink* defaultSink) {\n    if (d->defaultSink == defaultSink) return;\n\n    if (d->defaultSink) {\n        d->defaultSink->disconnect(this);\n    }\n    d->defaultSink = defaultSink;\n    if (defaultSink) {\n        connect(defaultSink, &PulseAudioQt::Sink::activePortIndexChanged, this, [=] {\n            if (d->oldActivePortIndex != defaultSink->activePortIndex()) {\n                d->oldActivePortIndex = defaultSink->activePortIndex();\n                showHud(defaultSink);\n            }\n        });\n        d->oldActivePortIndex = defaultSink->activePortIndex();\n\n        if (d->firstSink) {\n            d->firstSink = false;\n        } else {\n            showHud(defaultSink);\n        }\n    }\n}\n\nvoid EventHandler::showHud(PulseAudioQt::Sink* sink, qint64 volume) {\n    if (StateManager::quietModeManager()->currentMode() == QuietModeManagerTd::Mute) {\n        StateManager::instance()->hudManager()->showHud({\n            {\"icon\",  StateManager::quietModeManager()->icon(QuietModeManagerTd::Mute)},\n            {\"title\", tr(\"Mute\")                                                      },\n            {\"text\",  tr(\"Unmute Quiet Mode before changing the volume\")              }\n        });\n        return;\n    }\n\n    double displayVolume;\n    if (volume == -1) {\n        displayVolume = sink->volume() / static_cast<double>(PulseAudioQt::normalVolume());\n    } else {\n        displayVolume = volume / static_cast<double>(PulseAudioQt::normalVolume());\n    }\n    QVariantMap hudData;\n    hudData.insert(\"value\", displayVolume);\n    switch (Common::portForSink(sink)) {\n        case Common::Speakers:\n            hudData.insert(\"icon\", \"audio-volume-high\");\n            hudData.insert(\"title\", tr(\"Speakers\"));\n            break;\n        case Common::Headphones:\n            hudData.insert(\"icon\", \"audio-headphones\");\n            hudData.insert(\"title\", tr(\"Headphones\"));\n            break;\n        case Common::LineOut:\n            hudData.insert(\"icon\", \"audio-lineout\");\n            hudData.insert(\"title\", tr(\"Line Out\"));\n            break;\n        case Common::Bluetooth:\n            hudData.insert(\"icon\", \"bluetooth\");\n            hudData.insert(\"title\", Common::nameForSink(sink));\n            break;\n        case Common::Unknown:\n            hudData.insert(\"icon\", \"audio-volume-high\");\n            hudData.insert(\"title\", tr(\"Volume\"));\n            break;\n    }\n\n    StateManager::instance()->hudManager()->showHud(hudData);\n}\n\nvoid EventHandler::quietModeChanged() {\n    QuietModeManagerTd::QuietMode mode = StateManager::quietModeManager()->currentMode();\n    QVector<PulseAudioQt::Sink*> sinks = PulseAudioQt::Context::instance()->sinks();\n    for (PulseAudioQt::Sink* sink : sinks) {\n        sink->setMuted(mode == QuietModeManagerTd::Mute);\n    }\n}\n"
  },
  {
    "path": "plugins/AudioPlugin/eventhandler.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef KEYHANDLER_H\n#define KEYHANDLER_H\n\n#include <QObject>\n\nnamespace PulseAudioQt {\n    class Sink;\n}\n\nstruct EventHandlerPrivate;\nclass EventHandler : public QObject {\n        Q_OBJECT\n    public:\n        explicit EventHandler(QObject* parent = nullptr);\n        ~EventHandler();\n\n    signals:\n\n    private:\n        EventHandlerPrivate* d;\n\n        void adjustVolume(int percentageChange);\n        void defaultSinkChanged(PulseAudioQt::Sink* defaultSink);\n        void showHud(PulseAudioQt::Sink* sink, qint64 volume = -1);\n        void quietModeChanged();\n};\n\n#endif // KEYHANDLER_H\n"
  },
  {
    "path": "plugins/AudioPlugin/micchunk.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2021 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"micchunk.h\"\n\n#include <PulseAudioQt/Context>\n#include <PulseAudioQt/SourceOutput>\n#include <QIcon>\n#include <barmanager.h>\n#include <libcontemporary_global.h>\n#include <statemanager.h>\n\nMicChunk::MicChunk() :\n    IconTextChunk(\"audio-mic\") {\n    connect(PulseAudioQt::Context::instance(), &PulseAudioQt::Context::sourceOutputAdded, this, &MicChunk::sourceOutputAdded);\n    connect(PulseAudioQt::Context::instance(), &PulseAudioQt::Context::sourceOutputRemoved, this, &MicChunk::updateSourceOutputs);\n    for (PulseAudioQt::SourceOutput* output : PulseAudioQt::Context::instance()->sourceOutputs()) sourceOutputAdded(output);\n    updateSourceOutputs();\n}\n\nvoid MicChunk::sourceOutputAdded(PulseAudioQt::SourceOutput* sourceOutput) {\n    connect(sourceOutput, &PulseAudioQt::SourceOutput::clientChanged, this, &MicChunk::updateSourceOutputs);\n    connect(sourceOutput, &PulseAudioQt::SourceOutput::mutedChanged, this, &MicChunk::updateSourceOutputs);\n    connect(sourceOutput, &PulseAudioQt::SourceOutput::propertiesChanged, this, &MicChunk::updateSourceOutputs);\n    updateSourceOutputs();\n}\n\nvoid MicChunk::updateSourceOutputs() {\n    bool micMuted = true;\n    QStringList micClients;\n    for (PulseAudioQt::SourceOutput* output : PulseAudioQt::Context::instance()->sourceOutputs()) {\n        if (!output->isMuted()) micMuted = false;\n\n        micClients.append(output->properties().value(\"application.name\").toString());\n        //        if (output->client()) {\n        //            micClients.append(output->client()->name());\n        //        } else {\n        //            micClients.append(this->fontMetrics().elidedText(output->name(), Qt::ElideRight, SC_DPI(100)));\n        //        }\n    }\n\n    micClients.removeDuplicates();\n\n    if (micClients.isEmpty()) {\n        if (StateManager::barManager()->isChunkRegistered(this)) StateManager::barManager()->removeChunk(this);\n    } else {\n        this->setIcon(QIcon::fromTheme(micMuted ? \"mic-off\" : \"mic-on\"));\n        if (micClients.count() == 1) {\n            this->setText(micClients.first());\n        } else {\n            this->setText(tr(\"%n applications\", nullptr, micClients.count()));\n        }\n        if (!StateManager::barManager()->isChunkRegistered(this)) StateManager::barManager()->addChunk(this);\n    }\n}\n"
  },
  {
    "path": "plugins/AudioPlugin/micchunk.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2021 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef MICCHUNK_H\n#define MICCHUNK_H\n\n#include <PulseAudioQt/SourceOutput>\n#include <icontextchunk.h>\n\nclass MicChunk : public IconTextChunk {\n        Q_OBJECT\n    public:\n        explicit MicChunk();\n\n    signals:\n\n    private:\n        void sourceOutputAdded(PulseAudioQt::SourceOutput* sourceOutput);\n\n        void updateSourceOutputs();\n};\n\n#endif // MICCHUNK_H\n"
  },
  {
    "path": "plugins/AudioPlugin/plugin.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"plugin.h\"\n\n#include \"audiochunk.h\"\n#include \"eventhandler.h\"\n#include \"micchunk.h\"\n#include <QApplication>\n#include <QDebug>\n#include <QDir>\n#include <barmanager.h>\n#include <localemanager.h>\n#include <statemanager.h>\n#include <statuscentermanager.h>\n#include <tapplication.h>\n#include <tsettings.h>\n\nstruct PluginPrivate {\n        EventHandler* keyHandler;\n        AudioChunk* chunk;\n        MicChunk* micChunk;\n};\n\nPlugin::Plugin() {\n    d = new PluginPrivate();\n}\n\nPlugin::~Plugin() {\n    delete d;\n}\n\nvoid Plugin::activate() {\n    tApplication::addPluginTranslator(CNTP_TARGET_NAME);\n\n    tSettings::registerDefaults(QDir::cleanPath(qApp->applicationDirPath() + \"/../plugins/AudioPlugin/thedesk-audio.conf\"));\n    tSettings::registerDefaults(\"/usr/share/defaults/thedesk-audio.conf\");\n\n    d->keyHandler = new EventHandler();\n\n    d->chunk = new AudioChunk();\n    StateManager::barManager()->addChunk(d->chunk);\n\n    d->micChunk = new MicChunk();\n}\n\nvoid Plugin::deactivate() {\n    d->micChunk->deleteLater();\n    StateManager::barManager()->removeChunk(d->chunk);\n    d->chunk->deleteLater();\n    d->keyHandler->deleteLater();\n    tApplication::removePluginTranslator(CNTP_TARGET_NAME);\n}\n"
  },
  {
    "path": "plugins/AudioPlugin/plugin.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef PLUGIN_H\n#define PLUGIN_H\n\n#include \"plugins/plugininterface.h\"\n\nstruct PluginPrivate;\nclass Plugin : public QObject,\n               public PluginInterface {\n        Q_OBJECT\n        Q_PLUGIN_METADATA(IID PluginInterface_iid FILE \"Plugin.json\")\n        Q_INTERFACES(PluginInterface)\n\n    public:\n        Plugin();\n        ~Plugin();\n\n    private:\n        PluginPrivate* d;\n\n        // PluginInterface interface\n    public:\n        void activate();\n        void deactivate();\n};\n\n#endif // PLUGIN_H\n"
  },
  {
    "path": "plugins/AudioPlugin/quickwidgetsink.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2021 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"quickwidgetsink.h\"\n#include \"ui_quickwidgetsink.h\"\n\n#include \"common.h\"\n#include <PulseAudioQt/Context>\n#include <PulseAudioQt/Server>\n#include <QMenu>\n#include <QTimer>\n#include <libcontemporary_global.h>\n\nstruct QuickWidgetSinkPrivate {\n        PulseAudioQt::Sink* sink;\n        bool changingVolume = false;\n\n        QMenu* menu;\n};\n\nQuickWidgetSink::QuickWidgetSink(PulseAudioQt::Sink* sink, QWidget* parent) :\n    QWidget(parent),\n    ui(new Ui::QuickWidgetSink) {\n    ui->setupUi(this);\n    d = new QuickWidgetSinkPrivate();\n    d->sink = sink;\n\n    connect(PulseAudioQt::Context::instance()->server(), &PulseAudioQt::Server::defaultSinkChanged, this, &QuickWidgetSink::updateDefault, Qt::QueuedConnection);\n    updateDefault();\n\n    connect(sink, &PulseAudioQt::Sink::volumeChanged, this, &QuickWidgetSink::updateVolume);\n    connect(sink, &PulseAudioQt::Sink::propertiesChanged, this, &QuickWidgetSink::updateName);\n    updateVolume();\n    updateName();\n\n    connect(PulseAudioQt::Context::instance(), &PulseAudioQt::Context::sinkInputAdded, this, &QuickWidgetSink::sinkInputAdded);\n    connect(PulseAudioQt::Context::instance(), &PulseAudioQt::Context::sinkInputRemoved, this, &QuickWidgetSink::updateVisibility);\n    for (PulseAudioQt::SinkInput* sinkInput : PulseAudioQt::Context::instance()->sinkInputs()) sinkInputAdded(sinkInput);\n    updateVisibility();\n\n    this->setFixedWidth(SC_DPI(600));\n    ui->nameLabel->setFixedWidth(SC_DPI(200));\n\n    d->menu = new QMenu();\n    d->menu->addAction(ui->actionMake_Default);\n    d->menu->addAction(ui->actionMove_All_Applications);\n    ui->menuButton->setMenu(d->menu);\n}\n\nQuickWidgetSink::~QuickWidgetSink() {\n    delete d;\n    delete ui;\n}\n\nvoid QuickWidgetSink::updateVolume() {\n    if (d->changingVolume) return;\n    int volume = d->sink->volume() / static_cast<double>(PulseAudioQt::normalVolume()) * 100;\n    QSignalBlocker blocker(ui->volumeSlider);\n    ui->volumeSlider->setValue(volume);\n}\n\nvoid QuickWidgetSink::updateDefault() {\n    ui->actionMake_Default->setVisible(PulseAudioQt::Context::instance()->server()->defaultSink() != d->sink);\n    updateVisibility();\n}\n\nvoid QuickWidgetSink::on_volumeSlider_sliderPressed() {\n    d->changingVolume = true;\n}\n\nvoid QuickWidgetSink::on_volumeSlider_sliderReleased() {\n    d->changingVolume = false;\n}\n\nvoid QuickWidgetSink::sinkInputAdded(PulseAudioQt::SinkInput* sinkInput) {\n    connect(sinkInput, &PulseAudioQt::SinkInput::deviceIndexChanged, this, &QuickWidgetSink::updateVisibility);\n    updateVisibility();\n}\n\nvoid QuickWidgetSink::updateVisibility() {\n    QTimer::singleShot(0, this, [this] {\n        if (PulseAudioQt::Context::instance()->server()->defaultSink() == d->sink) {\n            this->setVisible(true);\n            return;\n        }\n\n        for (PulseAudioQt::SinkInput* sinkInput : PulseAudioQt::Context::instance()->sinkInputs()) {\n            if (sinkInput->deviceIndex() == d->sink->index()) {\n                this->setVisible(true);\n                return;\n            }\n        }\n\n        this->setVisible(false);\n    });\n}\n\nvoid QuickWidgetSink::updateName() {\n    ui->nameLabel->setText(this->fontMetrics().elidedText(Common::nameForSink(d->sink), Qt::ElideRight, SC_DPI(200)));\n}\n\nvoid QuickWidgetSink::on_volumeSlider_valueChanged(int value) {\n    qint64 factor = PulseAudioQt::normalVolume() / 100;\n    qint64 newVolume = value * factor;\n    d->sink->setVolume(newVolume);\n}\n\nvoid QuickWidgetSink::on_actionMake_Default_triggered() {\n    PulseAudioQt::Context::instance()->server()->setDefaultSink(d->sink);\n}\n\nvoid QuickWidgetSink::on_actionMove_All_Applications_triggered() {\n    for (PulseAudioQt::SinkInput* sinkInput : PulseAudioQt::Context::instance()->sinkInputs()) {\n        sinkInput->setDeviceIndex(d->sink->index());\n    }\n}\n"
  },
  {
    "path": "plugins/AudioPlugin/quickwidgetsink.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2021 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef QUICKWIDGETSINK_H\n#define QUICKWIDGETSINK_H\n\n#include <PulseAudioQt/Sink>\n#include <PulseAudioQt/SinkInput>\n#include <QWidget>\n\nnamespace Ui {\n    class QuickWidgetSink;\n}\n\nstruct QuickWidgetSinkPrivate;\nclass QuickWidgetSink : public QWidget {\n        Q_OBJECT\n\n    public:\n        explicit QuickWidgetSink(PulseAudioQt::Sink* sink, QWidget* parent = nullptr);\n        ~QuickWidgetSink();\n\n    private slots:\n        void on_volumeSlider_sliderPressed();\n\n        void on_volumeSlider_sliderReleased();\n\n        void on_volumeSlider_valueChanged(int value);\n\n        void on_actionMake_Default_triggered();\n\n        void on_actionMove_All_Applications_triggered();\n\n    private:\n        Ui::QuickWidgetSink* ui;\n        QuickWidgetSinkPrivate* d;\n\n        void sinkInputAdded(PulseAudioQt::SinkInput* sinkInput);\n        void updateVisibility();\n        void updateName();\n        void updateVolume();\n        void updateDefault();\n};\n\n#endif // QUICKWIDGETSINK_H\n"
  },
  {
    "path": "plugins/AudioPlugin/quickwidgetsink.ui",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ui version=\"4.0\">\n <class>QuickWidgetSink</class>\n <widget class=\"QWidget\" name=\"QuickWidgetSink\">\n  <property name=\"geometry\">\n   <rect>\n    <x>0</x>\n    <y>0</y>\n    <width>400</width>\n    <height>35</height>\n   </rect>\n  </property>\n  <property name=\"windowTitle\">\n   <string notr=\"true\">Form</string>\n  </property>\n  <layout class=\"QHBoxLayout\" name=\"horizontalLayout\">\n   <property name=\"leftMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"topMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"rightMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"bottomMargin\">\n    <number>0</number>\n   </property>\n   <item>\n    <widget class=\"QLabel\" name=\"nameLabel\">\n     <property name=\"text\">\n      <string notr=\"true\">TextLabel</string>\n     </property>\n    </widget>\n   </item>\n   <item>\n    <widget class=\"QSlider\" name=\"volumeSlider\">\n     <property name=\"orientation\">\n      <enum>Qt::Horizontal</enum>\n     </property>\n    </widget>\n   </item>\n   <item>\n    <widget class=\"QToolButton\" name=\"menuButton\">\n     <property name=\"sizePolicy\">\n      <sizepolicy hsizetype=\"Preferred\" vsizetype=\"Preferred\">\n       <horstretch>0</horstretch>\n       <verstretch>0</verstretch>\n      </sizepolicy>\n     </property>\n     <property name=\"text\">\n      <string notr=\"true\"/>\n     </property>\n     <property name=\"icon\">\n      <iconset theme=\"application-menu\"/>\n     </property>\n     <property name=\"popupMode\">\n      <enum>QToolButton::InstantPopup</enum>\n     </property>\n    </widget>\n   </item>\n  </layout>\n  <action name=\"actionMake_Default\">\n   <property name=\"icon\">\n    <iconset theme=\"default\"/>\n   </property>\n   <property name=\"text\">\n    <string>Make Default</string>\n   </property>\n  </action>\n  <action name=\"actionMove_All_Applications\">\n   <property name=\"icon\">\n    <iconset theme=\"edit-select-all\"/>\n   </property>\n   <property name=\"text\">\n    <string>Use for All Applications</string>\n   </property>\n  </action>\n </widget>\n <resources/>\n <connections/>\n</ui>\n"
  },
  {
    "path": "plugins/AudioPlugin/quickwidgetsinkinput.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2021 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"quickwidgetsinkinput.h\"\n#include \"ui_quickwidgetsinkinput.h\"\n\n#include \"common.h\"\n#include <PulseAudioQt/Context>\n#include <QActionGroup>\n#include <QMenu>\n#include <QPointer>\n#include <libcontemporary_global.h>\n\nstruct QuickWidgetSinkInputPrivate {\n        bool changingVolume = false;\n        PulseAudioQt::SinkInput* sinkInput;\n\n        QString pid;\n        static QMultiMap<QString, QuickWidgetSinkInput*> sinkInputsByPid;\n\n        QMenu* menu;\n        QMenu* devicesMenu;\n        QMap<PulseAudioQt::Sink*, QAction*> sinkActions;\n        QActionGroup* devicesGroup;\n};\n\nQMultiMap<QString, QuickWidgetSinkInput*> QuickWidgetSinkInputPrivate::sinkInputsByPid = QMultiMap<QString, QuickWidgetSinkInput*>();\n\nQuickWidgetSinkInput::QuickWidgetSinkInput(PulseAudioQt::SinkInput* sinkInput, QWidget* parent) :\n    QWidget(parent),\n    ui(new Ui::QuickWidgetSinkInput) {\n    ui->setupUi(this);\n    d = new QuickWidgetSinkInputPrivate();\n    d->sinkInput = sinkInput;\n\n    connect(sinkInput, &PulseAudioQt::SinkInput::nameChanged, this, &QuickWidgetSinkInput::updateClient);\n    connect(sinkInput, &PulseAudioQt::SinkInput::clientChanged, this, &QuickWidgetSinkInput::updateClient);\n    connect(sinkInput, &PulseAudioQt::SinkInput::volumeChanged, this, &QuickWidgetSinkInput::updateVolume);\n    connect(sinkInput, &PulseAudioQt::SinkInput::propertiesChanged, this, &QuickWidgetSinkInput::updateProperties);\n    updateClient();\n    updateVolume();\n    updateProperties();\n\n    d->devicesGroup = new QActionGroup(this);\n    d->devicesGroup->setExclusive(true);\n\n    d->devicesMenu = new QMenu();\n    d->devicesMenu->setTitle(tr(\"Play on\"));\n    d->devicesMenu->setIcon(QIcon::fromTheme(\"audio-headphones\"));\n\n    d->menu = new QMenu();\n    d->menu->addMenu(d->devicesMenu);\n    ui->menuButton->setMenu(d->menu);\n\n    connect(PulseAudioQt::Context::instance(), &PulseAudioQt::Context::sinkAdded, this, &QuickWidgetSinkInput::sinkAdded);\n    connect(PulseAudioQt::Context::instance(), &PulseAudioQt::Context::sinkRemoved, this, &QuickWidgetSinkInput::sinkRemoved);\n    for (PulseAudioQt::Sink* sink : PulseAudioQt::Context::instance()->sinks()) sinkAdded(sink);\n\n    this->setFixedWidth(SC_DPI(600));\n    ui->nameLabel->setFixedWidth(SC_DPI(200));\n}\n\nQuickWidgetSinkInput::~QuickWidgetSinkInput() {\n    d->sinkInputsByPid.remove(d->pid, this);\n    for (QuickWidgetSinkInput* sinkInputWidget : d->sinkInputsByPid.values(d->pid)) sinkInputWidget->updateVisibility();\n    delete ui;\n}\n\nvoid QuickWidgetSinkInput::updateVolume() {\n    if (d->changingVolume) return;\n    int volume = d->sinkInput->volume() / static_cast<double>(PulseAudioQt::normalVolume()) * 100;\n    QSignalBlocker blocker(ui->volumeSlider);\n    ui->volumeSlider->setValue(volume);\n}\n\nvoid QuickWidgetSinkInput::updateClient() {\n    QString name = d->sinkInput->properties().value(\"application.name\", d->sinkInput->name()).toString();\n    //    if (d->sinkInput->client()) {\n    //        name = d->sinkInput->client()->name();\n    //    } else {\n    //        name = d->sinkInput->name();\n    //    }\n    ui->nameLabel->setText(this->fontMetrics().elidedText(name, Qt::ElideRight, SC_DPI(200)));\n}\n\nvoid QuickWidgetSinkInput::updateProperties() {\n    d->sinkInputsByPid.remove(d->pid, this);\n    for (QuickWidgetSinkInput* sinkInputWidget : d->sinkInputsByPid.values(d->pid)) sinkInputWidget->updateVisibility();\n\n    d->pid = d->sinkInput->properties().value(\"application.process.id\").toString();\n    d->sinkInputsByPid.insert(d->pid, this);\n    for (QuickWidgetSinkInput* sinkInputWidget : d->sinkInputsByPid.values(d->pid)) sinkInputWidget->updateVisibility();\n}\n\nvoid QuickWidgetSinkInput::updateVisibility() {\n    this->setVisible(d->sinkInputsByPid.values(d->pid).first() == this);\n}\n\nvoid QuickWidgetSinkInput::on_volumeSlider_sliderPressed() {\n    d->changingVolume = true;\n}\n\nvoid QuickWidgetSinkInput::on_volumeSlider_sliderReleased() {\n    d->changingVolume = false;\n}\n\nvoid QuickWidgetSinkInput::on_volumeSlider_valueChanged(int value) {\n    qint64 factor = PulseAudioQt::normalVolume() / 100;\n    qint64 newVolume = value * factor;\n\n    for (QuickWidgetSinkInput* sinkInputWidget : d->sinkInputsByPid.values(d->pid)) sinkInputWidget->d->sinkInput->setVolume(newVolume);\n}\n\nvoid QuickWidgetSinkInput::sinkAdded(PulseAudioQt::Sink* sink) {\n    QAction* action = new QAction(this);\n    action->setCheckable(true);\n\n    connect(sink, &PulseAudioQt::Sink::propertiesChanged, action, [=] {\n        action->setText(Common::nameForSink(sink));\n    });\n    action->setText(Common::nameForSink(sink));\n\n    connect(d->sinkInput, &PulseAudioQt::SinkInput::deviceIndexChanged, action, [=] {\n        action->setChecked(sink->index() == d->sinkInput->deviceIndex());\n    });\n    action->setChecked(sink->index() == d->sinkInput->deviceIndex());\n\n    connect(action, &QAction::toggled, this, [=](bool checked) {\n        if (checked) {\n            for (QuickWidgetSinkInput* sinkInputWidget : d->sinkInputsByPid.values(d->pid)) sinkInputWidget->d->sinkInput->setDeviceIndex(sink->index());\n        }\n    });\n\n    d->devicesMenu->addAction(action);\n    d->devicesGroup->addAction(action);\n    d->sinkActions.insert(sink, action);\n}\n\nvoid QuickWidgetSinkInput::sinkRemoved(PulseAudioQt::Sink* sink) {\n    QAction* action = d->sinkActions.take(sink);\n    d->devicesMenu->removeAction(action);\n    d->devicesGroup->removeAction(action);\n    action->deleteLater();\n}\n"
  },
  {
    "path": "plugins/AudioPlugin/quickwidgetsinkinput.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2021 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef QUICKWIDGETSINKINPUT_H\n#define QUICKWIDGETSINKINPUT_H\n\n#include <PulseAudioQt/Sink>\n#include <PulseAudioQt/SinkInput>\n#include <QWidget>\n\nnamespace Ui {\n    class QuickWidgetSinkInput;\n}\n\nstruct QuickWidgetSinkInputPrivate;\nclass QuickWidgetSinkInput : public QWidget {\n        Q_OBJECT\n\n    public:\n        explicit QuickWidgetSinkInput(PulseAudioQt::SinkInput* sinkInput, QWidget* parent = nullptr);\n        ~QuickWidgetSinkInput();\n\n    private slots:\n        void on_volumeSlider_sliderPressed();\n\n        void on_volumeSlider_sliderReleased();\n\n        void on_volumeSlider_valueChanged(int value);\n\n    private:\n        Ui::QuickWidgetSinkInput* ui;\n        QuickWidgetSinkInputPrivate* d;\n\n        void sinkAdded(PulseAudioQt::Sink* sink);\n        void sinkRemoved(PulseAudioQt::Sink* sink);\n\n        void updateVolume();\n        void updateClient();\n        void updateProperties();\n        void updateVisibility();\n};\n\n#endif // QUICKWIDGETSINKINPUT_H\n"
  },
  {
    "path": "plugins/AudioPlugin/quickwidgetsinkinput.ui",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ui version=\"4.0\">\n <class>QuickWidgetSinkInput</class>\n <widget class=\"QWidget\" name=\"QuickWidgetSinkInput\">\n  <property name=\"geometry\">\n   <rect>\n    <x>0</x>\n    <y>0</y>\n    <width>400</width>\n    <height>300</height>\n   </rect>\n  </property>\n  <property name=\"windowTitle\">\n   <string notr=\"true\">Form</string>\n  </property>\n  <layout class=\"QHBoxLayout\" name=\"horizontalLayout\">\n   <property name=\"leftMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"topMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"rightMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"bottomMargin\">\n    <number>0</number>\n   </property>\n   <item>\n    <widget class=\"QLabel\" name=\"nameLabel\">\n     <property name=\"text\">\n      <string notr=\"true\">TextLabel</string>\n     </property>\n    </widget>\n   </item>\n   <item>\n    <widget class=\"QSlider\" name=\"volumeSlider\">\n     <property name=\"acceptDrops\">\n      <bool>true</bool>\n     </property>\n     <property name=\"orientation\">\n      <enum>Qt::Horizontal</enum>\n     </property>\n    </widget>\n   </item>\n   <item>\n    <widget class=\"QToolButton\" name=\"menuButton\">\n     <property name=\"sizePolicy\">\n      <sizepolicy hsizetype=\"Preferred\" vsizetype=\"Preferred\">\n       <horstretch>0</horstretch>\n       <verstretch>0</verstretch>\n      </sizepolicy>\n     </property>\n     <property name=\"text\">\n      <string notr=\"true\">...</string>\n     </property>\n     <property name=\"icon\">\n      <iconset theme=\"application-menu\"/>\n     </property>\n     <property name=\"popupMode\">\n      <enum>QToolButton::InstantPopup</enum>\n     </property>\n    </widget>\n   </item>\n  </layout>\n </widget>\n <resources/>\n <connections/>\n</ui>\n"
  },
  {
    "path": "plugins/AudioPlugin/thedesk-audio.conf",
    "content": ""
  },
  {
    "path": "plugins/AudioPlugin/translations/ar_SA.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"ar_SA\" sourcelanguage=\"en_US\">\n<context>\n    <name>AudioQuickWidget</name>\n    <message>\n        <source>VOLUME</source>\n        <translation type=\"vanished\">الصوت</translation>\n    </message>\n    <message>\n        <source>APPLICATIONS</source>\n        <translation type=\"vanished\">التطبيقات</translation>\n    </message>\n    <message>\n        <source>QUIET MODE</source>\n        <translation type=\"vanished\">الوضع الصامت</translation>\n    </message>\n</context>\n<context>\n    <name>EventHandler</name>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"93\"/>\n        <source>No Audio Devices</source>\n        <translation>لا يوجد أجهزة صوت</translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"134\"/>\n        <source>Mute</source>\n        <translation>صامت</translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"135\"/>\n        <source>Unmute Quiet Mode before changing the volume</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"151\"/>\n        <source>Speakers</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"155\"/>\n        <source>Headphones</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"159\"/>\n        <source>Line Out</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"167\"/>\n        <source>Volume</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>MicChunk</name>\n    <message numerus=\"yes\">\n        <location filename=\"../micchunk.cpp\" line=\"67\"/>\n        <source>%n applications</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n        </translation>\n    </message>\n</context>\n<context>\n    <name>QuickWidgetSinkInput</name>\n    <message>\n        <location filename=\"../quickwidgetsinkinput.cpp\" line=\"64\"/>\n        <source>Play on</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/AudioPlugin/translations/au_AU.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"au_AU\" sourcelanguage=\"en_US\">\n<context>\n    <name>EventHandler</name>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"93\"/>\n        <source>No Audio Devices</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"134\"/>\n        <source>Mute</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"135\"/>\n        <source>Unmute Quiet Mode before changing the volume</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"151\"/>\n        <source>Speakers</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"155\"/>\n        <source>Headphones</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"159\"/>\n        <source>Line Out</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"167\"/>\n        <source>Volume</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>MicChunk</name>\n    <message numerus=\"yes\">\n        <location filename=\"../micchunk.cpp\" line=\"67\"/>\n        <source>%n applications</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n        </translation>\n    </message>\n</context>\n<context>\n    <name>QuickWidgetSinkInput</name>\n    <message>\n        <location filename=\"../quickwidgetsinkinput.cpp\" line=\"64\"/>\n        <source>Play on</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/AudioPlugin/translations/cy.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"cy\" sourcelanguage=\"en_US\">\n<context>\n    <name>EventHandler</name>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"93\"/>\n        <source>No Audio Devices</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"134\"/>\n        <source>Mute</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"135\"/>\n        <source>Unmute Quiet Mode before changing the volume</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"151\"/>\n        <source>Speakers</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"155\"/>\n        <source>Headphones</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"159\"/>\n        <source>Line Out</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"167\"/>\n        <source>Volume</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>MicChunk</name>\n    <message numerus=\"yes\">\n        <location filename=\"../micchunk.cpp\" line=\"67\"/>\n        <source>%n applications</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n        </translation>\n    </message>\n</context>\n<context>\n    <name>QuickWidgetSinkInput</name>\n    <message>\n        <location filename=\"../quickwidgetsinkinput.cpp\" line=\"64\"/>\n        <source>Play on</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/AudioPlugin/translations/da.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"da\" sourcelanguage=\"en_US\">\n<context>\n    <name>EventHandler</name>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"93\"/>\n        <source>No Audio Devices</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"134\"/>\n        <source>Mute</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"135\"/>\n        <source>Unmute Quiet Mode before changing the volume</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"151\"/>\n        <source>Speakers</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"155\"/>\n        <source>Headphones</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"159\"/>\n        <source>Line Out</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"167\"/>\n        <source>Volume</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>MicChunk</name>\n    <message numerus=\"yes\">\n        <location filename=\"../micchunk.cpp\" line=\"67\"/>\n        <source>%n applications</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n        </translation>\n    </message>\n</context>\n<context>\n    <name>QuickWidgetSinkInput</name>\n    <message>\n        <location filename=\"../quickwidgetsinkinput.cpp\" line=\"64\"/>\n        <source>Play on</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/AudioPlugin/translations/de.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"de\" sourcelanguage=\"en_US\">\n<context>\n    <name>AudioQuickWidget</name>\n    <message>\n        <source>VOLUME</source>\n        <translation type=\"vanished\">LAUTSTÄRKE</translation>\n    </message>\n    <message>\n        <source>APPLICATIONS</source>\n        <translation type=\"vanished\">ANWENDUNGEN</translation>\n    </message>\n    <message>\n        <source>QUIET MODE</source>\n        <translation type=\"vanished\">STILLER MODUS</translation>\n    </message>\n</context>\n<context>\n    <name>EventHandler</name>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"93\"/>\n        <source>No Audio Devices</source>\n        <translation>Keine Audiogeräte</translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"134\"/>\n        <source>Mute</source>\n        <translation>Stumm</translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"135\"/>\n        <source>Unmute Quiet Mode before changing the volume</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"151\"/>\n        <source>Speakers</source>\n        <translation>Lautsprecher</translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"155\"/>\n        <source>Headphones</source>\n        <translation>Kopfhörer</translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"159\"/>\n        <source>Line Out</source>\n        <translation>Line Out</translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"167\"/>\n        <source>Volume</source>\n        <translation>Lautstärke</translation>\n    </message>\n</context>\n<context>\n    <name>MicChunk</name>\n    <message numerus=\"yes\">\n        <location filename=\"../micchunk.cpp\" line=\"67\"/>\n        <source>%n applications</source>\n        <translation>\n            <numerusform>%n Anwendung</numerusform>\n            <numerusform>%n Anwendungen</numerusform>\n        </translation>\n    </message>\n</context>\n<context>\n    <name>QuickWidgetSink</name>\n    <message>\n        <source>Make Default</source>\n        <translation type=\"vanished\">Als Standard festlegen</translation>\n    </message>\n    <message>\n        <source>Use for All Applications</source>\n        <translation type=\"vanished\">Für alle Anwendungen verwenden</translation>\n    </message>\n</context>\n<context>\n    <name>QuickWidgetSinkInput</name>\n    <message>\n        <location filename=\"../quickwidgetsinkinput.cpp\" line=\"64\"/>\n        <source>Play on</source>\n        <translation>Abspielen auf</translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/AudioPlugin/translations/en_GB.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"en_GB\" sourcelanguage=\"en_US\">\n<context>\n    <name>EventHandler</name>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"93\"/>\n        <source>No Audio Devices</source>\n        <translation>No Audio Devices</translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"151\"/>\n        <source>Speakers</source>\n        <translation>Speakers</translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"155\"/>\n        <source>Headphones</source>\n        <translation>Headphones</translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"167\"/>\n        <source>Volume</source>\n        <translation>Volume</translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"134\"/>\n        <source>Mute</source>\n        <translation>Mute</translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"135\"/>\n        <source>Unmute Quiet Mode before changing the volume</source>\n        <translation>Unmute Quiet Mode before changing the volume</translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"159\"/>\n        <source>Line Out</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>MicChunk</name>\n    <message numerus=\"yes\">\n        <location filename=\"../micchunk.cpp\" line=\"67\"/>\n        <source>%n applications</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n        </translation>\n    </message>\n</context>\n<context>\n    <name>QuickWidgetSinkInput</name>\n    <message>\n        <location filename=\"../quickwidgetsinkinput.cpp\" line=\"64\"/>\n        <source>Play on</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/AudioPlugin/translations/en_US.qm",
    "content": "<d\u0018!\u001c`"
  },
  {
    "path": "plugins/AudioPlugin/translations/en_US.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" sourcelanguage=\"en_US\">\n<context>\n    <name>EventHandler</name>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"93\"/>\n        <source>No Audio Devices</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"134\"/>\n        <source>Mute</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"135\"/>\n        <source>Unmute Quiet Mode before changing the volume</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"151\"/>\n        <source>Speakers</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"155\"/>\n        <source>Headphones</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"159\"/>\n        <source>Line Out</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"167\"/>\n        <source>Volume</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>MicChunk</name>\n    <message numerus=\"yes\">\n        <location filename=\"../micchunk.cpp\" line=\"67\"/>\n        <source>%n applications</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n        </translation>\n    </message>\n</context>\n<context>\n    <name>QuickWidgetSinkInput</name>\n    <message>\n        <location filename=\"../quickwidgetsinkinput.cpp\" line=\"64\"/>\n        <source>Play on</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/AudioPlugin/translations/es.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"es\" sourcelanguage=\"en_US\">\n<context>\n    <name>EventHandler</name>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"93\"/>\n        <source>No Audio Devices</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"134\"/>\n        <source>Mute</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"135\"/>\n        <source>Unmute Quiet Mode before changing the volume</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"151\"/>\n        <source>Speakers</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"155\"/>\n        <source>Headphones</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"159\"/>\n        <source>Line Out</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"167\"/>\n        <source>Volume</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>MicChunk</name>\n    <message numerus=\"yes\">\n        <location filename=\"../micchunk.cpp\" line=\"67\"/>\n        <source>%n applications</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n        </translation>\n    </message>\n</context>\n<context>\n    <name>QuickWidgetSinkInput</name>\n    <message>\n        <location filename=\"../quickwidgetsinkinput.cpp\" line=\"64\"/>\n        <source>Play on</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/AudioPlugin/translations/es_VE.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"es_VE\" sourcelanguage=\"en_US\">\n<context>\n    <name>EventHandler</name>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"93\"/>\n        <source>No Audio Devices</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"134\"/>\n        <source>Mute</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"135\"/>\n        <source>Unmute Quiet Mode before changing the volume</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"151\"/>\n        <source>Speakers</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"155\"/>\n        <source>Headphones</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"159\"/>\n        <source>Line Out</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"167\"/>\n        <source>Volume</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>MicChunk</name>\n    <message numerus=\"yes\">\n        <location filename=\"../micchunk.cpp\" line=\"67\"/>\n        <source>%n applications</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n        </translation>\n    </message>\n</context>\n<context>\n    <name>QuickWidgetSinkInput</name>\n    <message>\n        <location filename=\"../quickwidgetsinkinput.cpp\" line=\"64\"/>\n        <source>Play on</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/AudioPlugin/translations/id.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"id\" sourcelanguage=\"en_US\">\n<context>\n    <name>EventHandler</name>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"93\"/>\n        <source>No Audio Devices</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"134\"/>\n        <source>Mute</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"135\"/>\n        <source>Unmute Quiet Mode before changing the volume</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"151\"/>\n        <source>Speakers</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"155\"/>\n        <source>Headphones</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"159\"/>\n        <source>Line Out</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"167\"/>\n        <source>Volume</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>MicChunk</name>\n    <message numerus=\"yes\">\n        <location filename=\"../micchunk.cpp\" line=\"67\"/>\n        <source>%n applications</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n        </translation>\n    </message>\n</context>\n<context>\n    <name>QuickWidgetSinkInput</name>\n    <message>\n        <location filename=\"../quickwidgetsinkinput.cpp\" line=\"64\"/>\n        <source>Play on</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/AudioPlugin/translations/ja.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"ja\" sourcelanguage=\"en_US\">\n<context>\n    <name>EventHandler</name>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"93\"/>\n        <source>No Audio Devices</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"134\"/>\n        <source>Mute</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"135\"/>\n        <source>Unmute Quiet Mode before changing the volume</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"151\"/>\n        <source>Speakers</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"155\"/>\n        <source>Headphones</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"159\"/>\n        <source>Line Out</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"167\"/>\n        <source>Volume</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>MicChunk</name>\n    <message numerus=\"yes\">\n        <location filename=\"../micchunk.cpp\" line=\"67\"/>\n        <source>%n applications</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n        </translation>\n    </message>\n</context>\n<context>\n    <name>QuickWidgetSinkInput</name>\n    <message>\n        <location filename=\"../quickwidgetsinkinput.cpp\" line=\"64\"/>\n        <source>Play on</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/AudioPlugin/translations/nl.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"nl\" sourcelanguage=\"en_US\">\n<context>\n    <name>AudioQuickWidget</name>\n    <message>\n        <source>VOLUME</source>\n        <translation type=\"vanished\">VOLUME</translation>\n    </message>\n    <message>\n        <source>APPLICATIONS</source>\n        <translation type=\"vanished\">APPLICATIES</translation>\n    </message>\n    <message>\n        <source>QUIET MODE</source>\n        <translation type=\"vanished\">STILTEMODUS</translation>\n    </message>\n</context>\n<context>\n    <name>EventHandler</name>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"93\"/>\n        <source>No Audio Devices</source>\n        <translation>Geen Audio-apparaten</translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"134\"/>\n        <source>Mute</source>\n        <translation>Stil</translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"135\"/>\n        <source>Unmute Quiet Mode before changing the volume</source>\n        <translation>Zet Stiltemodus uit voordat je het volume aanpast</translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"151\"/>\n        <source>Speakers</source>\n        <translation>Speakers</translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"155\"/>\n        <source>Headphones</source>\n        <translation>Koptelefoons</translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"159\"/>\n        <source>Line Out</source>\n        <translation type=\"unfinished\">Lijn Uit</translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"167\"/>\n        <source>Volume</source>\n        <translation>Volume</translation>\n    </message>\n</context>\n<context>\n    <name>MicChunk</name>\n    <message numerus=\"yes\">\n        <location filename=\"../micchunk.cpp\" line=\"67\"/>\n        <source>%n applications</source>\n        <translation>\n            <numerusform>%n applicatie</numerusform>\n            <numerusform>%n applicaties</numerusform>\n        </translation>\n    </message>\n</context>\n<context>\n    <name>QuickWidgetSink</name>\n    <message>\n        <source>Make Default</source>\n        <translation type=\"vanished\">Standaard Maken</translation>\n    </message>\n    <message>\n        <source>Use for All Applications</source>\n        <translation type=\"vanished\">Voor Alle Applicaties Gebruiken</translation>\n    </message>\n</context>\n<context>\n    <name>QuickWidgetSinkInput</name>\n    <message>\n        <location filename=\"../quickwidgetsinkinput.cpp\" line=\"64\"/>\n        <source>Play on</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/AudioPlugin/translations/pt_BR.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"pt_BR\" sourcelanguage=\"en_US\">\n<context>\n    <name>AudioQuickWidget</name>\n    <message>\n        <source>VOLUME</source>\n        <translation type=\"vanished\">VOLUME</translation>\n    </message>\n    <message>\n        <source>APPLICATIONS</source>\n        <translation type=\"vanished\">APLICAÇÕES</translation>\n    </message>\n    <message>\n        <source>QUIET MODE</source>\n        <translation type=\"vanished\">MODO SILENCIOSO</translation>\n    </message>\n</context>\n<context>\n    <name>EventHandler</name>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"93\"/>\n        <source>No Audio Devices</source>\n        <translation>Nenhum dispositivo de áudio</translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"134\"/>\n        <source>Mute</source>\n        <translation>Mudo</translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"135\"/>\n        <source>Unmute Quiet Mode before changing the volume</source>\n        <translation>Desative o modo silencioso antes de mudar o volume</translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"151\"/>\n        <source>Speakers</source>\n        <translation>Alto-falantes</translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"155\"/>\n        <source>Headphones</source>\n        <translation>Fones de ouvido</translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"159\"/>\n        <source>Line Out</source>\n        <translation>Saída de linha (Line Out)</translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"167\"/>\n        <source>Volume</source>\n        <translation>Volume</translation>\n    </message>\n</context>\n<context>\n    <name>MicChunk</name>\n    <message numerus=\"yes\">\n        <location filename=\"../micchunk.cpp\" line=\"67\"/>\n        <source>%n applications</source>\n        <translation>\n            <numerusform>%n aplicativo</numerusform>\n            <numerusform>%n aplicativos</numerusform>\n        </translation>\n    </message>\n</context>\n<context>\n    <name>QuickWidgetSink</name>\n    <message>\n        <source>Make Default</source>\n        <translation type=\"vanished\">Tornar padrão</translation>\n    </message>\n    <message>\n        <source>Use for All Applications</source>\n        <translation type=\"vanished\">Usar para todos os aplicativos</translation>\n    </message>\n</context>\n<context>\n    <name>QuickWidgetSinkInput</name>\n    <message>\n        <location filename=\"../quickwidgetsinkinput.cpp\" line=\"64\"/>\n        <source>Play on</source>\n        <translation>Reproduzir em</translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/AudioPlugin/translations/ro_RO.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"ro_RO\" sourcelanguage=\"en_US\">\n<context>\n    <name>AudioQuickWidget</name>\n    <message>\n        <source>VOLUME</source>\n        <translation type=\"vanished\">VOLUM</translation>\n    </message>\n    <message>\n        <source>QUIET MODE</source>\n        <translation type=\"vanished\">MOD SILENȚIOS</translation>\n    </message>\n    <message>\n        <source>APPLICATIONS</source>\n        <translation type=\"vanished\">APLICAȚII</translation>\n    </message>\n</context>\n<context>\n    <name>EventHandler</name>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"93\"/>\n        <source>No Audio Devices</source>\n        <translation>Niciun dispozitiv audio conectat</translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"151\"/>\n        <source>Speakers</source>\n        <translation>Boxe</translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"155\"/>\n        <source>Headphones</source>\n        <translation>Căști</translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"167\"/>\n        <source>Volume</source>\n        <translation>Volum</translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"134\"/>\n        <source>Mute</source>\n        <translation>Mut</translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"135\"/>\n        <source>Unmute Quiet Mode before changing the volume</source>\n        <translation>Dezactivați modul silențios înainte de a schimba volumul</translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"159\"/>\n        <source>Line Out</source>\n        <translation type=\"unfinished\">Mufă căști/boxe</translation>\n    </message>\n</context>\n<context>\n    <name>MicChunk</name>\n    <message numerus=\"yes\">\n        <location filename=\"../micchunk.cpp\" line=\"67\"/>\n        <source>%n applications</source>\n        <translation>\n            <numerusform>o aplicație</numerusform>\n            <numerusform>%n aplicații</numerusform>\n            <numerusform>%n aplicații</numerusform>\n        </translation>\n    </message>\n</context>\n<context>\n    <name>QuickWidgetSink</name>\n    <message>\n        <source>Make Default</source>\n        <translation type=\"vanished\">Setează ca implicit</translation>\n    </message>\n    <message>\n        <source>Use for All Applications</source>\n        <translation type=\"vanished\">Folosiți pentru toate aplicații</translation>\n    </message>\n</context>\n<context>\n    <name>QuickWidgetSinkInput</name>\n    <message>\n        <location filename=\"../quickwidgetsinkinput.cpp\" line=\"64\"/>\n        <source>Play on</source>\n        <translation>Redă pe</translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/AudioPlugin/translations/sv.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"sv\" sourcelanguage=\"en_US\">\n<context>\n    <name>EventHandler</name>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"93\"/>\n        <source>No Audio Devices</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"134\"/>\n        <source>Mute</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"135\"/>\n        <source>Unmute Quiet Mode before changing the volume</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"151\"/>\n        <source>Speakers</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"155\"/>\n        <source>Headphones</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"159\"/>\n        <source>Line Out</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"167\"/>\n        <source>Volume</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>MicChunk</name>\n    <message numerus=\"yes\">\n        <location filename=\"../micchunk.cpp\" line=\"67\"/>\n        <source>%n applications</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n        </translation>\n    </message>\n</context>\n<context>\n    <name>QuickWidgetSinkInput</name>\n    <message>\n        <location filename=\"../quickwidgetsinkinput.cpp\" line=\"64\"/>\n        <source>Play on</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/AudioPlugin/translations/tr_TR.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"tr_TR\" sourcelanguage=\"en_US\">\n<context>\n    <name>AudioQuickWidget</name>\n    <message>\n        <source>VOLUME</source>\n        <translation type=\"vanished\">SES</translation>\n    </message>\n    <message>\n        <source>QUIET MODE</source>\n        <translation type=\"vanished\">SESSİZ MOD</translation>\n    </message>\n    <message>\n        <source>APPLICATIONS</source>\n        <translation type=\"vanished\">UYGULAMALAR</translation>\n    </message>\n</context>\n<context>\n    <name>EventHandler</name>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"93\"/>\n        <source>No Audio Devices</source>\n        <translation>Ses Cihazı Yok</translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"151\"/>\n        <source>Speakers</source>\n        <translation>Hoparlörler</translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"155\"/>\n        <source>Headphones</source>\n        <translation>Kulaklıklar</translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"167\"/>\n        <source>Volume</source>\n        <translation>Ses</translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"134\"/>\n        <source>Mute</source>\n        <translation>Sessiz</translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"135\"/>\n        <source>Unmute Quiet Mode before changing the volume</source>\n        <translation>Sesi değiştirmeden önce Sessiz Modu Açın</translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"159\"/>\n        <source>Line Out</source>\n        <translation>Hat Çıkışı</translation>\n    </message>\n</context>\n<context>\n    <name>MicChunk</name>\n    <message numerus=\"yes\">\n        <location filename=\"../micchunk.cpp\" line=\"67\"/>\n        <source>%n applications</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n        </translation>\n    </message>\n</context>\n<context>\n    <name>QuickWidgetSink</name>\n    <message>\n        <source>Make Default</source>\n        <translation type=\"vanished\">Varsayılan Yap</translation>\n    </message>\n    <message>\n        <source>Use for All Applications</source>\n        <translation type=\"vanished\">Tüm uygulamalar için kullan</translation>\n    </message>\n</context>\n<context>\n    <name>QuickWidgetSinkInput</name>\n    <message>\n        <location filename=\"../quickwidgetsinkinput.cpp\" line=\"64\"/>\n        <source>Play on</source>\n        <translation>Oynamak</translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/AudioPlugin/translations/vi_VN.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"vi_VN\" sourcelanguage=\"en_US\">\n<context>\n    <name>AudioQuickWidget</name>\n    <message>\n        <source>VOLUME</source>\n        <translation type=\"vanished\">ÂM LƯỢNG</translation>\n    </message>\n    <message>\n        <source>QUIET MODE</source>\n        <translation type=\"vanished\">CHẾ ĐỘ IM</translation>\n    </message>\n    <message>\n        <source>APPLICATIONS</source>\n        <translation type=\"vanished\">ỨNG DỤNG</translation>\n    </message>\n</context>\n<context>\n    <name>EventHandler</name>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"93\"/>\n        <source>No Audio Devices</source>\n        <translation>Không có thiết bị âm thanh</translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"151\"/>\n        <source>Speakers</source>\n        <translation>Loa</translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"155\"/>\n        <source>Headphones</source>\n        <translation>Tai nghe</translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"167\"/>\n        <source>Volume</source>\n        <translation>Âm lượng</translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"134\"/>\n        <source>Mute</source>\n        <translation>Im lặng</translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"135\"/>\n        <source>Unmute Quiet Mode before changing the volume</source>\n        <translation>Đổi khỏi chế độ im lặng trước khi đổi âm lượng</translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"159\"/>\n        <source>Line Out</source>\n        <translation>Dòng ra</translation>\n    </message>\n</context>\n<context>\n    <name>MicChunk</name>\n    <message numerus=\"yes\">\n        <location filename=\"../micchunk.cpp\" line=\"67\"/>\n        <source>%n applications</source>\n        <translation>\n            <numerusform>%n ứng dụng</numerusform>\n        </translation>\n    </message>\n</context>\n<context>\n    <name>QuickWidgetSink</name>\n    <message>\n        <source>Make Default</source>\n        <translation type=\"vanished\">Đặt thành mặc định</translation>\n    </message>\n    <message>\n        <source>Use for All Applications</source>\n        <translation type=\"vanished\">Sử dụng cho các ứng dụng</translation>\n    </message>\n</context>\n<context>\n    <name>QuickWidgetSinkInput</name>\n    <message>\n        <location filename=\"../quickwidgetsinkinput.cpp\" line=\"64\"/>\n        <source>Play on</source>\n        <translation>Phát trên</translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/AudioPlugin/translations/zh_CN.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"zh_CN\" sourcelanguage=\"en_US\">\n<context>\n    <name>EventHandler</name>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"93\"/>\n        <source>No Audio Devices</source>\n        <translation>未找到音频设备</translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"151\"/>\n        <source>Speakers</source>\n        <translation>音响</translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"155\"/>\n        <source>Headphones</source>\n        <translation>耳机</translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"167\"/>\n        <source>Volume</source>\n        <translation>音量</translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"134\"/>\n        <source>Mute</source>\n        <translation>静音</translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"135\"/>\n        <source>Unmute Quiet Mode before changing the volume</source>\n        <translation>在更改音量之前请解除安静模式</translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"159\"/>\n        <source>Line Out</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>MicChunk</name>\n    <message numerus=\"yes\">\n        <location filename=\"../micchunk.cpp\" line=\"67\"/>\n        <source>%n applications</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n        </translation>\n    </message>\n</context>\n<context>\n    <name>QuickWidgetSinkInput</name>\n    <message>\n        <location filename=\"../quickwidgetsinkinput.cpp\" line=\"64\"/>\n        <source>Play on</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/AudioPlugin/translations/zu_ZA.qm",
    "content": "<d\u0018!\u001c`"
  },
  {
    "path": "plugins/AudioPlugin/translations/zu_ZA.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" sourcelanguage=\"en_US\">\n<context>\n    <name>EventHandler</name>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"93\"/>\n        <source>No Audio Devices</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"151\"/>\n        <source>Speakers</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"155\"/>\n        <source>Headphones</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"167\"/>\n        <source>Volume</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"134\"/>\n        <source>Mute</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"135\"/>\n        <source>Unmute Quiet Mode before changing the volume</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"159\"/>\n        <source>Line Out</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>MicChunk</name>\n    <message numerus=\"yes\">\n        <location filename=\"../micchunk.cpp\" line=\"67\"/>\n        <source>%n applications</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n        </translation>\n    </message>\n</context>\n<context>\n    <name>QuickWidgetSinkInput</name>\n    <message>\n        <location filename=\"../quickwidgetsinkinput.cpp\" line=\"64\"/>\n        <source>Play on</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/BluetoothPlugin/BluetoothPlugin.pro",
    "content": "QT += gui widgets BluezQt\n\nTEMPLATE = lib\nCONFIG += plugin\n\nCONFIG += c++11\n\n# Include the-libs build tools\ninclude(/usr/share/the-libs/pri/gentranslations.pri)\n\n# You can make your code fail to compile if it uses deprecated APIs.\n# In order to do so, uncomment the following line.\n#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0\n\nSOURCES += \\\n    btagent.cpp \\\n    btobex.cpp \\\n    chunk/bluetoothchunk.cpp \\\n    common.cpp \\\n    devicedelegate.cpp \\\n    plugin.cpp \\\n    settings/bluetoothsettingspane.cpp \\\n    settings/devicepopover.cpp \\\n    settings/pairpopover.cpp\n\nHEADERS += \\\n    btagent.h \\\n    btobex.h \\\n    chunk/bluetoothchunk.h \\\n    common.h \\\n    devicedelegate.h \\\n    plugin.h \\\n    settings/bluetoothsettingspane.h \\\n    settings/devicepopover.h \\\n    settings/pairpopover.h\n\nDISTFILES += Plugin.json \\\n    defaults.conf \\\n    defaults.json\n\nunix {\n    translations.files = translations/*.qm\n    translations.path = /usr/share/thedesk/BluetoothPlugin/translations\n\n    defaults.files = defaults.conf\n    defaults.path = /etc/theSuite/theDesk/BluetoothPlugin/\n\n    INSTALLS += translations defaults\n}\n\ninclude(../plugins.pri)\n\nFORMS += \\\n    settings/bluetoothsettingspane.ui \\\n    settings/devicepopover.ui \\\n    settings/pairpopover.ui\n\n"
  },
  {
    "path": "plugins/BluetoothPlugin/CMakeLists.txt",
    "content": "cmake_minimum_required(VERSION 3.24.0)\n\nfind_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets)\nfind_package(libcontemporary)\nfind_package(KF${KF_VERSION_MAJOR}BluezQt)\n\nset(SOURCES\n    btagent.cpp\n    btobex.cpp\n    chunk/bluetoothchunk.cpp\n    bluetoothplugincommon.cpp\n    devicedelegate.cpp\n    plugin.cpp\n    settings/bluetoothsettingspane.cpp\n    settings/devicepopover.cpp\n    settings/pairpopover.cpp\n\n    settings/bluetoothsettingspane.ui\n    settings/devicepopover.ui\n    settings/pairpopover.ui\n)\n\nset(HEADERS\n    btagent.h\n    btobex.h\n    chunk/bluetoothchunk.h\n    bluetoothplugincommon.h\n    devicedelegate.h\n    plugin.h\n    settings/bluetoothsettingspane.h\n    settings/devicepopover.h\n    settings/pairpopover.h\n)\n\nset(PLUGIN_NAME bluetooth)\nadd_plugin_td(${PLUGIN_NAME})\ntarget_sources(plugin-${PLUGIN_NAME} PRIVATE ${SOURCES} ${HEADERS})\ncntp_defaults_file(${PLUGIN_NAME}\n    DEFAULTS_FILE thedesk-bluetooth.conf)\n\ntarget_link_libraries(plugin-${PLUGIN_NAME} Qt::Widgets KF${KF_VERSION_MAJOR}::BluezQt libcontemporary libthedesk)\n"
  },
  {
    "path": "plugins/BluetoothPlugin/Plugin.json",
    "content": "{\n    \"name\": \"Bluetooth\",\n    \"icon\": \"preferences-system-bluetooth\",\n    \"uuid\": \"e64f4005-56a6-4401-962d-e325b6109eec\",\n    \"vi\": {\n        \"name\": \"Bluetooth\"\n    }\n}\n"
  },
  {
    "path": "plugins/BluetoothPlugin/bluetoothplugincommon.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2021 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"bluetoothplugincommon.h\"\n\nBluetoothPluginCommon::BluetoothPluginCommon(QObject* parent) : QObject(parent) {\n\n}\n\nQString BluetoothPluginCommon::stringForDeviceType(BluezQt::Device::Type type) {\n    switch (type) {\n        case BluezQt::Device::Phone:\n            return tr(\"Phone\");\n        case BluezQt::Device::Modem:\n            return tr(\"Modem\");\n        case BluezQt::Device::Computer:\n            return tr(\"Computer\");\n        case BluezQt::Device::Network:\n            return tr(\"Networking\");\n        case BluezQt::Device::Headset:\n            return tr(\"Headset\");\n        case BluezQt::Device::Headphones:\n            return tr(\"Headphones\");\n        case BluezQt::Device::AudioVideo:\n            return tr(\"Audio/Video\");\n        case BluezQt::Device::Keyboard:\n            return tr(\"Keyboard\");\n        case BluezQt::Device::Mouse:\n            return tr(\"Mouse\");\n        case BluezQt::Device::Joypad:\n            return tr(\"Gamepad\");\n        case BluezQt::Device::Tablet:\n            return tr(\"Drawing Tablet\");\n        case BluezQt::Device::Peripheral:\n            return tr(\"Peripheral\");\n        case BluezQt::Device::Camera:\n            return tr(\"Camera\");\n        case BluezQt::Device::Printer:\n            return tr(\"Printer\");\n        case BluezQt::Device::Imaging:\n            return tr(\"Imaging\");\n        case BluezQt::Device::Wearable:\n            return tr(\"Wearable\");\n        case BluezQt::Device::Toy:\n            return tr(\"Toy\");\n        case BluezQt::Device::Health:\n            return tr(\"Health\");\n        default:\n            return tr(\"Unknown\");\n    }\n}\n"
  },
  {
    "path": "plugins/BluetoothPlugin/bluetoothplugincommon.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2021 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef BLUETOOTHPLUGINCOMMON_H\n#define BLUETOOTHPLUGINCOMMON_H\n\n#include <BluezQt/Device>\n\nclass BluetoothPluginCommon : public QObject {\n        Q_OBJECT\n    public:\n        explicit BluetoothPluginCommon(QObject* parent = nullptr);\n\n        static QString stringForDeviceType(BluezQt::Device::Type type);\n\n    signals:\n\n};\n\n#endif // BLUETOOTHPLUGINCOMMON_H\n"
  },
  {
    "path": "plugins/BluetoothPlugin/btagent.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2021 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"btagent.h\"\n\n#include <QDBusObjectPath>\n#include <BluezQt/Device>\n#include <tnotification.h>\n#include \"settings/pairpopover.h\"\n\nstruct BtAgentPrivate {\n    BluezQt::DevicePtr capturedDevice;\n    PairPopover* capturedPopover;\n\n    QPointer<tNotification> notification;\n};\n\nBtAgent::BtAgent(QObject* parent) : BluezQt::Agent(parent) {\n    d = new BtAgentPrivate();\n}\n\nBtAgent::~BtAgent() {\n    delete d;\n}\n\nvoid BtAgent::capturePairRequests(BluezQt::DevicePtr device, PairPopover* popover) {\n    d->capturedDevice = device;\n    d->capturedPopover = popover;\n}\n\nQDBusObjectPath BtAgent::objectPath() const {\n    return QDBusObjectPath(\"/com/vicr123/theDesk/BluetoothPlugin/Agent\");\n}\n\nBluezQt::Agent::Capability BtAgent::capability() const {\n    return DisplayYesNo;\n}\n\nvoid BtAgent::requestPinCode(BluezQt::DevicePtr device, const BluezQt::Request<QString>& request) {\n}\n\nvoid BtAgent::displayPinCode(BluezQt::DevicePtr device, const QString& pinCode) {\n    if (device == d->capturedDevice) {\n        d->capturedPopover->triggerPairConfirmation(PairPopover::KeyPinCode, pinCode)->error([ = ](QString error) {\n            device->cancelPairing();\n        });\n    } else {\n        //TODO: Show a notification\n    }\n}\n\nvoid BtAgent::requestPasskey(BluezQt::DevicePtr device, const BluezQt::Request<quint32>& request) {\n}\n\nvoid BtAgent::displayPasskey(BluezQt::DevicePtr device, const QString& passkey, const QString& entered) {\n    if (device == d->capturedDevice) {\n        d->capturedPopover->triggerPairConfirmation(PairPopover::KeyPinCode, passkey);\n    } else {\n        //TODO: Show a notification\n    }\n}\n\nvoid BtAgent::requestConfirmation(BluezQt::DevicePtr device, const QString& passkey, const BluezQt::Request<>& request) {\n    if (device == d->capturedDevice) {\n        d->capturedPopover->triggerPairConfirmation(PairPopover::ConfirmPinCode, passkey)->then([ = ](QString pinCode) {\n            request.accept();\n        })->error([ = ](QString error) {\n            request.reject();\n        });\n    } else {\n        tNotification* notification = new tNotification();\n        notification->setAppIcon(\"preferences-system-bluetooth\");\n        notification->setAppName(tr(\"Bluetooth\"));\n        notification->setSummary(tr(\"Pair with %1?\").arg(QLocale().quoteString(device->name())));\n        notification->setText(tr(\"In order to complete pairing, confirm that the following pairing code is shown on %1.\").arg(QLocale().quoteString(device->name())).append(QStringLiteral(\"<p><b style=\\\"font-size: 20pt;\\\">%1</b></p>\").arg(passkey))\n            .append(tr(\"If it is, you can accept the pairing request.\")));\n        notification->insertAction(\"1reject\", tr(\"Decline\"));\n        notification->insertAction(\"2accept\", tr(\"Accept and Pair\"));\n        notification->setTimeout(0);\n        connect(notification, &tNotification::actionClicked, this, [ = ](QString key) {\n            if (key == \"1reject\") {\n                request.reject();\n            } else if (key == \"2accept\") {\n                request.accept();\n            }\n        });\n        connect(notification, &tNotification::dismissed, this, [ = ] {\n            request.reject();\n        });\n        notification->post();\n\n        d->notification = notification;\n    }\n}\n\nvoid BtAgent::requestAuthorization(BluezQt::DevicePtr device, const BluezQt::Request<>& request) {\n    if (device == d->capturedDevice) {\n        //Automatically accept the pairing request\n        request.accept();\n    } else {\n        tNotification* notification = new tNotification();\n        notification->setAppIcon(\"preferences-system-bluetooth\");\n        notification->setAppName(tr(\"Bluetooth\"));\n        notification->setSummary(tr(\"Pair with %1?\").arg(QLocale().quoteString(device->name())));\n        notification->setText(tr(\"Accept the pairing request from %1?\").arg(QLocale().quoteString(device->name())));\n        notification->insertAction(\"1reject\", tr(\"Decline\"));\n        notification->insertAction(\"2accept\", tr(\"Pair\"));\n        notification->setTimeout(0);\n        connect(notification, &tNotification::actionClicked, this, [ = ](QString key) {\n            if (key == \"1reject\") {\n                request.reject();\n            } else if (key == \"2accept\") {\n                request.accept();\n            }\n        });\n        connect(notification, &tNotification::dismissed, this, [ = ] {\n            request.reject();\n        });\n        notification->post();\n\n        d->notification = notification;\n    }\n}\n\nvoid BtAgent::authorizeService(BluezQt::DevicePtr device, const QString& uuid, const BluezQt::Request<>& request) {\n    request.accept();\n}\n\nvoid BtAgent::cancel() {\n    if (d->capturedDevice) {\n        d->capturedPopover->cancelPendingPairing();\n    } else if (d->notification) {\n        d->notification->dismiss();\n    }\n}\n"
  },
  {
    "path": "plugins/BluetoothPlugin/btagent.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2021 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef BTAGENT_H\n#define BTAGENT_H\n\n#include <BluezQt/Agent>\n\nstruct BtAgentPrivate;\nclass PairPopover;\nclass BtAgent : public BluezQt::Agent {\n        Q_OBJECT\n    public:\n        explicit BtAgent(QObject* parent = nullptr);\n        ~BtAgent();\n\n        void capturePairRequests(BluezQt::DevicePtr device, PairPopover* popover);\n\n    signals:\n\n    private:\n        BtAgentPrivate* d;\n\n        // Agent interface\n    public:\n        QDBusObjectPath objectPath() const;\n        Capability capability() const;\n        void requestPinCode(BluezQt::DevicePtr device, const BluezQt::Request<QString>& request);\n        void displayPinCode(BluezQt::DevicePtr device, const QString& pinCode);\n        void requestPasskey(BluezQt::DevicePtr device, const BluezQt::Request<quint32>& request);\n        void displayPasskey(BluezQt::DevicePtr device, const QString& passkey, const QString& entered);\n        void requestConfirmation(BluezQt::DevicePtr device, const QString& passkey, const BluezQt::Request<>& request);\n        void requestAuthorization(BluezQt::DevicePtr device, const BluezQt::Request<>& request);\n        void authorizeService(BluezQt::DevicePtr device, const QString& uuid, const BluezQt::Request<>& request);\n        void cancel();\n};\n\n#endif // BTAGENT_H\n"
  },
  {
    "path": "plugins/BluetoothPlugin/btobex.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2021 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"btobex.h\"\n\n#include <QStandardPaths>\n#include <QDBusObjectPath>\n#include <QFile>\n#include <QDir>\n#include <QPointer>\n#include <tnotification.h>\n\n#include <BluezQt/Manager>\n#include <BluezQt/Device>\n#include <BluezQt/InitObexManagerJob>\n#include <BluezQt/ObexManager>\n#include <BluezQt/ObexTransfer>\n#include <BluezQt/ObexSession>\n#include <BluezQt/PendingCall>\n\nstruct BtObexPrivate {\n    BluezQt::ManagerPtr manager;\n    BluezQt::ObexManagerPtr obexManager;\n    QPointer<tNotification> notification;\n};\n\nBtObex::BtObex(BluezQt::ManagerPtr manager, QObject* parent) : BluezQt::ObexAgent(parent) {\n    d = new BtObexPrivate();\n    d->manager = manager;\n    d->obexManager = BluezQt::ObexManagerPtr(new BluezQt::ObexManager());\n\n    BluezQt::PendingCall* startCall = BluezQt::ObexManager::startService();\n    connect(startCall, &BluezQt::PendingCall::finished, this, [ = ] {\n        BluezQt::InitObexManagerJob* initObexManagerJob = d->obexManager->init();\n        connect(initObexManagerJob, &BluezQt::InitObexManagerJob::result, this, [ = ] {\n            d->obexManager->registerAgent(this);\n        });\n\n        initObexManagerJob->start();\n    });\n}\n\nBtObex::~BtObex() {\n    delete d;\n}\n\n\nQDBusObjectPath BtObex::objectPath() const {\n    return QDBusObjectPath(\"/com/vicr123/theDesk/BluetoothPlugin/ObexAgent\");\n}\n\nvoid BtObex::authorizePush(BluezQt::ObexTransferPtr transfer, BluezQt::ObexSessionPtr session, const BluezQt::Request<QString>& request) {\n    tNotification* notification = new tNotification();\n    notification->setAppIcon(\"preferences-system-bluetooth\");\n    notification->setAppName(tr(\"Bluetooth\"));\n    notification->setSummary(tr(\"Incoming file\"));\n    notification->setText(tr(\"%1 is sending you the file %2.\").arg(QLocale().quoteString(d->manager->deviceForAddress(session->destination())->name()), QLocale().quoteString(transfer->name())));\n    notification->insertAction(\"1reject\", tr(\"Decline\"));\n    notification->insertAction(\"2accept\", tr(\"Accept\"));\n    notification->setTimeout(0);\n    connect(notification, &tNotification::actionClicked, this, [ = ](QString key) {\n        if (key == \"1reject\") {\n            request.reject();\n        } else if (key == \"2accept\") {\n            QString transferName = transfer->name();\n\n            QString cachePath = QFile::decodeName(qgetenv(\"XDG_CACHE_HOME\"));\n            if (cachePath == \"\") cachePath = QDir::home().absoluteFilePath(\".cache\");\n            cachePath += \"/obexd/\";\n\n            QString temporaryPath = cachePath + transferName;\n            int number = 0;\n            while (QFile::exists(temporaryPath)) {\n                temporaryPath = cachePath + transferName + \"_\" + QString::number(number);\n                number++;\n            }\n\n            connect(transfer.data(), &BluezQt::ObexTransfer::statusChanged, this, [ = ](BluezQt::ObexTransfer::Status status) {\n                if (status == BluezQt::ObexTransfer::Complete) {\n                    //Move the file to a good place\n                    QString downloadsDir = QStandardPaths::writableLocation(QStandardPaths::DownloadLocation);\n                    if (!QDir(downloadsDir).exists()) QDir::root().mkpath(downloadsDir);\n\n                    QString permanantPath = QDir(downloadsDir).absoluteFilePath(transferName);\n                    int number = 0;\n                    while (QFile::exists(permanantPath)) {\n                        permanantPath = QDir(downloadsDir).absoluteFilePath(QStringLiteral(\"%1 (%2)\").arg(transferName, number));\n                        number++;\n                    }\n\n                    QFile::rename(temporaryPath, permanantPath);\n\n                    tNotification* notification = new tNotification();\n                    notification->setAppIcon(\"preferences-system-bluetooth\");\n                    notification->setAppName(tr(\"Bluetooth\"));\n                    notification->setSummary(tr(\"File received\"));\n                    notification->setText(tr(\"The file %1 has been received and can be found in your Downloads folder.\").arg(QLocale().quoteString(transferName)));\n                    notification->post();\n                } else if (status == BluezQt::ObexTransfer::Error) {\n                    tNotification* notification = new tNotification();\n                    notification->setAppIcon(\"preferences-system-bluetooth\");\n                    notification->setAppName(tr(\"Bluetooth\"));\n                    notification->setSummary(tr(\"File transfer failed\"));\n                    notification->setText(tr(\"The file %1 was unable to be received.\").arg(QLocale().quoteString(transferName)));\n                    notification->post();\n                }\n            });\n\n            request.accept(temporaryPath);\n        }\n    });\n    connect(notification, &tNotification::dismissed, this, [ = ] {\n        request.reject();\n    });\n    notification->post();\n\n    d->notification = notification;\n}\n\nvoid BtObex::cancel() {\n    if (d->notification) d->notification->dismiss();\n}\n\nvoid BtObex::release() {\n}\n"
  },
  {
    "path": "plugins/BluetoothPlugin/btobex.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2021 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef BTOBEX_H\n#define BTOBEX_H\n\n#include <BluezQt/ObexAgent>\n\nstruct BtObexPrivate;\nclass BtObex : public BluezQt::ObexAgent {\n        Q_OBJECT\n    public:\n        explicit BtObex(BluezQt::ManagerPtr manager, QObject* parent = nullptr);\n        ~BtObex();\n\n    signals:\n\n    private:\n        BtObexPrivate* d;\n\n        // ObexAgent interface\n    public:\n        QDBusObjectPath objectPath() const;\n        void authorizePush(BluezQt::ObexTransferPtr transfer, BluezQt::ObexSessionPtr session, const BluezQt::Request<QString>& request);\n        void cancel();\n        void release();\n};\n\n#endif // BTOBEX_H\n"
  },
  {
    "path": "plugins/BluetoothPlugin/chunk/bluetoothchunk.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2021 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"bluetoothchunk.h\"\n\n#include <statemanager.h>\n#include <barmanager.h>\n#include <QIcon>\n#include <BluezQt/Device>\n\nstruct BluetoothChunkPrivate {\n    BluezQt::ManagerPtr manager;\n};\n\nBluetoothChunk::BluetoothChunk(BluezQt::ManagerPtr manager) : IconTextChunk(\"bluetooth\") {\n    d = new BluetoothChunkPrivate();\n    d->manager = manager;\n\n    this->setIcon(QIcon::fromTheme(\"bluetooth\"));\n\n    connect(manager.data(), &BluezQt::Manager::deviceAdded, this, &BluetoothChunk::updateChunk);\n    connect(manager.data(), &BluezQt::Manager::deviceRemoved, this, &BluetoothChunk::updateChunk);\n    connect(manager.data(), &BluezQt::Manager::deviceChanged, this, &BluetoothChunk::updateChunk);\n    updateChunk();\n}\n\nBluetoothChunk::~BluetoothChunk() {\n    if (StateManager::barManager()->isChunkRegistered(this)) StateManager::barManager()->removeChunk(this);\n    delete d;\n}\n\nvoid BluetoothChunk::updateChunk() {\n    QVector<BluezQt::DevicePtr> activeDevices;\n    for (const BluezQt::DevicePtr& device : d->manager->devices()) {\n        if (device->isConnected()) activeDevices.append(device);\n    }\n\n    if (activeDevices.isEmpty()) {\n        if (StateManager::barManager()->isChunkRegistered(this)) StateManager::barManager()->removeChunk(this);\n    } else {\n        if (activeDevices.count() == 1) {\n            this->setText(activeDevices.first()->name());\n        } else {\n            this->setText(tr(\"%n devices connected\", nullptr, activeDevices.count()));\n        }\n\n        if (!StateManager::barManager()->isChunkRegistered(this)) StateManager::barManager()->addChunk(this);\n    }\n}\n"
  },
  {
    "path": "plugins/BluetoothPlugin/chunk/bluetoothchunk.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2021 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef BLUETOOTHCHUNK_H\n#define BLUETOOTHCHUNK_H\n\n#include <icontextchunk.h>\n#include <BluezQt/Manager>\n\nstruct BluetoothChunkPrivate;\nclass BluetoothChunk : public IconTextChunk {\n        Q_OBJECT\n    public:\n        explicit BluetoothChunk(BluezQt::ManagerPtr manager);\n        ~BluetoothChunk();\n\n    signals:\n\n    private:\n        BluetoothChunkPrivate* d;\n\n        void updateChunk();\n};\n\n#endif // BLUETOOTHCHUNK_H\n"
  },
  {
    "path": "plugins/BluetoothPlugin/defaults.json",
    "content": ""
  },
  {
    "path": "plugins/BluetoothPlugin/devicedelegate.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2021 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"devicedelegate.h\"\n\n#include \"bluetoothplugincommon.h\"\n#include <QPainter>\n#include <libcontemporary_global.h>\n#include <statemanager.h>\n#include <statuscentermanager.h>\n#include <tpaintcalculator.h>\n\n#include <BluezQt/DevicesModel>\n\nstruct DeviceDelegatePrivate {\n        bool isPair;\n\n        struct Rects {\n                QRect iconRect;\n                QRect textRect;\n                QRect descRect;\n                QRect arrowRect;\n\n                Rects(const QStyleOptionViewItem& option) {\n                    QRect newRect = option.rect;\n                    QPoint center = newRect.center();\n                    newRect.setWidth(StateManager::statusCenterManager()->preferredContentWidth());\n                    newRect.moveCenter(center);\n\n                    iconRect.setLeft(newRect.left() + SC_DPI(6));\n                    iconRect.setTop(newRect.top() + SC_DPI(6));\n                    iconRect.setBottom(iconRect.top() + SC_DPI(32));\n                    iconRect.setRight(iconRect.left() + SC_DPI(32));\n\n                    arrowRect.setSize(SC_DPI_T(QSize(16, 16), QSize));\n                    arrowRect.moveCenter(newRect.center());\n                    arrowRect.moveRight(newRect.right() - SC_DPI(6));\n\n                    textRect.setLeft(iconRect.right() + SC_DPI(6));\n                    textRect.setTop(newRect.top() + SC_DPI(6));\n                    textRect.setBottom(newRect.top() + option.fontMetrics.height() + SC_DPI(6));\n                    textRect.setRight(arrowRect.left() - SC_DPI(6));\n\n                    descRect.setLeft(iconRect.right() + SC_DPI(6));\n                    descRect.setTop(newRect.top() + option.fontMetrics.height() + SC_DPI(8));\n                    descRect.setBottom(newRect.top() + option.fontMetrics.height() * 2 + SC_DPI(6));\n                    descRect.setRight(arrowRect.left() - SC_DPI(6));\n                }\n        };\n};\n\nDeviceDelegate::DeviceDelegate(bool isPair, QObject* parent) :\n    QAbstractItemDelegate(parent) {\n    d = new DeviceDelegatePrivate();\n    d->isPair = isPair;\n}\n\nDeviceDelegate::~DeviceDelegate() {\n    delete d;\n}\n\nvoid DeviceDelegate::paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const {\n    painter->setFont(option.font);\n\n    tPaintCalculator calculator;\n    calculator.setPainter(painter);\n    calculator.setLayoutDirection(option.direction);\n    calculator.setDrawBounds(option.rect);\n\n    DeviceDelegatePrivate::Rects rects(option);\n    QString text = index.data().toString();\n    QString desc = BluetoothPluginCommon::stringForDeviceType(index.data(BluezQt::DevicesModel::TypeRole).value<BluezQt::Device::Type>());\n    QIcon icon = QIcon::fromTheme(index.data(BluezQt::DevicesModel::IconRole).toString());\n    bool active = index.data(BluezQt::DevicesModel::ConnectedRole).toBool();\n\n    if (option.state & QStyle::State_Selected) {\n        calculator.addRect(option.rect, [=](QRectF drawBounds) {\n            painter->setPen(Qt::transparent);\n            painter->setBrush(option.palette.color(QPalette::Highlight));\n            painter->drawRect(drawBounds);\n        });\n        calculator.addRect(rects.textRect, [=](QRectF drawBounds) {\n            painter->setBrush(Qt::transparent);\n            painter->setPen(option.palette.color(QPalette::HighlightedText));\n\n            if (!active && !d->isPair) painter->setOpacity(0.5);\n            painter->drawText(drawBounds, Qt::AlignLeading, text);\n        });\n        calculator.addRect(rects.descRect, [=](QRectF drawBounds) {\n            painter->drawText(drawBounds, Qt::AlignLeading, desc);\n        });\n    } else if (option.state & QStyle::State_MouseOver) {\n        calculator.addRect(option.rect, [=](QRectF drawBounds) {\n            QColor col = option.palette.color(QPalette::Highlight);\n            col.setAlpha(127);\n            painter->setBrush(col);\n            painter->setPen(Qt::transparent);\n            painter->drawRect(drawBounds);\n        });\n\n        calculator.addRect(rects.textRect, [=](QRectF drawBounds) {\n            if (!active && !d->isPair) painter->setOpacity(0.5);\n            painter->setBrush(Qt::transparent);\n            painter->setPen(option.palette.color(QPalette::WindowText));\n            painter->drawText(drawBounds, Qt::AlignLeading, text);\n        });\n        calculator.addRect(rects.descRect, [=](QRectF drawBounds) {\n            painter->setPen(option.palette.color(QPalette::Disabled, QPalette::WindowText));\n            painter->drawText(drawBounds, Qt::AlignLeading, desc);\n        });\n    } else {\n        calculator.addRect(rects.textRect, [=](QRectF drawBounds) {\n            if (!active && !d->isPair) painter->setOpacity(0.5);\n            painter->setPen(option.palette.color(QPalette::WindowText));\n            painter->drawText(drawBounds, Qt::AlignLeading, text);\n        });\n        calculator.addRect(rects.descRect, [=](QRectF drawBounds) {\n            painter->setPen(option.palette.color(QPalette::Disabled, QPalette::WindowText));\n            painter->drawText(drawBounds, Qt::AlignLeading, desc);\n        });\n    }\n\n    if (!icon.isNull()) {\n        calculator.addRect(rects.iconRect, [=](QRectF drawBounds) {\n            painter->drawPixmap(drawBounds.toRect(), icon.pixmap(rects.iconRect.size()));\n        });\n    }\n\n    calculator.addRect(rects.arrowRect, [=](QRectF drawBounds) {\n        painter->setOpacity(1);\n        painter->drawPixmap(drawBounds.toRect(), QIcon::fromTheme(\"go-next\").pixmap(rects.arrowRect.size()));\n    });\n\n    calculator.performPaint();\n}\n\nQSize DeviceDelegate::sizeHint(const QStyleOptionViewItem& option, const QModelIndex& index) const {\n    DeviceDelegatePrivate::Rects rects(option);\n\n    QRect u = rects.iconRect;\n    u = u.united(rects.textRect);\n    u = u.united(rects.descRect);\n    u.adjust(SC_DPI(-6), SC_DPI(-6), SC_DPI(6), SC_DPI(6));\n\n    return u.size();\n}\n"
  },
  {
    "path": "plugins/BluetoothPlugin/devicedelegate.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2021 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef DEVICEDELEGATE_H\n#define DEVICEDELEGATE_H\n\n#include <QAbstractItemDelegate>\n\nstruct DeviceDelegatePrivate;\nclass DeviceDelegate : public QAbstractItemDelegate {\n        Q_OBJECT\n    public:\n        explicit DeviceDelegate(bool isPair, QObject* parent = nullptr);\n        ~DeviceDelegate();\n\n    signals:\n\n    private:\n        DeviceDelegatePrivate* d;\n\n        // QAbstractItemDelegate interface\n    public:\n        void paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const;\n        QSize sizeHint(const QStyleOptionViewItem& option, const QModelIndex& index) const;\n};\n\n#endif // DEVICEDELEGATE_H\n"
  },
  {
    "path": "plugins/BluetoothPlugin/plugin.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"plugin.h\"\n\n#include \"btobex.h\"\n#include \"chunk/bluetoothchunk.h\"\n#include \"settings/bluetoothsettingspane.h\"\n#include <QDebug>\n#include <QDir>\n#include <localemanager.h>\n#include <statemanager.h>\n#include <statuscentermanager.h>\n#include <tapplication.h>\n#include <tsettings.h>\n\n#include <BluezQt/InitManagerJob>\n#include <BluezQt/PendingCall>\n\nstruct PluginPrivate {\n        BluezQt::ManagerPtr manager;\n        BtAgent* agent;\n        BtObex* obex;\n        BluetoothSettingsPane* bluetoothSettings;\n        BluetoothChunk* chunk;\n};\n\nPlugin::Plugin() {\n    d = new PluginPrivate();\n}\n\nPlugin::~Plugin() {\n    delete d;\n}\n\nvoid Plugin::activate() {\n    tApplication::addPluginTranslator(CNTP_TARGET_NAME);\n\n    tSettings::registerDefaults(QDir::cleanPath(qApp->applicationDirPath() + \"/../plugins/BluetoothPlugin/thedesk-bluetooth.conf\"));\n    tSettings::registerDefaults(\"/usr/share/defaults/thedesk-bluetooth.conf\");\n\n    d->manager = BluezQt::ManagerPtr(new BluezQt::Manager());\n    d->agent = new BtAgent();\n\n    d->bluetoothSettings = new BluetoothSettingsPane(d->manager, d->agent);\n    StateManager::statusCenterManager()->addPane(d->bluetoothSettings, StatusCenterManager::SystemSettings);\n\n    d->chunk = new BluetoothChunk(d->manager);\n    d->obex = new BtObex(d->manager);\n\n    BluezQt::PendingCall* startCall = BluezQt::Manager::startService();\n    connect(startCall, &BluezQt::PendingCall::finished, this, [=] {\n        BluezQt::InitManagerJob* initManagerJob = d->manager->init();\n        connect(initManagerJob, &BluezQt::InitManagerJob::result, this, [=] {\n            BluezQt::PendingCall* agentRegister = d->manager->registerAgent(d->agent);\n            connect(agentRegister, &BluezQt::PendingCall::finished, this, [=] {\n                d->manager->requestDefaultAgent(d->agent);\n            });\n        });\n        initManagerJob->start();\n    });\n}\n\nvoid Plugin::deactivate() {\n    d->obex->deleteLater();\n    d->agent->deleteLater();\n    d->chunk->deleteLater();\n    StateManager::statusCenterManager()->removePane(d->bluetoothSettings);\n    d->bluetoothSettings->deleteLater();\n    tApplication::removePluginTranslator(CNTP_TARGET_NAME);\n}\n"
  },
  {
    "path": "plugins/BluetoothPlugin/plugin.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef PLUGIN_H\n#define PLUGIN_H\n\n#include \"plugins/plugininterface.h\"\n\nstruct PluginPrivate;\nclass Plugin : public QObject,\n               public PluginInterface {\n        Q_OBJECT\n        Q_PLUGIN_METADATA(IID PluginInterface_iid FILE \"Plugin.json\")\n        Q_INTERFACES(PluginInterface)\n\n    public:\n        Plugin();\n        ~Plugin();\n\n    private:\n        PluginPrivate* d;\n\n        // PluginInterface interface\n    public:\n        void activate();\n        void deactivate();\n};\n\n#endif // PLUGIN_H\n"
  },
  {
    "path": "plugins/BluetoothPlugin/settings/bluetoothsettingspane.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"bluetoothsettingspane.h\"\n#include \"ui_bluetoothsettingspane.h\"\n\n#include <statemanager.h>\n#include <statuscentermanager.h>\n#include <quickswitch.h>\n#include <QDBusInterface>\n#include \"pairpopover.h\"\n#include \"devicepopover.h\"\n#include <tpopover.h>\n#include \"btagent.h\"\n#include \"devicedelegate.h\"\n\n#include <BluezQt/Manager>\n#include <BluezQt/DevicesModel>\n#include <BluezQt/Adapter>\n#include <BluezQt/PendingCall>\n#include <BluezQt/InitManagerJob>\n#include <QSortFilterProxyModel>\n\nstruct BluetoothSettingsPanePrivate {\n    QString currentHostname;\n\n    BluezQt::ManagerPtr manager;\n    BluezQt::AdapterPtr usableAdapter;\n    BtAgent* agent;\n\n    QuickSwitch* bluetoothSwitch;\n};\n\nBluetoothSettingsPane::BluetoothSettingsPane(BluezQt::ManagerPtr manager, BtAgent* agent) :\n    StatusCenterPane(),\n    ui(new Ui::BluetoothSettingsPane) {\n    ui->setupUi(this);\n\n    d = new BluetoothSettingsPanePrivate();\n    d->manager = manager;\n    d->agent = agent;\n\n    ui->titleLabel->setBackButtonIsMenu(true);\n    ui->titleLabel->setBackButtonShown(StateManager::instance()->statusCenterManager()->isHamburgerMenuRequired());\n    connect(StateManager::instance()->statusCenterManager(), &StatusCenterManager::isHamburgerMenuRequiredChanged, ui->titleLabel, &tTitleLabel::setBackButtonShown);\n\n    const int contentWidth = StateManager::instance()->statusCenterManager()->preferredContentWidth();\n    ui->actionsWidget->setFixedWidth(contentWidth);\n    ui->discoverabilityWidget->setFixedWidth(contentWidth);\n    ui->devicesLabel->setFixedWidth(contentWidth);\n\n    ui->bluetoothUnavailableIcon->setPixmap(QIcon::fromTheme(\"bluetooth\").pixmap(SC_DPI_T(QSize(128, 128), QSize)));\n    ui->bluetoothUnavailableIcon_2->setPixmap(QIcon::fromTheme(\"bluetooth\").pixmap(SC_DPI_T(QSize(128, 128), QSize)));\n    ui->stackedWidget->setCurrentAnimation(tStackedWidget::Fade);\n\n    QDBusConnection::systemBus().connect(\"org.freedesktop.hostname1\", \"/org/freedesktop/hostname1\", \"org.freedesktop.DBus.Properties\", \"PropertiesChanged\", this, SLOT(updateHostname()));\n    updateHostname();\n\n    d->bluetoothSwitch = new QuickSwitch(\"Bluetooth\");\n    d->bluetoothSwitch->setTitle(tr(\"Bluetooth\"));\n    connect(d->bluetoothSwitch, &QuickSwitch::toggled, this, [ = ](bool isEnabled) {\n        if (isEnabled) {\n            ui->enableBluetoothButton->click();\n        } else {\n            d->manager->setBluetoothBlocked(true);\n        }\n    });\n\n    BluezQt::DevicesModel* devicesModel = new BluezQt::DevicesModel(d->manager.data());\n    QSortFilterProxyModel* devicesFilter = new QSortFilterProxyModel();\n    devicesFilter->setSourceModel(devicesModel);\n    devicesFilter->setFilterRole(BluezQt::DevicesModel::PairedRole);\n    devicesFilter->setFilterFixedString(\"true\");\n    ui->devicesList->setModel(devicesFilter);\n    ui->devicesList->setItemDelegate(new DeviceDelegate(false));\n\n    connect(d->manager.data(), &BluezQt::Manager::adapterAdded, this, &BluetoothSettingsPane::updateUsableAdapter);\n    connect(d->manager.data(), &BluezQt::Manager::adapterRemoved, this, &BluetoothSettingsPane::updateUsableAdapter);\n    connect(d->manager.data(), &BluezQt::Manager::usableAdapterChanged, this, &BluetoothSettingsPane::updateUsableAdapter);\n    connect(d->manager.data(), &BluezQt::Manager::operationalChanged, this, &BluetoothSettingsPane::updateOperational);\n    connect(d->manager.data(), &BluezQt::Manager::bluetoothBlockedChanged, this, &BluetoothSettingsPane::updateOperational);\n    updateUsableAdapter();\n    updateOperational();\n}\n\nBluetoothSettingsPane::~BluetoothSettingsPane() {\n    delete d;\n    delete ui;\n}\n\nvoid BluetoothSettingsPane::on_titleLabel_backButtonClicked() {\n    StateManager::statusCenterManager()->showStatusCenterHamburgerMenu();\n}\n\nvoid BluetoothSettingsPane::updateHostname() {\n    QDBusInterface hostnamed(\"org.freedesktop.hostname1\", \"/org/freedesktop/hostname1\", \"org.freedesktop.hostname1\", QDBusConnection::systemBus());\n    QString hostname = hostnamed.property(\"PrettyHostname\").toString();\n    if (hostname.isEmpty()) hostname = hostnamed.property(\"Hostname\").toString();\n    d->currentHostname = hostname;\n\n    if (d->usableAdapter) d->usableAdapter->setName(hostname);\n\n    ui->discoverabilityMessage->setText(tr(\"To pair with this device, look for %1 on the other device.\").arg(\"<b>\" + hostname + \"</b>\"));\n}\n\nvoid BluetoothSettingsPane::updateUsableAdapter() {\n    if (d->usableAdapter) {\n        d->usableAdapter->disconnect(this);\n    }\n\n    //Find an adapter\n//    d->usableAdapter.clear();\n//    for (const BluezQt::AdapterPtr& adapter : d->manager->adapters()) {\n//        if (adapter->isPowered()) {\n//            d->usableAdapter = adapter;\n//            break;\n//        }\n//    }\n//    if (!d->usableAdapter && !d->manager->adapters().isEmpty()) d->usableAdapter = d->manager->adapters().first();\n    if (!d->manager->adapters().isEmpty()) {\n        d->usableAdapter = d->manager->adapters().at(0);\n    } else {\n        d->usableAdapter = nullptr;\n    }\n\n    if (d->usableAdapter) {\n        connect(d->usableAdapter.data(), &BluezQt::Adapter::poweredChanged, this, [ = ](bool powered) {\n            updateOperational();\n        });\n        connect(d->usableAdapter.data(), &BluezQt::Adapter::discoverableChanged, this, [ = ](bool discoverable) {\n            ui->visibilitySwitch->setChecked(discoverable);\n        });\n        ui->visibilitySwitch->setChecked(d->usableAdapter->isDiscoverable());\n\n        updateHostname();\n    }\n\n    updateOperational();\n}\n\nvoid BluetoothSettingsPane::updateOperational() {\n    QSignalBlocker blocker(d->bluetoothSwitch);\n    if (!d->manager->isOperational()) {\n        ui->stackedWidget->setCurrentWidget(ui->unavailablePage, false);\n        if (StateManager::statusCenterManager()->isSwitchRegistered(d->bluetoothSwitch)) StateManager::statusCenterManager()->removeSwitch(d->bluetoothSwitch);\n    } else if (d->manager->adapters().isEmpty()) {\n        ui->stackedWidget->setCurrentWidget(ui->unavailablePage, false);\n        if (StateManager::statusCenterManager()->isSwitchRegistered(d->bluetoothSwitch)) StateManager::statusCenterManager()->removeSwitch(d->bluetoothSwitch);\n    } else if (d->manager->isBluetoothBlocked() || d->usableAdapter == nullptr || !d->usableAdapter->isPowered()) {\n        ui->stackedWidget->setCurrentWidget(ui->disabledPage, false);\n        d->bluetoothSwitch->setChecked(false);\n        if (!StateManager::statusCenterManager()->isSwitchRegistered(d->bluetoothSwitch)) StateManager::statusCenterManager()->addSwitch(d->bluetoothSwitch);\n    } else {\n        ui->stackedWidget->setCurrentWidget(ui->mainPage, false);\n        d->bluetoothSwitch->setChecked(true);\n        if (!StateManager::statusCenterManager()->isSwitchRegistered(d->bluetoothSwitch)) StateManager::statusCenterManager()->addSwitch(d->bluetoothSwitch);\n    }\n}\n\nQString BluetoothSettingsPane::name() {\n    return \"BluetoothSettings\";\n}\n\nQString BluetoothSettingsPane::displayName() {\n    return tr(\"Bluetooth\");\n}\n\nQIcon BluetoothSettingsPane::icon() {\n    return QIcon::fromTheme(\"preferences-system-bluetooth\");\n}\n\nQWidget* BluetoothSettingsPane::leftPane() {\n    return nullptr;\n}\n\nvoid BluetoothSettingsPane::on_visibilitySwitch_toggled(bool checked) {\n    if (d->usableAdapter) d->usableAdapter->setDiscoverable(checked);\n}\n\nvoid BluetoothSettingsPane::on_pairButton_clicked() {\n    PairPopover* pairPopover = new PairPopover(d->manager.data(), d->agent);\n    tPopover* popover = new tPopover(pairPopover);\n    popover->setPopoverWidth(SC_DPI(600));\n    connect(pairPopover, &PairPopover::done, popover, &tPopover::dismiss);\n    connect(popover, &tPopover::dismissed, pairPopover, &PairPopover::deleteLater);\n    connect(popover, &tPopover::dismissed, popover, &tPopover::deleteLater);\n    popover->show(this->window());\n}\n\nvoid BluetoothSettingsPane::on_enableBluetoothButton_clicked() {\n    d->manager->setBluetoothBlocked(false);\n    if (!d->manager->adapters().isEmpty()) {\n        d->manager->adapters().at(0)->setPowered(true);\n    }\n}\n\nvoid BluetoothSettingsPane::on_devicesList_activated(const QModelIndex& index) {\n    BluezQt::AdapterPtr adapter = d->manager->adapterForAddress(index.data(BluezQt::DevicesModel::AdapterAddressRole).toString());\n    BluezQt::DevicePtr device = adapter->deviceForAddress(index.data(BluezQt::DevicesModel::AddressRole).toString());\n\n    DevicePopover* devicePopover = new DevicePopover(device);\n    tPopover* popover = new tPopover(devicePopover);\n    popover->setPopoverWidth(SC_DPI(600));\n    connect(devicePopover, &DevicePopover::done, popover, &tPopover::dismiss);\n    connect(popover, &tPopover::dismissed, devicePopover, &DevicePopover::deleteLater);\n    connect(popover, &tPopover::dismissed, popover, &tPopover::deleteLater);\n    popover->show(this->window());\n}\n\n\nvoid BluetoothSettingsPane::changeEvent(QEvent* event) {\n    if (event->type() == QEvent::LanguageChange) {\n        ui->retranslateUi(this);\n        emit displayNameChanged();\n    }\n}\n"
  },
  {
    "path": "plugins/BluetoothPlugin/settings/bluetoothsettingspane.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef BLUETOOTHSETTINGSPANE_H\n#define BLUETOOTHSETTINGSPANE_H\n\n#include <statuscenterpane.h>\n#include <BluezQt/Manager>\n#include \"btagent.h\"\n\nnamespace Ui {\n    class BluetoothSettingsPane;\n}\n\nstruct BluetoothSettingsPanePrivate;\nclass BluetoothSettingsPane : public StatusCenterPane {\n        Q_OBJECT\n\n    public:\n        explicit BluetoothSettingsPane(BluezQt::ManagerPtr manager, BtAgent* agent);\n        ~BluetoothSettingsPane();\n\n    private slots:\n        void on_titleLabel_backButtonClicked();\n\n        void updateHostname();\n\n        void on_visibilitySwitch_toggled(bool checked);\n\n        void on_pairButton_clicked();\n\n        void on_enableBluetoothButton_clicked();\n\n        void on_devicesList_activated(const QModelIndex& index);\n\n    private:\n        Ui::BluetoothSettingsPane* ui;\n        BluetoothSettingsPanePrivate* d;\n\n        void updateUsableAdapter();\n        void updateOperational();\n\n        // StatusCenterPane interface\n    public:\n        QString name();\n        QString displayName();\n        QIcon icon();\n        QWidget* leftPane();\n\n        // QWidget interface\n    protected:\n        void changeEvent(QEvent* event);\n};\n\n#endif // BLUETOOTHSETTINGSPANE_H\n"
  },
  {
    "path": "plugins/BluetoothPlugin/settings/bluetoothsettingspane.ui",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ui version=\"4.0\">\n <class>BluetoothSettingsPane</class>\n <widget class=\"QWidget\" name=\"BluetoothSettingsPane\">\n  <property name=\"geometry\">\n   <rect>\n    <x>0</x>\n    <y>0</y>\n    <width>664</width>\n    <height>458</height>\n   </rect>\n  </property>\n  <property name=\"windowTitle\">\n   <string notr=\"true\">Form</string>\n  </property>\n  <layout class=\"QVBoxLayout\" name=\"verticalLayout\">\n   <property name=\"spacing\">\n    <number>0</number>\n   </property>\n   <property name=\"leftMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"topMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"rightMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"bottomMargin\">\n    <number>0</number>\n   </property>\n   <item>\n    <widget class=\"tTitleLabel\" name=\"titleLabel\">\n     <property name=\"text\">\n      <string>Bluetooth</string>\n     </property>\n    </widget>\n   </item>\n   <item>\n    <widget class=\"tStackedWidget\" name=\"stackedWidget\">\n     <property name=\"currentIndex\">\n      <number>0</number>\n     </property>\n     <widget class=\"QWidget\" name=\"mainPage\">\n      <layout class=\"QVBoxLayout\" name=\"verticalLayout_4\">\n       <property name=\"spacing\">\n        <number>0</number>\n       </property>\n       <property name=\"leftMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"topMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"rightMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"bottomMargin\">\n        <number>0</number>\n       </property>\n       <item>\n        <widget class=\"QScrollArea\" name=\"scrollArea\">\n         <property name=\"frameShape\">\n          <enum>QFrame::NoFrame</enum>\n         </property>\n         <property name=\"widgetResizable\">\n          <bool>true</bool>\n         </property>\n         <widget class=\"QWidget\" name=\"scrollAreaWidgetContents\">\n          <property name=\"geometry\">\n           <rect>\n            <x>0</x>\n            <y>0</y>\n            <width>664</width>\n            <height>441</height>\n           </rect>\n          </property>\n          <layout class=\"QVBoxLayout\" name=\"verticalLayout_2\">\n           <property name=\"spacing\">\n            <number>0</number>\n           </property>\n           <property name=\"leftMargin\">\n            <number>0</number>\n           </property>\n           <property name=\"topMargin\">\n            <number>0</number>\n           </property>\n           <property name=\"rightMargin\">\n            <number>0</number>\n           </property>\n           <property name=\"bottomMargin\">\n            <number>0</number>\n           </property>\n           <item alignment=\"Qt::AlignHCenter\">\n            <widget class=\"QWidget\" name=\"actionsWidget\" native=\"true\">\n             <layout class=\"QVBoxLayout\" name=\"verticalLayout_3\">\n              <item>\n               <widget class=\"QLabel\" name=\"label\">\n                <property name=\"font\">\n                 <font>\n                  <weight>75</weight>\n                  <bold>true</bold>\n                 </font>\n                </property>\n                <property name=\"text\">\n                 <string>ACTIONS</string>\n                </property>\n               </widget>\n              </item>\n              <item>\n               <widget class=\"QPushButton\" name=\"pairButton\">\n                <property name=\"text\">\n                 <string>Pair New Device</string>\n                </property>\n               </widget>\n              </item>\n             </layout>\n            </widget>\n           </item>\n           <item>\n            <widget class=\"Line\" name=\"line\">\n             <property name=\"maximumSize\">\n              <size>\n               <width>16777215</width>\n               <height>1</height>\n              </size>\n             </property>\n             <property name=\"orientation\">\n              <enum>Qt::Horizontal</enum>\n             </property>\n            </widget>\n           </item>\n           <item alignment=\"Qt::AlignHCenter\">\n            <widget class=\"QWidget\" name=\"discoverabilityWidget\" native=\"true\">\n             <layout class=\"QGridLayout\" name=\"gridLayout\">\n              <item row=\"2\" column=\"0\">\n               <widget class=\"QLabel\" name=\"label_5\">\n                <property name=\"text\">\n                 <string>Visible to other devices</string>\n                </property>\n               </widget>\n              </item>\n              <item row=\"2\" column=\"1\">\n               <widget class=\"tSwitch\" name=\"visibilitySwitch\">\n                <property name=\"text\">\n                 <string notr=\"true\">VisibilitySwitch</string>\n                </property>\n               </widget>\n              </item>\n              <item row=\"1\" column=\"0\" colspan=\"2\">\n               <widget class=\"QLabel\" name=\"discoverabilityMessage\">\n                <property name=\"text\">\n                 <string notr=\"true\">TextLabel</string>\n                </property>\n               </widget>\n              </item>\n              <item row=\"0\" column=\"0\" colspan=\"2\">\n               <widget class=\"QLabel\" name=\"label_4\">\n                <property name=\"font\">\n                 <font>\n                  <weight>75</weight>\n                  <bold>true</bold>\n                 </font>\n                </property>\n                <property name=\"text\">\n                 <string>DISCOVERABILITY</string>\n                </property>\n               </widget>\n              </item>\n             </layout>\n            </widget>\n           </item>\n           <item>\n            <widget class=\"Line\" name=\"line_2\">\n             <property name=\"maximumSize\">\n              <size>\n               <width>16777215</width>\n               <height>1</height>\n              </size>\n             </property>\n             <property name=\"orientation\">\n              <enum>Qt::Horizontal</enum>\n             </property>\n            </widget>\n           </item>\n           <item>\n            <widget class=\"QWidget\" name=\"widget\" native=\"true\">\n             <layout class=\"QVBoxLayout\" name=\"verticalLayout_6\">\n              <property name=\"spacing\">\n               <number>0</number>\n              </property>\n              <property name=\"leftMargin\">\n               <number>0</number>\n              </property>\n              <property name=\"topMargin\">\n               <number>0</number>\n              </property>\n              <property name=\"rightMargin\">\n               <number>0</number>\n              </property>\n              <property name=\"bottomMargin\">\n               <number>0</number>\n              </property>\n              <item alignment=\"Qt::AlignHCenter\">\n               <widget class=\"QLabel\" name=\"devicesLabel\">\n                <property name=\"font\">\n                 <font>\n                  <weight>75</weight>\n                  <bold>true</bold>\n                 </font>\n                </property>\n                <property name=\"text\">\n                 <string>DEVICES</string>\n                </property>\n                <property name=\"margin\">\n                 <number>9</number>\n                </property>\n               </widget>\n              </item>\n              <item>\n               <widget class=\"QListView\" name=\"devicesList\">\n                <property name=\"frameShape\">\n                 <enum>QFrame::NoFrame</enum>\n                </property>\n               </widget>\n              </item>\n             </layout>\n            </widget>\n           </item>\n           <item>\n            <spacer name=\"verticalSpacer\">\n             <property name=\"orientation\">\n              <enum>Qt::Vertical</enum>\n             </property>\n             <property name=\"sizeHint\" stdset=\"0\">\n              <size>\n               <width>20</width>\n               <height>54</height>\n              </size>\n             </property>\n            </spacer>\n           </item>\n          </layout>\n         </widget>\n        </widget>\n       </item>\n      </layout>\n     </widget>\n     <widget class=\"QWidget\" name=\"unavailablePage\">\n      <layout class=\"QVBoxLayout\" name=\"verticalLayout_5\">\n       <item>\n        <spacer name=\"verticalSpacer_3\">\n         <property name=\"orientation\">\n          <enum>Qt::Vertical</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>20</width>\n           <height>40</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n       <item>\n        <widget class=\"QLabel\" name=\"label_2\">\n         <property name=\"font\">\n          <font>\n           <pointsize>20</pointsize>\n          </font>\n         </property>\n         <property name=\"text\">\n          <string>Bluetooth is unavailable</string>\n         </property>\n         <property name=\"alignment\">\n          <set>Qt::AlignCenter</set>\n         </property>\n        </widget>\n       </item>\n       <item>\n        <widget class=\"QLabel\" name=\"bluetoothUnavailableIcon\">\n         <property name=\"enabled\">\n          <bool>false</bool>\n         </property>\n         <property name=\"text\">\n          <string notr=\"true\">TextLabel</string>\n         </property>\n         <property name=\"alignment\">\n          <set>Qt::AlignCenter</set>\n         </property>\n        </widget>\n       </item>\n       <item>\n        <widget class=\"QLabel\" name=\"label_3\">\n         <property name=\"text\">\n          <string>Install a Bluetooth card to use Bluetooth</string>\n         </property>\n         <property name=\"alignment\">\n          <set>Qt::AlignCenter</set>\n         </property>\n        </widget>\n       </item>\n       <item>\n        <spacer name=\"verticalSpacer_2\">\n         <property name=\"orientation\">\n          <enum>Qt::Vertical</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>20</width>\n           <height>40</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n      </layout>\n     </widget>\n     <widget class=\"QWidget\" name=\"disabledPage\">\n      <layout class=\"QVBoxLayout\" name=\"verticalLayout_7\">\n       <item>\n        <spacer name=\"verticalSpacer_4\">\n         <property name=\"orientation\">\n          <enum>Qt::Vertical</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>20</width>\n           <height>148</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n       <item>\n        <widget class=\"QLabel\" name=\"label_6\">\n         <property name=\"font\">\n          <font>\n           <pointsize>20</pointsize>\n          </font>\n         </property>\n         <property name=\"text\">\n          <string>Bluetooth is disabled</string>\n         </property>\n         <property name=\"alignment\">\n          <set>Qt::AlignCenter</set>\n         </property>\n        </widget>\n       </item>\n       <item>\n        <widget class=\"QLabel\" name=\"bluetoothUnavailableIcon_2\">\n         <property name=\"enabled\">\n          <bool>false</bool>\n         </property>\n         <property name=\"text\">\n          <string notr=\"true\">TextLabel</string>\n         </property>\n         <property name=\"alignment\">\n          <set>Qt::AlignCenter</set>\n         </property>\n        </widget>\n       </item>\n       <item>\n        <widget class=\"QLabel\" name=\"label_7\">\n         <property name=\"text\">\n          <string>Switch Bluetooth on to connect to Bluetooth devices</string>\n         </property>\n         <property name=\"alignment\">\n          <set>Qt::AlignCenter</set>\n         </property>\n        </widget>\n       </item>\n       <item alignment=\"Qt::AlignHCenter\">\n        <widget class=\"QPushButton\" name=\"enableBluetoothButton\">\n         <property name=\"text\">\n          <string>Enable Bluetooth</string>\n         </property>\n         <property name=\"icon\">\n          <iconset theme=\"bluetooth\">\n           <normaloff>.</normaloff>.</iconset>\n         </property>\n        </widget>\n       </item>\n       <item>\n        <spacer name=\"verticalSpacer_5\">\n         <property name=\"orientation\">\n          <enum>Qt::Vertical</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>20</width>\n           <height>147</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n      </layout>\n     </widget>\n    </widget>\n   </item>\n  </layout>\n </widget>\n <customwidgets>\n  <customwidget>\n   <class>tTitleLabel</class>\n   <extends>QLabel</extends>\n   <header location=\"global\">ttitlelabel.h</header>\n   <slots>\n    <signal>backButtonClicked()</signal>\n   </slots>\n  </customwidget>\n  <customwidget>\n   <class>tStackedWidget</class>\n   <extends>QStackedWidget</extends>\n   <header location=\"global\">tstackedwidget.h</header>\n   <container>1</container>\n   <slots>\n    <signal>switchingFrame(int)</signal>\n   </slots>\n  </customwidget>\n  <customwidget>\n   <class>tSwitch</class>\n   <extends>QPushButton</extends>\n   <header location=\"global\">tswitch.h</header>\n  </customwidget>\n </customwidgets>\n <resources/>\n <connections/>\n</ui>\n"
  },
  {
    "path": "plugins/BluetoothPlugin/settings/devicepopover.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2021 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"devicepopover.h\"\n#include \"ui_devicepopover.h\"\n\n#include \"bluetoothplugincommon.h\"\n#include <BluezQt/Adapter>\n#include <BluezQt/PendingCall>\n#include <ttoast.h>\n\nstruct DevicePopoverPrivate {\n        BluezQt::DevicePtr device;\n};\n\nDevicePopover::DevicePopover(BluezQt::DevicePtr device, QWidget* parent) :\n    QWidget(parent),\n    ui(new Ui::DevicePopover) {\n    ui->setupUi(this);\n    d = new DevicePopoverPrivate();\n    d->device = device;\n\n    ui->titleLabel->setBackButtonShown(true);\n\n    ui->titleLabel->setText(device->name());\n    ui->iconLabel->setPixmap(QIcon::fromTheme(device->icon()).pixmap(SC_DPI_T(QSize(64, 64), QSize)));\n    ui->nameLabel->setText(device->name());\n    ui->typeLabel->setText(BluetoothPluginCommon::stringForDeviceType(device->type()));\n\n    connect(d->device.data(), &BluezQt::Device::connectedChanged, this, &DevicePopover::updateDevice);\n    updateDevice();\n\n    ui->removeButton->setProperty(\"type\", \"destructive\");\n}\n\nDevicePopover::~DevicePopover() {\n    delete d;\n    delete ui;\n}\n\nvoid DevicePopover::on_titleLabel_backButtonClicked() {\n    emit done();\n}\n\nvoid DevicePopover::on_removeButton_clicked() {\n    // TODO: Ask\n    d->device->adapter()->removeDevice(d->device);\n    emit done();\n}\n\nvoid DevicePopover::on_connectButton_clicked() {\n    BluezQt::PendingCall* call = d->device->connectToDevice();\n    connect(call, &BluezQt::PendingCall::finished, this, [=] {\n        if (call->error() != BluezQt::PendingCall::NoError) {\n            tToast* toast = new tToast();\n            toast->setTitle(tr(\"Failed to connect\"));\n            switch (call->error()) {\n                default:\n                    toast->setText(tr(\"Connecting to %1 failed.\").arg(QLocale().quoteString(d->device->name())));\n            }\n            connect(toast, &tToast::dismissed, toast, &tToast::deleteLater);\n            toast->show(this);\n        }\n    });\n}\n\nvoid DevicePopover::on_disconnectButton_clicked() {\n    d->device->disconnectFromDevice();\n}\n\nvoid DevicePopover::updateDevice() {\n    if (d->device->isConnected()) {\n        ui->connectButton->setVisible(false);\n        ui->disconnectButton->setVisible(true);\n    } else {\n        ui->connectButton->setVisible(true);\n        ui->disconnectButton->setVisible(false);\n    }\n}\n"
  },
  {
    "path": "plugins/BluetoothPlugin/settings/devicepopover.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2021 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef DEVICEPOPOVER_H\n#define DEVICEPOPOVER_H\n\n#include <QWidget>\n#include <BluezQt/Device>\n\nnamespace Ui {\n    class DevicePopover;\n}\n\nstruct DevicePopoverPrivate;\nclass DevicePopover : public QWidget {\n        Q_OBJECT\n\n    public:\n        explicit DevicePopover(BluezQt::DevicePtr device, QWidget* parent = nullptr);\n        ~DevicePopover();\n\n    private slots:\n        void on_titleLabel_backButtonClicked();\n\n        void on_removeButton_clicked();\n\n        void on_connectButton_clicked();\n\n        void on_disconnectButton_clicked();\n\n    signals:\n        void done();\n\n    private:\n        Ui::DevicePopover* ui;\n        DevicePopoverPrivate* d;\n\n        void updateDevice();\n};\n\n#endif // DEVICEPOPOVER_H\n"
  },
  {
    "path": "plugins/BluetoothPlugin/settings/devicepopover.ui",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ui version=\"4.0\">\n <class>DevicePopover</class>\n <widget class=\"QWidget\" name=\"DevicePopover\">\n  <property name=\"geometry\">\n   <rect>\n    <x>0</x>\n    <y>0</y>\n    <width>400</width>\n    <height>300</height>\n   </rect>\n  </property>\n  <property name=\"windowTitle\">\n   <string notr=\"true\">Form</string>\n  </property>\n  <layout class=\"QVBoxLayout\" name=\"verticalLayout\">\n   <property name=\"spacing\">\n    <number>0</number>\n   </property>\n   <property name=\"leftMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"topMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"rightMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"bottomMargin\">\n    <number>0</number>\n   </property>\n   <item>\n    <widget class=\"QStackedWidget\" name=\"stackedWidget\">\n     <widget class=\"QWidget\" name=\"mainPage\">\n      <layout class=\"QVBoxLayout\" name=\"verticalLayout_2\">\n       <property name=\"spacing\">\n        <number>0</number>\n       </property>\n       <property name=\"leftMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"topMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"rightMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"bottomMargin\">\n        <number>0</number>\n       </property>\n       <item>\n        <widget class=\"tTitleLabel\" name=\"titleLabel\">\n         <property name=\"text\">\n          <string notr=\"true\">Device</string>\n         </property>\n        </widget>\n       </item>\n       <item>\n        <widget class=\"QWidget\" name=\"widget\" native=\"true\">\n         <layout class=\"QHBoxLayout\" name=\"horizontalLayout\">\n          <item>\n           <widget class=\"QLabel\" name=\"iconLabel\">\n            <property name=\"text\">\n             <string notr=\"true\">TextLabel</string>\n            </property>\n           </widget>\n          </item>\n          <item>\n           <layout class=\"QVBoxLayout\" name=\"verticalLayout_3\">\n            <item>\n             <widget class=\"QLabel\" name=\"nameLabel\">\n              <property name=\"sizePolicy\">\n               <sizepolicy hsizetype=\"Expanding\" vsizetype=\"Preferred\">\n                <horstretch>0</horstretch>\n                <verstretch>0</verstretch>\n               </sizepolicy>\n              </property>\n              <property name=\"text\">\n               <string notr=\"true\">TextLabel</string>\n              </property>\n             </widget>\n            </item>\n            <item>\n             <widget class=\"QLabel\" name=\"typeLabel\">\n              <property name=\"enabled\">\n               <bool>false</bool>\n              </property>\n              <property name=\"text\">\n               <string notr=\"true\">TextLabel</string>\n              </property>\n             </widget>\n            </item>\n           </layout>\n          </item>\n         </layout>\n        </widget>\n       </item>\n       <item>\n        <layout class=\"QVBoxLayout\" name=\"verticalLayout_4\">\n         <property name=\"spacing\">\n          <number>6</number>\n         </property>\n         <property name=\"leftMargin\">\n          <number>9</number>\n         </property>\n         <property name=\"topMargin\">\n          <number>9</number>\n         </property>\n         <property name=\"rightMargin\">\n          <number>9</number>\n         </property>\n         <property name=\"bottomMargin\">\n          <number>6</number>\n         </property>\n         <item>\n          <widget class=\"QLabel\" name=\"label\">\n           <property name=\"font\">\n            <font>\n             <weight>75</weight>\n             <bold>true</bold>\n            </font>\n           </property>\n           <property name=\"text\">\n            <string>ACTIONS</string>\n           </property>\n          </widget>\n         </item>\n        </layout>\n       </item>\n       <item>\n        <widget class=\"QPushButton\" name=\"connectButton\">\n         <property name=\"text\">\n          <string>Connect</string>\n         </property>\n        </widget>\n       </item>\n       <item>\n        <widget class=\"QPushButton\" name=\"disconnectButton\">\n         <property name=\"text\">\n          <string>Disconnect</string>\n         </property>\n        </widget>\n       </item>\n       <item>\n        <widget class=\"QPushButton\" name=\"removeButton\">\n         <property name=\"text\">\n          <string>Remove</string>\n         </property>\n        </widget>\n       </item>\n       <item>\n        <spacer name=\"verticalSpacer\">\n         <property name=\"orientation\">\n          <enum>Qt::Vertical</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>20</width>\n           <height>113</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n      </layout>\n     </widget>\n     <widget class=\"QWidget\" name=\"page_2\"/>\n    </widget>\n   </item>\n  </layout>\n </widget>\n <customwidgets>\n  <customwidget>\n   <class>tTitleLabel</class>\n   <extends>QLabel</extends>\n   <header location=\"global\">ttitlelabel.h</header>\n   <slots>\n    <signal>backButtonClicked()</signal>\n   </slots>\n  </customwidget>\n </customwidgets>\n <resources/>\n <connections/>\n</ui>\n"
  },
  {
    "path": "plugins/BluetoothPlugin/settings/pairpopover.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2021 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"pairpopover.h\"\n#include \"ui_pairpopover.h\"\n\n#include <BluezQt/Adapter>\n#include <BluezQt/DevicesModel>\n#include <BluezQt/Device>\n#include <BluezQt/PendingCall>\n#include <QSortFilterProxyModel>\n#include <ttoast.h>\n#include \"btagent.h\"\n#include \"devicedelegate.h\"\n\nstruct PairPopoverPrivate {\n    BluezQt::Manager* manager;\n    BluezQt::AdapterPtr adapter;\n    BtAgent* agent;\n\n    tPromiseFunctions<QString>::SuccessFunction pairSuccessFunction;\n    tPromiseFunctions<QString>::FailureFunction pairFailFunction;\n};\n\nPairPopover::PairPopover(BluezQt::Manager* manager, BtAgent* agent, QWidget* parent) :\n    QWidget(parent),\n    ui(new Ui::PairPopover) {\n    ui->setupUi(this);\n    d = new PairPopoverPrivate();\n    d->manager = manager;\n    d->adapter = d->manager->usableAdapter();\n    d->agent = agent;\n\n    ui->titleLabel->setBackButtonShown(true);\n    ui->confirmCodeTitleLabel->setBackButtonShown(true);\n    ui->confirmCodeReturnIcon->setPixmap(QIcon::fromTheme(\"key-enter\").pixmap(SC_DPI_T(QSize(16, 16), QSize)));\n\n    BluezQt::DevicesModel* devicesModel = new BluezQt::DevicesModel(d->manager);\n    QSortFilterProxyModel* devicesFilter = new QSortFilterProxyModel();\n    devicesFilter->setSourceModel(devicesModel);\n    devicesFilter->setFilterRole(BluezQt::DevicesModel::PairedRole);\n    devicesFilter->setFilterFixedString(\"false\");\n    QSortFilterProxyModel* devicesFilter2 = new QSortFilterProxyModel();\n    devicesFilter2->setSourceModel(devicesFilter);\n    devicesFilter2->setFilterRole(BluezQt::DevicesModel::AdapterAddressRole);\n    devicesFilter2->setFilterFixedString(d->adapter->address());\n    ui->pairList->setModel(devicesFilter2);\n    ui->pairList->setItemDelegate(new DeviceDelegate(true));\n\n    d->adapter->startDiscovery();\n}\n\nPairPopover::~PairPopover() {\n    d->adapter->stopDiscovery();\n    delete d;\n    delete ui;\n}\n\ntPromise<QString>* PairPopover::triggerPairConfirmation(PairPopover::PairConfirmationType pairType, QString pinCode) {\n    return TPROMISE_CREATE_SAME_THREAD(QString, {\n        d->pairSuccessFunction = res;\n        d->pairFailFunction = rej;\n\n        switch (pairType) {\n            case PairPopover::ConfirmPinCode:\n                ui->stackedWidget->setCurrentWidget(ui->confirmCodePage);\n                ui->confirmCodeActionLabel->setText(\"Confirm this pairing code\");\n                ui->confirmCodeSubtitle->setVisible(false);\n                ui->confirmCodeText->setText(pinCode);\n                ui->confirmCodeReturnIcon->setVisible(false);\n                ui->confirmCodeAcceptButton->setVisible(true);\n                break;\n            case PairPopover::KeyPinCode:\n                ui->stackedWidget->setCurrentWidget(ui->confirmCodePage);\n                ui->confirmCodeActionLabel->setText(\"Key this in on the device\");\n                ui->confirmCodeSubtitle->setText(tr(\"Then press ENTER or RETURN.\"));\n                ui->confirmCodeSubtitle->setVisible(true);\n                ui->confirmCodeText->setText(pinCode);\n                ui->confirmCodeReturnIcon->setVisible(true);\n                ui->confirmCodeAcceptButton->setVisible(false);\n                break;\n        }\n    });\n}\n\nvoid PairPopover::cancelPendingPairing() {\n//    if (d->pairFailFunction) d->pairFailFunction(\"Cancelled\");\n}\n\nvoid PairPopover::on_titleLabel_backButtonClicked() {\n    emit done();\n}\n\nvoid PairPopover::on_pairList_activated(const QModelIndex& index) {\n    ui->stackedWidget->setCurrentWidget(ui->loadingPage);\n\n    BluezQt::DevicePtr device = d->adapter->deviceForAddress(index.data(BluezQt::DevicesModel::AddressRole).toString());\n    d->agent->capturePairRequests(device, this);\n    ui->deviceNameConfirmCode->setText(device->name());\n\n    BluezQt::PendingCall* pairRequest = device->pair();\n    connect(pairRequest, &BluezQt::PendingCall::finished, this, [ = ] {\n        d->agent->capturePairRequests(nullptr, nullptr);\n\n        if (pairRequest->error() == BluezQt::PendingCall::NoError) {\n            device->setTrusted(true);\n            device->connectToDevice();\n            emit done();\n        } else {\n            ui->stackedWidget->setCurrentWidget(ui->deviceSelectionPage);\n\n\n            tToast* toast = new tToast();\n            toast->setTitle(tr(\"Failed to pair\"));\n            switch (pairRequest->error()) {\n                case BluezQt::PendingCall::AuthenticationFailed:\n                    toast->setText(tr(\"Pairing with %1 failed because the pairing code was incorrect.\").arg(QLocale().quoteString(device->name())));\n                    break;\n                case BluezQt::PendingCall::AuthenticationRejected:\n                    toast->setText(tr(\"Pairing with %1 failed because the device rejected the pairing request.\").arg(QLocale().quoteString(device->name())));\n                    break;\n                case BluezQt::PendingCall::AuthenticationTimeout:\n                    toast->setText(tr(\"Pairing with %1 failed because the pairing code was not confirmed in time.\").arg(QLocale().quoteString(device->name())));\n                    break;\n                default:\n                    toast->setText(tr(\"Pairing with %1 failed.\").arg(QLocale().quoteString(device->name())));\n            }\n            connect(toast, &tToast::dismissed, toast, &tToast::deleteLater);\n            toast->show(this);\n        }\n    });\n}\n\nvoid PairPopover::on_confirmCodeAcceptButton_clicked() {\n    ui->stackedWidget->setCurrentWidget(ui->loadingPage);\n    d->pairSuccessFunction(\"\");\n}\n\nvoid PairPopover::on_confirmCodeTitleLabel_backButtonClicked() {\n    ui->stackedWidget->setCurrentWidget(ui->loadingPage);\n    d->pairFailFunction(\"Failure\");\n}\n"
  },
  {
    "path": "plugins/BluetoothPlugin/settings/pairpopover.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2021 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef PAIRPOPOVER_H\n#define PAIRPOPOVER_H\n\n#include <QWidget>\n#include <tpromise.h>\n#include <BluezQt/Manager>\n\nnamespace Ui {\n    class PairPopover;\n}\n\nstruct PairPopoverPrivate;\nclass BtAgent;\nclass PairPopover : public QWidget {\n        Q_OBJECT\n\n    public:\n        explicit PairPopover(BluezQt::Manager* manager, BtAgent* agent, QWidget* parent = nullptr);\n        ~PairPopover();\n\n        enum PairConfirmationType {\n            ConfirmPinCode,\n            KeyPinCode\n        };\n\n        tPromise<QString>* triggerPairConfirmation(PairConfirmationType pairType, QString pinCode);\n        void cancelPendingPairing();\n\n    signals:\n        void done();\n\n    private slots:\n        void on_titleLabel_backButtonClicked();\n\n        void on_pairList_activated(const QModelIndex& index);\n\n        void on_confirmCodeAcceptButton_clicked();\n\n        void on_confirmCodeTitleLabel_backButtonClicked();\n\n    private:\n        Ui::PairPopover* ui;\n        PairPopoverPrivate* d;\n};\n\n#endif // PAIRPOPOVER_H\n"
  },
  {
    "path": "plugins/BluetoothPlugin/settings/pairpopover.ui",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ui version=\"4.0\">\n <class>PairPopover</class>\n <widget class=\"QWidget\" name=\"PairPopover\">\n  <property name=\"geometry\">\n   <rect>\n    <x>0</x>\n    <y>0</y>\n    <width>616</width>\n    <height>699</height>\n   </rect>\n  </property>\n  <property name=\"windowTitle\">\n   <string notr=\"true\">Form</string>\n  </property>\n  <layout class=\"QVBoxLayout\" name=\"verticalLayout\">\n   <property name=\"spacing\">\n    <number>0</number>\n   </property>\n   <property name=\"leftMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"topMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"rightMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"bottomMargin\">\n    <number>0</number>\n   </property>\n   <item>\n    <widget class=\"QStackedWidget\" name=\"stackedWidget\">\n     <property name=\"currentIndex\">\n      <number>0</number>\n     </property>\n     <widget class=\"QWidget\" name=\"deviceSelectionPage\">\n      <layout class=\"QVBoxLayout\" name=\"verticalLayout_2\">\n       <property name=\"spacing\">\n        <number>0</number>\n       </property>\n       <property name=\"leftMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"topMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"rightMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"bottomMargin\">\n        <number>0</number>\n       </property>\n       <item>\n        <widget class=\"tTitleLabel\" name=\"titleLabel\">\n         <property name=\"text\">\n          <string>Pair Device</string>\n         </property>\n        </widget>\n       </item>\n       <item>\n        <widget class=\"QLabel\" name=\"label\">\n         <property name=\"text\">\n          <string>To get started, ensure the device you want to pair is visible. This may be achieved by opening the Bluetooth settings or pressing a button on the other device.</string>\n         </property>\n         <property name=\"wordWrap\">\n          <bool>true</bool>\n         </property>\n         <property name=\"margin\">\n          <number>9</number>\n         </property>\n        </widget>\n       </item>\n       <item>\n        <widget class=\"Line\" name=\"line\">\n         <property name=\"maximumSize\">\n          <size>\n           <width>16777215</width>\n           <height>1</height>\n          </size>\n         </property>\n         <property name=\"orientation\">\n          <enum>Qt::Horizontal</enum>\n         </property>\n        </widget>\n       </item>\n       <item>\n        <widget class=\"QListView\" name=\"pairList\">\n         <property name=\"frameShape\">\n          <enum>QFrame::NoFrame</enum>\n         </property>\n        </widget>\n       </item>\n      </layout>\n     </widget>\n     <widget class=\"QWidget\" name=\"loadingPage\">\n      <layout class=\"QGridLayout\" name=\"gridLayout\">\n       <item row=\"0\" column=\"1\">\n        <spacer name=\"verticalSpacer\">\n         <property name=\"orientation\">\n          <enum>Qt::Vertical</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>20</width>\n           <height>297</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n       <item row=\"1\" column=\"0\">\n        <spacer name=\"horizontalSpacer\">\n         <property name=\"orientation\">\n          <enum>Qt::Horizontal</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>241</width>\n           <height>20</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n       <item row=\"1\" column=\"1\">\n        <widget class=\"tCircularSpinner\" name=\"widget\" native=\"true\"/>\n       </item>\n       <item row=\"1\" column=\"2\">\n        <spacer name=\"horizontalSpacer_2\">\n         <property name=\"orientation\">\n          <enum>Qt::Horizontal</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>240</width>\n           <height>20</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n       <item row=\"2\" column=\"1\">\n        <spacer name=\"verticalSpacer_2\">\n         <property name=\"orientation\">\n          <enum>Qt::Vertical</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>20</width>\n           <height>297</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n      </layout>\n     </widget>\n     <widget class=\"QWidget\" name=\"confirmCodePage\">\n      <layout class=\"QGridLayout\" name=\"gridLayout_2\">\n       <property name=\"leftMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"topMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"rightMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"bottomMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"spacing\">\n        <number>0</number>\n       </property>\n       <item row=\"2\" column=\"2\">\n        <spacer name=\"horizontalSpacer_4\">\n         <property name=\"orientation\">\n          <enum>Qt::Horizontal</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>40</width>\n           <height>20</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n       <item row=\"2\" column=\"0\">\n        <spacer name=\"horizontalSpacer_3\">\n         <property name=\"orientation\">\n          <enum>Qt::Horizontal</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>55</width>\n           <height>20</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n       <item row=\"3\" column=\"1\">\n        <spacer name=\"verticalSpacer_4\">\n         <property name=\"orientation\">\n          <enum>Qt::Vertical</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>20</width>\n           <height>235</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n       <item row=\"2\" column=\"1\">\n        <widget class=\"QFrame\" name=\"lockFrame_2\">\n         <property name=\"minimumSize\">\n          <size>\n           <width>500</width>\n           <height>0</height>\n          </size>\n         </property>\n         <property name=\"autoFillBackground\">\n          <bool>false</bool>\n         </property>\n         <property name=\"frameShape\">\n          <enum>QFrame::NoFrame</enum>\n         </property>\n         <property name=\"frameShadow\">\n          <enum>QFrame::Plain</enum>\n         </property>\n         <property name=\"lineWidth\">\n          <number>0</number>\n         </property>\n         <layout class=\"QVBoxLayout\" name=\"verticalLayout_7\">\n          <item>\n           <widget class=\"QLabel\" name=\"deviceNameConfirmCode\">\n            <property name=\"font\">\n             <font>\n              <pointsize>15</pointsize>\n             </font>\n            </property>\n            <property name=\"text\">\n             <string notr=\"true\">Device Name</string>\n            </property>\n            <property name=\"buddy\">\n             <cstring></cstring>\n            </property>\n           </widget>\n          </item>\n          <item>\n           <widget class=\"QLabel\" name=\"confirmCodeActionLabel\">\n            <property name=\"font\">\n             <font>\n              <pointsize>20</pointsize>\n             </font>\n            </property>\n            <property name=\"text\">\n             <string notr=\"true\">Confirm this pairing code</string>\n            </property>\n           </widget>\n          </item>\n          <item>\n           <widget class=\"QLabel\" name=\"confirmCodeSubtitle\">\n            <property name=\"enabled\">\n             <bool>false</bool>\n            </property>\n            <property name=\"text\">\n             <string notr=\"true\">TextLabel</string>\n            </property>\n           </widget>\n          </item>\n          <item>\n           <spacer name=\"verticalSpacer_9\">\n            <property name=\"orientation\">\n             <enum>Qt::Vertical</enum>\n            </property>\n            <property name=\"sizeType\">\n             <enum>QSizePolicy::Fixed</enum>\n            </property>\n            <property name=\"sizeHint\" stdset=\"0\">\n             <size>\n              <width>20</width>\n              <height>40</height>\n             </size>\n            </property>\n           </spacer>\n          </item>\n          <item>\n           <layout class=\"QHBoxLayout\" name=\"horizontalLayout_9\">\n            <property name=\"bottomMargin\">\n             <number>0</number>\n            </property>\n            <item>\n             <widget class=\"QWidget\" name=\"networkKeyContainer_2\" native=\"true\">\n              <property name=\"autoFillBackground\">\n               <bool>true</bool>\n              </property>\n              <layout class=\"QHBoxLayout\" name=\"horizontalLayout_2\">\n               <property name=\"leftMargin\">\n                <number>0</number>\n               </property>\n               <property name=\"topMargin\">\n                <number>0</number>\n               </property>\n               <property name=\"rightMargin\">\n                <number>0</number>\n               </property>\n               <property name=\"bottomMargin\">\n                <number>0</number>\n               </property>\n               <item>\n                <widget class=\"QLabel\" name=\"confirmCodeText\">\n                 <property name=\"sizePolicy\">\n                  <sizepolicy hsizetype=\"Expanding\" vsizetype=\"Preferred\">\n                   <horstretch>0</horstretch>\n                   <verstretch>0</verstretch>\n                  </sizepolicy>\n                 </property>\n                 <property name=\"font\">\n                  <font>\n                   <pointsize>30</pointsize>\n                  </font>\n                 </property>\n                 <property name=\"text\">\n                  <string notr=\"true\">TextLabel</string>\n                 </property>\n                 <property name=\"alignment\">\n                  <set>Qt::AlignCenter</set>\n                 </property>\n                </widget>\n               </item>\n              </layout>\n             </widget>\n            </item>\n            <item>\n             <widget class=\"QLabel\" name=\"confirmCodeReturnIcon\">\n              <property name=\"text\">\n               <string notr=\"true\">Return</string>\n              </property>\n             </widget>\n            </item>\n            <item>\n             <widget class=\"QPushButton\" name=\"confirmCodeAcceptButton\">\n              <property name=\"sizePolicy\">\n               <sizepolicy hsizetype=\"Preferred\" vsizetype=\"Preferred\">\n                <horstretch>0</horstretch>\n                <verstretch>0</verstretch>\n               </sizepolicy>\n              </property>\n              <property name=\"text\">\n               <string/>\n              </property>\n              <property name=\"icon\">\n               <iconset theme=\"go-next\">\n                <normaloff>../../NetworkPlugin/statusCenter/popovers</normaloff>../../NetworkPlugin/statusCenter/popovers</iconset>\n              </property>\n              <property name=\"default\">\n               <bool>false</bool>\n              </property>\n              <property name=\"flat\">\n               <bool>true</bool>\n              </property>\n             </widget>\n            </item>\n           </layout>\n          </item>\n         </layout>\n        </widget>\n       </item>\n       <item row=\"1\" column=\"1\">\n        <spacer name=\"verticalSpacer_3\">\n         <property name=\"orientation\">\n          <enum>Qt::Vertical</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>20</width>\n           <height>235</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n       <item row=\"0\" column=\"0\" colspan=\"3\">\n        <widget class=\"tTitleLabel\" name=\"confirmCodeTitleLabel\">\n         <property name=\"text\">\n          <string>Confirm Pairing Code</string>\n         </property>\n        </widget>\n       </item>\n      </layout>\n     </widget>\n    </widget>\n   </item>\n  </layout>\n </widget>\n <customwidgets>\n  <customwidget>\n   <class>tTitleLabel</class>\n   <extends>QLabel</extends>\n   <header location=\"global\">ttitlelabel.h</header>\n   <slots>\n    <signal>backButtonClicked()</signal>\n   </slots>\n  </customwidget>\n  <customwidget>\n   <class>tCircularSpinner</class>\n   <extends>QWidget</extends>\n   <header location=\"global\">tcircularspinner.h</header>\n   <container>1</container>\n  </customwidget>\n </customwidgets>\n <resources/>\n <connections/>\n</ui>\n"
  },
  {
    "path": "plugins/BluetoothPlugin/thedesk-bluetooth.conf",
    "content": ""
  },
  {
    "path": "plugins/BluetoothPlugin/translations/ar_SA.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"ar_SA\" sourcelanguage=\"en_US\">\n<context>\n    <name>BluetoothChunk</name>\n    <message numerus=\"yes\">\n        <location filename=\"../chunk/bluetoothchunk.cpp\" line=\"60\"/>\n        <source>%n devices connected</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n        </translation>\n    </message>\n</context>\n<context>\n    <name>BluetoothPluginCommon</name>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"29\"/>\n        <source>Phone</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"31\"/>\n        <source>Modem</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"33\"/>\n        <source>Computer</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"35\"/>\n        <source>Networking</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"37\"/>\n        <source>Headset</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"39\"/>\n        <source>Headphones</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"41\"/>\n        <source>Audio/Video</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"43\"/>\n        <source>Keyboard</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"45\"/>\n        <source>Mouse</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"47\"/>\n        <source>Gamepad</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"49\"/>\n        <source>Drawing Tablet</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"51\"/>\n        <source>Peripheral</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"53\"/>\n        <source>Camera</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"55\"/>\n        <source>Printer</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"57\"/>\n        <source>Imaging</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"59\"/>\n        <source>Wearable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"61\"/>\n        <source>Toy</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"63\"/>\n        <source>Health</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"65\"/>\n        <source>Unknown</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>BluetoothSettingsPane</name>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"35\"/>\n        <location filename=\"../settings/bluetoothsettingspane.cpp\" line=\"76\"/>\n        <location filename=\"../settings/bluetoothsettingspane.cpp\" line=\"181\"/>\n        <source>Bluetooth</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"106\"/>\n        <source>ACTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"113\"/>\n        <source>Pair New Device</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"139\"/>\n        <source>Visible to other devices</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"166\"/>\n        <source>DISCOVERABILITY</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"213\"/>\n        <source>DEVICES</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"272\"/>\n        <source>Bluetooth is unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"295\"/>\n        <source>Install a Bluetooth card to use Bluetooth</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"340\"/>\n        <source>Bluetooth is disabled</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"363\"/>\n        <source>Switch Bluetooth on to connect to Bluetooth devices</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"373\"/>\n        <source>Enable Bluetooth</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.cpp\" line=\"119\"/>\n        <source>To pair with this device, look for %1 on the other device.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>BtAgent</name>\n    <message>\n        <location filename=\"../btagent.cpp\" line=\"89\"/>\n        <location filename=\"../btagent.cpp\" line=\"119\"/>\n        <source>Bluetooth</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btagent.cpp\" line=\"90\"/>\n        <location filename=\"../btagent.cpp\" line=\"120\"/>\n        <source>Pair with %1?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btagent.cpp\" line=\"91\"/>\n        <source>In order to complete pairing, confirm that the following pairing code is shown on %1.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btagent.cpp\" line=\"92\"/>\n        <source>If it is, you can accept the pairing request.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btagent.cpp\" line=\"93\"/>\n        <location filename=\"../btagent.cpp\" line=\"122\"/>\n        <source>Decline</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btagent.cpp\" line=\"94\"/>\n        <source>Accept and Pair</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btagent.cpp\" line=\"121\"/>\n        <source>Accept the pairing request from %1?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btagent.cpp\" line=\"123\"/>\n        <source>Pair</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>BtObex</name>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"71\"/>\n        <location filename=\"../btobex.cpp\" line=\"111\"/>\n        <location filename=\"../btobex.cpp\" line=\"118\"/>\n        <source>Bluetooth</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"72\"/>\n        <source>Incoming file</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"73\"/>\n        <source>%1 is sending you the file %2.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"74\"/>\n        <source>Decline</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"75\"/>\n        <source>Accept</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"112\"/>\n        <source>File received</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"113\"/>\n        <source>The file %1 has been received and can be found in your Downloads folder.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"119\"/>\n        <source>File transfer failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"120\"/>\n        <source>The file %1 was unable to be received.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>DevicePopover</name>\n    <message>\n        <location filename=\"../settings/devicepopover.ui\" line=\"124\"/>\n        <source>ACTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/devicepopover.ui\" line=\"133\"/>\n        <source>Connect</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/devicepopover.ui\" line=\"140\"/>\n        <source>Disconnect</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/devicepopover.ui\" line=\"147\"/>\n        <source>Remove</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/devicepopover.cpp\" line=\"72\"/>\n        <source>Failed to connect</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/devicepopover.cpp\" line=\"75\"/>\n        <source>Connecting to %1 failed.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>PairPopover</name>\n    <message>\n        <location filename=\"../settings/pairpopover.ui\" line=\"57\"/>\n        <source>Pair Device</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/pairpopover.ui\" line=\"64\"/>\n        <source>To get started, ensure the device you want to pair is visible. This may be achieved by opening the Bluetooth settings or pressing a button on the other device.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/pairpopover.ui\" line=\"383\"/>\n        <source>Confirm Pairing Code</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/pairpopover.cpp\" line=\"92\"/>\n        <source>Then press ENTER or RETURN.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/pairpopover.cpp\" line=\"130\"/>\n        <source>Failed to pair</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/pairpopover.cpp\" line=\"133\"/>\n        <source>Pairing with %1 failed because the pairing code was incorrect.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/pairpopover.cpp\" line=\"136\"/>\n        <source>Pairing with %1 failed because the device rejected the pairing request.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/pairpopover.cpp\" line=\"139\"/>\n        <source>Pairing with %1 failed because the pairing code was not confirmed in time.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/pairpopover.cpp\" line=\"142\"/>\n        <source>Pairing with %1 failed.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/BluetoothPlugin/translations/au_AU.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"au_AU\" sourcelanguage=\"en_US\">\n<context>\n    <name>BluetoothChunk</name>\n    <message numerus=\"yes\">\n        <location filename=\"../chunk/bluetoothchunk.cpp\" line=\"60\"/>\n        <source>%n devices connected</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n        </translation>\n    </message>\n</context>\n<context>\n    <name>BluetoothPluginCommon</name>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"29\"/>\n        <source>Phone</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"31\"/>\n        <source>Modem</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"33\"/>\n        <source>Computer</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"35\"/>\n        <source>Networking</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"37\"/>\n        <source>Headset</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"39\"/>\n        <source>Headphones</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"41\"/>\n        <source>Audio/Video</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"43\"/>\n        <source>Keyboard</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"45\"/>\n        <source>Mouse</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"47\"/>\n        <source>Gamepad</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"49\"/>\n        <source>Drawing Tablet</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"51\"/>\n        <source>Peripheral</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"53\"/>\n        <source>Camera</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"55\"/>\n        <source>Printer</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"57\"/>\n        <source>Imaging</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"59\"/>\n        <source>Wearable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"61\"/>\n        <source>Toy</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"63\"/>\n        <source>Health</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"65\"/>\n        <source>Unknown</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>BluetoothSettingsPane</name>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"35\"/>\n        <location filename=\"../settings/bluetoothsettingspane.cpp\" line=\"76\"/>\n        <location filename=\"../settings/bluetoothsettingspane.cpp\" line=\"181\"/>\n        <source>Bluetooth</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"106\"/>\n        <source>ACTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"113\"/>\n        <source>Pair New Device</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"139\"/>\n        <source>Visible to other devices</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"166\"/>\n        <source>DISCOVERABILITY</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"213\"/>\n        <source>DEVICES</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"272\"/>\n        <source>Bluetooth is unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"295\"/>\n        <source>Install a Bluetooth card to use Bluetooth</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"340\"/>\n        <source>Bluetooth is disabled</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"363\"/>\n        <source>Switch Bluetooth on to connect to Bluetooth devices</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"373\"/>\n        <source>Enable Bluetooth</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.cpp\" line=\"119\"/>\n        <source>To pair with this device, look for %1 on the other device.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>BtAgent</name>\n    <message>\n        <location filename=\"../btagent.cpp\" line=\"89\"/>\n        <location filename=\"../btagent.cpp\" line=\"119\"/>\n        <source>Bluetooth</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btagent.cpp\" line=\"90\"/>\n        <location filename=\"../btagent.cpp\" line=\"120\"/>\n        <source>Pair with %1?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btagent.cpp\" line=\"91\"/>\n        <source>In order to complete pairing, confirm that the following pairing code is shown on %1.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btagent.cpp\" line=\"92\"/>\n        <source>If it is, you can accept the pairing request.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btagent.cpp\" line=\"93\"/>\n        <location filename=\"../btagent.cpp\" line=\"122\"/>\n        <source>Decline</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btagent.cpp\" line=\"94\"/>\n        <source>Accept and Pair</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btagent.cpp\" line=\"121\"/>\n        <source>Accept the pairing request from %1?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btagent.cpp\" line=\"123\"/>\n        <source>Pair</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>BtObex</name>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"71\"/>\n        <location filename=\"../btobex.cpp\" line=\"111\"/>\n        <location filename=\"../btobex.cpp\" line=\"118\"/>\n        <source>Bluetooth</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"72\"/>\n        <source>Incoming file</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"73\"/>\n        <source>%1 is sending you the file %2.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"74\"/>\n        <source>Decline</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"75\"/>\n        <source>Accept</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"112\"/>\n        <source>File received</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"113\"/>\n        <source>The file %1 has been received and can be found in your Downloads folder.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"119\"/>\n        <source>File transfer failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"120\"/>\n        <source>The file %1 was unable to be received.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>DevicePopover</name>\n    <message>\n        <location filename=\"../settings/devicepopover.ui\" line=\"124\"/>\n        <source>ACTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/devicepopover.ui\" line=\"133\"/>\n        <source>Connect</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/devicepopover.ui\" line=\"140\"/>\n        <source>Disconnect</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/devicepopover.ui\" line=\"147\"/>\n        <source>Remove</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/devicepopover.cpp\" line=\"72\"/>\n        <source>Failed to connect</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/devicepopover.cpp\" line=\"75\"/>\n        <source>Connecting to %1 failed.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>PairPopover</name>\n    <message>\n        <location filename=\"../settings/pairpopover.ui\" line=\"57\"/>\n        <source>Pair Device</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/pairpopover.ui\" line=\"64\"/>\n        <source>To get started, ensure the device you want to pair is visible. This may be achieved by opening the Bluetooth settings or pressing a button on the other device.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/pairpopover.ui\" line=\"383\"/>\n        <source>Confirm Pairing Code</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/pairpopover.cpp\" line=\"92\"/>\n        <source>Then press ENTER or RETURN.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/pairpopover.cpp\" line=\"130\"/>\n        <source>Failed to pair</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/pairpopover.cpp\" line=\"133\"/>\n        <source>Pairing with %1 failed because the pairing code was incorrect.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/pairpopover.cpp\" line=\"136\"/>\n        <source>Pairing with %1 failed because the device rejected the pairing request.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/pairpopover.cpp\" line=\"139\"/>\n        <source>Pairing with %1 failed because the pairing code was not confirmed in time.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/pairpopover.cpp\" line=\"142\"/>\n        <source>Pairing with %1 failed.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/BluetoothPlugin/translations/cy.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"cy\" sourcelanguage=\"en_US\">\n<context>\n    <name>BluetoothChunk</name>\n    <message numerus=\"yes\">\n        <location filename=\"../chunk/bluetoothchunk.cpp\" line=\"60\"/>\n        <source>%n devices connected</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n        </translation>\n    </message>\n</context>\n<context>\n    <name>BluetoothPluginCommon</name>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"29\"/>\n        <source>Phone</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"31\"/>\n        <source>Modem</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"33\"/>\n        <source>Computer</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"35\"/>\n        <source>Networking</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"37\"/>\n        <source>Headset</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"39\"/>\n        <source>Headphones</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"41\"/>\n        <source>Audio/Video</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"43\"/>\n        <source>Keyboard</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"45\"/>\n        <source>Mouse</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"47\"/>\n        <source>Gamepad</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"49\"/>\n        <source>Drawing Tablet</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"51\"/>\n        <source>Peripheral</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"53\"/>\n        <source>Camera</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"55\"/>\n        <source>Printer</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"57\"/>\n        <source>Imaging</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"59\"/>\n        <source>Wearable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"61\"/>\n        <source>Toy</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"63\"/>\n        <source>Health</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"65\"/>\n        <source>Unknown</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>BluetoothSettingsPane</name>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"35\"/>\n        <location filename=\"../settings/bluetoothsettingspane.cpp\" line=\"76\"/>\n        <location filename=\"../settings/bluetoothsettingspane.cpp\" line=\"181\"/>\n        <source>Bluetooth</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"106\"/>\n        <source>ACTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"113\"/>\n        <source>Pair New Device</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"139\"/>\n        <source>Visible to other devices</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"166\"/>\n        <source>DISCOVERABILITY</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"213\"/>\n        <source>DEVICES</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"272\"/>\n        <source>Bluetooth is unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"295\"/>\n        <source>Install a Bluetooth card to use Bluetooth</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"340\"/>\n        <source>Bluetooth is disabled</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"363\"/>\n        <source>Switch Bluetooth on to connect to Bluetooth devices</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"373\"/>\n        <source>Enable Bluetooth</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.cpp\" line=\"119\"/>\n        <source>To pair with this device, look for %1 on the other device.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>BtAgent</name>\n    <message>\n        <location filename=\"../btagent.cpp\" line=\"89\"/>\n        <location filename=\"../btagent.cpp\" line=\"119\"/>\n        <source>Bluetooth</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btagent.cpp\" line=\"90\"/>\n        <location filename=\"../btagent.cpp\" line=\"120\"/>\n        <source>Pair with %1?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btagent.cpp\" line=\"91\"/>\n        <source>In order to complete pairing, confirm that the following pairing code is shown on %1.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btagent.cpp\" line=\"92\"/>\n        <source>If it is, you can accept the pairing request.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btagent.cpp\" line=\"93\"/>\n        <location filename=\"../btagent.cpp\" line=\"122\"/>\n        <source>Decline</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btagent.cpp\" line=\"94\"/>\n        <source>Accept and Pair</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btagent.cpp\" line=\"121\"/>\n        <source>Accept the pairing request from %1?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btagent.cpp\" line=\"123\"/>\n        <source>Pair</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>BtObex</name>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"71\"/>\n        <location filename=\"../btobex.cpp\" line=\"111\"/>\n        <location filename=\"../btobex.cpp\" line=\"118\"/>\n        <source>Bluetooth</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"72\"/>\n        <source>Incoming file</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"73\"/>\n        <source>%1 is sending you the file %2.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"74\"/>\n        <source>Decline</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"75\"/>\n        <source>Accept</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"112\"/>\n        <source>File received</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"113\"/>\n        <source>The file %1 has been received and can be found in your Downloads folder.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"119\"/>\n        <source>File transfer failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"120\"/>\n        <source>The file %1 was unable to be received.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>DevicePopover</name>\n    <message>\n        <location filename=\"../settings/devicepopover.ui\" line=\"124\"/>\n        <source>ACTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/devicepopover.ui\" line=\"133\"/>\n        <source>Connect</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/devicepopover.ui\" line=\"140\"/>\n        <source>Disconnect</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/devicepopover.ui\" line=\"147\"/>\n        <source>Remove</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/devicepopover.cpp\" line=\"72\"/>\n        <source>Failed to connect</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/devicepopover.cpp\" line=\"75\"/>\n        <source>Connecting to %1 failed.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>PairPopover</name>\n    <message>\n        <location filename=\"../settings/pairpopover.ui\" line=\"57\"/>\n        <source>Pair Device</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/pairpopover.ui\" line=\"64\"/>\n        <source>To get started, ensure the device you want to pair is visible. This may be achieved by opening the Bluetooth settings or pressing a button on the other device.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/pairpopover.ui\" line=\"383\"/>\n        <source>Confirm Pairing Code</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/pairpopover.cpp\" line=\"92\"/>\n        <source>Then press ENTER or RETURN.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/pairpopover.cpp\" line=\"130\"/>\n        <source>Failed to pair</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/pairpopover.cpp\" line=\"133\"/>\n        <source>Pairing with %1 failed because the pairing code was incorrect.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/pairpopover.cpp\" line=\"136\"/>\n        <source>Pairing with %1 failed because the device rejected the pairing request.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/pairpopover.cpp\" line=\"139\"/>\n        <source>Pairing with %1 failed because the pairing code was not confirmed in time.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/pairpopover.cpp\" line=\"142\"/>\n        <source>Pairing with %1 failed.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/BluetoothPlugin/translations/da.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"da\" sourcelanguage=\"en_US\">\n<context>\n    <name>BluetoothChunk</name>\n    <message numerus=\"yes\">\n        <location filename=\"../chunk/bluetoothchunk.cpp\" line=\"60\"/>\n        <source>%n devices connected</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n        </translation>\n    </message>\n</context>\n<context>\n    <name>BluetoothPluginCommon</name>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"29\"/>\n        <source>Phone</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"31\"/>\n        <source>Modem</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"33\"/>\n        <source>Computer</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"35\"/>\n        <source>Networking</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"37\"/>\n        <source>Headset</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"39\"/>\n        <source>Headphones</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"41\"/>\n        <source>Audio/Video</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"43\"/>\n        <source>Keyboard</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"45\"/>\n        <source>Mouse</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"47\"/>\n        <source>Gamepad</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"49\"/>\n        <source>Drawing Tablet</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"51\"/>\n        <source>Peripheral</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"53\"/>\n        <source>Camera</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"55\"/>\n        <source>Printer</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"57\"/>\n        <source>Imaging</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"59\"/>\n        <source>Wearable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"61\"/>\n        <source>Toy</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"63\"/>\n        <source>Health</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"65\"/>\n        <source>Unknown</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>BluetoothSettingsPane</name>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"35\"/>\n        <location filename=\"../settings/bluetoothsettingspane.cpp\" line=\"76\"/>\n        <location filename=\"../settings/bluetoothsettingspane.cpp\" line=\"181\"/>\n        <source>Bluetooth</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"106\"/>\n        <source>ACTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"113\"/>\n        <source>Pair New Device</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"139\"/>\n        <source>Visible to other devices</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"166\"/>\n        <source>DISCOVERABILITY</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"213\"/>\n        <source>DEVICES</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"272\"/>\n        <source>Bluetooth is unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"295\"/>\n        <source>Install a Bluetooth card to use Bluetooth</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"340\"/>\n        <source>Bluetooth is disabled</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"363\"/>\n        <source>Switch Bluetooth on to connect to Bluetooth devices</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"373\"/>\n        <source>Enable Bluetooth</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.cpp\" line=\"119\"/>\n        <source>To pair with this device, look for %1 on the other device.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>BtAgent</name>\n    <message>\n        <location filename=\"../btagent.cpp\" line=\"89\"/>\n        <location filename=\"../btagent.cpp\" line=\"119\"/>\n        <source>Bluetooth</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btagent.cpp\" line=\"90\"/>\n        <location filename=\"../btagent.cpp\" line=\"120\"/>\n        <source>Pair with %1?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btagent.cpp\" line=\"91\"/>\n        <source>In order to complete pairing, confirm that the following pairing code is shown on %1.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btagent.cpp\" line=\"92\"/>\n        <source>If it is, you can accept the pairing request.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btagent.cpp\" line=\"93\"/>\n        <location filename=\"../btagent.cpp\" line=\"122\"/>\n        <source>Decline</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btagent.cpp\" line=\"94\"/>\n        <source>Accept and Pair</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btagent.cpp\" line=\"121\"/>\n        <source>Accept the pairing request from %1?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btagent.cpp\" line=\"123\"/>\n        <source>Pair</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>BtObex</name>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"71\"/>\n        <location filename=\"../btobex.cpp\" line=\"111\"/>\n        <location filename=\"../btobex.cpp\" line=\"118\"/>\n        <source>Bluetooth</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"72\"/>\n        <source>Incoming file</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"73\"/>\n        <source>%1 is sending you the file %2.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"74\"/>\n        <source>Decline</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"75\"/>\n        <source>Accept</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"112\"/>\n        <source>File received</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"113\"/>\n        <source>The file %1 has been received and can be found in your Downloads folder.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"119\"/>\n        <source>File transfer failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"120\"/>\n        <source>The file %1 was unable to be received.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>DevicePopover</name>\n    <message>\n        <location filename=\"../settings/devicepopover.ui\" line=\"124\"/>\n        <source>ACTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/devicepopover.ui\" line=\"133\"/>\n        <source>Connect</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/devicepopover.ui\" line=\"140\"/>\n        <source>Disconnect</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/devicepopover.ui\" line=\"147\"/>\n        <source>Remove</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/devicepopover.cpp\" line=\"72\"/>\n        <source>Failed to connect</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/devicepopover.cpp\" line=\"75\"/>\n        <source>Connecting to %1 failed.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>PairPopover</name>\n    <message>\n        <location filename=\"../settings/pairpopover.ui\" line=\"57\"/>\n        <source>Pair Device</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/pairpopover.ui\" line=\"64\"/>\n        <source>To get started, ensure the device you want to pair is visible. This may be achieved by opening the Bluetooth settings or pressing a button on the other device.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/pairpopover.ui\" line=\"383\"/>\n        <source>Confirm Pairing Code</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/pairpopover.cpp\" line=\"92\"/>\n        <source>Then press ENTER or RETURN.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/pairpopover.cpp\" line=\"130\"/>\n        <source>Failed to pair</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/pairpopover.cpp\" line=\"133\"/>\n        <source>Pairing with %1 failed because the pairing code was incorrect.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/pairpopover.cpp\" line=\"136\"/>\n        <source>Pairing with %1 failed because the device rejected the pairing request.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/pairpopover.cpp\" line=\"139\"/>\n        <source>Pairing with %1 failed because the pairing code was not confirmed in time.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/pairpopover.cpp\" line=\"142\"/>\n        <source>Pairing with %1 failed.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/BluetoothPlugin/translations/de.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"de\" sourcelanguage=\"en_US\">\n<context>\n    <name>BluetoothChunk</name>\n    <message numerus=\"yes\">\n        <location filename=\"../chunk/bluetoothchunk.cpp\" line=\"60\"/>\n        <source>%n devices connected</source>\n        <translation>\n            <numerusform>%n Gerät verbunden</numerusform>\n            <numerusform>%n Geräte verbunden</numerusform>\n        </translation>\n    </message>\n</context>\n<context>\n    <name>BluetoothPluginCommon</name>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"29\"/>\n        <source>Phone</source>\n        <translation type=\"unfinished\">Telefon</translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"31\"/>\n        <source>Modem</source>\n        <translation type=\"unfinished\">Modem</translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"33\"/>\n        <source>Computer</source>\n        <translation type=\"unfinished\">Computer</translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"35\"/>\n        <source>Networking</source>\n        <translation type=\"unfinished\">Vernetzung</translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"37\"/>\n        <source>Headset</source>\n        <translation type=\"unfinished\">Headset</translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"39\"/>\n        <source>Headphones</source>\n        <translation type=\"unfinished\">Kopfhörer</translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"41\"/>\n        <source>Audio/Video</source>\n        <translation type=\"unfinished\">Audio/Video</translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"43\"/>\n        <source>Keyboard</source>\n        <translation type=\"unfinished\">Tastatur</translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"45\"/>\n        <source>Mouse</source>\n        <translation type=\"unfinished\">Maus</translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"47\"/>\n        <source>Gamepad</source>\n        <translation type=\"unfinished\">Gamepad</translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"49\"/>\n        <source>Drawing Tablet</source>\n        <translation type=\"unfinished\">Grafiktablett</translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"51\"/>\n        <source>Peripheral</source>\n        <translation type=\"unfinished\">Peripheriegerät</translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"53\"/>\n        <source>Camera</source>\n        <translation type=\"unfinished\">Kamera</translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"55\"/>\n        <source>Printer</source>\n        <translation type=\"unfinished\">Drucker</translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"57\"/>\n        <source>Imaging</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"59\"/>\n        <source>Wearable</source>\n        <translation type=\"unfinished\">Wearable</translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"61\"/>\n        <source>Toy</source>\n        <translation type=\"unfinished\">Spielzeug</translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"63\"/>\n        <source>Health</source>\n        <translation type=\"unfinished\">Gesundheit</translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"65\"/>\n        <source>Unknown</source>\n        <translation type=\"unfinished\">Unbekannt</translation>\n    </message>\n</context>\n<context>\n    <name>BluetoothSettingsPane</name>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"35\"/>\n        <location filename=\"../settings/bluetoothsettingspane.cpp\" line=\"76\"/>\n        <location filename=\"../settings/bluetoothsettingspane.cpp\" line=\"181\"/>\n        <source>Bluetooth</source>\n        <translation>Bluetooth</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"106\"/>\n        <source>ACTIONS</source>\n        <translation>AKTIONEN</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"113\"/>\n        <source>Pair New Device</source>\n        <translation>Neues Gerät koppeln</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"139\"/>\n        <source>Visible to other devices</source>\n        <translation>Für andere Geräte sichtbar</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"166\"/>\n        <source>DISCOVERABILITY</source>\n        <translation>ENTDECKBARKEIT</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"213\"/>\n        <source>DEVICES</source>\n        <translation>GERÄTE</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"272\"/>\n        <source>Bluetooth is unavailable</source>\n        <translation>Bluetooth ist unverfügbar</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"295\"/>\n        <source>Install a Bluetooth card to use Bluetooth</source>\n        <translation>Installiere eine Bluetoothkarte um Bluetooth zu verwenden</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"340\"/>\n        <source>Bluetooth is disabled</source>\n        <translation>Bluetooth ist deaktiviert</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"363\"/>\n        <source>Switch Bluetooth on to connect to Bluetooth devices</source>\n        <translation>Schalte Bluetooth um sich zu Bluetoothgeräten zu verbinden</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"373\"/>\n        <source>Enable Bluetooth</source>\n        <translation>Bluetooth aktivieren</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.cpp\" line=\"119\"/>\n        <source>To pair with this device, look for %1 on the other device.</source>\n        <translation>Schau nach %1 auf dem anderen Gerät, um sich mit diesem zu verbinden.</translation>\n    </message>\n</context>\n<context>\n    <name>BtAgent</name>\n    <message>\n        <location filename=\"../btagent.cpp\" line=\"89\"/>\n        <location filename=\"../btagent.cpp\" line=\"119\"/>\n        <source>Bluetooth</source>\n        <translation>Bluetooth</translation>\n    </message>\n    <message>\n        <location filename=\"../btagent.cpp\" line=\"90\"/>\n        <location filename=\"../btagent.cpp\" line=\"120\"/>\n        <source>Pair with %1?</source>\n        <translation>Mit %1 koppeln?</translation>\n    </message>\n    <message>\n        <location filename=\"../btagent.cpp\" line=\"91\"/>\n        <source>In order to complete pairing, confirm that the following pairing code is shown on %1.</source>\n        <translation>Stelle sicher, dass der folgende Koppelcode auf %1 angezeigt wird, um das Koppeln fertigzustellen.</translation>\n    </message>\n    <message>\n        <location filename=\"../btagent.cpp\" line=\"92\"/>\n        <source>If it is, you can accept the pairing request.</source>\n        <translation>Falls ja, kannst du die Koppelanfrage annehmen.</translation>\n    </message>\n    <message>\n        <location filename=\"../btagent.cpp\" line=\"93\"/>\n        <location filename=\"../btagent.cpp\" line=\"122\"/>\n        <source>Decline</source>\n        <translation>Ablehnen</translation>\n    </message>\n    <message>\n        <location filename=\"../btagent.cpp\" line=\"94\"/>\n        <source>Accept and Pair</source>\n        <translation>Annehmen und koppeln</translation>\n    </message>\n    <message>\n        <location filename=\"../btagent.cpp\" line=\"121\"/>\n        <source>Accept the pairing request from %1?</source>\n        <translation>Koppelanfrage von %1 annehmen?</translation>\n    </message>\n    <message>\n        <location filename=\"../btagent.cpp\" line=\"123\"/>\n        <source>Pair</source>\n        <translation>Koppeln</translation>\n    </message>\n</context>\n<context>\n    <name>BtObex</name>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"71\"/>\n        <location filename=\"../btobex.cpp\" line=\"111\"/>\n        <location filename=\"../btobex.cpp\" line=\"118\"/>\n        <source>Bluetooth</source>\n        <translation>Bluetooth</translation>\n    </message>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"72\"/>\n        <source>Incoming file</source>\n        <translation>Eingehende Datei</translation>\n    </message>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"73\"/>\n        <source>%1 is sending you the file %2.</source>\n        <translation>%1 sendet dir die Datei %2.</translation>\n    </message>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"74\"/>\n        <source>Decline</source>\n        <translation>Ablehnen</translation>\n    </message>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"75\"/>\n        <source>Accept</source>\n        <translation>Annehmen</translation>\n    </message>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"112\"/>\n        <source>File received</source>\n        <translation>Datei empfangen</translation>\n    </message>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"113\"/>\n        <source>The file %1 has been received and can be found in your Downloads folder.</source>\n        <translation>Die Datei %1 wurde empfangen und kann in deinem Downloadsordner gefunden werden.</translation>\n    </message>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"119\"/>\n        <source>File transfer failed</source>\n        <translation>Dateitransfer gescheitert</translation>\n    </message>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"120\"/>\n        <source>The file %1 was unable to be received.</source>\n        <translation>Die Datei %1 konnte nicht empfangen werden.</translation>\n    </message>\n</context>\n<context>\n    <name>Common</name>\n    <message>\n        <source>Phone</source>\n        <translation type=\"vanished\">Telefon</translation>\n    </message>\n    <message>\n        <source>Modem</source>\n        <translation type=\"vanished\">Modem</translation>\n    </message>\n    <message>\n        <source>Computer</source>\n        <translation type=\"vanished\">Computer</translation>\n    </message>\n    <message>\n        <source>Networking</source>\n        <translation type=\"vanished\">Vernetzung</translation>\n    </message>\n    <message>\n        <source>Headset</source>\n        <translation type=\"vanished\">Headset</translation>\n    </message>\n    <message>\n        <source>Headphones</source>\n        <translation type=\"vanished\">Kopfhörer</translation>\n    </message>\n    <message>\n        <source>Audio/Video</source>\n        <translation type=\"vanished\">Audio/Video</translation>\n    </message>\n    <message>\n        <source>Keyboard</source>\n        <translation type=\"vanished\">Tastatur</translation>\n    </message>\n    <message>\n        <source>Mouse</source>\n        <translation type=\"vanished\">Maus</translation>\n    </message>\n    <message>\n        <source>Gamepad</source>\n        <translation type=\"vanished\">Gamepad</translation>\n    </message>\n    <message>\n        <source>Drawing Tablet</source>\n        <translation type=\"vanished\">Grafiktablett</translation>\n    </message>\n    <message>\n        <source>Peripheral</source>\n        <translation type=\"vanished\">Peripheriegerät</translation>\n    </message>\n    <message>\n        <source>Camera</source>\n        <translation type=\"vanished\">Kamera</translation>\n    </message>\n    <message>\n        <source>Printer</source>\n        <translation type=\"vanished\">Drucker</translation>\n    </message>\n    <message>\n        <source>Wearable</source>\n        <translation type=\"vanished\">Wearable</translation>\n    </message>\n    <message>\n        <source>Toy</source>\n        <translation type=\"vanished\">Spielzeug</translation>\n    </message>\n    <message>\n        <source>Health</source>\n        <translation type=\"vanished\">Gesundheit</translation>\n    </message>\n    <message>\n        <source>Unknown</source>\n        <translation type=\"vanished\">Unbekannt</translation>\n    </message>\n</context>\n<context>\n    <name>DevicePopover</name>\n    <message>\n        <location filename=\"../settings/devicepopover.ui\" line=\"124\"/>\n        <source>ACTIONS</source>\n        <translation>AKTIONEN</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/devicepopover.ui\" line=\"133\"/>\n        <source>Connect</source>\n        <translation>Verbinden</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/devicepopover.ui\" line=\"140\"/>\n        <source>Disconnect</source>\n        <translation>Trennen</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/devicepopover.ui\" line=\"147\"/>\n        <source>Remove</source>\n        <translation>Entfernen</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/devicepopover.cpp\" line=\"72\"/>\n        <source>Failed to connect</source>\n        <translation>Verbindung gescheitert</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/devicepopover.cpp\" line=\"75\"/>\n        <source>Connecting to %1 failed.</source>\n        <translation>Die Verbindung zu %1 ist gescheitert.</translation>\n    </message>\n</context>\n<context>\n    <name>PairPopover</name>\n    <message>\n        <location filename=\"../settings/pairpopover.ui\" line=\"57\"/>\n        <source>Pair Device</source>\n        <translation>Gerät koppeln</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/pairpopover.ui\" line=\"64\"/>\n        <source>To get started, ensure the device you want to pair is visible. This may be achieved by opening the Bluetooth settings or pressing a button on the other device.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/pairpopover.ui\" line=\"383\"/>\n        <source>Confirm Pairing Code</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/pairpopover.cpp\" line=\"92\"/>\n        <source>Then press ENTER or RETURN.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/pairpopover.cpp\" line=\"130\"/>\n        <source>Failed to pair</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/pairpopover.cpp\" line=\"133\"/>\n        <source>Pairing with %1 failed because the pairing code was incorrect.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/pairpopover.cpp\" line=\"136\"/>\n        <source>Pairing with %1 failed because the device rejected the pairing request.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/pairpopover.cpp\" line=\"139\"/>\n        <source>Pairing with %1 failed because the pairing code was not confirmed in time.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/pairpopover.cpp\" line=\"142\"/>\n        <source>Pairing with %1 failed.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/BluetoothPlugin/translations/en_US.qm",
    "content": "<d\u0018!\u001c`"
  },
  {
    "path": "plugins/BluetoothPlugin/translations/en_US.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" sourcelanguage=\"en_US\">\n<context>\n    <name>BluetoothChunk</name>\n    <message numerus=\"yes\">\n        <location filename=\"../chunk/bluetoothchunk.cpp\" line=\"60\"/>\n        <source>%n devices connected</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n        </translation>\n    </message>\n</context>\n<context>\n    <name>BluetoothPluginCommon</name>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"29\"/>\n        <source>Phone</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"31\"/>\n        <source>Modem</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"33\"/>\n        <source>Computer</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"35\"/>\n        <source>Networking</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"37\"/>\n        <source>Headset</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"39\"/>\n        <source>Headphones</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"41\"/>\n        <source>Audio/Video</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"43\"/>\n        <source>Keyboard</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"45\"/>\n        <source>Mouse</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"47\"/>\n        <source>Gamepad</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"49\"/>\n        <source>Drawing Tablet</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"51\"/>\n        <source>Peripheral</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"53\"/>\n        <source>Camera</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"55\"/>\n        <source>Printer</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"57\"/>\n        <source>Imaging</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"59\"/>\n        <source>Wearable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"61\"/>\n        <source>Toy</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"63\"/>\n        <source>Health</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"65\"/>\n        <source>Unknown</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>BluetoothSettingsPane</name>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"35\"/>\n        <location filename=\"../settings/bluetoothsettingspane.cpp\" line=\"76\"/>\n        <location filename=\"../settings/bluetoothsettingspane.cpp\" line=\"181\"/>\n        <source>Bluetooth</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"106\"/>\n        <source>ACTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"113\"/>\n        <source>Pair New Device</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"139\"/>\n        <source>Visible to other devices</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"166\"/>\n        <source>DISCOVERABILITY</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"213\"/>\n        <source>DEVICES</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"272\"/>\n        <source>Bluetooth is unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"295\"/>\n        <source>Install a Bluetooth card to use Bluetooth</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"340\"/>\n        <source>Bluetooth is disabled</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"363\"/>\n        <source>Switch Bluetooth on to connect to Bluetooth devices</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"373\"/>\n        <source>Enable Bluetooth</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.cpp\" line=\"119\"/>\n        <source>To pair with this device, look for %1 on the other device.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>BtAgent</name>\n    <message>\n        <location filename=\"../btagent.cpp\" line=\"89\"/>\n        <location filename=\"../btagent.cpp\" line=\"119\"/>\n        <source>Bluetooth</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btagent.cpp\" line=\"90\"/>\n        <location filename=\"../btagent.cpp\" line=\"120\"/>\n        <source>Pair with %1?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btagent.cpp\" line=\"91\"/>\n        <source>In order to complete pairing, confirm that the following pairing code is shown on %1.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btagent.cpp\" line=\"92\"/>\n        <source>If it is, you can accept the pairing request.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btagent.cpp\" line=\"93\"/>\n        <location filename=\"../btagent.cpp\" line=\"122\"/>\n        <source>Decline</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btagent.cpp\" line=\"94\"/>\n        <source>Accept and Pair</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btagent.cpp\" line=\"121\"/>\n        <source>Accept the pairing request from %1?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btagent.cpp\" line=\"123\"/>\n        <source>Pair</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>BtObex</name>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"71\"/>\n        <location filename=\"../btobex.cpp\" line=\"111\"/>\n        <location filename=\"../btobex.cpp\" line=\"118\"/>\n        <source>Bluetooth</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"72\"/>\n        <source>Incoming file</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"73\"/>\n        <source>%1 is sending you the file %2.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"74\"/>\n        <source>Decline</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"75\"/>\n        <source>Accept</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"112\"/>\n        <source>File received</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"113\"/>\n        <source>The file %1 has been received and can be found in your Downloads folder.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"119\"/>\n        <source>File transfer failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"120\"/>\n        <source>The file %1 was unable to be received.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>DevicePopover</name>\n    <message>\n        <location filename=\"../settings/devicepopover.ui\" line=\"124\"/>\n        <source>ACTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/devicepopover.ui\" line=\"133\"/>\n        <source>Connect</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/devicepopover.ui\" line=\"140\"/>\n        <source>Disconnect</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/devicepopover.ui\" line=\"147\"/>\n        <source>Remove</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/devicepopover.cpp\" line=\"72\"/>\n        <source>Failed to connect</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/devicepopover.cpp\" line=\"75\"/>\n        <source>Connecting to %1 failed.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>PairPopover</name>\n    <message>\n        <location filename=\"../settings/pairpopover.ui\" line=\"57\"/>\n        <source>Pair Device</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/pairpopover.ui\" line=\"64\"/>\n        <source>To get started, ensure the device you want to pair is visible. This may be achieved by opening the Bluetooth settings or pressing a button on the other device.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/pairpopover.ui\" line=\"383\"/>\n        <source>Confirm Pairing Code</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/pairpopover.cpp\" line=\"92\"/>\n        <source>Then press ENTER or RETURN.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/pairpopover.cpp\" line=\"130\"/>\n        <source>Failed to pair</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/pairpopover.cpp\" line=\"133\"/>\n        <source>Pairing with %1 failed because the pairing code was incorrect.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/pairpopover.cpp\" line=\"136\"/>\n        <source>Pairing with %1 failed because the device rejected the pairing request.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/pairpopover.cpp\" line=\"139\"/>\n        <source>Pairing with %1 failed because the pairing code was not confirmed in time.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/pairpopover.cpp\" line=\"142\"/>\n        <source>Pairing with %1 failed.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/BluetoothPlugin/translations/es.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"es\" sourcelanguage=\"en_US\">\n<context>\n    <name>BluetoothChunk</name>\n    <message numerus=\"yes\">\n        <location filename=\"../chunk/bluetoothchunk.cpp\" line=\"60\"/>\n        <source>%n devices connected</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n        </translation>\n    </message>\n</context>\n<context>\n    <name>BluetoothPluginCommon</name>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"29\"/>\n        <source>Phone</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"31\"/>\n        <source>Modem</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"33\"/>\n        <source>Computer</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"35\"/>\n        <source>Networking</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"37\"/>\n        <source>Headset</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"39\"/>\n        <source>Headphones</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"41\"/>\n        <source>Audio/Video</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"43\"/>\n        <source>Keyboard</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"45\"/>\n        <source>Mouse</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"47\"/>\n        <source>Gamepad</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"49\"/>\n        <source>Drawing Tablet</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"51\"/>\n        <source>Peripheral</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"53\"/>\n        <source>Camera</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"55\"/>\n        <source>Printer</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"57\"/>\n        <source>Imaging</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"59\"/>\n        <source>Wearable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"61\"/>\n        <source>Toy</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"63\"/>\n        <source>Health</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"65\"/>\n        <source>Unknown</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>BluetoothSettingsPane</name>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"35\"/>\n        <location filename=\"../settings/bluetoothsettingspane.cpp\" line=\"76\"/>\n        <location filename=\"../settings/bluetoothsettingspane.cpp\" line=\"181\"/>\n        <source>Bluetooth</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"106\"/>\n        <source>ACTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"113\"/>\n        <source>Pair New Device</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"139\"/>\n        <source>Visible to other devices</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"166\"/>\n        <source>DISCOVERABILITY</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"213\"/>\n        <source>DEVICES</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"272\"/>\n        <source>Bluetooth is unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"295\"/>\n        <source>Install a Bluetooth card to use Bluetooth</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"340\"/>\n        <source>Bluetooth is disabled</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"363\"/>\n        <source>Switch Bluetooth on to connect to Bluetooth devices</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"373\"/>\n        <source>Enable Bluetooth</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.cpp\" line=\"119\"/>\n        <source>To pair with this device, look for %1 on the other device.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>BtAgent</name>\n    <message>\n        <location filename=\"../btagent.cpp\" line=\"89\"/>\n        <location filename=\"../btagent.cpp\" line=\"119\"/>\n        <source>Bluetooth</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btagent.cpp\" line=\"90\"/>\n        <location filename=\"../btagent.cpp\" line=\"120\"/>\n        <source>Pair with %1?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btagent.cpp\" line=\"91\"/>\n        <source>In order to complete pairing, confirm that the following pairing code is shown on %1.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btagent.cpp\" line=\"92\"/>\n        <source>If it is, you can accept the pairing request.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btagent.cpp\" line=\"93\"/>\n        <location filename=\"../btagent.cpp\" line=\"122\"/>\n        <source>Decline</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btagent.cpp\" line=\"94\"/>\n        <source>Accept and Pair</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btagent.cpp\" line=\"121\"/>\n        <source>Accept the pairing request from %1?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btagent.cpp\" line=\"123\"/>\n        <source>Pair</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>BtObex</name>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"71\"/>\n        <location filename=\"../btobex.cpp\" line=\"111\"/>\n        <location filename=\"../btobex.cpp\" line=\"118\"/>\n        <source>Bluetooth</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"72\"/>\n        <source>Incoming file</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"73\"/>\n        <source>%1 is sending you the file %2.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"74\"/>\n        <source>Decline</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"75\"/>\n        <source>Accept</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"112\"/>\n        <source>File received</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"113\"/>\n        <source>The file %1 has been received and can be found in your Downloads folder.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"119\"/>\n        <source>File transfer failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"120\"/>\n        <source>The file %1 was unable to be received.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>DevicePopover</name>\n    <message>\n        <location filename=\"../settings/devicepopover.ui\" line=\"124\"/>\n        <source>ACTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/devicepopover.ui\" line=\"133\"/>\n        <source>Connect</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/devicepopover.ui\" line=\"140\"/>\n        <source>Disconnect</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/devicepopover.ui\" line=\"147\"/>\n        <source>Remove</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/devicepopover.cpp\" line=\"72\"/>\n        <source>Failed to connect</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/devicepopover.cpp\" line=\"75\"/>\n        <source>Connecting to %1 failed.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>PairPopover</name>\n    <message>\n        <location filename=\"../settings/pairpopover.ui\" line=\"57\"/>\n        <source>Pair Device</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/pairpopover.ui\" line=\"64\"/>\n        <source>To get started, ensure the device you want to pair is visible. This may be achieved by opening the Bluetooth settings or pressing a button on the other device.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/pairpopover.ui\" line=\"383\"/>\n        <source>Confirm Pairing Code</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/pairpopover.cpp\" line=\"92\"/>\n        <source>Then press ENTER or RETURN.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/pairpopover.cpp\" line=\"130\"/>\n        <source>Failed to pair</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/pairpopover.cpp\" line=\"133\"/>\n        <source>Pairing with %1 failed because the pairing code was incorrect.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/pairpopover.cpp\" line=\"136\"/>\n        <source>Pairing with %1 failed because the device rejected the pairing request.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/pairpopover.cpp\" line=\"139\"/>\n        <source>Pairing with %1 failed because the pairing code was not confirmed in time.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/pairpopover.cpp\" line=\"142\"/>\n        <source>Pairing with %1 failed.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/BluetoothPlugin/translations/es_VE.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"es_VE\" sourcelanguage=\"en_US\">\n<context>\n    <name>BluetoothChunk</name>\n    <message numerus=\"yes\">\n        <location filename=\"../chunk/bluetoothchunk.cpp\" line=\"60\"/>\n        <source>%n devices connected</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n        </translation>\n    </message>\n</context>\n<context>\n    <name>BluetoothPluginCommon</name>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"29\"/>\n        <source>Phone</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"31\"/>\n        <source>Modem</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"33\"/>\n        <source>Computer</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"35\"/>\n        <source>Networking</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"37\"/>\n        <source>Headset</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"39\"/>\n        <source>Headphones</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"41\"/>\n        <source>Audio/Video</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"43\"/>\n        <source>Keyboard</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"45\"/>\n        <source>Mouse</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"47\"/>\n        <source>Gamepad</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"49\"/>\n        <source>Drawing Tablet</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"51\"/>\n        <source>Peripheral</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"53\"/>\n        <source>Camera</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"55\"/>\n        <source>Printer</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"57\"/>\n        <source>Imaging</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"59\"/>\n        <source>Wearable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"61\"/>\n        <source>Toy</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"63\"/>\n        <source>Health</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"65\"/>\n        <source>Unknown</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>BluetoothSettingsPane</name>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"35\"/>\n        <location filename=\"../settings/bluetoothsettingspane.cpp\" line=\"76\"/>\n        <location filename=\"../settings/bluetoothsettingspane.cpp\" line=\"181\"/>\n        <source>Bluetooth</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"106\"/>\n        <source>ACTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"113\"/>\n        <source>Pair New Device</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"139\"/>\n        <source>Visible to other devices</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"166\"/>\n        <source>DISCOVERABILITY</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"213\"/>\n        <source>DEVICES</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"272\"/>\n        <source>Bluetooth is unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"295\"/>\n        <source>Install a Bluetooth card to use Bluetooth</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"340\"/>\n        <source>Bluetooth is disabled</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"363\"/>\n        <source>Switch Bluetooth on to connect to Bluetooth devices</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"373\"/>\n        <source>Enable Bluetooth</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.cpp\" line=\"119\"/>\n        <source>To pair with this device, look for %1 on the other device.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>BtAgent</name>\n    <message>\n        <location filename=\"../btagent.cpp\" line=\"89\"/>\n        <location filename=\"../btagent.cpp\" line=\"119\"/>\n        <source>Bluetooth</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btagent.cpp\" line=\"90\"/>\n        <location filename=\"../btagent.cpp\" line=\"120\"/>\n        <source>Pair with %1?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btagent.cpp\" line=\"91\"/>\n        <source>In order to complete pairing, confirm that the following pairing code is shown on %1.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btagent.cpp\" line=\"92\"/>\n        <source>If it is, you can accept the pairing request.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btagent.cpp\" line=\"93\"/>\n        <location filename=\"../btagent.cpp\" line=\"122\"/>\n        <source>Decline</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btagent.cpp\" line=\"94\"/>\n        <source>Accept and Pair</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btagent.cpp\" line=\"121\"/>\n        <source>Accept the pairing request from %1?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btagent.cpp\" line=\"123\"/>\n        <source>Pair</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>BtObex</name>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"71\"/>\n        <location filename=\"../btobex.cpp\" line=\"111\"/>\n        <location filename=\"../btobex.cpp\" line=\"118\"/>\n        <source>Bluetooth</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"72\"/>\n        <source>Incoming file</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"73\"/>\n        <source>%1 is sending you the file %2.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"74\"/>\n        <source>Decline</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"75\"/>\n        <source>Accept</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"112\"/>\n        <source>File received</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"113\"/>\n        <source>The file %1 has been received and can be found in your Downloads folder.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"119\"/>\n        <source>File transfer failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"120\"/>\n        <source>The file %1 was unable to be received.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>DevicePopover</name>\n    <message>\n        <location filename=\"../settings/devicepopover.ui\" line=\"124\"/>\n        <source>ACTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/devicepopover.ui\" line=\"133\"/>\n        <source>Connect</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/devicepopover.ui\" line=\"140\"/>\n        <source>Disconnect</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/devicepopover.ui\" line=\"147\"/>\n        <source>Remove</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/devicepopover.cpp\" line=\"72\"/>\n        <source>Failed to connect</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/devicepopover.cpp\" line=\"75\"/>\n        <source>Connecting to %1 failed.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>PairPopover</name>\n    <message>\n        <location filename=\"../settings/pairpopover.ui\" line=\"57\"/>\n        <source>Pair Device</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/pairpopover.ui\" line=\"64\"/>\n        <source>To get started, ensure the device you want to pair is visible. This may be achieved by opening the Bluetooth settings or pressing a button on the other device.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/pairpopover.ui\" line=\"383\"/>\n        <source>Confirm Pairing Code</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/pairpopover.cpp\" line=\"92\"/>\n        <source>Then press ENTER or RETURN.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/pairpopover.cpp\" line=\"130\"/>\n        <source>Failed to pair</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/pairpopover.cpp\" line=\"133\"/>\n        <source>Pairing with %1 failed because the pairing code was incorrect.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/pairpopover.cpp\" line=\"136\"/>\n        <source>Pairing with %1 failed because the device rejected the pairing request.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/pairpopover.cpp\" line=\"139\"/>\n        <source>Pairing with %1 failed because the pairing code was not confirmed in time.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/pairpopover.cpp\" line=\"142\"/>\n        <source>Pairing with %1 failed.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/BluetoothPlugin/translations/id.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"id\" sourcelanguage=\"en_US\">\n<context>\n    <name>BluetoothChunk</name>\n    <message numerus=\"yes\">\n        <location filename=\"../chunk/bluetoothchunk.cpp\" line=\"60\"/>\n        <source>%n devices connected</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n        </translation>\n    </message>\n</context>\n<context>\n    <name>BluetoothPluginCommon</name>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"29\"/>\n        <source>Phone</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"31\"/>\n        <source>Modem</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"33\"/>\n        <source>Computer</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"35\"/>\n        <source>Networking</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"37\"/>\n        <source>Headset</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"39\"/>\n        <source>Headphones</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"41\"/>\n        <source>Audio/Video</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"43\"/>\n        <source>Keyboard</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"45\"/>\n        <source>Mouse</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"47\"/>\n        <source>Gamepad</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"49\"/>\n        <source>Drawing Tablet</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"51\"/>\n        <source>Peripheral</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"53\"/>\n        <source>Camera</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"55\"/>\n        <source>Printer</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"57\"/>\n        <source>Imaging</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"59\"/>\n        <source>Wearable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"61\"/>\n        <source>Toy</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"63\"/>\n        <source>Health</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"65\"/>\n        <source>Unknown</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>BluetoothSettingsPane</name>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"35\"/>\n        <location filename=\"../settings/bluetoothsettingspane.cpp\" line=\"76\"/>\n        <location filename=\"../settings/bluetoothsettingspane.cpp\" line=\"181\"/>\n        <source>Bluetooth</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"106\"/>\n        <source>ACTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"113\"/>\n        <source>Pair New Device</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"139\"/>\n        <source>Visible to other devices</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"166\"/>\n        <source>DISCOVERABILITY</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"213\"/>\n        <source>DEVICES</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"272\"/>\n        <source>Bluetooth is unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"295\"/>\n        <source>Install a Bluetooth card to use Bluetooth</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"340\"/>\n        <source>Bluetooth is disabled</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"363\"/>\n        <source>Switch Bluetooth on to connect to Bluetooth devices</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"373\"/>\n        <source>Enable Bluetooth</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.cpp\" line=\"119\"/>\n        <source>To pair with this device, look for %1 on the other device.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>BtAgent</name>\n    <message>\n        <location filename=\"../btagent.cpp\" line=\"89\"/>\n        <location filename=\"../btagent.cpp\" line=\"119\"/>\n        <source>Bluetooth</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btagent.cpp\" line=\"90\"/>\n        <location filename=\"../btagent.cpp\" line=\"120\"/>\n        <source>Pair with %1?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btagent.cpp\" line=\"91\"/>\n        <source>In order to complete pairing, confirm that the following pairing code is shown on %1.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btagent.cpp\" line=\"92\"/>\n        <source>If it is, you can accept the pairing request.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btagent.cpp\" line=\"93\"/>\n        <location filename=\"../btagent.cpp\" line=\"122\"/>\n        <source>Decline</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btagent.cpp\" line=\"94\"/>\n        <source>Accept and Pair</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btagent.cpp\" line=\"121\"/>\n        <source>Accept the pairing request from %1?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btagent.cpp\" line=\"123\"/>\n        <source>Pair</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>BtObex</name>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"71\"/>\n        <location filename=\"../btobex.cpp\" line=\"111\"/>\n        <location filename=\"../btobex.cpp\" line=\"118\"/>\n        <source>Bluetooth</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"72\"/>\n        <source>Incoming file</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"73\"/>\n        <source>%1 is sending you the file %2.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"74\"/>\n        <source>Decline</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"75\"/>\n        <source>Accept</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"112\"/>\n        <source>File received</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"113\"/>\n        <source>The file %1 has been received and can be found in your Downloads folder.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"119\"/>\n        <source>File transfer failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"120\"/>\n        <source>The file %1 was unable to be received.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>DevicePopover</name>\n    <message>\n        <location filename=\"../settings/devicepopover.ui\" line=\"124\"/>\n        <source>ACTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/devicepopover.ui\" line=\"133\"/>\n        <source>Connect</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/devicepopover.ui\" line=\"140\"/>\n        <source>Disconnect</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/devicepopover.ui\" line=\"147\"/>\n        <source>Remove</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/devicepopover.cpp\" line=\"72\"/>\n        <source>Failed to connect</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/devicepopover.cpp\" line=\"75\"/>\n        <source>Connecting to %1 failed.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>PairPopover</name>\n    <message>\n        <location filename=\"../settings/pairpopover.ui\" line=\"57\"/>\n        <source>Pair Device</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/pairpopover.ui\" line=\"64\"/>\n        <source>To get started, ensure the device you want to pair is visible. This may be achieved by opening the Bluetooth settings or pressing a button on the other device.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/pairpopover.ui\" line=\"383\"/>\n        <source>Confirm Pairing Code</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/pairpopover.cpp\" line=\"92\"/>\n        <source>Then press ENTER or RETURN.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/pairpopover.cpp\" line=\"130\"/>\n        <source>Failed to pair</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/pairpopover.cpp\" line=\"133\"/>\n        <source>Pairing with %1 failed because the pairing code was incorrect.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/pairpopover.cpp\" line=\"136\"/>\n        <source>Pairing with %1 failed because the device rejected the pairing request.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/pairpopover.cpp\" line=\"139\"/>\n        <source>Pairing with %1 failed because the pairing code was not confirmed in time.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/pairpopover.cpp\" line=\"142\"/>\n        <source>Pairing with %1 failed.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/BluetoothPlugin/translations/nl.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"nl\" sourcelanguage=\"en_US\">\n<context>\n    <name>BluetoothChunk</name>\n    <message numerus=\"yes\">\n        <location filename=\"../chunk/bluetoothchunk.cpp\" line=\"60\"/>\n        <source>%n devices connected</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n        </translation>\n    </message>\n</context>\n<context>\n    <name>BluetoothPluginCommon</name>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"29\"/>\n        <source>Phone</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"31\"/>\n        <source>Modem</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"33\"/>\n        <source>Computer</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"35\"/>\n        <source>Networking</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"37\"/>\n        <source>Headset</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"39\"/>\n        <source>Headphones</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"41\"/>\n        <source>Audio/Video</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"43\"/>\n        <source>Keyboard</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"45\"/>\n        <source>Mouse</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"47\"/>\n        <source>Gamepad</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"49\"/>\n        <source>Drawing Tablet</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"51\"/>\n        <source>Peripheral</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"53\"/>\n        <source>Camera</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"55\"/>\n        <source>Printer</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"57\"/>\n        <source>Imaging</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"59\"/>\n        <source>Wearable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"61\"/>\n        <source>Toy</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"63\"/>\n        <source>Health</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"65\"/>\n        <source>Unknown</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>BluetoothSettingsPane</name>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"35\"/>\n        <location filename=\"../settings/bluetoothsettingspane.cpp\" line=\"76\"/>\n        <location filename=\"../settings/bluetoothsettingspane.cpp\" line=\"181\"/>\n        <source>Bluetooth</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"106\"/>\n        <source>ACTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"113\"/>\n        <source>Pair New Device</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"139\"/>\n        <source>Visible to other devices</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"166\"/>\n        <source>DISCOVERABILITY</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"213\"/>\n        <source>DEVICES</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"272\"/>\n        <source>Bluetooth is unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"295\"/>\n        <source>Install a Bluetooth card to use Bluetooth</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"340\"/>\n        <source>Bluetooth is disabled</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"363\"/>\n        <source>Switch Bluetooth on to connect to Bluetooth devices</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"373\"/>\n        <source>Enable Bluetooth</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.cpp\" line=\"119\"/>\n        <source>To pair with this device, look for %1 on the other device.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>BtAgent</name>\n    <message>\n        <location filename=\"../btagent.cpp\" line=\"89\"/>\n        <location filename=\"../btagent.cpp\" line=\"119\"/>\n        <source>Bluetooth</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btagent.cpp\" line=\"90\"/>\n        <location filename=\"../btagent.cpp\" line=\"120\"/>\n        <source>Pair with %1?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btagent.cpp\" line=\"91\"/>\n        <source>In order to complete pairing, confirm that the following pairing code is shown on %1.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btagent.cpp\" line=\"92\"/>\n        <source>If it is, you can accept the pairing request.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btagent.cpp\" line=\"93\"/>\n        <location filename=\"../btagent.cpp\" line=\"122\"/>\n        <source>Decline</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btagent.cpp\" line=\"94\"/>\n        <source>Accept and Pair</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btagent.cpp\" line=\"121\"/>\n        <source>Accept the pairing request from %1?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btagent.cpp\" line=\"123\"/>\n        <source>Pair</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>BtObex</name>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"71\"/>\n        <location filename=\"../btobex.cpp\" line=\"111\"/>\n        <location filename=\"../btobex.cpp\" line=\"118\"/>\n        <source>Bluetooth</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"72\"/>\n        <source>Incoming file</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"73\"/>\n        <source>%1 is sending you the file %2.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"74\"/>\n        <source>Decline</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"75\"/>\n        <source>Accept</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"112\"/>\n        <source>File received</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"113\"/>\n        <source>The file %1 has been received and can be found in your Downloads folder.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"119\"/>\n        <source>File transfer failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"120\"/>\n        <source>The file %1 was unable to be received.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>DevicePopover</name>\n    <message>\n        <location filename=\"../settings/devicepopover.ui\" line=\"124\"/>\n        <source>ACTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/devicepopover.ui\" line=\"133\"/>\n        <source>Connect</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/devicepopover.ui\" line=\"140\"/>\n        <source>Disconnect</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/devicepopover.ui\" line=\"147\"/>\n        <source>Remove</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/devicepopover.cpp\" line=\"72\"/>\n        <source>Failed to connect</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/devicepopover.cpp\" line=\"75\"/>\n        <source>Connecting to %1 failed.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>PairPopover</name>\n    <message>\n        <location filename=\"../settings/pairpopover.ui\" line=\"57\"/>\n        <source>Pair Device</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/pairpopover.ui\" line=\"64\"/>\n        <source>To get started, ensure the device you want to pair is visible. This may be achieved by opening the Bluetooth settings or pressing a button on the other device.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/pairpopover.ui\" line=\"383\"/>\n        <source>Confirm Pairing Code</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/pairpopover.cpp\" line=\"92\"/>\n        <source>Then press ENTER or RETURN.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/pairpopover.cpp\" line=\"130\"/>\n        <source>Failed to pair</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/pairpopover.cpp\" line=\"133\"/>\n        <source>Pairing with %1 failed because the pairing code was incorrect.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/pairpopover.cpp\" line=\"136\"/>\n        <source>Pairing with %1 failed because the device rejected the pairing request.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/pairpopover.cpp\" line=\"139\"/>\n        <source>Pairing with %1 failed because the pairing code was not confirmed in time.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/pairpopover.cpp\" line=\"142\"/>\n        <source>Pairing with %1 failed.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/BluetoothPlugin/translations/pt_BR.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"pt_BR\" sourcelanguage=\"en_US\">\n<context>\n    <name>BluetoothChunk</name>\n    <message numerus=\"yes\">\n        <location filename=\"../chunk/bluetoothchunk.cpp\" line=\"60\"/>\n        <source>%n devices connected</source>\n        <translation>\n            <numerusform>%n dispositivo conectado</numerusform>\n            <numerusform>%n dispositivos conectados</numerusform>\n        </translation>\n    </message>\n</context>\n<context>\n    <name>BluetoothPluginCommon</name>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"29\"/>\n        <source>Phone</source>\n        <translation type=\"unfinished\">Telefone</translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"31\"/>\n        <source>Modem</source>\n        <translation type=\"unfinished\">Modem</translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"33\"/>\n        <source>Computer</source>\n        <translation type=\"unfinished\">Computador</translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"35\"/>\n        <source>Networking</source>\n        <translation type=\"unfinished\">Rede</translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"37\"/>\n        <source>Headset</source>\n        <translation type=\"unfinished\">Headset</translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"39\"/>\n        <source>Headphones</source>\n        <translation type=\"unfinished\">Fones de ouvido</translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"41\"/>\n        <source>Audio/Video</source>\n        <translation type=\"unfinished\">Áudio/Vídeo</translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"43\"/>\n        <source>Keyboard</source>\n        <translation type=\"unfinished\">Teclado</translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"45\"/>\n        <source>Mouse</source>\n        <translation type=\"unfinished\">Mouse</translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"47\"/>\n        <source>Gamepad</source>\n        <translation type=\"unfinished\">Gamepad</translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"49\"/>\n        <source>Drawing Tablet</source>\n        <translation type=\"unfinished\">Mesa digitalizadora</translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"51\"/>\n        <source>Peripheral</source>\n        <translation type=\"unfinished\">Periférico</translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"53\"/>\n        <source>Camera</source>\n        <translation type=\"unfinished\">Câmera</translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"55\"/>\n        <source>Printer</source>\n        <translation type=\"unfinished\">Impressora</translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"57\"/>\n        <source>Imaging</source>\n        <translation type=\"unfinished\">Dispositivo de imagem</translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"59\"/>\n        <source>Wearable</source>\n        <translation type=\"unfinished\">Acessório wearable</translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"61\"/>\n        <source>Toy</source>\n        <translation type=\"unfinished\">Brinquedo</translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"63\"/>\n        <source>Health</source>\n        <translation type=\"unfinished\">Saúde</translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"65\"/>\n        <source>Unknown</source>\n        <translation type=\"unfinished\">Desconhecido</translation>\n    </message>\n</context>\n<context>\n    <name>BluetoothSettingsPane</name>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"35\"/>\n        <location filename=\"../settings/bluetoothsettingspane.cpp\" line=\"76\"/>\n        <location filename=\"../settings/bluetoothsettingspane.cpp\" line=\"181\"/>\n        <source>Bluetooth</source>\n        <translation>Bluetooth</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"106\"/>\n        <source>ACTIONS</source>\n        <translation>AÇÕES</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"113\"/>\n        <source>Pair New Device</source>\n        <translation>Emparelhar um novo dispositivo</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"139\"/>\n        <source>Visible to other devices</source>\n        <translation>Visível a outros dispositivos</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"166\"/>\n        <source>DISCOVERABILITY</source>\n        <translation>VISIBILIDADE</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"213\"/>\n        <source>DEVICES</source>\n        <translation>DISPOSITIVOS</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"272\"/>\n        <source>Bluetooth is unavailable</source>\n        <translation>Bluetooth está indisponível</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"295\"/>\n        <source>Install a Bluetooth card to use Bluetooth</source>\n        <translation>Instale um adaptador Bluetooth para usar o Bluetooth</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"340\"/>\n        <source>Bluetooth is disabled</source>\n        <translation>Bluetooth está desabilitado</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"363\"/>\n        <source>Switch Bluetooth on to connect to Bluetooth devices</source>\n        <translation>Ligue o Bluetooth para conectar dispositivos Bluetooth</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"373\"/>\n        <source>Enable Bluetooth</source>\n        <translation>Ativar o Bluetooth</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.cpp\" line=\"119\"/>\n        <source>To pair with this device, look for %1 on the other device.</source>\n        <translation>Para emparelhar com este dispositivo, procure por %1 no outro dispositivo.</translation>\n    </message>\n</context>\n<context>\n    <name>BtAgent</name>\n    <message>\n        <location filename=\"../btagent.cpp\" line=\"89\"/>\n        <location filename=\"../btagent.cpp\" line=\"119\"/>\n        <source>Bluetooth</source>\n        <translation>Bluetooth</translation>\n    </message>\n    <message>\n        <location filename=\"../btagent.cpp\" line=\"90\"/>\n        <location filename=\"../btagent.cpp\" line=\"120\"/>\n        <source>Pair with %1?</source>\n        <translation>Emparelhar com %1?</translation>\n    </message>\n    <message>\n        <location filename=\"../btagent.cpp\" line=\"91\"/>\n        <source>In order to complete pairing, confirm that the following pairing code is shown on %1.</source>\n        <translation>Para completar o emparelhamento, confirme que o seguinte código está sendo exibido em %1.</translation>\n    </message>\n    <message>\n        <location filename=\"../btagent.cpp\" line=\"92\"/>\n        <source>If it is, you can accept the pairing request.</source>\n        <translation>Se for, você pode aceitar o pedido de emparelhamento.</translation>\n    </message>\n    <message>\n        <location filename=\"../btagent.cpp\" line=\"93\"/>\n        <location filename=\"../btagent.cpp\" line=\"122\"/>\n        <source>Decline</source>\n        <translation>Recusar</translation>\n    </message>\n    <message>\n        <location filename=\"../btagent.cpp\" line=\"94\"/>\n        <source>Accept and Pair</source>\n        <translation>Aceitar e emparelhar</translation>\n    </message>\n    <message>\n        <location filename=\"../btagent.cpp\" line=\"121\"/>\n        <source>Accept the pairing request from %1?</source>\n        <translation>Aceitar o pedido de emparelhamento de %1?</translation>\n    </message>\n    <message>\n        <location filename=\"../btagent.cpp\" line=\"123\"/>\n        <source>Pair</source>\n        <translation>Emparelhar</translation>\n    </message>\n</context>\n<context>\n    <name>BtObex</name>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"71\"/>\n        <location filename=\"../btobex.cpp\" line=\"111\"/>\n        <location filename=\"../btobex.cpp\" line=\"118\"/>\n        <source>Bluetooth</source>\n        <translation>Bluetooth</translation>\n    </message>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"72\"/>\n        <source>Incoming file</source>\n        <translation>Arquivo a ser recebido</translation>\n    </message>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"73\"/>\n        <source>%1 is sending you the file %2.</source>\n        <translation>%1 está mandando o arquivo %2.</translation>\n    </message>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"74\"/>\n        <source>Decline</source>\n        <translation>Recusar</translation>\n    </message>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"75\"/>\n        <source>Accept</source>\n        <translation>Aceitar</translation>\n    </message>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"112\"/>\n        <source>File received</source>\n        <translation>Arquivo recebido</translation>\n    </message>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"113\"/>\n        <source>The file %1 has been received and can be found in your Downloads folder.</source>\n        <translation>O arquivo %1 foi recebido e pode ser encontrado na pasta Downloads.</translation>\n    </message>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"119\"/>\n        <source>File transfer failed</source>\n        <translation>Falha na transferência</translation>\n    </message>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"120\"/>\n        <source>The file %1 was unable to be received.</source>\n        <translation>Não foi possível receber o arquivo %1.</translation>\n    </message>\n</context>\n<context>\n    <name>Common</name>\n    <message>\n        <source>Phone</source>\n        <translation type=\"vanished\">Telefone</translation>\n    </message>\n    <message>\n        <source>Modem</source>\n        <translation type=\"vanished\">Modem</translation>\n    </message>\n    <message>\n        <source>Computer</source>\n        <translation type=\"vanished\">Computador</translation>\n    </message>\n    <message>\n        <source>Networking</source>\n        <translation type=\"vanished\">Rede</translation>\n    </message>\n    <message>\n        <source>Headset</source>\n        <translation type=\"vanished\">Headset</translation>\n    </message>\n    <message>\n        <source>Headphones</source>\n        <translation type=\"vanished\">Fones de ouvido</translation>\n    </message>\n    <message>\n        <source>Audio/Video</source>\n        <translation type=\"vanished\">Áudio/Vídeo</translation>\n    </message>\n    <message>\n        <source>Keyboard</source>\n        <translation type=\"vanished\">Teclado</translation>\n    </message>\n    <message>\n        <source>Mouse</source>\n        <translation type=\"vanished\">Mouse</translation>\n    </message>\n    <message>\n        <source>Gamepad</source>\n        <translation type=\"vanished\">Gamepad</translation>\n    </message>\n    <message>\n        <source>Drawing Tablet</source>\n        <translation type=\"vanished\">Mesa digitalizadora</translation>\n    </message>\n    <message>\n        <source>Peripheral</source>\n        <translation type=\"vanished\">Periférico</translation>\n    </message>\n    <message>\n        <source>Camera</source>\n        <translation type=\"vanished\">Câmera</translation>\n    </message>\n    <message>\n        <source>Printer</source>\n        <translation type=\"vanished\">Impressora</translation>\n    </message>\n    <message>\n        <source>Imaging</source>\n        <translation type=\"vanished\">Dispositivo de imagem</translation>\n    </message>\n    <message>\n        <source>Wearable</source>\n        <translation type=\"vanished\">Acessório wearable</translation>\n    </message>\n    <message>\n        <source>Toy</source>\n        <translation type=\"vanished\">Brinquedo</translation>\n    </message>\n    <message>\n        <source>Health</source>\n        <translation type=\"vanished\">Saúde</translation>\n    </message>\n    <message>\n        <source>Unknown</source>\n        <translation type=\"vanished\">Desconhecido</translation>\n    </message>\n</context>\n<context>\n    <name>DevicePopover</name>\n    <message>\n        <location filename=\"../settings/devicepopover.ui\" line=\"124\"/>\n        <source>ACTIONS</source>\n        <translation>AÇÕES</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/devicepopover.ui\" line=\"133\"/>\n        <source>Connect</source>\n        <translation>Conectar</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/devicepopover.ui\" line=\"140\"/>\n        <source>Disconnect</source>\n        <translation>Desconectar</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/devicepopover.ui\" line=\"147\"/>\n        <source>Remove</source>\n        <translation>Remover</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/devicepopover.cpp\" line=\"72\"/>\n        <source>Failed to connect</source>\n        <translation>Falha ao conectar</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/devicepopover.cpp\" line=\"75\"/>\n        <source>Connecting to %1 failed.</source>\n        <translation>Falha ao conectar-se com %1.</translation>\n    </message>\n</context>\n<context>\n    <name>PairPopover</name>\n    <message>\n        <location filename=\"../settings/pairpopover.ui\" line=\"57\"/>\n        <source>Pair Device</source>\n        <translation>Emparelhar dispositivo</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/pairpopover.ui\" line=\"64\"/>\n        <source>To get started, ensure the device you want to pair is visible. This may be achieved by opening the Bluetooth settings or pressing a button on the other device.</source>\n        <translation>Certifique-se que o dispositivo que você quer emparelhar está visível. Pode ser necessário abrir as configurações Bluetooth ou apertar um botão no outro dispositivo.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/pairpopover.ui\" line=\"383\"/>\n        <source>Confirm Pairing Code</source>\n        <translation>Confirme o código de emparelhamento</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/pairpopover.cpp\" line=\"92\"/>\n        <source>Then press ENTER or RETURN.</source>\n        <translation>Então aperte ENTER.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/pairpopover.cpp\" line=\"130\"/>\n        <source>Failed to pair</source>\n        <translation>Falha ao emparelhar</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/pairpopover.cpp\" line=\"133\"/>\n        <source>Pairing with %1 failed because the pairing code was incorrect.</source>\n        <translation>O emparelhamento com %1 falhou porque o código de emparelhamento estava incorreto.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/pairpopover.cpp\" line=\"136\"/>\n        <source>Pairing with %1 failed because the device rejected the pairing request.</source>\n        <translation>O emparelhamento com %1 falhou porque o dispositivo rejeitou a solicitação de emparelhamento.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/pairpopover.cpp\" line=\"139\"/>\n        <source>Pairing with %1 failed because the pairing code was not confirmed in time.</source>\n        <translation>O emparelhamento com %1 falhou porque o código de emparelhamento não foi confirmado a tempo.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/pairpopover.cpp\" line=\"142\"/>\n        <source>Pairing with %1 failed.</source>\n        <translation>O emparelhamento com %1 falhou.</translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/BluetoothPlugin/translations/ro.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"ro\" sourcelanguage=\"en_US\">\n<context>\n    <name>BluetoothChunk</name>\n    <message numerus=\"yes\">\n        <location filename=\"../chunk/bluetoothchunk.cpp\" line=\"60\"/>\n        <source>%n devices connected</source>\n        <translation>\n            <numerusform>Un dispozitiv conectat</numerusform>\n            <numerusform>%n dispozitive conectate</numerusform>\n            <numerusform>%n dispozitive conectate</numerusform>\n        </translation>\n    </message>\n</context>\n<context>\n    <name>BluetoothPluginCommon</name>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"29\"/>\n        <source>Phone</source>\n        <translation type=\"unfinished\">Telefon</translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"31\"/>\n        <source>Modem</source>\n        <translation type=\"unfinished\">Modem</translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"33\"/>\n        <source>Computer</source>\n        <translation type=\"unfinished\">Calculator</translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"35\"/>\n        <source>Networking</source>\n        <translation type=\"unfinished\">Rețelistică</translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"37\"/>\n        <source>Headset</source>\n        <translation type=\"unfinished\">Headset</translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"39\"/>\n        <source>Headphones</source>\n        <translation type=\"unfinished\">Căști</translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"41\"/>\n        <source>Audio/Video</source>\n        <translation type=\"unfinished\">Audio/Video</translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"43\"/>\n        <source>Keyboard</source>\n        <translation type=\"unfinished\">Tastatură</translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"45\"/>\n        <source>Mouse</source>\n        <translation type=\"unfinished\">Mouse</translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"47\"/>\n        <source>Gamepad</source>\n        <translation type=\"unfinished\">Gamepad</translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"49\"/>\n        <source>Drawing Tablet</source>\n        <translation type=\"unfinished\">Tabletă grafică</translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"51\"/>\n        <source>Peripheral</source>\n        <translation type=\"unfinished\">Periferic</translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"53\"/>\n        <source>Camera</source>\n        <translation type=\"unfinished\">Cameră</translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"55\"/>\n        <source>Printer</source>\n        <translation type=\"unfinished\">Imprimantă</translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"57\"/>\n        <source>Imaging</source>\n        <translation type=\"unfinished\">Imagistică</translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"59\"/>\n        <source>Wearable</source>\n        <translation type=\"unfinished\">De purtat</translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"61\"/>\n        <source>Toy</source>\n        <translation type=\"unfinished\">Jucărie</translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"63\"/>\n        <source>Health</source>\n        <translation type=\"unfinished\">Sănătate</translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"65\"/>\n        <source>Unknown</source>\n        <translation type=\"unfinished\">Necunoscut</translation>\n    </message>\n</context>\n<context>\n    <name>BluetoothSettingsPane</name>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"35\"/>\n        <location filename=\"../settings/bluetoothsettingspane.cpp\" line=\"76\"/>\n        <location filename=\"../settings/bluetoothsettingspane.cpp\" line=\"181\"/>\n        <source>Bluetooth</source>\n        <translation>Bluetooth</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"106\"/>\n        <source>ACTIONS</source>\n        <translation>ACȚIUNI</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"113\"/>\n        <source>Pair New Device</source>\n        <translation>Asociază un nou dispozitiv</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"139\"/>\n        <source>Visible to other devices</source>\n        <translation>Vizibil de către alte dispozitive</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"166\"/>\n        <source>DISCOVERABILITY</source>\n        <translation>VIZIBILITATE</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"213\"/>\n        <source>DEVICES</source>\n        <translation>DISPOZITIVE</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"272\"/>\n        <source>Bluetooth is unavailable</source>\n        <translation>Bluetooth este indisponibil</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"295\"/>\n        <source>Install a Bluetooth card to use Bluetooth</source>\n        <translation>Instalați un adaptor Bluetooth pentru a folosi Bluetooth</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"340\"/>\n        <source>Bluetooth is disabled</source>\n        <translation>Bluetooth este dezactivat</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"363\"/>\n        <source>Switch Bluetooth on to connect to Bluetooth devices</source>\n        <translation>Activați Bluetooth pentru a putea folosi dispozitivele Bluetooth</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"373\"/>\n        <source>Enable Bluetooth</source>\n        <translation>Activează Bluetooth</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.cpp\" line=\"119\"/>\n        <source>To pair with this device, look for %1 on the other device.</source>\n        <translation>Pentru se asocia cu acest dispozitiv, căutați %1 celuilalt dispozitiv.</translation>\n    </message>\n</context>\n<context>\n    <name>BtAgent</name>\n    <message>\n        <location filename=\"../btagent.cpp\" line=\"89\"/>\n        <location filename=\"../btagent.cpp\" line=\"119\"/>\n        <source>Bluetooth</source>\n        <translation>Bluetooth</translation>\n    </message>\n    <message>\n        <location filename=\"../btagent.cpp\" line=\"90\"/>\n        <location filename=\"../btagent.cpp\" line=\"120\"/>\n        <source>Pair with %1?</source>\n        <translation>Doriți să asociați %1?</translation>\n    </message>\n    <message>\n        <location filename=\"../btagent.cpp\" line=\"91\"/>\n        <source>In order to complete pairing, confirm that the following pairing code is shown on %1.</source>\n        <translation>Pentru a finaliza asocierea, asigurați-v că următorul cod de asociere este afișat pe %1.</translation>\n    </message>\n    <message>\n        <location filename=\"../btagent.cpp\" line=\"92\"/>\n        <source>If it is, you can accept the pairing request.</source>\n        <translation>Dacă da, puteți să acceptați solicitarea.</translation>\n    </message>\n    <message>\n        <location filename=\"../btagent.cpp\" line=\"93\"/>\n        <location filename=\"../btagent.cpp\" line=\"122\"/>\n        <source>Decline</source>\n        <translation>Refuză</translation>\n    </message>\n    <message>\n        <location filename=\"../btagent.cpp\" line=\"94\"/>\n        <source>Accept and Pair</source>\n        <translation>Acceptă și asociază</translation>\n    </message>\n    <message>\n        <location filename=\"../btagent.cpp\" line=\"121\"/>\n        <source>Accept the pairing request from %1?</source>\n        <translation>Acceptați solicitarea de asociere din partea %1?</translation>\n    </message>\n    <message>\n        <location filename=\"../btagent.cpp\" line=\"123\"/>\n        <source>Pair</source>\n        <translation>Asociere</translation>\n    </message>\n</context>\n<context>\n    <name>BtObex</name>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"71\"/>\n        <location filename=\"../btobex.cpp\" line=\"111\"/>\n        <location filename=\"../btobex.cpp\" line=\"118\"/>\n        <source>Bluetooth</source>\n        <translation>Bluetooth</translation>\n    </message>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"72\"/>\n        <source>Incoming file</source>\n        <translation>Fișier în primire</translation>\n    </message>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"73\"/>\n        <source>%1 is sending you the file %2.</source>\n        <translation>%1 dorește să trimită %2.</translation>\n    </message>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"74\"/>\n        <source>Decline</source>\n        <translation>Refuză</translation>\n    </message>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"75\"/>\n        <source>Accept</source>\n        <translation>Acceptă</translation>\n    </message>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"112\"/>\n        <source>File received</source>\n        <translation>Fișier primit</translation>\n    </message>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"113\"/>\n        <source>The file %1 has been received and can be found in your Downloads folder.</source>\n        <translation>Fișierul %1 a fost primit și poate fi găsit în folderul de descărcări.</translation>\n    </message>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"119\"/>\n        <source>File transfer failed</source>\n        <translation>Transfer eșuat</translation>\n    </message>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"120\"/>\n        <source>The file %1 was unable to be received.</source>\n        <translation>Fișierul %1 nu a putut fi primit.</translation>\n    </message>\n</context>\n<context>\n    <name>Common</name>\n    <message>\n        <source>Phone</source>\n        <translation type=\"vanished\">Telefon</translation>\n    </message>\n    <message>\n        <source>Modem</source>\n        <translation type=\"vanished\">Modem</translation>\n    </message>\n    <message>\n        <source>Computer</source>\n        <translation type=\"vanished\">Calculator</translation>\n    </message>\n    <message>\n        <source>Networking</source>\n        <translation type=\"vanished\">Rețelistică</translation>\n    </message>\n    <message>\n        <source>Headset</source>\n        <translation type=\"vanished\">Headset</translation>\n    </message>\n    <message>\n        <source>Headphones</source>\n        <translation type=\"vanished\">Căști</translation>\n    </message>\n    <message>\n        <source>Audio/Video</source>\n        <translation type=\"vanished\">Audio/Video</translation>\n    </message>\n    <message>\n        <source>Keyboard</source>\n        <translation type=\"vanished\">Tastatură</translation>\n    </message>\n    <message>\n        <source>Mouse</source>\n        <translation type=\"vanished\">Mouse</translation>\n    </message>\n    <message>\n        <source>Gamepad</source>\n        <translation type=\"vanished\">Gamepad</translation>\n    </message>\n    <message>\n        <source>Drawing Tablet</source>\n        <translation type=\"vanished\">Tabletă grafică</translation>\n    </message>\n    <message>\n        <source>Peripheral</source>\n        <translation type=\"vanished\">Periferic</translation>\n    </message>\n    <message>\n        <source>Camera</source>\n        <translation type=\"vanished\">Cameră</translation>\n    </message>\n    <message>\n        <source>Printer</source>\n        <translation type=\"vanished\">Imprimantă</translation>\n    </message>\n    <message>\n        <source>Imaging</source>\n        <translation type=\"vanished\">Imagistică</translation>\n    </message>\n    <message>\n        <source>Wearable</source>\n        <translation type=\"vanished\">De purtat</translation>\n    </message>\n    <message>\n        <source>Toy</source>\n        <translation type=\"vanished\">Jucărie</translation>\n    </message>\n    <message>\n        <source>Health</source>\n        <translation type=\"vanished\">Sănătate</translation>\n    </message>\n    <message>\n        <source>Unknown</source>\n        <translation type=\"vanished\">Necunoscut</translation>\n    </message>\n</context>\n<context>\n    <name>DevicePopover</name>\n    <message>\n        <location filename=\"../settings/devicepopover.ui\" line=\"124\"/>\n        <source>ACTIONS</source>\n        <translation>ACȚIUNI</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/devicepopover.ui\" line=\"133\"/>\n        <source>Connect</source>\n        <translation>Conectare</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/devicepopover.ui\" line=\"140\"/>\n        <source>Disconnect</source>\n        <translation>Deconectare</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/devicepopover.ui\" line=\"147\"/>\n        <source>Remove</source>\n        <translation>Elimină</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/devicepopover.cpp\" line=\"72\"/>\n        <source>Failed to connect</source>\n        <translation>Conexiunea a eșuat</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/devicepopover.cpp\" line=\"75\"/>\n        <source>Connecting to %1 failed.</source>\n        <translation>Conectarea la %1 a eșuat.</translation>\n    </message>\n</context>\n<context>\n    <name>PairPopover</name>\n    <message>\n        <location filename=\"../settings/pairpopover.ui\" line=\"57\"/>\n        <source>Pair Device</source>\n        <translation>Asociază dispozitivul</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/pairpopover.ui\" line=\"64\"/>\n        <source>To get started, ensure the device you want to pair is visible. This may be achieved by opening the Bluetooth settings or pressing a button on the other device.</source>\n        <translation>Asigurați-vă că dispozitivul pe care doriți să îl asociați este vizibil pentru a începe. Acest lucru poate fi realizat prin deschiderea setărilor de Bluetooth sau apăsarea unui buton pe dispozitiv.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/pairpopover.ui\" line=\"383\"/>\n        <source>Confirm Pairing Code</source>\n        <translation>Confirmați codul de asociere</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/pairpopover.cpp\" line=\"92\"/>\n        <source>Then press ENTER or RETURN.</source>\n        <translation>Apoi apăsați ENTER sau RETURN.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/pairpopover.cpp\" line=\"130\"/>\n        <source>Failed to pair</source>\n        <translation>Nu s-a putut asocia</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/pairpopover.cpp\" line=\"133\"/>\n        <source>Pairing with %1 failed because the pairing code was incorrect.</source>\n        <translation>Asocierea cu %1 a eșuat deoarece codul de asociere este incorect.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/pairpopover.cpp\" line=\"136\"/>\n        <source>Pairing with %1 failed because the device rejected the pairing request.</source>\n        <translation>Asocierea cu %1 a eșuat deoarece dispozitivul a refuzat solicitarea.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/pairpopover.cpp\" line=\"139\"/>\n        <source>Pairing with %1 failed because the pairing code was not confirmed in time.</source>\n        <translation>Asocierea cu %1 a eșuat deoarece codul de asociere nu a fost confirmat la timp.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/pairpopover.cpp\" line=\"142\"/>\n        <source>Pairing with %1 failed.</source>\n        <translation>Asocierea cu %1 a eșuat.</translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/BluetoothPlugin/translations/sv.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"sv\" sourcelanguage=\"en_US\">\n<context>\n    <name>BluetoothChunk</name>\n    <message numerus=\"yes\">\n        <location filename=\"../chunk/bluetoothchunk.cpp\" line=\"60\"/>\n        <source>%n devices connected</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n        </translation>\n    </message>\n</context>\n<context>\n    <name>BluetoothPluginCommon</name>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"29\"/>\n        <source>Phone</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"31\"/>\n        <source>Modem</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"33\"/>\n        <source>Computer</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"35\"/>\n        <source>Networking</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"37\"/>\n        <source>Headset</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"39\"/>\n        <source>Headphones</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"41\"/>\n        <source>Audio/Video</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"43\"/>\n        <source>Keyboard</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"45\"/>\n        <source>Mouse</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"47\"/>\n        <source>Gamepad</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"49\"/>\n        <source>Drawing Tablet</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"51\"/>\n        <source>Peripheral</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"53\"/>\n        <source>Camera</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"55\"/>\n        <source>Printer</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"57\"/>\n        <source>Imaging</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"59\"/>\n        <source>Wearable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"61\"/>\n        <source>Toy</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"63\"/>\n        <source>Health</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"65\"/>\n        <source>Unknown</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>BluetoothSettingsPane</name>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"35\"/>\n        <location filename=\"../settings/bluetoothsettingspane.cpp\" line=\"76\"/>\n        <location filename=\"../settings/bluetoothsettingspane.cpp\" line=\"181\"/>\n        <source>Bluetooth</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"106\"/>\n        <source>ACTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"113\"/>\n        <source>Pair New Device</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"139\"/>\n        <source>Visible to other devices</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"166\"/>\n        <source>DISCOVERABILITY</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"213\"/>\n        <source>DEVICES</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"272\"/>\n        <source>Bluetooth is unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"295\"/>\n        <source>Install a Bluetooth card to use Bluetooth</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"340\"/>\n        <source>Bluetooth is disabled</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"363\"/>\n        <source>Switch Bluetooth on to connect to Bluetooth devices</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"373\"/>\n        <source>Enable Bluetooth</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.cpp\" line=\"119\"/>\n        <source>To pair with this device, look for %1 on the other device.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>BtAgent</name>\n    <message>\n        <location filename=\"../btagent.cpp\" line=\"89\"/>\n        <location filename=\"../btagent.cpp\" line=\"119\"/>\n        <source>Bluetooth</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btagent.cpp\" line=\"90\"/>\n        <location filename=\"../btagent.cpp\" line=\"120\"/>\n        <source>Pair with %1?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btagent.cpp\" line=\"91\"/>\n        <source>In order to complete pairing, confirm that the following pairing code is shown on %1.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btagent.cpp\" line=\"92\"/>\n        <source>If it is, you can accept the pairing request.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btagent.cpp\" line=\"93\"/>\n        <location filename=\"../btagent.cpp\" line=\"122\"/>\n        <source>Decline</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btagent.cpp\" line=\"94\"/>\n        <source>Accept and Pair</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btagent.cpp\" line=\"121\"/>\n        <source>Accept the pairing request from %1?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btagent.cpp\" line=\"123\"/>\n        <source>Pair</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>BtObex</name>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"71\"/>\n        <location filename=\"../btobex.cpp\" line=\"111\"/>\n        <location filename=\"../btobex.cpp\" line=\"118\"/>\n        <source>Bluetooth</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"72\"/>\n        <source>Incoming file</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"73\"/>\n        <source>%1 is sending you the file %2.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"74\"/>\n        <source>Decline</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"75\"/>\n        <source>Accept</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"112\"/>\n        <source>File received</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"113\"/>\n        <source>The file %1 has been received and can be found in your Downloads folder.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"119\"/>\n        <source>File transfer failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"120\"/>\n        <source>The file %1 was unable to be received.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>DevicePopover</name>\n    <message>\n        <location filename=\"../settings/devicepopover.ui\" line=\"124\"/>\n        <source>ACTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/devicepopover.ui\" line=\"133\"/>\n        <source>Connect</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/devicepopover.ui\" line=\"140\"/>\n        <source>Disconnect</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/devicepopover.ui\" line=\"147\"/>\n        <source>Remove</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/devicepopover.cpp\" line=\"72\"/>\n        <source>Failed to connect</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/devicepopover.cpp\" line=\"75\"/>\n        <source>Connecting to %1 failed.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>PairPopover</name>\n    <message>\n        <location filename=\"../settings/pairpopover.ui\" line=\"57\"/>\n        <source>Pair Device</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/pairpopover.ui\" line=\"64\"/>\n        <source>To get started, ensure the device you want to pair is visible. This may be achieved by opening the Bluetooth settings or pressing a button on the other device.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/pairpopover.ui\" line=\"383\"/>\n        <source>Confirm Pairing Code</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/pairpopover.cpp\" line=\"92\"/>\n        <source>Then press ENTER or RETURN.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/pairpopover.cpp\" line=\"130\"/>\n        <source>Failed to pair</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/pairpopover.cpp\" line=\"133\"/>\n        <source>Pairing with %1 failed because the pairing code was incorrect.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/pairpopover.cpp\" line=\"136\"/>\n        <source>Pairing with %1 failed because the device rejected the pairing request.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/pairpopover.cpp\" line=\"139\"/>\n        <source>Pairing with %1 failed because the pairing code was not confirmed in time.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/pairpopover.cpp\" line=\"142\"/>\n        <source>Pairing with %1 failed.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/BluetoothPlugin/translations/tr.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"tr\" sourcelanguage=\"en_US\">\n<context>\n    <name>BluetoothChunk</name>\n    <message numerus=\"yes\">\n        <location filename=\"../chunk/bluetoothchunk.cpp\" line=\"60\"/>\n        <source>%n devices connected</source>\n        <translation>\n            <numerusform>%n bağlı cihazlar</numerusform>\n        </translation>\n    </message>\n</context>\n<context>\n    <name>BluetoothPluginCommon</name>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"29\"/>\n        <source>Phone</source>\n        <translation type=\"unfinished\">Telefon</translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"31\"/>\n        <source>Modem</source>\n        <translation type=\"unfinished\">Modem</translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"33\"/>\n        <source>Computer</source>\n        <translation type=\"unfinished\">Bilgisayar</translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"35\"/>\n        <source>Networking</source>\n        <translation type=\"unfinished\">Ağ</translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"37\"/>\n        <source>Headset</source>\n        <translation type=\"unfinished\">Kulaklık</translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"39\"/>\n        <source>Headphones</source>\n        <translation type=\"unfinished\">Kulaklıklar</translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"41\"/>\n        <source>Audio/Video</source>\n        <translation type=\"unfinished\">Ses/Video</translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"43\"/>\n        <source>Keyboard</source>\n        <translation type=\"unfinished\">Klavye</translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"45\"/>\n        <source>Mouse</source>\n        <translation type=\"unfinished\">Mouse</translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"47\"/>\n        <source>Gamepad</source>\n        <translation type=\"unfinished\">Oyun kumanda</translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"49\"/>\n        <source>Drawing Tablet</source>\n        <translation type=\"unfinished\">Çizim Tableti</translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"51\"/>\n        <source>Peripheral</source>\n        <translation type=\"unfinished\">Çevresel</translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"53\"/>\n        <source>Camera</source>\n        <translation type=\"unfinished\">Kamera</translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"55\"/>\n        <source>Printer</source>\n        <translation type=\"unfinished\">Yazıcı</translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"57\"/>\n        <source>Imaging</source>\n        <translation type=\"unfinished\">Görüntüleme</translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"59\"/>\n        <source>Wearable</source>\n        <translation type=\"unfinished\">Giyilebilir</translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"61\"/>\n        <source>Toy</source>\n        <translation type=\"unfinished\">Oyuncak</translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"63\"/>\n        <source>Health</source>\n        <translation type=\"unfinished\">Sağlık</translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"65\"/>\n        <source>Unknown</source>\n        <translation type=\"unfinished\">Bilinmeyen</translation>\n    </message>\n</context>\n<context>\n    <name>BluetoothSettingsPane</name>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"35\"/>\n        <location filename=\"../settings/bluetoothsettingspane.cpp\" line=\"76\"/>\n        <location filename=\"../settings/bluetoothsettingspane.cpp\" line=\"181\"/>\n        <source>Bluetooth</source>\n        <translation>Bluetooth</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"106\"/>\n        <source>ACTIONS</source>\n        <translation>HAREKETLER</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"113\"/>\n        <source>Pair New Device</source>\n        <translation>Yeni Cihazı Eşle</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"139\"/>\n        <source>Visible to other devices</source>\n        <translation>Diğer cihazlara görünür</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"166\"/>\n        <source>DISCOVERABILITY</source>\n        <translation>KEŞFEDİLEBİLİRLİK</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"213\"/>\n        <source>DEVICES</source>\n        <translation>CIHAZLAR</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"272\"/>\n        <source>Bluetooth is unavailable</source>\n        <translation>Bluetooth kullanılamıyor</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"295\"/>\n        <source>Install a Bluetooth card to use Bluetooth</source>\n        <translation>Bluetooth&apos;u kullanmak için bir Bluetooth kartı takın</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"340\"/>\n        <source>Bluetooth is disabled</source>\n        <translation>Bluetooth devre dışı</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"363\"/>\n        <source>Switch Bluetooth on to connect to Bluetooth devices</source>\n        <translation>Bluetooth cihazlarına bağlanmak için Bluetooth&apos;u açın</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"373\"/>\n        <source>Enable Bluetooth</source>\n        <translation>Bluetooth&apos;u etkinleştir</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.cpp\" line=\"119\"/>\n        <source>To pair with this device, look for %1 on the other device.</source>\n        <translation>Bu aygıtla eşleştirmek için diğer aygıtta %1 öğesini arayın.</translation>\n    </message>\n</context>\n<context>\n    <name>BtAgent</name>\n    <message>\n        <location filename=\"../btagent.cpp\" line=\"89\"/>\n        <location filename=\"../btagent.cpp\" line=\"119\"/>\n        <source>Bluetooth</source>\n        <translation>Bluetooth</translation>\n    </message>\n    <message>\n        <location filename=\"../btagent.cpp\" line=\"90\"/>\n        <location filename=\"../btagent.cpp\" line=\"120\"/>\n        <source>Pair with %1?</source>\n        <translation>%1 ile eşleşecek mi?</translation>\n    </message>\n    <message>\n        <location filename=\"../btagent.cpp\" line=\"91\"/>\n        <source>In order to complete pairing, confirm that the following pairing code is shown on %1.</source>\n        <translation>Eşleştirmeyi tamamlamak için, %1 üzerinde aşağıdaki eşleştirme kodunun gösterildiğinden emin olun.</translation>\n    </message>\n    <message>\n        <location filename=\"../btagent.cpp\" line=\"92\"/>\n        <source>If it is, you can accept the pairing request.</source>\n        <translation>Eğer öyleyse, eşleştirme isteğini kabul edebilirsiniz.</translation>\n    </message>\n    <message>\n        <location filename=\"../btagent.cpp\" line=\"93\"/>\n        <location filename=\"../btagent.cpp\" line=\"122\"/>\n        <source>Decline</source>\n        <translation>Reddet</translation>\n    </message>\n    <message>\n        <location filename=\"../btagent.cpp\" line=\"94\"/>\n        <source>Accept and Pair</source>\n        <translation>Kabul et ve Eşleştir</translation>\n    </message>\n    <message>\n        <location filename=\"../btagent.cpp\" line=\"121\"/>\n        <source>Accept the pairing request from %1?</source>\n        <translation>%1 gelen eşleştirme isteğini kabul ediyor musun?</translation>\n    </message>\n    <message>\n        <location filename=\"../btagent.cpp\" line=\"123\"/>\n        <source>Pair</source>\n        <translation>Ekle</translation>\n    </message>\n</context>\n<context>\n    <name>BtObex</name>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"71\"/>\n        <location filename=\"../btobex.cpp\" line=\"111\"/>\n        <location filename=\"../btobex.cpp\" line=\"118\"/>\n        <source>Bluetooth</source>\n        <translation>Bluetooth</translation>\n    </message>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"72\"/>\n        <source>Incoming file</source>\n        <translation>Gelen dosya</translation>\n    </message>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"73\"/>\n        <source>%1 is sending you the file %2.</source>\n        <translation>%1 seni %2 dosyasını gönderiyor.</translation>\n    </message>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"74\"/>\n        <source>Decline</source>\n        <translation>Reddet</translation>\n    </message>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"75\"/>\n        <source>Accept</source>\n        <translation>Kabul et</translation>\n    </message>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"112\"/>\n        <source>File received</source>\n        <translation>Dosya alındı</translation>\n    </message>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"113\"/>\n        <source>The file %1 has been received and can be found in your Downloads folder.</source>\n        <translation>%1 dosyası alındı ve indirilenler klasörünüzde bulunabilir.</translation>\n    </message>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"119\"/>\n        <source>File transfer failed</source>\n        <translation>Dosya aktarımı başarısız oldu</translation>\n    </message>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"120\"/>\n        <source>The file %1 was unable to be received.</source>\n        <translation>%1 dosyası alınamadı.</translation>\n    </message>\n</context>\n<context>\n    <name>Common</name>\n    <message>\n        <source>Phone</source>\n        <translation type=\"vanished\">Telefon</translation>\n    </message>\n    <message>\n        <source>Modem</source>\n        <translation type=\"vanished\">Modem</translation>\n    </message>\n    <message>\n        <source>Computer</source>\n        <translation type=\"vanished\">Bilgisayar</translation>\n    </message>\n    <message>\n        <source>Networking</source>\n        <translation type=\"vanished\">Ağ</translation>\n    </message>\n    <message>\n        <source>Headset</source>\n        <translation type=\"vanished\">Kulaklık</translation>\n    </message>\n    <message>\n        <source>Headphones</source>\n        <translation type=\"vanished\">Kulaklıklar</translation>\n    </message>\n    <message>\n        <source>Audio/Video</source>\n        <translation type=\"vanished\">Ses/Video</translation>\n    </message>\n    <message>\n        <source>Keyboard</source>\n        <translation type=\"vanished\">Klavye</translation>\n    </message>\n    <message>\n        <source>Mouse</source>\n        <translation type=\"vanished\">Mouse</translation>\n    </message>\n    <message>\n        <source>Gamepad</source>\n        <translation type=\"vanished\">Oyun kumanda</translation>\n    </message>\n    <message>\n        <source>Drawing Tablet</source>\n        <translation type=\"vanished\">Çizim Tableti</translation>\n    </message>\n    <message>\n        <source>Peripheral</source>\n        <translation type=\"vanished\">Çevresel</translation>\n    </message>\n    <message>\n        <source>Camera</source>\n        <translation type=\"vanished\">Kamera</translation>\n    </message>\n    <message>\n        <source>Printer</source>\n        <translation type=\"vanished\">Yazıcı</translation>\n    </message>\n    <message>\n        <source>Imaging</source>\n        <translation type=\"vanished\">Görüntüleme</translation>\n    </message>\n    <message>\n        <source>Wearable</source>\n        <translation type=\"vanished\">Giyilebilir</translation>\n    </message>\n    <message>\n        <source>Toy</source>\n        <translation type=\"vanished\">Oyuncak</translation>\n    </message>\n    <message>\n        <source>Health</source>\n        <translation type=\"vanished\">Sağlık</translation>\n    </message>\n    <message>\n        <source>Unknown</source>\n        <translation type=\"vanished\">Bilinmeyen</translation>\n    </message>\n</context>\n<context>\n    <name>DevicePopover</name>\n    <message>\n        <location filename=\"../settings/devicepopover.ui\" line=\"124\"/>\n        <source>ACTIONS</source>\n        <translation>HAREKETLER</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/devicepopover.ui\" line=\"133\"/>\n        <source>Connect</source>\n        <translation>Bağlan</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/devicepopover.ui\" line=\"140\"/>\n        <source>Disconnect</source>\n        <translation>Bağlantıyı kes</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/devicepopover.ui\" line=\"147\"/>\n        <source>Remove</source>\n        <translation>Sil</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/devicepopover.cpp\" line=\"72\"/>\n        <source>Failed to connect</source>\n        <translation>Bağlanılamadı</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/devicepopover.cpp\" line=\"75\"/>\n        <source>Connecting to %1 failed.</source>\n        <translation>%1&apos;e bağlanılamadı.</translation>\n    </message>\n</context>\n<context>\n    <name>PairPopover</name>\n    <message>\n        <location filename=\"../settings/pairpopover.ui\" line=\"57\"/>\n        <source>Pair Device</source>\n        <translation>Cihazı Eşleştir</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/pairpopover.ui\" line=\"64\"/>\n        <source>To get started, ensure the device you want to pair is visible. This may be achieved by opening the Bluetooth settings or pressing a button on the other device.</source>\n        <translation>Başlamak için, eşleştirmek istediğiniz cihazın görünür olduğundan emin olun. Bu, Bluetooth ayarlarını açarak ya da başka bir cihazdaki bir düğmeye basarak elde edilebilir.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/pairpopover.ui\" line=\"383\"/>\n        <source>Confirm Pairing Code</source>\n        <translation>Eşleştirme Kodunu Onayla</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/pairpopover.cpp\" line=\"92\"/>\n        <source>Then press ENTER or RETURN.</source>\n        <translation>Ardından ENTER ya da RETURN&apos;e basın.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/pairpopover.cpp\" line=\"130\"/>\n        <source>Failed to pair</source>\n        <translation>Eşleştirmek için başarısız oldu</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/pairpopover.cpp\" line=\"133\"/>\n        <source>Pairing with %1 failed because the pairing code was incorrect.</source>\n        <translation>Eşleştirme kodu yanlış olduğu için %1 ile eşleştirme başarısız oldu.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/pairpopover.cpp\" line=\"136\"/>\n        <source>Pairing with %1 failed because the device rejected the pairing request.</source>\n        <translation>Cihaz eşleştirme isteğini reddettiği için %1 ile eşleştirme başarısız oldu.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/pairpopover.cpp\" line=\"139\"/>\n        <source>Pairing with %1 failed because the pairing code was not confirmed in time.</source>\n        <translation>Eşleştirme kodu zamanında onaylanmadığı için %1 ile eşleştirme başarısız oldu.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/pairpopover.cpp\" line=\"142\"/>\n        <source>Pairing with %1 failed.</source>\n        <translation>%1 ile eşleştirme başarısız oldu.</translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/BluetoothPlugin/translations/vi.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"vi\" sourcelanguage=\"en_US\">\n<context>\n    <name>BluetoothChunk</name>\n    <message numerus=\"yes\">\n        <location filename=\"../chunk/bluetoothchunk.cpp\" line=\"60\"/>\n        <source>%n devices connected</source>\n        <translation>\n            <numerusform>%n thiết bị kết nối</numerusform>\n        </translation>\n    </message>\n</context>\n<context>\n    <name>BluetoothPluginCommon</name>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"29\"/>\n        <source>Phone</source>\n        <translation type=\"unfinished\">Điện thoại</translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"31\"/>\n        <source>Modem</source>\n        <translation type=\"unfinished\">Bộ điều giải</translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"33\"/>\n        <source>Computer</source>\n        <translation type=\"unfinished\">Máy tính</translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"35\"/>\n        <source>Networking</source>\n        <translation type=\"unfinished\">Thiết bị mạng</translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"37\"/>\n        <source>Headset</source>\n        <translation type=\"unfinished\">Tai nghe có micrô</translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"39\"/>\n        <source>Headphones</source>\n        <translation type=\"unfinished\">Tai nghe</translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"41\"/>\n        <source>Audio/Video</source>\n        <translation type=\"unfinished\">Âm thanh/Video</translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"43\"/>\n        <source>Keyboard</source>\n        <translation type=\"unfinished\">Bàn phím</translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"45\"/>\n        <source>Mouse</source>\n        <translation type=\"unfinished\">Chuột</translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"47\"/>\n        <source>Gamepad</source>\n        <translation type=\"unfinished\">Bộ điều khiển</translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"49\"/>\n        <source>Drawing Tablet</source>\n        <translation type=\"unfinished\">Bảng vẽ</translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"51\"/>\n        <source>Peripheral</source>\n        <translation type=\"unfinished\">Ngoại vi</translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"53\"/>\n        <source>Camera</source>\n        <translation type=\"unfinished\">Máy ảnh</translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"55\"/>\n        <source>Printer</source>\n        <translation type=\"unfinished\">Máy in</translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"57\"/>\n        <source>Imaging</source>\n        <translation type=\"unfinished\">Máy hình ảnh</translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"59\"/>\n        <source>Wearable</source>\n        <translation type=\"unfinished\">Thiết bị đeo</translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"61\"/>\n        <source>Toy</source>\n        <translation type=\"unfinished\">Đồ chơi</translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"63\"/>\n        <source>Health</source>\n        <translation type=\"unfinished\">Thiết bị sức khỏe</translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"65\"/>\n        <source>Unknown</source>\n        <translation type=\"unfinished\">Không xác định</translation>\n    </message>\n</context>\n<context>\n    <name>BluetoothSettingsPane</name>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"35\"/>\n        <location filename=\"../settings/bluetoothsettingspane.cpp\" line=\"76\"/>\n        <location filename=\"../settings/bluetoothsettingspane.cpp\" line=\"181\"/>\n        <source>Bluetooth</source>\n        <translation>Bluetooth</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"106\"/>\n        <source>ACTIONS</source>\n        <translation>HOẠT ĐỘNG</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"113\"/>\n        <source>Pair New Device</source>\n        <translation>Ghép thiết bị mới</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"139\"/>\n        <source>Visible to other devices</source>\n        <translation>Phát hiện trên thiết bị khác</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"166\"/>\n        <source>DISCOVERABILITY</source>\n        <translation>HIỂN THỊ TRÊN THIẾT BỊ KHÁC</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"213\"/>\n        <source>DEVICES</source>\n        <translation>THIẾT BỊ</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"272\"/>\n        <source>Bluetooth is unavailable</source>\n        <translation>Bluetooth không khả dụng</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"295\"/>\n        <source>Install a Bluetooth card to use Bluetooth</source>\n        <translation>Hãy cài một bộ mạch Bluetooth để sử dụng Bluetooth</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"340\"/>\n        <source>Bluetooth is disabled</source>\n        <translation>Bluetooth bị vô hiệu</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"363\"/>\n        <source>Switch Bluetooth on to connect to Bluetooth devices</source>\n        <translation>Bật Bluetooth để kết nối với thiết bị Bluetooth</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"373\"/>\n        <source>Enable Bluetooth</source>\n        <translation>Bật Bluetooth</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.cpp\" line=\"119\"/>\n        <source>To pair with this device, look for %1 on the other device.</source>\n        <translation>Để ghép với thiết bị này, tìm tên %1 trên thiết bị kia.</translation>\n    </message>\n</context>\n<context>\n    <name>BtAgent</name>\n    <message>\n        <location filename=\"../btagent.cpp\" line=\"89\"/>\n        <location filename=\"../btagent.cpp\" line=\"119\"/>\n        <source>Bluetooth</source>\n        <translation>Bluetooth</translation>\n    </message>\n    <message>\n        <location filename=\"../btagent.cpp\" line=\"90\"/>\n        <location filename=\"../btagent.cpp\" line=\"120\"/>\n        <source>Pair with %1?</source>\n        <translation>Ghép với %1?</translation>\n    </message>\n    <message>\n        <location filename=\"../btagent.cpp\" line=\"91\"/>\n        <source>In order to complete pairing, confirm that the following pairing code is shown on %1.</source>\n        <translation>Để hoàn thành hoạt động ghép nối, vui lòng đảm bảo rằng mã dưới đây hiển thị trên %1.</translation>\n    </message>\n    <message>\n        <location filename=\"../btagent.cpp\" line=\"92\"/>\n        <source>If it is, you can accept the pairing request.</source>\n        <translation>Nếu mã có hiển thị, bạn có thể chấp nhận yêu cầu ghép nối.</translation>\n    </message>\n    <message>\n        <location filename=\"../btagent.cpp\" line=\"93\"/>\n        <location filename=\"../btagent.cpp\" line=\"122\"/>\n        <source>Decline</source>\n        <translation>Từ chối</translation>\n    </message>\n    <message>\n        <location filename=\"../btagent.cpp\" line=\"94\"/>\n        <source>Accept and Pair</source>\n        <translation>Chấp nhận và Ghép nối</translation>\n    </message>\n    <message>\n        <location filename=\"../btagent.cpp\" line=\"121\"/>\n        <source>Accept the pairing request from %1?</source>\n        <translation>Chấp nhận yêu cầu ghép nối từ %1?</translation>\n    </message>\n    <message>\n        <location filename=\"../btagent.cpp\" line=\"123\"/>\n        <source>Pair</source>\n        <translation>Ghép nối</translation>\n    </message>\n</context>\n<context>\n    <name>BtObex</name>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"71\"/>\n        <location filename=\"../btobex.cpp\" line=\"111\"/>\n        <location filename=\"../btobex.cpp\" line=\"118\"/>\n        <source>Bluetooth</source>\n        <translation>Bluetooth</translation>\n    </message>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"72\"/>\n        <source>Incoming file</source>\n        <translation>Tệp đến</translation>\n    </message>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"73\"/>\n        <source>%1 is sending you the file %2.</source>\n        <translation>%1 muốn gửi bạn tệp %2.</translation>\n    </message>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"74\"/>\n        <source>Decline</source>\n        <translation>Từ chối</translation>\n    </message>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"75\"/>\n        <source>Accept</source>\n        <translation>Chấp nhận</translation>\n    </message>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"112\"/>\n        <source>File received</source>\n        <translation>Tệp đã nhận được</translation>\n    </message>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"113\"/>\n        <source>The file %1 has been received and can be found in your Downloads folder.</source>\n        <translation>Tệp X đã bị nhận được, và bạn có thể xem nó trong thư mục tải xuống.</translation>\n    </message>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"119\"/>\n        <source>File transfer failed</source>\n        <translation>Hoạt động chuyển tệp không thành công</translation>\n    </message>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"120\"/>\n        <source>The file %1 was unable to be received.</source>\n        <translation>Tệp %1 không thể nhận được.</translation>\n    </message>\n</context>\n<context>\n    <name>Common</name>\n    <message>\n        <source>Phone</source>\n        <translation type=\"vanished\">Điện thoại</translation>\n    </message>\n    <message>\n        <source>Modem</source>\n        <translation type=\"vanished\">Bộ điều giải</translation>\n    </message>\n    <message>\n        <source>Computer</source>\n        <translation type=\"vanished\">Máy tính</translation>\n    </message>\n    <message>\n        <source>Networking</source>\n        <translation type=\"vanished\">Thiết bị mạng</translation>\n    </message>\n    <message>\n        <source>Headset</source>\n        <translation type=\"vanished\">Tai nghe có micrô</translation>\n    </message>\n    <message>\n        <source>Headphones</source>\n        <translation type=\"vanished\">Tai nghe</translation>\n    </message>\n    <message>\n        <source>Audio/Video</source>\n        <translation type=\"vanished\">Âm thanh/Video</translation>\n    </message>\n    <message>\n        <source>Keyboard</source>\n        <translation type=\"vanished\">Bàn phím</translation>\n    </message>\n    <message>\n        <source>Mouse</source>\n        <translation type=\"vanished\">Chuột</translation>\n    </message>\n    <message>\n        <source>Gamepad</source>\n        <translation type=\"vanished\">Bộ điều khiển</translation>\n    </message>\n    <message>\n        <source>Drawing Tablet</source>\n        <translation type=\"vanished\">Bảng vẽ</translation>\n    </message>\n    <message>\n        <source>Peripheral</source>\n        <translation type=\"vanished\">Ngoại vi</translation>\n    </message>\n    <message>\n        <source>Camera</source>\n        <translation type=\"vanished\">Máy ảnh</translation>\n    </message>\n    <message>\n        <source>Printer</source>\n        <translation type=\"vanished\">Máy in</translation>\n    </message>\n    <message>\n        <source>Imaging</source>\n        <translation type=\"vanished\">Máy hình ảnh</translation>\n    </message>\n    <message>\n        <source>Wearable</source>\n        <translation type=\"vanished\">Thiết bị đeo</translation>\n    </message>\n    <message>\n        <source>Toy</source>\n        <translation type=\"vanished\">Đồ chơi</translation>\n    </message>\n    <message>\n        <source>Health</source>\n        <translation type=\"vanished\">Thiết bị sức khỏe</translation>\n    </message>\n    <message>\n        <source>Unknown</source>\n        <translation type=\"vanished\">Không xác định</translation>\n    </message>\n</context>\n<context>\n    <name>DevicePopover</name>\n    <message>\n        <location filename=\"../settings/devicepopover.ui\" line=\"124\"/>\n        <source>ACTIONS</source>\n        <translation>HOẠT ĐỘNG</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/devicepopover.ui\" line=\"133\"/>\n        <source>Connect</source>\n        <translation>Kết nối</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/devicepopover.ui\" line=\"140\"/>\n        <source>Disconnect</source>\n        <translation>Ngắt kết nối</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/devicepopover.ui\" line=\"147\"/>\n        <source>Remove</source>\n        <translation>Xóa</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/devicepopover.cpp\" line=\"72\"/>\n        <source>Failed to connect</source>\n        <translation>Không thể kết nối</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/devicepopover.cpp\" line=\"75\"/>\n        <source>Connecting to %1 failed.</source>\n        <translation>Không thể kết nối với %1.</translation>\n    </message>\n</context>\n<context>\n    <name>PairPopover</name>\n    <message>\n        <location filename=\"../settings/pairpopover.ui\" line=\"57\"/>\n        <source>Pair Device</source>\n        <translation>Ghép thiết bị mới</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/pairpopover.ui\" line=\"64\"/>\n        <source>To get started, ensure the device you want to pair is visible. This may be achieved by opening the Bluetooth settings or pressing a button on the other device.</source>\n        <translation>Để bắt đầu, hãy đảm bảo thiết bị bạn muốn ghép nối cho sẽ phát hiện với thiết bị khác. Điều này có thể đạt được bằng cách cài đặt Bluetooth hoặc nhấn một nút trên thiết bị kia.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/pairpopover.ui\" line=\"383\"/>\n        <source>Confirm Pairing Code</source>\n        <translation>Xác nhận mã ghép</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/pairpopover.cpp\" line=\"92\"/>\n        <source>Then press ENTER or RETURN.</source>\n        <translation>Rồi bấm ENTER hoặc RETURN.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/pairpopover.cpp\" line=\"130\"/>\n        <source>Failed to pair</source>\n        <translation>Không thể ghép nối</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/pairpopover.cpp\" line=\"133\"/>\n        <source>Pairing with %1 failed because the pairing code was incorrect.</source>\n        <translation>Không thể ghép với %1 tại vì mã ghép không đúng.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/pairpopover.cpp\" line=\"136\"/>\n        <source>Pairing with %1 failed because the device rejected the pairing request.</source>\n        <translation>Không thể ghép với %1 tại vì thiết bị kia từ chối yêu cầu ghép nối.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/pairpopover.cpp\" line=\"139\"/>\n        <source>Pairing with %1 failed because the pairing code was not confirmed in time.</source>\n        <translation>Không thể ghép với %1 tại vì mất quá nhiều thời gian xác nhận mã ghép.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/pairpopover.cpp\" line=\"142\"/>\n        <source>Pairing with %1 failed.</source>\n        <translation>Không thể ghép với %1.</translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/BluetoothPlugin/translations/vi_VN.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"vi_VN\">\n<context>\n    <name>BluetoothChunk</name>\n    <message numerus=\"yes\">\n        <location filename=\"../chunk/bluetoothchunk.cpp\" line=\"60\"/>\n        <source>%n devices connected</source>\n        <translation>\n            <numerusform>%n thiết bị kết nối</numerusform>\n        </translation>\n    </message>\n</context>\n<context>\n    <name>BluetoothPluginCommon</name>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"29\"/>\n        <source>Phone</source>\n        <translation>Điện thoại</translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"31\"/>\n        <source>Modem</source>\n        <translation>Modem</translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"33\"/>\n        <source>Computer</source>\n        <translation>Máy tính</translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"35\"/>\n        <source>Networking</source>\n        <translation>Thiết bị mạng</translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"37\"/>\n        <source>Headset</source>\n        <translation>Tai nghe có micrô</translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"39\"/>\n        <source>Headphones</source>\n        <translation>Tai nghe</translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"41\"/>\n        <source>Audio/Video</source>\n        <translation>Âm thanh/video</translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"43\"/>\n        <source>Keyboard</source>\n        <translation>Bàn phím</translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"45\"/>\n        <source>Mouse</source>\n        <translation>Chuột</translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"47\"/>\n        <source>Gamepad</source>\n        <translation>Tay cầm trò chơi</translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"49\"/>\n        <source>Drawing Tablet</source>\n        <translation>Bảng vẽ</translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"51\"/>\n        <source>Peripheral</source>\n        <translation>Thiết bị ngoại vi</translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"53\"/>\n        <source>Camera</source>\n        <translation>Máy ảnh</translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"55\"/>\n        <source>Printer</source>\n        <translation>Máy in</translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"57\"/>\n        <source>Imaging</source>\n        <translation>Máy quét</translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"59\"/>\n        <source>Wearable</source>\n        <translation>Thiết bị đeo</translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"61\"/>\n        <source>Toy</source>\n        <translation>Trò chơi</translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"63\"/>\n        <source>Health</source>\n        <translation>Thiết bị y tế</translation>\n    </message>\n    <message>\n        <location filename=\"../bluetoothplugincommon.cpp\" line=\"65\"/>\n        <source>Unknown</source>\n        <translation>Không xác định</translation>\n    </message>\n</context>\n<context>\n    <name>BluetoothSettingsPane</name>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"35\"/>\n        <location filename=\"../settings/bluetoothsettingspane.cpp\" line=\"76\"/>\n        <location filename=\"../settings/bluetoothsettingspane.cpp\" line=\"181\"/>\n        <source>Bluetooth</source>\n        <translation>Bluetooth</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"106\"/>\n        <source>ACTIONS</source>\n        <translation>HOẠT ĐỘNG</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"113\"/>\n        <source>Pair New Device</source>\n        <translation>Ghép nối thiết bị mới</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"139\"/>\n        <source>Visible to other devices</source>\n        <translation>Có thể khám phá bởi thiết bị khác</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"166\"/>\n        <source>DISCOVERABILITY</source>\n        <translation>KHẢ NĂNG KHÁM PHÁ</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"213\"/>\n        <source>DEVICES</source>\n        <translation>THIẾT BỊ</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"272\"/>\n        <source>Bluetooth is unavailable</source>\n        <translation>Bluetooth không có sẵn</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"295\"/>\n        <source>Install a Bluetooth card to use Bluetooth</source>\n        <translation>Cài đặt phần cứng Bluetooth để sử dụng Bluetooth</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"340\"/>\n        <source>Bluetooth is disabled</source>\n        <translation>Bluetooth bị vô hiệu</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"363\"/>\n        <source>Switch Bluetooth on to connect to Bluetooth devices</source>\n        <translation>Bật Bluetooth để kết nối với thiết bị Bluetooth</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.ui\" line=\"373\"/>\n        <source>Enable Bluetooth</source>\n        <translation>Bật Bluetooth</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/bluetoothsettingspane.cpp\" line=\"119\"/>\n        <source>To pair with this device, look for %1 on the other device.</source>\n        <translation>Để ghép nối với thiết bị này, tìm kiếm tên %1 trên thiết bị kia.</translation>\n    </message>\n</context>\n<context>\n    <name>BtAgent</name>\n    <message>\n        <location filename=\"../btagent.cpp\" line=\"89\"/>\n        <location filename=\"../btagent.cpp\" line=\"119\"/>\n        <source>Bluetooth</source>\n        <translation>Bluetooth</translation>\n    </message>\n    <message>\n        <location filename=\"../btagent.cpp\" line=\"90\"/>\n        <location filename=\"../btagent.cpp\" line=\"120\"/>\n        <source>Pair with %1?</source>\n        <translation>Ghép nối với %1?</translation>\n    </message>\n    <message>\n        <location filename=\"../btagent.cpp\" line=\"91\"/>\n        <source>In order to complete pairing, confirm that the following pairing code is shown on %1.</source>\n        <translation>Để hoàn thành hoạt động ghép nối, vùi lòng xác nhận rằng đoạn mã sau được hiển thị trên %1.</translation>\n    </message>\n    <message>\n        <location filename=\"../btagent.cpp\" line=\"92\"/>\n        <source>If it is, you can accept the pairing request.</source>\n        <translation>Nếu thiết bị đó hiển thị mã, bạn có thể chấp nhận yêu cầu ghép nối.</translation>\n    </message>\n    <message>\n        <location filename=\"../btagent.cpp\" line=\"93\"/>\n        <location filename=\"../btagent.cpp\" line=\"122\"/>\n        <source>Decline</source>\n        <translation>Từ chối</translation>\n    </message>\n    <message>\n        <location filename=\"../btagent.cpp\" line=\"94\"/>\n        <source>Accept and Pair</source>\n        <translation>Chấp nhận và ghép nối</translation>\n    </message>\n    <message>\n        <location filename=\"../btagent.cpp\" line=\"121\"/>\n        <source>Accept the pairing request from %1?</source>\n        <translation>Chấp nhận yêu cầu ghép nối từ %1?</translation>\n    </message>\n    <message>\n        <location filename=\"../btagent.cpp\" line=\"123\"/>\n        <source>Pair</source>\n        <translation>Ghép nối</translation>\n    </message>\n</context>\n<context>\n    <name>BtObex</name>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"71\"/>\n        <location filename=\"../btobex.cpp\" line=\"111\"/>\n        <location filename=\"../btobex.cpp\" line=\"118\"/>\n        <source>Bluetooth</source>\n        <translation>Bluetooth</translation>\n    </message>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"72\"/>\n        <source>Incoming file</source>\n        <translation>Tệp đến</translation>\n    </message>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"73\"/>\n        <source>%1 is sending you the file %2.</source>\n        <translation>%1 đang gửi bạn tệp %2.</translation>\n    </message>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"74\"/>\n        <source>Decline</source>\n        <translation>Từ chối</translation>\n    </message>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"75\"/>\n        <source>Accept</source>\n        <translation>Chấp nhận</translation>\n    </message>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"112\"/>\n        <source>File received</source>\n        <translation>Tệp bị nhận thành công</translation>\n    </message>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"113\"/>\n        <source>The file %1 has been received and can be found in your Downloads folder.</source>\n        <translation>Tệp %1 đã bị nhận thành công và được đặt trong thử mục tài xuống của bạn.</translation>\n    </message>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"119\"/>\n        <source>File transfer failed</source>\n        <translation>Hoạt động chuyển tệp không thành công</translation>\n    </message>\n    <message>\n        <location filename=\"../btobex.cpp\" line=\"120\"/>\n        <source>The file %1 was unable to be received.</source>\n        <translation>Không thể nhận được tệp %1.</translation>\n    </message>\n</context>\n<context>\n    <name>DevicePopover</name>\n    <message>\n        <location filename=\"../settings/devicepopover.ui\" line=\"124\"/>\n        <source>ACTIONS</source>\n        <translation>HOẠT ĐỘNG</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/devicepopover.ui\" line=\"133\"/>\n        <source>Connect</source>\n        <translation>Kết nối</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/devicepopover.ui\" line=\"140\"/>\n        <source>Disconnect</source>\n        <translation>Ngắt kết nối</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/devicepopover.ui\" line=\"147\"/>\n        <source>Remove</source>\n        <translation>Xóa</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/devicepopover.cpp\" line=\"72\"/>\n        <source>Failed to connect</source>\n        <translation>Không thể kết nối</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/devicepopover.cpp\" line=\"75\"/>\n        <source>Connecting to %1 failed.</source>\n        <translation>Kết nối với %1 không có thành công.</translation>\n    </message>\n</context>\n<context>\n    <name>PairPopover</name>\n    <message>\n        <location filename=\"../settings/pairpopover.ui\" line=\"57\"/>\n        <source>Pair Device</source>\n        <translation>Ghép nối thiết bị</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/pairpopover.ui\" line=\"64\"/>\n        <source>To get started, ensure the device you want to pair is visible. This may be achieved by opening the Bluetooth settings or pressing a button on the other device.</source>\n        <translation>Để bắt đầu, đảm bảo rằng cái thiết bị bạn muốn ghép nối có thể bị khám phá. Bạn có thể đạt được điều này bằng cách mở cái đặt Bluetooth hoặc nhấn nút trên thiết bị kia.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/pairpopover.ui\" line=\"383\"/>\n        <source>Confirm Pairing Code</source>\n        <translation>Xác nhận mã ghép nối</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/pairpopover.cpp\" line=\"92\"/>\n        <source>Then press ENTER or RETURN.</source>\n        <translation>Rồi nhấn ENTER hoặc RETURN</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/pairpopover.cpp\" line=\"130\"/>\n        <source>Failed to pair</source>\n        <translation>Không thể ghép nối</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/pairpopover.cpp\" line=\"133\"/>\n        <source>Pairing with %1 failed because the pairing code was incorrect.</source>\n        <translation>Ghép nối với %1 không thành công tại vì mã ghép nối không có khớp.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/pairpopover.cpp\" line=\"136\"/>\n        <source>Pairing with %1 failed because the device rejected the pairing request.</source>\n        <translation>Ghép nối với %1 không thành công tại vì thiết bị kia từ chối yêu cầu ghép nối.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/pairpopover.cpp\" line=\"139\"/>\n        <source>Pairing with %1 failed because the pairing code was not confirmed in time.</source>\n        <translation>Ghép nối với %1 không thành công tại vì hết giờ xác nhận mã ghép nối.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/pairpopover.cpp\" line=\"142\"/>\n        <source>Pairing with %1 failed.</source>\n        <translation>Ghép nối với %1 không thành công.</translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/BrightnessPlugin/BrightnessPlugin.pro",
    "content": "QT += gui widgets\n\nTEMPLATE = lib\nCONFIG += plugin\n\nCONFIG += c++11\n\n# Include the-libs build tools\ninclude(/usr/share/the-libs/pri/gentranslations.pri)\n\n# The following define makes your compiler emit warnings if you use\n# any Qt feature that has been marked deprecated (the exact warnings\n# depend on your compiler). Please consult the documentation of the\n# deprecated API in order to know how to port your code away from it.\nDEFINES += QT_DEPRECATED_WARNINGS\n\n# You can also make your code fail to compile if it uses deprecated APIs.\n# In order to do so, uncomment the following line.\n# You can also select to disable deprecated APIs only up to a certain version of Qt.\n#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0\n\nSOURCES += \\\n    plugin.cpp \\\n    screenbrightnesschunk.cpp\n\nHEADERS += \\\n    plugin.h \\\n    screenbrightnesschunk.h\n\nDISTFILES += Plugin.json \\\n    defaults.conf\n\nunix {\n    translations.files = translations/*.qm\n    translations.path = /usr/share/thedesk/BrightnessPlugin/translations\n\n    defaults.files = defaults.conf\n    defaults.path = /etc/theSuite/theDesk/BrightnessPlugin/\n\n    INSTALLS += translations defaults\n}\n\ninclude(../plugins.pri)\n\nFORMS += \\\n    screenbrightnesschunk.ui\n"
  },
  {
    "path": "plugins/BrightnessPlugin/CMakeLists.txt",
    "content": "cmake_minimum_required(VERSION 3.24.0)\n\nfind_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets)\nfind_package(libcontemporary)\n\nset(SOURCES\n    plugin.cpp\n    screenbrightnesschunk.cpp\n\n    screenbrightnesschunk.ui\n)\n\nset(HEADERS\n    plugin.h\n    screenbrightnesschunk.h\n)\n\nset(PLUGIN_NAME brightness)\nadd_plugin_td(${PLUGIN_NAME})\ntarget_sources(plugin-${PLUGIN_NAME} PRIVATE ${SOURCES} ${HEADERS})\ncntp_defaults_file(${PLUGIN_NAME}\n    DEFAULTS_FILE thedesk-brightness.conf)\n\ntarget_link_libraries(plugin-${PLUGIN_NAME} Qt::Widgets libcontemporary libthedesk)\n"
  },
  {
    "path": "plugins/BrightnessPlugin/Plugin.json",
    "content": "{\n    \"name\": \"Screen Brightness Management\",\n    \"icon\": \"preferences-system-display\",\n    \"uuid\": \"97d10af3-da66-470c-85cb-aa2e4ed2f8d7\",\n    \"vi\": {\n        \"name\": \"Quản lý độ sáng\"\n    }\n}\n"
  },
  {
    "path": "plugins/BrightnessPlugin/plugin.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"plugin.h\"\n\n#include \"screenbrightnesschunk.h\"\n#include <QApplication>\n#include <QDebug>\n#include <QDir>\n#include <QKeySequence>\n#include <Screens/screendaemon.h>\n#include <Screens/systemscreen.h>\n#include <hudmanager.h>\n#include <keygrab.h>\n#include <localemanager.h>\n#include <statemanager.h>\n#include <tapplication.h>\n#include <tsettings.h>\n\nstruct PluginPrivate {\n        KeyGrab* brightnessUp;\n        KeyGrab* brightnessDown;\n\n        ScreenBrightnessChunk* chunk;\n};\n\nPlugin::Plugin() {\n    d = new PluginPrivate();\n}\n\nPlugin::~Plugin() {\n    delete d;\n}\n\nvoid Plugin::activate() {\n    tApplication::addPluginTranslator(CNTP_TARGET_NAME);\n    tSettings::registerDefaults(QDir::cleanPath(qApp->applicationDirPath() + \"/../plugins/BrightnessPlugin/thedesk-brightness.conf\"));\n    tSettings::registerDefaults(\"/usr/share/defaults/thedesk-brightness.conf\");\n\n    d->brightnessUp = new KeyGrab(QKeySequence(Qt::Key_MonBrightnessUp), \"brightnessUp\");\n    d->brightnessDown = new KeyGrab(QKeySequence(Qt::Key_MonBrightnessDown), \"brightnessDown\");\n    connect(d->brightnessUp, &KeyGrab::activated, this, [=] {\n        SystemScreen* screen = ScreenDaemon::instance()->primayScreen();\n        if (screen && screen->isScreenBrightnessAvailable()) {\n            double newBrightness = screen->screenBrightness() + 0.05;\n            if (newBrightness > 1) newBrightness = 1;\n            screen->setScreenBrightness(newBrightness);\n\n            StateManager::instance()->hudManager()->showHud({\n                {\"icon\",  \"video-display\" },\n                {\"title\", tr(\"Brightness\")},\n                {\"value\", newBrightness   }\n            });\n        } else {\n            StateManager::instance()->hudManager()->showHud({\n                {\"icon\",  \"video-display\" },\n                {\"title\", tr(\"Brightness\")},\n                {\"text\",  \"Unavailable\"   }\n            });\n        }\n    });\n    connect(d->brightnessDown, &KeyGrab::activated, this, [=] {\n        SystemScreen* screen = ScreenDaemon::instance()->primayScreen();\n        if (screen && screen->isScreenBrightnessAvailable()) {\n            double newBrightness = screen->screenBrightness() - 0.05;\n            if (newBrightness < 0) newBrightness = 0;\n            screen->setScreenBrightness(newBrightness);\n\n            StateManager::instance()->hudManager()->showHud({\n                {\"icon\",  \"video-display\" },\n                {\"title\", tr(\"Brightness\")},\n                {\"value\", newBrightness   }\n            });\n        } else {\n            StateManager::instance()->hudManager()->showHud({\n                {\"icon\",  \"video-display\" },\n                {\"title\", tr(\"Brightness\")},\n                {\"text\",  \"Unavailable\"   }\n            });\n        }\n    });\n\n    d->chunk = new ScreenBrightnessChunk();\n}\n\nvoid Plugin::deactivate() {\n    d->brightnessUp->deleteLater();\n    d->brightnessDown->deleteLater();\n\n    d->chunk->deleteLater();\n\n    tApplication::removePluginTranslator(CNTP_TARGET_NAME);\n}\n"
  },
  {
    "path": "plugins/BrightnessPlugin/plugin.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef PLUGIN_H\n#define PLUGIN_H\n\n#include \"plugins/plugininterface.h\"\n\nstruct PluginPrivate;\nclass Plugin : public QObject,\n               public PluginInterface {\n        Q_OBJECT\n        Q_PLUGIN_METADATA(IID PluginInterface_iid FILE \"Plugin.json\")\n        Q_INTERFACES(PluginInterface)\n\n    public:\n        Plugin();\n        ~Plugin();\n\n    private:\n        PluginPrivate* d;\n\n        // PluginInterface interface\n    public:\n        void activate();\n        void deactivate();\n};\n\n#endif // PLUGIN_H\n"
  },
  {
    "path": "plugins/BrightnessPlugin/screenbrightnesschunk.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"screenbrightnesschunk.h\"\n#include \"ui_screenbrightnesschunk.h\"\n\n#include <QIcon>\n#include <Screens/screendaemon.h>\n#include <Screens/systemscreen.h>\n#include <barmanager.h>\n#include <libcontemporary_global.h>\n#include <statemanager.h>\n\nScreenBrightnessChunk::ScreenBrightnessChunk() :\n    Chunk(),\n    ui(new Ui::ScreenBrightnessChunk) {\n    ui->setupUi(this);\n\n    ui->iconLabel->setPixmap(QIcon::fromTheme(\"video-display\").pixmap(SC_DPI_T(QSize(16, 16), QSize)));\n    ui->brightnessSlider->setFixedWidth(SC_DPI(200));\n\n    SystemScreen* screen = ScreenDaemon::instance()->primayScreen();\n    if (screen && screen->isScreenBrightnessAvailable()) {\n        StateManager::barManager()->addChunk(this);\n        connect(screen, &SystemScreen::screenBrightnessChanged, this, [=] {\n            ui->brightnessSlider->setValue(static_cast<int>(screen->screenBrightness() * 100));\n        });\n        ui->brightnessSlider->setValue(static_cast<int>(screen->screenBrightness() * 100));\n    }\n\n    connect(StateManager::barManager(), &BarManager::barHeightTransitioning, this, [=](qreal percentage) {\n        if (qFuzzyCompare(percentage, 1)) {\n            this->setFixedWidth(QWIDGETSIZE_MAX);\n        } else {\n            this->setFixedWidth(static_cast<int>(this->sizeHint().width() * percentage));\n        }\n    });\n}\n\nScreenBrightnessChunk::~ScreenBrightnessChunk() {\n    StateManager::barManager()->removeChunk(this);\n    delete ui;\n}\n\nQString ScreenBrightnessChunk::name() {\n    return \"Brightness\";\n}\n\nint ScreenBrightnessChunk::expandedHeight() {\n    return this->sizeHint().height();\n}\n\nint ScreenBrightnessChunk::statusBarHeight() {\n    return 0;\n}\n\nvoid ScreenBrightnessChunk::on_brightnessSlider_sliderMoved(int position) {\n    ScreenDaemon::instance()->primayScreen()->setScreenBrightness(position / 100.0);\n}\n"
  },
  {
    "path": "plugins/BrightnessPlugin/screenbrightnesschunk.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef SCREENBRIGHTNESSCHUNK_H\n#define SCREENBRIGHTNESSCHUNK_H\n\n#include <chunk.h>\n\nnamespace Ui {\n    class ScreenBrightnessChunk;\n}\n\nclass ScreenBrightnessChunk : public Chunk {\n        Q_OBJECT\n\n    public:\n        explicit ScreenBrightnessChunk();\n        ~ScreenBrightnessChunk();\n\n    private:\n        Ui::ScreenBrightnessChunk* ui;\n\n        // Chunk interface\n    public:\n        QString name();\n        int expandedHeight();\n        int statusBarHeight();\n    private slots:\n        void on_brightnessSlider_sliderMoved(int position);\n};\n\n#endif // SCREENBRIGHTNESSCHUNK_H\n"
  },
  {
    "path": "plugins/BrightnessPlugin/screenbrightnesschunk.ui",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ui version=\"4.0\">\n <class>ScreenBrightnessChunk</class>\n <widget class=\"QWidget\" name=\"ScreenBrightnessChunk\">\n  <property name=\"geometry\">\n   <rect>\n    <x>0</x>\n    <y>0</y>\n    <width>167</width>\n    <height>35</height>\n   </rect>\n  </property>\n  <property name=\"windowTitle\">\n   <string notr=\"true\">Form</string>\n  </property>\n  <layout class=\"QHBoxLayout\" name=\"horizontalLayout\">\n   <item>\n    <widget class=\"QLabel\" name=\"iconLabel\">\n     <property name=\"text\">\n      <string notr=\"true\">TextLabel</string>\n     </property>\n    </widget>\n   </item>\n   <item>\n    <widget class=\"QSlider\" name=\"brightnessSlider\">\n     <property name=\"sizePolicy\">\n      <sizepolicy hsizetype=\"Fixed\" vsizetype=\"Expanding\">\n       <horstretch>0</horstretch>\n       <verstretch>0</verstretch>\n      </sizepolicy>\n     </property>\n     <property name=\"maximum\">\n      <number>100</number>\n     </property>\n     <property name=\"orientation\">\n      <enum>Qt::Horizontal</enum>\n     </property>\n    </widget>\n   </item>\n  </layout>\n </widget>\n <resources/>\n <connections/>\n</ui>\n"
  },
  {
    "path": "plugins/BrightnessPlugin/thedesk-brightness.conf",
    "content": ""
  },
  {
    "path": "plugins/BrightnessPlugin/translations/ar_SA.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"ar_SA\" sourcelanguage=\"en_US\">\n<context>\n    <name>Plugin</name>\n    <message>\n        <location filename=\"../plugin.cpp\" line=\"67\"/>\n        <location filename=\"../plugin.cpp\" line=\"73\"/>\n        <location filename=\"../plugin.cpp\" line=\"87\"/>\n        <location filename=\"../plugin.cpp\" line=\"93\"/>\n        <source>Brightness</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/BrightnessPlugin/translations/au_AU.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"au_AU\" sourcelanguage=\"en_US\">\n<context>\n    <name>Plugin</name>\n    <message>\n        <location filename=\"../plugin.cpp\" line=\"67\"/>\n        <location filename=\"../plugin.cpp\" line=\"73\"/>\n        <location filename=\"../plugin.cpp\" line=\"87\"/>\n        <location filename=\"../plugin.cpp\" line=\"93\"/>\n        <source>Brightness</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/BrightnessPlugin/translations/cy.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"cy\" sourcelanguage=\"en_US\">\n<context>\n    <name>Plugin</name>\n    <message>\n        <location filename=\"../plugin.cpp\" line=\"67\"/>\n        <location filename=\"../plugin.cpp\" line=\"73\"/>\n        <location filename=\"../plugin.cpp\" line=\"87\"/>\n        <location filename=\"../plugin.cpp\" line=\"93\"/>\n        <source>Brightness</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/BrightnessPlugin/translations/da.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"da\" sourcelanguage=\"en_US\">\n<context>\n    <name>Plugin</name>\n    <message>\n        <location filename=\"../plugin.cpp\" line=\"67\"/>\n        <location filename=\"../plugin.cpp\" line=\"73\"/>\n        <location filename=\"../plugin.cpp\" line=\"87\"/>\n        <location filename=\"../plugin.cpp\" line=\"93\"/>\n        <source>Brightness</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/BrightnessPlugin/translations/de.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"de\" sourcelanguage=\"en_US\">\n<context>\n    <name>Plugin</name>\n    <message>\n        <location filename=\"../plugin.cpp\" line=\"67\"/>\n        <location filename=\"../plugin.cpp\" line=\"73\"/>\n        <location filename=\"../plugin.cpp\" line=\"87\"/>\n        <location filename=\"../plugin.cpp\" line=\"93\"/>\n        <source>Brightness</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/BrightnessPlugin/translations/en_GB.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"en_GB\" sourcelanguage=\"en_US\">\n<context>\n    <name>Plugin</name>\n    <message>\n        <location filename=\"../plugin.cpp\" line=\"67\"/>\n        <location filename=\"../plugin.cpp\" line=\"73\"/>\n        <location filename=\"../plugin.cpp\" line=\"87\"/>\n        <location filename=\"../plugin.cpp\" line=\"93\"/>\n        <source>Brightness</source>\n        <translation>Brightness</translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/BrightnessPlugin/translations/en_US.qm",
    "content": "<d\u0018!\u001c`"
  },
  {
    "path": "plugins/BrightnessPlugin/translations/en_US.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" sourcelanguage=\"en_US\">\n<context>\n    <name>Plugin</name>\n    <message>\n        <location filename=\"../plugin.cpp\" line=\"67\"/>\n        <location filename=\"../plugin.cpp\" line=\"73\"/>\n        <location filename=\"../plugin.cpp\" line=\"87\"/>\n        <location filename=\"../plugin.cpp\" line=\"93\"/>\n        <source>Brightness</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/BrightnessPlugin/translations/es.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"es\" sourcelanguage=\"en_US\">\n<context>\n    <name>Plugin</name>\n    <message>\n        <location filename=\"../plugin.cpp\" line=\"67\"/>\n        <location filename=\"../plugin.cpp\" line=\"73\"/>\n        <location filename=\"../plugin.cpp\" line=\"87\"/>\n        <location filename=\"../plugin.cpp\" line=\"93\"/>\n        <source>Brightness</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/BrightnessPlugin/translations/es_VE.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"es_VE\" sourcelanguage=\"en_US\">\n<context>\n    <name>Plugin</name>\n    <message>\n        <location filename=\"../plugin.cpp\" line=\"67\"/>\n        <location filename=\"../plugin.cpp\" line=\"73\"/>\n        <location filename=\"../plugin.cpp\" line=\"87\"/>\n        <location filename=\"../plugin.cpp\" line=\"93\"/>\n        <source>Brightness</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/BrightnessPlugin/translations/id_ID.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"id_ID\" sourcelanguage=\"en_US\">\n<context>\n    <name>Plugin</name>\n    <message>\n        <location filename=\"../plugin.cpp\" line=\"67\"/>\n        <location filename=\"../plugin.cpp\" line=\"73\"/>\n        <location filename=\"../plugin.cpp\" line=\"87\"/>\n        <location filename=\"../plugin.cpp\" line=\"93\"/>\n        <source>Brightness</source>\n        <translation>Kecerahan</translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/BrightnessPlugin/translations/nl.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"nl\" sourcelanguage=\"en_US\">\n<context>\n    <name>Plugin</name>\n    <message>\n        <location filename=\"../plugin.cpp\" line=\"67\"/>\n        <location filename=\"../plugin.cpp\" line=\"73\"/>\n        <location filename=\"../plugin.cpp\" line=\"87\"/>\n        <location filename=\"../plugin.cpp\" line=\"93\"/>\n        <source>Brightness</source>\n        <translation>Helderheid</translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/BrightnessPlugin/translations/pl_PL.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"pl_PL\" sourcelanguage=\"en_US\">\n<context>\n    <name>Plugin</name>\n    <message>\n        <location filename=\"../plugin.cpp\" line=\"67\"/>\n        <location filename=\"../plugin.cpp\" line=\"73\"/>\n        <location filename=\"../plugin.cpp\" line=\"87\"/>\n        <location filename=\"../plugin.cpp\" line=\"93\"/>\n        <source>Brightness</source>\n        <translation>Jasność</translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/BrightnessPlugin/translations/pt_BR.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"pt_BR\" sourcelanguage=\"en_US\">\n<context>\n    <name>Plugin</name>\n    <message>\n        <location filename=\"../plugin.cpp\" line=\"67\"/>\n        <location filename=\"../plugin.cpp\" line=\"73\"/>\n        <location filename=\"../plugin.cpp\" line=\"87\"/>\n        <location filename=\"../plugin.cpp\" line=\"93\"/>\n        <source>Brightness</source>\n        <translation>Brilho</translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/BrightnessPlugin/translations/ro_RO.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"ro_RO\" sourcelanguage=\"en_US\">\n<context>\n    <name>Plugin</name>\n    <message>\n        <location filename=\"../plugin.cpp\" line=\"67\"/>\n        <location filename=\"../plugin.cpp\" line=\"73\"/>\n        <location filename=\"../plugin.cpp\" line=\"87\"/>\n        <location filename=\"../plugin.cpp\" line=\"93\"/>\n        <source>Brightness</source>\n        <translation>Luminozitate</translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/BrightnessPlugin/translations/sk_SK.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"sk_SK\" sourcelanguage=\"en_US\">\n<context>\n    <name>Plugin</name>\n    <message>\n        <location filename=\"../plugin.cpp\" line=\"67\"/>\n        <location filename=\"../plugin.cpp\" line=\"73\"/>\n        <location filename=\"../plugin.cpp\" line=\"87\"/>\n        <location filename=\"../plugin.cpp\" line=\"93\"/>\n        <source>Brightness</source>\n        <translation>jas</translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/BrightnessPlugin/translations/sv.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"sv\" sourcelanguage=\"en_US\">\n<context>\n    <name>Plugin</name>\n    <message>\n        <location filename=\"../plugin.cpp\" line=\"67\"/>\n        <location filename=\"../plugin.cpp\" line=\"73\"/>\n        <location filename=\"../plugin.cpp\" line=\"87\"/>\n        <location filename=\"../plugin.cpp\" line=\"93\"/>\n        <source>Brightness</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/BrightnessPlugin/translations/tr_TR.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"tr_TR\" sourcelanguage=\"en_US\">\n<context>\n    <name>Plugin</name>\n    <message>\n        <location filename=\"../plugin.cpp\" line=\"67\"/>\n        <location filename=\"../plugin.cpp\" line=\"73\"/>\n        <location filename=\"../plugin.cpp\" line=\"87\"/>\n        <location filename=\"../plugin.cpp\" line=\"93\"/>\n        <source>Brightness</source>\n        <translation>Parlaklık</translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/BrightnessPlugin/translations/vi_VN.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"vi_VN\" sourcelanguage=\"en_US\">\n<context>\n    <name>Plugin</name>\n    <message>\n        <location filename=\"../plugin.cpp\" line=\"67\"/>\n        <location filename=\"../plugin.cpp\" line=\"73\"/>\n        <location filename=\"../plugin.cpp\" line=\"87\"/>\n        <location filename=\"../plugin.cpp\" line=\"93\"/>\n        <source>Brightness</source>\n        <translation>Độ sáng</translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/BrightnessPlugin/translations/zh_CN.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"zh_CN\" sourcelanguage=\"en_US\">\n<context>\n    <name>Plugin</name>\n    <message>\n        <location filename=\"../plugin.cpp\" line=\"67\"/>\n        <location filename=\"../plugin.cpp\" line=\"73\"/>\n        <location filename=\"../plugin.cpp\" line=\"87\"/>\n        <location filename=\"../plugin.cpp\" line=\"93\"/>\n        <source>Brightness</source>\n        <translation>亮度</translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/BrightnessPlugin/translations/zh_SG.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"sg_CF\" sourcelanguage=\"en_US\">\n<context>\n    <name>Plugin</name>\n    <message>\n        <location filename=\"../plugin.cpp\" line=\"67\"/>\n        <location filename=\"../plugin.cpp\" line=\"73\"/>\n        <location filename=\"../plugin.cpp\" line=\"87\"/>\n        <location filename=\"../plugin.cpp\" line=\"93\"/>\n        <source>Brightness</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/BrightnessPlugin/translations/zu_ZA.qm",
    "content": "<d\u0018!\u001c`"
  },
  {
    "path": "plugins/BrightnessPlugin/translations/zu_ZA.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" sourcelanguage=\"en_US\">\n<context>\n    <name>Plugin</name>\n    <message>\n        <location filename=\"../plugin.cpp\" line=\"67\"/>\n        <location filename=\"../plugin.cpp\" line=\"73\"/>\n        <location filename=\"../plugin.cpp\" line=\"87\"/>\n        <location filename=\"../plugin.cpp\" line=\"93\"/>\n        <source>Brightness</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/CMakeLists.txt",
    "content": "macro(add_plugin_td target)\n    add_library(plugin-${target} SHARED)\n    target_include_directories(plugin-${target} PUBLIC ../../libthedesk/)\n\n    cntp_init_plugin(thedesk plugin-${target} 20 plugin-${target})\n    cntp_translate(plugin-${target})\n\n    set_target_properties(plugin-${target} PROPERTIES\n            OUTPUT_NAME ${target}Plugin\n            FRAMEWORK FALSE)\nendmacro()\n\nadd_subdirectory(OverviewPlugin)\nadd_subdirectory(DisplayPlugin)\nadd_subdirectory(ScreenshotPlugin)\nadd_subdirectory(NotificationsPlugin)\nadd_subdirectory(ThemePlugin)\nadd_subdirectory(PowerPlugin)\nadd_subdirectory(LocalePlugin)\nadd_subdirectory(BrightnessPlugin)\nadd_subdirectory(DefaultsPlugin)\nadd_subdirectory(InputPlugin)\nadd_subdirectory(TimeDatePlugin)\nadd_subdirectory(AccessibilityPlugin)\n#add_subdirectory(AudioPlugin)\nadd_subdirectory(BluetoothPlugin)\nadd_subdirectory(NetworkPlugin)\nadd_subdirectory(UsersPlugin)\n"
  },
  {
    "path": "plugins/DefaultsPlugin/CMakeLists.txt",
    "content": "cmake_minimum_required(VERSION 3.24.0)\n\nfind_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets)\nfind_package(libcontemporary)\n\nset(SOURCES\n    defaultspane.cpp\n    plugin.cpp\n\n    defaultspane.ui\n)\n\nset(HEADERS\n    defaultspane.h\n    plugin.h\n)\n\nset(PLUGIN_NAME defaults)\nadd_plugin_td(${PLUGIN_NAME})\ntarget_sources(plugin-${PLUGIN_NAME} PRIVATE ${SOURCES} ${HEADERS})\ncntp_defaults_file(${PLUGIN_NAME}\n    DEFAULTS_FILE thedesk-defaults.conf)\n\ntarget_link_libraries(plugin-${PLUGIN_NAME} Qt${QT_VERSION_MAJOR}::Widgets libcontemporary libthedesk)\n"
  },
  {
    "path": "plugins/DefaultsPlugin/DefaultsPlugin.pro",
    "content": "QT += gui widgets tdesktopenvironment\n\nTEMPLATE = lib\nCONFIG += plugin\n\nCONFIG += c++11\n\n# Include the-libs build tools\ninclude(/usr/share/the-libs/pri/gentranslations.pri)\n\n# You can make your code fail to compile if it uses deprecated APIs.\n# In order to do so, uncomment the following line.\n#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0\n\nSOURCES += \\\n    defaultspane.cpp \\\n    plugin.cpp\n\nHEADERS += \\\n    defaultspane.h \\\n    plugin.h\n\nDISTFILES += \\\n    Plugin.json \\\n    defaults.conf\n\nunix {\n    translations.files = translations/*.qm\n    translations.path = /usr/share/thedesk/DefaultsPlugin/translations\n\n    defaults.files = defaults.conf\n    defaults.path = /etc/theSuite/theDesk/DefaultsPlugin/\n\n    INSTALLS += translations defaults\n}\n\ninclude(../plugins.pri)\n\nFORMS += \\\n    defaultspane.ui\n"
  },
  {
    "path": "plugins/DefaultsPlugin/Plugin.json",
    "content": "{\n    \"name\": \"Default Applications Management\",\n    \"icon\": \"preferences-desktop-default-applications\",\n    \"uuid\": \"f747b256-997f-4d0d-b0ba-6e111188cba5\",\n    \"vi\": {\n        \"name\": \"Quản lý ứng dụng mặc định\"\n    }\n}\n"
  },
  {
    "path": "plugins/DefaultsPlugin/defaultspane.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2021 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"defaultspane.h\"\n#include \"ui_defaultspane.h\"\n\n#include <QIcon>\n#include <statemanager.h>\n#include <statuscentermanager.h>\n#include <MimeAssociations/mimeassociationmanager.h>\n\nDefaultsPane::DefaultsPane() :\n    StatusCenterPane(),\n    ui(new Ui::DefaultsPane) {\n    ui->setupUi(this);\n\n    ui->titleLabel->setBackButtonIsMenu(true);\n    ui->titleLabel->setBackButtonShown(StateManager::instance()->statusCenterManager()->isHamburgerMenuRequired());\n    connect(StateManager::instance()->statusCenterManager(), &StatusCenterManager::isHamburgerMenuRequiredChanged, ui->titleLabel, &tTitleLabel::setBackButtonShown);\n\n    const int contentWidth = StateManager::instance()->statusCenterManager()->preferredContentWidth();\n    ui->defaultsWidget->setFixedWidth(contentWidth);\n\n    loadDefaults();\n}\n\nDefaultsPane::~DefaultsPane() {\n    delete ui;\n}\n\nvoid DefaultsPane::loadDefaults() {\n    auto populateBox = [ = ](QComboBox * box, QString mimeType) {\n        box->clear();\n\n        QList<ApplicationPointer> apps = MimeAssociationManager::applicationsForMimeType(mimeType);\n\n        if (apps.isEmpty()) {\n            box->setEnabled(false);\n        } else {\n            box->setEnabled(true);\n\n            QSignalBlocker blocker(box);\n            for (const ApplicationPointer& app : apps) {\n                box->addItem(QIcon::fromTheme(app->getProperty(\"Icon\").toString()), app->getProperty(\"Name\").toString(), app->desktopEntry());\n            }\n\n            ApplicationPointer app = MimeAssociationManager::defaultApplicationForMimeType(mimeType);\n            if (app) {\n                for (int i = 0; i < box->count(); i++) {\n                    if (box->itemData(i).toString() == app->desktopEntry()) box->setCurrentIndex(i);\n                }\n            }\n        }\n    };\n\n    populateBox(ui->defaultBrowserBox, \"x-scheme-handler/http\");\n    populateBox(ui->defaultMailBox, \"x-scheme-handler/mailto\");\n}\n\nQString DefaultsPane::name() {\n    return \"DefaultAppsSettings\";\n}\n\nQString DefaultsPane::displayName() {\n    return tr(\"Default Applications\");\n}\n\nQIcon DefaultsPane::icon() {\n    return QIcon::fromTheme(\"preferences-desktop-default-applications\");\n}\n\nQWidget* DefaultsPane::leftPane() {\n    return nullptr;\n}\n\nvoid DefaultsPane::on_titleLabel_backButtonClicked() {\n    StateManager::statusCenterManager()->showStatusCenterHamburgerMenu();\n}\n\nvoid DefaultsPane::on_defaultBrowserBox_currentIndexChanged(int index) {\n    QString app = ui->defaultBrowserBox->itemData(index).toString();\n    MimeAssociationManager::setDefaultApplicationForMimeType(app, \"x-scheme-handler/http\");\n    MimeAssociationManager::setDefaultApplicationForMimeType(app, \"x-scheme-handler/https\");\n}\n\nvoid DefaultsPane::on_defaultMailBox_currentIndexChanged(int index) {\n    QString app = ui->defaultMailBox->itemData(index).toString();\n    MimeAssociationManager::setDefaultApplicationForMimeType(app, \"x-scheme-handler/mailto\");\n}\n\n\nvoid DefaultsPane::changeEvent(QEvent* event) {\n    if (event->type() == QEvent::LanguageChange) {\n        ui->retranslateUi(this);\n        emit displayNameChanged();\n    }\n}\n"
  },
  {
    "path": "plugins/DefaultsPlugin/defaultspane.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2021 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef DEFAULTSPANE_H\n#define DEFAULTSPANE_H\n\n#include <statuscenterpane.h>\n\nnamespace Ui {\n    class DefaultsPane;\n}\n\nclass DefaultsPane : public StatusCenterPane {\n        Q_OBJECT\n\n    public:\n        explicit DefaultsPane();\n        ~DefaultsPane();\n\n    private:\n        Ui::DefaultsPane* ui;\n        void loadDefaults();\n\n        // StatusCenterPane interface\n    public:\n        QString name();\n        QString displayName();\n        QIcon icon();\n        QWidget* leftPane();\n\n    private slots:\n        void on_titleLabel_backButtonClicked();\n        void on_defaultBrowserBox_currentIndexChanged(int index);\n        void on_defaultMailBox_currentIndexChanged(int index);\n\n        // QWidget interface\n    protected:\n        void changeEvent(QEvent* event);\n};\n\n#endif // DEFAULTSPANE_H\n"
  },
  {
    "path": "plugins/DefaultsPlugin/defaultspane.ui",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ui version=\"4.0\">\n <class>DefaultsPane</class>\n <widget class=\"QWidget\" name=\"DefaultsPane\">\n  <property name=\"geometry\">\n   <rect>\n    <x>0</x>\n    <y>0</y>\n    <width>828</width>\n    <height>648</height>\n   </rect>\n  </property>\n  <property name=\"windowTitle\">\n   <string notr=\"true\">Form</string>\n  </property>\n  <layout class=\"QVBoxLayout\" name=\"verticalLayout\">\n   <property name=\"spacing\">\n    <number>0</number>\n   </property>\n   <property name=\"leftMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"topMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"rightMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"bottomMargin\">\n    <number>0</number>\n   </property>\n   <item>\n    <widget class=\"tTitleLabel\" name=\"titleLabel\">\n     <property name=\"text\">\n      <string>Default Applications</string>\n     </property>\n    </widget>\n   </item>\n   <item alignment=\"Qt::AlignHCenter\">\n    <widget class=\"QWidget\" name=\"defaultsWidget\" native=\"true\">\n     <layout class=\"QGridLayout\" name=\"gridLayout\">\n      <item row=\"1\" column=\"1\">\n       <widget class=\"QComboBox\" name=\"defaultBrowserBox\"/>\n      </item>\n      <item row=\"1\" column=\"0\">\n       <widget class=\"QLabel\" name=\"label_2\">\n        <property name=\"sizePolicy\">\n         <sizepolicy hsizetype=\"Expanding\" vsizetype=\"Preferred\">\n          <horstretch>0</horstretch>\n          <verstretch>0</verstretch>\n         </sizepolicy>\n        </property>\n        <property name=\"text\">\n         <string>Web Browser</string>\n        </property>\n       </widget>\n      </item>\n      <item row=\"0\" column=\"0\" colspan=\"2\">\n       <widget class=\"QLabel\" name=\"label\">\n        <property name=\"text\">\n         <string>Set your default apps below</string>\n        </property>\n       </widget>\n      </item>\n      <item row=\"2\" column=\"0\">\n       <widget class=\"QLabel\" name=\"label_3\">\n        <property name=\"text\">\n         <string>Mail Client</string>\n        </property>\n       </widget>\n      </item>\n      <item row=\"2\" column=\"1\">\n       <widget class=\"QComboBox\" name=\"defaultMailBox\"/>\n      </item>\n     </layout>\n    </widget>\n   </item>\n   <item>\n    <spacer name=\"verticalSpacer\">\n     <property name=\"orientation\">\n      <enum>Qt::Vertical</enum>\n     </property>\n     <property name=\"sizeHint\" stdset=\"0\">\n      <size>\n       <width>20</width>\n       <height>531</height>\n      </size>\n     </property>\n    </spacer>\n   </item>\n  </layout>\n </widget>\n <customwidgets>\n  <customwidget>\n   <class>tTitleLabel</class>\n   <extends>QLabel</extends>\n   <header location=\"global\">ttitlelabel.h</header>\n   <slots>\n    <signal>backButtonClicked()</signal>\n   </slots>\n  </customwidget>\n </customwidgets>\n <resources/>\n <connections/>\n</ui>\n"
  },
  {
    "path": "plugins/DefaultsPlugin/plugin.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"plugin.h\"\n\n#include \"defaultspane.h\"\n#include <QApplication>\n#include <QDebug>\n#include <QDir>\n#include <QIcon>\n#include <barmanager.h>\n#include <icontextchunk.h>\n#include <localemanager.h>\n#include <statemanager.h>\n#include <statuscentermanager.h>\n#include <tapplication.h>\n#include <tsettings.h>\n\nstruct PluginPrivate {\n        DefaultsPane* defaultsPane;\n};\n\nPlugin::Plugin() {\n    d = new PluginPrivate();\n}\n\nPlugin::~Plugin() {\n    delete d;\n}\n\nvoid Plugin::activate() {\n    tApplication::addPluginTranslator(CNTP_TARGET_NAME);\n    tSettings::registerDefaults(QDir::cleanPath(qApp->applicationDirPath() + \"/../plugins/DefaultsPlugin/thedesk-defaults.conf\"));\n    tSettings::registerDefaults(\"/usr/share/defaults/thedesk-defaults.conf\");\n\n    d->defaultsPane = new DefaultsPane();\n    StateManager::statusCenterManager()->addPane(d->defaultsPane, StatusCenterManager::SystemSettings);\n}\n\nvoid Plugin::deactivate() {\n    StateManager::statusCenterManager()->removePane(d->defaultsPane);\n    d->defaultsPane->deleteLater();\n    tApplication::removePluginTranslator(CNTP_TARGET_NAME);\n}\n"
  },
  {
    "path": "plugins/DefaultsPlugin/plugin.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef PLUGIN_H\n#define PLUGIN_H\n\n#include \"plugins/plugininterface.h\"\n\nstruct PluginPrivate;\nclass Plugin : public QObject,\n               public PluginInterface {\n        Q_OBJECT\n        Q_PLUGIN_METADATA(IID PluginInterface_iid FILE \"Plugin.json\")\n        Q_INTERFACES(PluginInterface)\n\n    public:\n        Plugin();\n        ~Plugin();\n\n    private:\n        PluginPrivate* d;\n\n        // PluginInterface interface\n    public:\n        void activate();\n        void deactivate();\n};\n\n#endif // PLUGIN_H\n"
  },
  {
    "path": "plugins/DefaultsPlugin/thedesk-defaults.conf",
    "content": ""
  },
  {
    "path": "plugins/DefaultsPlugin/translations/ar_SA.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"ar_SA\" sourcelanguage=\"en_US\">\n<context>\n    <name>DefaultsPane</name>\n    <message>\n        <location filename=\"../defaultspane.ui\" line=\"35\"/>\n        <location filename=\"../defaultspane.cpp\" line=\"81\"/>\n        <location filename=\"../../../../build-thedesk-Chroot_6-Debug/plugins/DefaultsPlugin/plugin-defaults_autogen/include/ui_defaultspane.h\" line=\"102\"/>\n        <source>Default Applications</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../defaultspane.ui\" line=\"54\"/>\n        <location filename=\"../../../../build-thedesk-Chroot_6-Debug/plugins/DefaultsPlugin/plugin-defaults_autogen/include/ui_defaultspane.h\" line=\"103\"/>\n        <source>Web Browser</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../defaultspane.ui\" line=\"61\"/>\n        <location filename=\"../../../../build-thedesk-Chroot_6-Debug/plugins/DefaultsPlugin/plugin-defaults_autogen/include/ui_defaultspane.h\" line=\"104\"/>\n        <source>Set your default apps below</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../defaultspane.ui\" line=\"68\"/>\n        <location filename=\"../../../../build-thedesk-Chroot_6-Debug/plugins/DefaultsPlugin/plugin-defaults_autogen/include/ui_defaultspane.h\" line=\"105\"/>\n        <source>Mail Client</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/DefaultsPlugin/translations/au_AU.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"au_AU\" sourcelanguage=\"en_US\">\n<context>\n    <name>DefaultsPane</name>\n    <message>\n        <location filename=\"../defaultspane.ui\" line=\"35\"/>\n        <location filename=\"../defaultspane.cpp\" line=\"81\"/>\n        <location filename=\"../../../../build-thedesk-Chroot_6-Debug/plugins/DefaultsPlugin/plugin-defaults_autogen/include/ui_defaultspane.h\" line=\"102\"/>\n        <source>Default Applications</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../defaultspane.ui\" line=\"54\"/>\n        <location filename=\"../../../../build-thedesk-Chroot_6-Debug/plugins/DefaultsPlugin/plugin-defaults_autogen/include/ui_defaultspane.h\" line=\"103\"/>\n        <source>Web Browser</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../defaultspane.ui\" line=\"61\"/>\n        <location filename=\"../../../../build-thedesk-Chroot_6-Debug/plugins/DefaultsPlugin/plugin-defaults_autogen/include/ui_defaultspane.h\" line=\"104\"/>\n        <source>Set your default apps below</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../defaultspane.ui\" line=\"68\"/>\n        <location filename=\"../../../../build-thedesk-Chroot_6-Debug/plugins/DefaultsPlugin/plugin-defaults_autogen/include/ui_defaultspane.h\" line=\"105\"/>\n        <source>Mail Client</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/DefaultsPlugin/translations/cy.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"cy\" sourcelanguage=\"en_US\">\n<context>\n    <name>DefaultsPane</name>\n    <message>\n        <location filename=\"../defaultspane.ui\" line=\"35\"/>\n        <location filename=\"../defaultspane.cpp\" line=\"81\"/>\n        <location filename=\"../../../../build-thedesk-Chroot_6-Debug/plugins/DefaultsPlugin/plugin-defaults_autogen/include/ui_defaultspane.h\" line=\"102\"/>\n        <source>Default Applications</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../defaultspane.ui\" line=\"54\"/>\n        <location filename=\"../../../../build-thedesk-Chroot_6-Debug/plugins/DefaultsPlugin/plugin-defaults_autogen/include/ui_defaultspane.h\" line=\"103\"/>\n        <source>Web Browser</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../defaultspane.ui\" line=\"61\"/>\n        <location filename=\"../../../../build-thedesk-Chroot_6-Debug/plugins/DefaultsPlugin/plugin-defaults_autogen/include/ui_defaultspane.h\" line=\"104\"/>\n        <source>Set your default apps below</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../defaultspane.ui\" line=\"68\"/>\n        <location filename=\"../../../../build-thedesk-Chroot_6-Debug/plugins/DefaultsPlugin/plugin-defaults_autogen/include/ui_defaultspane.h\" line=\"105\"/>\n        <source>Mail Client</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/DefaultsPlugin/translations/da.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"da\" sourcelanguage=\"en_US\">\n<context>\n    <name>DefaultsPane</name>\n    <message>\n        <location filename=\"../defaultspane.ui\" line=\"35\"/>\n        <location filename=\"../defaultspane.cpp\" line=\"81\"/>\n        <location filename=\"../../../../build-thedesk-Chroot_6-Debug/plugins/DefaultsPlugin/plugin-defaults_autogen/include/ui_defaultspane.h\" line=\"102\"/>\n        <source>Default Applications</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../defaultspane.ui\" line=\"54\"/>\n        <location filename=\"../../../../build-thedesk-Chroot_6-Debug/plugins/DefaultsPlugin/plugin-defaults_autogen/include/ui_defaultspane.h\" line=\"103\"/>\n        <source>Web Browser</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../defaultspane.ui\" line=\"61\"/>\n        <location filename=\"../../../../build-thedesk-Chroot_6-Debug/plugins/DefaultsPlugin/plugin-defaults_autogen/include/ui_defaultspane.h\" line=\"104\"/>\n        <source>Set your default apps below</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../defaultspane.ui\" line=\"68\"/>\n        <location filename=\"../../../../build-thedesk-Chroot_6-Debug/plugins/DefaultsPlugin/plugin-defaults_autogen/include/ui_defaultspane.h\" line=\"105\"/>\n        <source>Mail Client</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/DefaultsPlugin/translations/de.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"de\" sourcelanguage=\"en_US\">\n<context>\n    <name>DefaultsPane</name>\n    <message>\n        <location filename=\"../defaultspane.ui\" line=\"35\"/>\n        <location filename=\"../defaultspane.cpp\" line=\"81\"/>\n        <location filename=\"../../../../build-thedesk-Chroot_6-Debug/plugins/DefaultsPlugin/plugin-defaults_autogen/include/ui_defaultspane.h\" line=\"102\"/>\n        <source>Default Applications</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../defaultspane.ui\" line=\"54\"/>\n        <location filename=\"../../../../build-thedesk-Chroot_6-Debug/plugins/DefaultsPlugin/plugin-defaults_autogen/include/ui_defaultspane.h\" line=\"103\"/>\n        <source>Web Browser</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../defaultspane.ui\" line=\"61\"/>\n        <location filename=\"../../../../build-thedesk-Chroot_6-Debug/plugins/DefaultsPlugin/plugin-defaults_autogen/include/ui_defaultspane.h\" line=\"104\"/>\n        <source>Set your default apps below</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../defaultspane.ui\" line=\"68\"/>\n        <location filename=\"../../../../build-thedesk-Chroot_6-Debug/plugins/DefaultsPlugin/plugin-defaults_autogen/include/ui_defaultspane.h\" line=\"105\"/>\n        <source>Mail Client</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/DefaultsPlugin/translations/en_US.qm",
    "content": "<d\u0018!\u001c`"
  },
  {
    "path": "plugins/DefaultsPlugin/translations/en_US.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" sourcelanguage=\"en_US\">\n<context>\n    <name>DefaultsPane</name>\n    <message>\n        <location filename=\"../defaultspane.ui\" line=\"35\"/>\n        <location filename=\"../defaultspane.cpp\" line=\"81\"/>\n        <location filename=\"../../../../build-thedesk-Chroot_6-Debug/plugins/DefaultsPlugin/plugin-defaults_autogen/include/ui_defaultspane.h\" line=\"102\"/>\n        <source>Default Applications</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../defaultspane.ui\" line=\"54\"/>\n        <location filename=\"../../../../build-thedesk-Chroot_6-Debug/plugins/DefaultsPlugin/plugin-defaults_autogen/include/ui_defaultspane.h\" line=\"103\"/>\n        <source>Web Browser</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../defaultspane.ui\" line=\"61\"/>\n        <location filename=\"../../../../build-thedesk-Chroot_6-Debug/plugins/DefaultsPlugin/plugin-defaults_autogen/include/ui_defaultspane.h\" line=\"104\"/>\n        <source>Set your default apps below</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../defaultspane.ui\" line=\"68\"/>\n        <location filename=\"../../../../build-thedesk-Chroot_6-Debug/plugins/DefaultsPlugin/plugin-defaults_autogen/include/ui_defaultspane.h\" line=\"105\"/>\n        <source>Mail Client</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/DefaultsPlugin/translations/es.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"es\" sourcelanguage=\"en_US\">\n<context>\n    <name>DefaultsPane</name>\n    <message>\n        <location filename=\"../defaultspane.ui\" line=\"35\"/>\n        <location filename=\"../defaultspane.cpp\" line=\"81\"/>\n        <location filename=\"../../../../build-thedesk-Chroot_6-Debug/plugins/DefaultsPlugin/plugin-defaults_autogen/include/ui_defaultspane.h\" line=\"102\"/>\n        <source>Default Applications</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../defaultspane.ui\" line=\"54\"/>\n        <location filename=\"../../../../build-thedesk-Chroot_6-Debug/plugins/DefaultsPlugin/plugin-defaults_autogen/include/ui_defaultspane.h\" line=\"103\"/>\n        <source>Web Browser</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../defaultspane.ui\" line=\"61\"/>\n        <location filename=\"../../../../build-thedesk-Chroot_6-Debug/plugins/DefaultsPlugin/plugin-defaults_autogen/include/ui_defaultspane.h\" line=\"104\"/>\n        <source>Set your default apps below</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../defaultspane.ui\" line=\"68\"/>\n        <location filename=\"../../../../build-thedesk-Chroot_6-Debug/plugins/DefaultsPlugin/plugin-defaults_autogen/include/ui_defaultspane.h\" line=\"105\"/>\n        <source>Mail Client</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/DefaultsPlugin/translations/es_VE.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"es_VE\" sourcelanguage=\"en_US\">\n<context>\n    <name>DefaultsPane</name>\n    <message>\n        <location filename=\"../defaultspane.ui\" line=\"35\"/>\n        <location filename=\"../defaultspane.cpp\" line=\"81\"/>\n        <location filename=\"../../../../build-thedesk-Chroot_6-Debug/plugins/DefaultsPlugin/plugin-defaults_autogen/include/ui_defaultspane.h\" line=\"102\"/>\n        <source>Default Applications</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../defaultspane.ui\" line=\"54\"/>\n        <location filename=\"../../../../build-thedesk-Chroot_6-Debug/plugins/DefaultsPlugin/plugin-defaults_autogen/include/ui_defaultspane.h\" line=\"103\"/>\n        <source>Web Browser</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../defaultspane.ui\" line=\"61\"/>\n        <location filename=\"../../../../build-thedesk-Chroot_6-Debug/plugins/DefaultsPlugin/plugin-defaults_autogen/include/ui_defaultspane.h\" line=\"104\"/>\n        <source>Set your default apps below</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../defaultspane.ui\" line=\"68\"/>\n        <location filename=\"../../../../build-thedesk-Chroot_6-Debug/plugins/DefaultsPlugin/plugin-defaults_autogen/include/ui_defaultspane.h\" line=\"105\"/>\n        <source>Mail Client</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/DefaultsPlugin/translations/id.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"id\" sourcelanguage=\"en_US\">\n<context>\n    <name>DefaultsPane</name>\n    <message>\n        <location filename=\"../defaultspane.ui\" line=\"35\"/>\n        <location filename=\"../defaultspane.cpp\" line=\"81\"/>\n        <location filename=\"../../../../build-thedesk-Chroot_6-Debug/plugins/DefaultsPlugin/plugin-defaults_autogen/include/ui_defaultspane.h\" line=\"102\"/>\n        <source>Default Applications</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../defaultspane.ui\" line=\"54\"/>\n        <location filename=\"../../../../build-thedesk-Chroot_6-Debug/plugins/DefaultsPlugin/plugin-defaults_autogen/include/ui_defaultspane.h\" line=\"103\"/>\n        <source>Web Browser</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../defaultspane.ui\" line=\"61\"/>\n        <location filename=\"../../../../build-thedesk-Chroot_6-Debug/plugins/DefaultsPlugin/plugin-defaults_autogen/include/ui_defaultspane.h\" line=\"104\"/>\n        <source>Set your default apps below</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../defaultspane.ui\" line=\"68\"/>\n        <location filename=\"../../../../build-thedesk-Chroot_6-Debug/plugins/DefaultsPlugin/plugin-defaults_autogen/include/ui_defaultspane.h\" line=\"105\"/>\n        <source>Mail Client</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/DefaultsPlugin/translations/nl.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"nl\" sourcelanguage=\"en_US\">\n<context>\n    <name>DefaultsPane</name>\n    <message>\n        <location filename=\"../defaultspane.ui\" line=\"35\"/>\n        <location filename=\"../defaultspane.cpp\" line=\"81\"/>\n        <location filename=\"../../../../build-thedesk-Chroot_6-Debug/plugins/DefaultsPlugin/plugin-defaults_autogen/include/ui_defaultspane.h\" line=\"102\"/>\n        <source>Default Applications</source>\n        <translation>Standaardapplicaties</translation>\n    </message>\n    <message>\n        <location filename=\"../defaultspane.ui\" line=\"54\"/>\n        <location filename=\"../../../../build-thedesk-Chroot_6-Debug/plugins/DefaultsPlugin/plugin-defaults_autogen/include/ui_defaultspane.h\" line=\"103\"/>\n        <source>Web Browser</source>\n        <translation>Webbrowser</translation>\n    </message>\n    <message>\n        <location filename=\"../defaultspane.ui\" line=\"61\"/>\n        <location filename=\"../../../../build-thedesk-Chroot_6-Debug/plugins/DefaultsPlugin/plugin-defaults_autogen/include/ui_defaultspane.h\" line=\"104\"/>\n        <source>Set your default apps below</source>\n        <translation>Stel je standaardapps hieronder in</translation>\n    </message>\n    <message>\n        <location filename=\"../defaultspane.ui\" line=\"68\"/>\n        <location filename=\"../../../../build-thedesk-Chroot_6-Debug/plugins/DefaultsPlugin/plugin-defaults_autogen/include/ui_defaultspane.h\" line=\"105\"/>\n        <source>Mail Client</source>\n        <translation>E-mailclient</translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/DefaultsPlugin/translations/pt_BR.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"pt_BR\" sourcelanguage=\"en_US\">\n<context>\n    <name>DefaultsPane</name>\n    <message>\n        <location filename=\"../defaultspane.ui\" line=\"35\"/>\n        <location filename=\"../defaultspane.cpp\" line=\"81\"/>\n        <location filename=\"../../../../build-thedesk-Chroot_6-Debug/plugins/DefaultsPlugin/plugin-defaults_autogen/include/ui_defaultspane.h\" line=\"102\"/>\n        <source>Default Applications</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../defaultspane.ui\" line=\"54\"/>\n        <location filename=\"../../../../build-thedesk-Chroot_6-Debug/plugins/DefaultsPlugin/plugin-defaults_autogen/include/ui_defaultspane.h\" line=\"103\"/>\n        <source>Web Browser</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../defaultspane.ui\" line=\"61\"/>\n        <location filename=\"../../../../build-thedesk-Chroot_6-Debug/plugins/DefaultsPlugin/plugin-defaults_autogen/include/ui_defaultspane.h\" line=\"104\"/>\n        <source>Set your default apps below</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../defaultspane.ui\" line=\"68\"/>\n        <location filename=\"../../../../build-thedesk-Chroot_6-Debug/plugins/DefaultsPlugin/plugin-defaults_autogen/include/ui_defaultspane.h\" line=\"105\"/>\n        <source>Mail Client</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/DefaultsPlugin/translations/ro.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"ro\" sourcelanguage=\"en_US\">\n<context>\n    <name>DefaultsPane</name>\n    <message>\n        <location filename=\"../defaultspane.ui\" line=\"35\"/>\n        <location filename=\"../defaultspane.cpp\" line=\"81\"/>\n        <location filename=\"../../../../build-thedesk-Chroot_6-Debug/plugins/DefaultsPlugin/plugin-defaults_autogen/include/ui_defaultspane.h\" line=\"102\"/>\n        <source>Default Applications</source>\n        <translation>Aplicații implicite</translation>\n    </message>\n    <message>\n        <location filename=\"../defaultspane.ui\" line=\"54\"/>\n        <location filename=\"../../../../build-thedesk-Chroot_6-Debug/plugins/DefaultsPlugin/plugin-defaults_autogen/include/ui_defaultspane.h\" line=\"103\"/>\n        <source>Web Browser</source>\n        <translation>Browser web</translation>\n    </message>\n    <message>\n        <location filename=\"../defaultspane.ui\" line=\"61\"/>\n        <location filename=\"../../../../build-thedesk-Chroot_6-Debug/plugins/DefaultsPlugin/plugin-defaults_autogen/include/ui_defaultspane.h\" line=\"104\"/>\n        <source>Set your default apps below</source>\n        <translation>Configurați aplicațiile implicite aici</translation>\n    </message>\n    <message>\n        <location filename=\"../defaultspane.ui\" line=\"68\"/>\n        <location filename=\"../../../../build-thedesk-Chroot_6-Debug/plugins/DefaultsPlugin/plugin-defaults_autogen/include/ui_defaultspane.h\" line=\"105\"/>\n        <source>Mail Client</source>\n        <translation>Client de mail</translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/DefaultsPlugin/translations/sv.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"sv\" sourcelanguage=\"en_US\">\n<context>\n    <name>DefaultsPane</name>\n    <message>\n        <location filename=\"../defaultspane.ui\" line=\"35\"/>\n        <location filename=\"../defaultspane.cpp\" line=\"81\"/>\n        <location filename=\"../../../../build-thedesk-Chroot_6-Debug/plugins/DefaultsPlugin/plugin-defaults_autogen/include/ui_defaultspane.h\" line=\"102\"/>\n        <source>Default Applications</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../defaultspane.ui\" line=\"54\"/>\n        <location filename=\"../../../../build-thedesk-Chroot_6-Debug/plugins/DefaultsPlugin/plugin-defaults_autogen/include/ui_defaultspane.h\" line=\"103\"/>\n        <source>Web Browser</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../defaultspane.ui\" line=\"61\"/>\n        <location filename=\"../../../../build-thedesk-Chroot_6-Debug/plugins/DefaultsPlugin/plugin-defaults_autogen/include/ui_defaultspane.h\" line=\"104\"/>\n        <source>Set your default apps below</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../defaultspane.ui\" line=\"68\"/>\n        <location filename=\"../../../../build-thedesk-Chroot_6-Debug/plugins/DefaultsPlugin/plugin-defaults_autogen/include/ui_defaultspane.h\" line=\"105\"/>\n        <source>Mail Client</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/DefaultsPlugin/translations/tr.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"tr\" sourcelanguage=\"en_US\">\n<context>\n    <name>DefaultsPane</name>\n    <message>\n        <location filename=\"../defaultspane.ui\" line=\"35\"/>\n        <location filename=\"../defaultspane.cpp\" line=\"81\"/>\n        <location filename=\"../../../../build-thedesk-Chroot_6-Debug/plugins/DefaultsPlugin/plugin-defaults_autogen/include/ui_defaultspane.h\" line=\"102\"/>\n        <source>Default Applications</source>\n        <translation>Varsayılan Uygulamalar</translation>\n    </message>\n    <message>\n        <location filename=\"../defaultspane.ui\" line=\"54\"/>\n        <location filename=\"../../../../build-thedesk-Chroot_6-Debug/plugins/DefaultsPlugin/plugin-defaults_autogen/include/ui_defaultspane.h\" line=\"103\"/>\n        <source>Web Browser</source>\n        <translation>İnternet tarayıcısı</translation>\n    </message>\n    <message>\n        <location filename=\"../defaultspane.ui\" line=\"61\"/>\n        <location filename=\"../../../../build-thedesk-Chroot_6-Debug/plugins/DefaultsPlugin/plugin-defaults_autogen/include/ui_defaultspane.h\" line=\"104\"/>\n        <source>Set your default apps below</source>\n        <translation>Varsayılan uygulamalarınızı aşağıda ayarlayın</translation>\n    </message>\n    <message>\n        <location filename=\"../defaultspane.ui\" line=\"68\"/>\n        <location filename=\"../../../../build-thedesk-Chroot_6-Debug/plugins/DefaultsPlugin/plugin-defaults_autogen/include/ui_defaultspane.h\" line=\"105\"/>\n        <source>Mail Client</source>\n        <translation>Posta İstemcisi</translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/DefaultsPlugin/translations/vi.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"vi\" sourcelanguage=\"en_US\">\n<context>\n    <name>DefaultsPane</name>\n    <message>\n        <location filename=\"../defaultspane.ui\" line=\"35\"/>\n        <location filename=\"../defaultspane.cpp\" line=\"81\"/>\n        <location filename=\"../../../../build-thedesk-Chroot_6-Debug/plugins/DefaultsPlugin/plugin-defaults_autogen/include/ui_defaultspane.h\" line=\"102\"/>\n        <source>Default Applications</source>\n        <translation>Ứng dụng mặc định</translation>\n    </message>\n    <message>\n        <location filename=\"../defaultspane.ui\" line=\"54\"/>\n        <location filename=\"../../../../build-thedesk-Chroot_6-Debug/plugins/DefaultsPlugin/plugin-defaults_autogen/include/ui_defaultspane.h\" line=\"103\"/>\n        <source>Web Browser</source>\n        <translation>Trình duyệt web</translation>\n    </message>\n    <message>\n        <location filename=\"../defaultspane.ui\" line=\"61\"/>\n        <location filename=\"../../../../build-thedesk-Chroot_6-Debug/plugins/DefaultsPlugin/plugin-defaults_autogen/include/ui_defaultspane.h\" line=\"104\"/>\n        <source>Set your default apps below</source>\n        <translation>Đặt các ứng dụng mặc định dưới đây</translation>\n    </message>\n    <message>\n        <location filename=\"../defaultspane.ui\" line=\"68\"/>\n        <location filename=\"../../../../build-thedesk-Chroot_6-Debug/plugins/DefaultsPlugin/plugin-defaults_autogen/include/ui_defaultspane.h\" line=\"105\"/>\n        <source>Mail Client</source>\n        <translation>Ứng dụng thư</translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/DefaultsPlugin/translations/vi_VN.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"vi_VN\">\n<context>\n    <name>DefaultsPane</name>\n    <message>\n        <location filename=\"../defaultspane.ui\" line=\"35\"/>\n        <location filename=\"../defaultspane.cpp\" line=\"81\"/>\n        <location filename=\"../../../../build-thedesk-Chroot_6-Debug/plugins/DefaultsPlugin/plugin-defaults_autogen/include/ui_defaultspane.h\" line=\"102\"/>\n        <source>Default Applications</source>\n        <translation>Ứng dụng mặc định</translation>\n    </message>\n    <message>\n        <location filename=\"../defaultspane.ui\" line=\"54\"/>\n        <location filename=\"../../../../build-thedesk-Chroot_6-Debug/plugins/DefaultsPlugin/plugin-defaults_autogen/include/ui_defaultspane.h\" line=\"103\"/>\n        <source>Web Browser</source>\n        <translation>Trình duyệt web</translation>\n    </message>\n    <message>\n        <location filename=\"../defaultspane.ui\" line=\"61\"/>\n        <location filename=\"../../../../build-thedesk-Chroot_6-Debug/plugins/DefaultsPlugin/plugin-defaults_autogen/include/ui_defaultspane.h\" line=\"104\"/>\n        <source>Set your default apps below</source>\n        <translation>Đặt ứng dụng mặc định của bạn dưới đây</translation>\n    </message>\n    <message>\n        <location filename=\"../defaultspane.ui\" line=\"68\"/>\n        <location filename=\"../../../../build-thedesk-Chroot_6-Debug/plugins/DefaultsPlugin/plugin-defaults_autogen/include/ui_defaultspane.h\" line=\"105\"/>\n        <source>Mail Client</source>\n        <translation>Ứng dụng thư khách</translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/DisplayPlugin/CMakeLists.txt",
    "content": "cmake_minimum_required(VERSION 3.24.0)\n\nfind_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets DBus Positioning)\nfind_package(libcontemporary)\n\nset(SOURCES\n    arrange/arrangecontroller.cpp\n    arrange/arrangewidget.cpp\n    arrange/overlaywindow.cpp\n    arrange/screenarranger.cpp\n    plugin.cpp\n    redshift/colorramp.cpp\n    redshift/redshiftdaemon.cpp\n    settings/displaysettings.cpp\n\n    arrange/arrangewidget.ui\n    arrange/overlaywindow.ui\n    settings/displaysettings.ui\n)\n\nset(HEADERS\n    arrange/arrangecontroller.h\n    arrange/arrangewidget.h\n    arrange/overlaywindow.h\n    arrange/screenarranger.h\n    plugin.h\n    redshift/colorramp.h\n    redshift/redshiftdaemon.h\n    settings/displaysettings.h\n)\n\nset(PLUGIN_NAME display)\nadd_plugin_td(${PLUGIN_NAME})\ntarget_sources(plugin-${PLUGIN_NAME} PRIVATE ${SOURCES} ${HEADERS})\ncntp_defaults_file(${PLUGIN_NAME}\n    DEFAULTS_FILE thedesk-display.conf)\n\ntarget_link_libraries(plugin-${PLUGIN_NAME} Qt::Widgets Qt::Multimedia Qt::Positioning libcontemporary libthedesk)\n"
  },
  {
    "path": "plugins/DisplayPlugin/DisplayPlugin.pro",
    "content": "QT += gui widgets twebservices positioning\n\nTEMPLATE = lib\nCONFIG += plugin\n\nCONFIG += c++11\n\n# Include the-libs build tools\ninclude(/usr/share/the-libs/pri/gentranslations.pri)\n\n# The following define makes your compiler emit warnings if you use\n# any Qt feature that has been marked deprecated (the exact warnings\n# depend on your compiler). Please consult the documentation of the\n# deprecated API in order to know how to port your code away from it.\nDEFINES += QT_DEPRECATED_WARNINGS\n\n# You can also make your code fail to compile if it uses deprecated APIs.\n# In order to do so, uncomment the following line.\n# You can also select to disable deprecated APIs only up to a certain version of Qt.\n#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0\n\nSOURCES += \\\n    arrange/arrangecontroller.cpp \\\n    arrange/arrangewidget.cpp \\\n    arrange/overlaywindow.cpp \\\n    arrange/screenarranger.cpp \\\n    plugin.cpp \\\n    redshift/colorramp.cpp \\\n    redshift/redshiftdaemon.cpp \\\n    settings/displaysettings.cpp\n\nHEADERS += \\\n    arrange/arrangecontroller.h \\\n    arrange/arrangewidget.h \\\n    arrange/overlaywindow.h \\\n    arrange/screenarranger.h \\\n    plugin.h \\\n    redshift/colorramp.h \\\n    redshift/redshiftdaemon.h \\\n    settings/displaysettings.h\n\nDISTFILES += \\\n    Plugin.json \\\n    defaults.conf\n\nunix {\n    translations.files = translations/*.qm\n    translations.path = /usr/share/thedesk/DisplayPlugin/translations\n\n    defaults.files = defaults.conf\n    defaults.path = /etc/theSuite/theDesk/DisplayPlugin/\n\n    INSTALLS += translations defaults\n}\n\ninclude(../plugins.pri)\n\nFORMS += \\\n    arrange/arrangewidget.ui \\\n    arrange/overlaywindow.ui \\\n    settings/displaysettings.ui\n"
  },
  {
    "path": "plugins/DisplayPlugin/Plugin.json",
    "content": "{\n    \"name\": \"Display Management\",\n    \"icon\": \"preferences-system-display\",\n    \"uuid\": \"cc637480-e9ae-420d-98bd-dc737677e8cf\",\n    \"vi\": {\n        \"name\": \"Quản lý màn hình\"\n    }\n}\n"
  },
  {
    "path": "plugins/DisplayPlugin/arrange/arrangecontroller.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"arrangecontroller.h\"\n\n#include \"overlaywindow.h\"\n#include \"arrangewidget.h\"\n#include <tpopover.h>\n#include <Screens/screendaemon.h>\n#include <Screens/systemscreen.h>\n\nstruct ArrangeControllerPrivate {\n    QList<ArrangeWidget*> arrangers;\n};\n\nArrangeController::ArrangeController(QObject* parent) : QObject(parent) {\n    d = new ArrangeControllerPrivate();\n}\n\nArrangeController::~ArrangeController() {\n    delete d;\n}\n\nvoid ArrangeController::begin() {\n    for (SystemScreen* screen : ScreenDaemon::instance()->screens()) {\n        screen->reset();\n\n        ArrangeWidget* w = new ArrangeWidget(screen);\n        connect(w, &ArrangeWidget::reject, this, [ = ] {\n            for (ArrangeWidget* w : d->arrangers) {\n                w->dismiss();\n            }\n        });\n        connect(w, &ArrangeWidget::destroyed, this, [ = ] {\n            d->arrangers.removeOne(w);\n            if (d->arrangers.isEmpty()) {\n                emit done();\n            }\n        });\n        d->arrangers.append(w);\n    }\n}\n"
  },
  {
    "path": "plugins/DisplayPlugin/arrange/arrangecontroller.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef ARRANGECONTROLLER_H\n#define ARRANGECONTROLLER_H\n\n#include <QObject>\n\nstruct ArrangeControllerPrivate;\nclass ArrangeController : public QObject {\n        Q_OBJECT\n    public:\n        explicit ArrangeController(QObject* parent = nullptr);\n        ~ArrangeController();\n\n        void begin();\n\n    signals:\n        void done();\n\n    private:\n        ArrangeControllerPrivate* d;\n};\n\n#endif // ARRANGECONTROLLER_H\n"
  },
  {
    "path": "plugins/DisplayPlugin/arrange/arrangewidget.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"arrangewidget.h\"\n#include \"ui_arrangewidget.h\"\n\n#include \"overlaywindow.h\"\n#include <QTimer>\n#include <Screens/screendaemon.h>\n#include <Screens/systemscreen.h>\n#include <tpopover.h>\n#include <tscrim.h>\n\nstruct ArrangeWidgetPrivate {\n        OverlayWindow* overlay;\n        SystemScreen* screen = nullptr;\n        tPopover* popover;\n\n        QMap<SystemScreen*, QPushButton*> buttons;\n\n        bool init = true;\n};\n\nArrangeWidget::ArrangeWidget(SystemScreen* screen, QWidget* parent) :\n    QWidget(parent),\n    ui(new Ui::ArrangeWidget) {\n    ui->setupUi(this);\n\n    d = new ArrangeWidgetPrivate();\n\n    ui->titleLabel->setBackButtonShown(true);\n    ui->screensWidget->setFixedWidth(600);\n    ui->displayPropertiesWidget->setFixedWidth(600);\n    ui->applyButton->setFixedWidth(600);\n\n    d->overlay = new OverlayWindow();\n    d->overlay->show();\n\n    tScrim::scrimForWidget(d->overlay)->setBlurEnabled(false);\n\n    d->popover = new tPopover(this);\n    d->popover->setDismissable(false);\n    d->popover->setPopoverSide(tPopover::Bottom);\n    d->popover->setPopoverWidth(600);\n    connect(d->popover, &tPopover::dismissed, this, &ArrangeWidget::deleteLater);\n    connect(d->popover, &tPopover::dismissed, d->popover, &tPopover::deleteLater);\n    QTimer::singleShot(500, [=] {\n        d->popover->show(d->overlay);\n    });\n\n    updateScreenList();\n    setScreen(screen);\n}\n\nArrangeWidget::~ArrangeWidget() {\n    d->overlay->deleteLater();\n    delete d;\n    delete ui;\n}\n\nvoid ArrangeWidget::dismiss() {\n    d->popover->dismiss();\n}\n\nvoid ArrangeWidget::on_titleLabel_backButtonClicked() {\n    emit reject();\n}\n\nvoid ArrangeWidget::updateScreenGeometry() {\n    d->overlay->setGeometry(d->screen->geometry());\n    d->overlay->showFullScreen();\n}\n\nvoid ArrangeWidget::updateAvailableModes() {\n    QSignalBlocker blocker(ui->resolutionBox);\n    ui->resolutionBox->clear();\n\n    QList<QSize> resolutions;\n    for (SystemScreen::Mode mode : d->screen->availableModes()) {\n        QSize res = QSize(mode.width, mode.height);\n        if (!resolutions.contains(res)) {\n            resolutions.append(res);\n            ui->resolutionBox->addItem(QStringLiteral(\"%1 × %2\").arg(res.width()).arg(res.height()), res);\n        }\n        if (d->init && d->screen->currentMode() == mode.id) ui->resolutionBox->setCurrentIndex(resolutions.indexOf(res));\n    }\n\n    updateRefreshRateBox();\n}\n\nvoid ArrangeWidget::updateRefreshRateBox() {\n    QSignalBlocker blocker(ui->refreshRateBox);\n    QSize selected = ui->resolutionBox->currentData().toSize();\n\n    ui->refreshRateBox->clear();\n    int select = -1;\n    for (SystemScreen::Mode mode : d->screen->availableModes()) {\n        QSize res = QSize(mode.width, mode.height);\n        if (res == selected) {\n            ui->refreshRateBox->addItem(tr(\"%1 hz\").arg(mode.framerate, 0, 'f', 2), mode.id);\n            if (d->init && d->screen->currentMode() == mode.id) select = ui->refreshRateBox->count() - 1;\n        }\n    }\n\n    if (select != -1) ui->refreshRateBox->setCurrentIndex(select);\n}\n\nvoid ArrangeWidget::updateOrientationBox() {\n    QSignalBlocker blocker(ui->orientationBox);\n    ui->orientationBox->setCurrentIndex(d->screen->currentRotation());\n}\n\nvoid ArrangeWidget::updateIsPrimary() {\n    ui->primaryDisplaySwitch->setChecked(d->screen->isPrimary());\n    ui->primaryDisplaySwitch->setEnabled(!d->screen->isPrimary());\n}\n\nvoid ArrangeWidget::updatePowered() {\n    QSignalBlocker blocker(ui->enableDisplaySwitch);\n    ui->enableDisplaySwitch->setChecked(d->screen->powered());\n    ui->displaySettingsWidget->setExpanded(d->screen->powered());\n}\n\nvoid ArrangeWidget::updateScreenList() {\n    for (QPushButton* button : d->buttons.values()) {\n        ui->screensLayout->removeWidget(button);\n        button->deleteLater();\n    }\n    d->buttons.clear();\n\n    for (SystemScreen* screen : ScreenDaemon::instance()->screens()) {\n        QPushButton* button = new QPushButton(this);\n        button->setText(screen->displayName());\n        button->setCheckable(true);\n        button->setAutoExclusive(true);\n        button->setChecked(d->screen == screen);\n        connect(button, &QPushButton::toggled, this, [=](bool checked) {\n            if (checked) setScreen(screen);\n        });\n        ui->screensLayout->addWidget(button);\n        d->buttons.insert(screen, button);\n    }\n}\n\nvoid ArrangeWidget::setScreen(SystemScreen* screen) {\n    d->init = true;\n    if (d->screen) {\n        d->screen->disconnect(this);\n    }\n\n    d->screen = screen;\n\n    connect(screen, &SystemScreen::rotationChanged, this, &ArrangeWidget::updateOrientationBox);\n    connect(screen, &SystemScreen::geometryChanged, this, &ArrangeWidget::updateScreenGeometry);\n    connect(screen, &SystemScreen::availableModesChanged, this, &ArrangeWidget::updateAvailableModes);\n    connect(screen, &SystemScreen::currentModeChanged, this, &ArrangeWidget::updateAvailableModes);\n    connect(screen, &SystemScreen::isPrimaryChanged, this, &ArrangeWidget::updateIsPrimary);\n    connect(screen, &SystemScreen::poweredChanged, this, &ArrangeWidget::updatePowered);\n    updateScreenGeometry();\n    updateAvailableModes();\n    updateOrientationBox();\n    updateIsPrimary();\n    updatePowered();\n\n    d->buttons.value(screen)->setChecked(true);\n\n    ui->titleLabel->setText(d->screen->displayName());\n    d->init = false;\n}\n\nvoid ArrangeWidget::on_refreshRateBox_currentIndexChanged(int index) {\n    d->screen->setCurrentMode(ui->refreshRateBox->currentData().toInt());\n}\n\nvoid ArrangeWidget::on_resolutionBox_currentIndexChanged(int index) {\n    updateRefreshRateBox();\n}\n\nvoid ArrangeWidget::on_applyButton_clicked() {\n    for (SystemScreen* screen : ScreenDaemon::instance()->screens()) {\n        screen->set();\n    }\n\n    ScreenDaemon::instance()->saveCurrentConfiguration();\n}\n\nvoid ArrangeWidget::on_primaryDisplaySwitch_toggled(bool checked) {\n    if (checked) {\n        d->screen->setAsPrimary();\n    }\n}\n\nvoid ArrangeWidget::on_orientationBox_currentIndexChanged(int index) {\n    d->screen->setRotation(static_cast<SystemScreen::Rotation>(index));\n}\n\nvoid ArrangeWidget::on_enableDisplaySwitch_toggled(bool checked) {\n    d->screen->setPowered(checked);\n}\n"
  },
  {
    "path": "plugins/DisplayPlugin/arrange/arrangewidget.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef ARRANGEWIDGET_H\n#define ARRANGEWIDGET_H\n\n#include <QWidget>\n\nnamespace Ui {\n    class ArrangeWidget;\n}\n\nclass SystemScreen;\nstruct ArrangeWidgetPrivate;\nclass ArrangeWidget : public QWidget {\n        Q_OBJECT\n\n    public:\n        explicit ArrangeWidget(SystemScreen* screen, QWidget* parent = nullptr);\n        ~ArrangeWidget();\n\n        void dismiss();\n\n    private slots:\n        void on_titleLabel_backButtonClicked();\n\n        void on_refreshRateBox_currentIndexChanged(int index);\n\n        void on_resolutionBox_currentIndexChanged(int index);\n\n        void on_applyButton_clicked();\n\n        void on_primaryDisplaySwitch_toggled(bool checked);\n\n        void on_orientationBox_currentIndexChanged(int index);\n\n        void on_enableDisplaySwitch_toggled(bool checked);\n\n    signals:\n        void reject();\n        void accept();\n\n    private:\n        Ui::ArrangeWidget* ui;\n        ArrangeWidgetPrivate* d;\n\n        void updateScreenGeometry();\n        void updateAvailableModes();\n        void updateRefreshRateBox();\n        void updateOrientationBox();\n        void updateIsPrimary();\n        void updatePowered();\n\n        void updateScreenList();\n        void setScreen(SystemScreen* screen);\n};\n\n#endif // MAINARRANGEWIDGET_H\n"
  },
  {
    "path": "plugins/DisplayPlugin/arrange/arrangewidget.ui",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ui version=\"4.0\">\n <class>ArrangeWidget</class>\n <widget class=\"QWidget\" name=\"ArrangeWidget\">\n  <property name=\"geometry\">\n   <rect>\n    <x>0</x>\n    <y>0</y>\n    <width>642</width>\n    <height>355</height>\n   </rect>\n  </property>\n  <property name=\"windowTitle\">\n   <string notr=\"true\">Form</string>\n  </property>\n  <layout class=\"QVBoxLayout\" name=\"verticalLayout\">\n   <property name=\"spacing\">\n    <number>0</number>\n   </property>\n   <property name=\"leftMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"topMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"rightMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"bottomMargin\">\n    <number>0</number>\n   </property>\n   <item>\n    <widget class=\"tTitleLabel\" name=\"titleLabel\">\n     <property name=\"text\">\n      <string notr=\"true\">Display Name</string>\n     </property>\n    </widget>\n   </item>\n   <item>\n    <widget class=\"ScreenArranger\" name=\"screenArranger\" native=\"true\"/>\n   </item>\n   <item alignment=\"Qt::AlignHCenter\">\n    <widget class=\"QWidget\" name=\"screensWidget\" native=\"true\">\n     <layout class=\"QHBoxLayout\" name=\"screensLayout\">\n      <property name=\"spacing\">\n       <number>0</number>\n      </property>\n      <property name=\"leftMargin\">\n       <number>0</number>\n      </property>\n      <property name=\"topMargin\">\n       <number>0</number>\n      </property>\n      <property name=\"rightMargin\">\n       <number>0</number>\n      </property>\n      <property name=\"bottomMargin\">\n       <number>0</number>\n      </property>\n     </layout>\n    </widget>\n   </item>\n   <item alignment=\"Qt::AlignHCenter\">\n    <widget class=\"QWidget\" name=\"displayPropertiesWidget\" native=\"true\">\n     <layout class=\"QGridLayout\" name=\"gridLayout\">\n      <item row=\"2\" column=\"0\" colspan=\"2\">\n       <widget class=\"tConditionalWidget\" name=\"displaySettingsWidget\" native=\"true\">\n        <layout class=\"QGridLayout\" name=\"gridLayout_2\">\n         <property name=\"leftMargin\">\n          <number>0</number>\n         </property>\n         <property name=\"topMargin\">\n          <number>0</number>\n         </property>\n         <property name=\"rightMargin\">\n          <number>0</number>\n         </property>\n         <property name=\"bottomMargin\">\n          <number>0</number>\n         </property>\n         <item row=\"0\" column=\"0\">\n          <widget class=\"QLabel\" name=\"label_2\">\n           <property name=\"sizePolicy\">\n            <sizepolicy hsizetype=\"Expanding\" vsizetype=\"Preferred\">\n             <horstretch>0</horstretch>\n             <verstretch>0</verstretch>\n            </sizepolicy>\n           </property>\n           <property name=\"text\">\n            <string>Resolution</string>\n           </property>\n          </widget>\n         </item>\n         <item row=\"0\" column=\"1\">\n          <widget class=\"QComboBox\" name=\"resolutionBox\"/>\n         </item>\n         <item row=\"1\" column=\"0\">\n          <widget class=\"QLabel\" name=\"label_3\">\n           <property name=\"text\">\n            <string>Refresh Rate</string>\n           </property>\n          </widget>\n         </item>\n         <item row=\"1\" column=\"1\">\n          <widget class=\"QComboBox\" name=\"refreshRateBox\"/>\n         </item>\n         <item row=\"2\" column=\"0\">\n          <widget class=\"QLabel\" name=\"label_5\">\n           <property name=\"text\">\n            <string>Orientation</string>\n           </property>\n          </widget>\n         </item>\n         <item row=\"2\" column=\"1\">\n          <widget class=\"QComboBox\" name=\"orientationBox\">\n           <item>\n            <property name=\"text\">\n             <string>Landscape</string>\n            </property>\n           </item>\n           <item>\n            <property name=\"text\">\n             <string>Portrait</string>\n            </property>\n           </item>\n           <item>\n            <property name=\"text\">\n             <string>Upside Down</string>\n            </property>\n           </item>\n           <item>\n            <property name=\"text\">\n             <string>Portrait (Upside Down)</string>\n            </property>\n           </item>\n          </widget>\n         </item>\n         <item row=\"3\" column=\"0\">\n          <widget class=\"QLabel\" name=\"label_4\">\n           <property name=\"text\">\n            <string>Primary Display</string>\n           </property>\n          </widget>\n         </item>\n         <item row=\"3\" column=\"1\" alignment=\"Qt::AlignRight\">\n          <widget class=\"tSwitch\" name=\"primaryDisplaySwitch\">\n           <property name=\"text\">\n            <string notr=\"true\">PrimaryDisplaySwitch</string>\n           </property>\n          </widget>\n         </item>\n        </layout>\n       </widget>\n      </item>\n      <item row=\"0\" column=\"0\" colspan=\"2\">\n       <widget class=\"QLabel\" name=\"label\">\n        <property name=\"font\">\n         <font>\n          <weight>75</weight>\n          <bold>true</bold>\n         </font>\n        </property>\n        <property name=\"text\">\n         <string>DISPLAY PROPERTIES</string>\n        </property>\n       </widget>\n      </item>\n      <item row=\"1\" column=\"0\">\n       <widget class=\"QLabel\" name=\"label_6\">\n        <property name=\"sizePolicy\">\n         <sizepolicy hsizetype=\"Expanding\" vsizetype=\"Preferred\">\n          <horstretch>0</horstretch>\n          <verstretch>0</verstretch>\n         </sizepolicy>\n        </property>\n        <property name=\"text\">\n         <string>Enable Display</string>\n        </property>\n       </widget>\n      </item>\n      <item row=\"1\" column=\"1\">\n       <widget class=\"tSwitch\" name=\"enableDisplaySwitch\">\n        <property name=\"text\">\n         <string notr=\"true\">EnableDisplaySwitch</string>\n        </property>\n       </widget>\n      </item>\n     </layout>\n    </widget>\n   </item>\n   <item alignment=\"Qt::AlignHCenter\">\n    <widget class=\"QPushButton\" name=\"applyButton\">\n     <property name=\"text\">\n      <string>Apply Settings</string>\n     </property>\n    </widget>\n   </item>\n   <item>\n    <spacer name=\"verticalSpacer\">\n     <property name=\"orientation\">\n      <enum>Qt::Vertical</enum>\n     </property>\n     <property name=\"sizeHint\" stdset=\"0\">\n      <size>\n       <width>20</width>\n       <height>40</height>\n      </size>\n     </property>\n    </spacer>\n   </item>\n  </layout>\n </widget>\n <customwidgets>\n  <customwidget>\n   <class>tTitleLabel</class>\n   <extends>QLabel</extends>\n   <header location=\"global\">ttitlelabel.h</header>\n   <slots>\n    <signal>backButtonClicked()</signal>\n   </slots>\n  </customwidget>\n  <customwidget>\n   <class>tSwitch</class>\n   <extends>QPushButton</extends>\n   <header location=\"global\">tswitch.h</header>\n  </customwidget>\n  <customwidget>\n   <class>tConditionalWidget</class>\n   <extends>QWidget</extends>\n   <header location=\"global\">tconditionalwidget.h</header>\n   <container>1</container>\n  </customwidget>\n  <customwidget>\n   <class>ScreenArranger</class>\n   <extends>QWidget</extends>\n   <header>arrange/screenarranger.h</header>\n   <container>1</container>\n  </customwidget>\n </customwidgets>\n <resources/>\n <connections/>\n</ui>\n"
  },
  {
    "path": "plugins/DisplayPlugin/arrange/overlaywindow.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"overlaywindow.h\"\n#include \"ui_overlaywindow.h\"\n\nOverlayWindow::OverlayWindow(QWidget* parent) :\n    QDialog(parent),\n    ui(new Ui::OverlayWindow) {\n    ui->setupUi(this);\n    this->setAttribute(Qt::WA_TranslucentBackground);\n    this->setWindowFlag(Qt::FramelessWindowHint);\n\n}\n\nOverlayWindow::~OverlayWindow() {\n    delete ui;\n}\n"
  },
  {
    "path": "plugins/DisplayPlugin/arrange/overlaywindow.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef OVERLAYWINDOW_H\n#define OVERLAYWINDOW_H\n\n#include <QDialog>\n\nnamespace Ui {\n    class OverlayWindow;\n}\n\nclass OverlayWindow : public QDialog\n{\n        Q_OBJECT\n\n    public:\n        explicit OverlayWindow(QWidget *parent = nullptr);\n        ~OverlayWindow();\n\n    private:\n        Ui::OverlayWindow *ui;\n};\n\n#endif // OVERLAYWINDOW_H\n"
  },
  {
    "path": "plugins/DisplayPlugin/arrange/overlaywindow.ui",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ui version=\"4.0\">\n <class>OverlayWindow</class>\n <widget class=\"QDialog\" name=\"OverlayWindow\">\n  <property name=\"geometry\">\n   <rect>\n    <x>0</x>\n    <y>0</y>\n    <width>400</width>\n    <height>300</height>\n   </rect>\n  </property>\n  <property name=\"windowTitle\">\n   <string notr=\"true\">Dialog</string>\n  </property>\n </widget>\n <resources/>\n <connections/>\n</ui>\n"
  },
  {
    "path": "plugins/DisplayPlugin/arrange/screenarranger.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2021 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"screenarranger.h\"\n\n#include <QMouseEvent>\n#include <QPainter>\n#include <libcontemporary_global.h>\n\n#include <Screens/screendaemon.h>\n#include <Screens/systemscreen.h>\n\nstruct Snap {\n        Snap() {\n            valid = false;\n        }\n\n        Snap(double local, int global) {\n            this->local = local;\n            this->global = global;\n            valid = true;\n        }\n\n        operator bool() const {\n            return valid;\n        }\n\n        double local;\n        int global;\n        bool valid;\n};\n\nstruct ScreenArrangerPrivate {\n        QList<SystemScreen*> registeredScreens;\n\n        SystemScreen* draggedScreen;\n        QPointF initialDragPoint;\n        QPointF dragOffset;\n\n        Snap snapLeft, snapRight, snapTop, snapBottom;\n};\n\nScreenArranger::ScreenArranger(QWidget* parent) :\n    QWidget(parent) {\n    d = new ScreenArrangerPrivate();\n\n    connect(ScreenDaemon::instance(), &ScreenDaemon::screensUpdated, this, &ScreenArranger::updateScreens);\n    updateScreens();\n}\n\nScreenArranger::~ScreenArranger() {\n    delete d;\n}\n\nQSize ScreenArranger::sizeHint() const {\n    return SC_DPI_T(QSize(0, 300), QSize);\n}\n\nvoid ScreenArranger::paintEvent(QPaintEvent* event) {\n    QPainter painter(this);\n\n    painter.setFont(this->font());\n    painter.setBrush(this->palette().color(QPalette::Window));\n    painter.setPen(this->palette().color(QPalette::WindowText));\n    for (SystemScreen* screen : ScreenDaemon::instance()->screens()) {\n        painter.save();\n\n        QRectF rect = screenRect(screen);\n\n        if (d->draggedScreen == screen) rect = draggedScreenRect(rect);\n\n        painter.fillRect(rect, painter.brush());\n\n        if (!screen->powered()) painter.setOpacity(0.5);\n        painter.drawRect(rect);\n\n        QString text = screen->displayName();\n        painter.drawText(rect, Qt::AlignCenter, text);\n\n        painter.restore();\n    }\n}\n\ndouble ScreenArranger::scaling() {\n    QRect rect = ScreenDaemon::instance()->screens().first()->geometry();\n    for (SystemScreen* screen : ScreenDaemon::instance()->screens()) {\n        rect = rect.united(screen->geometry());\n    }\n\n    // TODO: better scaling\n    return qMin((this->height() * 0.5) / rect.height(), (this->width() * 0.5) / rect.width());\n}\n\nQRectF ScreenArranger::totalScreen() {\n    QRectF totalScreen = ScreenDaemon::instance()->screens().first()->geometry();\n    for (SystemScreen* screen : ScreenDaemon::instance()->screens()) {\n        totalScreen = totalScreen.united(screen->geometry());\n    }\n    totalScreen = QRectF(totalScreen.topLeft() * scaling(), totalScreen.size() * scaling());\n    totalScreen.moveCenter(QPoint(this->width() / 2, this->height() / 2));\n\n    return totalScreen;\n}\n\nQRectF ScreenArranger::screenRect(SystemScreen* screen) {\n    QRect geometry = screen->geometry();\n    return QRectF(geometry.topLeft() * scaling(), geometry.size() * scaling()).translated(totalScreen().topLeft());\n}\n\nQRectF ScreenArranger::draggedScreenRect(QRectF screenRect) {\n    screenRect.translate(d->dragOffset);\n    if (d->snapLeft) screenRect.moveLeft(d->snapLeft.local);\n    if (d->snapRight) screenRect.moveRight(d->snapRight.local);\n    if (d->snapTop) screenRect.moveTop(d->snapTop.local);\n    if (d->snapBottom) screenRect.moveBottom(d->snapBottom.local);\n    return screenRect;\n}\n\nvoid ScreenArranger::updateScreens() {\n    for (SystemScreen* screen : d->registeredScreens) {\n        screen->disconnect(this);\n    }\n    d->registeredScreens.clear();\n\n    for (SystemScreen* screen : ScreenDaemon::instance()->screens()) {\n        connect(screen, &SystemScreen::geometryChanged, this, QOverload<>::of(&ScreenArranger::update));\n        d->registeredScreens.append(screen);\n    }\n    this->update();\n}\n\nvoid ScreenArranger::mousePressEvent(QMouseEvent* event) {\n    for (SystemScreen* screen : ScreenDaemon::instance()->screens()) {\n        if (screenRect(screen).contains(event->pos())) {\n            d->draggedScreen = screen;\n            d->initialDragPoint = event->pos();\n            d->dragOffset = QPoint();\n        }\n    }\n}\n\nvoid ScreenArranger::mouseReleaseEvent(QMouseEvent* event) {\n    if (d->draggedScreen) {\n        QRectF newGeometry = draggedScreenRect(screenRect(d->draggedScreen)).translated(-totalScreen().topLeft());\n        newGeometry = QRectF(newGeometry.topLeft() / scaling(), newGeometry.size() / scaling());\n\n        if (d->snapLeft) newGeometry.moveLeft(d->snapLeft.global);\n        if (d->snapRight) newGeometry.moveRight(d->snapRight.global);\n        if (d->snapTop) newGeometry.moveTop(d->snapTop.global);\n        if (d->snapBottom) newGeometry.moveBottom(d->snapBottom.global);\n\n        d->draggedScreen->move(newGeometry.topLeft().toPoint());\n    }\n    d->draggedScreen = nullptr;\n    this->update();\n}\n\nvoid ScreenArranger::mouseMoveEvent(QMouseEvent* event) {\n    if (d->draggedScreen) {\n        d->dragOffset = event->pos() - d->initialDragPoint;\n\n        auto trySnap = [=](Snap* snap, double snapTo, int snapToGlobal, double currentValue) {\n            if ((currentValue < snapTo + SC_DPI(5)) && (currentValue > snapTo - SC_DPI(5))) {\n                *snap = Snap(snapTo, snapToGlobal);\n            }\n        };\n\n        d->snapLeft = d->snapRight = d->snapTop = d->snapBottom = Snap();\n\n        QRectF geometry = screenRect(d->draggedScreen).translated(d->dragOffset);\n        for (SystemScreen* screen : ScreenDaemon::instance()->screens()) {\n            // Attempt to snap to this screen\n\n            QRectF snapTo = screenRect(screen);\n            trySnap(&d->snapLeft, snapTo.right(), screen->geometry().right() + 1, geometry.left());       // Left edge to right edge\n            trySnap(&d->snapRight, snapTo.left(), screen->geometry().left(), geometry.right());           // Right edge to left edge\n            trySnap(&d->snapBottom, snapTo.bottom(), screen->geometry().bottom() + 1, geometry.bottom()); // Bottom edge to bottom edge\n            trySnap(&d->snapTop, snapTo.top(), screen->geometry().top(), geometry.top());                 // Top edge to top edge\n            trySnap(&d->snapBottom, snapTo.top(), screen->geometry().top(), geometry.bottom());           // Bottom edge to top edge\n            trySnap(&d->snapTop, snapTo.bottom(), screen->geometry().bottom() + 1, geometry.top());       // Top edge to bottom edge\n        }\n\n        this->update();\n    }\n}\n"
  },
  {
    "path": "plugins/DisplayPlugin/arrange/screenarranger.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2021 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef SCREENARRANGER_H\n#define SCREENARRANGER_H\n\n#include <QWidget>\n\nclass SystemScreen;\nstruct ScreenArrangerPrivate;\nclass ScreenArranger : public QWidget {\n        Q_OBJECT\n    public:\n        explicit ScreenArranger(QWidget* parent = nullptr);\n        ~ScreenArranger();\n\n        QSize sizeHint() const;\n\n    signals:\n\n    private:\n        ScreenArrangerPrivate* d;\n\n        void paintEvent(QPaintEvent* event);\n\n        double scaling();\n        QRectF totalScreen();\n        QRectF screenRect(SystemScreen* screen);\n        QRectF draggedScreenRect(QRectF screenRect);\n\n        void updateScreens();\n\n        // QWidget interface\n    protected:\n        void mousePressEvent(QMouseEvent* event);\n        void mouseReleaseEvent(QMouseEvent* event);\n        void mouseMoveEvent(QMouseEvent* event);\n};\n\n#endif // SCREENARRANGER_H\n"
  },
  {
    "path": "plugins/DisplayPlugin/plugin.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"plugin.h\"\n\n#include \"settings/displaysettings.h\"\n#include \"tsettings.h\"\n#include <QApplication>\n#include <QDebug>\n#include <QDir>\n#include <QKeySequence>\n#include <Screens/screendaemon.h>\n#include <Screens/systemscreen.h>\n#include <hudmanager.h>\n#include <keygrab.h>\n#include <localemanager.h>\n#include <statemanager.h>\n#include <statuscentermanager.h>\n#include <tapplication.h>\n\n#include <Screens/screendaemon.h>\n\n#include \"redshift/redshiftdaemon.h\"\n\nstruct PluginPrivate {\n        DisplaySettings* settingsPage;\n        RedshiftDaemon* daemon;\n\n        tSettings* settings;\n};\n\nPlugin::Plugin() {\n    d = new PluginPrivate();\n}\n\nPlugin::~Plugin() {\n    delete d;\n}\n\nvoid Plugin::activate() {\n    tApplication::addPluginTranslator(CNTP_TARGET_NAME);\n\n    tSettings::registerDefaults(QDir::cleanPath(qApp->applicationDirPath() + \"/../plugins/DisplayPlugin/thedesk-display.conf\"));\n    tSettings::registerDefaults(\"/usr/share/defaults/thedesk-display.conf\");\n\n    d->settingsPage = new DisplaySettings();\n    d->daemon = new RedshiftDaemon();\n\n    StateManager::statusCenterManager()->addPane(d->settingsPage, StatusCenterManager::SystemSettings);\n\n    // Keep screen configuration up to date\n    ScreenDaemon::instance()->enableAutomaticRestore();\n\n    d->settings = new tSettings();\n    connect(d->settings, &tSettings::settingChanged, this, [this] {\n        ScreenDaemon::instance()->setDpi(d->settings->value(\"Display/dpi\").toInt());\n    });\n    ScreenDaemon::instance()->setDpi(d->settings->value(\"Display/dpi\").toInt());\n}\n\nvoid Plugin::deactivate() {\n    d->daemon->deleteLater();\n\n    StateManager::statusCenterManager()->removePane(d->settingsPage);\n    d->settingsPage->deleteLater();\n\n    d->settings->deleteLater();\n\n    tApplication::removePluginTranslator(CNTP_TARGET_NAME);\n}\n"
  },
  {
    "path": "plugins/DisplayPlugin/plugin.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef PLUGIN_H\n#define PLUGIN_H\n\n#include \"plugins/plugininterface.h\"\n\nstruct PluginPrivate;\nclass Plugin : public QObject,\n               public PluginInterface {\n        Q_OBJECT\n        Q_PLUGIN_METADATA(IID PluginInterface_iid FILE \"Plugin.json\")\n        Q_INTERFACES(PluginInterface)\n\n    public:\n        Plugin();\n        ~Plugin();\n\n    private:\n        PluginPrivate* d;\n\n        // PluginInterface interface\n    public:\n        void activate();\n        void deactivate();\n};\n\n#endif // PLUGIN_H\n"
  },
  {
    "path": "plugins/DisplayPlugin/redshift/colorramp.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n\n/* colorramp.c -- color temperature calculation source\n   This file is part of Redshift.\n   Redshift is free software: you can redistribute it and/or modify\n   it under the terms of the GNU General Public License as published by\n   the Free Software Foundation, either version 3 of the License, or\n   (at your option) any later version.\n   Redshift is distributed in the hope that it will be useful,\n   but WITHOUT ANY WARRANTY; without even the implied warranty of\n   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n   GNU General Public License for more details.\n   You should have received a copy of the GNU General Public License\n   along with Redshift.  If not, see <http://www.gnu.org/licenses/>.\n   Copyright (c) 2013-2014  Jon Lund Steffensen <jonlst@gmail.com>\n   Copyright (c) 2013  Ingo Thies <ithies@astro.uni-bonn.de>\n*/\n\n#include \"colorramp.h\"\n#include <math.h>\n\n/* Whitepoint values for temperatures at 100K intervals.\n   These will be interpolated for the actual temperature.\n   This table was provided by Ingo Thies, 2013. See\n   the file README-colorramp for more information. */\nstatic const double blackbody_color[] = {\n    1.00000000,  0.18172716,  0.00000000, /* 1000K */\n    1.00000000,  0.25503671,  0.00000000, /* 1100K */\n    1.00000000,  0.30942099,  0.00000000, /* 1200K */\n    1.00000000,  0.35357379,  0.00000000, /* ...   */\n    1.00000000,  0.39091524,  0.00000000,\n    1.00000000,  0.42322816,  0.00000000,\n    1.00000000,  0.45159884,  0.00000000,\n    1.00000000,  0.47675916,  0.00000000,\n    1.00000000,  0.49923747,  0.00000000,\n    1.00000000,  0.51943421,  0.00000000,\n    1.00000000,  0.54360078,  0.08679949,\n    1.00000000,  0.56618736,  0.14065513,\n    1.00000000,  0.58734976,  0.18362641,\n    1.00000000,  0.60724493,  0.22137978,\n    1.00000000,  0.62600248,  0.25591950,\n    1.00000000,  0.64373109,  0.28819679,\n    1.00000000,  0.66052319,  0.31873863,\n    1.00000000,  0.67645822,  0.34786758,\n    1.00000000,  0.69160518,  0.37579588,\n    1.00000000,  0.70602449,  0.40267128,\n    1.00000000,  0.71976951,  0.42860152,\n    1.00000000,  0.73288760,  0.45366838,\n    1.00000000,  0.74542112,  0.47793608,\n    1.00000000,  0.75740814,  0.50145662,\n    1.00000000,  0.76888303,  0.52427322,\n    1.00000000,  0.77987699,  0.54642268,\n    1.00000000,  0.79041843,  0.56793692,\n    1.00000000,  0.80053332,  0.58884417,\n    1.00000000,  0.81024551,  0.60916971,\n    1.00000000,  0.81957693,  0.62893653,\n    1.00000000,  0.82854786,  0.64816570,\n    1.00000000,  0.83717703,  0.66687674,\n    1.00000000,  0.84548188,  0.68508786,\n    1.00000000,  0.85347859,  0.70281616,\n    1.00000000,  0.86118227,  0.72007777,\n    1.00000000,  0.86860704,  0.73688797,\n    1.00000000,  0.87576611,  0.75326132,\n    1.00000000,  0.88267187,  0.76921169,\n    1.00000000,  0.88933596,  0.78475236,\n    1.00000000,  0.89576933,  0.79989606,\n    1.00000000,  0.90198230,  0.81465502,\n    1.00000000,  0.90963069,  0.82838210,\n    1.00000000,  0.91710889,  0.84190889,\n    1.00000000,  0.92441842,  0.85523742,\n    1.00000000,  0.93156127,  0.86836903,\n    1.00000000,  0.93853986,  0.88130458,\n    1.00000000,  0.94535695,  0.89404470,\n    1.00000000,  0.95201559,  0.90658983,\n    1.00000000,  0.95851906,  0.91894041,\n    1.00000000,  0.96487079,  0.93109690,\n    1.00000000,  0.97107439,  0.94305985,\n    1.00000000,  0.97713351,  0.95482993,\n    1.00000000,  0.98305189,  0.96640795,\n    1.00000000,  0.98883326,  0.97779486,\n    1.00000000,  0.99448139,  0.98899179,\n    1.00000000,  1.00000000,  1.00000000, /* 6500K */\n    0.98947904,  0.99348723,  1.00000000,\n    0.97940448,  0.98722715,  1.00000000,\n    0.96975025,  0.98120637,  1.00000000,\n    0.96049223,  0.97541240,  1.00000000,\n    0.95160805,  0.96983355,  1.00000000,\n    0.94303638,  0.96443333,  1.00000000,\n    0.93480451,  0.95923080,  1.00000000,\n    0.92689056,  0.95421394,  1.00000000,\n    0.91927697,  0.94937330,  1.00000000,\n    0.91194747,  0.94470005,  1.00000000,\n    0.90488690,  0.94018594,  1.00000000,\n    0.89808115,  0.93582323,  1.00000000,\n    0.89151710,  0.93160469,  1.00000000,\n    0.88518247,  0.92752354,  1.00000000,\n    0.87906581,  0.92357340,  1.00000000,\n    0.87315640,  0.91974827,  1.00000000,\n    0.86744421,  0.91604254,  1.00000000,\n    0.86191983,  0.91245088,  1.00000000,\n    0.85657444,  0.90896831,  1.00000000,\n    0.85139976,  0.90559011,  1.00000000,\n    0.84638799,  0.90231183,  1.00000000,\n    0.84153180,  0.89912926,  1.00000000,\n    0.83682430,  0.89603843,  1.00000000,\n    0.83225897,  0.89303558,  1.00000000,\n    0.82782969,  0.89011714,  1.00000000,\n    0.82353066,  0.88727974,  1.00000000,\n    0.81935641,  0.88452017,  1.00000000,\n    0.81530175,  0.88183541,  1.00000000,\n    0.81136180,  0.87922257,  1.00000000,\n    0.80753191,  0.87667891,  1.00000000,\n    0.80380769,  0.87420182,  1.00000000,\n    0.80018497,  0.87178882,  1.00000000,\n    0.79665980,  0.86943756,  1.00000000,\n    0.79322843,  0.86714579,  1.00000000,\n    0.78988728,  0.86491137,  1.00000000, /* 10000K */\n    0.78663296,  0.86273225,  1.00000000,\n    0.78346225,  0.86060650,  1.00000000,\n    0.78037207,  0.85853224,  1.00000000,\n    0.77735950,  0.85650771,  1.00000000,\n    0.77442176,  0.85453121,  1.00000000,\n    0.77155617,  0.85260112,  1.00000000,\n    0.76876022,  0.85071588,  1.00000000,\n    0.76603147,  0.84887402,  1.00000000,\n    0.76336762,  0.84707411,  1.00000000,\n    0.76076645,  0.84531479,  1.00000000,\n    0.75822586,  0.84359476,  1.00000000,\n    0.75574383,  0.84191277,  1.00000000,\n    0.75331843,  0.84026762,  1.00000000,\n    0.75094780,  0.83865816,  1.00000000,\n    0.74863017,  0.83708329,  1.00000000,\n    0.74636386,  0.83554194,  1.00000000,\n    0.74414722,  0.83403311,  1.00000000,\n    0.74197871,  0.83255582,  1.00000000,\n    0.73985682,  0.83110912,  1.00000000,\n    0.73778012,  0.82969211,  1.00000000,\n    0.73574723,  0.82830393,  1.00000000,\n    0.73375683,  0.82694373,  1.00000000,\n    0.73180765,  0.82561071,  1.00000000,\n    0.72989845,  0.82430410,  1.00000000,\n    0.72802807,  0.82302316,  1.00000000,\n    0.72619537,  0.82176715,  1.00000000,\n    0.72439927,  0.82053539,  1.00000000,\n    0.72263872,  0.81932722,  1.00000000,\n    0.72091270,  0.81814197,  1.00000000,\n    0.71922025,  0.81697905,  1.00000000,\n    0.71756043,  0.81583783,  1.00000000,\n    0.71593234,  0.81471775,  1.00000000,\n    0.71433510,  0.81361825,  1.00000000,\n    0.71276788,  0.81253878,  1.00000000,\n    0.71122987,  0.81147883,  1.00000000,\n    0.70972029,  0.81043789,  1.00000000,\n    0.70823838,  0.80941546,  1.00000000,\n    0.70678342,  0.80841109,  1.00000000,\n    0.70535469,  0.80742432,  1.00000000,\n    0.70395153,  0.80645469,  1.00000000,\n    0.70257327,  0.80550180,  1.00000000,\n    0.70121928,  0.80456522,  1.00000000,\n    0.69988894,  0.80364455,  1.00000000,\n    0.69858167,  0.80273941,  1.00000000,\n    0.69729688,  0.80184943,  1.00000000,\n    0.69603402,  0.80097423,  1.00000000,\n    0.69479255,  0.80011347,  1.00000000,\n    0.69357196,  0.79926681,  1.00000000,\n    0.69237173,  0.79843391,  1.00000000,\n    0.69119138,  0.79761446,  1.00000000, /* 15000K */\n    0.69003044,  0.79680814,  1.00000000,\n    0.68888844,  0.79601466,  1.00000000,\n    0.68776494,  0.79523371,  1.00000000,\n    0.68665951,  0.79446502,  1.00000000,\n    0.68557173,  0.79370830,  1.00000000,\n    0.68450119,  0.79296330,  1.00000000,\n    0.68344751,  0.79222975,  1.00000000,\n    0.68241029,  0.79150740,  1.00000000,\n    0.68138918,  0.79079600,  1.00000000,\n    0.68038380,  0.79009531,  1.00000000,\n    0.67939381,  0.78940511,  1.00000000,\n    0.67841888,  0.78872517,  1.00000000,\n    0.67745866,  0.78805526,  1.00000000,\n    0.67651284,  0.78739518,  1.00000000,\n    0.67558112,  0.78674472,  1.00000000,\n    0.67466317,  0.78610368,  1.00000000,\n    0.67375872,  0.78547186,  1.00000000,\n    0.67286748,  0.78484907,  1.00000000,\n    0.67198916,  0.78423512,  1.00000000,\n    0.67112350,  0.78362984,  1.00000000,\n    0.67027024,  0.78303305,  1.00000000,\n    0.66942911,  0.78244457,  1.00000000,\n    0.66859988,  0.78186425,  1.00000000,\n    0.66778228,  0.78129191,  1.00000000,\n    0.66697610,  0.78072740,  1.00000000,\n    0.66618110,  0.78017057,  1.00000000,\n    0.66539706,  0.77962127,  1.00000000,\n    0.66462376,  0.77907934,  1.00000000,\n    0.66386098,  0.77854465,  1.00000000,\n    0.66310852,  0.77801705,  1.00000000,\n    0.66236618,  0.77749642,  1.00000000,\n    0.66163375,  0.77698261,  1.00000000,\n    0.66091106,  0.77647551,  1.00000000,\n    0.66019791,  0.77597498,  1.00000000,\n    0.65949412,  0.77548090,  1.00000000,\n    0.65879952,  0.77499315,  1.00000000,\n    0.65811392,  0.77451161,  1.00000000,\n    0.65743716,  0.77403618,  1.00000000,\n    0.65676908,  0.77356673,  1.00000000,\n    0.65610952,  0.77310316,  1.00000000,\n    0.65545831,  0.77264537,  1.00000000,\n    0.65481530,  0.77219324,  1.00000000,\n    0.65418036,  0.77174669,  1.00000000,\n    0.65355332,  0.77130560,  1.00000000,\n    0.65293404,  0.77086988,  1.00000000,\n    0.65232240,  0.77043944,  1.00000000,\n    0.65171824,  0.77001419,  1.00000000,\n    0.65112144,  0.76959404,  1.00000000,\n    0.65053187,  0.76917889,  1.00000000,\n    0.64994941,  0.76876866,  1.00000000, /* 20000K */\n    0.64937392,  0.76836326,  1.00000000,\n    0.64880528,  0.76796263,  1.00000000,\n    0.64824339,  0.76756666,  1.00000000,\n    0.64768812,  0.76717529,  1.00000000,\n    0.64713935,  0.76678844,  1.00000000,\n    0.64659699,  0.76640603,  1.00000000,\n    0.64606092,  0.76602798,  1.00000000,\n    0.64553103,  0.76565424,  1.00000000,\n    0.64500722,  0.76528472,  1.00000000,\n    0.64448939,  0.76491935,  1.00000000,\n    0.64397745,  0.76455808,  1.00000000,\n    0.64347129,  0.76420082,  1.00000000,\n    0.64297081,  0.76384753,  1.00000000,\n    0.64247594,  0.76349813,  1.00000000,\n    0.64198657,  0.76315256,  1.00000000,\n    0.64150261,  0.76281076,  1.00000000,\n    0.64102399,  0.76247267,  1.00000000,\n    0.64055061,  0.76213824,  1.00000000,\n    0.64008239,  0.76180740,  1.00000000,\n    0.63961926,  0.76148010,  1.00000000,\n    0.63916112,  0.76115628,  1.00000000,\n    0.63870790,  0.76083590,  1.00000000,\n    0.63825953,  0.76051890,  1.00000000,\n    0.63781592,  0.76020522,  1.00000000,\n    0.63737701,  0.75989482,  1.00000000,\n    0.63694273,  0.75958764,  1.00000000,\n    0.63651299,  0.75928365,  1.00000000,\n    0.63608774,  0.75898278,  1.00000000,\n    0.63566691,  0.75868499,  1.00000000,\n    0.63525042,  0.75839025,  1.00000000,\n    0.63483822,  0.75809849,  1.00000000,\n    0.63443023,  0.75780969,  1.00000000,\n    0.63402641,  0.75752379,  1.00000000,\n    0.63362667,  0.75724075,  1.00000000,\n    0.63323097,  0.75696053,  1.00000000,\n    0.63283925,  0.75668310,  1.00000000,\n    0.63245144,  0.75640840,  1.00000000,\n    0.63206749,  0.75613641,  1.00000000,\n    0.63168735,  0.75586707,  1.00000000,\n    0.63131096,  0.75560036,  1.00000000,\n    0.63093826,  0.75533624,  1.00000000,\n    0.63056920,  0.75507467,  1.00000000,\n    0.63020374,  0.75481562,  1.00000000,\n    0.62984181,  0.75455904,  1.00000000,\n    0.62948337,  0.75430491,  1.00000000,\n    0.62912838,  0.75405319,  1.00000000,\n    0.62877678,  0.75380385,  1.00000000,\n    0.62842852,  0.75355685,  1.00000000,\n    0.62808356,  0.75331217,  1.00000000,\n    0.62774186,  0.75306977,  1.00000000, /* 25000K */\n    0.62740336,  0.75282962,  1.00000000  /* 25100K */\n};\n\n/* Helper macro used in the fill functions */\n//#define F(Y, C)  Y * white_point[C]\n\nstatic void interpolate_color(double a, const double* c1, const double* c2, double* c) {\n    c[0] = (1.0 - a) * c1[0] + a * c2[0];\n    c[1] = (1.0 - a) * c1[1] + a * c2[1];\n    c[2] = (1.0 - a) * c1[2] + a * c2[2];\n}\n\nvoid colorramp_fill(quint16* gamma_r, quint16* gamma_g, quint16* gamma_b, int size, const int temperature) {\n    /* Approximate white point */\n    double white_point[3];\n    double alpha = (temperature % 100) / 100.0;\n    int temp_index = ((temperature - 1000) / 100) * 3;\n    interpolate_color(alpha, &blackbody_color[temp_index], &blackbody_color[temp_index + 3], white_point);\n\n    for (int i = 0; i < size; i++) {\n        quint16 initialValue = static_cast<quint16>(i / size * (UINT16_MAX + 1));\n        gamma_r[i] = static_cast<quint16>(initialValue / (UINT16_MAX + 1) * white_point[0] * (UINT16_MAX + 1));\n        gamma_g[i] = static_cast<quint16>(initialValue / (UINT16_MAX + 1) * white_point[1] * (UINT16_MAX + 1));\n        gamma_b[i] = static_cast<quint16>(initialValue / (UINT16_MAX + 1) * white_point[2] * (UINT16_MAX + 1));\n    }\n}\n\nvoid gammaRampsForTemp(double* gamma_r, double* gamma_g, double* gamma_b, int temperature) {\n    /* Approximate white point */\n    double white_point[3];\n    double alpha = (temperature % 100) / 100.0;\n    int temp_index = ((temperature - 1000) / 100) * 3;\n    interpolate_color(alpha, &blackbody_color[temp_index], &blackbody_color[temp_index + 3], white_point);\n\n    *gamma_r = white_point[0];\n    *gamma_g = white_point[1];\n    *gamma_b = white_point[2];\n}\n"
  },
  {
    "path": "plugins/DisplayPlugin/redshift/colorramp.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n\n/* colorramp.h -- color temperature calculation header\n   This file is part of Redshift.\n   Redshift is free software: you can redistribute it and/or modify\n   it under the terms of the GNU General Public License as published by\n   the Free Software Foundation, either version 3 of the License, or\n   (at your option) any later version.\n   Redshift is distributed in the hope that it will be useful,\n   but WITHOUT ANY WARRANTY; without even the implied warranty of\n   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n   GNU General Public License for more details.\n   You should have received a copy of the GNU General Public License\n   along with Redshift.  If not, see <http://www.gnu.org/licenses/>.\n   Copyright (c) 2010-2014  Jon Lund Steffensen <jonlst@gmail.com>\n*/\n\n#ifndef COLORRAMP_H\n#define COLORRAMP_H\n\n#include <QtGlobal>\n\nvoid colorramp_fill(quint16* gamma_r, quint16* gamma_g, quint16* gamma_b, int size, const int temperature);\nvoid gammaRampsForTemp(double* gamma_r, double* gamma_g, double* gamma_b, int temperature);\n\n#endif // COLORRAMP_H\n"
  },
  {
    "path": "plugins/DisplayPlugin/redshift/redshiftdaemon.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"redshiftdaemon.h\"\n\n#include \"redshift/colorramp.h\"\n#include <QAction>\n#include <QGeoPositionInfoSource>\n#include <QTime>\n#include <QTimer>\n#include <Screens/screendaemon.h>\n#include <Screens/systemscreen.h>\n#include <actionquickwidget.h>\n#include <barmanager.h>\n#include <icontextchunk.h>\n#include <quickswitch.h>\n#include <statemanager.h>\n#include <statuscentermanager.h>\n#include <tsettings.h>\n\n//#include <twmeteorology.h>\n\nstruct RedshiftDaemonPrivate {\n        enum RedshiftState {\n            Initialising,\n            Idle,\n            ManualOff,\n            ManualOn,\n            Scheduled\n        };\n\n        QTimer* redshiftStateTimer;\n        QuickSwitch* sw;\n        IconTextChunk* chunk;\n\n        RedshiftState state = Initialising;\n        bool updatingState = false;\n\n        tSettings settings;\n        //    twMeteorology* meteorologyDaemon;\n        QGeoPositionInfoSource* positonSource = nullptr;\n};\n\nRedshiftDaemon::RedshiftDaemon(QObject* parent) :\n    QObject(parent) {\n    d = new RedshiftDaemonPrivate();\n\n    //    d->meteorologyDaemon = new twMeteorology(this);\n    //    connect(d->meteorologyDaemon, &twMeteorology::sunriseSunsetChanged, this, [ = ] {\n    //        if (d->settings.value(\"Redshift/followSunlightCycle\").toBool()) {\n    //            if (!d->meteorologyDaemon->sunset().isNull()) {\n    //                d->settings.setValue(\"Redshift/startTime\", d->meteorologyDaemon->sunset().msecsSinceStartOfDay());\n    //                d->settings.setValue(\"Redshift/endTime\", d->meteorologyDaemon->sunrise().msecsSinceStartOfDay());\n    //            }\n    //        }\n    //    });\n\n    d->sw = new QuickSwitch(\"Redshift\");\n    d->sw->setTitle(\"Redshift\");\n    connect(d->sw, &QuickSwitch::toggled, this, [=](bool on) {\n        if (d->updatingState) return;\n\n        // We'll only get here if the user manually toggled the switch\n        d->state = on ? RedshiftDaemonPrivate::ManualOn : RedshiftDaemonPrivate::ManualOff;\n        updateRedshiftState();\n    });\n    StateManager::statusCenterManager()->addSwitch(d->sw);\n\n    d->chunk = new IconTextChunk(\"redshift\");\n    d->chunk->setIcon(QIcon::fromTheme(\"redshift-on\"));\n    d->chunk->setText(tr(\"Redshift Active\"));\n\n    ActionQuickWidget* quickWidget = new ActionQuickWidget(d->chunk);\n    quickWidget->addAction(QIcon::fromTheme(\"redshift-on\"), tr(\"Disable Redshift until tomorrow\"), [=] {\n        d->sw->setChecked(false);\n    });\n    quickWidget->addAction(QIcon::fromTheme(\"configure\"), tr(\"Display Settings\"), [=] {\n        StateManager::statusCenterManager()->showWithPane(\"DisplaySettings\");\n    });\n    d->chunk->setQuickWidget(quickWidget);\n\n    d->redshiftStateTimer = new QTimer();\n    d->redshiftStateTimer->setInterval(60000);\n    connect(d->redshiftStateTimer, &QTimer::timeout, this, &RedshiftDaemon::updateRedshiftState);\n    if (d->settings.value(\"Redshift/scheduleRedshift\").toBool()) d->redshiftStateTimer->start();\n\n    connect(&d->settings, &tSettings::settingChanged, this, [=](QString key, QVariant value) {\n        if (key.startsWith(\"Redshift/\")) {\n            // Turn on/off the Redshift timer\n            if (key == \"Redshift/scheduleRedshift\") {\n                if (value.toBool()) {\n                    d->redshiftStateTimer->start();\n                } else {\n                    d->redshiftStateTimer->stop();\n                }\n\n                // Recalculate the Redshift state\n                this->updateRedshiftState();\n            } else if (key == \"Redshift/followSunlightCycle\") {\n                updateSunlightCycleState();\n            }\n        }\n    });\n\n    this->updateRedshiftState();\n    this->updateSunlightCycleState();\n}\n\nRedshiftDaemon::~RedshiftDaemon() {\n    StateManager::statusCenterManager()->removeSwitch(d->sw);\n    d->sw->deleteLater();\n    d->chunk->deleteLater();\n    delete d;\n}\n\nvoid RedshiftDaemon::updateRedshiftState() {\n    d->updatingState = true;\n    int time = QTime::currentTime().msecsSinceStartOfDay();\n    const int transitionTime = 1800000; // half an hour\n    bool scheduled = d->settings.value(\"Redshift/scheduleRedshift\").toBool();\n    int intensity = d->settings.value(\"Redshift/intensity\").toInt();\n\n    // Time right in the middle of the transition time\n    int startTime = d->settings.value(\"Redshift/startTime\").toInt();\n    int endTime = d->settings.value(\"Redshift/endTime\").toInt();\n    bool scheduledShouldBeOnMidTransitionTime = false;\n\n    // First/last time when Redshift should be fully off\n    int startTimeTransitionTime = startTime - transitionTime;\n    int endTimeTransitionTime = endTime + transitionTime;\n    bool scheduledShouldBeOn = false;\n\n    // First/last time when Redshift should be fully on\n    int startTimeFullTime = startTime + transitionTime;\n    int endTimeFullTime = endTime - transitionTime;\n    bool scheduledShouldBeOnFully = false;\n\n    if (startTime > endTime) {\n        // We're going overnight\n        if (time > startTimeTransitionTime || time < endTimeTransitionTime) scheduledShouldBeOn = true;\n        if (time > startTime || time < endTime) scheduledShouldBeOnMidTransitionTime = true;\n        if (time > startTimeFullTime || time < endTimeFullTime) scheduledShouldBeOnFully = true;\n    } else {\n        if (time > startTimeTransitionTime && time < endTimeTransitionTime) scheduledShouldBeOn = true;\n        if (time > startTime && time < endTime) scheduledShouldBeOnMidTransitionTime = true;\n        if (time > startTimeFullTime && time < endTimeFullTime) scheduledShouldBeOnFully = true;\n    }\n\n    switch (d->state) {\n        case RedshiftDaemonPrivate::Idle:\n        case RedshiftDaemonPrivate::Initialising:\n            if (scheduled) {\n                // Set the appropriate state and recalculate the Redshift state\n                d->state = RedshiftDaemonPrivate::Scheduled;\n                updateRedshiftState();\n            } else {\n                d->state = RedshiftDaemonPrivate::Idle;\n                setRedshiftTemperature(6500);\n                d->sw->setChecked(false);\n            }\n            break;\n        case RedshiftDaemonPrivate::ManualOff:\n            if (scheduled && !scheduledShouldBeOn) {\n                // Revert to the schedule if we've ticked into the correct time\n                d->state = RedshiftDaemonPrivate::Scheduled;\n            } else if (!scheduled) {\n                // Revert to the idle state if we're not scheduled\n                d->state = RedshiftDaemonPrivate::Idle;\n                setRedshiftTemperature(6500);\n            } else {\n                setRedshiftTemperature(6500);\n            }\n            break;\n        case RedshiftDaemonPrivate::ManualOn:\n            if (scheduled && scheduledShouldBeOnFully) {\n                // Revert to the schedule if we've ticked into the correct time\n                d->state = RedshiftDaemonPrivate::Scheduled;\n                updateRedshiftState();\n            } else {\n                setRedshiftTemperature(intensity);\n            }\n            break;\n        case RedshiftDaemonPrivate::Scheduled:\n            if (!scheduled) {\n                // Set the appropriate state and recalculate the Redshift state\n                d->state = RedshiftDaemonPrivate::Idle;\n                updateRedshiftState();\n            } else {\n                // Calculate the appropriate Redshift temperature and set it\n                if (!scheduledShouldBeOn) {\n                    // Redshift shouldn't be on\n                    setRedshiftTemperature(6500);\n                } else if (scheduledShouldBeOnFully) {\n                    // Redshift should be on fully\n                    setRedshiftTemperature(intensity);\n                } else {\n                    // Figure out how intense the Redshift should be\n                    int midIntensity;\n                    if (time < startTimeFullTime && time > startTimeTransitionTime) {\n                        // Use start time values\n                        midIntensity = (6500 - intensity) - static_cast<int>((6500 - intensity) * static_cast<double>(time - startTimeTransitionTime) / (transitionTime * 2)) + intensity;\n                    } else {\n                        // Use end time values\n                        midIntensity = static_cast<int>((6500 - intensity) * static_cast<double>(time - endTimeFullTime) / (transitionTime * 2)) + intensity;\n                    }\n\n                    setRedshiftTemperature(midIntensity);\n                }\n\n                // Set the Redshift switch accordingly\n                d->sw->setChecked(scheduledShouldBeOn);\n            }\n            break;\n    }\n\n    d->updatingState = false;\n}\n\nvoid RedshiftDaemon::updateSunlightCycleState() {\n    if (d->settings.value(\"Redshift/followSunlightCycle\").toBool()) {\n        if (!d->positonSource) {\n            d->positonSource = QGeoPositionInfoSource::createDefaultSource(this);\n            d->positonSource->setPreferredPositioningMethods(QGeoPositionInfoSource::NonSatellitePositioningMethods);\n            d->positonSource->setUpdateInterval(3600000); // Once an hour\n            connect(d->positonSource, &QGeoPositionInfoSource::positionUpdated, this, [=](QGeoPositionInfo position) {\n                //                d->meteorologyDaemon->setLocation(position.coordinate().latitude(), position.coordinate().longitude());\n            });\n        }\n\n        d->positonSource->startUpdates();\n    } else {\n        if (d->positonSource) {\n            d->positonSource->stopUpdates();\n            d->positonSource->deleteLater();\n            d->positonSource = nullptr;\n        }\n    }\n}\n\nvoid RedshiftDaemon::setRedshiftTemperature(int temp) {\n    // Show/hide the chunk\n    if (!d->chunk->chunkRegistered() && temp != 6500) {\n        StateManager::barManager()->addChunk(d->chunk);\n    } else if (d->chunk->chunkRegistered() && temp == 6500) {\n        StateManager::barManager()->removeChunk(d->chunk);\n    }\n\n    for (SystemScreen* screen : ScreenDaemon::instance()->screens()) {\n        SystemScreen::GammaRamps ramps;\n        gammaRampsForTemp(&ramps.red, &ramps.green, &ramps.blue, temp);\n        screen->adjustGammaRamps(\"redshift\", ramps);\n    }\n}\n"
  },
  {
    "path": "plugins/DisplayPlugin/redshift/redshiftdaemon.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef REDSHIFTDAEMON_H\n#define REDSHIFTDAEMON_H\n\n#include <QObject>\n\nstruct RedshiftDaemonPrivate;\nclass RedshiftDaemon : public QObject {\n        Q_OBJECT\n    public:\n        explicit RedshiftDaemon(QObject* parent = nullptr);\n        ~RedshiftDaemon();\n\n    signals:\n\n    private:\n        RedshiftDaemonPrivate* d;\n\n        void updateRedshiftState();\n        void updateSunlightCycleState();\n        void setRedshiftTemperature(int temp);\n};\n\n#endif // REDSHIFTDAEMON_H\n"
  },
  {
    "path": "plugins/DisplayPlugin/settings/displaysettings.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"displaysettings.h\"\n#include \"ui_displaysettings.h\"\n\n#include <statemanager.h>\n#include <statuscentermanager.h>\n\n#include <QIcon>\n#include <tsettings.h>\n\n#include \"arrange/arrangecontroller.h\"\n\nstruct DisplaySettingsPrivate {\n    tSettings settings;\n};\n\nDisplaySettings::DisplaySettings() :\n    StatusCenterPane(),\n    ui(new Ui::DisplaySettings) {\n    ui->setupUi(this);\n\n    d = new DisplaySettingsPrivate();\n\n    ui->titleLabel->setBackButtonIsMenu(true);\n    ui->titleLabel->setBackButtonShown(StateManager::instance()->statusCenterManager()->isHamburgerMenuRequired());\n    connect(StateManager::instance()->statusCenterManager(), &StatusCenterManager::isHamburgerMenuRequiredChanged, ui->titleLabel, &tTitleLabel::setBackButtonShown);\n\n    const int contentWidth = StateManager::instance()->statusCenterManager()->preferredContentWidth();\n    ui->arrangeWidget->setFixedWidth(contentWidth);\n    ui->arrangeButton->setFixedWidth(contentWidth);\n    ui->scalingWidget->setFixedWidth(contentWidth);\n    ui->redshiftWidget->setFixedWidth(contentWidth);\n\n    connect(&d->settings, &tSettings::settingChanged, this, [ = ](QString key) {\n        if (key.startsWith(\"Redshift/\")) {\n            updateRedshiftSettings();\n        } else if (key == \"Display/dpi\") {\n            updateDpiSettings();\n        }\n    });\n\n    updateRedshiftSettings();\n    updateDpiSettings();\n}\n\nDisplaySettings::~DisplaySettings() {\n    delete d;\n    delete ui;\n}\n\nvoid DisplaySettings::updateRedshiftSettings() {\n    ui->scheduleRedshiftSwitch->setChecked(d->settings.value(\"Redshift/scheduleRedshift\").toBool());\n    ui->followSunlightSwitch->setChecked(d->settings.value(\"Redshift/followSunlightCycle\").toBool());\n    ui->redshiftStartTime->setTime(QTime::fromMSecsSinceStartOfDay(d->settings.value(\"Redshift/startTime\").toInt()));\n    ui->redshiftEndTime->setTime(QTime::fromMSecsSinceStartOfDay(d->settings.value(\"Redshift/endTime\").toInt()));\n    ui->redshiftIntensitySlider->setValue(d->settings.value(\"Redshift/intensity\").toInt());\n\n    ui->scheduleRedshiftConditionalWidget->setExpanded(d->settings.value(\"Redshift/scheduleRedshift\").toBool());\n    ui->followSunlightConditionalWidget->setExpanded(!d->settings.value(\"Redshift/followSunlightCycle\").toBool());\n}\n\nvoid DisplaySettings::updateDpiSettings() {\n    switch (d->settings.value(\"Display/dpi\").toInt()) {\n        case 96:\n            ui->dpi100Button->setChecked(true);\n            break;\n        case 120:\n            ui->dpi125Button->setChecked(true);\n            break;\n        case 144:\n            ui->dpi150Button->setChecked(true);\n            break;\n        case 192:\n            ui->dpi200Button->setChecked(true);\n            break;\n    }\n}\n\nQString DisplaySettings::name() {\n    return \"DisplaySettings\";\n}\n\nQString DisplaySettings::displayName() {\n    return tr(\"Displays\");\n}\n\nQIcon DisplaySettings::icon() {\n    return QIcon::fromTheme(\"preferences-desktop-display\");\n}\n\nQWidget* DisplaySettings::leftPane() {\n    return nullptr;\n}\n\nvoid DisplaySettings::on_titleLabel_backButtonClicked() {\n    StateManager::instance()->statusCenterManager()->showStatusCenterHamburgerMenu();\n}\n\nvoid DisplaySettings::on_scheduleRedshiftSwitch_toggled(bool checked) {\n    ui->scheduleRedshiftConditionalWidget->setExpanded(checked);\n    d->settings.setValue(\"Redshift/scheduleRedshift\", checked);\n}\n\nvoid DisplaySettings::on_followSunlightSwitch_toggled(bool checked) {\n    ui->followSunlightConditionalWidget->setExpanded(!checked);\n    d->settings.setValue(\"Redshift/followSunlightCycle\", checked);\n}\n\nvoid DisplaySettings::on_redshiftStartTime_userTimeChanged(const QTime& time) {\n    d->settings.setValue(\"Redshift/startTime\", time.msecsSinceStartOfDay());\n}\n\nvoid DisplaySettings::on_redshiftEndTime_userTimeChanged(const QTime& time) {\n    d->settings.setValue(\"Redshift/endTime\", time.msecsSinceStartOfDay());\n}\n\nvoid DisplaySettings::on_redshiftIntensitySlider_valueChanged(int value) {\n    d->settings.setValue(\"Redshift/intensity\", value);\n}\n\nvoid DisplaySettings::on_arrangeButton_clicked() {\n    StateManager::statusCenterManager()->hide();\n\n    ArrangeController* controller = new ArrangeController();\n    connect(controller, &ArrangeController::done, controller, &ArrangeController::deleteLater);\n    controller->begin();\n}\n\nvoid DisplaySettings::on_dpi100Button_toggled(bool checked) {\n    if (checked) {\n        d->settings.setValue(\"Display/dpi\", 96);\n        StateManager::statusCenterManager()->requestLogout();\n    }\n}\n\nvoid DisplaySettings::on_dpi125Button_toggled(bool checked) {\n    if (checked) {\n        d->settings.setValue(\"Display/dpi\", 120);\n        StateManager::statusCenterManager()->requestLogout();\n    }\n}\n\nvoid DisplaySettings::on_dpi150Button_toggled(bool checked) {\n    if (checked) {\n        d->settings.setValue(\"Display/dpi\", 144);\n        StateManager::statusCenterManager()->requestLogout();\n    }\n}\n\nvoid DisplaySettings::on_dpi200Button_toggled(bool checked) {\n    if (checked) {\n        d->settings.setValue(\"Display/dpi\", 192);\n        StateManager::statusCenterManager()->requestLogout();\n    }\n}\n\n\nvoid DisplaySettings::changeEvent(QEvent* event) {\n    if (event->type() == QEvent::LanguageChange) {\n        ui->retranslateUi(this);\n        emit displayNameChanged();\n    }\n}\n"
  },
  {
    "path": "plugins/DisplayPlugin/settings/displaysettings.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef DISPLAYSETTINGS_H\n#define DISPLAYSETTINGS_H\n\n#include <QWidget>\n#include <statuscenterpane.h>\n\nnamespace Ui {\n    class DisplaySettings;\n}\n\nstruct DisplaySettingsPrivate;\nclass DisplaySettings : public StatusCenterPane {\n        Q_OBJECT\n\n    public:\n        explicit DisplaySettings();\n        ~DisplaySettings();\n\n    private:\n        Ui::DisplaySettings* ui;\n        DisplaySettingsPrivate* d;\n\n        void updateRedshiftSettings();\n        void updateDpiSettings();\n\n        // StatusCenterPane interface\n    public:\n        QString name();\n        QString displayName();\n        QIcon icon();\n        QWidget* leftPane();\n\n    private slots:\n        void on_titleLabel_backButtonClicked();\n        void on_scheduleRedshiftSwitch_toggled(bool checked);\n        void on_followSunlightSwitch_toggled(bool checked);\n        void on_redshiftStartTime_userTimeChanged(const QTime& time);\n        void on_redshiftEndTime_userTimeChanged(const QTime& time);\n        void on_redshiftIntensitySlider_valueChanged(int value);\n        void on_arrangeButton_clicked();\n        void on_dpi100Button_toggled(bool checked);\n        void on_dpi125Button_toggled(bool checked);\n        void on_dpi150Button_toggled(bool checked);\n        void on_dpi200Button_toggled(bool checked);\n\n        // QWidget interface\n    protected:\n        void changeEvent(QEvent* event);\n};\n\n#endif // DISPLAYSETTINGS_H\n"
  },
  {
    "path": "plugins/DisplayPlugin/settings/displaysettings.ui",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ui version=\"4.0\">\n <class>DisplaySettings</class>\n <widget class=\"QWidget\" name=\"DisplaySettings\">\n  <property name=\"geometry\">\n   <rect>\n    <x>0</x>\n    <y>0</y>\n    <width>500</width>\n    <height>375</height>\n   </rect>\n  </property>\n  <property name=\"windowTitle\">\n   <string notr=\"true\">Form</string>\n  </property>\n  <layout class=\"QVBoxLayout\" name=\"verticalLayout\">\n   <property name=\"spacing\">\n    <number>0</number>\n   </property>\n   <property name=\"leftMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"topMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"rightMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"bottomMargin\">\n    <number>0</number>\n   </property>\n   <item>\n    <widget class=\"tTitleLabel\" name=\"titleLabel\">\n     <property name=\"text\">\n      <string>Displays</string>\n     </property>\n    </widget>\n   </item>\n   <item>\n    <widget class=\"QScrollArea\" name=\"scrollArea\">\n     <property name=\"frameShape\">\n      <enum>QFrame::NoFrame</enum>\n     </property>\n     <property name=\"widgetResizable\">\n      <bool>true</bool>\n     </property>\n     <widget class=\"QWidget\" name=\"scrollAreaWidgetContents\">\n      <property name=\"geometry\">\n       <rect>\n        <x>0</x>\n        <y>0</y>\n        <width>486</width>\n        <height>570</height>\n       </rect>\n      </property>\n      <layout class=\"QVBoxLayout\" name=\"verticalLayout_2\">\n       <property name=\"spacing\">\n        <number>0</number>\n       </property>\n       <property name=\"leftMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"topMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"rightMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"bottomMargin\">\n        <number>0</number>\n       </property>\n       <item alignment=\"Qt::AlignHCenter\">\n        <widget class=\"QWidget\" name=\"arrangeWidget\" native=\"true\">\n         <layout class=\"QVBoxLayout\" name=\"verticalLayout_3\">\n          <item>\n           <widget class=\"QLabel\" name=\"label_2\">\n            <property name=\"font\">\n             <font>\n              <weight>75</weight>\n              <bold>true</bold>\n             </font>\n            </property>\n            <property name=\"text\">\n             <string>SCREENS</string>\n            </property>\n           </widget>\n          </item>\n          <item>\n           <widget class=\"QLabel\" name=\"label_3\">\n            <property name=\"text\">\n             <string>Change the resolution of your display and arrange your displays</string>\n            </property>\n           </widget>\n          </item>\n         </layout>\n        </widget>\n       </item>\n       <item alignment=\"Qt::AlignHCenter\">\n        <widget class=\"QPushButton\" name=\"arrangeButton\">\n         <property name=\"text\">\n          <string>Arrange and Resize Displays</string>\n         </property>\n        </widget>\n       </item>\n       <item>\n        <spacer name=\"verticalSpacer_2\">\n         <property name=\"orientation\">\n          <enum>Qt::Vertical</enum>\n         </property>\n         <property name=\"sizeType\">\n          <enum>QSizePolicy::Fixed</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>20</width>\n           <height>9</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n       <item>\n        <widget class=\"Line\" name=\"line_2\">\n         <property name=\"maximumSize\">\n          <size>\n           <width>16777215</width>\n           <height>1</height>\n          </size>\n         </property>\n         <property name=\"orientation\">\n          <enum>Qt::Horizontal</enum>\n         </property>\n        </widget>\n       </item>\n       <item alignment=\"Qt::AlignHCenter\">\n        <widget class=\"QWidget\" name=\"scalingWidget\" native=\"true\">\n         <layout class=\"QVBoxLayout\" name=\"verticalLayout_4\">\n          <item>\n           <widget class=\"QLabel\" name=\"label_11\">\n            <property name=\"font\">\n             <font>\n              <weight>75</weight>\n              <bold>true</bold>\n             </font>\n            </property>\n            <property name=\"text\">\n             <string>SCALING</string>\n            </property>\n           </widget>\n          </item>\n          <item>\n           <widget class=\"QLabel\" name=\"label_12\">\n            <property name=\"text\">\n             <string>If items on the screen are too small, you can scale them up to make them easier to see.</string>\n            </property>\n            <property name=\"wordWrap\">\n             <bool>true</bool>\n            </property>\n           </widget>\n          </item>\n          <item>\n           <widget class=\"QRadioButton\" name=\"dpi100Button\">\n            <property name=\"text\">\n             <string>100% (96 DPI)</string>\n            </property>\n           </widget>\n          </item>\n          <item>\n           <widget class=\"QRadioButton\" name=\"dpi125Button\">\n            <property name=\"text\">\n             <string>125% (120 DPI)</string>\n            </property>\n           </widget>\n          </item>\n          <item>\n           <widget class=\"QRadioButton\" name=\"dpi150Button\">\n            <property name=\"text\">\n             <string>150% (144 DPI)</string>\n            </property>\n           </widget>\n          </item>\n          <item>\n           <widget class=\"QRadioButton\" name=\"dpi200Button\">\n            <property name=\"text\">\n             <string>200% (192 DPI)</string>\n            </property>\n           </widget>\n          </item>\n         </layout>\n        </widget>\n       </item>\n       <item>\n        <widget class=\"Line\" name=\"line\">\n         <property name=\"maximumSize\">\n          <size>\n           <width>16777215</width>\n           <height>1</height>\n          </size>\n         </property>\n         <property name=\"orientation\">\n          <enum>Qt::Horizontal</enum>\n         </property>\n        </widget>\n       </item>\n       <item alignment=\"Qt::AlignHCenter\">\n        <widget class=\"QWidget\" name=\"redshiftWidget\" native=\"true\">\n         <layout class=\"QGridLayout\" name=\"gridLayout\">\n          <item row=\"2\" column=\"0\">\n           <widget class=\"QLabel\" name=\"label\">\n            <property name=\"sizePolicy\">\n             <sizepolicy hsizetype=\"Expanding\" vsizetype=\"Preferred\">\n              <horstretch>0</horstretch>\n              <verstretch>0</verstretch>\n             </sizepolicy>\n            </property>\n            <property name=\"text\">\n             <string>Schedule Redshift</string>\n            </property>\n           </widget>\n          </item>\n          <item row=\"0\" column=\"0\" colspan=\"2\">\n           <widget class=\"QLabel\" name=\"label_4\">\n            <property name=\"font\">\n             <font>\n              <weight>75</weight>\n              <bold>true</bold>\n             </font>\n            </property>\n            <property name=\"text\">\n             <string>REDSHIFT</string>\n            </property>\n           </widget>\n          </item>\n          <item row=\"1\" column=\"0\" colspan=\"2\">\n           <widget class=\"QLabel\" name=\"label_5\">\n            <property name=\"text\">\n             <string>Redshift blocks blue light so that you can sleep better at night</string>\n            </property>\n           </widget>\n          </item>\n          <item row=\"2\" column=\"1\">\n           <widget class=\"tSwitch\" name=\"scheduleRedshiftSwitch\">\n            <property name=\"text\">\n             <string notr=\"true\">scheduleRedshiftSwitch</string>\n            </property>\n           </widget>\n          </item>\n          <item row=\"4\" column=\"0\" colspan=\"2\">\n           <layout class=\"QHBoxLayout\" name=\"horizontalLayout\">\n            <item>\n             <widget class=\"QLabel\" name=\"label_8\">\n              <property name=\"text\">\n               <string>Intensity</string>\n              </property>\n             </widget>\n            </item>\n            <item>\n             <widget class=\"QSlider\" name=\"redshiftIntensitySlider\">\n              <property name=\"minimum\">\n               <number>1000</number>\n              </property>\n              <property name=\"maximum\">\n               <number>6500</number>\n              </property>\n              <property name=\"orientation\">\n               <enum>Qt::Horizontal</enum>\n              </property>\n             </widget>\n            </item>\n           </layout>\n          </item>\n          <item row=\"3\" column=\"0\" colspan=\"2\">\n           <widget class=\"tConditionalWidget\" name=\"scheduleRedshiftConditionalWidget\" native=\"true\">\n            <layout class=\"QGridLayout\" name=\"gridLayout_3\">\n             <property name=\"leftMargin\">\n              <number>0</number>\n             </property>\n             <property name=\"topMargin\">\n              <number>0</number>\n             </property>\n             <property name=\"rightMargin\">\n              <number>0</number>\n             </property>\n             <property name=\"bottomMargin\">\n              <number>0</number>\n             </property>\n             <item row=\"0\" column=\"1\">\n              <widget class=\"tSwitch\" name=\"followSunlightSwitch\">\n               <property name=\"text\">\n                <string notr=\"true\">followSunlightSwitch</string>\n               </property>\n              </widget>\n             </item>\n             <item row=\"0\" column=\"0\">\n              <widget class=\"QLabel\" name=\"label_9\">\n               <property name=\"sizePolicy\">\n                <sizepolicy hsizetype=\"Expanding\" vsizetype=\"Preferred\">\n                 <horstretch>0</horstretch>\n                 <verstretch>0</verstretch>\n                </sizepolicy>\n               </property>\n               <property name=\"text\">\n                <string>Follow Sunlight Cycle</string>\n               </property>\n              </widget>\n             </item>\n             <item row=\"2\" column=\"0\" colspan=\"2\">\n              <widget class=\"tConditionalWidget\" name=\"followSunlightConditionalWidget\" native=\"true\">\n               <layout class=\"QGridLayout\" name=\"gridLayout_2\">\n                <property name=\"leftMargin\">\n                 <number>0</number>\n                </property>\n                <property name=\"topMargin\">\n                 <number>0</number>\n                </property>\n                <property name=\"rightMargin\">\n                 <number>0</number>\n                </property>\n                <property name=\"bottomMargin\">\n                 <number>0</number>\n                </property>\n                <item row=\"0\" column=\"0\">\n                 <widget class=\"QLabel\" name=\"label_6\">\n                  <property name=\"sizePolicy\">\n                   <sizepolicy hsizetype=\"Expanding\" vsizetype=\"Preferred\">\n                    <horstretch>0</horstretch>\n                    <verstretch>0</verstretch>\n                   </sizepolicy>\n                  </property>\n                  <property name=\"text\">\n                   <string>Start at</string>\n                  </property>\n                 </widget>\n                </item>\n                <item row=\"1\" column=\"0\">\n                 <widget class=\"QLabel\" name=\"label_7\">\n                  <property name=\"text\">\n                   <string>End at</string>\n                  </property>\n                 </widget>\n                </item>\n                <item row=\"0\" column=\"1\">\n                 <widget class=\"QTimeEdit\" name=\"redshiftStartTime\"/>\n                </item>\n                <item row=\"1\" column=\"1\">\n                 <widget class=\"QTimeEdit\" name=\"redshiftEndTime\"/>\n                </item>\n               </layout>\n              </widget>\n             </item>\n             <item row=\"1\" column=\"0\" colspan=\"2\">\n              <widget class=\"QLabel\" name=\"label_10\">\n               <property name=\"enabled\">\n                <bool>false</bool>\n               </property>\n               <property name=\"text\">\n                <string>Your physical location will be sent to MET Norway to determine sunrise and sunset times.</string>\n               </property>\n               <property name=\"wordWrap\">\n                <bool>true</bool>\n               </property>\n              </widget>\n             </item>\n            </layout>\n           </widget>\n          </item>\n         </layout>\n        </widget>\n       </item>\n       <item>\n        <spacer name=\"verticalSpacer\">\n         <property name=\"orientation\">\n          <enum>Qt::Vertical</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>20</width>\n           <height>40</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n      </layout>\n     </widget>\n    </widget>\n   </item>\n  </layout>\n </widget>\n <customwidgets>\n  <customwidget>\n   <class>tTitleLabel</class>\n   <extends>QLabel</extends>\n   <header location=\"global\">ttitlelabel.h</header>\n   <slots>\n    <signal>backButtonClicked()</signal>\n   </slots>\n  </customwidget>\n  <customwidget>\n   <class>tSwitch</class>\n   <extends>QPushButton</extends>\n   <header location=\"global\">tswitch.h</header>\n  </customwidget>\n  <customwidget>\n   <class>tConditionalWidget</class>\n   <extends>QWidget</extends>\n   <header location=\"global\">tconditionalwidget.h</header>\n   <container>1</container>\n  </customwidget>\n </customwidgets>\n <tabstops>\n  <tabstop>scrollArea</tabstop>\n  <tabstop>scheduleRedshiftSwitch</tabstop>\n  <tabstop>followSunlightSwitch</tabstop>\n  <tabstop>redshiftStartTime</tabstop>\n  <tabstop>redshiftEndTime</tabstop>\n  <tabstop>redshiftIntensitySlider</tabstop>\n </tabstops>\n <resources/>\n <connections/>\n</ui>\n"
  },
  {
    "path": "plugins/DisplayPlugin/thedesk-display.conf",
    "content": "[Redshift]\nscheduleRedshift=false\nfollowSunlightCycle=false\nstartTime=61200000\nendTime=21600000\nintensity=4000\n"
  },
  {
    "path": "plugins/DisplayPlugin/translations/ar_SA.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"ar_SA\" sourcelanguage=\"en_US\">\n<context>\n    <name>ArrangeWidget</name>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"164\"/>\n        <source>DISPLAY PROPERTIES</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"100\"/>\n        <source>Refresh Rate</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"90\"/>\n        <source>Resolution</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"141\"/>\n        <source>Primary Display</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"110\"/>\n        <source>Orientation</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"118\"/>\n        <source>Landscape</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"123\"/>\n        <source>Portrait</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"128\"/>\n        <source>Upside Down</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"133\"/>\n        <source>Portrait (Upside Down)</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"177\"/>\n        <source>Enable Display</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"194\"/>\n        <source>Apply Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.cpp\" line=\"116\"/>\n        <source>%1 hz</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>DisplaySettings</name>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"35\"/>\n        <location filename=\"../settings/displaysettings.cpp\" line=\"102\"/>\n        <source>Displays</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"84\"/>\n        <source>SCREENS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"91\"/>\n        <source>Change the resolution of your display and arrange your displays</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"101\"/>\n        <source>Arrange and Resize Displays</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"146\"/>\n        <source>SCALING</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"153\"/>\n        <source>If items on the screen are too small, you can scale them up to make them easier to see.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"163\"/>\n        <source>100% (96 DPI)</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"170\"/>\n        <source>125% (120 DPI)</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"177\"/>\n        <source>150% (144 DPI)</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"184\"/>\n        <source>200% (192 DPI)</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"216\"/>\n        <source>Schedule Redshift</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"229\"/>\n        <source>REDSHIFT</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"236\"/>\n        <source>Redshift blocks blue light so that you can sleep better at night</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"252\"/>\n        <source>Intensity</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"302\"/>\n        <source>Follow Sunlight Cycle</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"330\"/>\n        <source>Start at</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"337\"/>\n        <source>End at</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"356\"/>\n        <source>Your physical location will be sent to MET Norway to determine sunrise and sunset times.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>RedshiftDaemon</name>\n    <message>\n        <location filename=\"../redshift/redshiftdaemon.cpp\" line=\"87\"/>\n        <source>Redshift Active</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../redshift/redshiftdaemon.cpp\" line=\"90\"/>\n        <source>Disable Redshift until tomorrow</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../redshift/redshiftdaemon.cpp\" line=\"93\"/>\n        <source>Display Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/DisplayPlugin/translations/au_AU.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"au_AU\" sourcelanguage=\"en_US\">\n<context>\n    <name>ArrangeWidget</name>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"164\"/>\n        <source>DISPLAY PROPERTIES</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"100\"/>\n        <source>Refresh Rate</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"90\"/>\n        <source>Resolution</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"141\"/>\n        <source>Primary Display</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"110\"/>\n        <source>Orientation</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"118\"/>\n        <source>Landscape</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"123\"/>\n        <source>Portrait</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"128\"/>\n        <source>Upside Down</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"133\"/>\n        <source>Portrait (Upside Down)</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"177\"/>\n        <source>Enable Display</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"194\"/>\n        <source>Apply Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.cpp\" line=\"116\"/>\n        <source>%1 hz</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>DisplaySettings</name>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"35\"/>\n        <location filename=\"../settings/displaysettings.cpp\" line=\"102\"/>\n        <source>Displays</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"84\"/>\n        <source>SCREENS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"91\"/>\n        <source>Change the resolution of your display and arrange your displays</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"101\"/>\n        <source>Arrange and Resize Displays</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"146\"/>\n        <source>SCALING</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"153\"/>\n        <source>If items on the screen are too small, you can scale them up to make them easier to see.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"163\"/>\n        <source>100% (96 DPI)</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"170\"/>\n        <source>125% (120 DPI)</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"177\"/>\n        <source>150% (144 DPI)</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"184\"/>\n        <source>200% (192 DPI)</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"216\"/>\n        <source>Schedule Redshift</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"229\"/>\n        <source>REDSHIFT</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"236\"/>\n        <source>Redshift blocks blue light so that you can sleep better at night</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"252\"/>\n        <source>Intensity</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"302\"/>\n        <source>Follow Sunlight Cycle</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"330\"/>\n        <source>Start at</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"337\"/>\n        <source>End at</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"356\"/>\n        <source>Your physical location will be sent to MET Norway to determine sunrise and sunset times.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>RedshiftDaemon</name>\n    <message>\n        <location filename=\"../redshift/redshiftdaemon.cpp\" line=\"87\"/>\n        <source>Redshift Active</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../redshift/redshiftdaemon.cpp\" line=\"90\"/>\n        <source>Disable Redshift until tomorrow</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../redshift/redshiftdaemon.cpp\" line=\"93\"/>\n        <source>Display Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/DisplayPlugin/translations/cy.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"cy\" sourcelanguage=\"en_US\">\n<context>\n    <name>ArrangeWidget</name>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"164\"/>\n        <source>DISPLAY PROPERTIES</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"100\"/>\n        <source>Refresh Rate</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"90\"/>\n        <source>Resolution</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"141\"/>\n        <source>Primary Display</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"110\"/>\n        <source>Orientation</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"118\"/>\n        <source>Landscape</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"123\"/>\n        <source>Portrait</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"128\"/>\n        <source>Upside Down</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"133\"/>\n        <source>Portrait (Upside Down)</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"177\"/>\n        <source>Enable Display</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"194\"/>\n        <source>Apply Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.cpp\" line=\"116\"/>\n        <source>%1 hz</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>DisplaySettings</name>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"35\"/>\n        <location filename=\"../settings/displaysettings.cpp\" line=\"102\"/>\n        <source>Displays</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"84\"/>\n        <source>SCREENS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"91\"/>\n        <source>Change the resolution of your display and arrange your displays</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"101\"/>\n        <source>Arrange and Resize Displays</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"146\"/>\n        <source>SCALING</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"153\"/>\n        <source>If items on the screen are too small, you can scale them up to make them easier to see.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"163\"/>\n        <source>100% (96 DPI)</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"170\"/>\n        <source>125% (120 DPI)</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"177\"/>\n        <source>150% (144 DPI)</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"184\"/>\n        <source>200% (192 DPI)</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"216\"/>\n        <source>Schedule Redshift</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"229\"/>\n        <source>REDSHIFT</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"236\"/>\n        <source>Redshift blocks blue light so that you can sleep better at night</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"252\"/>\n        <source>Intensity</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"302\"/>\n        <source>Follow Sunlight Cycle</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"330\"/>\n        <source>Start at</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"337\"/>\n        <source>End at</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"356\"/>\n        <source>Your physical location will be sent to MET Norway to determine sunrise and sunset times.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>RedshiftDaemon</name>\n    <message>\n        <location filename=\"../redshift/redshiftdaemon.cpp\" line=\"87\"/>\n        <source>Redshift Active</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../redshift/redshiftdaemon.cpp\" line=\"90\"/>\n        <source>Disable Redshift until tomorrow</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../redshift/redshiftdaemon.cpp\" line=\"93\"/>\n        <source>Display Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/DisplayPlugin/translations/da.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"da\" sourcelanguage=\"en_US\">\n<context>\n    <name>ArrangeWidget</name>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"164\"/>\n        <source>DISPLAY PROPERTIES</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"100\"/>\n        <source>Refresh Rate</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"90\"/>\n        <source>Resolution</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"141\"/>\n        <source>Primary Display</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"110\"/>\n        <source>Orientation</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"118\"/>\n        <source>Landscape</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"123\"/>\n        <source>Portrait</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"128\"/>\n        <source>Upside Down</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"133\"/>\n        <source>Portrait (Upside Down)</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"177\"/>\n        <source>Enable Display</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"194\"/>\n        <source>Apply Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.cpp\" line=\"116\"/>\n        <source>%1 hz</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>DisplaySettings</name>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"35\"/>\n        <location filename=\"../settings/displaysettings.cpp\" line=\"102\"/>\n        <source>Displays</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"84\"/>\n        <source>SCREENS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"91\"/>\n        <source>Change the resolution of your display and arrange your displays</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"101\"/>\n        <source>Arrange and Resize Displays</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"146\"/>\n        <source>SCALING</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"153\"/>\n        <source>If items on the screen are too small, you can scale them up to make them easier to see.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"163\"/>\n        <source>100% (96 DPI)</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"170\"/>\n        <source>125% (120 DPI)</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"177\"/>\n        <source>150% (144 DPI)</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"184\"/>\n        <source>200% (192 DPI)</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"216\"/>\n        <source>Schedule Redshift</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"229\"/>\n        <source>REDSHIFT</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"236\"/>\n        <source>Redshift blocks blue light so that you can sleep better at night</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"252\"/>\n        <source>Intensity</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"302\"/>\n        <source>Follow Sunlight Cycle</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"330\"/>\n        <source>Start at</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"337\"/>\n        <source>End at</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"356\"/>\n        <source>Your physical location will be sent to MET Norway to determine sunrise and sunset times.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>RedshiftDaemon</name>\n    <message>\n        <location filename=\"../redshift/redshiftdaemon.cpp\" line=\"87\"/>\n        <source>Redshift Active</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../redshift/redshiftdaemon.cpp\" line=\"90\"/>\n        <source>Disable Redshift until tomorrow</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../redshift/redshiftdaemon.cpp\" line=\"93\"/>\n        <source>Display Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/DisplayPlugin/translations/de.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"de\" sourcelanguage=\"en_US\">\n<context>\n    <name>ArrangeWidget</name>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"164\"/>\n        <source>DISPLAY PROPERTIES</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"100\"/>\n        <source>Refresh Rate</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"90\"/>\n        <source>Resolution</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"141\"/>\n        <source>Primary Display</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"110\"/>\n        <source>Orientation</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"118\"/>\n        <source>Landscape</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"123\"/>\n        <source>Portrait</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"128\"/>\n        <source>Upside Down</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"133\"/>\n        <source>Portrait (Upside Down)</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"177\"/>\n        <source>Enable Display</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"194\"/>\n        <source>Apply Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.cpp\" line=\"116\"/>\n        <source>%1 hz</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>DisplaySettings</name>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"35\"/>\n        <location filename=\"../settings/displaysettings.cpp\" line=\"102\"/>\n        <source>Displays</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"84\"/>\n        <source>SCREENS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"91\"/>\n        <source>Change the resolution of your display and arrange your displays</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"101\"/>\n        <source>Arrange and Resize Displays</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"146\"/>\n        <source>SCALING</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"153\"/>\n        <source>If items on the screen are too small, you can scale them up to make them easier to see.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"163\"/>\n        <source>100% (96 DPI)</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"170\"/>\n        <source>125% (120 DPI)</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"177\"/>\n        <source>150% (144 DPI)</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"184\"/>\n        <source>200% (192 DPI)</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"216\"/>\n        <source>Schedule Redshift</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"229\"/>\n        <source>REDSHIFT</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"236\"/>\n        <source>Redshift blocks blue light so that you can sleep better at night</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"252\"/>\n        <source>Intensity</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"302\"/>\n        <source>Follow Sunlight Cycle</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"330\"/>\n        <source>Start at</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"337\"/>\n        <source>End at</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"356\"/>\n        <source>Your physical location will be sent to MET Norway to determine sunrise and sunset times.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>RedshiftDaemon</name>\n    <message>\n        <location filename=\"../redshift/redshiftdaemon.cpp\" line=\"87\"/>\n        <source>Redshift Active</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../redshift/redshiftdaemon.cpp\" line=\"90\"/>\n        <source>Disable Redshift until tomorrow</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../redshift/redshiftdaemon.cpp\" line=\"93\"/>\n        <source>Display Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/DisplayPlugin/translations/en_GB.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"en_GB\" sourcelanguage=\"en_US\">\n<context>\n    <name>ArrangeWidget</name>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"164\"/>\n        <source>DISPLAY PROPERTIES</source>\n        <translation>DISPLAY PROPERTIES</translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"90\"/>\n        <source>Resolution</source>\n        <translation>Resolution</translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"100\"/>\n        <source>Refresh Rate</source>\n        <translation>Refresh Rate</translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.cpp\" line=\"116\"/>\n        <source>%1 hz</source>\n        <translation>%1 hz</translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"194\"/>\n        <source>Apply Settings</source>\n        <translation>Apply Settings</translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"141\"/>\n        <source>Primary Display</source>\n        <translation>Primary Display</translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"110\"/>\n        <source>Orientation</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"118\"/>\n        <source>Landscape</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"123\"/>\n        <source>Portrait</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"128\"/>\n        <source>Upside Down</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"133\"/>\n        <source>Portrait (Upside Down)</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"177\"/>\n        <source>Enable Display</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>DisplaySettings</name>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"35\"/>\n        <location filename=\"../settings/displaysettings.cpp\" line=\"102\"/>\n        <source>Displays</source>\n        <translation>Displays</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"229\"/>\n        <source>REDSHIFT</source>\n        <translation>REDSHIFT</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"236\"/>\n        <source>Redshift blocks blue light so that you can sleep better at night</source>\n        <translation>Redshift blocks blue light so that you can sleep better at night</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"216\"/>\n        <source>Schedule Redshift</source>\n        <translation>Schedule Redshift</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"252\"/>\n        <source>Intensity</source>\n        <translation>Intensity</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"302\"/>\n        <source>Follow Sunlight Cycle</source>\n        <translation>Follow Sunlight Cycle</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"330\"/>\n        <source>Start at</source>\n        <translation>Start at</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"337\"/>\n        <source>End at</source>\n        <translation>End at</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"84\"/>\n        <source>SCREENS</source>\n        <translation>SCREENS</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"91\"/>\n        <source>Change the resolution of your display and arrange your displays</source>\n        <translation>Change the resolution of your display and arrange your displays</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"101\"/>\n        <source>Arrange and Resize Displays</source>\n        <translation>Arrange and Resize Displays</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"356\"/>\n        <source>Your physical location will be sent to MET Norway to determine sunrise and sunset times.</source>\n        <translation>Your physical location will be sent to MET Norway to determine sunrise and sunset times.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"146\"/>\n        <source>SCALING</source>\n        <translation>SCALING</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"153\"/>\n        <source>If items on the screen are too small, you can scale them up to make them easier to see.</source>\n        <translation>If items on the screen are too small, you can scale them up to make them easier to see.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"163\"/>\n        <source>100% (96 DPI)</source>\n        <translation>100% (96 DPI)</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"170\"/>\n        <source>125% (120 DPI)</source>\n        <translation>125% (120 DPI)</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"177\"/>\n        <source>150% (144 DPI)</source>\n        <translation>150% (144 DPI)</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"184\"/>\n        <source>200% (192 DPI)</source>\n        <translation>200% (192 DPI)</translation>\n    </message>\n</context>\n<context>\n    <name>RedshiftDaemon</name>\n    <message>\n        <location filename=\"../redshift/redshiftdaemon.cpp\" line=\"87\"/>\n        <source>Redshift Active</source>\n        <translation>Redshift Active</translation>\n    </message>\n    <message>\n        <location filename=\"../redshift/redshiftdaemon.cpp\" line=\"90\"/>\n        <source>Disable Redshift until tomorrow</source>\n        <translation>Disable Redshift until tomorrow</translation>\n    </message>\n    <message>\n        <location filename=\"../redshift/redshiftdaemon.cpp\" line=\"93\"/>\n        <source>Display Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/DisplayPlugin/translations/en_US.qm",
    "content": "<d\u0018!\u001c`"
  },
  {
    "path": "plugins/DisplayPlugin/translations/en_US.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" sourcelanguage=\"en_US\">\n<context>\n    <name>ArrangeWidget</name>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"164\"/>\n        <source>DISPLAY PROPERTIES</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"100\"/>\n        <source>Refresh Rate</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"90\"/>\n        <source>Resolution</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"141\"/>\n        <source>Primary Display</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"110\"/>\n        <source>Orientation</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"118\"/>\n        <source>Landscape</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"123\"/>\n        <source>Portrait</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"128\"/>\n        <source>Upside Down</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"133\"/>\n        <source>Portrait (Upside Down)</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"177\"/>\n        <source>Enable Display</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"194\"/>\n        <source>Apply Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.cpp\" line=\"116\"/>\n        <source>%1 hz</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>DisplaySettings</name>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"35\"/>\n        <location filename=\"../settings/displaysettings.cpp\" line=\"102\"/>\n        <source>Displays</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"84\"/>\n        <source>SCREENS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"91\"/>\n        <source>Change the resolution of your display and arrange your displays</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"101\"/>\n        <source>Arrange and Resize Displays</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"146\"/>\n        <source>SCALING</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"153\"/>\n        <source>If items on the screen are too small, you can scale them up to make them easier to see.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"163\"/>\n        <source>100% (96 DPI)</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"170\"/>\n        <source>125% (120 DPI)</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"177\"/>\n        <source>150% (144 DPI)</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"184\"/>\n        <source>200% (192 DPI)</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"216\"/>\n        <source>Schedule Redshift</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"229\"/>\n        <source>REDSHIFT</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"236\"/>\n        <source>Redshift blocks blue light so that you can sleep better at night</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"252\"/>\n        <source>Intensity</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"302\"/>\n        <source>Follow Sunlight Cycle</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"330\"/>\n        <source>Start at</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"337\"/>\n        <source>End at</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"356\"/>\n        <source>Your physical location will be sent to MET Norway to determine sunrise and sunset times.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>RedshiftDaemon</name>\n    <message>\n        <location filename=\"../redshift/redshiftdaemon.cpp\" line=\"87\"/>\n        <source>Redshift Active</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../redshift/redshiftdaemon.cpp\" line=\"90\"/>\n        <source>Disable Redshift until tomorrow</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../redshift/redshiftdaemon.cpp\" line=\"93\"/>\n        <source>Display Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/DisplayPlugin/translations/es.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"es\" sourcelanguage=\"en_US\">\n<context>\n    <name>ArrangeWidget</name>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"164\"/>\n        <source>DISPLAY PROPERTIES</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"100\"/>\n        <source>Refresh Rate</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"90\"/>\n        <source>Resolution</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"141\"/>\n        <source>Primary Display</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"110\"/>\n        <source>Orientation</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"118\"/>\n        <source>Landscape</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"123\"/>\n        <source>Portrait</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"128\"/>\n        <source>Upside Down</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"133\"/>\n        <source>Portrait (Upside Down)</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"177\"/>\n        <source>Enable Display</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"194\"/>\n        <source>Apply Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.cpp\" line=\"116\"/>\n        <source>%1 hz</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>DisplaySettings</name>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"35\"/>\n        <location filename=\"../settings/displaysettings.cpp\" line=\"102\"/>\n        <source>Displays</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"84\"/>\n        <source>SCREENS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"91\"/>\n        <source>Change the resolution of your display and arrange your displays</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"101\"/>\n        <source>Arrange and Resize Displays</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"146\"/>\n        <source>SCALING</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"153\"/>\n        <source>If items on the screen are too small, you can scale them up to make them easier to see.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"163\"/>\n        <source>100% (96 DPI)</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"170\"/>\n        <source>125% (120 DPI)</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"177\"/>\n        <source>150% (144 DPI)</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"184\"/>\n        <source>200% (192 DPI)</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"216\"/>\n        <source>Schedule Redshift</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"229\"/>\n        <source>REDSHIFT</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"236\"/>\n        <source>Redshift blocks blue light so that you can sleep better at night</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"252\"/>\n        <source>Intensity</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"302\"/>\n        <source>Follow Sunlight Cycle</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"330\"/>\n        <source>Start at</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"337\"/>\n        <source>End at</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"356\"/>\n        <source>Your physical location will be sent to MET Norway to determine sunrise and sunset times.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>RedshiftDaemon</name>\n    <message>\n        <location filename=\"../redshift/redshiftdaemon.cpp\" line=\"87\"/>\n        <source>Redshift Active</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../redshift/redshiftdaemon.cpp\" line=\"90\"/>\n        <source>Disable Redshift until tomorrow</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../redshift/redshiftdaemon.cpp\" line=\"93\"/>\n        <source>Display Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/DisplayPlugin/translations/es_VE.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"es_VE\" sourcelanguage=\"en_US\">\n<context>\n    <name>ArrangeWidget</name>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"164\"/>\n        <source>DISPLAY PROPERTIES</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"100\"/>\n        <source>Refresh Rate</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"90\"/>\n        <source>Resolution</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"141\"/>\n        <source>Primary Display</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"110\"/>\n        <source>Orientation</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"118\"/>\n        <source>Landscape</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"123\"/>\n        <source>Portrait</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"128\"/>\n        <source>Upside Down</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"133\"/>\n        <source>Portrait (Upside Down)</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"177\"/>\n        <source>Enable Display</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"194\"/>\n        <source>Apply Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.cpp\" line=\"116\"/>\n        <source>%1 hz</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>DisplaySettings</name>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"35\"/>\n        <location filename=\"../settings/displaysettings.cpp\" line=\"102\"/>\n        <source>Displays</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"84\"/>\n        <source>SCREENS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"91\"/>\n        <source>Change the resolution of your display and arrange your displays</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"101\"/>\n        <source>Arrange and Resize Displays</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"146\"/>\n        <source>SCALING</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"153\"/>\n        <source>If items on the screen are too small, you can scale them up to make them easier to see.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"163\"/>\n        <source>100% (96 DPI)</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"170\"/>\n        <source>125% (120 DPI)</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"177\"/>\n        <source>150% (144 DPI)</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"184\"/>\n        <source>200% (192 DPI)</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"216\"/>\n        <source>Schedule Redshift</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"229\"/>\n        <source>REDSHIFT</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"236\"/>\n        <source>Redshift blocks blue light so that you can sleep better at night</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"252\"/>\n        <source>Intensity</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"302\"/>\n        <source>Follow Sunlight Cycle</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"330\"/>\n        <source>Start at</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"337\"/>\n        <source>End at</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"356\"/>\n        <source>Your physical location will be sent to MET Norway to determine sunrise and sunset times.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>RedshiftDaemon</name>\n    <message>\n        <location filename=\"../redshift/redshiftdaemon.cpp\" line=\"87\"/>\n        <source>Redshift Active</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../redshift/redshiftdaemon.cpp\" line=\"90\"/>\n        <source>Disable Redshift until tomorrow</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../redshift/redshiftdaemon.cpp\" line=\"93\"/>\n        <source>Display Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/DisplayPlugin/translations/id.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"id\" sourcelanguage=\"en_US\">\n<context>\n    <name>ArrangeWidget</name>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"164\"/>\n        <source>DISPLAY PROPERTIES</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"100\"/>\n        <source>Refresh Rate</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"90\"/>\n        <source>Resolution</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"141\"/>\n        <source>Primary Display</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"110\"/>\n        <source>Orientation</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"118\"/>\n        <source>Landscape</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"123\"/>\n        <source>Portrait</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"128\"/>\n        <source>Upside Down</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"133\"/>\n        <source>Portrait (Upside Down)</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"177\"/>\n        <source>Enable Display</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"194\"/>\n        <source>Apply Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.cpp\" line=\"116\"/>\n        <source>%1 hz</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>DisplaySettings</name>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"35\"/>\n        <location filename=\"../settings/displaysettings.cpp\" line=\"102\"/>\n        <source>Displays</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"84\"/>\n        <source>SCREENS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"91\"/>\n        <source>Change the resolution of your display and arrange your displays</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"101\"/>\n        <source>Arrange and Resize Displays</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"146\"/>\n        <source>SCALING</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"153\"/>\n        <source>If items on the screen are too small, you can scale them up to make them easier to see.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"163\"/>\n        <source>100% (96 DPI)</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"170\"/>\n        <source>125% (120 DPI)</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"177\"/>\n        <source>150% (144 DPI)</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"184\"/>\n        <source>200% (192 DPI)</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"216\"/>\n        <source>Schedule Redshift</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"229\"/>\n        <source>REDSHIFT</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"236\"/>\n        <source>Redshift blocks blue light so that you can sleep better at night</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"252\"/>\n        <source>Intensity</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"302\"/>\n        <source>Follow Sunlight Cycle</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"330\"/>\n        <source>Start at</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"337\"/>\n        <source>End at</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"356\"/>\n        <source>Your physical location will be sent to MET Norway to determine sunrise and sunset times.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>RedshiftDaemon</name>\n    <message>\n        <location filename=\"../redshift/redshiftdaemon.cpp\" line=\"87\"/>\n        <source>Redshift Active</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../redshift/redshiftdaemon.cpp\" line=\"90\"/>\n        <source>Disable Redshift until tomorrow</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../redshift/redshiftdaemon.cpp\" line=\"93\"/>\n        <source>Display Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/DisplayPlugin/translations/nl.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"nl\" sourcelanguage=\"en_US\">\n<context>\n    <name>ArrangeWidget</name>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"164\"/>\n        <source>DISPLAY PROPERTIES</source>\n        <translation>BEELDEIGENSCHAPPEN</translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"100\"/>\n        <source>Refresh Rate</source>\n        <translation>Verversingssnelheid</translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"90\"/>\n        <source>Resolution</source>\n        <translation>Resolutie</translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"141\"/>\n        <source>Primary Display</source>\n        <translation>Primair Beeld</translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"110\"/>\n        <source>Orientation</source>\n        <translation>Oriëntatie</translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"118\"/>\n        <source>Landscape</source>\n        <translation>Landschap</translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"123\"/>\n        <source>Portrait</source>\n        <translation>Portret</translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"128\"/>\n        <source>Upside Down</source>\n        <translation>Ondersteboven</translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"133\"/>\n        <source>Portrait (Upside Down)</source>\n        <translation>Portret (Ondersteboven)</translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"177\"/>\n        <source>Enable Display</source>\n        <translation>Scherm Inschakelen</translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"194\"/>\n        <source>Apply Settings</source>\n        <translation>Instellingen Toepassen</translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.cpp\" line=\"116\"/>\n        <source>%1 hz</source>\n        <translation>%1 Hz</translation>\n    </message>\n</context>\n<context>\n    <name>DisplaySettings</name>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"35\"/>\n        <location filename=\"../settings/displaysettings.cpp\" line=\"102\"/>\n        <source>Displays</source>\n        <translation>Schermen</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"84\"/>\n        <source>SCREENS</source>\n        <translation>SCHERMEN</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"91\"/>\n        <source>Change the resolution of your display and arrange your displays</source>\n        <translation>De resolutie van het beeld aanpassen en je schermen verplaatsen</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"101\"/>\n        <source>Arrange and Resize Displays</source>\n        <translation>Schermen Verplaatsen en van Formaat Wijzigen</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"146\"/>\n        <source>SCALING</source>\n        <translation>SCHALEN</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"153\"/>\n        <source>If items on the screen are too small, you can scale them up to make them easier to see.</source>\n        <translation>Als dingen op het scherm te klein zijn, kun je ze opschalen, zodat ze makkelijker te zien zijn.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"163\"/>\n        <source>100% (96 DPI)</source>\n        <translation>100% (96 DPI)</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"170\"/>\n        <source>125% (120 DPI)</source>\n        <translation>125% (120 DPI)</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"177\"/>\n        <source>150% (144 DPI)</source>\n        <translation>150% (144 DPI)</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"184\"/>\n        <source>200% (192 DPI)</source>\n        <translation>200% (192 DPI)</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"216\"/>\n        <source>Schedule Redshift</source>\n        <translation>Redshift Plannen</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"229\"/>\n        <source>REDSHIFT</source>\n        <translation>REDSHIFT</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"236\"/>\n        <source>Redshift blocks blue light so that you can sleep better at night</source>\n        <translation>Redshift blokkeert blauw licht zodat je &apos;s nachts beter kunt slapen</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"252\"/>\n        <source>Intensity</source>\n        <translation>Intensiteit</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"302\"/>\n        <source>Follow Sunlight Cycle</source>\n        <translation>Zonlichtcyclus Volgen</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"330\"/>\n        <source>Start at</source>\n        <translation>Beginnen Om</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"337\"/>\n        <source>End at</source>\n        <translation>Eindigen Om</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"356\"/>\n        <source>Your physical location will be sent to MET Norway to determine sunrise and sunset times.</source>\n        <translation>Je fysieke locatie zal worden opgestuurd naar MET Norway om de tijden van zonsopkomst en -ondergang te bepalen.</translation>\n    </message>\n</context>\n<context>\n    <name>RedshiftDaemon</name>\n    <message>\n        <location filename=\"../redshift/redshiftdaemon.cpp\" line=\"87\"/>\n        <source>Redshift Active</source>\n        <translation>Redshift Actief</translation>\n    </message>\n    <message>\n        <location filename=\"../redshift/redshiftdaemon.cpp\" line=\"90\"/>\n        <source>Disable Redshift until tomorrow</source>\n        <translation>Redshift uitschakelen tot morgen</translation>\n    </message>\n    <message>\n        <location filename=\"../redshift/redshiftdaemon.cpp\" line=\"93\"/>\n        <source>Display Settings</source>\n        <translation>Beeldinstellingen</translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/DisplayPlugin/translations/pt_BR.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"pt_BR\" sourcelanguage=\"en_US\">\n<context>\n    <name>ArrangeWidget</name>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"164\"/>\n        <source>DISPLAY PROPERTIES</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"100\"/>\n        <source>Refresh Rate</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"90\"/>\n        <source>Resolution</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"141\"/>\n        <source>Primary Display</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"110\"/>\n        <source>Orientation</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"118\"/>\n        <source>Landscape</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"123\"/>\n        <source>Portrait</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"128\"/>\n        <source>Upside Down</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"133\"/>\n        <source>Portrait (Upside Down)</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"177\"/>\n        <source>Enable Display</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"194\"/>\n        <source>Apply Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.cpp\" line=\"116\"/>\n        <source>%1 hz</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>DisplaySettings</name>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"35\"/>\n        <location filename=\"../settings/displaysettings.cpp\" line=\"102\"/>\n        <source>Displays</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"84\"/>\n        <source>SCREENS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"91\"/>\n        <source>Change the resolution of your display and arrange your displays</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"101\"/>\n        <source>Arrange and Resize Displays</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"146\"/>\n        <source>SCALING</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"153\"/>\n        <source>If items on the screen are too small, you can scale them up to make them easier to see.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"163\"/>\n        <source>100% (96 DPI)</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"170\"/>\n        <source>125% (120 DPI)</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"177\"/>\n        <source>150% (144 DPI)</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"184\"/>\n        <source>200% (192 DPI)</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"216\"/>\n        <source>Schedule Redshift</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"229\"/>\n        <source>REDSHIFT</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"236\"/>\n        <source>Redshift blocks blue light so that you can sleep better at night</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"252\"/>\n        <source>Intensity</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"302\"/>\n        <source>Follow Sunlight Cycle</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"330\"/>\n        <source>Start at</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"337\"/>\n        <source>End at</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"356\"/>\n        <source>Your physical location will be sent to MET Norway to determine sunrise and sunset times.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>RedshiftDaemon</name>\n    <message>\n        <location filename=\"../redshift/redshiftdaemon.cpp\" line=\"87\"/>\n        <source>Redshift Active</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../redshift/redshiftdaemon.cpp\" line=\"90\"/>\n        <source>Disable Redshift until tomorrow</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../redshift/redshiftdaemon.cpp\" line=\"93\"/>\n        <source>Display Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/DisplayPlugin/translations/ro_RO.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"ro_RO\" sourcelanguage=\"en_US\">\n<context>\n    <name>ArrangeWidget</name>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"164\"/>\n        <source>DISPLAY PROPERTIES</source>\n        <translation>PROPRIETĂȚILE ECRANULUI</translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"90\"/>\n        <source>Resolution</source>\n        <translation>Rezoluție</translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"100\"/>\n        <source>Refresh Rate</source>\n        <translation>Rată de reîmprospătare</translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.cpp\" line=\"116\"/>\n        <source>%1 hz</source>\n        <translation>%1 hz</translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"194\"/>\n        <source>Apply Settings</source>\n        <translation>Aplică setările</translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"141\"/>\n        <source>Primary Display</source>\n        <translation>Monitor principal</translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"110\"/>\n        <source>Orientation</source>\n        <translation>Orientație</translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"118\"/>\n        <source>Landscape</source>\n        <translation>Peisaj</translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"123\"/>\n        <source>Portrait</source>\n        <translation>Portret</translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"128\"/>\n        <source>Upside Down</source>\n        <translation>Invers</translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"133\"/>\n        <source>Portrait (Upside Down)</source>\n        <translation>Portret(invers)</translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"177\"/>\n        <source>Enable Display</source>\n        <translation>Folosiți ecranul</translation>\n    </message>\n</context>\n<context>\n    <name>DisplaySettings</name>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"35\"/>\n        <location filename=\"../settings/displaysettings.cpp\" line=\"102\"/>\n        <source>Displays</source>\n        <translation>Monitoare</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"229\"/>\n        <source>REDSHIFT</source>\n        <translation>Redshift</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"236\"/>\n        <source>Redshift blocks blue light so that you can sleep better at night</source>\n        <translation>Redshift blochează lumina albastră ca să puteți dormi mai bine noaptea</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"216\"/>\n        <source>Schedule Redshift</source>\n        <translation>Programați Redshift</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"252\"/>\n        <source>Intensity</source>\n        <translation>Intensitate</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"302\"/>\n        <source>Follow Sunlight Cycle</source>\n        <translation>Urmărește ciclul solar</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"330\"/>\n        <source>Start at</source>\n        <translation>Începe la</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"337\"/>\n        <source>End at</source>\n        <translation>Termină la</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"84\"/>\n        <source>SCREENS</source>\n        <translation>ECRANE</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"91\"/>\n        <source>Change the resolution of your display and arrange your displays</source>\n        <translation>Schimbați rezoluția și aranjați monitoarele</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"101\"/>\n        <source>Arrange and Resize Displays</source>\n        <translation>Aranjează și redimensionează monitoarele</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"356\"/>\n        <source>Your physical location will be sent to MET Norway to determine sunrise and sunset times.</source>\n        <translation>Locația dumneavoastră va fi trimisă la MET Norway pentru a determina ora răsăritului și a apusului.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"146\"/>\n        <source>SCALING</source>\n        <translation>SCALARE</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"153\"/>\n        <source>If items on the screen are too small, you can scale them up to make them easier to see.</source>\n        <translation>Dacă lucrurile de pe ecran sunt prea mici, puteți să le măriți pentru a le face mai ușor de văzut.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"163\"/>\n        <source>100% (96 DPI)</source>\n        <translation>100% (96DPI)</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"170\"/>\n        <source>125% (120 DPI)</source>\n        <translation>125% (120 DPI)</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"177\"/>\n        <source>150% (144 DPI)</source>\n        <translation>150% (144 DPI)</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"184\"/>\n        <source>200% (192 DPI)</source>\n        <translation>200% (192 DPI)</translation>\n    </message>\n</context>\n<context>\n    <name>RedshiftDaemon</name>\n    <message>\n        <location filename=\"../redshift/redshiftdaemon.cpp\" line=\"87\"/>\n        <source>Redshift Active</source>\n        <translation>Redshift activ</translation>\n    </message>\n    <message>\n        <location filename=\"../redshift/redshiftdaemon.cpp\" line=\"90\"/>\n        <source>Disable Redshift until tomorrow</source>\n        <translation>Dezactivează Redshift până mâine</translation>\n    </message>\n    <message>\n        <location filename=\"../redshift/redshiftdaemon.cpp\" line=\"93\"/>\n        <source>Display Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/DisplayPlugin/translations/sv.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"sv\" sourcelanguage=\"en_US\">\n<context>\n    <name>ArrangeWidget</name>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"164\"/>\n        <source>DISPLAY PROPERTIES</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"100\"/>\n        <source>Refresh Rate</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"90\"/>\n        <source>Resolution</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"141\"/>\n        <source>Primary Display</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"110\"/>\n        <source>Orientation</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"118\"/>\n        <source>Landscape</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"123\"/>\n        <source>Portrait</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"128\"/>\n        <source>Upside Down</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"133\"/>\n        <source>Portrait (Upside Down)</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"177\"/>\n        <source>Enable Display</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"194\"/>\n        <source>Apply Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.cpp\" line=\"116\"/>\n        <source>%1 hz</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>DisplaySettings</name>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"35\"/>\n        <location filename=\"../settings/displaysettings.cpp\" line=\"102\"/>\n        <source>Displays</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"84\"/>\n        <source>SCREENS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"91\"/>\n        <source>Change the resolution of your display and arrange your displays</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"101\"/>\n        <source>Arrange and Resize Displays</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"146\"/>\n        <source>SCALING</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"153\"/>\n        <source>If items on the screen are too small, you can scale them up to make them easier to see.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"163\"/>\n        <source>100% (96 DPI)</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"170\"/>\n        <source>125% (120 DPI)</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"177\"/>\n        <source>150% (144 DPI)</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"184\"/>\n        <source>200% (192 DPI)</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"216\"/>\n        <source>Schedule Redshift</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"229\"/>\n        <source>REDSHIFT</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"236\"/>\n        <source>Redshift blocks blue light so that you can sleep better at night</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"252\"/>\n        <source>Intensity</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"302\"/>\n        <source>Follow Sunlight Cycle</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"330\"/>\n        <source>Start at</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"337\"/>\n        <source>End at</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"356\"/>\n        <source>Your physical location will be sent to MET Norway to determine sunrise and sunset times.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>RedshiftDaemon</name>\n    <message>\n        <location filename=\"../redshift/redshiftdaemon.cpp\" line=\"87\"/>\n        <source>Redshift Active</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../redshift/redshiftdaemon.cpp\" line=\"90\"/>\n        <source>Disable Redshift until tomorrow</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../redshift/redshiftdaemon.cpp\" line=\"93\"/>\n        <source>Display Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/DisplayPlugin/translations/tr_TR.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"tr_TR\" sourcelanguage=\"en_US\">\n<context>\n    <name>ArrangeWidget</name>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"164\"/>\n        <source>DISPLAY PROPERTIES</source>\n        <translation>GÖRÜNTÜ ÖZELLİKLERİ</translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"90\"/>\n        <source>Resolution</source>\n        <translation>Ekran boyutu</translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"100\"/>\n        <source>Refresh Rate</source>\n        <translation>Yenileme hızı</translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.cpp\" line=\"116\"/>\n        <source>%1 hz</source>\n        <translation>%1 hz</translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"194\"/>\n        <source>Apply Settings</source>\n        <translation>Ayarları uygula</translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"141\"/>\n        <source>Primary Display</source>\n        <translation>Birincil Ekran</translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"110\"/>\n        <source>Orientation</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"118\"/>\n        <source>Landscape</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"123\"/>\n        <source>Portrait</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"128\"/>\n        <source>Upside Down</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"133\"/>\n        <source>Portrait (Upside Down)</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"177\"/>\n        <source>Enable Display</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>DisplaySettings</name>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"35\"/>\n        <location filename=\"../settings/displaysettings.cpp\" line=\"102\"/>\n        <source>Displays</source>\n        <translation>Görüntüler</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"229\"/>\n        <source>REDSHIFT</source>\n        <translation>KIRMIZIÜSTKARAKTER</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"236\"/>\n        <source>Redshift blocks blue light so that you can sleep better at night</source>\n        <translation>Kirmizi Üst karakter geceleri daha iyi uyuyabilmeniz için mavi ışığı engeller</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"216\"/>\n        <source>Schedule Redshift</source>\n        <translation>Kirmizi Üstkarakter&apos;i planlayın</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"252\"/>\n        <source>Intensity</source>\n        <translation>Yoğunluk</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"302\"/>\n        <source>Follow Sunlight Cycle</source>\n        <translation>Sunlight Cycle&apos;ı Takip Edin</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"330\"/>\n        <source>Start at</source>\n        <translation>Başlamak</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"337\"/>\n        <source>End at</source>\n        <translation>Bitiş noktasında</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"84\"/>\n        <source>SCREENS</source>\n        <translation>EKRANLAR</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"91\"/>\n        <source>Change the resolution of your display and arrange your displays</source>\n        <translation>Ekranınızın çözünürlüğünü değiştirin ve ekranlarınızı düzenleyin</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"101\"/>\n        <source>Arrange and Resize Displays</source>\n        <translation>Ekranları Düzenleme ve Yeniden Boyutlandırma</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"356\"/>\n        <source>Your physical location will be sent to MET Norway to determine sunrise and sunset times.</source>\n        <translation>Fiziksel konumunuz, gün doğumu ve gün batımı saatlerini belirlemek için MET Norveç&apos;e gönderilecektir.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"146\"/>\n        <source>SCALING</source>\n        <translation>ÖLÇEKLENDİRME</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"153\"/>\n        <source>If items on the screen are too small, you can scale them up to make them easier to see.</source>\n        <translation>Ekrandaki öğeler çok küçükse, daha kolay görülmelerini sağlamak için ölçeklerini büyütebilirsiniz.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"163\"/>\n        <source>100% (96 DPI)</source>\n        <translation>100% (96 DPI)</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"170\"/>\n        <source>125% (120 DPI)</source>\n        <translation>125% (120 DPI)</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"177\"/>\n        <source>150% (144 DPI)</source>\n        <translation>150% (144 DPI)</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"184\"/>\n        <source>200% (192 DPI)</source>\n        <translation>200% (192 DPI)</translation>\n    </message>\n</context>\n<context>\n    <name>RedshiftDaemon</name>\n    <message>\n        <location filename=\"../redshift/redshiftdaemon.cpp\" line=\"87\"/>\n        <source>Redshift Active</source>\n        <translation>Kırmızı ÜstKarakter Aktif</translation>\n    </message>\n    <message>\n        <location filename=\"../redshift/redshiftdaemon.cpp\" line=\"90\"/>\n        <source>Disable Redshift until tomorrow</source>\n        <translation>Kırmızı ÜstKarakter&apos;i yarına kadar devre dışı bırakın</translation>\n    </message>\n    <message>\n        <location filename=\"../redshift/redshiftdaemon.cpp\" line=\"93\"/>\n        <source>Display Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/DisplayPlugin/translations/vi_VN.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"vi_VN\" sourcelanguage=\"en_US\">\n<context>\n    <name>ArrangeWidget</name>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"164\"/>\n        <source>DISPLAY PROPERTIES</source>\n        <translation>THUỘC TÍNH MÀN HÌNH</translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"90\"/>\n        <source>Resolution</source>\n        <translation>Độ phân giải</translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"100\"/>\n        <source>Refresh Rate</source>\n        <translation>Tốc độ làm tươi</translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.cpp\" line=\"116\"/>\n        <source>%1 hz</source>\n        <translation>%1 hz</translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"194\"/>\n        <source>Apply Settings</source>\n        <translation>Áp dụng cài đặt</translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"141\"/>\n        <source>Primary Display</source>\n        <translation>Màn hình chính</translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"110\"/>\n        <source>Orientation</source>\n        <translation>Hướng</translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"118\"/>\n        <source>Landscape</source>\n        <translation>Ngang</translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"123\"/>\n        <source>Portrait</source>\n        <translation>Dọc</translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"128\"/>\n        <source>Upside Down</source>\n        <translation>Lật ngược</translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"133\"/>\n        <source>Portrait (Upside Down)</source>\n        <translation>Dọc (Lật ngược)</translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"177\"/>\n        <source>Enable Display</source>\n        <translation>Bật màn hình</translation>\n    </message>\n</context>\n<context>\n    <name>DisplaySettings</name>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"35\"/>\n        <location filename=\"../settings/displaysettings.cpp\" line=\"102\"/>\n        <source>Displays</source>\n        <translation>Màn hình</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"229\"/>\n        <source>REDSHIFT</source>\n        <translation>REDSHIFT</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"236\"/>\n        <source>Redshift blocks blue light so that you can sleep better at night</source>\n        <translation>Redshift chặn ánh sáng màu lam để cho bạn ngủ ngon hơn vào ban đêm</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"216\"/>\n        <source>Schedule Redshift</source>\n        <translation>Lên lịch Redshift</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"252\"/>\n        <source>Intensity</source>\n        <translation>Cường độ</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"302\"/>\n        <source>Follow Sunlight Cycle</source>\n        <translation>Theo mặt trời</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"330\"/>\n        <source>Start at</source>\n        <translation>Bật</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"337\"/>\n        <source>End at</source>\n        <translation>Tắt</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"84\"/>\n        <source>SCREENS</source>\n        <translation>MÀN HÌNH</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"91\"/>\n        <source>Change the resolution of your display and arrange your displays</source>\n        <translation>Đổi độ phân giải và sắp xếp màn hình của bạn</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"101\"/>\n        <source>Arrange and Resize Displays</source>\n        <translation>Điều chỉnh màn hình</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"356\"/>\n        <source>Your physical location will be sent to MET Norway to determine sunrise and sunset times.</source>\n        <translation>Vị trí thực của bạn sẽ bị gửi đến MET Norway để xác định thời gian mặt trời mọc và lặn.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"146\"/>\n        <source>SCALING</source>\n        <translation>TỶ LỆ PHÓNG TO</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"153\"/>\n        <source>If items on the screen are too small, you can scale them up to make them easier to see.</source>\n        <translation>Nếu mục trên màn hình quá nhỏ, bạn có thể phóng to các mục để cho bạn xem dễ hơn.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"163\"/>\n        <source>100% (96 DPI)</source>\n        <translation>100% (96 DPI)</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"170\"/>\n        <source>125% (120 DPI)</source>\n        <translation>125% (120 DPI)</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"177\"/>\n        <source>150% (144 DPI)</source>\n        <translation>150% (144 DPI)</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"184\"/>\n        <source>200% (192 DPI)</source>\n        <translation>200% (192 DPI)</translation>\n    </message>\n</context>\n<context>\n    <name>RedshiftDaemon</name>\n    <message>\n        <location filename=\"../redshift/redshiftdaemon.cpp\" line=\"87\"/>\n        <source>Redshift Active</source>\n        <translation>Redshift hoạt động</translation>\n    </message>\n    <message>\n        <location filename=\"../redshift/redshiftdaemon.cpp\" line=\"90\"/>\n        <source>Disable Redshift until tomorrow</source>\n        <translation>Vô hiệu Redshift đến khi ngày mai</translation>\n    </message>\n    <message>\n        <location filename=\"../redshift/redshiftdaemon.cpp\" line=\"93\"/>\n        <source>Display Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/DisplayPlugin/translations/zh_CN.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"zh_CN\" sourcelanguage=\"en_US\">\n<context>\n    <name>ArrangeWidget</name>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"164\"/>\n        <source>DISPLAY PROPERTIES</source>\n        <translation>显示器属性</translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"90\"/>\n        <source>Resolution</source>\n        <translation>分辨率</translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"100\"/>\n        <source>Refresh Rate</source>\n        <translation>刷新率</translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.cpp\" line=\"116\"/>\n        <source>%1 hz</source>\n        <translation>%1 hz</translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"194\"/>\n        <source>Apply Settings</source>\n        <translation>应用设置</translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"141\"/>\n        <source>Primary Display</source>\n        <translation>主屏幕</translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"110\"/>\n        <source>Orientation</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"118\"/>\n        <source>Landscape</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"123\"/>\n        <source>Portrait</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"128\"/>\n        <source>Upside Down</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"133\"/>\n        <source>Portrait (Upside Down)</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../arrange/arrangewidget.ui\" line=\"177\"/>\n        <source>Enable Display</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>DisplaySettings</name>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"35\"/>\n        <location filename=\"../settings/displaysettings.cpp\" line=\"102\"/>\n        <source>Displays</source>\n        <translation>显示器</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"229\"/>\n        <source>REDSHIFT</source>\n        <translation>夜间模式</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"236\"/>\n        <source>Redshift blocks blue light so that you can sleep better at night</source>\n        <translation>夜间模式能帮助您阻挡蓝光</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"216\"/>\n        <source>Schedule Redshift</source>\n        <translation>安排夜间模式时间</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"252\"/>\n        <source>Intensity</source>\n        <translation>强度</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"302\"/>\n        <source>Follow Sunlight Cycle</source>\n        <translation>跟随日光周期</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"330\"/>\n        <source>Start at</source>\n        <translation>开始于</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"337\"/>\n        <source>End at</source>\n        <translation>结束于</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"84\"/>\n        <source>SCREENS</source>\n        <translation>屏幕</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"91\"/>\n        <source>Change the resolution of your display and arrange your displays</source>\n        <translation>更改和整理你的屏幕分辨率</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"101\"/>\n        <source>Arrange and Resize Displays</source>\n        <translation>整理和更改显示器大小</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"356\"/>\n        <source>Your physical location will be sent to MET Norway to determine sunrise and sunset times.</source>\n        <translation>你的设备地点将会被发送到MET Norway。</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"146\"/>\n        <source>SCALING</source>\n        <translation>缩放</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"153\"/>\n        <source>If items on the screen are too small, you can scale them up to make them easier to see.</source>\n        <translation>如果屏幕上的物品太小， 你可以将其放大。</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"163\"/>\n        <source>100% (96 DPI)</source>\n        <translation>100% (96 DPI)</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"170\"/>\n        <source>125% (120 DPI)</source>\n        <translation>125% (120 DPI)</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"177\"/>\n        <source>150% (144 DPI)</source>\n        <translation>150% (144 DPI)</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/displaysettings.ui\" line=\"184\"/>\n        <source>200% (192 DPI)</source>\n        <translation>200% (192 DPI)</translation>\n    </message>\n</context>\n<context>\n    <name>RedshiftDaemon</name>\n    <message>\n        <location filename=\"../redshift/redshiftdaemon.cpp\" line=\"87\"/>\n        <source>Redshift Active</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../redshift/redshiftdaemon.cpp\" line=\"90\"/>\n        <source>Disable Redshift until tomorrow</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../redshift/redshiftdaemon.cpp\" line=\"93\"/>\n        <source>Display Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/InputPlugin/CMakeLists.txt",
    "content": "cmake_minimum_required(VERSION 3.24.0)\n\nfind_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets)\nfind_package(libcontemporary)\ncntp_find_pkgconfig(X11 x11)\ncntp_find_pkgconfig(X11_XI xi)\ncntp_find_pkgconfig(X11_XORG_LIBINPUT xorg-libinput)\n\nset(SOURCES\n    backends/settingsbackend.cpp\n    chunks/keyboardlayoutchunk.cpp\n    daemons/keyboarddaemon.cpp\n    models/selectedkeyboardlayoutsmodel.cpp\n    plugin.cpp\n    settings/inputsettingsleftpane.cpp\n    settings/inputsettingspane.cpp\n    settings/keyboardsettings.cpp\n    settings/mousesettings.cpp\n\n    chunks/keyboardlayoutchunk.ui\n    settings/inputsettingsleftpane.ui\n    settings/inputsettingspane.ui\n    settings/keyboardsettings.ui\n    settings/mousesettings.ui\n)\n\nset(HEADERS\n    backends/settingsbackend.h\n    chunks/keyboardlayoutchunk.h\n    daemons/keyboarddaemon.h\n    models/selectedkeyboardlayoutsmodel.h\n    plugin.h\n    settings/inputsettingsleftpane.h\n    settings/inputsettingspane.h\n    settings/keyboardsettings.h\n    settings/mousesettings.h\n)\n\nset(PLUGIN_NAME input)\nadd_plugin_td(${PLUGIN_NAME})\ntarget_sources(plugin-${PLUGIN_NAME} PRIVATE ${SOURCES} ${HEADERS})\ncntp_defaults_file(${PLUGIN_NAME}\n    DEFAULTS_FILE thedesk-input.conf)\n\nIF(${X11_FOUND})\n    target_link_libraries(plugin-${PLUGIN_NAME} PkgConfig::X11)\n    target_compile_definitions(plugin-${PLUGIN_NAME} PRIVATE HAVE_X11)\n\n    IF(${X11_XI_FOUND} AND ${X11_XORG_LIBINPUT_FOUND})\n        target_link_libraries(plugin-${PLUGIN_NAME} PkgConfig::X11_XI PkgConfig::X11_XORG_LIBINPUT)\n        target_compile_definitions(plugin-${PLUGIN_NAME} PRIVATE HAVE_XI)\n\n        target_sources(plugin-${PLUGIN_NAME} PRIVATE\n            backends/xinputbackend.cpp\n            backends/xinputbackend.h\n        )\n    ENDIF()\nENDIF()\n\ntarget_link_libraries(plugin-${PLUGIN_NAME} Qt::Widgets libcontemporary libthedesk)\n"
  },
  {
    "path": "plugins/InputPlugin/InputPlugin.pro",
    "content": "QT += gui widgets\n\nTEMPLATE = lib\nCONFIG += plugin\n\nCONFIG += c++11\n\n# Include the-libs build tools\ninclude(/usr/share/the-libs/pri/gentranslations.pri)\n\nCONFIG += link_pkgconfig\n\npackagesExist(x11) {\n    message(\"Building with X11 support\");\n    PKGCONFIG += x11\n    DEFINES += HAVE_X11\n    QT += x11extras\n\n\n    packagesExist(xi) : packagesExist(xorg-libinput) {\n        PKGCONFIG += xi xorg-libinput\n        DEFINES += HAVE_XI\n        message(\"Building with XInput support\");\n\n        SOURCES += \\\n            backends/xinputbackend.cpp\n\n        HEADERS += \\\n            backends/xinputbackend.h \\\n    }\n}\n\n# The following define makes your compiler emit warnings if you use\n# any Qt feature that has been marked deprecated (the exact warnings\n# depend on your compiler). Please consult the documentation of the\n# deprecated API in order to know how to port your code away from it.\nDEFINES += QT_DEPRECATED_WARNINGS\n\n# You can also make your code fail to compile if it uses deprecated APIs.\n# In order to do so, uncomment the following line.\n# You can also select to disable deprecated APIs only up to a certain version of Qt.\n#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0\n\nSOURCES += \\\n    backends/settingsbackend.cpp \\\n    chunks/keyboardlayoutchunk.cpp \\\n    daemons/keyboarddaemon.cpp \\\n    models/selectedkeyboardlayoutsmodel.cpp \\\n    plugin.cpp \\\n    settings/inputsettingsleftpane.cpp \\\n    settings/inputsettingspane.cpp \\\n    settings/keyboardsettings.cpp \\\n    settings/mousesettings.cpp\n\nHEADERS += \\\n    backends/settingsbackend.h \\\n    chunks/keyboardlayoutchunk.h \\\n    daemons/keyboarddaemon.h \\\n    models/selectedkeyboardlayoutsmodel.h \\\n    plugin.h \\\n    settings/inputsettingsleftpane.h \\\n    settings/inputsettingspane.h \\\n    settings/keyboardsettings.h \\\n    settings/mousesettings.h\n\nDISTFILES += \\\n    Plugin.json \\\n    defaults.conf\n\n\nunix {\n    translations.files = translations/*.qm\n    translations.path = /usr/share/thedesk/InputPlugin/translations\n\n    defaults.files = defaults.conf\n    defaults.path = /etc/theSuite/theDesk/InputPlugin/\n\n    INSTALLS += translations defaults\n}\n\ninclude(../plugins.pri)\n\nFORMS += \\\n    chunks/keyboardlayoutchunk.ui \\\n    settings/inputsettingsleftpane.ui \\\n    settings/inputsettingspane.ui \\\n    settings/keyboardsettings.ui \\\n    settings/mousesettings.ui\n"
  },
  {
    "path": "plugins/InputPlugin/Plugin.json",
    "content": "{\n    \"name\": \"Input Devices\",\n    \"icon\": \"preferences-desktop-input\",\n    \"uuid\": \"b20834e9-e270-489e-801b-9bd6413c427b\",\n    \"vi\": {\n        \"name\": \"Thiết bị đầu vào\"\n    }\n}\n"
  },
  {
    "path": "plugins/InputPlugin/backends/settingsbackend.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"settingsbackend.h\"\n\n#ifdef HAVE_X11\n    #include <tx11info.h>\n\n    #include <X11/Xlib.h>\n#endif\n\n#ifdef HAVE_XI\n    #include \"xinputbackend.h\"\n    #include <libinput-properties.h>\n#endif\n\nSettingsBackend::SettingsBackend(QObject* parent) :\n    QObject(parent) {\n}\n\nSettingsBackend* SettingsBackend::backendForPlatform() {\n#ifdef HAVE_X11\n    if (tX11Info::isPlatformX11()) {\n    #ifdef HAVE_XI\n        if (XInternAtom(tX11Info::display(), LIBINPUT_PROP_ACCEL, True)) {\n            return new XInputBackend();\n        }\n    #endif\n    }\n#endif\n    return nullptr;\n}\n"
  },
  {
    "path": "plugins/InputPlugin/backends/settingsbackend.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef SETTINGSBACKEND_H\n#define SETTINGSBACKEND_H\n\n#include <QObject>\n\nclass SettingsBackend : public QObject {\n        Q_OBJECT\n    public:\n        enum MousePrimaryButton {\n            LeftMouseButton,\n            RightMouseButton\n        };\n\n        explicit SettingsBackend(QObject* parent = nullptr);\n\n        static SettingsBackend* backendForPlatform();\n\n        virtual void setPrimaryMouseButton(MousePrimaryButton button) = 0;\n        virtual void setPrimaryTouchpadButton(MousePrimaryButton button) = 0;\n        virtual void setTapToClick(bool tapToClick) = 0;\n        virtual void setNaturalScrolling(bool naturalScrolling) = 0;\n\n    signals:\n\n};\n\n#endif // SETTINGSBACKEND_H\n"
  },
  {
    "path": "plugins/InputPlugin/backends/xinputbackend.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"xinputbackend.h\"\n\n#include <QVariant>\n#include <tx11info.h>\n\n#include <X11/Xatom.h>\n#include <X11/Xlib.h>\n#include <X11/extensions/XInput.h>\n#include <X11/extensions/XInput2.h>\n#include <libinput-properties.h>\n\n#undef Bool\n\nXInputBackend::XInputBackend(QObject* parent) :\n    SettingsBackend(parent) {\n}\n\nvoid XInputBackend::writeXiSetting(const char* atom, QVariantList value, WriteFor writeFor) {\n    int devices;\n    XDeviceInfo* info = XListInputDevices(tX11Info::display(), &devices);\n    if (info == nullptr) return;\n\n    Atom mouseAtom = XInternAtom(tX11Info::display(), XI_MOUSE, True);\n    Atom touchpadAtom = XInternAtom(tX11Info::display(), XI_TOUCHPAD, True);\n    Atom trackballAtom = XInternAtom(tX11Info::display(), XI_TRACKBALL, True);\n    for (int i = 0; i < devices; i++) {\n        XDeviceInfo* d = info + i;\n        if ((d->type == mouseAtom && writeFor & Mice) || (d->type == touchpadAtom && writeFor & Touchpads) || (d->type == trackballAtom && writeFor & Mice)) {\n            Atom valAtom = XInternAtom(tX11Info::display(), atom, True);\n            Atom type;\n            if (value.first().type() == QVariant::Bool || value.first().type() == QVariant::Int || value.first().type() == QVariant::Char) {\n                type = XA_INTEGER;\n            } else if (value.first().type() == QVariant::Double) {\n                type = XInternAtom(tX11Info::display(), \"FLOAT\", False);\n            } else {\n                return;\n            }\n\n            Atom typeReturn;\n            int formatReturn;\n            unsigned long itemCount;\n            unsigned long bytesAfter;\n            unsigned char* data = nullptr;\n            Status s = XIGetProperty(tX11Info::display(), d->id, valAtom, 0, 32, False, type, &typeReturn, &formatReturn, &itemCount, &bytesAfter, &data);\n            if (s != Success) continue;\n\n            if (typeReturn != type || data == nullptr || itemCount != value.count()) {\n                if (data != nullptr) {\n                    XFree(data);\n                }\n                continue;\n            }\n\n            if (value.first().type() == QVariant::Bool && formatReturn != 8) {\n                XFree(data);\n                continue;\n            } else if (value.first().type() == QVariant::Double && formatReturn != 32) {\n                XFree(data);\n                continue;\n            } else if (value.first().type() == QVariant::Char && formatReturn != 8) {\n                XFree(data);\n                continue;\n            } else if (value.first().type() == QVariant::Int && formatReturn != 32) {\n                XFree(data);\n                continue;\n            }\n\n            if (value.first().type() == QVariant::Bool) {\n                unsigned char v[64];\n                for (int i = 0; i < value.count(); i++) {\n                    v[i] = value.at(i).toBool() ? 1 : 0;\n                }\n                XIChangeProperty(tX11Info::display(), d->id, valAtom, type, 8, XIPropModeReplace, v, value.count());\n            } else if (value.first().type() == QVariant::Double) {\n                float v[64];\n                for (int i = 0; i < value.count(); i++) {\n                    v[i] = static_cast<float>(value.at(i).toDouble());\n                }\n                XIChangeProperty(tX11Info::display(), d->id, valAtom, type, 32, XIPropModeReplace, reinterpret_cast<unsigned char*>(v), value.count());\n            } else if (value.first().type() == QVariant::Char) {\n                unsigned char v[64];\n                for (int i = 0; i < value.count(); i++) {\n                    v[i] = value.at(i).toChar().toLatin1();\n                }\n                XIChangeProperty(tX11Info::display(), d->id, valAtom, type, 8, XIPropModeReplace, v, value.count());\n            } else if (value.first().type() == QVariant::Int) {\n                int v[64];\n                for (int i = 0; i < value.count(); i++) {\n                    v[i] = value.at(i).toInt();\n                }\n                XIChangeProperty(tX11Info::display(), d->id, valAtom, type, 32, XIPropModeReplace, reinterpret_cast<unsigned char*>(v), value.count());\n            }\n\n            XFree(data);\n        }\n    }\n    XFreeDeviceList(info);\n}\n\nvoid XInputBackend::setPrimaryMouseButton(MousePrimaryButton button) {\n    writeXiSetting(LIBINPUT_PROP_LEFT_HANDED, {button == RightMouseButton}, Mice);\n}\n\nvoid XInputBackend::setPrimaryTouchpadButton(MousePrimaryButton button) {\n    writeXiSetting(LIBINPUT_PROP_LEFT_HANDED, {button == RightMouseButton}, Touchpads);\n}\n\nvoid XInputBackend::setTapToClick(bool tapToClick) {\n    writeXiSetting(LIBINPUT_PROP_TAP, {tapToClick}, Touchpads);\n}\n\nvoid XInputBackend::setNaturalScrolling(bool naturalScrolling) {\n    writeXiSetting(LIBINPUT_PROP_NATURAL_SCROLL, {naturalScrolling}, Touchpads);\n}\n"
  },
  {
    "path": "plugins/InputPlugin/backends/xinputbackend.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef XINPUTBACKEND_H\n#define XINPUTBACKEND_H\n\n#include \"settingsbackend.h\"\n\nclass XInputBackend : public SettingsBackend {\n        Q_OBJECT\n    public:\n        explicit XInputBackend(QObject* parent = nullptr);\n\n    signals:\n\n    private:\n        enum WriteFor {\n            Mice = 1,\n            Touchpads = 2,\n            AllDevices = Mice | Touchpads\n        };\n\n        void writeXiSetting(const char* atom, QVariantList value, WriteFor writeFor = AllDevices);\n\n        // SettingsBackend interface\n    public:\n        void setPrimaryMouseButton(MousePrimaryButton button);\n        void setPrimaryTouchpadButton(MousePrimaryButton button);\n        void setTapToClick(bool tapToClick);\n        void setNaturalScrolling(bool naturalScrolling);\n};\n\n#endif // XINPUTBACKEND_H\n"
  },
  {
    "path": "plugins/InputPlugin/chunks/keyboardlayoutchunk.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2022 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"keyboardlayoutchunk.h\"\n#include \"ui_keyboardlayoutchunk.h\"\n\n#include <Wm/desktopwm.h>\n#include <tsettings.h>\n#include <QMenu>\n#include <statemanager.h>\n#include <barmanager.h>\n\nstruct KeyboardLayoutChunkPrivate {\n    tSettings settings;\n    QMenu* layoutSelectMenu;\n\n    QList<QAction*> layoutsActions;\n    BarManager::BarLockPtr barLocker;\n};\n\nKeyboardLayoutChunk::KeyboardLayoutChunk() :\n    Chunk(),\n    ui(new Ui::KeyboardLayoutChunk) {\n    ui->setupUi(this);\n    d = new KeyboardLayoutChunkPrivate();\n    d->layoutSelectMenu = new QMenu();\n\n    ui->layoutSelectButton->setIconSize(SC_DPI_T(QSize(16, 16), QSize));\n\n    connect(&d->settings, &tSettings::settingChanged, this, [ = ](QString key) {\n        if (key == \"Input/keyboard.layouts\") updateLayouts();\n    });\n    updateLayouts();\n\n    connect(DesktopWm::instance(), &DesktopWm::currentKeyboardLayoutChanged, this, &KeyboardLayoutChunk::updateCurrentLayout);\n    updateCurrentLayout();\n\n    connect(d->layoutSelectMenu, &QMenu::aboutToShow, this, [ = ] {\n        d->barLocker = StateManager::barManager()->acquireLock();\n    });\n    connect(d->layoutSelectMenu, &QMenu::aboutToHide, this, [ = ] {\n        d->barLocker->unlock();\n    });\n    ui->layoutSelectButton->setMenu(d->layoutSelectMenu);\n}\n\nKeyboardLayoutChunk::~KeyboardLayoutChunk() {\n    delete ui;\n    delete d;\n}\n\nvoid KeyboardLayoutChunk::updateLayouts() {\n    for (QAction* action : d->layoutsActions) {\n        d->layoutSelectMenu->removeAction(action);\n        action->deleteLater();\n    }\n    d->layoutsActions.clear();\n\n    d->layoutsActions.append(d->layoutSelectMenu->addSection(tr(\"Select Keyboard Layout\")));\n    for (QString layout : d->settings.delimitedList(\"Input/keyboard.layouts\")) {\n        QAction* action = new QAction(this);\n\n        action->setText(DesktopWm::keyboardLayoutDescription(layout));\n        action->setCheckable(true);\n\n        connect(DesktopWm::instance(), &DesktopWm::currentKeyboardLayoutChanged, action, [ = ] {\n            action->setChecked(layout == DesktopWm::currentKeyboardLayout());\n        });\n        action->setChecked(layout == DesktopWm::currentKeyboardLayout());\n\n        connect(action, &QAction::triggered, this, [ = ] {\n            DesktopWm::setCurrentKeyboardLayout(layout);\n        });\n\n        d->layoutSelectMenu->addAction(action);\n        d->layoutsActions.append(action);\n    }\n}\n\nvoid KeyboardLayoutChunk::updateCurrentLayout() {\n    ui->layoutSelectButton->setText(DesktopWm::currentKeyboardLayout());\n}\n\nQString KeyboardLayoutChunk::name() {\n    return \"keyboardlayout\";\n}\n\nint KeyboardLayoutChunk::expandedHeight() {\n    return this->sizeHint().height();\n}\n\nint KeyboardLayoutChunk::statusBarHeight() {\n    return SC_DPI(16);\n}\n"
  },
  {
    "path": "plugins/InputPlugin/chunks/keyboardlayoutchunk.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2022 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef KEYBOARDLAYOUTCHUNK_H\n#define KEYBOARDLAYOUTCHUNK_H\n\n#include <QWidget>\n#include <chunk.h>\n\nnamespace Ui {\n    class KeyboardLayoutChunk;\n}\n\nstruct KeyboardLayoutChunkPrivate;\nclass KeyboardLayoutChunk : public Chunk {\n        Q_OBJECT\n\n    public:\n        explicit KeyboardLayoutChunk();\n        ~KeyboardLayoutChunk();\n\n    private:\n        Ui::KeyboardLayoutChunk* ui;\n        KeyboardLayoutChunkPrivate* d;\n\n        void updateLayouts();\n        void updateCurrentLayout();\n\n        // Chunk interface\n    public:\n        QString name();\n        int expandedHeight();\n        int statusBarHeight();\n};\n\n#endif // KEYBOARDLAYOUTCHUNK_H\n"
  },
  {
    "path": "plugins/InputPlugin/chunks/keyboardlayoutchunk.ui",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ui version=\"4.0\">\n <class>KeyboardLayoutChunk</class>\n <widget class=\"QWidget\" name=\"KeyboardLayoutChunk\">\n  <property name=\"geometry\">\n   <rect>\n    <x>0</x>\n    <y>0</y>\n    <width>400</width>\n    <height>300</height>\n   </rect>\n  </property>\n  <property name=\"windowTitle\">\n   <string notr=\"true\">Form</string>\n  </property>\n  <layout class=\"QHBoxLayout\" name=\"horizontalLayout\">\n   <property name=\"spacing\">\n    <number>0</number>\n   </property>\n   <property name=\"leftMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"topMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"rightMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"bottomMargin\">\n    <number>0</number>\n   </property>\n   <item>\n    <widget class=\"QToolButton\" name=\"layoutSelectButton\">\n     <property name=\"sizePolicy\">\n      <sizepolicy hsizetype=\"Preferred\" vsizetype=\"Preferred\">\n       <horstretch>0</horstretch>\n       <verstretch>0</verstretch>\n      </sizepolicy>\n     </property>\n     <property name=\"text\">\n      <string notr=\"true\"/>\n     </property>\n     <property name=\"icon\">\n      <iconset theme=\"input-keyboard\">\n       <normaloff>.</normaloff>.</iconset>\n     </property>\n     <property name=\"popupMode\">\n      <enum>QToolButton::InstantPopup</enum>\n     </property>\n     <property name=\"toolButtonStyle\">\n      <enum>Qt::ToolButtonTextBesideIcon</enum>\n     </property>\n    </widget>\n   </item>\n  </layout>\n </widget>\n <resources/>\n <connections/>\n</ui>\n"
  },
  {
    "path": "plugins/InputPlugin/daemons/keyboarddaemon.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2022 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"keyboarddaemon.h\"\n\n#include <QKeySequence>\n#include <tsettings.h>\n#include <statemanager.h>\n#include <hudmanager.h>\n#include <barmanager.h>\n#include <keygrab.h>\n#include <Wm/desktopwm.h>\n#include \"chunks/keyboardlayoutchunk.h\"\n\nstruct KeyboardDaemonPrivate {\n    tSettings settings;\n    KeyboardLayoutChunk* chunk;\n};\n\nKeyboardDaemon::KeyboardDaemon(QObject* parent)\n    : QObject{parent} {\n    d = new KeyboardDaemonPrivate();\n\n    d->chunk = new KeyboardLayoutChunk();\n\n    KeyGrab* nextLayoutGrab = new KeyGrab(QKeySequence(Qt::MetaModifier | Qt::Key_Space), \"nextlayout\", this);\n    connect(nextLayoutGrab, &KeyGrab::activated, this, &KeyboardDaemon::setNextKeyboardLayout);\n    KeyGrab* nextLayoutGrabAlternate = new KeyGrab(QKeySequence(Qt::MetaModifier | Qt::Key_Return), this);\n    connect(nextLayoutGrabAlternate, &KeyGrab::activated, this, &KeyboardDaemon::setNextKeyboardLayout);\n\n    connect(&d->settings, &tSettings::settingChanged, this, [ = ](QString key) {\n        if (key == \"Input/keyboard.layouts\") {\n            updateChunkVisibility();\n\n            //Ensure that we have a valid keyboard layout\n            QStringList layouts = d->settings.delimitedList(\"Input/keyboard.layouts\");\n\n            //Failsafe\n            if (layouts.isEmpty()) return;\n\n            if (!layouts.contains(DesktopWm::currentKeyboardLayout())) {\n                //Set the first desktop layout\n                DesktopWm::setCurrentKeyboardLayout(layouts.at(0));\n            }\n        }\n    });\n    updateChunkVisibility();\n}\n\nKeyboardDaemon::~KeyboardDaemon() {\n    d->chunk->deleteLater();\n    delete d;\n}\n\nvoid KeyboardDaemon::setNextKeyboardLayout() {\n    QStringList layouts = d->settings.delimitedList(\"Input/keyboard.layouts\");\n    if (layouts.length() <= 1) return;\n\n    int nextLayout = layouts.indexOf(DesktopWm::currentKeyboardLayout()) + 1;\n    if (nextLayout >= layouts.length()) nextLayout = 0;\n\n    QString layout = layouts.at(nextLayout);\n    DesktopWm::setCurrentKeyboardLayout(layout);\n\n    StateManager::instance()->hudManager()->showHud({\n        {\"icon\", \"input-keyboard\"},\n        {\"title\", tr(\"Keyboard Layout\")},\n        {\"text\", DesktopWm::keyboardLayoutDescription(layout)}\n    });\n}\n\nvoid KeyboardDaemon::updateChunkVisibility() {\n    bool shouldBeVisible = d->settings.delimitedList(\"Input/keyboard.layouts\").length() > 1;\n    if (shouldBeVisible && !d->chunk->chunkRegistered()) {\n        StateManager::barManager()->addChunk(d->chunk);\n    } else if (!shouldBeVisible && d->chunk->chunkRegistered()) {\n        StateManager::barManager()->removeChunk(d->chunk);\n    }\n}\n"
  },
  {
    "path": "plugins/InputPlugin/daemons/keyboarddaemon.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2022 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef KEYBOARDDAEMON_H\n#define KEYBOARDDAEMON_H\n\n#include <QObject>\n\nstruct KeyboardDaemonPrivate;\nclass KeyboardDaemon : public QObject {\n        Q_OBJECT\n    public:\n        explicit KeyboardDaemon(QObject* parent = nullptr);\n        ~KeyboardDaemon();\n\n    signals:\n\n    private:\n        KeyboardDaemonPrivate* d;\n\n        void setNextKeyboardLayout();\n        void updateChunkVisibility();\n};\n\n#endif // KEYBOARDDAEMON_H\n"
  },
  {
    "path": "plugins/InputPlugin/models/selectedkeyboardlayoutsmodel.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2022 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"selectedkeyboardlayoutsmodel.h\"\n\n#include <tsettings.h>\n#include <Wm/desktopwm.h>\n\nstruct SelectedKeyboardLayoutsModelPrivate {\n    tSettings settings;\n};\n\nSelectedKeyboardLayoutsModel::SelectedKeyboardLayoutsModel(QObject* parent)\n    : QAbstractListModel(parent) {\n    d = new SelectedKeyboardLayoutsModelPrivate();\n\n    connect(&d->settings, &tSettings::settingChanged, this, [ = ](QString key) {\n        if (key == \"Input/keyboard.layouts\") emit dataChanged(index(0), index(rowCount()));\n    });\n}\n\nSelectedKeyboardLayoutsModel::~SelectedKeyboardLayoutsModel() {\n    delete d;\n}\n\nint SelectedKeyboardLayoutsModel::rowCount(const QModelIndex& parent) const {\n    if (parent.isValid()) return 0;\n    return d->settings.delimitedList(\"Input/keyboard.layouts\").length();\n}\n\nQVariant SelectedKeyboardLayoutsModel::data(const QModelIndex& index, int role) const {\n    if (!index.isValid())  return QVariant();\n    if (index.row() >= rowCount()) return QVariant();\n\n    QString layout = d->settings.delimitedList(\"Input/keyboard.layouts\").at(index.row());\n\n    switch (role) {\n        case Qt::DisplayRole:\n            return DesktopWm::keyboardLayoutDescription(layout);\n        case Qt::UserRole:\n            return layout;\n    }\n\n    return QVariant();\n}\n\nvoid SelectedKeyboardLayoutsModel::addLayout(QString layout) {\n    QStringList layouts = d->settings.delimitedList(\"Input/keyboard.layouts\");\n    if (layouts.contains(layout)) return;\n\n    layouts.append(layout);\n    layouts.removeAll(\"\");\n    d->settings.setDelimitedList(\"Input/keyboard.layouts\", layouts);\n}\n\nvoid SelectedKeyboardLayoutsModel::moveUp(QString layout) {\n    QStringList layouts = d->settings.delimitedList(\"Input/keyboard.layouts\");\n    if (!layouts.contains(layout)) return;\n\n    int index = layouts.indexOf(layout);\n    if (index != 0) {\n        layouts.removeAt(index);\n        layouts.insert(index - 1, layout);\n        d->settings.setDelimitedList(\"Input/keyboard.layouts\", layouts);\n    }\n}\n\nvoid SelectedKeyboardLayoutsModel::moveDown(QString layout) {\n    QStringList layouts = d->settings.delimitedList(\"Input/keyboard.layouts\");\n    if (!layouts.contains(layout)) return;\n\n    int index = layouts.indexOf(layout);\n    if (index != 0) {\n        layouts.removeAt(index);\n        layouts.insert(index + 1, layout);\n        d->settings.setDelimitedList(\"Input/keyboard.layouts\", layouts);\n    }\n}\n\nvoid SelectedKeyboardLayoutsModel::removeLayout(QString layout) {\n    QStringList layouts = d->settings.delimitedList(\"Input/keyboard.layouts\");\n    layouts.removeAll(layout);\n    d->settings.setDelimitedList(\"Input/keyboard.layouts\", layouts);\n}\n"
  },
  {
    "path": "plugins/InputPlugin/models/selectedkeyboardlayoutsmodel.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2022 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef SELECTEDKEYBOARDLAYOUTSMODEL_H\n#define SELECTEDKEYBOARDLAYOUTSMODEL_H\n\n#include <QAbstractListModel>\n\nstruct SelectedKeyboardLayoutsModelPrivate;\nclass SelectedKeyboardLayoutsModel : public QAbstractListModel {\n        Q_OBJECT\n\n    public:\n        explicit SelectedKeyboardLayoutsModel(QObject* parent = nullptr);\n        ~SelectedKeyboardLayoutsModel();\n\n        // Basic functionality:\n        int rowCount(const QModelIndex& parent = QModelIndex()) const override;\n        QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const override;\n\n        void addLayout(QString layout);\n        void moveUp(QString layout);\n        void moveDown(QString layout);\n        void removeLayout(QString layout);\n\n    private:\n        SelectedKeyboardLayoutsModelPrivate* d;\n};\n\n#endif // SELECTEDKEYBOARDLAYOUTSMODEL_H\n"
  },
  {
    "path": "plugins/InputPlugin/plugin.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"plugin.h\"\n\n#include \"daemons/keyboarddaemon.h\"\n#include \"settings/inputsettingspane.h\"\n#include <QApplication>\n#include <QDebug>\n#include <QDir>\n#include <localemanager.h>\n#include <statemanager.h>\n#include <statuscentermanager.h>\n#include <tapplication.h>\n#include <tsettings.h>\n\nstruct PluginPrivate {\n        InputSettingsPane* settings;\n        KeyboardDaemon* keyboardDaemon;\n};\n\nPlugin::Plugin() {\n    d = new PluginPrivate();\n}\n\nPlugin::~Plugin() {\n    delete d;\n}\n\nvoid Plugin::activate() {\n    tSettings::registerDefaults(QDir::cleanPath(qApp->applicationDirPath() + \"/../plugins/InputPlugin/thedesk-input.conf\"));\n    tSettings::registerDefaults(\"/usr/share/defaults/thedesk-input.conf\");\n\n    d->settings = new InputSettingsPane();\n    StateManager::statusCenterManager()->addPane(d->settings, StatusCenterManager::SystemSettings);\n\n    d->keyboardDaemon = new KeyboardDaemon();\n}\n\nvoid Plugin::deactivate() {\n    StateManager::statusCenterManager()->removePane(d->settings);\n    d->settings->deleteLater();\n    delete d->keyboardDaemon;\n    tApplication::removePluginTranslator(CNTP_TARGET_NAME);\n}\n"
  },
  {
    "path": "plugins/InputPlugin/plugin.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef PLUGIN_H\n#define PLUGIN_H\n\n#include \"plugins/plugininterface.h\"\n\nstruct PluginPrivate;\nclass Plugin : public QObject,\n               public PluginInterface {\n        Q_OBJECT\n        Q_PLUGIN_METADATA(IID PluginInterface_iid FILE \"Plugin.json\")\n        Q_INTERFACES(PluginInterface)\n\n    public:\n        Plugin();\n        ~Plugin();\n\n    private:\n        PluginPrivate* d;\n\n        // PluginInterface interface\n    public:\n        void activate();\n        void deactivate();\n};\n\n#endif // PLUGIN_H\n"
  },
  {
    "path": "plugins/InputPlugin/settings/inputsettingsleftpane.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"inputsettingsleftpane.h\"\n#include \"ui_inputsettingsleftpane.h\"\n\n#include <statemanager.h>\n#include <statuscentermanager.h>\n\nInputSettingsLeftPane::InputSettingsLeftPane(QWidget* parent) :\n    QWidget(parent),\n    ui(new Ui::InputSettingsLeftPane) {\n    ui->setupUi(this);\n\n    ui->titleLabel->setBackButtonShown(true);\n    ui->listWidget->setIconSize(SC_DPI_T(QSize(32, 32), QSize));\n}\n\nInputSettingsLeftPane::~InputSettingsLeftPane() {\n    delete ui;\n}\n\nvoid InputSettingsLeftPane::on_titleLabel_backButtonClicked() {\n    StateManager::statusCenterManager()->returnToRootMenu();\n}\n\nvoid InputSettingsLeftPane::on_listWidget_currentRowChanged(int currentRow) {\n    emit currentPaneChanged(currentRow);\n}\n\n\nvoid InputSettingsLeftPane::changeEvent(QEvent* event) {\n    if (event->type() == QEvent::LanguageChange) {\n        ui->retranslateUi(this);\n    }\n}\n"
  },
  {
    "path": "plugins/InputPlugin/settings/inputsettingsleftpane.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef INPUTSETTINGSLEFTPANE_H\n#define INPUTSETTINGSLEFTPANE_H\n\n#include <QWidget>\n\nnamespace Ui {\n    class InputSettingsLeftPane;\n}\n\nclass InputSettingsLeftPane : public QWidget {\n        Q_OBJECT\n\n    public:\n        explicit InputSettingsLeftPane(QWidget* parent = nullptr);\n        ~InputSettingsLeftPane();\n\n    private slots:\n        void on_titleLabel_backButtonClicked();\n\n        void on_listWidget_currentRowChanged(int currentRow);\n\n    signals:\n        void currentPaneChanged(int pane);\n\n    private:\n        Ui::InputSettingsLeftPane* ui;\n\n        // QWidget interface\n    protected:\n        void changeEvent(QEvent* event);\n};\n\n#endif // INPUTSETTINGSLEFTPANE_H\n"
  },
  {
    "path": "plugins/InputPlugin/settings/inputsettingsleftpane.ui",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ui version=\"4.0\">\n <class>InputSettingsLeftPane</class>\n <widget class=\"QWidget\" name=\"InputSettingsLeftPane\">\n  <property name=\"geometry\">\n   <rect>\n    <x>0</x>\n    <y>0</y>\n    <width>400</width>\n    <height>300</height>\n   </rect>\n  </property>\n  <property name=\"windowTitle\">\n   <string notr=\"true\">Form</string>\n  </property>\n  <layout class=\"QVBoxLayout\" name=\"verticalLayout\">\n   <property name=\"spacing\">\n    <number>0</number>\n   </property>\n   <property name=\"leftMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"topMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"rightMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"bottomMargin\">\n    <number>0</number>\n   </property>\n   <item>\n    <widget class=\"tTitleLabel\" name=\"titleLabel\">\n     <property name=\"text\">\n      <string>Input</string>\n     </property>\n    </widget>\n   </item>\n   <item>\n    <widget class=\"QListWidget\" name=\"listWidget\">\n     <property name=\"frameShape\">\n      <enum>QFrame::NoFrame</enum>\n     </property>\n     <item>\n      <property name=\"text\">\n       <string>Mouse and Touchpad</string>\n      </property>\n      <property name=\"icon\">\n       <iconset theme=\"preferences-desktop-mouse\">\n        <normaloff>.</normaloff>.</iconset>\n      </property>\n     </item>\n     <item>\n      <property name=\"text\">\n       <string>Keyboard</string>\n      </property>\n      <property name=\"icon\">\n       <iconset theme=\"preferences-desktop-keyboard\"/>\n      </property>\n     </item>\n    </widget>\n   </item>\n  </layout>\n </widget>\n <customwidgets>\n  <customwidget>\n   <class>tTitleLabel</class>\n   <extends>QLabel</extends>\n   <header location=\"global\">ttitlelabel.h</header>\n   <slots>\n    <signal>backButtonClicked()</signal>\n   </slots>\n  </customwidget>\n </customwidgets>\n <resources/>\n <connections/>\n</ui>\n"
  },
  {
    "path": "plugins/InputPlugin/settings/inputsettingspane.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"inputsettingspane.h\"\n#include \"ui_inputsettingspane.h\"\n\n#include <QIcon>\n#include \"inputsettingsleftpane.h\"\n\nstruct InputSettingsPanePrivate {\n    InputSettingsLeftPane* leftPane;\n};\n\nInputSettingsPane::InputSettingsPane() :\n    StatusCenterPane(),\n    ui(new Ui::InputSettingsPane) {\n    ui->setupUi(this);\n\n    d = new InputSettingsPanePrivate();\n    d->leftPane = new InputSettingsLeftPane();\n    ui->stackedWidget->setCurrentAnimation(tStackedWidget::Lift);\n    connect(d->leftPane, &InputSettingsLeftPane::currentPaneChanged, this, [ = ](int row) {\n        ui->stackedWidget->setCurrentIndex(row);\n    });\n}\n\nInputSettingsPane::~InputSettingsPane() {\n    d->leftPane->deleteLater();\n    delete d;\n    delete ui;\n}\n\n\nQString InputSettingsPane::name() {\n    return \"InputSettings\";\n}\n\nQString InputSettingsPane::displayName() {\n    return tr(\"Input\");\n}\n\nQIcon InputSettingsPane::icon() {\n    return QIcon::fromTheme(\"preferences-desktop-input\");\n}\n\nQWidget* InputSettingsPane::leftPane() {\n    return d->leftPane;\n}\n\n\nvoid InputSettingsPane::changeEvent(QEvent* event) {\n    if (event->type() == QEvent::LanguageChange) {\n        ui->retranslateUi(this);\n        emit displayNameChanged();\n    }\n}\n"
  },
  {
    "path": "plugins/InputPlugin/settings/inputsettingspane.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef INPUTSETTINGSPANE_H\n#define INPUTSETTINGSPANE_H\n\n#include <statuscenterpane.h>\n\nnamespace Ui {\n    class InputSettingsPane;\n}\n\nstruct InputSettingsPanePrivate;\nclass InputSettingsPane : public StatusCenterPane {\n        Q_OBJECT\n\n    public:\n        explicit InputSettingsPane();\n        ~InputSettingsPane();\n\n    private:\n        Ui::InputSettingsPane* ui;\n        InputSettingsPanePrivate* d;\n\n        // StatusCenterPane interface\n    public:\n        QString name();\n        QString displayName();\n        QIcon icon();\n        QWidget* leftPane();\n\n        // QWidget interface\n    protected:\n        void changeEvent(QEvent* event);\n};\n\n#endif // INPUTSETTINGSPANE_H\n"
  },
  {
    "path": "plugins/InputPlugin/settings/inputsettingspane.ui",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ui version=\"4.0\">\n <class>InputSettingsPane</class>\n <widget class=\"QWidget\" name=\"InputSettingsPane\">\n  <property name=\"geometry\">\n   <rect>\n    <x>0</x>\n    <y>0</y>\n    <width>400</width>\n    <height>300</height>\n   </rect>\n  </property>\n  <property name=\"windowTitle\">\n   <string notr=\"true\">Form</string>\n  </property>\n  <layout class=\"QVBoxLayout\" name=\"verticalLayout\">\n   <property name=\"spacing\">\n    <number>0</number>\n   </property>\n   <property name=\"leftMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"topMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"rightMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"bottomMargin\">\n    <number>0</number>\n   </property>\n   <item>\n    <widget class=\"tStackedWidget\" name=\"stackedWidget\">\n     <widget class=\"MouseSettings\" name=\"mousePage\"/>\n     <widget class=\"KeyboardSettings\" name=\"keyboardPage\"/>\n    </widget>\n   </item>\n  </layout>\n </widget>\n <customwidgets>\n  <customwidget>\n   <class>tStackedWidget</class>\n   <extends>QStackedWidget</extends>\n   <header location=\"global\">tstackedwidget.h</header>\n   <container>1</container>\n   <slots>\n    <signal>switchingFrame(int)</signal>\n   </slots>\n  </customwidget>\n  <customwidget>\n   <class>MouseSettings</class>\n   <extends>QWidget</extends>\n   <header>settings/mousesettings.h</header>\n   <container>1</container>\n  </customwidget>\n  <customwidget>\n   <class>KeyboardSettings</class>\n   <extends>QWidget</extends>\n   <header>settings/keyboardsettings.h</header>\n   <container>1</container>\n  </customwidget>\n </customwidgets>\n <resources/>\n <connections/>\n</ui>\n"
  },
  {
    "path": "plugins/InputPlugin/settings/keyboardsettings.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2022 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"keyboardsettings.h\"\n#include \"ui_keyboardsettings.h\"\n\n#include <tsettings.h>\n#include <statemanager.h>\n#include <statuscentermanager.h>\n#include <localemanager.h>\n#include <QMenu>\n\n#include \"models/selectedkeyboardlayoutsmodel.h\"\n\nstruct KeyboardSettingsPrivate {\n    SelectedKeyboardLayoutsModel* layoutsModel;\n};\n\nKeyboardSettings::KeyboardSettings(QWidget* parent) :\n    QWidget(parent),\n    ui(new Ui::KeyboardSettings) {\n    ui->setupUi(this);\n\n    d = new KeyboardSettingsPrivate();\n\n    ui->titleLabel->setBackButtonIsMenu(true);\n    ui->titleLabel->setBackButtonShown(StateManager::instance()->statusCenterManager()->isHamburgerMenuRequired());\n    connect(StateManager::instance()->statusCenterManager(), &StatusCenterManager::isHamburgerMenuRequiredChanged, ui->titleLabel, &tTitleLabel::setBackButtonShown);\n\n    const int contentWidth = StateManager::instance()->statusCenterManager()->preferredContentWidth();\n    ui->layoutsWidget->setFixedWidth(contentWidth);\n\n    d->layoutsModel = new SelectedKeyboardLayoutsModel();\n    ui->layoutsList->setModel(d->layoutsModel);\n}\n\nKeyboardSettings::~KeyboardSettings() {\n    delete d;\n    delete ui;\n}\n\nvoid KeyboardSettings::on_titleLabel_backButtonClicked() {\n    StateManager::statusCenterManager()->showStatusCenterHamburgerMenu();\n}\n\nvoid KeyboardSettings::on_addLayoutButton_clicked() {\n    bool ok;\n    QString newLayout = StateManager::localeManager()->showKeyboardLayoutSelector(this->window(), &ok);\n    if (!ok) return;\n\n    d->layoutsModel->addLayout(newLayout);\n}\n\n\nvoid KeyboardSettings::on_layoutsList_customContextMenuRequested(const QPoint& pos) {\n    if (d->layoutsModel->rowCount() == 1) return;\n\n    QModelIndex index = ui->layoutsList->indexAt(pos);\n    if (index.isValid()) {\n        QMenu* menu = new QMenu();\n        menu->addSection(tr(\"For this layout\"));\n        if (index.row() != 0) menu->addAction(QIcon::fromTheme(\"go-up\"), tr(\"Move Up\"), [ = ] {\n            d->layoutsModel->moveUp(index.data(Qt::UserRole).toString());\n        });\n        if (index.row() != d->layoutsModel->rowCount() - 1) menu->addAction(QIcon::fromTheme(\"go-down\"), tr(\"Move Down\"), [ = ] {\n            d->layoutsModel->moveDown(index.data(Qt::UserRole).toString());\n        });\n        menu->addAction(QIcon::fromTheme(\"list-remove\"), tr(\"Remove\"), [ = ] {\n            d->layoutsModel->removeLayout(index.data(Qt::UserRole).toString());\n        });\n        connect(menu, &QMenu::aboutToHide, menu, &QMenu::deleteLater);\n        menu->popup(ui->layoutsList->mapToGlobal(pos));\n    }\n}\n\n\n\nvoid KeyboardSettings::changeEvent(QEvent* event) {\n    if (event->type() == QEvent::LanguageChange) {\n        ui->retranslateUi(this);\n    }\n}\n"
  },
  {
    "path": "plugins/InputPlugin/settings/keyboardsettings.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2022 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef KEYBOARDSETTINGS_H\n#define KEYBOARDSETTINGS_H\n\n#include <QWidget>\n\nnamespace Ui {\n    class KeyboardSettings;\n}\n\nstruct KeyboardSettingsPrivate;\nclass KeyboardSettings : public QWidget {\n        Q_OBJECT\n\n    public:\n        explicit KeyboardSettings(QWidget* parent = nullptr);\n        ~KeyboardSettings();\n\n    private slots:\n        void on_titleLabel_backButtonClicked();\n\n        void on_addLayoutButton_clicked();\n\n        void on_layoutsList_customContextMenuRequested(const QPoint& pos);\n\n    private:\n        Ui::KeyboardSettings* ui;\n        KeyboardSettingsPrivate* d;\n\n        // QWidget interface\n    protected:\n        void changeEvent(QEvent* event);\n};\n\n#endif // KEYBOARDSETTINGS_H\n"
  },
  {
    "path": "plugins/InputPlugin/settings/keyboardsettings.ui",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ui version=\"4.0\">\n <class>KeyboardSettings</class>\n <widget class=\"QWidget\" name=\"KeyboardSettings\">\n  <property name=\"geometry\">\n   <rect>\n    <x>0</x>\n    <y>0</y>\n    <width>901</width>\n    <height>655</height>\n   </rect>\n  </property>\n  <property name=\"windowTitle\">\n   <string notr=\"true\">Form</string>\n  </property>\n  <layout class=\"QVBoxLayout\" name=\"verticalLayout\">\n   <property name=\"spacing\">\n    <number>0</number>\n   </property>\n   <property name=\"leftMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"topMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"rightMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"bottomMargin\">\n    <number>0</number>\n   </property>\n   <item>\n    <widget class=\"tTitleLabel\" name=\"titleLabel\">\n     <property name=\"text\">\n      <string>Keyboard</string>\n     </property>\n    </widget>\n   </item>\n   <item>\n    <widget class=\"QScrollArea\" name=\"scrollArea\">\n     <property name=\"frameShape\">\n      <enum>QFrame::NoFrame</enum>\n     </property>\n     <property name=\"widgetResizable\">\n      <bool>true</bool>\n     </property>\n     <widget class=\"QWidget\" name=\"scrollAreaWidgetContents\">\n      <property name=\"geometry\">\n       <rect>\n        <x>0</x>\n        <y>0</y>\n        <width>901</width>\n        <height>641</height>\n       </rect>\n      </property>\n      <layout class=\"QVBoxLayout\" name=\"verticalLayout_2\">\n       <property name=\"spacing\">\n        <number>0</number>\n       </property>\n       <property name=\"leftMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"topMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"rightMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"bottomMargin\">\n        <number>0</number>\n       </property>\n       <item alignment=\"Qt::AlignHCenter\">\n        <widget class=\"QWidget\" name=\"layoutsWidget\" native=\"true\">\n         <layout class=\"QVBoxLayout\" name=\"verticalLayout_3\">\n          <property name=\"leftMargin\">\n           <number>0</number>\n          </property>\n          <property name=\"topMargin\">\n           <number>0</number>\n          </property>\n          <property name=\"rightMargin\">\n           <number>0</number>\n          </property>\n          <property name=\"bottomMargin\">\n           <number>9</number>\n          </property>\n          <item>\n           <layout class=\"QVBoxLayout\" name=\"verticalLayout_4\">\n            <property name=\"leftMargin\">\n             <number>9</number>\n            </property>\n            <property name=\"topMargin\">\n             <number>9</number>\n            </property>\n            <property name=\"rightMargin\">\n             <number>9</number>\n            </property>\n            <item>\n             <widget class=\"QLabel\" name=\"label\">\n              <property name=\"font\">\n               <font>\n                <bold>true</bold>\n               </font>\n              </property>\n              <property name=\"text\">\n               <string>LAYOUTS</string>\n              </property>\n             </widget>\n            </item>\n            <item>\n             <widget class=\"QLabel\" name=\"label_3\">\n              <property name=\"text\">\n               <string>Prioritise the keyboard layouts you'd like to use on your device. You can switch between keyboard layouts with SUPER+Space</string>\n              </property>\n              <property name=\"wordWrap\">\n               <bool>true</bool>\n              </property>\n             </widget>\n            </item>\n            <item>\n             <widget class=\"QListView\" name=\"layoutsList\">\n              <property name=\"contextMenuPolicy\">\n               <enum>Qt::CustomContextMenu</enum>\n              </property>\n              <property name=\"frameShape\">\n               <enum>QFrame::NoFrame</enum>\n              </property>\n             </widget>\n            </item>\n           </layout>\n          </item>\n          <item>\n           <widget class=\"QPushButton\" name=\"addLayoutButton\">\n            <property name=\"text\">\n             <string>Add Layout</string>\n            </property>\n            <property name=\"icon\">\n             <iconset theme=\"list-add\">\n              <normaloff>../../LocalePlugin/settings</normaloff>../../LocalePlugin/settings</iconset>\n            </property>\n           </widget>\n          </item>\n         </layout>\n        </widget>\n       </item>\n       <item>\n        <spacer name=\"verticalSpacer\">\n         <property name=\"orientation\">\n          <enum>Qt::Vertical</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>20</width>\n           <height>40</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n      </layout>\n     </widget>\n    </widget>\n   </item>\n  </layout>\n </widget>\n <customwidgets>\n  <customwidget>\n   <class>tTitleLabel</class>\n   <extends>QLabel</extends>\n   <header location=\"global\">ttitlelabel.h</header>\n   <slots>\n    <signal>backButtonClicked()</signal>\n   </slots>\n  </customwidget>\n </customwidgets>\n <resources/>\n <connections/>\n</ui>\n"
  },
  {
    "path": "plugins/InputPlugin/settings/mousesettings.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"mousesettings.h\"\n#include \"ui_mousesettings.h\"\n\n#include <statemanager.h>\n#include <statuscentermanager.h>\n#include <tsettings.h>\n#include \"../backends/settingsbackend.h\"\n\nstruct MouseSettingsPrivate {\n    SettingsBackend* backend;\n    tSettings settings;\n};\n\nMouseSettings::MouseSettings(QWidget* parent) :\n    QWidget(parent),\n    ui(new Ui::MouseSettings) {\n    ui->setupUi(this);\n    d = new MouseSettingsPrivate();\n\n    ui->titleLabel->setBackButtonIsMenu(true);\n    ui->titleLabel->setBackButtonShown(StateManager::instance()->statusCenterManager()->isHamburgerMenuRequired());\n    connect(StateManager::instance()->statusCenterManager(), &StatusCenterManager::isHamburgerMenuRequiredChanged, ui->titleLabel, &tTitleLabel::setBackButtonShown);\n\n    const int contentWidth = StateManager::instance()->statusCenterManager()->preferredContentWidth();\n    ui->clickingWidget->setFixedWidth(contentWidth);\n    ui->scrollingWidget->setFixedWidth(contentWidth);\n\n    d->backend = SettingsBackend::backendForPlatform();\n    if (!d->backend) {\n        ui->stackedWidget->setCurrentIndex(1);\n    } else {\n        ui->stackedWidget->setCurrentIndex(0);\n\n        connect(&d->settings, &tSettings::settingChanged, this, [ = ](QString key, QVariant value) {\n            Q_UNUSED(value);\n            updateSettings(key);\n        });\n        updateAllSettings();\n    }\n}\n\nMouseSettings::~MouseSettings() {\n    delete d;\n    delete ui;\n}\n\nvoid MouseSettings::on_titleLabel_backButtonClicked() {\n    StateManager::statusCenterManager()->showStatusCenterHamburgerMenu();\n}\n\nvoid MouseSettings::on_leftPrimaryButton_toggled(bool checked) {\n    if (checked) {\n        d->settings.setValue(\"Input/mouse.primary\", \"left\");\n    }\n}\n\nvoid MouseSettings::on_rightPrimaryButton_toggled(bool checked) {\n    if (checked) {\n        d->settings.setValue(\"Input/mouse.primary\", \"right\");\n    }\n}\n\nvoid MouseSettings::updateSettings(QString key) {\n    QVariant value = d->settings.value(key);\n    if (key == \"Input/mouse.primary\") {\n        if (value == \"right\") {\n            d->backend->setPrimaryMouseButton(SettingsBackend::RightMouseButton);\n            d->backend->setPrimaryTouchpadButton(SettingsBackend::RightMouseButton);\n            ui->rightPrimaryButton->setChecked(true);\n        } else {\n            d->backend->setPrimaryMouseButton(SettingsBackend::LeftMouseButton);\n            d->backend->setPrimaryTouchpadButton(SettingsBackend::LeftMouseButton);\n            ui->leftPrimaryButton->setChecked(true);\n        }\n    } else if (key == \"Input/touchpad.tapClick\") {\n        d->backend->setTapToClick(value.toBool());\n        ui->tapToClickSwitch->setChecked(value.toBool());\n    } else if (key == \"Input/touchpad.naturalScroll\") {\n        d->backend->setNaturalScrolling(value.toBool());\n        ui->naturalScrollingSwitch->setChecked(value.toBool());\n    }\n}\n\nvoid MouseSettings::updateAllSettings() {\n    updateSettings(\"Input/mouse.primary\");\n    updateSettings(\"Input/touchpad.tapClick\");\n    updateSettings(\"Input/touchpad.naturalScroll\");\n}\n\nvoid MouseSettings::on_tapToClickSwitch_toggled(bool checked) {\n    d->settings.setValue(\"Input/touchpad.tapClick\", checked);\n}\n\nvoid MouseSettings::on_naturalScrollingSwitch_toggled(bool checked) {\n    d->settings.setValue(\"Input/touchpad.naturalScroll\", checked);\n}\n\n\nvoid MouseSettings::changeEvent(QEvent* event) {\n    if (event->type() == QEvent::LanguageChange) {\n        ui->retranslateUi(this);\n    }\n}\n"
  },
  {
    "path": "plugins/InputPlugin/settings/mousesettings.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef MOUSESETTINGS_H\n#define MOUSESETTINGS_H\n\n#include <QWidget>\n\nnamespace Ui {\n    class MouseSettings;\n}\n\nstruct MouseSettingsPrivate;\nclass MouseSettings : public QWidget {\n        Q_OBJECT\n\n    public:\n        explicit MouseSettings(QWidget* parent = nullptr);\n        ~MouseSettings();\n\n    private slots:\n        void on_titleLabel_backButtonClicked();\n\n        void on_leftPrimaryButton_toggled(bool checked);\n\n        void on_rightPrimaryButton_toggled(bool checked);\n\n        void on_tapToClickSwitch_toggled(bool checked);\n\n        void on_naturalScrollingSwitch_toggled(bool checked);\n\n    private:\n        Ui::MouseSettings* ui;\n        MouseSettingsPrivate* d;\n\n        void updateSettings(QString key);\n        void updateAllSettings();\n\n        // QWidget interface\n    protected:\n        void changeEvent(QEvent* event);\n};\n\n#endif // MOUSESETTINGS_H\n"
  },
  {
    "path": "plugins/InputPlugin/settings/mousesettings.ui",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ui version=\"4.0\">\n <class>MouseSettings</class>\n <widget class=\"QWidget\" name=\"MouseSettings\">\n  <property name=\"geometry\">\n   <rect>\n    <x>0</x>\n    <y>0</y>\n    <width>400</width>\n    <height>300</height>\n   </rect>\n  </property>\n  <property name=\"windowTitle\">\n   <string notr=\"true\">Form</string>\n  </property>\n  <layout class=\"QVBoxLayout\" name=\"verticalLayout\">\n   <property name=\"spacing\">\n    <number>0</number>\n   </property>\n   <property name=\"leftMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"topMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"rightMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"bottomMargin\">\n    <number>0</number>\n   </property>\n   <item>\n    <widget class=\"tTitleLabel\" name=\"titleLabel\">\n     <property name=\"text\">\n      <string>Mouse and Touchpad</string>\n     </property>\n    </widget>\n   </item>\n   <item>\n    <widget class=\"QStackedWidget\" name=\"stackedWidget\">\n     <property name=\"currentIndex\">\n      <number>0</number>\n     </property>\n     <widget class=\"QWidget\" name=\"page_3\">\n      <layout class=\"QVBoxLayout\" name=\"verticalLayout_3\">\n       <property name=\"spacing\">\n        <number>0</number>\n       </property>\n       <property name=\"leftMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"topMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"rightMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"bottomMargin\">\n        <number>0</number>\n       </property>\n       <item>\n        <widget class=\"QScrollArea\" name=\"scrollArea\">\n         <property name=\"frameShape\">\n          <enum>QFrame::NoFrame</enum>\n         </property>\n         <property name=\"widgetResizable\">\n          <bool>true</bool>\n         </property>\n         <widget class=\"QWidget\" name=\"scrollAreaWidgetContents\">\n          <property name=\"geometry\">\n           <rect>\n            <x>0</x>\n            <y>0</y>\n            <width>386</width>\n            <height>366</height>\n           </rect>\n          </property>\n          <layout class=\"QVBoxLayout\" name=\"verticalLayout_2\">\n           <property name=\"spacing\">\n            <number>0</number>\n           </property>\n           <property name=\"leftMargin\">\n            <number>0</number>\n           </property>\n           <property name=\"topMargin\">\n            <number>0</number>\n           </property>\n           <property name=\"rightMargin\">\n            <number>0</number>\n           </property>\n           <property name=\"bottomMargin\">\n            <number>0</number>\n           </property>\n           <item alignment=\"Qt::AlignHCenter\">\n            <widget class=\"QWidget\" name=\"clickingWidget\" native=\"true\">\n             <layout class=\"QGridLayout\" name=\"gridLayout\">\n              <item row=\"0\" column=\"0\" colspan=\"2\">\n               <widget class=\"QLabel\" name=\"label\">\n                <property name=\"font\">\n                 <font>\n                  <bold>true</bold>\n                 </font>\n                </property>\n                <property name=\"text\">\n                 <string>CLICKING</string>\n                </property>\n               </widget>\n              </item>\n              <item row=\"1\" column=\"1\">\n               <layout class=\"QHBoxLayout\" name=\"horizontalLayout_2\">\n                <property name=\"spacing\">\n                 <number>0</number>\n                </property>\n                <item>\n                 <widget class=\"QPushButton\" name=\"leftPrimaryButton\">\n                  <property name=\"text\">\n                   <string>Left</string>\n                  </property>\n                  <property name=\"checkable\">\n                   <bool>true</bool>\n                  </property>\n                  <property name=\"autoExclusive\">\n                   <bool>true</bool>\n                  </property>\n                 </widget>\n                </item>\n                <item>\n                 <widget class=\"QPushButton\" name=\"rightPrimaryButton\">\n                  <property name=\"text\">\n                   <string>Right</string>\n                  </property>\n                  <property name=\"checkable\">\n                   <bool>true</bool>\n                  </property>\n                  <property name=\"autoExclusive\">\n                   <bool>true</bool>\n                  </property>\n                 </widget>\n                </item>\n               </layout>\n              </item>\n              <item row=\"1\" column=\"0\">\n               <widget class=\"QLabel\" name=\"label_2\">\n                <property name=\"sizePolicy\">\n                 <sizepolicy hsizetype=\"Expanding\" vsizetype=\"Preferred\">\n                  <horstretch>0</horstretch>\n                  <verstretch>0</verstretch>\n                 </sizepolicy>\n                </property>\n                <property name=\"text\">\n                 <string>Primary Button</string>\n                </property>\n               </widget>\n              </item>\n              <item row=\"2\" column=\"0\">\n               <widget class=\"QLabel\" name=\"label_3\">\n                <property name=\"text\">\n                 <string>Tap to Click</string>\n                </property>\n               </widget>\n              </item>\n              <item row=\"2\" column=\"1\" alignment=\"Qt::AlignRight\">\n               <widget class=\"tSwitch\" name=\"tapToClickSwitch\">\n                <property name=\"text\">\n                 <string notr=\"true\">TapToClick</string>\n                </property>\n               </widget>\n              </item>\n             </layout>\n            </widget>\n           </item>\n           <item>\n            <widget class=\"Line\" name=\"line\">\n             <property name=\"maximumSize\">\n              <size>\n               <width>16777215</width>\n               <height>1</height>\n              </size>\n             </property>\n             <property name=\"orientation\">\n              <enum>Qt::Horizontal</enum>\n             </property>\n            </widget>\n           </item>\n           <item alignment=\"Qt::AlignHCenter\">\n            <widget class=\"QWidget\" name=\"scrollingWidget\" native=\"true\">\n             <layout class=\"QGridLayout\" name=\"gridLayout_2\">\n              <item row=\"1\" column=\"1\">\n               <widget class=\"tSwitch\" name=\"naturalScrollingSwitch\">\n                <property name=\"text\">\n                 <string notr=\"true\">NaturalScrolling</string>\n                </property>\n               </widget>\n              </item>\n              <item row=\"1\" column=\"0\">\n               <widget class=\"QLabel\" name=\"label_7\">\n                <property name=\"sizePolicy\">\n                 <sizepolicy hsizetype=\"Expanding\" vsizetype=\"Preferred\">\n                  <horstretch>0</horstretch>\n                  <verstretch>0</verstretch>\n                 </sizepolicy>\n                </property>\n                <property name=\"text\">\n                 <string>Natural Scrolling</string>\n                </property>\n               </widget>\n              </item>\n              <item row=\"0\" column=\"0\" colspan=\"2\">\n               <widget class=\"QLabel\" name=\"label_6\">\n                <property name=\"font\">\n                 <font>\n                  <bold>true</bold>\n                 </font>\n                </property>\n                <property name=\"text\">\n                 <string>SCROLLING</string>\n                </property>\n               </widget>\n              </item>\n              <item row=\"2\" column=\"0\" colspan=\"2\">\n               <widget class=\"QLabel\" name=\"label_8\">\n                <property name=\"enabled\">\n                 <bool>false</bool>\n                </property>\n                <property name=\"text\">\n                 <string>Reverse the direction that you scroll in so that the content moves in the same direction as your fingers.</string>\n                </property>\n                <property name=\"wordWrap\">\n                 <bool>true</bool>\n                </property>\n               </widget>\n              </item>\n             </layout>\n            </widget>\n           </item>\n           <item>\n            <spacer name=\"verticalSpacer\">\n             <property name=\"orientation\">\n              <enum>Qt::Vertical</enum>\n             </property>\n             <property name=\"sizeHint\" stdset=\"0\">\n              <size>\n               <width>20</width>\n               <height>181</height>\n              </size>\n             </property>\n            </spacer>\n           </item>\n          </layout>\n         </widget>\n        </widget>\n       </item>\n      </layout>\n     </widget>\n     <widget class=\"QWidget\" name=\"page_4\">\n      <layout class=\"QVBoxLayout\" name=\"verticalLayout_4\">\n       <item>\n        <spacer name=\"verticalSpacer_2\">\n         <property name=\"orientation\">\n          <enum>Qt::Vertical</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>20</width>\n           <height>96</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n       <item>\n        <widget class=\"QLabel\" name=\"label_4\">\n         <property name=\"font\">\n          <font>\n           <pointsize>20</pointsize>\n          </font>\n         </property>\n         <property name=\"text\">\n          <string>Settings Unavailable</string>\n         </property>\n         <property name=\"alignment\">\n          <set>Qt::AlignCenter</set>\n         </property>\n        </widget>\n       </item>\n       <item>\n        <widget class=\"QLabel\" name=\"label_5\">\n         <property name=\"text\">\n          <string>Mouse settings can't be changed on this platform.</string>\n         </property>\n         <property name=\"alignment\">\n          <set>Qt::AlignCenter</set>\n         </property>\n        </widget>\n       </item>\n       <item>\n        <spacer name=\"verticalSpacer_3\">\n         <property name=\"orientation\">\n          <enum>Qt::Vertical</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>20</width>\n           <height>95</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n      </layout>\n     </widget>\n    </widget>\n   </item>\n  </layout>\n </widget>\n <customwidgets>\n  <customwidget>\n   <class>tTitleLabel</class>\n   <extends>QLabel</extends>\n   <header location=\"global\">ttitlelabel.h</header>\n   <slots>\n    <signal>backButtonClicked()</signal>\n   </slots>\n  </customwidget>\n  <customwidget>\n   <class>tSwitch</class>\n   <extends>QPushButton</extends>\n   <header location=\"global\">tswitch.h</header>\n  </customwidget>\n </customwidgets>\n <resources/>\n <connections/>\n</ui>\n"
  },
  {
    "path": "plugins/InputPlugin/thedesk-input.conf",
    "content": "[Input]\nmouse.primary=left\ntouchpad.tapClick=true\ntouchpad.naturalScroll=true\nkeyboard.layouts=us(basic)\n"
  },
  {
    "path": "plugins/InputPlugin/translations/ar_SA.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"ar_SA\" sourcelanguage=\"en_US\">\n<context>\n    <name>InputSettingsLeftPane</name>\n    <message>\n        <location filename=\"../settings/inputsettingsleftpane.ui\" line=\"35\"/>\n        <source>Input</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/inputsettingsleftpane.ui\" line=\"46\"/>\n        <source>Mouse and Touchpad</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/inputsettingsleftpane.ui\" line=\"55\"/>\n        <source>Keyboard</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>InputSettingsPane</name>\n    <message>\n        <location filename=\"../settings/inputsettingspane.cpp\" line=\"55\"/>\n        <source>Input</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>KeyboardDaemon</name>\n    <message>\n        <location filename=\"../daemons/keyboarddaemon.cpp\" line=\"83\"/>\n        <source>Keyboard Layout</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>KeyboardLayoutChunk</name>\n    <message>\n        <location filename=\"../chunks/keyboardlayoutchunk.cpp\" line=\"75\"/>\n        <source>Select Keyboard Layout</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>KeyboardSettings</name>\n    <message>\n        <location filename=\"../settings/keyboardsettings.ui\" line=\"35\"/>\n        <source>Keyboard</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/keyboardsettings.ui\" line=\"106\"/>\n        <source>LAYOUTS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/keyboardsettings.ui\" line=\"113\"/>\n        <source>Prioritise the keyboard layouts you&apos;d like to use on your device. You can switch between keyboard layouts with SUPER+Space</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/keyboardsettings.ui\" line=\"135\"/>\n        <source>Add Layout</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/keyboardsettings.cpp\" line=\"77\"/>\n        <source>For this layout</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/keyboardsettings.cpp\" line=\"78\"/>\n        <source>Move Up</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/keyboardsettings.cpp\" line=\"81\"/>\n        <source>Move Down</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/keyboardsettings.cpp\" line=\"84\"/>\n        <source>Remove</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>MouseSettings</name>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"35\"/>\n        <source>Mouse and Touchpad</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"105\"/>\n        <source>CLICKING</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"117\"/>\n        <source>Left</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"130\"/>\n        <source>Right</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"151\"/>\n        <source>Primary Button</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"158\"/>\n        <source>Tap to Click</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"204\"/>\n        <source>Natural Scrolling</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"216\"/>\n        <source>SCROLLING</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"226\"/>\n        <source>Reverse the direction that you scroll in so that the content moves in the same direction as your fingers.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"278\"/>\n        <source>Settings Unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"288\"/>\n        <source>Mouse settings can&apos;t be changed on this platform.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/InputPlugin/translations/au_AU.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"au_AU\" sourcelanguage=\"en_US\">\n<context>\n    <name>InputSettingsLeftPane</name>\n    <message>\n        <location filename=\"../settings/inputsettingsleftpane.ui\" line=\"35\"/>\n        <source>Input</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/inputsettingsleftpane.ui\" line=\"46\"/>\n        <source>Mouse and Touchpad</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/inputsettingsleftpane.ui\" line=\"55\"/>\n        <source>Keyboard</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>InputSettingsPane</name>\n    <message>\n        <location filename=\"../settings/inputsettingspane.cpp\" line=\"55\"/>\n        <source>Input</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>KeyboardDaemon</name>\n    <message>\n        <location filename=\"../daemons/keyboarddaemon.cpp\" line=\"83\"/>\n        <source>Keyboard Layout</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>KeyboardLayoutChunk</name>\n    <message>\n        <location filename=\"../chunks/keyboardlayoutchunk.cpp\" line=\"75\"/>\n        <source>Select Keyboard Layout</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>KeyboardSettings</name>\n    <message>\n        <location filename=\"../settings/keyboardsettings.ui\" line=\"35\"/>\n        <source>Keyboard</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/keyboardsettings.ui\" line=\"106\"/>\n        <source>LAYOUTS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/keyboardsettings.ui\" line=\"113\"/>\n        <source>Prioritise the keyboard layouts you&apos;d like to use on your device. You can switch between keyboard layouts with SUPER+Space</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/keyboardsettings.ui\" line=\"135\"/>\n        <source>Add Layout</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/keyboardsettings.cpp\" line=\"77\"/>\n        <source>For this layout</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/keyboardsettings.cpp\" line=\"78\"/>\n        <source>Move Up</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/keyboardsettings.cpp\" line=\"81\"/>\n        <source>Move Down</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/keyboardsettings.cpp\" line=\"84\"/>\n        <source>Remove</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>MouseSettings</name>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"35\"/>\n        <source>Mouse and Touchpad</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"105\"/>\n        <source>CLICKING</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"117\"/>\n        <source>Left</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"130\"/>\n        <source>Right</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"151\"/>\n        <source>Primary Button</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"158\"/>\n        <source>Tap to Click</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"204\"/>\n        <source>Natural Scrolling</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"216\"/>\n        <source>SCROLLING</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"226\"/>\n        <source>Reverse the direction that you scroll in so that the content moves in the same direction as your fingers.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"278\"/>\n        <source>Settings Unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"288\"/>\n        <source>Mouse settings can&apos;t be changed on this platform.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/InputPlugin/translations/cy.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"cy\" sourcelanguage=\"en_US\">\n<context>\n    <name>InputSettingsLeftPane</name>\n    <message>\n        <location filename=\"../settings/inputsettingsleftpane.ui\" line=\"35\"/>\n        <source>Input</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/inputsettingsleftpane.ui\" line=\"46\"/>\n        <source>Mouse and Touchpad</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/inputsettingsleftpane.ui\" line=\"55\"/>\n        <source>Keyboard</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>InputSettingsPane</name>\n    <message>\n        <location filename=\"../settings/inputsettingspane.cpp\" line=\"55\"/>\n        <source>Input</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>KeyboardDaemon</name>\n    <message>\n        <location filename=\"../daemons/keyboarddaemon.cpp\" line=\"83\"/>\n        <source>Keyboard Layout</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>KeyboardLayoutChunk</name>\n    <message>\n        <location filename=\"../chunks/keyboardlayoutchunk.cpp\" line=\"75\"/>\n        <source>Select Keyboard Layout</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>KeyboardSettings</name>\n    <message>\n        <location filename=\"../settings/keyboardsettings.ui\" line=\"35\"/>\n        <source>Keyboard</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/keyboardsettings.ui\" line=\"106\"/>\n        <source>LAYOUTS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/keyboardsettings.ui\" line=\"113\"/>\n        <source>Prioritise the keyboard layouts you&apos;d like to use on your device. You can switch between keyboard layouts with SUPER+Space</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/keyboardsettings.ui\" line=\"135\"/>\n        <source>Add Layout</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/keyboardsettings.cpp\" line=\"77\"/>\n        <source>For this layout</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/keyboardsettings.cpp\" line=\"78\"/>\n        <source>Move Up</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/keyboardsettings.cpp\" line=\"81\"/>\n        <source>Move Down</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/keyboardsettings.cpp\" line=\"84\"/>\n        <source>Remove</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>MouseSettings</name>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"35\"/>\n        <source>Mouse and Touchpad</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"105\"/>\n        <source>CLICKING</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"117\"/>\n        <source>Left</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"130\"/>\n        <source>Right</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"151\"/>\n        <source>Primary Button</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"158\"/>\n        <source>Tap to Click</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"204\"/>\n        <source>Natural Scrolling</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"216\"/>\n        <source>SCROLLING</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"226\"/>\n        <source>Reverse the direction that you scroll in so that the content moves in the same direction as your fingers.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"278\"/>\n        <source>Settings Unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"288\"/>\n        <source>Mouse settings can&apos;t be changed on this platform.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/InputPlugin/translations/da.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"da\" sourcelanguage=\"en_US\">\n<context>\n    <name>InputSettingsLeftPane</name>\n    <message>\n        <location filename=\"../settings/inputsettingsleftpane.ui\" line=\"35\"/>\n        <source>Input</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/inputsettingsleftpane.ui\" line=\"46\"/>\n        <source>Mouse and Touchpad</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/inputsettingsleftpane.ui\" line=\"55\"/>\n        <source>Keyboard</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>InputSettingsPane</name>\n    <message>\n        <location filename=\"../settings/inputsettingspane.cpp\" line=\"55\"/>\n        <source>Input</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>KeyboardDaemon</name>\n    <message>\n        <location filename=\"../daemons/keyboarddaemon.cpp\" line=\"83\"/>\n        <source>Keyboard Layout</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>KeyboardLayoutChunk</name>\n    <message>\n        <location filename=\"../chunks/keyboardlayoutchunk.cpp\" line=\"75\"/>\n        <source>Select Keyboard Layout</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>KeyboardSettings</name>\n    <message>\n        <location filename=\"../settings/keyboardsettings.ui\" line=\"35\"/>\n        <source>Keyboard</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/keyboardsettings.ui\" line=\"106\"/>\n        <source>LAYOUTS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/keyboardsettings.ui\" line=\"113\"/>\n        <source>Prioritise the keyboard layouts you&apos;d like to use on your device. You can switch between keyboard layouts with SUPER+Space</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/keyboardsettings.ui\" line=\"135\"/>\n        <source>Add Layout</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/keyboardsettings.cpp\" line=\"77\"/>\n        <source>For this layout</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/keyboardsettings.cpp\" line=\"78\"/>\n        <source>Move Up</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/keyboardsettings.cpp\" line=\"81\"/>\n        <source>Move Down</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/keyboardsettings.cpp\" line=\"84\"/>\n        <source>Remove</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>MouseSettings</name>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"35\"/>\n        <source>Mouse and Touchpad</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"105\"/>\n        <source>CLICKING</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"117\"/>\n        <source>Left</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"130\"/>\n        <source>Right</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"151\"/>\n        <source>Primary Button</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"158\"/>\n        <source>Tap to Click</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"204\"/>\n        <source>Natural Scrolling</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"216\"/>\n        <source>SCROLLING</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"226\"/>\n        <source>Reverse the direction that you scroll in so that the content moves in the same direction as your fingers.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"278\"/>\n        <source>Settings Unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"288\"/>\n        <source>Mouse settings can&apos;t be changed on this platform.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/InputPlugin/translations/de.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"de\" sourcelanguage=\"en_US\">\n<context>\n    <name>InputSettingsLeftPane</name>\n    <message>\n        <location filename=\"../settings/inputsettingsleftpane.ui\" line=\"35\"/>\n        <source>Input</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/inputsettingsleftpane.ui\" line=\"46\"/>\n        <source>Mouse and Touchpad</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/inputsettingsleftpane.ui\" line=\"55\"/>\n        <source>Keyboard</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>InputSettingsPane</name>\n    <message>\n        <location filename=\"../settings/inputsettingspane.cpp\" line=\"55\"/>\n        <source>Input</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>KeyboardDaemon</name>\n    <message>\n        <location filename=\"../daemons/keyboarddaemon.cpp\" line=\"83\"/>\n        <source>Keyboard Layout</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>KeyboardLayoutChunk</name>\n    <message>\n        <location filename=\"../chunks/keyboardlayoutchunk.cpp\" line=\"75\"/>\n        <source>Select Keyboard Layout</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>KeyboardSettings</name>\n    <message>\n        <location filename=\"../settings/keyboardsettings.ui\" line=\"35\"/>\n        <source>Keyboard</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/keyboardsettings.ui\" line=\"106\"/>\n        <source>LAYOUTS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/keyboardsettings.ui\" line=\"113\"/>\n        <source>Prioritise the keyboard layouts you&apos;d like to use on your device. You can switch between keyboard layouts with SUPER+Space</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/keyboardsettings.ui\" line=\"135\"/>\n        <source>Add Layout</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/keyboardsettings.cpp\" line=\"77\"/>\n        <source>For this layout</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/keyboardsettings.cpp\" line=\"78\"/>\n        <source>Move Up</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/keyboardsettings.cpp\" line=\"81\"/>\n        <source>Move Down</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/keyboardsettings.cpp\" line=\"84\"/>\n        <source>Remove</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>MouseSettings</name>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"35\"/>\n        <source>Mouse and Touchpad</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"105\"/>\n        <source>CLICKING</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"117\"/>\n        <source>Left</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"130\"/>\n        <source>Right</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"151\"/>\n        <source>Primary Button</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"158\"/>\n        <source>Tap to Click</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"204\"/>\n        <source>Natural Scrolling</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"216\"/>\n        <source>SCROLLING</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"226\"/>\n        <source>Reverse the direction that you scroll in so that the content moves in the same direction as your fingers.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"278\"/>\n        <source>Settings Unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"288\"/>\n        <source>Mouse settings can&apos;t be changed on this platform.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/InputPlugin/translations/en_US.qm",
    "content": "<d\u0018!\u001c`"
  },
  {
    "path": "plugins/InputPlugin/translations/en_US.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" sourcelanguage=\"en_US\">\n<context>\n    <name>InputSettingsLeftPane</name>\n    <message>\n        <location filename=\"../settings/inputsettingsleftpane.ui\" line=\"35\"/>\n        <source>Input</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/inputsettingsleftpane.ui\" line=\"46\"/>\n        <source>Mouse and Touchpad</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/inputsettingsleftpane.ui\" line=\"55\"/>\n        <source>Keyboard</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>InputSettingsPane</name>\n    <message>\n        <location filename=\"../settings/inputsettingspane.cpp\" line=\"55\"/>\n        <source>Input</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>KeyboardDaemon</name>\n    <message>\n        <location filename=\"../daemons/keyboarddaemon.cpp\" line=\"83\"/>\n        <source>Keyboard Layout</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>KeyboardLayoutChunk</name>\n    <message>\n        <location filename=\"../chunks/keyboardlayoutchunk.cpp\" line=\"75\"/>\n        <source>Select Keyboard Layout</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>KeyboardSettings</name>\n    <message>\n        <location filename=\"../settings/keyboardsettings.ui\" line=\"35\"/>\n        <source>Keyboard</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/keyboardsettings.ui\" line=\"106\"/>\n        <source>LAYOUTS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/keyboardsettings.ui\" line=\"113\"/>\n        <source>Prioritise the keyboard layouts you&apos;d like to use on your device. You can switch between keyboard layouts with SUPER+Space</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/keyboardsettings.ui\" line=\"135\"/>\n        <source>Add Layout</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/keyboardsettings.cpp\" line=\"77\"/>\n        <source>For this layout</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/keyboardsettings.cpp\" line=\"78\"/>\n        <source>Move Up</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/keyboardsettings.cpp\" line=\"81\"/>\n        <source>Move Down</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/keyboardsettings.cpp\" line=\"84\"/>\n        <source>Remove</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>MouseSettings</name>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"35\"/>\n        <source>Mouse and Touchpad</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"105\"/>\n        <source>CLICKING</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"117\"/>\n        <source>Left</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"130\"/>\n        <source>Right</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"151\"/>\n        <source>Primary Button</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"158\"/>\n        <source>Tap to Click</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"204\"/>\n        <source>Natural Scrolling</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"216\"/>\n        <source>SCROLLING</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"226\"/>\n        <source>Reverse the direction that you scroll in so that the content moves in the same direction as your fingers.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"278\"/>\n        <source>Settings Unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"288\"/>\n        <source>Mouse settings can&apos;t be changed on this platform.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/InputPlugin/translations/es.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"es\" sourcelanguage=\"en_US\">\n<context>\n    <name>InputSettingsLeftPane</name>\n    <message>\n        <location filename=\"../settings/inputsettingsleftpane.ui\" line=\"35\"/>\n        <source>Input</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/inputsettingsleftpane.ui\" line=\"46\"/>\n        <source>Mouse and Touchpad</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/inputsettingsleftpane.ui\" line=\"55\"/>\n        <source>Keyboard</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>InputSettingsPane</name>\n    <message>\n        <location filename=\"../settings/inputsettingspane.cpp\" line=\"55\"/>\n        <source>Input</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>KeyboardDaemon</name>\n    <message>\n        <location filename=\"../daemons/keyboarddaemon.cpp\" line=\"83\"/>\n        <source>Keyboard Layout</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>KeyboardLayoutChunk</name>\n    <message>\n        <location filename=\"../chunks/keyboardlayoutchunk.cpp\" line=\"75\"/>\n        <source>Select Keyboard Layout</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>KeyboardSettings</name>\n    <message>\n        <location filename=\"../settings/keyboardsettings.ui\" line=\"35\"/>\n        <source>Keyboard</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/keyboardsettings.ui\" line=\"106\"/>\n        <source>LAYOUTS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/keyboardsettings.ui\" line=\"113\"/>\n        <source>Prioritise the keyboard layouts you&apos;d like to use on your device. You can switch between keyboard layouts with SUPER+Space</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/keyboardsettings.ui\" line=\"135\"/>\n        <source>Add Layout</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/keyboardsettings.cpp\" line=\"77\"/>\n        <source>For this layout</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/keyboardsettings.cpp\" line=\"78\"/>\n        <source>Move Up</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/keyboardsettings.cpp\" line=\"81\"/>\n        <source>Move Down</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/keyboardsettings.cpp\" line=\"84\"/>\n        <source>Remove</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>MouseSettings</name>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"35\"/>\n        <source>Mouse and Touchpad</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"105\"/>\n        <source>CLICKING</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"117\"/>\n        <source>Left</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"130\"/>\n        <source>Right</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"151\"/>\n        <source>Primary Button</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"158\"/>\n        <source>Tap to Click</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"204\"/>\n        <source>Natural Scrolling</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"216\"/>\n        <source>SCROLLING</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"226\"/>\n        <source>Reverse the direction that you scroll in so that the content moves in the same direction as your fingers.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"278\"/>\n        <source>Settings Unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"288\"/>\n        <source>Mouse settings can&apos;t be changed on this platform.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/InputPlugin/translations/es_VE.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"es_VE\" sourcelanguage=\"en_US\">\n<context>\n    <name>InputSettingsLeftPane</name>\n    <message>\n        <location filename=\"../settings/inputsettingsleftpane.ui\" line=\"35\"/>\n        <source>Input</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/inputsettingsleftpane.ui\" line=\"46\"/>\n        <source>Mouse and Touchpad</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/inputsettingsleftpane.ui\" line=\"55\"/>\n        <source>Keyboard</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>InputSettingsPane</name>\n    <message>\n        <location filename=\"../settings/inputsettingspane.cpp\" line=\"55\"/>\n        <source>Input</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>KeyboardDaemon</name>\n    <message>\n        <location filename=\"../daemons/keyboarddaemon.cpp\" line=\"83\"/>\n        <source>Keyboard Layout</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>KeyboardLayoutChunk</name>\n    <message>\n        <location filename=\"../chunks/keyboardlayoutchunk.cpp\" line=\"75\"/>\n        <source>Select Keyboard Layout</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>KeyboardSettings</name>\n    <message>\n        <location filename=\"../settings/keyboardsettings.ui\" line=\"35\"/>\n        <source>Keyboard</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/keyboardsettings.ui\" line=\"106\"/>\n        <source>LAYOUTS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/keyboardsettings.ui\" line=\"113\"/>\n        <source>Prioritise the keyboard layouts you&apos;d like to use on your device. You can switch between keyboard layouts with SUPER+Space</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/keyboardsettings.ui\" line=\"135\"/>\n        <source>Add Layout</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/keyboardsettings.cpp\" line=\"77\"/>\n        <source>For this layout</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/keyboardsettings.cpp\" line=\"78\"/>\n        <source>Move Up</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/keyboardsettings.cpp\" line=\"81\"/>\n        <source>Move Down</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/keyboardsettings.cpp\" line=\"84\"/>\n        <source>Remove</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>MouseSettings</name>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"35\"/>\n        <source>Mouse and Touchpad</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"105\"/>\n        <source>CLICKING</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"117\"/>\n        <source>Left</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"130\"/>\n        <source>Right</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"151\"/>\n        <source>Primary Button</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"158\"/>\n        <source>Tap to Click</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"204\"/>\n        <source>Natural Scrolling</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"216\"/>\n        <source>SCROLLING</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"226\"/>\n        <source>Reverse the direction that you scroll in so that the content moves in the same direction as your fingers.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"278\"/>\n        <source>Settings Unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"288\"/>\n        <source>Mouse settings can&apos;t be changed on this platform.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/InputPlugin/translations/id.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"id\" sourcelanguage=\"en_US\">\n<context>\n    <name>InputSettingsLeftPane</name>\n    <message>\n        <location filename=\"../settings/inputsettingsleftpane.ui\" line=\"35\"/>\n        <source>Input</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/inputsettingsleftpane.ui\" line=\"46\"/>\n        <source>Mouse and Touchpad</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/inputsettingsleftpane.ui\" line=\"55\"/>\n        <source>Keyboard</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>InputSettingsPane</name>\n    <message>\n        <location filename=\"../settings/inputsettingspane.cpp\" line=\"55\"/>\n        <source>Input</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>KeyboardDaemon</name>\n    <message>\n        <location filename=\"../daemons/keyboarddaemon.cpp\" line=\"83\"/>\n        <source>Keyboard Layout</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>KeyboardLayoutChunk</name>\n    <message>\n        <location filename=\"../chunks/keyboardlayoutchunk.cpp\" line=\"75\"/>\n        <source>Select Keyboard Layout</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>KeyboardSettings</name>\n    <message>\n        <location filename=\"../settings/keyboardsettings.ui\" line=\"35\"/>\n        <source>Keyboard</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/keyboardsettings.ui\" line=\"106\"/>\n        <source>LAYOUTS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/keyboardsettings.ui\" line=\"113\"/>\n        <source>Prioritise the keyboard layouts you&apos;d like to use on your device. You can switch between keyboard layouts with SUPER+Space</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/keyboardsettings.ui\" line=\"135\"/>\n        <source>Add Layout</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/keyboardsettings.cpp\" line=\"77\"/>\n        <source>For this layout</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/keyboardsettings.cpp\" line=\"78\"/>\n        <source>Move Up</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/keyboardsettings.cpp\" line=\"81\"/>\n        <source>Move Down</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/keyboardsettings.cpp\" line=\"84\"/>\n        <source>Remove</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>MouseSettings</name>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"35\"/>\n        <source>Mouse and Touchpad</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"105\"/>\n        <source>CLICKING</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"117\"/>\n        <source>Left</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"130\"/>\n        <source>Right</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"151\"/>\n        <source>Primary Button</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"158\"/>\n        <source>Tap to Click</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"204\"/>\n        <source>Natural Scrolling</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"216\"/>\n        <source>SCROLLING</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"226\"/>\n        <source>Reverse the direction that you scroll in so that the content moves in the same direction as your fingers.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"278\"/>\n        <source>Settings Unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"288\"/>\n        <source>Mouse settings can&apos;t be changed on this platform.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/InputPlugin/translations/nl.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"nl\" sourcelanguage=\"en_US\">\n<context>\n    <name>InputSettingsLeftPane</name>\n    <message>\n        <location filename=\"../settings/inputsettingsleftpane.ui\" line=\"35\"/>\n        <source>Input</source>\n        <translation>Input</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/inputsettingsleftpane.ui\" line=\"46\"/>\n        <source>Mouse and Touchpad</source>\n        <translation>Muis en Touchpad</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/inputsettingsleftpane.ui\" line=\"55\"/>\n        <source>Keyboard</source>\n        <translation>Toetsenbord</translation>\n    </message>\n</context>\n<context>\n    <name>InputSettingsPane</name>\n    <message>\n        <location filename=\"../settings/inputsettingspane.cpp\" line=\"55\"/>\n        <source>Input</source>\n        <translation>Input</translation>\n    </message>\n</context>\n<context>\n    <name>KeyboardDaemon</name>\n    <message>\n        <location filename=\"../daemons/keyboarddaemon.cpp\" line=\"83\"/>\n        <source>Keyboard Layout</source>\n        <translation>Toetsenbordindeling</translation>\n    </message>\n</context>\n<context>\n    <name>KeyboardLayoutChunk</name>\n    <message>\n        <location filename=\"../chunks/keyboardlayoutchunk.cpp\" line=\"75\"/>\n        <source>Select Keyboard Layout</source>\n        <translation>Toetsenbordindeling Selecteren</translation>\n    </message>\n</context>\n<context>\n    <name>KeyboardSettings</name>\n    <message>\n        <location filename=\"../settings/keyboardsettings.ui\" line=\"35\"/>\n        <source>Keyboard</source>\n        <translation>Toetsenbord</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/keyboardsettings.ui\" line=\"106\"/>\n        <source>LAYOUTS</source>\n        <translation>INDELINGEN</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/keyboardsettings.ui\" line=\"113\"/>\n        <source>Prioritise the keyboard layouts you&apos;d like to use on your device. You can switch between keyboard layouts with SUPER+Space</source>\n        <translation>Geef de toetsenbordindelingen die je op je apparaat wil gebruiken prioriteit. Je kunt tussen indelingen wisselen met SUPER+Spatie</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/keyboardsettings.ui\" line=\"135\"/>\n        <source>Add Layout</source>\n        <translation>Indeling Toevoegen</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/keyboardsettings.cpp\" line=\"77\"/>\n        <source>For this layout</source>\n        <translation>Voor deze indeling</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/keyboardsettings.cpp\" line=\"78\"/>\n        <source>Move Up</source>\n        <translation>Omhoog</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/keyboardsettings.cpp\" line=\"81\"/>\n        <source>Move Down</source>\n        <translation>Omlaag</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/keyboardsettings.cpp\" line=\"84\"/>\n        <source>Remove</source>\n        <translation>Weghalen</translation>\n    </message>\n</context>\n<context>\n    <name>MouseSettings</name>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"35\"/>\n        <source>Mouse and Touchpad</source>\n        <translation>Muis en Touchpad</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"105\"/>\n        <source>CLICKING</source>\n        <translation>KLIKKEN</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"117\"/>\n        <source>Left</source>\n        <translation>Links</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"130\"/>\n        <source>Right</source>\n        <translation>Rechts</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"151\"/>\n        <source>Primary Button</source>\n        <translation>Primaire Knop</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"158\"/>\n        <source>Tap to Click</source>\n        <translation>Aanraken om te Klikken</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"204\"/>\n        <source>Natural Scrolling</source>\n        <translation>Natuurlijk Scrollen</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"216\"/>\n        <source>SCROLLING</source>\n        <translation>SCROLLEN</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"226\"/>\n        <source>Reverse the direction that you scroll in so that the content moves in the same direction as your fingers.</source>\n        <translation>Draai de richting waarin je scrolt om, zodat de inhoud dezelfde kant op beweegt als je vingers.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"278\"/>\n        <source>Settings Unavailable</source>\n        <translation>Instellingen Niet Beschikbaar</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"288\"/>\n        <source>Mouse settings can&apos;t be changed on this platform.</source>\n        <translation>Muisinstellingen kunnen niet worden aangepast om dit platform.</translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/InputPlugin/translations/pt_BR.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"pt_BR\" sourcelanguage=\"en_US\">\n<context>\n    <name>InputSettingsLeftPane</name>\n    <message>\n        <location filename=\"../settings/inputsettingsleftpane.ui\" line=\"35\"/>\n        <source>Input</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/inputsettingsleftpane.ui\" line=\"46\"/>\n        <source>Mouse and Touchpad</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/inputsettingsleftpane.ui\" line=\"55\"/>\n        <source>Keyboard</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>InputSettingsPane</name>\n    <message>\n        <location filename=\"../settings/inputsettingspane.cpp\" line=\"55\"/>\n        <source>Input</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>KeyboardDaemon</name>\n    <message>\n        <location filename=\"../daemons/keyboarddaemon.cpp\" line=\"83\"/>\n        <source>Keyboard Layout</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>KeyboardLayoutChunk</name>\n    <message>\n        <location filename=\"../chunks/keyboardlayoutchunk.cpp\" line=\"75\"/>\n        <source>Select Keyboard Layout</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>KeyboardSettings</name>\n    <message>\n        <location filename=\"../settings/keyboardsettings.ui\" line=\"35\"/>\n        <source>Keyboard</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/keyboardsettings.ui\" line=\"106\"/>\n        <source>LAYOUTS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/keyboardsettings.ui\" line=\"113\"/>\n        <source>Prioritise the keyboard layouts you&apos;d like to use on your device. You can switch between keyboard layouts with SUPER+Space</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/keyboardsettings.ui\" line=\"135\"/>\n        <source>Add Layout</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/keyboardsettings.cpp\" line=\"77\"/>\n        <source>For this layout</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/keyboardsettings.cpp\" line=\"78\"/>\n        <source>Move Up</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/keyboardsettings.cpp\" line=\"81\"/>\n        <source>Move Down</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/keyboardsettings.cpp\" line=\"84\"/>\n        <source>Remove</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>MouseSettings</name>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"35\"/>\n        <source>Mouse and Touchpad</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"105\"/>\n        <source>CLICKING</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"117\"/>\n        <source>Left</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"130\"/>\n        <source>Right</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"151\"/>\n        <source>Primary Button</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"158\"/>\n        <source>Tap to Click</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"204\"/>\n        <source>Natural Scrolling</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"216\"/>\n        <source>SCROLLING</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"226\"/>\n        <source>Reverse the direction that you scroll in so that the content moves in the same direction as your fingers.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"278\"/>\n        <source>Settings Unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"288\"/>\n        <source>Mouse settings can&apos;t be changed on this platform.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/InputPlugin/translations/ro.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"ro\" sourcelanguage=\"en_US\">\n<context>\n    <name>InputSettingsLeftPane</name>\n    <message>\n        <location filename=\"../settings/inputsettingsleftpane.ui\" line=\"35\"/>\n        <source>Input</source>\n        <translation>Intrare</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/inputsettingsleftpane.ui\" line=\"46\"/>\n        <source>Mouse and Touchpad</source>\n        <translation>Mouse și tastatură</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/inputsettingsleftpane.ui\" line=\"55\"/>\n        <source>Keyboard</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>InputSettingsPane</name>\n    <message>\n        <location filename=\"../settings/inputsettingspane.cpp\" line=\"55\"/>\n        <source>Input</source>\n        <translation>Intrare</translation>\n    </message>\n</context>\n<context>\n    <name>KeyboardDaemon</name>\n    <message>\n        <location filename=\"../daemons/keyboarddaemon.cpp\" line=\"83\"/>\n        <source>Keyboard Layout</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>KeyboardLayoutChunk</name>\n    <message>\n        <location filename=\"../chunks/keyboardlayoutchunk.cpp\" line=\"75\"/>\n        <source>Select Keyboard Layout</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>KeyboardSettings</name>\n    <message>\n        <location filename=\"../settings/keyboardsettings.ui\" line=\"35\"/>\n        <source>Keyboard</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/keyboardsettings.ui\" line=\"106\"/>\n        <source>LAYOUTS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/keyboardsettings.ui\" line=\"113\"/>\n        <source>Prioritise the keyboard layouts you&apos;d like to use on your device. You can switch between keyboard layouts with SUPER+Space</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/keyboardsettings.ui\" line=\"135\"/>\n        <source>Add Layout</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/keyboardsettings.cpp\" line=\"77\"/>\n        <source>For this layout</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/keyboardsettings.cpp\" line=\"78\"/>\n        <source>Move Up</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/keyboardsettings.cpp\" line=\"81\"/>\n        <source>Move Down</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/keyboardsettings.cpp\" line=\"84\"/>\n        <source>Remove</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>MouseSettings</name>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"35\"/>\n        <source>Mouse and Touchpad</source>\n        <translation>Mouse și tastatură</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"105\"/>\n        <source>CLICKING</source>\n        <translation>APĂSARE</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"117\"/>\n        <source>Left</source>\n        <translation>Stânga</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"130\"/>\n        <source>Right</source>\n        <translation>Dreapta</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"151\"/>\n        <source>Primary Button</source>\n        <translation>Butonul principal</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"158\"/>\n        <source>Tap to Click</source>\n        <translation>Atingeți pentru click</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"204\"/>\n        <source>Natural Scrolling</source>\n        <translation>Derulare naturală</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"216\"/>\n        <source>SCROLLING</source>\n        <translation>DERULARE</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"226\"/>\n        <source>Reverse the direction that you scroll in so that the content moves in the same direction as your fingers.</source>\n        <translation>Inversează direcția în care derulați astfel încât conținutul se mișcă în aceași direcție ca degetele.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"278\"/>\n        <source>Settings Unavailable</source>\n        <translation>Setări indisponibile</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"288\"/>\n        <source>Mouse settings can&apos;t be changed on this platform.</source>\n        <translation>Setările mouse-ului nu pot fi schimbate pe această platformă.</translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/InputPlugin/translations/sv.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"sv\" sourcelanguage=\"en_US\">\n<context>\n    <name>InputSettingsLeftPane</name>\n    <message>\n        <location filename=\"../settings/inputsettingsleftpane.ui\" line=\"35\"/>\n        <source>Input</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/inputsettingsleftpane.ui\" line=\"46\"/>\n        <source>Mouse and Touchpad</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/inputsettingsleftpane.ui\" line=\"55\"/>\n        <source>Keyboard</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>InputSettingsPane</name>\n    <message>\n        <location filename=\"../settings/inputsettingspane.cpp\" line=\"55\"/>\n        <source>Input</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>KeyboardDaemon</name>\n    <message>\n        <location filename=\"../daemons/keyboarddaemon.cpp\" line=\"83\"/>\n        <source>Keyboard Layout</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>KeyboardLayoutChunk</name>\n    <message>\n        <location filename=\"../chunks/keyboardlayoutchunk.cpp\" line=\"75\"/>\n        <source>Select Keyboard Layout</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>KeyboardSettings</name>\n    <message>\n        <location filename=\"../settings/keyboardsettings.ui\" line=\"35\"/>\n        <source>Keyboard</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/keyboardsettings.ui\" line=\"106\"/>\n        <source>LAYOUTS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/keyboardsettings.ui\" line=\"113\"/>\n        <source>Prioritise the keyboard layouts you&apos;d like to use on your device. You can switch between keyboard layouts with SUPER+Space</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/keyboardsettings.ui\" line=\"135\"/>\n        <source>Add Layout</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/keyboardsettings.cpp\" line=\"77\"/>\n        <source>For this layout</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/keyboardsettings.cpp\" line=\"78\"/>\n        <source>Move Up</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/keyboardsettings.cpp\" line=\"81\"/>\n        <source>Move Down</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/keyboardsettings.cpp\" line=\"84\"/>\n        <source>Remove</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>MouseSettings</name>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"35\"/>\n        <source>Mouse and Touchpad</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"105\"/>\n        <source>CLICKING</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"117\"/>\n        <source>Left</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"130\"/>\n        <source>Right</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"151\"/>\n        <source>Primary Button</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"158\"/>\n        <source>Tap to Click</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"204\"/>\n        <source>Natural Scrolling</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"216\"/>\n        <source>SCROLLING</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"226\"/>\n        <source>Reverse the direction that you scroll in so that the content moves in the same direction as your fingers.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"278\"/>\n        <source>Settings Unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"288\"/>\n        <source>Mouse settings can&apos;t be changed on this platform.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/InputPlugin/translations/tr.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"tr\" sourcelanguage=\"en_US\">\n<context>\n    <name>InputSettingsLeftPane</name>\n    <message>\n        <location filename=\"../settings/inputsettingsleftpane.ui\" line=\"35\"/>\n        <source>Input</source>\n        <translation>Giriş</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/inputsettingsleftpane.ui\" line=\"46\"/>\n        <source>Mouse and Touchpad</source>\n        <translation>Mouse ve Dokunmatik Yüzey</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/inputsettingsleftpane.ui\" line=\"55\"/>\n        <source>Keyboard</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>InputSettingsPane</name>\n    <message>\n        <location filename=\"../settings/inputsettingspane.cpp\" line=\"55\"/>\n        <source>Input</source>\n        <translation>Giriş</translation>\n    </message>\n</context>\n<context>\n    <name>KeyboardDaemon</name>\n    <message>\n        <location filename=\"../daemons/keyboarddaemon.cpp\" line=\"83\"/>\n        <source>Keyboard Layout</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>KeyboardLayoutChunk</name>\n    <message>\n        <location filename=\"../chunks/keyboardlayoutchunk.cpp\" line=\"75\"/>\n        <source>Select Keyboard Layout</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>KeyboardSettings</name>\n    <message>\n        <location filename=\"../settings/keyboardsettings.ui\" line=\"35\"/>\n        <source>Keyboard</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/keyboardsettings.ui\" line=\"106\"/>\n        <source>LAYOUTS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/keyboardsettings.ui\" line=\"113\"/>\n        <source>Prioritise the keyboard layouts you&apos;d like to use on your device. You can switch between keyboard layouts with SUPER+Space</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/keyboardsettings.ui\" line=\"135\"/>\n        <source>Add Layout</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/keyboardsettings.cpp\" line=\"77\"/>\n        <source>For this layout</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/keyboardsettings.cpp\" line=\"78\"/>\n        <source>Move Up</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/keyboardsettings.cpp\" line=\"81\"/>\n        <source>Move Down</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/keyboardsettings.cpp\" line=\"84\"/>\n        <source>Remove</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>MouseSettings</name>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"35\"/>\n        <source>Mouse and Touchpad</source>\n        <translation>Mouse ve Dokunmatik Yüzey</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"105\"/>\n        <source>CLICKING</source>\n        <translation>TIKLAMA</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"117\"/>\n        <source>Left</source>\n        <translation>Sol</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"130\"/>\n        <source>Right</source>\n        <translation>Sağ</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"151\"/>\n        <source>Primary Button</source>\n        <translation>Birincil Düğme</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"158\"/>\n        <source>Tap to Click</source>\n        <translation>Tıklamak için Dokunun</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"204\"/>\n        <source>Natural Scrolling</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"216\"/>\n        <source>SCROLLING</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"226\"/>\n        <source>Reverse the direction that you scroll in so that the content moves in the same direction as your fingers.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"278\"/>\n        <source>Settings Unavailable</source>\n        <translation>Ayarlar Kullanılamıyor</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"288\"/>\n        <source>Mouse settings can&apos;t be changed on this platform.</source>\n        <translation>Bu platformda mouse ayarları değiştirilemez.</translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/InputPlugin/translations/vi.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"vi\" sourcelanguage=\"en_US\">\n<context>\n    <name>InputSettingsLeftPane</name>\n    <message>\n        <location filename=\"../settings/inputsettingsleftpane.ui\" line=\"35\"/>\n        <source>Input</source>\n        <translation>Thiết bị đầu vào</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/inputsettingsleftpane.ui\" line=\"46\"/>\n        <source>Mouse and Touchpad</source>\n        <translation>Chuột và bàn di chuột</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/inputsettingsleftpane.ui\" line=\"55\"/>\n        <source>Keyboard</source>\n        <translation>Bàn phím</translation>\n    </message>\n</context>\n<context>\n    <name>InputSettingsPane</name>\n    <message>\n        <location filename=\"../settings/inputsettingspane.cpp\" line=\"55\"/>\n        <source>Input</source>\n        <translation>Thiết bị đầu vào</translation>\n    </message>\n</context>\n<context>\n    <name>KeyboardDaemon</name>\n    <message>\n        <location filename=\"../daemons/keyboarddaemon.cpp\" line=\"83\"/>\n        <source>Keyboard Layout</source>\n        <translation>Bố cục bàn phím</translation>\n    </message>\n</context>\n<context>\n    <name>KeyboardLayoutChunk</name>\n    <message>\n        <location filename=\"../chunks/keyboardlayoutchunk.cpp\" line=\"75\"/>\n        <source>Select Keyboard Layout</source>\n        <translation>Chọn bố cục bàn phím</translation>\n    </message>\n</context>\n<context>\n    <name>KeyboardSettings</name>\n    <message>\n        <location filename=\"../settings/keyboardsettings.ui\" line=\"35\"/>\n        <source>Keyboard</source>\n        <translation>Bàn phím</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/keyboardsettings.ui\" line=\"106\"/>\n        <source>LAYOUTS</source>\n        <translation>BỐ CỤC</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/keyboardsettings.ui\" line=\"113\"/>\n        <source>Prioritise the keyboard layouts you&apos;d like to use on your device. You can switch between keyboard layouts with SUPER+Space</source>\n        <translation>Xếp hạng các bố cục bàn phím bạn muốn sử dụng. Bạn có thể chuyển đổi giữa các bố cục bàn phím với SUPER+Space</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/keyboardsettings.ui\" line=\"135\"/>\n        <source>Add Layout</source>\n        <translation>Thêm bố cục</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/keyboardsettings.cpp\" line=\"77\"/>\n        <source>For this layout</source>\n        <translation>Cho bố cục này</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/keyboardsettings.cpp\" line=\"78\"/>\n        <source>Move Up</source>\n        <translation>Chuyển lên</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/keyboardsettings.cpp\" line=\"81\"/>\n        <source>Move Down</source>\n        <translation>Chuyển xuống</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/keyboardsettings.cpp\" line=\"84\"/>\n        <source>Remove</source>\n        <translation>Xóa</translation>\n    </message>\n</context>\n<context>\n    <name>MouseSettings</name>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"35\"/>\n        <source>Mouse and Touchpad</source>\n        <translation>Chuột và bàn di chuột</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"105\"/>\n        <source>CLICKING</source>\n        <translation>NHẤP CHUỘT</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"117\"/>\n        <source>Left</source>\n        <translation>Trái</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"130\"/>\n        <source>Right</source>\n        <translation>Phải</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"151\"/>\n        <source>Primary Button</source>\n        <translation>Nút chính</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"158\"/>\n        <source>Tap to Click</source>\n        <translation>Chạm để nhấp chuột</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"204\"/>\n        <source>Natural Scrolling</source>\n        <translation>Cuộn tự nhiên</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"216\"/>\n        <source>SCROLLING</source>\n        <translation>CUỘN</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"226\"/>\n        <source>Reverse the direction that you scroll in so that the content moves in the same direction as your fingers.</source>\n        <translation>Đảo ngược hướng cuộn để cho nội dung di chuyển cùng hướng với ngón tay của bạn.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"278\"/>\n        <source>Settings Unavailable</source>\n        <translation>Cài đặt không có sẵn</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"288\"/>\n        <source>Mouse settings can&apos;t be changed on this platform.</source>\n        <translation>Cài đặt chuột không thể bị đổi ngay bây giờ.</translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/InputPlugin/translations/vi_VN.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"vi_VN\">\n<context>\n    <name>InputSettingsLeftPane</name>\n    <message>\n        <location filename=\"../settings/inputsettingsleftpane.ui\" line=\"35\"/>\n        <source>Input</source>\n        <translation>Đầu vào</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/inputsettingsleftpane.ui\" line=\"46\"/>\n        <source>Mouse and Touchpad</source>\n        <translation>Chuột bà bàn di chuột</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/inputsettingsleftpane.ui\" line=\"55\"/>\n        <source>Keyboard</source>\n        <translation>Bàn phím</translation>\n    </message>\n</context>\n<context>\n    <name>InputSettingsPane</name>\n    <message>\n        <location filename=\"../settings/inputsettingspane.cpp\" line=\"55\"/>\n        <source>Input</source>\n        <translation>Đầu vào</translation>\n    </message>\n</context>\n<context>\n    <name>KeyboardDaemon</name>\n    <message>\n        <location filename=\"../daemons/keyboarddaemon.cpp\" line=\"83\"/>\n        <source>Keyboard Layout</source>\n        <translation>Bố cục bàn phím</translation>\n    </message>\n</context>\n<context>\n    <name>KeyboardLayoutChunk</name>\n    <message>\n        <location filename=\"../chunks/keyboardlayoutchunk.cpp\" line=\"75\"/>\n        <source>Select Keyboard Layout</source>\n        <translation>Chọn bố cục bàn phím</translation>\n    </message>\n</context>\n<context>\n    <name>KeyboardSettings</name>\n    <message>\n        <location filename=\"../settings/keyboardsettings.ui\" line=\"35\"/>\n        <source>Keyboard</source>\n        <translation>Bàn phím</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/keyboardsettings.ui\" line=\"106\"/>\n        <source>LAYOUTS</source>\n        <translation>BỐ CỤC</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/keyboardsettings.ui\" line=\"113\"/>\n        <source>Prioritise the keyboard layouts you&apos;d like to use on your device. You can switch between keyboard layouts with SUPER+Space</source>\n        <translation>Ưu tiên các bố cục bàn phím bạn muốn sử dụng trên thiết bị này. Bạn có thể đổi sang các bố cục với SUPER+Dấu cách</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/keyboardsettings.ui\" line=\"135\"/>\n        <source>Add Layout</source>\n        <translation>Thêm bố cục</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/keyboardsettings.cpp\" line=\"77\"/>\n        <source>For this layout</source>\n        <translation>Cho bố cục này</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/keyboardsettings.cpp\" line=\"78\"/>\n        <source>Move Up</source>\n        <translation>Chuyển lên</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/keyboardsettings.cpp\" line=\"81\"/>\n        <source>Move Down</source>\n        <translation>Chuyển xuống</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/keyboardsettings.cpp\" line=\"84\"/>\n        <source>Remove</source>\n        <translation>Xóa</translation>\n    </message>\n</context>\n<context>\n    <name>MouseSettings</name>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"35\"/>\n        <source>Mouse and Touchpad</source>\n        <translation>Chuột và bàn di chuột</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"105\"/>\n        <source>CLICKING</source>\n        <translation>NHẤP</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"117\"/>\n        <source>Left</source>\n        <translation>Bên phải</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"130\"/>\n        <source>Right</source>\n        <translation>Bên trái</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"151\"/>\n        <source>Primary Button</source>\n        <translation>Nút chính</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"158\"/>\n        <source>Tap to Click</source>\n        <translation>Chạm để nhấn</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"204\"/>\n        <source>Natural Scrolling</source>\n        <translation>Cuộn tự nhiên</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"216\"/>\n        <source>SCROLLING</source>\n        <translation>CUỘN</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"226\"/>\n        <source>Reverse the direction that you scroll in so that the content moves in the same direction as your fingers.</source>\n        <translation>Đảo ngược hướng cuộn để cho nội dung di chuyển theo hướng ngón tay của bạn.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"278\"/>\n        <source>Settings Unavailable</source>\n        <translation>Cài đặt không có sẵn</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/mousesettings.ui\" line=\"288\"/>\n        <source>Mouse settings can&apos;t be changed on this platform.</source>\n        <translation>Cài đặt chuột không có thể bị đặt trên nền tảng này.</translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/LocalePlugin/CMakeLists.txt",
    "content": "cmake_minimum_required(VERSION 3.24.0)\n\nfind_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets)\nfind_package(libcontemporary)\n\nset(SOURCES\n    localeplugincommon.cpp\n    onboarding/onboardingregion.cpp\n    plugin.cpp\n    settings/localesettingspane.cpp\n\n    onboarding/onboardingregion.ui\n    settings/localesettingspane.ui\n)\n\nset(HEADERS\n    localeplugincommon.h\n    onboarding/onboardingregion.h\n    plugin.h\n    settings/localesettingspane.h\n)\n\nset(PLUGIN_NAME locale)\nadd_plugin_td(${PLUGIN_NAME})\ntarget_sources(plugin-${PLUGIN_NAME} PRIVATE ${SOURCES} ${HEADERS})\ncntp_defaults_file(${PLUGIN_NAME}\n    DEFAULTS_FILE thedesk-locale.conf)\n\ntarget_link_libraries(plugin-${PLUGIN_NAME} Qt::Widgets libcontemporary libthedesk)\n"
  },
  {
    "path": "plugins/LocalePlugin/LocalePlugin.pro",
    "content": "QT += gui widgets\n\nTEMPLATE = lib\nCONFIG += plugin\n\nCONFIG += c++11\n\n# Include the-libs build tools\ninclude(/usr/share/the-libs/pri/gentranslations.pri)\n\n# The following define makes your compiler emit warnings if you use\n# any Qt feature that has been marked deprecated (the exact warnings\n# depend on your compiler). Please consult the documentation of the\n# deprecated API in order to know how to port your code away from it.\nDEFINES += QT_DEPRECATED_WARNINGS\n\n# You can also make your code fail to compile if it uses deprecated APIs.\n# In order to do so, uncomment the following line.\n# You can also select to disable deprecated APIs only up to a certain version of Qt.\n#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0\n\nSOURCES += \\\n    common.cpp \\\n    onboarding/onboardingregion.cpp \\\n    plugin.cpp \\\n    settings/localesettingspane.cpp\n\nHEADERS += \\\n    common.h \\\n    onboarding/onboardingregion.h \\\n    plugin.h \\\n    settings/localesettingspane.h\n\nDISTFILES += \\\n    Plugin.json \\\n    defaults.conf\n\n\nunix {\n    translations.files = translations/*.qm\n    translations.path = /usr/share/thedesk/LocalePlugin/translations\n\n    defaults.files = defaults.conf\n    defaults.path = /etc/theSuite/theDesk/LocalePlugin/\n\n    INSTALLS += translations defaults\n}\n\ninclude(../plugins.pri)\n\nFORMS += \\\n    onboarding/onboardingregion.ui \\\n    settings/localesettingspane.ui\n"
  },
  {
    "path": "plugins/LocalePlugin/Plugin.json",
    "content": "{\n    \"name\": \"Locale Management\",\n    \"icon\": \"preferences-system-locale\",\n    \"uuid\": \"9d637cab-fdbe-404e-8361-4a4a77936847\",\n    \"vi\": {\n        \"name\": \"Quản lý ngôn ngữ\"\n    }\n}\n"
  },
  {
    "path": "plugins/LocalePlugin/localeplugincommon.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"localeplugincommon.h\"\n\n#include <localemanager.h>\n#include <statemanager.h>\n\nusing namespace LocalePluginCommon;\n\nQList<Country> LocalePluginCommon::countries() {\n    QLocale::Country current = StateManager::localeManager()->formatCountry();\n    QList<Country> countries;\n    for (int i = QLocale::Afghanistan + 1; i < QLocale::LastCountry; i++) {\n        if (i == QLocale::World) continue;\n\n        countries.append({static_cast<QLocale::Country>(i),\n            QLocale::countryToString(static_cast<QLocale::Country>(i)),\n            current == i});\n    }\n\n    std::sort(countries.begin(), countries.end(), [=](const Country& first, const Country& second) {\n        return first.text.localeAwareCompare(second.text) < 0;\n    });\n\n    return countries;\n}\n"
  },
  {
    "path": "plugins/LocalePlugin/localeplugincommon.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef LOCALEPLUGINCOMMON_H\n#define LOCALEPLUGINCOMMON_H\n\n#include <QLocale>\n\nnamespace LocalePluginCommon {\n    struct Country {\n        QLocale::Country country;\n        QString text;\n        bool isCurrent;\n    };\n\n    QList<Country> countries();\n}\n\n#endif // LOCALEPLUGINCOMMON_H\n"
  },
  {
    "path": "plugins/LocalePlugin/onboarding/onboardingregion.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"onboardingregion.h\"\n#include \"ui_onboardingregion.h\"\n\n#include <QLocale>\n#include <localemanager.h>\n#include <onboardingmanager.h>\n#include <statemanager.h>\n\n#include \"localeplugincommon.h\"\n\nOnboardingRegion::OnboardingRegion(QWidget* parent) :\n    OnboardingPage(parent),\n    ui(new Ui::OnboardingRegion) {\n    ui->setupUi(this);\n\n    ui->titleLabel->setBackButtonShown(true);\n    search(\"\");\n}\n\nOnboardingRegion::~OnboardingRegion() {\n    delete ui;\n}\n\nvoid OnboardingRegion::on_nextButton_clicked() {\n    StateManager::onboardingManager()->nextStep();\n}\n\nQString OnboardingRegion::name() {\n    return \"OnboardingRegion\";\n}\n\nQString OnboardingRegion::displayName() {\n    return tr(\"Region\");\n}\nvoid OnboardingRegion::on_titleLabel_backButtonClicked() {\n    StateManager::onboardingManager()->previousStep();\n}\n\nvoid OnboardingRegion::on_countriesWidget_currentItemChanged(QListWidgetItem* current, QListWidgetItem* previous) {\n    if (current) {\n        StateManager::localeManager()->setFormatCountry(current->data(Qt::UserRole).value<QLocale::Country>());\n    }\n}\n\nvoid OnboardingRegion::on_searchEdit_textChanged(const QString& arg1) {\n    search(arg1);\n}\n\nvoid OnboardingRegion::search(QString query) {\n    ui->countriesWidget->clear();\n\n    QList<LocalePluginCommon::Country> countries = LocalePluginCommon::countries();\n    for (const LocalePluginCommon::Country& country : qAsConst(countries)) {\n        if (!country.text.contains(query, Qt::CaseInsensitive)) continue;\n\n        QListWidgetItem* item = new QListWidgetItem();\n        item->setText(country.text);\n        item->setData(Qt::UserRole, country.country);\n        ui->countriesWidget->addItem(item);\n        if (country.isCurrent) ui->countriesWidget->setCurrentItem(item);\n    }\n}\n"
  },
  {
    "path": "plugins/LocalePlugin/onboarding/onboardingregion.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef ONBOARDINGREGION_H\n#define ONBOARDINGREGION_H\n\n#include <onboardingpage.h>\n#include <QListWidgetItem>\n\nnamespace Ui {\n    class OnboardingRegion;\n}\n\nclass OnboardingRegion : public OnboardingPage {\n        Q_OBJECT\n\n    public:\n        explicit OnboardingRegion(QWidget* parent = nullptr);\n        ~OnboardingRegion();\n\n    private slots:\n        void on_nextButton_clicked();\n\n        void on_titleLabel_backButtonClicked();\n\n        void on_countriesWidget_currentItemChanged(QListWidgetItem* current, QListWidgetItem* previous);\n\n        void on_searchEdit_textChanged(const QString& arg1);\n\n    private:\n        Ui::OnboardingRegion* ui;\n\n        void search(QString query);\n\n        // OnboardingPage interface\n    public:\n        QString name();\n        QString displayName();\n};\n\n#endif // ONBOARDINGREGION_H\n"
  },
  {
    "path": "plugins/LocalePlugin/onboarding/onboardingregion.ui",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ui version=\"4.0\">\n <class>OnboardingRegion</class>\n <widget class=\"QWidget\" name=\"OnboardingRegion\">\n  <property name=\"geometry\">\n   <rect>\n    <x>0</x>\n    <y>0</y>\n    <width>400</width>\n    <height>300</height>\n   </rect>\n  </property>\n  <property name=\"windowTitle\">\n   <string notr=\"true\">Form</string>\n  </property>\n  <layout class=\"QVBoxLayout\" name=\"verticalLayout\">\n   <property name=\"spacing\">\n    <number>0</number>\n   </property>\n   <property name=\"leftMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"topMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"rightMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"bottomMargin\">\n    <number>0</number>\n   </property>\n   <item>\n    <widget class=\"tTitleLabel\" name=\"titleLabel\">\n     <property name=\"text\">\n      <string>Region</string>\n     </property>\n    </widget>\n   </item>\n   <item>\n    <widget class=\"QLabel\" name=\"label\">\n     <property name=\"text\">\n      <string>Whereabouts are you located? We'll use this information to format your dates, numbers and other items correctly.</string>\n     </property>\n     <property name=\"wordWrap\">\n      <bool>true</bool>\n     </property>\n     <property name=\"margin\">\n      <number>9</number>\n     </property>\n    </widget>\n   </item>\n   <item>\n    <widget class=\"Line\" name=\"line_2\">\n     <property name=\"maximumSize\">\n      <size>\n       <width>16777215</width>\n       <height>1</height>\n      </size>\n     </property>\n     <property name=\"orientation\">\n      <enum>Qt::Horizontal</enum>\n     </property>\n    </widget>\n   </item>\n   <item>\n    <widget class=\"QLineEdit\" name=\"searchEdit\">\n     <property name=\"frame\">\n      <bool>false</bool>\n     </property>\n     <property name=\"placeholderText\">\n      <string>Search...</string>\n     </property>\n    </widget>\n   </item>\n   <item>\n    <widget class=\"Line\" name=\"singlePixelHorizontalLine\">\n     <property name=\"maximumSize\">\n      <size>\n       <width>16777215</width>\n       <height>1</height>\n      </size>\n     </property>\n     <property name=\"orientation\">\n      <enum>Qt::Horizontal</enum>\n     </property>\n    </widget>\n   </item>\n   <item>\n    <widget class=\"QListWidget\" name=\"countriesWidget\">\n     <property name=\"frameShape\">\n      <enum>QFrame::NoFrame</enum>\n     </property>\n    </widget>\n   </item>\n   <item>\n    <widget class=\"Line\" name=\"line\">\n     <property name=\"maximumSize\">\n      <size>\n       <width>16777215</width>\n       <height>1</height>\n      </size>\n     </property>\n     <property name=\"orientation\">\n      <enum>Qt::Horizontal</enum>\n     </property>\n    </widget>\n   </item>\n   <item>\n    <layout class=\"QHBoxLayout\" name=\"horizontalLayout\">\n     <property name=\"leftMargin\">\n      <number>9</number>\n     </property>\n     <property name=\"topMargin\">\n      <number>9</number>\n     </property>\n     <property name=\"rightMargin\">\n      <number>9</number>\n     </property>\n     <property name=\"bottomMargin\">\n      <number>9</number>\n     </property>\n     <item>\n      <spacer name=\"horizontalSpacer\">\n       <property name=\"orientation\">\n        <enum>Qt::Horizontal</enum>\n       </property>\n       <property name=\"sizeHint\" stdset=\"0\">\n        <size>\n         <width>40</width>\n         <height>20</height>\n        </size>\n       </property>\n      </spacer>\n     </item>\n     <item>\n      <widget class=\"QPushButton\" name=\"nextButton\">\n       <property name=\"text\">\n        <string>Next</string>\n       </property>\n       <property name=\"icon\">\n        <iconset theme=\"go-next\">\n         <normaloff>.</normaloff>.</iconset>\n       </property>\n      </widget>\n     </item>\n    </layout>\n   </item>\n  </layout>\n </widget>\n <customwidgets>\n  <customwidget>\n   <class>tTitleLabel</class>\n   <extends>QLabel</extends>\n   <header location=\"global\">ttitlelabel.h</header>\n   <slots>\n    <signal>backButtonClicked()</signal>\n   </slots>\n  </customwidget>\n </customwidgets>\n <resources/>\n <connections/>\n</ui>\n"
  },
  {
    "path": "plugins/LocalePlugin/plugin.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"plugin.h\"\n\n#include \"tsettings.h\"\n#include <QApplication>\n#include <QDebug>\n#include <QDir>\n#include <localemanager.h>\n#include <onboardingmanager.h>\n#include <statemanager.h>\n#include <statuscentermanager.h>\n#include <tapplication.h>\n\n#include \"onboarding/onboardingregion.h\"\n#include \"settings/localesettingspane.h\"\n\nstruct PluginPrivate {\n        LocaleSettingsPane* localeSettingsPane;\n};\n\nPlugin::Plugin() {\n    d = new PluginPrivate();\n}\n\nPlugin::~Plugin() {\n    delete d;\n}\n\nvoid Plugin::activate() {\n    tApplication::addPluginTranslator(CNTP_TARGET_NAME);\n\n    tSettings::registerDefaults(QDir::cleanPath(qApp->applicationDirPath() + \"/../plugins/LocalePlugin/thedesk-locale.conf\"));\n    tSettings::registerDefaults(\"/usr/share/defaults/thedesk-locale.conf\");\n\n    d->localeSettingsPane = new LocaleSettingsPane();\n    StateManager::statusCenterManager()->addPane(d->localeSettingsPane, StatusCenterManager::SystemSettings);\n\n    connect(StateManager::onboardingManager(), &OnboardingManager::onboardingRequired, this, [=] {\n        StateManager::onboardingManager()->addOnboardingStep(new OnboardingRegion);\n    });\n}\n\nvoid Plugin::deactivate() {\n    StateManager::statusCenterManager()->removePane(d->localeSettingsPane);\n    d->localeSettingsPane->deleteLater();\n    tApplication::removePluginTranslator(CNTP_TARGET_NAME);\n}\n"
  },
  {
    "path": "plugins/LocalePlugin/plugin.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef PLUGIN_H\n#define PLUGIN_H\n\n#include \"plugins/plugininterface.h\"\n\nstruct PluginPrivate;\nclass Plugin : public QObject,\n               public PluginInterface {\n        Q_OBJECT\n        Q_PLUGIN_METADATA(IID PluginInterface_iid FILE \"Plugin.json\")\n        Q_INTERFACES(PluginInterface)\n\n    public:\n        Plugin();\n        ~Plugin();\n\n    private:\n        PluginPrivate* d;\n\n        // PluginInterface interface\n    public:\n        void activate();\n        void deactivate();\n};\n\n#endif // PLUGIN_H\n"
  },
  {
    "path": "plugins/LocalePlugin/settings/localesettingspane.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"localesettingspane.h\"\n#include \"ui_localesettingspane.h\"\n\n#include <QIcon>\n#include <QMenu>\n#include <localemanager.h>\n#include <statemanager.h>\n#include <statuscentermanager.h>\n\n#include <TimeDate/desktoptimedate.h>\n\n#include \"localeplugincommon.h\"\n\nLocaleSettingsPane::LocaleSettingsPane() :\n    StatusCenterPane(),\n    ui(new Ui::LocaleSettingsPane) {\n    ui->setupUi(this);\n\n    ui->titleLabel->setBackButtonIsMenu(true);\n    ui->titleLabel->setBackButtonShown(StateManager::instance()->statusCenterManager()->isHamburgerMenuRequired());\n    connect(StateManager::instance()->statusCenterManager(), &StatusCenterManager::isHamburgerMenuRequiredChanged, ui->titleLabel, &tTitleLabel::setBackButtonShown);\n\n    const int contentWidth = StateManager::instance()->statusCenterManager()->preferredContentWidth();\n    ui->languageWidget->setFixedWidth(contentWidth);\n    ui->regionWidget->setFixedWidth(contentWidth);\n\n    QList<LocalePluginCommon::Country> countries = LocalePluginCommon::countries();\n    for (LocalePluginCommon::Country country : countries) {\n        ui->countryBox->addItem(country.text, country.country);\n        if (country.isCurrent) ui->countryBox->setCurrentIndex(ui->countryBox->count() - 1);\n    }\n\n    connect(StateManager::localeManager(), &LocaleManager::localesChanged, this, [=] {\n        this->updateLanguages();\n        StateManager::statusCenterManager()->requestLogout();\n    });\n    connect(StateManager::localeManager(), &LocaleManager::formatCountryChanged, this, [=] {\n        this->updateRegionalFormats();\n        StateManager::statusCenterManager()->requestLogout();\n    });\n    this->updateLanguages();\n    this->updateRegionalFormats();\n\n    DesktopTimeDate::makeTimeLabel(ui->timeLabel, DesktopTimeDate::FullTime);\n    DesktopTimeDate::makeTimeLabel(ui->dateLabel, DesktopTimeDate::StandardDate);\n}\n\nLocaleSettingsPane::~LocaleSettingsPane() {\n    delete ui;\n}\n\nvoid LocaleSettingsPane::updateLanguages() {\n    ui->languagesList->clear();\n\n    for (QLocale locale : StateManager::localeManager()->locales()) {\n        QListWidgetItem* item = new QListWidgetItem();\n\n        QString text = QStringLiteral(\"%1 (%2)\").arg(QLocale::languageToString(locale.language())).arg(locale.nativeLanguageName());\n        if (locale == StateManager::localeManager()->locales().first()) text.append(\" · \" + tr(\"Primary\"));\n\n        item->setText(text);\n        item->setData(Qt::UserRole, locale);\n        ui->languagesList->addItem(item);\n    }\n}\n\nvoid LocaleSettingsPane::updateRegionalFormats() {\n    QLocale locale;\n    QLocale formatLocale = StateManager::localeManager()->formatLocale();\n    ui->dayOfWeekLabel->setText(locale.dayName(formatLocale.firstDayOfWeek()));\n    ui->numbersLabel->setText(formatLocale.toString(123456789.00, 'f', 2));\n    ui->currencyLabel->setText(formatLocale.toCurrencyString(1234.56));\n\n    switch (formatLocale.measurementSystem()) {\n        case QLocale::MetricSystem:\n            ui->measurementLabel->setText(tr(\"Metric\"));\n            break;\n        case QLocale::ImperialUSSystem:\n            ui->measurementLabel->setText(tr(\"Imperial\"));\n            break;\n        case QLocale::ImperialUKSystem:\n            ui->measurementLabel->setText(tr(\"Imperial (United Kingdom)\"));\n            break;\n    }\n}\n\nvoid LocaleSettingsPane::changeEvent(QEvent* event) {\n    if (event->type() == QEvent::LanguageChange) {\n        ui->retranslateUi(this);\n        emit displayNameChanged();\n    }\n}\n\nQString LocaleSettingsPane::name() {\n    return \"LocaleSettings\";\n}\n\nQString LocaleSettingsPane::displayName() {\n    return tr(\"Locale\");\n}\n\nQIcon LocaleSettingsPane::icon() {\n    return QIcon::fromTheme(\"preferences-system-locale\");\n}\n\nQWidget* LocaleSettingsPane::leftPane() {\n    return nullptr;\n}\n\nvoid LocaleSettingsPane::on_countryBox_currentIndexChanged(int index) {\n    QLocale::Country country = ui->countryBox->itemData(index).value<QLocale::Country>();\n    StateManager::localeManager()->setFormatCountry(country);\n}\n\nvoid LocaleSettingsPane::on_addLanguageButton_clicked() {\n    LocaleManager* manager = StateManager::localeManager();\n    bool ok;\n    QLocale locale = manager->showLocaleSelector(this->window(), &ok);\n    if (ok) {\n        if (!manager->locales().contains(locale)) {\n            manager->addLocale(locale);\n        }\n    }\n}\n\nvoid LocaleSettingsPane::on_languagesList_customContextMenuRequested(const QPoint& pos) {\n    if (ui->languagesList->count() == 1) return;\n\n    QListWidgetItem* item = ui->languagesList->itemAt(pos);\n    if (item) {\n        QMenu* menu = new QMenu();\n        menu->addSection(tr(\"For this language\"));\n        if (ui->languagesList->row(item) != 0) menu->addAction(QIcon::fromTheme(\"go-up\"), tr(\"Move Up\"), [=] {\n            StateManager::localeManager()->moveLocaleUp(item->data(Qt::UserRole).toLocale());\n        });\n        if (ui->languagesList->row(item) != ui->languagesList->count() - 1) menu->addAction(QIcon::fromTheme(\"go-down\"), tr(\"Move Down\"), [=] {\n            StateManager::localeManager()->moveLocaleDown(item->data(Qt::UserRole).toLocale());\n        });\n        menu->addAction(QIcon::fromTheme(\"list-remove\"), tr(\"Remove\"), [=] {\n            StateManager::localeManager()->removeLocale(item->data(Qt::UserRole).toLocale());\n        });\n        connect(menu, &QMenu::aboutToHide, menu, &QMenu::deleteLater);\n        menu->popup(ui->languagesList->mapToGlobal(pos));\n    }\n}\n\nvoid LocaleSettingsPane::on_titleLabel_backButtonClicked() {\n    StateManager::statusCenterManager()->showStatusCenterHamburgerMenu();\n}\n"
  },
  {
    "path": "plugins/LocalePlugin/settings/localesettingspane.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef LOCALESETTINGSPANE_H\n#define LOCALESETTINGSPANE_H\n\n#include <statuscenterpane.h>\n\nnamespace Ui {\n    class LocaleSettingsPane;\n}\n\nclass LocaleSettingsPane : public StatusCenterPane {\n        Q_OBJECT\n\n    public:\n        explicit LocaleSettingsPane();\n        ~LocaleSettingsPane();\n\n    private:\n        Ui::LocaleSettingsPane* ui;\n\n        void updateLanguages();\n        void updateRegionalFormats();\n\n        void changeEvent(QEvent* event);\n\n        // StatusCenterPane interface\n    public:\n        QString name();\n        QString displayName();\n        QIcon icon();\n        QWidget* leftPane();\n    private slots:\n        void on_countryBox_currentIndexChanged(int index);\n        void on_addLanguageButton_clicked();\n        void on_languagesList_customContextMenuRequested(const QPoint& pos);\n        void on_titleLabel_backButtonClicked();\n};\n\n#endif // LOCALESETTINGSPANE_H\n"
  },
  {
    "path": "plugins/LocalePlugin/settings/localesettingspane.ui",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ui version=\"4.0\">\n <class>LocaleSettingsPane</class>\n <widget class=\"QWidget\" name=\"LocaleSettingsPane\">\n  <property name=\"geometry\">\n   <rect>\n    <x>0</x>\n    <y>0</y>\n    <width>578</width>\n    <height>661</height>\n   </rect>\n  </property>\n  <property name=\"windowTitle\">\n   <string notr=\"true\">Form</string>\n  </property>\n  <layout class=\"QVBoxLayout\" name=\"verticalLayout_2\">\n   <property name=\"spacing\">\n    <number>0</number>\n   </property>\n   <property name=\"leftMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"topMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"rightMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"bottomMargin\">\n    <number>0</number>\n   </property>\n   <item>\n    <widget class=\"tTitleLabel\" name=\"titleLabel\">\n     <property name=\"text\">\n      <string>Locale</string>\n     </property>\n    </widget>\n   </item>\n   <item>\n    <widget class=\"QScrollArea\" name=\"scrollArea\">\n     <property name=\"frameShape\">\n      <enum>QFrame::NoFrame</enum>\n     </property>\n     <property name=\"widgetResizable\">\n      <bool>true</bool>\n     </property>\n     <widget class=\"QWidget\" name=\"scrollAreaWidgetContents\">\n      <property name=\"geometry\">\n       <rect>\n        <x>0</x>\n        <y>0</y>\n        <width>578</width>\n        <height>644</height>\n       </rect>\n      </property>\n      <layout class=\"QVBoxLayout\" name=\"verticalLayout\">\n       <property name=\"spacing\">\n        <number>0</number>\n       </property>\n       <property name=\"leftMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"topMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"rightMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"bottomMargin\">\n        <number>0</number>\n       </property>\n       <item alignment=\"Qt::AlignHCenter\">\n        <widget class=\"QWidget\" name=\"languageWidget\" native=\"true\">\n         <layout class=\"QVBoxLayout\" name=\"verticalLayout_3\">\n          <property name=\"leftMargin\">\n           <number>0</number>\n          </property>\n          <property name=\"topMargin\">\n           <number>0</number>\n          </property>\n          <property name=\"rightMargin\">\n           <number>0</number>\n          </property>\n          <property name=\"bottomMargin\">\n           <number>9</number>\n          </property>\n          <item>\n           <layout class=\"QVBoxLayout\" name=\"verticalLayout_4\">\n            <property name=\"leftMargin\">\n             <number>9</number>\n            </property>\n            <property name=\"topMargin\">\n             <number>9</number>\n            </property>\n            <property name=\"rightMargin\">\n             <number>9</number>\n            </property>\n            <item>\n             <widget class=\"QLabel\" name=\"label\">\n              <property name=\"font\">\n               <font>\n                <weight>75</weight>\n                <bold>true</bold>\n               </font>\n              </property>\n              <property name=\"text\">\n               <string>LANGUAGE</string>\n              </property>\n             </widget>\n            </item>\n            <item>\n             <widget class=\"QLabel\" name=\"label_3\">\n              <property name=\"text\">\n               <string>Prioritise the languages you'd like to use on your device.</string>\n              </property>\n             </widget>\n            </item>\n            <item>\n             <widget class=\"QListWidget\" name=\"languagesList\">\n              <property name=\"contextMenuPolicy\">\n               <enum>Qt::CustomContextMenu</enum>\n              </property>\n              <property name=\"frameShape\">\n               <enum>QFrame::NoFrame</enum>\n              </property>\n             </widget>\n            </item>\n           </layout>\n          </item>\n          <item>\n           <widget class=\"QPushButton\" name=\"addLanguageButton\">\n            <property name=\"text\">\n             <string>Add Language</string>\n            </property>\n            <property name=\"icon\">\n             <iconset theme=\"list-add\">\n              <normaloff>.</normaloff>.</iconset>\n            </property>\n           </widget>\n          </item>\n         </layout>\n        </widget>\n       </item>\n       <item>\n        <widget class=\"Line\" name=\"line\">\n         <property name=\"maximumSize\">\n          <size>\n           <width>16777215</width>\n           <height>1</height>\n          </size>\n         </property>\n         <property name=\"orientation\">\n          <enum>Qt::Horizontal</enum>\n         </property>\n        </widget>\n       </item>\n       <item alignment=\"Qt::AlignHCenter\">\n        <widget class=\"QWidget\" name=\"regionWidget\" native=\"true\">\n         <layout class=\"QGridLayout\" name=\"gridLayout_2\">\n          <item row=\"7\" column=\"1\">\n           <widget class=\"QLabel\" name=\"currencyLabel\">\n            <property name=\"text\">\n             <string notr=\"true\">TextLabel</string>\n            </property>\n           </widget>\n          </item>\n          <item row=\"3\" column=\"1\">\n           <widget class=\"QLabel\" name=\"dayOfWeekLabel\">\n            <property name=\"text\">\n             <string notr=\"true\">Tableday</string>\n            </property>\n           </widget>\n          </item>\n          <item row=\"6\" column=\"0\">\n           <widget class=\"QLabel\" name=\"label_8\">\n            <property name=\"text\">\n             <string>Numbers</string>\n            </property>\n           </widget>\n          </item>\n          <item row=\"1\" column=\"0\" colspan=\"2\">\n           <widget class=\"QLabel\" name=\"label_4\">\n            <property name=\"text\">\n             <string>Select your preferred regional formats</string>\n            </property>\n           </widget>\n          </item>\n          <item row=\"2\" column=\"1\">\n           <widget class=\"QComboBox\" name=\"countryBox\">\n            <property name=\"sizePolicy\">\n             <sizepolicy hsizetype=\"Expanding\" vsizetype=\"Fixed\">\n              <horstretch>0</horstretch>\n              <verstretch>0</verstretch>\n             </sizepolicy>\n            </property>\n           </widget>\n          </item>\n          <item row=\"0\" column=\"0\" colspan=\"2\">\n           <widget class=\"QLabel\" name=\"label_2\">\n            <property name=\"font\">\n             <font>\n              <weight>75</weight>\n              <bold>true</bold>\n             </font>\n            </property>\n            <property name=\"text\">\n             <string>REGION</string>\n            </property>\n           </widget>\n          </item>\n          <item row=\"4\" column=\"1\">\n           <widget class=\"QLabel\" name=\"timeLabel\">\n            <property name=\"text\">\n             <string notr=\"true\">TextLabel</string>\n            </property>\n           </widget>\n          </item>\n          <item row=\"4\" column=\"0\">\n           <widget class=\"QLabel\" name=\"label_7\">\n            <property name=\"text\">\n             <string>Time</string>\n            </property>\n           </widget>\n          </item>\n          <item row=\"3\" column=\"0\">\n           <widget class=\"QLabel\" name=\"label_6\">\n            <property name=\"text\">\n             <string>First day of week</string>\n            </property>\n           </widget>\n          </item>\n          <item row=\"6\" column=\"1\">\n           <widget class=\"QLabel\" name=\"numbersLabel\">\n            <property name=\"text\">\n             <string notr=\"true\">TextLabel</string>\n            </property>\n           </widget>\n          </item>\n          <item row=\"8\" column=\"0\">\n           <widget class=\"QLabel\" name=\"label_11\">\n            <property name=\"text\">\n             <string>Measurement</string>\n            </property>\n           </widget>\n          </item>\n          <item row=\"8\" column=\"1\">\n           <widget class=\"QLabel\" name=\"measurementLabel\">\n            <property name=\"text\">\n             <string notr=\"true\">TextLabel</string>\n            </property>\n           </widget>\n          </item>\n          <item row=\"5\" column=\"0\">\n           <widget class=\"QLabel\" name=\"label_9\">\n            <property name=\"text\">\n             <string>Date</string>\n            </property>\n           </widget>\n          </item>\n          <item row=\"2\" column=\"0\">\n           <widget class=\"QLabel\" name=\"label_5\">\n            <property name=\"text\">\n             <string>Country</string>\n            </property>\n           </widget>\n          </item>\n          <item row=\"5\" column=\"1\">\n           <widget class=\"QLabel\" name=\"dateLabel\">\n            <property name=\"text\">\n             <string notr=\"true\">TextLabel</string>\n            </property>\n           </widget>\n          </item>\n          <item row=\"7\" column=\"0\">\n           <widget class=\"QLabel\" name=\"label_10\">\n            <property name=\"text\">\n             <string>Currency</string>\n            </property>\n           </widget>\n          </item>\n         </layout>\n        </widget>\n       </item>\n       <item>\n        <spacer name=\"verticalSpacer\">\n         <property name=\"orientation\">\n          <enum>Qt::Vertical</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>20</width>\n           <height>40</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n      </layout>\n     </widget>\n    </widget>\n   </item>\n  </layout>\n </widget>\n <customwidgets>\n  <customwidget>\n   <class>tTitleLabel</class>\n   <extends>QLabel</extends>\n   <header location=\"global\">ttitlelabel.h</header>\n   <slots>\n    <signal>backButtonClicked()</signal>\n   </slots>\n  </customwidget>\n </customwidgets>\n <resources/>\n <connections/>\n</ui>\n"
  },
  {
    "path": "plugins/LocalePlugin/thedesk-locale.conf",
    "content": ""
  },
  {
    "path": "plugins/LocalePlugin/translations/ar_SA.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"ar_SA\" sourcelanguage=\"en_US\">\n<context>\n    <name>LocaleSettingsPane</name>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"35\"/>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"118\"/>\n        <source>Locale</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"107\"/>\n        <source>LANGUAGE</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"114\"/>\n        <source>Prioritise the languages you&apos;d like to use on your device.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"133\"/>\n        <source>Add Language</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"277\"/>\n        <source>Currency</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"221\"/>\n        <source>Time</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"242\"/>\n        <source>Measurement</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"263\"/>\n        <source>Country</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"184\"/>\n        <source>Select your preferred regional formats</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"177\"/>\n        <source>Numbers</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"228\"/>\n        <source>First day of week</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"207\"/>\n        <source>REGION</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"256\"/>\n        <source>Date</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"78\"/>\n        <source>Primary</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"95\"/>\n        <source>Metric</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"98\"/>\n        <source>Imperial</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"101\"/>\n        <source>Imperial (United Kingdom)</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"151\"/>\n        <source>For this language</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"152\"/>\n        <source>Move Up</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"155\"/>\n        <source>Move Down</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"158\"/>\n        <source>Remove</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>OnboardingRegion</name>\n    <message>\n        <location filename=\"../onboarding/onboardingregion.ui\" line=\"35\"/>\n        <location filename=\"../onboarding/onboardingregion.cpp\" line=\"52\"/>\n        <source>Region</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingregion.ui\" line=\"42\"/>\n        <source>Whereabouts are you located? We&apos;ll use this information to format your dates, numbers and other items correctly.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingregion.ui\" line=\"71\"/>\n        <source>Search...</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingregion.ui\" line=\"138\"/>\n        <source>Next</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/LocalePlugin/translations/au_AU.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"au_AU\" sourcelanguage=\"en_US\">\n<context>\n    <name>LocaleSettingsPane</name>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"35\"/>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"118\"/>\n        <source>Locale</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"107\"/>\n        <source>LANGUAGE</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"114\"/>\n        <source>Prioritise the languages you&apos;d like to use on your device.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"133\"/>\n        <source>Add Language</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"277\"/>\n        <source>Currency</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"221\"/>\n        <source>Time</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"242\"/>\n        <source>Measurement</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"263\"/>\n        <source>Country</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"184\"/>\n        <source>Select your preferred regional formats</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"177\"/>\n        <source>Numbers</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"228\"/>\n        <source>First day of week</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"207\"/>\n        <source>REGION</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"256\"/>\n        <source>Date</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"78\"/>\n        <source>Primary</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"95\"/>\n        <source>Metric</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"98\"/>\n        <source>Imperial</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"101\"/>\n        <source>Imperial (United Kingdom)</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"151\"/>\n        <source>For this language</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"152\"/>\n        <source>Move Up</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"155\"/>\n        <source>Move Down</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"158\"/>\n        <source>Remove</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>OnboardingRegion</name>\n    <message>\n        <location filename=\"../onboarding/onboardingregion.ui\" line=\"35\"/>\n        <location filename=\"../onboarding/onboardingregion.cpp\" line=\"52\"/>\n        <source>Region</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingregion.ui\" line=\"42\"/>\n        <source>Whereabouts are you located? We&apos;ll use this information to format your dates, numbers and other items correctly.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingregion.ui\" line=\"71\"/>\n        <source>Search...</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingregion.ui\" line=\"138\"/>\n        <source>Next</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/LocalePlugin/translations/cy.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"cy\" sourcelanguage=\"en_US\">\n<context>\n    <name>LocaleSettingsPane</name>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"35\"/>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"118\"/>\n        <source>Locale</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"107\"/>\n        <source>LANGUAGE</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"114\"/>\n        <source>Prioritise the languages you&apos;d like to use on your device.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"133\"/>\n        <source>Add Language</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"277\"/>\n        <source>Currency</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"221\"/>\n        <source>Time</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"242\"/>\n        <source>Measurement</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"263\"/>\n        <source>Country</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"184\"/>\n        <source>Select your preferred regional formats</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"177\"/>\n        <source>Numbers</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"228\"/>\n        <source>First day of week</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"207\"/>\n        <source>REGION</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"256\"/>\n        <source>Date</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"78\"/>\n        <source>Primary</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"95\"/>\n        <source>Metric</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"98\"/>\n        <source>Imperial</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"101\"/>\n        <source>Imperial (United Kingdom)</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"151\"/>\n        <source>For this language</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"152\"/>\n        <source>Move Up</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"155\"/>\n        <source>Move Down</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"158\"/>\n        <source>Remove</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>OnboardingRegion</name>\n    <message>\n        <location filename=\"../onboarding/onboardingregion.ui\" line=\"35\"/>\n        <location filename=\"../onboarding/onboardingregion.cpp\" line=\"52\"/>\n        <source>Region</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingregion.ui\" line=\"42\"/>\n        <source>Whereabouts are you located? We&apos;ll use this information to format your dates, numbers and other items correctly.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingregion.ui\" line=\"71\"/>\n        <source>Search...</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingregion.ui\" line=\"138\"/>\n        <source>Next</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/LocalePlugin/translations/da.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"da\" sourcelanguage=\"en_US\">\n<context>\n    <name>LocaleSettingsPane</name>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"35\"/>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"118\"/>\n        <source>Locale</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"107\"/>\n        <source>LANGUAGE</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"114\"/>\n        <source>Prioritise the languages you&apos;d like to use on your device.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"133\"/>\n        <source>Add Language</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"277\"/>\n        <source>Currency</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"221\"/>\n        <source>Time</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"242\"/>\n        <source>Measurement</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"263\"/>\n        <source>Country</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"184\"/>\n        <source>Select your preferred regional formats</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"177\"/>\n        <source>Numbers</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"228\"/>\n        <source>First day of week</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"207\"/>\n        <source>REGION</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"256\"/>\n        <source>Date</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"78\"/>\n        <source>Primary</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"95\"/>\n        <source>Metric</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"98\"/>\n        <source>Imperial</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"101\"/>\n        <source>Imperial (United Kingdom)</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"151\"/>\n        <source>For this language</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"152\"/>\n        <source>Move Up</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"155\"/>\n        <source>Move Down</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"158\"/>\n        <source>Remove</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>OnboardingRegion</name>\n    <message>\n        <location filename=\"../onboarding/onboardingregion.ui\" line=\"35\"/>\n        <location filename=\"../onboarding/onboardingregion.cpp\" line=\"52\"/>\n        <source>Region</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingregion.ui\" line=\"42\"/>\n        <source>Whereabouts are you located? We&apos;ll use this information to format your dates, numbers and other items correctly.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingregion.ui\" line=\"71\"/>\n        <source>Search...</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingregion.ui\" line=\"138\"/>\n        <source>Next</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/LocalePlugin/translations/de.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"de\" sourcelanguage=\"en_US\">\n<context>\n    <name>LocaleSettingsPane</name>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"35\"/>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"118\"/>\n        <source>Locale</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"107\"/>\n        <source>LANGUAGE</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"114\"/>\n        <source>Prioritise the languages you&apos;d like to use on your device.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"133\"/>\n        <source>Add Language</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"277\"/>\n        <source>Currency</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"221\"/>\n        <source>Time</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"242\"/>\n        <source>Measurement</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"263\"/>\n        <source>Country</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"184\"/>\n        <source>Select your preferred regional formats</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"177\"/>\n        <source>Numbers</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"228\"/>\n        <source>First day of week</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"207\"/>\n        <source>REGION</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"256\"/>\n        <source>Date</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"78\"/>\n        <source>Primary</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"95\"/>\n        <source>Metric</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"98\"/>\n        <source>Imperial</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"101\"/>\n        <source>Imperial (United Kingdom)</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"151\"/>\n        <source>For this language</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"152\"/>\n        <source>Move Up</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"155\"/>\n        <source>Move Down</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"158\"/>\n        <source>Remove</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>OnboardingRegion</name>\n    <message>\n        <location filename=\"../onboarding/onboardingregion.ui\" line=\"35\"/>\n        <location filename=\"../onboarding/onboardingregion.cpp\" line=\"52\"/>\n        <source>Region</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingregion.ui\" line=\"42\"/>\n        <source>Whereabouts are you located? We&apos;ll use this information to format your dates, numbers and other items correctly.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingregion.ui\" line=\"71\"/>\n        <source>Search...</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingregion.ui\" line=\"138\"/>\n        <source>Next</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/LocalePlugin/translations/en_GB.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"en_GB\" sourcelanguage=\"en_US\">\n<context>\n    <name>LocaleSettingsPane</name>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"35\"/>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"118\"/>\n        <source>Locale</source>\n        <translation>Locale</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"107\"/>\n        <source>LANGUAGE</source>\n        <translation>LANGUAGE</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"114\"/>\n        <source>Prioritise the languages you&apos;d like to use on your device.</source>\n        <translation>Prioritise the languages you would like to use on your device.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"133\"/>\n        <source>Add Language</source>\n        <translation>Add Language</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"277\"/>\n        <source>Currency</source>\n        <translation>Currency</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"221\"/>\n        <source>Time</source>\n        <translation>Time</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"242\"/>\n        <source>Measurement</source>\n        <translation>Measurement</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"263\"/>\n        <source>Country</source>\n        <translation>Country</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"184\"/>\n        <source>Select your preferred regional formats</source>\n        <translation>Select your preferred regional formats</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"177\"/>\n        <source>Numbers</source>\n        <translation>Numbers</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"228\"/>\n        <source>First day of week</source>\n        <translation>First day of week</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"207\"/>\n        <source>REGION</source>\n        <translation>REGION</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"256\"/>\n        <source>Date</source>\n        <translation>Date</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"78\"/>\n        <source>Primary</source>\n        <translation>Primary</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"95\"/>\n        <source>Metric</source>\n        <translation>Metric</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"98\"/>\n        <source>Imperial</source>\n        <translation>Imperial</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"101\"/>\n        <source>Imperial (United Kingdom)</source>\n        <translation>Imperial (United Kingdom)</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"151\"/>\n        <source>For this language</source>\n        <translation>For this language</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"152\"/>\n        <source>Move Up</source>\n        <translation>Move Up</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"155\"/>\n        <source>Move Down</source>\n        <translation>Move Down</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"158\"/>\n        <source>Remove</source>\n        <translation>Remove</translation>\n    </message>\n</context>\n<context>\n    <name>OnboardingRegion</name>\n    <message>\n        <location filename=\"../onboarding/onboardingregion.ui\" line=\"35\"/>\n        <location filename=\"../onboarding/onboardingregion.cpp\" line=\"52\"/>\n        <source>Region</source>\n        <translation>Region</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingregion.ui\" line=\"42\"/>\n        <source>Whereabouts are you located? We&apos;ll use this information to format your dates, numbers and other items correctly.</source>\n        <translation>Whereabouts are you located? We&apos;ll use this information to format your dates, numbers and other items correctly.</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingregion.ui\" line=\"71\"/>\n        <source>Search...</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingregion.ui\" line=\"138\"/>\n        <source>Next</source>\n        <translation>Next</translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/LocalePlugin/translations/en_US.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"en_US\" sourcelanguage=\"en_US\">\n<context>\n    <name>LocaleSettingsPane</name>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"35\"/>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"118\"/>\n        <source>Locale</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"107\"/>\n        <source>LANGUAGE</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"114\"/>\n        <source>Prioritise the languages you&apos;d like to use on your device.</source>\n        <translation>Prioritize what languages you&apos;d like on your device.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"133\"/>\n        <source>Add Language</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"277\"/>\n        <source>Currency</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"221\"/>\n        <source>Time</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"242\"/>\n        <source>Measurement</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"263\"/>\n        <source>Country</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"184\"/>\n        <source>Select your preferred regional formats</source>\n        <translation>Select your regional formats</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"177\"/>\n        <source>Numbers</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"228\"/>\n        <source>First day of week</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"207\"/>\n        <source>REGION</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"256\"/>\n        <source>Date</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"78\"/>\n        <source>Primary</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"95\"/>\n        <source>Metric</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"98\"/>\n        <source>Imperial</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"101\"/>\n        <source>Imperial (United Kingdom)</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"151\"/>\n        <source>For this language</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"152\"/>\n        <source>Move Up</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"155\"/>\n        <source>Move Down</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"158\"/>\n        <source>Remove</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>OnboardingRegion</name>\n    <message>\n        <location filename=\"../onboarding/onboardingregion.ui\" line=\"35\"/>\n        <location filename=\"../onboarding/onboardingregion.cpp\" line=\"52\"/>\n        <source>Region</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingregion.ui\" line=\"42\"/>\n        <source>Whereabouts are you located? We&apos;ll use this information to format your dates, numbers and other items correctly.</source>\n        <translation>Where are you located? This&apos;ll format your dates, numbers, and other items correctly.</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingregion.ui\" line=\"71\"/>\n        <source>Search...</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingregion.ui\" line=\"138\"/>\n        <source>Next</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/LocalePlugin/translations/es.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"es\" sourcelanguage=\"en_US\">\n<context>\n    <name>LocaleSettingsPane</name>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"35\"/>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"118\"/>\n        <source>Locale</source>\n        <translation>Lugar</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"107\"/>\n        <source>LANGUAGE</source>\n        <translation>IDIOMA</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"114\"/>\n        <source>Prioritise the languages you&apos;d like to use on your device.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"133\"/>\n        <source>Add Language</source>\n        <translation>Agregar idioma</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"277\"/>\n        <source>Currency</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"221\"/>\n        <source>Time</source>\n        <translation>Tiempo</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"242\"/>\n        <source>Measurement</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"263\"/>\n        <source>Country</source>\n        <translation>País</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"184\"/>\n        <source>Select your preferred regional formats</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"177\"/>\n        <source>Numbers</source>\n        <translation>Numeros</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"228\"/>\n        <source>First day of week</source>\n        <translation>Primer día de la semana</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"207\"/>\n        <source>REGION</source>\n        <translation>REGIÓN</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"256\"/>\n        <source>Date</source>\n        <translation>Fecha</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"78\"/>\n        <source>Primary</source>\n        <translation>Primario</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"95\"/>\n        <source>Metric</source>\n        <translation>Métrico</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"98\"/>\n        <source>Imperial</source>\n        <translation>Imperial</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"101\"/>\n        <source>Imperial (United Kingdom)</source>\n        <translation>Imperial (Reino Unido)</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"151\"/>\n        <source>For this language</source>\n        <translation>Para este idioma</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"152\"/>\n        <source>Move Up</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"155\"/>\n        <source>Move Down</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"158\"/>\n        <source>Remove</source>\n        <translation>Retirar</translation>\n    </message>\n</context>\n<context>\n    <name>OnboardingRegion</name>\n    <message>\n        <location filename=\"../onboarding/onboardingregion.ui\" line=\"35\"/>\n        <location filename=\"../onboarding/onboardingregion.cpp\" line=\"52\"/>\n        <source>Region</source>\n        <translation>Región</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingregion.ui\" line=\"42\"/>\n        <source>Whereabouts are you located? We&apos;ll use this information to format your dates, numbers and other items correctly.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingregion.ui\" line=\"71\"/>\n        <source>Search...</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingregion.ui\" line=\"138\"/>\n        <source>Next</source>\n        <translation>Siguiente</translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/LocalePlugin/translations/es_VE.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"es_VE\" sourcelanguage=\"en_US\">\n<context>\n    <name>LocaleSettingsPane</name>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"35\"/>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"118\"/>\n        <source>Locale</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"107\"/>\n        <source>LANGUAGE</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"114\"/>\n        <source>Prioritise the languages you&apos;d like to use on your device.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"133\"/>\n        <source>Add Language</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"277\"/>\n        <source>Currency</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"221\"/>\n        <source>Time</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"242\"/>\n        <source>Measurement</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"263\"/>\n        <source>Country</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"184\"/>\n        <source>Select your preferred regional formats</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"177\"/>\n        <source>Numbers</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"228\"/>\n        <source>First day of week</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"207\"/>\n        <source>REGION</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"256\"/>\n        <source>Date</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"78\"/>\n        <source>Primary</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"95\"/>\n        <source>Metric</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"98\"/>\n        <source>Imperial</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"101\"/>\n        <source>Imperial (United Kingdom)</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"151\"/>\n        <source>For this language</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"152\"/>\n        <source>Move Up</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"155\"/>\n        <source>Move Down</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"158\"/>\n        <source>Remove</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>OnboardingRegion</name>\n    <message>\n        <location filename=\"../onboarding/onboardingregion.ui\" line=\"35\"/>\n        <location filename=\"../onboarding/onboardingregion.cpp\" line=\"52\"/>\n        <source>Region</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingregion.ui\" line=\"42\"/>\n        <source>Whereabouts are you located? We&apos;ll use this information to format your dates, numbers and other items correctly.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingregion.ui\" line=\"71\"/>\n        <source>Search...</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingregion.ui\" line=\"138\"/>\n        <source>Next</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/LocalePlugin/translations/id.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"id\" sourcelanguage=\"en_US\">\n<context>\n    <name>LocaleSettingsPane</name>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"35\"/>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"118\"/>\n        <source>Locale</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"107\"/>\n        <source>LANGUAGE</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"114\"/>\n        <source>Prioritise the languages you&apos;d like to use on your device.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"133\"/>\n        <source>Add Language</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"277\"/>\n        <source>Currency</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"221\"/>\n        <source>Time</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"242\"/>\n        <source>Measurement</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"263\"/>\n        <source>Country</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"184\"/>\n        <source>Select your preferred regional formats</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"177\"/>\n        <source>Numbers</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"228\"/>\n        <source>First day of week</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"207\"/>\n        <source>REGION</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"256\"/>\n        <source>Date</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"78\"/>\n        <source>Primary</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"95\"/>\n        <source>Metric</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"98\"/>\n        <source>Imperial</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"101\"/>\n        <source>Imperial (United Kingdom)</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"151\"/>\n        <source>For this language</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"152\"/>\n        <source>Move Up</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"155\"/>\n        <source>Move Down</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"158\"/>\n        <source>Remove</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>OnboardingRegion</name>\n    <message>\n        <location filename=\"../onboarding/onboardingregion.ui\" line=\"35\"/>\n        <location filename=\"../onboarding/onboardingregion.cpp\" line=\"52\"/>\n        <source>Region</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingregion.ui\" line=\"42\"/>\n        <source>Whereabouts are you located? We&apos;ll use this information to format your dates, numbers and other items correctly.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingregion.ui\" line=\"71\"/>\n        <source>Search...</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingregion.ui\" line=\"138\"/>\n        <source>Next</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/LocalePlugin/translations/nl.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"nl\" sourcelanguage=\"en_US\">\n<context>\n    <name>LocaleSettingsPane</name>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"35\"/>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"118\"/>\n        <source>Locale</source>\n        <translation>Taal</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"107\"/>\n        <source>LANGUAGE</source>\n        <translation>TAAL</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"114\"/>\n        <source>Prioritise the languages you&apos;d like to use on your device.</source>\n        <translation>Geef de talen die je op te apparaat wil gebruiken prioriteit.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"133\"/>\n        <source>Add Language</source>\n        <translation>Taal Toevoegen</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"277\"/>\n        <source>Currency</source>\n        <translation>Munteenheid</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"221\"/>\n        <source>Time</source>\n        <translation>Tijd</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"242\"/>\n        <source>Measurement</source>\n        <translation>Lengtes</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"263\"/>\n        <source>Country</source>\n        <translation>Land</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"184\"/>\n        <source>Select your preferred regional formats</source>\n        <translation>Selecteer de regionale formaten van je voorkeur</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"177\"/>\n        <source>Numbers</source>\n        <translation>Getallen</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"228\"/>\n        <source>First day of week</source>\n        <translation>Eerste dag van de week</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"207\"/>\n        <source>REGION</source>\n        <translation>REGIO</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"256\"/>\n        <source>Date</source>\n        <translation>Datum</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"78\"/>\n        <source>Primary</source>\n        <translation>Primair</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"95\"/>\n        <source>Metric</source>\n        <translation>Metriek</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"98\"/>\n        <source>Imperial</source>\n        <translation>Amerikaans</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"101\"/>\n        <source>Imperial (United Kingdom)</source>\n        <translation>Brits</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"151\"/>\n        <source>For this language</source>\n        <translation>Voor deze taal</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"152\"/>\n        <source>Move Up</source>\n        <translation>Omhoog</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"155\"/>\n        <source>Move Down</source>\n        <translation>Omlaag</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"158\"/>\n        <source>Remove</source>\n        <translation>Weghalen</translation>\n    </message>\n</context>\n<context>\n    <name>OnboardingRegion</name>\n    <message>\n        <location filename=\"../onboarding/onboardingregion.ui\" line=\"35\"/>\n        <location filename=\"../onboarding/onboardingregion.cpp\" line=\"52\"/>\n        <source>Region</source>\n        <translation>Regio</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingregion.ui\" line=\"42\"/>\n        <source>Whereabouts are you located? We&apos;ll use this information to format your dates, numbers and other items correctly.</source>\n        <translation>Wat is je verblijfplaats? Deze informatie gebruiken we om je data, getallen en andere dingen juist weer te geven.</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingregion.ui\" line=\"71\"/>\n        <source>Search...</source>\n        <translation>Zoeken...</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingregion.ui\" line=\"138\"/>\n        <source>Next</source>\n        <translation>Volgende</translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/LocalePlugin/translations/pt_BR.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"pt_BR\" sourcelanguage=\"en_US\">\n<context>\n    <name>LocaleSettingsPane</name>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"35\"/>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"118\"/>\n        <source>Locale</source>\n        <translation>Localidade</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"107\"/>\n        <source>LANGUAGE</source>\n        <translation>IDIOMA</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"114\"/>\n        <source>Prioritise the languages you&apos;d like to use on your device.</source>\n        <translation>Escolha as línguas que gostaria de usar no seu dispositivo.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"133\"/>\n        <source>Add Language</source>\n        <translation>Adicionar idioma</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"277\"/>\n        <source>Currency</source>\n        <translation>Moeda</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"221\"/>\n        <source>Time</source>\n        <translation>Hora</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"242\"/>\n        <source>Measurement</source>\n        <translation>Unidades de medida</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"263\"/>\n        <source>Country</source>\n        <translation>País</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"184\"/>\n        <source>Select your preferred regional formats</source>\n        <translation>Selecione seus formatos regionais preferidos</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"177\"/>\n        <source>Numbers</source>\n        <translation>Números</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"228\"/>\n        <source>First day of week</source>\n        <translation>Primeiro dia da semana</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"207\"/>\n        <source>REGION</source>\n        <translation>REGIÃO</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"256\"/>\n        <source>Date</source>\n        <translation>Data</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"78\"/>\n        <source>Primary</source>\n        <translation>Primário</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"95\"/>\n        <source>Metric</source>\n        <translation>Métrico</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"98\"/>\n        <source>Imperial</source>\n        <translation>Imperial</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"101\"/>\n        <source>Imperial (United Kingdom)</source>\n        <translation>Imperial (Reino Unido)</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"151\"/>\n        <source>For this language</source>\n        <translation>Para essa língua</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"152\"/>\n        <source>Move Up</source>\n        <translation>Mover para cima</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"155\"/>\n        <source>Move Down</source>\n        <translation>Mover para baixo</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"158\"/>\n        <source>Remove</source>\n        <translation>Remover</translation>\n    </message>\n</context>\n<context>\n    <name>OnboardingRegion</name>\n    <message>\n        <location filename=\"../onboarding/onboardingregion.ui\" line=\"35\"/>\n        <location filename=\"../onboarding/onboardingregion.cpp\" line=\"52\"/>\n        <source>Region</source>\n        <translation>Região</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingregion.ui\" line=\"42\"/>\n        <source>Whereabouts are you located? We&apos;ll use this information to format your dates, numbers and other items correctly.</source>\n        <translation>Onde você está localizado? Utilizaremos esta informação para formatar datas, números e outros itens corretamente.</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingregion.ui\" line=\"71\"/>\n        <source>Search...</source>\n        <translation>Pesquisar…</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingregion.ui\" line=\"138\"/>\n        <source>Next</source>\n        <translation>Próximo</translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/LocalePlugin/translations/ro_RO.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"ro_RO\" sourcelanguage=\"en_US\">\n<context>\n    <name>LocaleSettingsPane</name>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"35\"/>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"118\"/>\n        <source>Locale</source>\n        <translation>Limbă și regiune</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"107\"/>\n        <source>LANGUAGE</source>\n        <translation>Limbă</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"114\"/>\n        <source>Prioritise the languages you&apos;d like to use on your device.</source>\n        <translation>Ordonați limbile pe care le folosiți pe dispozitiv.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"133\"/>\n        <source>Add Language</source>\n        <translation>Adaugă o limbă</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"277\"/>\n        <source>Currency</source>\n        <translation>Moneda</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"221\"/>\n        <source>Time</source>\n        <translation>Ora</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"242\"/>\n        <source>Measurement</source>\n        <translation>Sistemul de măsurători</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"263\"/>\n        <source>Country</source>\n        <translation>Țară</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"184\"/>\n        <source>Select your preferred regional formats</source>\n        <translation>Selectați formatele regionale pe care le folosiți</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"177\"/>\n        <source>Numbers</source>\n        <translation>Numere</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"228\"/>\n        <source>First day of week</source>\n        <translation>Prima zi din săptămână</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"207\"/>\n        <source>REGION</source>\n        <translation>Regiune</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"256\"/>\n        <source>Date</source>\n        <translation>Dată</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"78\"/>\n        <source>Primary</source>\n        <translation>Principal</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"95\"/>\n        <source>Metric</source>\n        <translation>Metric</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"98\"/>\n        <source>Imperial</source>\n        <translation>Imperial</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"101\"/>\n        <source>Imperial (United Kingdom)</source>\n        <translation>Imperial (Regatul Unit)</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"151\"/>\n        <source>For this language</source>\n        <translation>Pentru această limbă</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"152\"/>\n        <source>Move Up</source>\n        <translation>Mută sus</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"155\"/>\n        <source>Move Down</source>\n        <translation>Mută jos</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"158\"/>\n        <source>Remove</source>\n        <translation>Elimină</translation>\n    </message>\n</context>\n<context>\n    <name>OnboardingRegion</name>\n    <message>\n        <location filename=\"../onboarding/onboardingregion.ui\" line=\"35\"/>\n        <location filename=\"../onboarding/onboardingregion.cpp\" line=\"52\"/>\n        <source>Region</source>\n        <translation>Regiune</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingregion.ui\" line=\"42\"/>\n        <source>Whereabouts are you located? We&apos;ll use this information to format your dates, numbers and other items correctly.</source>\n        <translation>Unde vă aflați? Vom folosi informația să aranjăm datele calendaristice, numerele și alte lucruri corect.</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingregion.ui\" line=\"71\"/>\n        <source>Search...</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingregion.ui\" line=\"138\"/>\n        <source>Next</source>\n        <translation>Următorul</translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/LocalePlugin/translations/sv.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"sv\" sourcelanguage=\"en_US\">\n<context>\n    <name>LocaleSettingsPane</name>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"35\"/>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"118\"/>\n        <source>Locale</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"107\"/>\n        <source>LANGUAGE</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"114\"/>\n        <source>Prioritise the languages you&apos;d like to use on your device.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"133\"/>\n        <source>Add Language</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"277\"/>\n        <source>Currency</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"221\"/>\n        <source>Time</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"242\"/>\n        <source>Measurement</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"263\"/>\n        <source>Country</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"184\"/>\n        <source>Select your preferred regional formats</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"177\"/>\n        <source>Numbers</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"228\"/>\n        <source>First day of week</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"207\"/>\n        <source>REGION</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"256\"/>\n        <source>Date</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"78\"/>\n        <source>Primary</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"95\"/>\n        <source>Metric</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"98\"/>\n        <source>Imperial</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"101\"/>\n        <source>Imperial (United Kingdom)</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"151\"/>\n        <source>For this language</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"152\"/>\n        <source>Move Up</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"155\"/>\n        <source>Move Down</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"158\"/>\n        <source>Remove</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>OnboardingRegion</name>\n    <message>\n        <location filename=\"../onboarding/onboardingregion.ui\" line=\"35\"/>\n        <location filename=\"../onboarding/onboardingregion.cpp\" line=\"52\"/>\n        <source>Region</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingregion.ui\" line=\"42\"/>\n        <source>Whereabouts are you located? We&apos;ll use this information to format your dates, numbers and other items correctly.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingregion.ui\" line=\"71\"/>\n        <source>Search...</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingregion.ui\" line=\"138\"/>\n        <source>Next</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/LocalePlugin/translations/tr_TR.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"tr_TR\" sourcelanguage=\"en_US\">\n<context>\n    <name>LocaleSettingsPane</name>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"35\"/>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"118\"/>\n        <source>Locale</source>\n        <translation>Yerel</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"107\"/>\n        <source>LANGUAGE</source>\n        <translation>DİL</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"114\"/>\n        <source>Prioritise the languages you&apos;d like to use on your device.</source>\n        <translation>Cihazınızda kullanmak istediğiniz dillere öncelik verin.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"133\"/>\n        <source>Add Language</source>\n        <translation>Dil Ekle</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"277\"/>\n        <source>Currency</source>\n        <translation>Para birimi</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"221\"/>\n        <source>Time</source>\n        <translation>Zaman</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"242\"/>\n        <source>Measurement</source>\n        <translation>Ölçüm</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"263\"/>\n        <source>Country</source>\n        <translation>Ülke</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"184\"/>\n        <source>Select your preferred regional formats</source>\n        <translation>Tercih ettiğiniz bölgesel biçimleri seçin</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"177\"/>\n        <source>Numbers</source>\n        <translation>Sayılar</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"228\"/>\n        <source>First day of week</source>\n        <translation>Haftanın ilk günü</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"207\"/>\n        <source>REGION</source>\n        <translation>BÖLGE</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"256\"/>\n        <source>Date</source>\n        <translation>Tarih</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"78\"/>\n        <source>Primary</source>\n        <translation>Birincil</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"95\"/>\n        <source>Metric</source>\n        <translation>Metrik</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"98\"/>\n        <source>Imperial</source>\n        <translation>İmparatorluk</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"101\"/>\n        <source>Imperial (United Kingdom)</source>\n        <translation>İmparatorluk (Birleşik Krallık)</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"151\"/>\n        <source>For this language</source>\n        <translation>Bu dil için</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"152\"/>\n        <source>Move Up</source>\n        <translation>Yukarı Taşı</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"155\"/>\n        <source>Move Down</source>\n        <translation>Aşağı inmek</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"158\"/>\n        <source>Remove</source>\n        <translation>Kaldırmak</translation>\n    </message>\n</context>\n<context>\n    <name>OnboardingRegion</name>\n    <message>\n        <location filename=\"../onboarding/onboardingregion.ui\" line=\"35\"/>\n        <location filename=\"../onboarding/onboardingregion.cpp\" line=\"52\"/>\n        <source>Region</source>\n        <translation>Bölge</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingregion.ui\" line=\"42\"/>\n        <source>Whereabouts are you located? We&apos;ll use this information to format your dates, numbers and other items correctly.</source>\n        <translation>Nerelerde bulunuyorsunuz? Bu bilgileri tarihlerinizi, sayılarınızı ve diğer öğelerinizi doğru şekilde biçimlendirmek için kullanacağız.</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingregion.ui\" line=\"71\"/>\n        <source>Search...</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingregion.ui\" line=\"138\"/>\n        <source>Next</source>\n        <translation>Sonraki</translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/LocalePlugin/translations/vi_VN.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"vi_VN\" sourcelanguage=\"en_US\">\n<context>\n    <name>LocaleSettingsPane</name>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"35\"/>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"118\"/>\n        <source>Locale</source>\n        <translation>Ngôn Ngữ và Lãnh Thổ</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"107\"/>\n        <source>LANGUAGE</source>\n        <translation>NGÔN NGỮ</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"114\"/>\n        <source>Prioritise the languages you&apos;d like to use on your device.</source>\n        <translation>Đặt ưu tiên cho ngôn ngữ bạn muốn sử dụng trên thiết bị này.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"133\"/>\n        <source>Add Language</source>\n        <translation>Thêm ngôn ngữ</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"277\"/>\n        <source>Currency</source>\n        <translation>Tiền tệ</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"221\"/>\n        <source>Time</source>\n        <translation>Thời gian</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"242\"/>\n        <source>Measurement</source>\n        <translation>Hệ đo lường</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"263\"/>\n        <source>Country</source>\n        <translation>Quốc gia</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"184\"/>\n        <source>Select your preferred regional formats</source>\n        <translation>Chọn định dạng lãnh thổ của bạn</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"177\"/>\n        <source>Numbers</source>\n        <translation>Cách ghi số</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"228\"/>\n        <source>First day of week</source>\n        <translation>Ngày đầu tuần</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"207\"/>\n        <source>REGION</source>\n        <translation>LÃNH THỔ</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"256\"/>\n        <source>Date</source>\n        <translation>Ngày và tháng</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"78\"/>\n        <source>Primary</source>\n        <translation>Chính</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"95\"/>\n        <source>Metric</source>\n        <translation>Hệ mét</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"98\"/>\n        <source>Imperial</source>\n        <translation>Hệ Imperial</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"101\"/>\n        <source>Imperial (United Kingdom)</source>\n        <translation>Hệ Imperial (Vương quốc Anh)</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"151\"/>\n        <source>For this language</source>\n        <translation>Cho ngôn ngữ này</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"152\"/>\n        <source>Move Up</source>\n        <translation>Chuyển lên</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"155\"/>\n        <source>Move Down</source>\n        <translation>Chuyển xuống</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"158\"/>\n        <source>Remove</source>\n        <translation>Xóa</translation>\n    </message>\n</context>\n<context>\n    <name>OnboardingRegion</name>\n    <message>\n        <location filename=\"../onboarding/onboardingregion.ui\" line=\"35\"/>\n        <location filename=\"../onboarding/onboardingregion.cpp\" line=\"52\"/>\n        <source>Region</source>\n        <translation>Khu vực</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingregion.ui\" line=\"42\"/>\n        <source>Whereabouts are you located? We&apos;ll use this information to format your dates, numbers and other items correctly.</source>\n        <translation>Bạn đang ở đâu? Chúng tôi sẽ sử dụng thông tin này để định dạng các ngày, số và điều khác.</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingregion.ui\" line=\"71\"/>\n        <source>Search...</source>\n        <translation>Tìm kiếm...</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingregion.ui\" line=\"138\"/>\n        <source>Next</source>\n        <translation>Tiếp</translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/LocalePlugin/translations/zh_CN.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"zh_CN\" sourcelanguage=\"en_US\">\n<context>\n    <name>LocaleSettingsPane</name>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"35\"/>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"118\"/>\n        <source>Locale</source>\n        <translation>地区</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"107\"/>\n        <source>LANGUAGE</source>\n        <translation>语言</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"114\"/>\n        <source>Prioritise the languages you&apos;d like to use on your device.</source>\n        <translation>优先选择设备语言。</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"133\"/>\n        <source>Add Language</source>\n        <translation>增加语言</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"277\"/>\n        <source>Currency</source>\n        <translation>货币</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"221\"/>\n        <source>Time</source>\n        <translation>时间</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"242\"/>\n        <source>Measurement</source>\n        <translation>测量</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"263\"/>\n        <source>Country</source>\n        <translation>国家</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"184\"/>\n        <source>Select your preferred regional formats</source>\n        <translation>选择你的区域格式</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"177\"/>\n        <source>Numbers</source>\n        <translation>数字</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"228\"/>\n        <source>First day of week</source>\n        <translation>周的第一天</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"207\"/>\n        <source>REGION</source>\n        <translation>地区</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"256\"/>\n        <source>Date</source>\n        <translation>日期</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"78\"/>\n        <source>Primary</source>\n        <translation>主选项</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"95\"/>\n        <source>Metric</source>\n        <translation>公制</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"98\"/>\n        <source>Imperial</source>\n        <translation>英制</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"101\"/>\n        <source>Imperial (United Kingdom)</source>\n        <translation>英制</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"151\"/>\n        <source>For this language</source>\n        <translation>此语言</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"152\"/>\n        <source>Move Up</source>\n        <translation>选上</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"155\"/>\n        <source>Move Down</source>\n        <translation>选下</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"158\"/>\n        <source>Remove</source>\n        <translation>移除</translation>\n    </message>\n</context>\n<context>\n    <name>OnboardingRegion</name>\n    <message>\n        <location filename=\"../onboarding/onboardingregion.ui\" line=\"35\"/>\n        <location filename=\"../onboarding/onboardingregion.cpp\" line=\"52\"/>\n        <source>Region</source>\n        <translation>地区</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingregion.ui\" line=\"42\"/>\n        <source>Whereabouts are you located? We&apos;ll use this information to format your dates, numbers and other items correctly.</source>\n        <translation>你在哪里？ 我们会用这个信息来定制您的日期， 数字和其它数据。</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingregion.ui\" line=\"71\"/>\n        <source>Search...</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingregion.ui\" line=\"138\"/>\n        <source>Next</source>\n        <translation>下一个</translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/LocalePlugin/translations/zu_ZA.qm",
    "content": "<d\u0018!\u001c`"
  },
  {
    "path": "plugins/LocalePlugin/translations/zu_ZA.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" sourcelanguage=\"en_US\">\n<context>\n    <name>LocaleSettingsPane</name>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"35\"/>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"118\"/>\n        <source>Locale</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"107\"/>\n        <source>LANGUAGE</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"114\"/>\n        <source>Prioritise the languages you&apos;d like to use on your device.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"133\"/>\n        <source>Add Language</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"277\"/>\n        <source>Currency</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"221\"/>\n        <source>Time</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"242\"/>\n        <source>Measurement</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"263\"/>\n        <source>Country</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"184\"/>\n        <source>Select your preferred regional formats</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"177\"/>\n        <source>Numbers</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"228\"/>\n        <source>First day of week</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"207\"/>\n        <source>REGION</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.ui\" line=\"256\"/>\n        <source>Date</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"78\"/>\n        <source>Primary</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"95\"/>\n        <source>Metric</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"98\"/>\n        <source>Imperial</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"101\"/>\n        <source>Imperial (United Kingdom)</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"151\"/>\n        <source>For this language</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"152\"/>\n        <source>Move Up</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"155\"/>\n        <source>Move Down</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/localesettingspane.cpp\" line=\"158\"/>\n        <source>Remove</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>OnboardingRegion</name>\n    <message>\n        <location filename=\"../onboarding/onboardingregion.ui\" line=\"35\"/>\n        <location filename=\"../onboarding/onboardingregion.cpp\" line=\"52\"/>\n        <source>Region</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingregion.ui\" line=\"42\"/>\n        <source>Whereabouts are you located? We&apos;ll use this information to format your dates, numbers and other items correctly.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingregion.ui\" line=\"71\"/>\n        <source>Search...</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingregion.ui\" line=\"138\"/>\n        <source>Next</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/NetworkPlugin/CMakeLists.txt",
    "content": "cmake_minimum_required(VERSION 3.24.0)\n\nfind_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets DBus)\nfind_package(libcontemporary)\nfind_package(KF${KF_VERSION_MAJOR}NetworkManagerQt REQUIRED)\nfind_package(KF${KF_VERSION_MAJOR}ModemManagerQt REQUIRED)\ncntp_find_pkgconfig(qrencode libqrencode REQUIRED)\n\nset(SOURCES\n    chunk/chunkupdater.cpp\n    chunk/genericchunkupdater.cpp\n    chunk/networkchunk.cpp\n    chunk/wiredchunkupdater.cpp\n    chunk/wirelesschunkupdater.cpp\n    networkplugincommon.cpp\n    models/deviceconnectionlistmodel.cpp\n    models/wirelessaccesspointsmodel.cpp\n    models/wirelessconnectionlistmodel.cpp\n    models/wirelessnetworklistdelegate.cpp\n    onboarding/onboardingnetwork.cpp\n    onboarding/wiredonboardingsetup.cpp\n    onboarding/wirelessonboardingsetup.cpp\n    plugin.cpp\n    statusCenter/connectionEditor/connectioneditorpane.cpp\n    statusCenter/connectionEditor/ipv4connectioneditorpane.cpp\n    statusCenter/connectionEditor/networkconnectioneditor.cpp\n    statusCenter/connectionEditor/wificonnectioneditorpane.cpp\n    statusCenter/devicePanes/abstractdevicepane.cpp\n    statusCenter/devicePanes/cellularpane.cpp\n    statusCenter/devicePanes/devicepane.cpp\n    statusCenter/devicePanes/wifidevicepane.cpp\n    statusCenter/devicePanes/wireddevicepane.cpp\n    statusCenter/eap/securityeap.cpp\n    statusCenter/eap/securityeappeap.cpp\n    statusCenter/eap/securityeapunsupported.cpp\n    statusCenter/networkstatuscenterleftpane.cpp\n    statusCenter/networkstatuscenterpane.cpp\n    statusCenter/popovers/connectionselectionpopover.cpp\n    statusCenter/popovers/simsettingspopover.cpp\n    statusCenter/popovers/tetheringsettingspopover.cpp\n    statusCenter/popovers/unlockmodempopover.cpp\n    statusCenter/popovers/wirelessnetworkselectionpopover.cpp\n    switchmanager.cpp\n\n    onboarding/onboardingnetwork.ui\n    onboarding/wiredonboardingsetup.ui\n    onboarding/wirelessonboardingsetup.ui\n    statusCenter/connectionEditor/ipv4connectioneditorpane.ui\n    statusCenter/connectionEditor/networkconnectioneditor.ui\n    statusCenter/connectionEditor/wificonnectioneditorpane.ui\n    statusCenter/devicePanes/cellularpane.ui\n    statusCenter/devicePanes/devicepane.ui\n    statusCenter/devicePanes/wifidevicepane.ui\n    statusCenter/devicePanes/wireddevicepane.ui\n    statusCenter/eap/securityeappeap.ui\n    statusCenter/eap/securityeapunsupported.ui\n    statusCenter/networkstatuscenterleftpane.ui\n    statusCenter/networkstatuscenterpane.ui\n    statusCenter/popovers/connectionselectionpopover.ui\n    statusCenter/popovers/simsettingspopover.ui\n    statusCenter/popovers/tetheringsettingspopover.ui\n    statusCenter/popovers/unlockmodempopover.ui\n    statusCenter/popovers/wirelessnetworkselectionpopover.ui\n)\n\nset(HEADERS\n    chunk/chunkupdater.h\n    chunk/genericchunkupdater.h\n    chunk/networkchunk.h\n    chunk/wiredchunkupdater.h\n    chunk/wirelesschunkupdater.h\n    networkplugincommon.h\n    models/deviceconnectionlistmodel.h\n    models/wirelessaccesspointsmodel.h\n    models/wirelessconnectionlistmodel.h\n    models/wirelessnetworklistdelegate.h\n    onboarding/onboardingnetwork.h\n    onboarding/wiredonboardingsetup.h\n    onboarding/wirelessonboardingsetup.h\n    plugin.h\n    statusCenter/connectionEditor/connectioneditorpane.h\n    statusCenter/connectionEditor/ipv4connectioneditorpane.h\n    statusCenter/connectionEditor/networkconnectioneditor.h\n    statusCenter/connectionEditor/wificonnectioneditorpane.h\n    statusCenter/devicePanes/abstractdevicepane.h\n    statusCenter/devicePanes/cellularpane.h\n    statusCenter/devicePanes/devicepane.h\n    statusCenter/devicePanes/wifidevicepane.h\n    statusCenter/devicePanes/wireddevicepane.h\n    statusCenter/eap/securityeap.h\n    statusCenter/eap/securityeappeap.h\n    statusCenter/eap/securityeapunsupported.h\n    statusCenter/networkstatuscenterleftpane.h\n    statusCenter/networkstatuscenterpane.h\n    statusCenter/popovers/connectionselectionpopover.h\n    statusCenter/popovers/simsettingspopover.h\n    statusCenter/popovers/tetheringsettingspopover.h\n    statusCenter/popovers/unlockmodempopover.h\n    statusCenter/popovers/wirelessnetworkselectionpopover.h\n    switchmanager.h\n)\n\nset(PLUGIN_NAME network)\nadd_plugin_td(${PLUGIN_NAME})\ntarget_sources(plugin-${PLUGIN_NAME} PRIVATE ${SOURCES} ${HEADERS})\ncntp_defaults_file(${PLUGIN_NAME}\n    DEFAULTS_FILE thedesk-network.conf)\n\ntarget_link_libraries(plugin-${PLUGIN_NAME} Qt::Widgets Qt::Multimedia KF${KF_VERSION_MAJOR}::NetworkManagerQt KF${KF_VERSION_MAJOR}::ModemManagerQt PkgConfig::qrencode libcontemporary libthedesk)\n"
  },
  {
    "path": "plugins/NetworkPlugin/NetworkPlugin.pro",
    "content": "QT += gui widgets network concurrent\n\nTEMPLATE = lib\nCONFIG += plugin\n\nCONFIG += c++11\n\n# Include the-libs build tools\ninclude(/usr/share/the-libs/pri/gentranslations.pri)\n\n#For some reason they got rid of QMake support, so we'll have to hack this in for now\nqtHaveModule(ModemManagerQt) {\n    QT += ModemManagerQt\n} else {\n    INCLUDEPATH += /usr/include/KF5/ModemManagerQt/ /usr/include/ModemManager/\n    LIBS += -lKF5ModemManagerQt\n}\n\nqtHaveModule(NetworkManagerQt) {\n    QT += NetworkManagerQt\n} else {\n    INCLUDEPATH += /usr/include/KF5/NetworkManagerQt/\n    LIBS += -lKF5NetworkManagerQt\n}\n\n\n\n# The following define makes your compiler emit warnings if you use\n# any Qt feature that has been marked deprecated (the exact warnings\n# depend on your compiler). Please consult the documentation of the\n# deprecated API in order to know how to port your code away from it.\nDEFINES += QT_DEPRECATED_WARNINGS\n\n# You can also make your code fail to compile if it uses deprecated APIs.\n# In order to do so, uncomment the following line.\n# You can also select to disable deprecated APIs only up to a certain version of Qt.\n#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0\n\nSOURCES += \\\n    chunk/chunkupdater.cpp \\\n    chunk/genericchunkupdater.cpp \\\n    chunk/networkchunk.cpp \\\n    chunk/wiredchunkupdater.cpp \\\n    chunk/wirelesschunkupdater.cpp \\\n    common.cpp \\\n    models/deviceconnectionlistmodel.cpp \\\n    models/wirelessaccesspointsmodel.cpp \\\n    models/wirelessconnectionlistmodel.cpp \\\n    models/wirelessnetworklistdelegate.cpp \\\n    onboarding/onboardingnetwork.cpp \\\n    onboarding/wiredonboardingsetup.cpp \\\n    onboarding/wirelessonboardingsetup.cpp \\\n    plugin.cpp \\\n    statusCenter/connectionEditor/connectioneditorpane.cpp \\\n    statusCenter/connectionEditor/ipv4connectioneditorpane.cpp \\\n    statusCenter/connectionEditor/networkconnectioneditor.cpp \\\n    statusCenter/connectionEditor/wificonnectioneditorpane.cpp \\\n    statusCenter/devicePanes/abstractdevicepane.cpp \\\n    statusCenter/devicePanes/cellularpane.cpp \\\n    statusCenter/devicePanes/devicepane.cpp \\\n    statusCenter/devicePanes/wifidevicepane.cpp \\\n    statusCenter/devicePanes/wireddevicepane.cpp \\\n    statusCenter/eap/securityeap.cpp \\\n    statusCenter/eap/securityeappeap.cpp \\\n    statusCenter/eap/securityeapunsupported.cpp \\\n    statusCenter/networkstatuscenterleftpane.cpp \\\n    statusCenter/networkstatuscenterpane.cpp \\\n    statusCenter/popovers/connectionselectionpopover.cpp \\\n    statusCenter/popovers/simsettingspopover.cpp \\\n    statusCenter/popovers/tetheringsettingspopover.cpp \\\n    statusCenter/popovers/unlockmodempopover.cpp \\\n    statusCenter/popovers/wirelessnetworkselectionpopover.cpp \\\n    switchmanager.cpp\n\nHEADERS += \\\n    chunk/chunkupdater.h \\\n    chunk/genericchunkupdater.h \\\n    chunk/networkchunk.h \\\n    chunk/wiredchunkupdater.h \\\n    chunk/wirelesschunkupdater.h \\\n    common.h \\\n    models/deviceconnectionlistmodel.h \\\n    models/wirelessaccesspointsmodel.h \\\n    models/wirelessconnectionlistmodel.h \\\n    models/wirelessnetworklistdelegate.h \\\n    onboarding/onboardingnetwork.h \\\n    onboarding/wiredonboardingsetup.h \\\n    onboarding/wirelessonboardingsetup.h \\\n    plugin.h \\\n    statusCenter/connectionEditor/connectioneditorpane.h \\\n    statusCenter/connectionEditor/ipv4connectioneditorpane.h \\\n    statusCenter/connectionEditor/networkconnectioneditor.h \\\n    statusCenter/connectionEditor/wificonnectioneditorpane.h \\\n    statusCenter/devicePanes/abstractdevicepane.h \\\n    statusCenter/devicePanes/cellularpane.h \\\n    statusCenter/devicePanes/devicepane.h \\\n    statusCenter/devicePanes/wifidevicepane.h \\\n    statusCenter/devicePanes/wireddevicepane.h \\\n    statusCenter/eap/securityeap.h \\\n    statusCenter/eap/securityeappeap.h \\\n    statusCenter/eap/securityeapunsupported.h \\\n    statusCenter/networkstatuscenterleftpane.h \\\n    statusCenter/networkstatuscenterpane.h \\\n    statusCenter/popovers/connectionselectionpopover.h \\\n    statusCenter/popovers/simsettingspopover.h \\\n    statusCenter/popovers/tetheringsettingspopover.h \\\n    statusCenter/popovers/unlockmodempopover.h \\\n    statusCenter/popovers/wirelessnetworkselectionpopover.h \\\n    switchmanager.h\n\nDISTFILES += \\\n    Plugin.json \\\n    defaults.conf\n\nunix {\n    CONFIG += link_pkgconfig\n    PKGCONFIG += libnm libqrencode\n\n    translations.files = translations/*.qm\n    translations.path = /usr/share/thedesk/NetworkPlugin/translations\n\n    defaults.files = defaults.conf\n    defaults.path = /etc/theSuite/theDesk/NetworkPlugin/\n\n    INSTALLS += translations defaults\n}\n\ninclude(../plugins.pri)\n\nFORMS += \\\n    onboarding/onboardingnetwork.ui \\\n    onboarding/wiredonboardingsetup.ui \\\n    onboarding/wirelessonboardingsetup.ui \\\n    statusCenter/connectionEditor/ipv4connectioneditorpane.ui \\\n    statusCenter/connectionEditor/networkconnectioneditor.ui \\\n    statusCenter/connectionEditor/wificonnectioneditorpane.ui \\\n    statusCenter/devicePanes/cellularpane.ui \\\n    statusCenter/devicePanes/devicepane.ui \\\n    statusCenter/devicePanes/wifidevicepane.ui \\\n    statusCenter/devicePanes/wireddevicepane.ui \\\n    statusCenter/eap/securityeappeap.ui \\\n    statusCenter/eap/securityeapunsupported.ui \\\n    statusCenter/networkstatuscenterleftpane.ui \\\n    statusCenter/networkstatuscenterpane.ui \\\n    statusCenter/popovers/connectionselectionpopover.ui \\\n    statusCenter/popovers/simsettingspopover.ui \\\n    statusCenter/popovers/tetheringsettingspopover.ui \\\n    statusCenter/popovers/unlockmodempopover.ui \\\n    statusCenter/popovers/wirelessnetworkselectionpopover.ui\n"
  },
  {
    "path": "plugins/NetworkPlugin/Plugin.json",
    "content": "{\n    \"name\": \"Network Management\",\n    \"icon\": \"preferences-system-network\",\n    \"uuid\": \"238083b1-2952-4000-8c13-cb585487cc1a\",\n    \"vi\": {\n        \"name\": \"Quản lý mạng\"\n    }\n}\n"
  },
  {
    "path": "plugins/NetworkPlugin/chunk/chunkupdater.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"chunkupdater.h\"\n\nstruct ChunkUpdaterPrivate {\n    QIcon icon;\n    QString text;\n};\n\nChunkUpdater::ChunkUpdater(QObject* parent) : QObject(parent) {\n    d = new ChunkUpdaterPrivate();\n}\n\nChunkUpdater::~ChunkUpdater() {\n    delete d;\n}\n\nQIcon ChunkUpdater::icon() {\n    return d->icon;\n}\n\nQString ChunkUpdater::text() {\n    return d->text;\n}\n\nvoid ChunkUpdater::setText(QString text) {\n    d->text = text;\n    emit textChanged(text);\n}\n\nvoid ChunkUpdater::setIcon(QIcon icon) {\n    d->icon = icon;\n    emit iconChanged(icon);\n}\n"
  },
  {
    "path": "plugins/NetworkPlugin/chunk/chunkupdater.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef CHUNKUPDATER_H\n#define CHUNKUPDATER_H\n\n#include <QObject>\n#include <QIcon>\n\nstruct ChunkUpdaterPrivate;\nclass ChunkUpdater : public QObject {\n        Q_OBJECT\n    public:\n        explicit ChunkUpdater(QObject* parent = nullptr);\n        ~ChunkUpdater();\n\n        QIcon icon();\n        QString text();\n\n    signals:\n        void iconChanged(QIcon icon);\n        void textChanged(QString text);\n\n    protected:\n        void setText(QString text);\n        void setIcon(QIcon icon);\n\n    private:\n        ChunkUpdaterPrivate* d;\n};\n\n#endif // CHUNKUPDATER_H\n"
  },
  {
    "path": "plugins/NetworkPlugin/chunk/genericchunkupdater.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"genericchunkupdater.h\"\n\nGenericChunkUpdater::GenericChunkUpdater(QObject* parent) : ChunkUpdater(parent) {\n    this->setIcon(QIcon::fromTheme(\"network-wired\"));\n    this->setText(tr(\"Connected\"));\n}\n"
  },
  {
    "path": "plugins/NetworkPlugin/chunk/genericchunkupdater.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef GENERICCHUNKUPDATER_H\n#define GENERICCHUNKUPDATER_H\n\n#include \"chunkupdater.h\"\n\nclass GenericChunkUpdater : public ChunkUpdater {\n        Q_OBJECT\n    public:\n        explicit GenericChunkUpdater(QObject* parent = nullptr);\n\n    signals:\n\n};\n\n#endif // GENERICCHUNKUPDATER_H\n"
  },
  {
    "path": "plugins/NetworkPlugin/chunk/networkchunk.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"networkchunk.h\"\n\n#include <QDBusConnection>\n#include <QDBusConnectionInterface>\n#include <QDBusServiceWatcher>\n#include <QIcon>\n#include <QTimer>\n\n#include <actionquickwidget.h>\n#include <barmanager.h>\n#include <statemanager.h>\n#include <statuscentermanager.h>\n\n#include <NetworkManagerQt/AccessPoint>\n#include <NetworkManagerQt/Manager>\n\n#include \"genericchunkupdater.h\"\n#include \"wiredchunkupdater.h\"\n#include \"wirelesschunkupdater.h\"\n\nstruct NetworkChunkPrivate {\n        bool chunkShown = false;\n        QDBusServiceWatcher* nmWatcher;\n\n        NetworkManager::ActiveConnection::Ptr primary;\n\n        ChunkUpdater* updater = nullptr;\n        NetworkManager::AccessPoint::Ptr ap;\n};\n\nNetworkChunk::NetworkChunk() :\n    IconTextChunk(\"Network\") {\n    d = new NetworkChunkPrivate();\n\n    d->nmWatcher = new QDBusServiceWatcher(\"org.freedesktop.NetworkManager\", QDBusConnection::systemBus());\n    connect(d->nmWatcher, &QDBusServiceWatcher::serviceRegistered, this, &NetworkChunk::networkManagerRunning);\n    connect(d->nmWatcher, &QDBusServiceWatcher::serviceUnregistered, this, &NetworkChunk::networkManagerGone);\n\n    if (QDBusConnection::systemBus().interface()->registeredServiceNames().value().contains(\"org.freedesktop.NetworkManager\")) networkManagerRunning();\n\n    connect(NetworkManager::notifier(), &NetworkManager::Notifier::primaryConnectionChanged, this, &NetworkChunk::updatePrimaryConnection);\n    connect(NetworkManager::notifier(), &NetworkManager::Notifier::connectivityChanged, this, &NetworkChunk::updateText);\n\n    ActionQuickWidget* quickWidget = new ActionQuickWidget(this);\n    quickWidget->addAction(QIcon::fromTheme(\"configure\"), tr(\"Network Settings\"), [=] {\n        StateManager::statusCenterManager()->showWithPane(\"NetworkManagerPane\");\n    });\n    this->setQuickWidget(quickWidget);\n}\n\nNetworkChunk::~NetworkChunk() {\n    networkManagerGone();\n    delete d;\n}\n\nvoid NetworkChunk::networkManagerRunning() {\n    if (!d->chunkShown) {\n        StateManager::barManager()->addChunk(this);\n        d->chunkShown = true;\n\n        updatePrimaryConnection();\n    }\n}\n\nvoid NetworkChunk::networkManagerGone() {\n    if (d->chunkShown) {\n        StateManager::barManager()->removeChunk(this);\n        d->chunkShown = false;\n    }\n}\n\nvoid NetworkChunk::updatePrimaryConnection() {\n    if (d->updater) {\n        d->updater->deleteLater();\n        d->updater = nullptr;\n    }\n\n    d->primary = NetworkManager::primaryConnection();\n\n    if (d->primary.isNull()) {\n        // No primary connection exists\n        QTimer::singleShot(0, [=] {\n            this->setIcon(QIcon::fromTheme(\"network-wired-unavailable\"));\n            this->setText(tr(\"Disconnected\"));\n        });\n        return;\n    }\n\n    connect(d->primary.data(), &NetworkManager::ActiveConnection::specificObjectChanged, this, &NetworkChunk::updatePrimaryConnection);\n\n    switch (d->primary->type()) {\n        case NetworkManager::ConnectionSettings::Wireless:\n            d->updater = new WirelessChunkUpdater(this);\n            break;\n        case NetworkManager::ConnectionSettings::Wired:\n            d->updater = new WiredChunkUpdater(this);\n            break;\n        default:\n            d->updater = new GenericChunkUpdater(this);\n            break;\n    }\n\n    connect(d->updater, &ChunkUpdater::iconChanged, this, &NetworkChunk::setIcon);\n    connect(d->updater, &ChunkUpdater::textChanged, this, &NetworkChunk::updateText);\n    this->setIcon(d->updater->icon());\n    this->setText(d->updater->text());\n}\n\nvoid NetworkChunk::updateText() {\n    // Keep the text as is if there is no updater; we're disconnected!\n    if (!d->updater) return;\n\n    QStringList text;\n    text.append(d->updater->text());\n\n    switch (NetworkManager::connectivity()) {\n        case NetworkManager::Portal:\n            text.append(tr(\"Login Required\"));\n            break;\n        case NetworkManager::Limited:\n            text.append(tr(\"Can't get to the Internet\"));\n            break;\n        case NetworkManager::NoConnectivity:\n        case NetworkManager::UnknownConnectivity:\n        case NetworkManager::Full:\n            break;\n    }\n\n    this->setText(text.join(\" · \"));\n}\n"
  },
  {
    "path": "plugins/NetworkPlugin/chunk/networkchunk.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef NETWORKCHUNK_H\n#define NETWORKCHUNK_H\n\n#include <icontextchunk.h>\n\nstruct NetworkChunkPrivate;\nclass NetworkChunk : public IconTextChunk {\n        Q_OBJECT\n    public:\n        explicit NetworkChunk();\n        ~NetworkChunk();\n\n    signals:\n\n    private:\n        NetworkChunkPrivate* d;\n\n        void networkManagerRunning();\n        void networkManagerGone();\n\n        void updatePrimaryConnection();\n        void updateText();\n};\n\n#endif // NETWORKCHUNK_H\n"
  },
  {
    "path": "plugins/NetworkPlugin/chunk/wiredchunkupdater.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"wiredchunkupdater.h\"\n\n#include <NetworkManagerQt/Manager>\n\nWiredChunkUpdater::WiredChunkUpdater(QObject* parent) : ChunkUpdater(parent) {\n    this->setText(tr(\"Wired\"));\n\n    connect(NetworkManager::notifier(), &NetworkManager::Notifier::connectivityChanged, this, &WiredChunkUpdater::updateChunk);\n    updateChunk();\n}\n\nvoid WiredChunkUpdater::updateChunk() {\n    if (NetworkManager::connectivity() != NetworkManager::Connectivity::Full) {\n        this->setIcon(QIcon::fromTheme(\"network-wired-error\"));\n    } else {\n        this->setIcon(QIcon::fromTheme(\"network-wired-activated\"));\n    }\n}\n"
  },
  {
    "path": "plugins/NetworkPlugin/chunk/wiredchunkupdater.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef WIREDCHUNKUPDATER_H\n#define WIREDCHUNKUPDATER_H\n\n#include \"chunkupdater.h\"\n\nclass WiredChunkUpdater : public ChunkUpdater {\n        Q_OBJECT\n    public:\n        explicit WiredChunkUpdater(QObject* parent = nullptr);\n\n    signals:\n\n    private:\n        void updateChunk();\n};\n\n#endif // WIREDCHUNKUPDATER_H\n"
  },
  {
    "path": "plugins/NetworkPlugin/chunk/wirelesschunkupdater.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"wirelesschunkupdater.h\"\n\n#include <NetworkManagerQt/AccessPoint>\n#include <NetworkManagerQt/ActiveConnection>\n#include <NetworkManagerQt/Manager>\n\n#include \"networkplugincommon.h\"\n\nstruct WirelessChunkUpdaterPrivate {\n        NetworkManager::AccessPoint::Ptr ap;\n};\n\nWirelessChunkUpdater::WirelessChunkUpdater(QObject* parent) :\n    ChunkUpdater(parent) {\n    d = new WirelessChunkUpdaterPrivate();\n\n    NetworkManager::ActiveConnection::Ptr connection = NetworkManager::primaryConnection();\n    d->ap.reset(new NetworkManager::AccessPoint(connection->specificObject()));\n\n    connect(NetworkManager::notifier(), &NetworkManager::Notifier::connectivityChanged, this, &WirelessChunkUpdater::updateChunk);\n    connect(d->ap.data(), &NetworkManager::AccessPoint::ssidChanged, this, &WirelessChunkUpdater::updateChunk);\n    connect(d->ap.data(), &NetworkManager::AccessPoint::signalStrengthChanged, this, &WirelessChunkUpdater::updateChunk);\n\n    updateChunk();\n}\n\nWirelessChunkUpdater::~WirelessChunkUpdater() {\n    delete d;\n}\n\nvoid WirelessChunkUpdater::updateChunk() {\n    this->setText(d->ap->ssid());\n\n    NetworkPluginCommon::WirelessType type = NetworkPluginCommon::WiFi;\n    if (NetworkManager::connectivity() != NetworkManager::Full) type = NetworkPluginCommon::WiFiError;\n    this->setIcon(QIcon::fromTheme(NetworkPluginCommon::iconForSignalStrength(d->ap->signalStrength(), type)));\n}\n"
  },
  {
    "path": "plugins/NetworkPlugin/chunk/wirelesschunkupdater.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef WIRELESSCHUNKUPDATER_H\n#define WIRELESSCHUNKUPDATER_H\n\n#include \"chunkupdater.h\"\n\nstruct WirelessChunkUpdaterPrivate;\nclass WirelessChunkUpdater : public ChunkUpdater {\n        Q_OBJECT\n    public:\n        explicit WirelessChunkUpdater(QObject* parent = nullptr);\n        ~WirelessChunkUpdater();\n\n    signals:\n\n    private:\n        WirelessChunkUpdaterPrivate* d;\n\n        void updateChunk();\n};\n\n#endif // WIRELESSCHUNKUPDATER_H\n"
  },
  {
    "path": "plugins/NetworkPlugin/models/deviceconnectionlistmodel.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"deviceconnectionlistmodel.h\"\n\n#include <NetworkManagerQt/Manager>\n#include <NetworkManagerQt/Device>\n#include <NetworkManagerQt/Connection>\n\nstruct DeviceConnectionListModelPrivate {\n    NetworkManager::Device::Ptr device;\n};\n\nDeviceConnectionListModel::DeviceConnectionListModel(QString deviceUni, QObject* parent)\n    : QAbstractListModel(parent) {\n    d = new DeviceConnectionListModelPrivate();\n    d->device = NetworkManager::findNetworkInterface(deviceUni);\n}\n\nDeviceConnectionListModel::~DeviceConnectionListModel() {\n    delete d;\n}\n\nint DeviceConnectionListModel::rowCount(const QModelIndex& parent) const {\n    if (parent.isValid()) return 0;\n\n    return d->device->availableConnections().count();\n}\n\nQVariant DeviceConnectionListModel::data(const QModelIndex& index, int role) const {\n    if (!index.isValid()) return QVariant();\n\n    NetworkManager::Connection::Ptr connection = d->device->availableConnections().at(index.row());\n    switch (role) {\n        case Qt::DisplayRole:\n            return connection->name();\n        case Qt::UserRole:\n            return QVariant::fromValue(connection);\n        case Qt::UserRole + 1:\n            return \"connection\";\n    }\n\n    return QVariant();\n}\n"
  },
  {
    "path": "plugins/NetworkPlugin/models/deviceconnectionlistmodel.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef DEVICECONNECTIONLISTMODEL_H\n#define DEVICECONNECTIONLISTMODEL_H\n\n#include <QAbstractListModel>\n\nstruct DeviceConnectionListModelPrivate;\nclass DeviceConnectionListModel : public QAbstractListModel {\n        Q_OBJECT\n\n    public:\n        explicit DeviceConnectionListModel(QString deviceUni, QObject* parent = nullptr);\n        ~DeviceConnectionListModel();\n\n        // Basic functionality:\n        int rowCount(const QModelIndex& parent = QModelIndex()) const override;\n        QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const override;\n\n    private:\n        DeviceConnectionListModelPrivate* d;\n};\n\n#endif // DEVICECONNECTIONLISTMODEL_H\n"
  },
  {
    "path": "plugins/NetworkPlugin/models/wirelessaccesspointsmodel.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"wirelessaccesspointsmodel.h\"\n\n#include <NetworkManagerQt/AccessPoint>\n#include <NetworkManagerQt/Manager>\n#include <NetworkManagerQt/Settings>\n#include <NetworkManagerQt/WirelessDevice>\n#include <NetworkManagerQt/WirelessSetting>\n\nstruct WirelessAccessPointsModelPrivate {\n        NetworkManager::WirelessDevice::Ptr device;\n        QList<NetworkManager::AccessPoint::Ptr> displayedAPs;\n\n        bool includeKnown;\n};\n\nWirelessAccessPointsModel::WirelessAccessPointsModel(QString deviceUni, bool includeKnown, QObject* parent) :\n    QAbstractListModel(parent) {\n    d = new WirelessAccessPointsModelPrivate();\n\n    d->includeKnown = includeKnown;\n    d->device = NetworkManager::findNetworkInterface(deviceUni).staticCast<NetworkManager::WirelessDevice>();\n    d->device->requestScan();\n\n    connect(d->device.data(), &NetworkManager::WirelessDevice::accessPointAppeared, this, &WirelessAccessPointsModel::addAp);\n    connect(d->device.data(), &NetworkManager::WirelessDevice::accessPointDisappeared, this, &WirelessAccessPointsModel::removeAp);\n    for (QString ap : d->device->accessPoints()) {\n        this->addAp(ap);\n    }\n}\n\nWirelessAccessPointsModel::~WirelessAccessPointsModel() {\n    delete d;\n}\n\nint WirelessAccessPointsModel::rowCount(const QModelIndex& parent) const {\n    if (parent.isValid()) return 0;\n\n    return d->displayedAPs.count();\n}\n\nQVariant WirelessAccessPointsModel::data(const QModelIndex& index, int role) const {\n    if (!index.isValid()) return QVariant();\n\n    NetworkManager::AccessPoint::Ptr ap = d->displayedAPs.at(index.row());\n    switch (role) {\n        case Qt::DisplayRole:\n            return ap->ssid();\n        case Qt::UserRole:\n            return QVariant::fromValue(ap);\n        case Qt::UserRole + 1:\n            return \"ap\";\n    }\n\n    return QVariant();\n}\n\nvoid WirelessAccessPointsModel::addAp(QString ap) {\n    NetworkManager::AccessPoint::Ptr accessPoint(new NetworkManager::AccessPoint(ap));\n    if (accessPoint->ssid().isEmpty()) return;\n\n    for (NetworkManager::AccessPoint::Ptr oldAp : d->displayedAPs) {\n        if (oldAp->uni() == ap) return;\n        if (oldAp->ssid() == accessPoint->ssid()) return;\n    }\n\n    if (!d->includeKnown) {\n        for (NetworkManager::Connection::Ptr connection : NetworkManager::listConnections()) {\n            NetworkManager::WirelessSetting::Ptr wlSetting = connection->settings()->setting(NetworkManager::Setting::Wireless).staticCast<NetworkManager::WirelessSetting>();\n            if (wlSetting) {\n                if (wlSetting->ssid() == accessPoint->ssid()) return;\n            }\n        }\n    }\n\n    d->displayedAPs.append(accessPoint);\n    emit dataChanged(index(0), index(rowCount()));\n}\n\nvoid WirelessAccessPointsModel::removeAp(QString ap) {\n    for (NetworkManager::AccessPoint::Ptr accessPoint : d->displayedAPs) {\n        if (accessPoint->uni() == ap) {\n            d->displayedAPs.removeOne(accessPoint);\n            emit dataChanged(index(0), index(rowCount()));\n            return;\n        }\n    }\n}\n"
  },
  {
    "path": "plugins/NetworkPlugin/models/wirelessaccesspointsmodel.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef WIRELESSACCESSPOINTSMODEL_H\n#define WIRELESSACCESSPOINTSMODEL_H\n\n#include <QAbstractListModel>\n\nstruct WirelessAccessPointsModelPrivate;\nclass WirelessAccessPointsModel : public QAbstractListModel {\n        Q_OBJECT\n\n    public:\n        explicit WirelessAccessPointsModel(QString deviceUni, bool includeKnown = true, QObject* parent = nullptr);\n        ~WirelessAccessPointsModel();\n\n        // Basic functionality:\n        int rowCount(const QModelIndex& parent = QModelIndex()) const override;\n\n        QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const override;\n\n    private:\n        WirelessAccessPointsModelPrivate* d;\n\n        void addAp(QString ap);\n        void removeAp(QString ap);\n};\n\n#endif // WIRELESSACCESSPOINTSMODEL_H\n"
  },
  {
    "path": "plugins/NetworkPlugin/models/wirelessconnectionlistmodel.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"wirelessconnectionlistmodel.h\"\n\n#include <NetworkManagerQt/Connection>\n#include <NetworkManagerQt/WirelessSetting>\n#include <NetworkManagerQt/Settings>\n\nstruct WirelessConnectionListModelPrivate {\n    QList<NetworkManager::Connection::Ptr> connections;\n};\n\nWirelessConnectionListModel::WirelessConnectionListModel(QObject* parent)\n    : QAbstractListModel(parent) {\n    d = new WirelessConnectionListModelPrivate();\n\n    connect(NetworkManager::settingsNotifier(), &NetworkManager::SettingsNotifier::connectionAdded, this, &WirelessConnectionListModel::newConnection);\n    connect(NetworkManager::settingsNotifier(), &NetworkManager::SettingsNotifier::connectionRemoved, this, &WirelessConnectionListModel::removeConnection);\n    for (NetworkManager::Connection::Ptr connection : NetworkManager::listConnections()) {\n        this->newConnection(connection->path());\n    }\n}\n\nWirelessConnectionListModel::~WirelessConnectionListModel() {\n    delete d;\n}\n\nint WirelessConnectionListModel::rowCount(const QModelIndex& parent) const {\n    if (parent.isValid()) return 0;\n    return d->connections.count();\n}\n\nQVariant WirelessConnectionListModel::data(const QModelIndex& index, int role) const {\n    if (!index.isValid()) return QVariant();\n\n    NetworkManager::Connection::Ptr cn = d->connections.at(index.row());\n    switch (role) {\n        case Qt::DisplayRole:\n            return cn->name();\n        case Qt::UserRole:\n            return QVariant::fromValue(cn);\n        case Qt::UserRole + 1:\n            return \"connection\";\n    }\n\n    return QVariant();\n}\n\nvoid WirelessConnectionListModel::newConnection(QString connection) {\n    NetworkManager::Connection::Ptr cn(new NetworkManager::Connection(connection));\n    NetworkManager::WirelessSetting::Ptr wlSetting = cn->settings()->setting(NetworkManager::Setting::Wireless).staticCast<NetworkManager::WirelessSetting>();\n    if (!wlSetting) return;\n\n    d->connections.append(cn);\n    emit dataChanged(index(0), index(rowCount()));\n}\n\nvoid WirelessConnectionListModel::removeConnection(QString connection) {\n    for (NetworkManager::Connection::Ptr cn : d->connections) {\n        if (cn->path() == connection) {\n            d->connections.removeOne(cn);\n            emit dataChanged(index(0), index(rowCount()));\n            return;\n        }\n    }\n}\n"
  },
  {
    "path": "plugins/NetworkPlugin/models/wirelessconnectionlistmodel.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef WIRELESSCONNECTIONLISTMODEL_H\n#define WIRELESSCONNECTIONLISTMODEL_H\n\n#include <QAbstractListModel>\n\nstruct WirelessConnectionListModelPrivate;\nclass WirelessConnectionListModel : public QAbstractListModel {\n        Q_OBJECT\n\n    public:\n        explicit WirelessConnectionListModel(QObject* parent = nullptr);\n        ~WirelessConnectionListModel();\n\n        // Basic functionality:\n        int rowCount(const QModelIndex& parent = QModelIndex()) const override;\n\n        QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const override;\n\n    private:\n        WirelessConnectionListModelPrivate* d;\n\n        void newConnection(QString connection);\n        void removeConnection(QString connection);\n};\n\n#endif // WIRELESSCONNECTIONLISTMODEL_H\n"
  },
  {
    "path": "plugins/NetworkPlugin/models/wirelessnetworklistdelegate.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"wirelessnetworklistdelegate.h\"\n\n#include <NetworkManagerQt/Manager>\n#include <NetworkManagerQt/Utils>\n#include <NetworkManagerQt/WirelessDevice>\n#include <NetworkManagerQt/WirelessSetting>\n#include <QPainter>\n#include <libcontemporary_global.h>\n\n#include \"networkplugincommon.h\"\n\nstruct WirelessNetworkListDelegatePrivate {\n        NetworkManager::WirelessDevice::Ptr device;\n\n        struct Rects {\n                QRect iconRect;\n                QRect textRect;\n                QRect descRect;\n\n                Rects(const QStyleOptionViewItem& option) {\n                    iconRect.setLeft(option.rect.left() + SC_DPI(6));\n                    iconRect.setTop(option.rect.top() + SC_DPI(6));\n                    iconRect.setBottom(iconRect.top() + SC_DPI(32));\n                    iconRect.setRight(iconRect.left() + SC_DPI(32));\n\n                    textRect.setLeft(iconRect.right() + SC_DPI(6));\n                    textRect.setTop(option.rect.top() + SC_DPI(6));\n                    textRect.setBottom(option.rect.top() + option.fontMetrics.height() + SC_DPI(6));\n                    textRect.setRight(option.rect.right());\n\n                    descRect.setLeft(iconRect.right() + SC_DPI(6));\n                    descRect.setTop(option.rect.top() + option.fontMetrics.height() + SC_DPI(8));\n                    descRect.setBottom(option.rect.top() + option.fontMetrics.height() * 2 + SC_DPI(6));\n                    descRect.setRight(option.rect.right());\n                }\n        };\n};\n\nWirelessNetworkListDelegate::WirelessNetworkListDelegate(QString deviceUni, QObject* parent) :\n    QAbstractItemDelegate(parent) {\n    d = new WirelessNetworkListDelegatePrivate();\n    d->device = NetworkManager::findNetworkInterface(deviceUni).staticCast<NetworkManager::WirelessDevice>();\n}\n\nWirelessNetworkListDelegate::~WirelessNetworkListDelegate() {\n    delete d;\n}\n\nvoid WirelessNetworkListDelegate::paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const {\n    painter->setFont(option.font);\n    painter->setLayoutDirection(option.direction);\n\n    WirelessNetworkListDelegatePrivate::Rects rects(option);\n    QString text = index.data().toString();\n    QString desc;\n    QIcon icon;\n\n    QVariant networkInformation = index.data(Qt::UserRole);\n    if (networkInformation.canConvert<NetworkManager::Connection::Ptr>()) {\n        NetworkManager::Connection::Ptr connection = networkInformation.value<NetworkManager::Connection::Ptr>();\n        QString targetSsid = connection->settings()->setting(NetworkManager::Setting::Wireless).staticCast<NetworkManager::WirelessSetting>()->ssid();\n        for (QString apPath : d->device->accessPoints()) {\n            NetworkManager::AccessPoint::Ptr ap(new NetworkManager::AccessPoint(apPath));\n            if (ap->ssid() == targetSsid) {\n                if (d->device->activeAccessPoint() && ap->uni() == d->device->activeAccessPoint()->uni()) {\n                    desc = tr(\"Connected\");\n                    icon = QIcon::fromTheme(NetworkPluginCommon::iconForSignalStrength(ap->signalStrength(), NetworkPluginCommon::WiFi));\n                    break;\n                } else {\n                    desc = tr(\"In Range\");\n                    icon = QIcon::fromTheme(NetworkPluginCommon::iconForSignalStrength(ap->signalStrength(), NetworkPluginCommon::WiFi));\n                    break;\n                }\n            }\n        }\n\n        if (desc.isEmpty()) {\n            desc = tr(\"Out of range\");\n        }\n    } else if (networkInformation.canConvert<NetworkManager::AccessPoint::Ptr>()) {\n        NetworkManager::AccessPoint::Ptr ap = networkInformation.value<NetworkManager::AccessPoint::Ptr>();\n        icon = QIcon::fromTheme(NetworkPluginCommon::iconForSignalStrength(ap->signalStrength(), NetworkPluginCommon::WiFi));\n\n        NetworkManager::WirelessSecurityType security = NetworkManager::findBestWirelessSecurity(d->device->wirelessCapabilities(), true, false, ap->capabilities(), ap->wpaFlags(), ap->rsnFlags());\n        switch (security) {\n            case NetworkManager::UnknownSecurity:\n            case NetworkManager::NoneSecurity:\n                desc = tr(\"Not Secured\");\n                break;\n            case NetworkManager::StaticWep:\n                desc = tr(\"Secured with Static WEP\");\n                break;\n            case NetworkManager::DynamicWep:\n                desc = tr(\"Secured with Dynamic WEP\");\n                break;\n            case NetworkManager::Leap:\n                desc = tr(\"Secured with LEAP\");\n                break;\n            case NetworkManager::WpaPsk:\n                desc = tr(\"Secured with WPA-PSK\");\n                break;\n            case NetworkManager::WpaEap:\n                desc = tr(\"Secured with WPA Enterprise\");\n                break;\n            case NetworkManager::Wpa2Psk:\n                desc = tr(\"Secured with WPA2-PSK\");\n                break;\n            case NetworkManager::Wpa2Eap:\n                desc = tr(\"Secured with WPA2 Enterprise\");\n                break;\n            case NetworkManager::SAE:\n                desc = tr(\"Secured with WPA3\");\n                break;\n        }\n    }\n\n    if (option.direction == Qt::RightToLeft) {\n        rects.iconRect.moveRight(option.rect.right() - SC_DPI(6));\n        rects.textRect.moveRight(rects.iconRect.left() - SC_DPI(6));\n        rects.descRect.moveRight(rects.iconRect.left() - SC_DPI(6));\n    }\n\n    if (option.state & QStyle::State_Selected) {\n        painter->setPen(Qt::transparent);\n        painter->setBrush(option.palette.color(QPalette::Highlight));\n        painter->drawRect(option.rect);\n        painter->setBrush(Qt::transparent);\n        painter->setPen(option.palette.color(QPalette::HighlightedText));\n        painter->drawText(rects.textRect, Qt::AlignLeading, text);\n        painter->drawText(rects.descRect, Qt::AlignLeading, desc);\n    } else if (option.state & QStyle::State_MouseOver) {\n        QColor col = option.palette.color(QPalette::Highlight);\n        col.setAlpha(127);\n        painter->setBrush(col);\n        painter->setPen(Qt::transparent);\n        painter->drawRect(option.rect);\n        painter->setBrush(Qt::transparent);\n        painter->setPen(option.palette.color(QPalette::WindowText));\n        painter->drawText(rects.textRect, Qt::AlignLeading, text);\n        painter->setPen(option.palette.color(QPalette::Disabled, QPalette::WindowText));\n        painter->drawText(rects.descRect, Qt::AlignLeading, desc);\n    } else {\n        painter->setPen(option.palette.color(QPalette::WindowText));\n        painter->drawText(rects.textRect, Qt::AlignLeading, text);\n        painter->setPen(option.palette.color(QPalette::Disabled, QPalette::WindowText));\n        painter->drawText(rects.descRect, Qt::AlignLeading, desc);\n    }\n\n    if (!icon.isNull()) {\n        painter->drawPixmap(rects.iconRect, icon.pixmap(rects.iconRect.size()));\n    }\n}\n\nQSize WirelessNetworkListDelegate::sizeHint(const QStyleOptionViewItem& option, const QModelIndex& index) const {\n    WirelessNetworkListDelegatePrivate::Rects rects(option);\n\n    QRect u = rects.iconRect;\n    u = u.united(rects.textRect);\n    u = u.united(rects.descRect);\n    u.adjust(SC_DPI(-6), SC_DPI(-6), SC_DPI(6), SC_DPI(6));\n\n    return u.size();\n}\n"
  },
  {
    "path": "plugins/NetworkPlugin/models/wirelessnetworklistdelegate.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef WIRELESSNETWORKLISTDELEGATE_H\n#define WIRELESSNETWORKLISTDELEGATE_H\n\n#include <QAbstractItemDelegate>\n\nstruct WirelessNetworkListDelegatePrivate;\nclass WirelessNetworkListDelegate : public QAbstractItemDelegate {\n        Q_OBJECT\n    public:\n        explicit WirelessNetworkListDelegate(QString deviceUni, QObject* parent = nullptr);\n        ~WirelessNetworkListDelegate();\n\n    signals:\n\n    private:\n        WirelessNetworkListDelegatePrivate* d;\n\n        // QAbstractItemDelegate interface\n    public:\n        void paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const;\n        QSize sizeHint(const QStyleOptionViewItem& option, const QModelIndex& index) const;\n};\n\n#endif // WIRELESSNETWORKLISTDELEGATE_H\n"
  },
  {
    "path": "plugins/NetworkPlugin/networkplugincommon.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"networkplugincommon.h\"\n\n#include <ModemManagerQt/Modem3Gpp>\n\nQString NetworkPluginCommon::stateChangeReasonToString(NetworkManager::Device::StateChangeReason reason) {\n    switch (reason) {\n        case NetworkManager::Device::NowUnmanagedReason:\n            return tr(\"the device is no longer managed by NetworkManager\");\n        case NetworkManager::Device::ConfigFailedReason:\n            return tr(\"configuration of the device failed\");\n        case NetworkManager::Device::ConfigUnavailableReason:\n            return tr(\"configuration of the device is unavailable\");\n        case NetworkManager::Device::ConfigExpiredReason:\n            return tr(\"configuration of the device expired\");\n        case NetworkManager::Device::NoSecretsReason:\n            return tr(\"required secrets were not provided\");\n        case NetworkManager::Device::AuthSupplicantDisconnectReason:\n            return tr(\"the authentication supplicant disconnected\");\n        case NetworkManager::Device::AuthSupplicantConfigFailedReason:\n            return tr(\"configuration of the authentication supplicant failed\");\n        case NetworkManager::Device::AuthSupplicantFailedReason:\n            return tr(\"the authentication supplicant failed\");\n        case NetworkManager::Device::AuthSupplicantTimeoutReason:\n            return tr(\"the authentication supplicant timed out\");\n        case NetworkManager::Device::PppStartFailedReason:\n            return tr(\"the PPP network failed to start\");\n        case NetworkManager::Device::PppDisconnectReason:\n            return tr(\"the PPP network was disconnected\");\n        case NetworkManager::Device::PppFailedReason:\n            return tr(\"the PPP network failed\");\n        case NetworkManager::Device::DhcpStartFailedReason:\n            return tr(\"DHCP configuration failed to start\");\n        case NetworkManager::Device::DhcpErrorReason:\n            return tr(\"DHCP configuration had an error\");\n        case NetworkManager::Device::DhcpFailedReason:\n            return tr(\"DHCP configuration failed\");\n        case NetworkManager::Device::SharedStartFailedReason:\n            break;\n        case NetworkManager::Device::SharedFailedReason:\n            break;\n        case NetworkManager::Device::AutoIpStartFailedReason:\n            break;\n        case NetworkManager::Device::AutoIpErrorReason:\n            break;\n        case NetworkManager::Device::AutoIpFailedReason:\n            break;\n        case NetworkManager::Device::ModemBusyReason:\n            return tr(\"the modem is busy\");\n        case NetworkManager::Device::ModemNoDialToneReason:\n            return tr(\"there is no dial tone on the modem\");\n        case NetworkManager::Device::ModemNoCarrierReason:\n            return tr(\"no carrier is available on the modem\");\n        case NetworkManager::Device::ModemDialTimeoutReason:\n            return tr(\"dialling the number on the modem timed out\");\n        case NetworkManager::Device::ModemDialFailedReason:\n            return tr(\"dialling the number on the modem failed\");\n        case NetworkManager::Device::ModemInitFailedReason:\n            return tr(\"initialising the modem failed\");\n        case NetworkManager::Device::GsmApnSelectFailedReason:\n            return tr(\"APN selection failed\");\n        case NetworkManager::Device::GsmNotSearchingReason:\n            return tr(\"the modem is not searching\");\n        case NetworkManager::Device::GsmRegistrationDeniedReason:\n            return tr(\"the cell tower denied registration of the modem\");\n        case NetworkManager::Device::GsmRegistrationTimeoutReason:\n            return tr(\"registration of the modem on the cell tower timed out\");\n        case NetworkManager::Device::GsmRegistrationFailedReason:\n            return tr(\"registration of the modem on the cell tower failed\");\n        case NetworkManager::Device::GsmPinCheckFailedReason:\n            break;\n        case NetworkManager::Device::FirmwareMissingReason:\n            return tr(\"the device firmware is missing\");\n        case NetworkManager::Device::DeviceRemovedReason:\n            return tr(\"the device was removed\");\n        case NetworkManager::Device::SleepingReason:\n            return tr(\"the device is sleeping\");\n        case NetworkManager::Device::ConnectionRemovedReason:\n            return tr(\"the connection was removed\");\n        case NetworkManager::Device::UserRequestedReason:\n            return tr(\"you requested the action\");\n        case NetworkManager::Device::CarrierReason:\n            break;\n        case NetworkManager::Device::ConnectionAssumedReason:\n            break;\n        case NetworkManager::Device::SupplicantAvailableReason:\n            break;\n        case NetworkManager::Device::ModemNotFoundReason:\n            return tr(\"the modem was not found\");\n        case NetworkManager::Device::BluetoothFailedReason:\n            return tr(\"Bluetooth is not available\");\n        case NetworkManager::Device::GsmSimNotInserted:\n            return tr(\"the SIM card is not inserted\");\n        case NetworkManager::Device::GsmSimPinRequired:\n            return tr(\"the SIM PIN is required\");\n        case NetworkManager::Device::GsmSimPukRequired:\n            return tr(\"the SIM PUK is required\");\n        case NetworkManager::Device::GsmSimWrong:\n        case NetworkManager::Device::SimPinIncorrect:\n            return tr(\"the SIM PUK is exhausted\");\n        case NetworkManager::Device::InfiniBandMode:\n            break;\n        case NetworkManager::Device::DependencyFailed:\n            break;\n        case NetworkManager::Device::Br2684Failed:\n            break;\n        case NetworkManager::Device::ModemManagerUnavailable:\n            return tr(\"ModemManager is not operational on this device\");\n        case NetworkManager::Device::SsidNotFound:\n            return tr(\"the wireless network wasn't found\");\n        case NetworkManager::Device::SecondaryConnectionFailed:\n            break;\n        case NetworkManager::Device::DcbFcoeFailed:\n            break;\n        case NetworkManager::Device::TeamdControlFailed:\n            break;\n        case NetworkManager::Device::ModemFailed:\n            break;\n        case NetworkManager::Device::ModemAvailable:\n            break;\n        case NetworkManager::Device::NewActivation:\n            break;\n        case NetworkManager::Device::ParentChanged:\n            break;\n        case NetworkManager::Device::ParentManagedChanged:\n            break;\n        case NetworkManager::Device::Reserved:\n        case NetworkManager::Device::UnknownReason:\n        case NetworkManager::Device::NoReason:\n        case NetworkManager::Device::NowManagedReason:\n            break;\n    }\n\n    return tr(\"an unknown error occurred\");\n}\n\nQString NetworkPluginCommon::iconForSignalStrength(int strength, NetworkPluginCommon::WirelessType type) {\n    QString iconString = \"network-\";\n\n    switch (type) {\n        case NetworkPluginCommon::WiFi:\n            iconString += \"wireless-connected-\";\n            break;\n        case NetworkPluginCommon::WiFiError:\n            iconString += \"wireless-error-\";\n            break;\n        case NetworkPluginCommon::Cellular:\n            iconString += \"cellular-connected-\";\n            break;\n        case NetworkPluginCommon::CellularError:\n            iconString += \"cellular-error-\";\n            break;\n    }\n\n    if (strength < 15) {\n        iconString += \"00\";\n    } else if (strength < 35) {\n        iconString += \"25\";\n    } else if (strength < 65) {\n        iconString += \"50\";\n    } else if (strength < 85) {\n        iconString += \"75\";\n    } else {\n        iconString += \"100\";\n    }\n\n    return iconString;\n}\n\nQString NetworkPluginCommon::operatorNameForModem(ModemManager::ModemDevice::Ptr device) {\n    if (device->sim() && !device->sim()->operatorName().isEmpty()) {\n        return device->sim()->operatorName();\n    }\n\n    ModemManager::Modem3gpp::Ptr modem3gpp(new ModemManager::Modem3gpp(device->uni()));\n    if (!modem3gpp->operatorName().isEmpty()) {\n        return modem3gpp->operatorName();\n    }\n\n    return tr(\"Cellular\");\n}\n\nbool NetworkPluginCommon::isDeviceConnecting(NetworkManager::Device::Ptr device) {\n    QList<NetworkManager::Device::State> connectingStates = {\n        NetworkManager::Device::Preparing,\n        NetworkManager::Device::ConfiguringHardware,\n        NetworkManager::Device::NeedAuth,\n        NetworkManager::Device::ConfiguringIp,\n        NetworkManager::Device::CheckingIp,\n        NetworkManager::Device::WaitingForSecondaries};\n\n    return connectingStates.contains(device->state());\n}\n"
  },
  {
    "path": "plugins/NetworkPlugin/networkplugincommon.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef NETWORKPLUGINCOMMON_H\n#define NETWORKPLUGINCOMMON_H\n\n#include <ModemManagerQt/ModemDevice>\n#include <NetworkManagerQt/Device>\n#include <QCoreApplication>\n\nclass NetworkPluginCommon {\n        Q_DECLARE_TR_FUNCTIONS(Common)\n    public:\n        enum WirelessType {\n            WiFi,\n            Cellular,\n            WiFiError,\n            CellularError\n        };\n\n        static QString stateChangeReasonToString(NetworkManager::Device::StateChangeReason reason);\n        static QString iconForSignalStrength(int strength, WirelessType type);\n        static QString operatorNameForModem(ModemManager::ModemDevice::Ptr device);\n\n        static bool isDeviceConnecting(NetworkManager::Device::Ptr device);\n};\n\n#endif // NETWORKPLUGINCOMMON_H\n"
  },
  {
    "path": "plugins/NetworkPlugin/onboarding/onboardingnetwork.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2022 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"onboardingnetwork.h\"\n#include \"ui_onboardingnetwork.h\"\n\n#include <statemanager.h>\n#include <onboardingmanager.h>\n\n#include \"wiredonboardingsetup.h\"\n#include \"wirelessonboardingsetup.h\"\n\n#include <NetworkManagerQt/Manager>\n\nOnboardingNetwork::OnboardingNetwork(QWidget* parent) :\n    OnboardingPage(parent),\n    ui(new Ui::OnboardingNetwork) {\n    ui->setupUi(this);\n\n    ui->titleLabel->setBackButtonShown(true);\n    ui->disconnectButton->setProperty(\"type\", \"destructive\");\n    ui->networkConnectedIcon->setPixmap(QIcon::fromTheme(\"network-wired-activated\").pixmap(SC_DPI_T(QSize(128, 128), QSize)));\n    ui->stackedWidget->setCurrentAnimation(tStackedWidget::Fade);\n\n    connect(NetworkManager::notifier(), &NetworkManager::Notifier::connectivityChanged, this, &OnboardingNetwork::updateConnectivity);\n    updateConnectivity();\n\n    //Find out what network devices are available\n    for (const NetworkManager::Device::Ptr& device : NetworkManager::networkInterfaces()) {\n        QWidget* setupPane = nullptr;\n        switch (device->type()) {\n            case NetworkManager::Device::Ethernet:\n                setupPane = new WiredOnboardingSetup(device->uni());\n                break;\n            case NetworkManager::Device::Wifi:\n                setupPane = new WirelessOnboardingSetup(device->uni());\n                break;\n            default:\n                break;\n        }\n\n        if (setupPane) {\n            ui->panesLayout->addWidget(setupPane);\n        }\n    }\n}\n\nOnboardingNetwork::~OnboardingNetwork() {\n    delete ui;\n}\n\nvoid OnboardingNetwork::updateConnectivity() {\n    switch (NetworkManager::connectivity()) {\n        case NetworkManager::UnknownConnectivity:\n        case NetworkManager::NoConnectivity:\n            ui->skipInfoPrompt->setVisible(true);\n            ui->nextButton->setText(tr(\"Continue without Internet\"));\n            ui->stackedWidget->setCurrentWidget(ui->networkSelectionPage);\n            break;\n        case NetworkManager::Limited:\n        case NetworkManager::Full:\n            ui->skipInfoPrompt->setVisible(false);\n            ui->nextButton->setText(tr(\"Next\"));\n            ui->stackedWidget->setCurrentWidget(ui->networkConnectionCompletePage);\n            break;\n        case NetworkManager::Portal:\n            //TODO: something cool, maybe pop open a browser or something\n            ui->skipInfoPrompt->setVisible(false);\n            ui->nextButton->setText(tr(\"Next\"));\n            ui->stackedWidget->setCurrentWidget(ui->networkConnectionCompletePage);\n            break;\n    }\n}\n\nQString OnboardingNetwork::name() {\n    return QStringLiteral(\"OnboardingNetwork\");\n}\n\nQString OnboardingNetwork::displayName() {\n    return tr(\"Network\");\n}\n\nvoid OnboardingNetwork::on_titleLabel_backButtonClicked() {\n    StateManager::onboardingManager()->previousStep();\n}\n\nvoid OnboardingNetwork::on_nextButton_clicked() {\n    StateManager::onboardingManager()->nextStep();\n}\n\n\nvoid OnboardingNetwork::on_disconnectButton_clicked() {\n    //Disconnect from all active connections\n    for (NetworkManager::ActiveConnection::Ptr connection : NetworkManager::activeConnections()) {\n        NetworkManager::deactivateConnection(connection->path());\n    }\n}\n\n"
  },
  {
    "path": "plugins/NetworkPlugin/onboarding/onboardingnetwork.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2022 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef ONBOARDINGNETWORK_H\n#define ONBOARDINGNETWORK_H\n\n#include <onboardingpage.h>\n\nnamespace Ui {\n    class OnboardingNetwork;\n}\n\nclass OnboardingNetwork : public OnboardingPage {\n        Q_OBJECT\n\n    public:\n        explicit OnboardingNetwork(QWidget* parent = nullptr);\n        ~OnboardingNetwork();\n\n    private:\n        Ui::OnboardingNetwork* ui;\n\n        void updateConnectivity();\n\n        // OnboardingPage interface\n    public:\n        QString name();\n        QString displayName();\n\n    private slots:\n        void on_titleLabel_backButtonClicked();\n        void on_nextButton_clicked();\n        void on_disconnectButton_clicked();\n};\n\n#endif // ONBOARDINGNETWORK_H\n"
  },
  {
    "path": "plugins/NetworkPlugin/onboarding/onboardingnetwork.ui",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ui version=\"4.0\">\n <class>OnboardingNetwork</class>\n <widget class=\"QWidget\" name=\"OnboardingNetwork\">\n  <property name=\"geometry\">\n   <rect>\n    <x>0</x>\n    <y>0</y>\n    <width>666</width>\n    <height>560</height>\n   </rect>\n  </property>\n  <property name=\"windowTitle\">\n   <string notr=\"true\">Form</string>\n  </property>\n  <layout class=\"QVBoxLayout\" name=\"verticalLayout\">\n   <property name=\"spacing\">\n    <number>0</number>\n   </property>\n   <property name=\"leftMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"topMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"rightMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"bottomMargin\">\n    <number>0</number>\n   </property>\n   <item>\n    <widget class=\"tTitleLabel\" name=\"titleLabel\">\n     <property name=\"text\">\n      <string>Network</string>\n     </property>\n    </widget>\n   </item>\n   <item>\n    <widget class=\"QLabel\" name=\"label\">\n     <property name=\"text\">\n      <string>Connect to the Internet to get updates and install new software.</string>\n     </property>\n     <property name=\"margin\">\n      <number>9</number>\n     </property>\n    </widget>\n   </item>\n   <item>\n    <widget class=\"Line\" name=\"singlePixelHorizontalLine\">\n     <property name=\"maximumSize\">\n      <size>\n       <width>16777215</width>\n       <height>1</height>\n      </size>\n     </property>\n     <property name=\"orientation\">\n      <enum>Qt::Horizontal</enum>\n     </property>\n    </widget>\n   </item>\n   <item>\n    <widget class=\"tStackedWidget\" name=\"stackedWidget\">\n     <property name=\"currentIndex\">\n      <number>1</number>\n     </property>\n     <widget class=\"QWidget\" name=\"networkSelectionPage\">\n      <layout class=\"QVBoxLayout\" name=\"verticalLayout_3\">\n       <property name=\"spacing\">\n        <number>0</number>\n       </property>\n       <property name=\"leftMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"topMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"rightMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"bottomMargin\">\n        <number>0</number>\n       </property>\n       <item>\n        <widget class=\"QScrollArea\" name=\"scrollArea\">\n         <property name=\"frameShape\">\n          <enum>QFrame::NoFrame</enum>\n         </property>\n         <property name=\"widgetResizable\">\n          <bool>true</bool>\n         </property>\n         <widget class=\"QWidget\" name=\"scrollAreaWidgetContents\">\n          <property name=\"geometry\">\n           <rect>\n            <x>0</x>\n            <y>0</y>\n            <width>100</width>\n            <height>30</height>\n           </rect>\n          </property>\n          <layout class=\"QVBoxLayout\" name=\"verticalLayout_5\">\n           <property name=\"spacing\">\n            <number>0</number>\n           </property>\n           <property name=\"leftMargin\">\n            <number>0</number>\n           </property>\n           <property name=\"topMargin\">\n            <number>0</number>\n           </property>\n           <property name=\"rightMargin\">\n            <number>0</number>\n           </property>\n           <property name=\"bottomMargin\">\n            <number>0</number>\n           </property>\n           <item>\n            <layout class=\"QVBoxLayout\" name=\"panesLayout\">\n             <property name=\"spacing\">\n              <number>0</number>\n             </property>\n             <property name=\"leftMargin\">\n              <number>0</number>\n             </property>\n             <property name=\"topMargin\">\n              <number>0</number>\n             </property>\n             <property name=\"rightMargin\">\n              <number>0</number>\n             </property>\n             <property name=\"bottomMargin\">\n              <number>0</number>\n             </property>\n            </layout>\n           </item>\n           <item>\n            <spacer name=\"verticalSpacer_3\">\n             <property name=\"orientation\">\n              <enum>Qt::Vertical</enum>\n             </property>\n             <property name=\"sizeHint\" stdset=\"0\">\n              <size>\n               <width>20</width>\n               <height>0</height>\n              </size>\n             </property>\n            </spacer>\n           </item>\n          </layout>\n         </widget>\n        </widget>\n       </item>\n      </layout>\n     </widget>\n     <widget class=\"QWidget\" name=\"networkConnectionCompletePage\">\n      <layout class=\"QVBoxLayout\" name=\"verticalLayout_2\">\n       <property name=\"spacing\">\n        <number>20</number>\n       </property>\n       <item>\n        <spacer name=\"verticalSpacer\">\n         <property name=\"orientation\">\n          <enum>Qt::Vertical</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>20</width>\n           <height>153</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n       <item>\n        <widget class=\"QLabel\" name=\"networkConnectedIcon\">\n         <property name=\"enabled\">\n          <bool>false</bool>\n         </property>\n         <property name=\"text\">\n          <string notr=\"true\"/>\n         </property>\n         <property name=\"alignment\">\n          <set>Qt::AlignCenter</set>\n         </property>\n        </widget>\n       </item>\n       <item>\n        <widget class=\"QLabel\" name=\"label_2\">\n         <property name=\"font\">\n          <font>\n           <pointsize>15</pointsize>\n          </font>\n         </property>\n         <property name=\"text\">\n          <string>You're connected!</string>\n         </property>\n         <property name=\"alignment\">\n          <set>Qt::AlignCenter</set>\n         </property>\n        </widget>\n       </item>\n       <item alignment=\"Qt::AlignHCenter\">\n        <widget class=\"QPushButton\" name=\"disconnectButton\">\n         <property name=\"text\">\n          <string>Disconnect and connect to a different network</string>\n         </property>\n         <property name=\"icon\">\n          <iconset theme=\"network-disconnect\">\n           <normaloff>.</normaloff>.</iconset>\n         </property>\n        </widget>\n       </item>\n       <item>\n        <spacer name=\"verticalSpacer_2\">\n         <property name=\"orientation\">\n          <enum>Qt::Vertical</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>20</width>\n           <height>153</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n      </layout>\n     </widget>\n    </widget>\n   </item>\n   <item>\n    <widget class=\"Line\" name=\"singlePixelHorizontalLine_2\">\n     <property name=\"maximumSize\">\n      <size>\n       <width>16777215</width>\n       <height>1</height>\n      </size>\n     </property>\n     <property name=\"orientation\">\n      <enum>Qt::Horizontal</enum>\n     </property>\n    </widget>\n   </item>\n   <item>\n    <layout class=\"QHBoxLayout\" name=\"horizontalLayout\">\n     <property name=\"spacing\">\n      <number>6</number>\n     </property>\n     <property name=\"leftMargin\">\n      <number>9</number>\n     </property>\n     <property name=\"topMargin\">\n      <number>9</number>\n     </property>\n     <property name=\"rightMargin\">\n      <number>9</number>\n     </property>\n     <property name=\"bottomMargin\">\n      <number>9</number>\n     </property>\n     <item>\n      <spacer name=\"horizontalSpacer\">\n       <property name=\"orientation\">\n        <enum>Qt::Horizontal</enum>\n       </property>\n       <property name=\"sizeHint\" stdset=\"0\">\n        <size>\n         <width>40</width>\n         <height>20</height>\n        </size>\n       </property>\n      </spacer>\n     </item>\n     <item>\n      <widget class=\"QLabel\" name=\"skipInfoPrompt\">\n       <property name=\"text\">\n        <string>You can always set up the network connection later.</string>\n       </property>\n      </widget>\n     </item>\n     <item>\n      <widget class=\"QPushButton\" name=\"nextButton\">\n       <property name=\"text\">\n        <string notr=\"true\">Next</string>\n       </property>\n       <property name=\"icon\">\n        <iconset theme=\"go-next\">\n         <normaloff>../../../thedesk/libthedesk/onboarding</normaloff>../../../thedesk/libthedesk/onboarding</iconset>\n       </property>\n      </widget>\n     </item>\n    </layout>\n   </item>\n  </layout>\n </widget>\n <customwidgets>\n  <customwidget>\n   <class>tStackedWidget</class>\n   <extends>QStackedWidget</extends>\n   <header location=\"global\">tstackedwidget.h</header>\n   <container>1</container>\n   <slots>\n    <signal>switchingFrame(int)</signal>\n   </slots>\n  </customwidget>\n  <customwidget>\n   <class>tTitleLabel</class>\n   <extends>QLabel</extends>\n   <header location=\"global\">ttitlelabel.h</header>\n   <slots>\n    <signal>backButtonClicked()</signal>\n   </slots>\n  </customwidget>\n </customwidgets>\n <resources/>\n <connections/>\n</ui>\n"
  },
  {
    "path": "plugins/NetworkPlugin/onboarding/wiredonboardingsetup.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2022 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"wiredonboardingsetup.h\"\n#include \"ui_wiredonboardingsetup.h\"\n\n#include \"networkplugincommon.h\"\n#include <QtConcurrent>\n\n#include <NetworkManagerQt/Manager>\n#include <NetworkManagerQt/Settings>\n#include <NetworkManagerQt/WiredDevice>\n\n#include \"statusCenter/popovers/connectionselectionpopover.h\"\n#include <tpopover.h>\n\nstruct WiredOnboardingSetupPrivate {\n        NetworkManager::WiredDevice::Ptr device;\n};\n\nWiredOnboardingSetup::WiredOnboardingSetup(QString device, QWidget* parent) :\n    QWidget(parent),\n    ui(new Ui::WiredOnboardingSetup) {\n    ui->setupUi(this);\n    d = new WiredOnboardingSetupPrivate();\n    d->device = NetworkManager::WiredDevice::Ptr(new NetworkManager::WiredDevice(device));\n\n    connect(d->device.data(), &NetworkManager::WiredDevice::carrierChanged, this, &WiredOnboardingSetup::updateState);\n    connect(d->device.data(), &NetworkManager::WiredDevice::stateChanged, this, &WiredOnboardingSetup::updateState);\n    updateState();\n\n    ui->spinner->setFixedSize(SC_DPI_T(QSize(16, 16), QSize));\n}\n\nWiredOnboardingSetup::~WiredOnboardingSetup() {\n    delete ui;\n    delete d;\n}\n\nvoid WiredOnboardingSetup::on_connectButton_clicked() {\n    NetworkManager::Connection::List connections = NetworkManager::listConnections();\n    QtConcurrent::blockingFilter(connections, [=](const NetworkManager::Connection::Ptr& connection) {\n        NetworkManager::ConnectionSettings::Ptr settings = connection->settings();\n        if (settings->interfaceName() != \"\" && d->device->interfaceName() != settings->interfaceName()) return false; // This connection is not applicable to this device\n        return QList<NetworkManager::ConnectionSettings::ConnectionType>({NetworkManager::ConnectionSettings::Wired}).contains(connection->settings()->connectionType());\n    });\n\n    if (connections.count() == 0) {\n        // Create a new automatic connection\n        NetworkManager::ConnectionSettings settings(NetworkManager::ConnectionSettings::Wired);\n        settings.setUuid(NetworkManager::ConnectionSettings::createNewUuid());\n        settings.setInterfaceName(d->device->interfaceName());\n        NetworkManager::addAndActivateConnection(settings.toMap(), d->device->uni(), \"\");\n    } else if (connections.count() == 1) {\n        // Use this connection\n        NetworkManager::activateConnection(connections.first()->path(), d->device->uni(), \"\");\n    } else {\n        // Ask the user for the connection to use\n        ConnectionSelectionPopover* selection = new ConnectionSelectionPopover(connections);\n        tPopover* popover = new tPopover(selection);\n        popover->setPopoverWidth(SC_DPI(600));\n        connect(selection, &ConnectionSelectionPopover::reject, popover, &tPopover::dismiss);\n        connect(selection, &ConnectionSelectionPopover::accept, this, [=](NetworkManager::Connection::Ptr connection) {\n            NetworkManager::activateConnection(connection->path(), d->device->uni(), \"\");\n            popover->dismiss();\n        });\n        connect(popover, &tPopover::dismissed, popover, &tPopover::deleteLater);\n        connect(popover, &tPopover::dismissed, selection, &ConnectionSelectionPopover::deleteLater);\n        popover->show(this->window());\n    }\n}\n\nvoid WiredOnboardingSetup::updateState() {\n    if (d->device->carrier()) {\n        ui->stateDescription->setText(tr(\"Connect to the Internet using a wired network\"));\n        ui->connectButton->setEnabled(true);\n    } else {\n        ui->stateDescription->setText(tr(\"To connect to the Internet using a wired network, connect the network cable.\"));\n        ui->connectButton->setEnabled(false);\n    }\n\n    ui->spinner->setVisible(NetworkPluginCommon::isDeviceConnecting(d->device));\n}\n"
  },
  {
    "path": "plugins/NetworkPlugin/onboarding/wiredonboardingsetup.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2022 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef WIREDONBOARDINGSETUP_H\n#define WIREDONBOARDINGSETUP_H\n\n#include <QWidget>\n\nnamespace Ui {\n    class WiredOnboardingSetup;\n}\n\nstruct WiredOnboardingSetupPrivate;\n\nclass WiredOnboardingSetup : public QWidget {\n        Q_OBJECT\n\n    public:\n        explicit WiredOnboardingSetup(QString device, QWidget* parent = nullptr);\n        ~WiredOnboardingSetup();\n\n    private slots:\n        void on_connectButton_clicked();\n\n    private:\n        Ui::WiredOnboardingSetup* ui;\n        WiredOnboardingSetupPrivate* d;\n\n        void updateState();\n};\n\n#endif // WIREDONBOARDINGSETUP_H\n"
  },
  {
    "path": "plugins/NetworkPlugin/onboarding/wiredonboardingsetup.ui",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ui version=\"4.0\">\n <class>WiredOnboardingSetup</class>\n <widget class=\"QWidget\" name=\"WiredOnboardingSetup\">\n  <property name=\"geometry\">\n   <rect>\n    <x>0</x>\n    <y>0</y>\n    <width>400</width>\n    <height>92</height>\n   </rect>\n  </property>\n  <property name=\"windowTitle\">\n   <string notr=\"true\">Form</string>\n  </property>\n  <layout class=\"QVBoxLayout\" name=\"verticalLayout_2\">\n   <property name=\"spacing\">\n    <number>0</number>\n   </property>\n   <property name=\"leftMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"topMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"rightMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"bottomMargin\">\n    <number>0</number>\n   </property>\n   <item>\n    <layout class=\"QVBoxLayout\" name=\"verticalLayout\">\n     <property name=\"spacing\">\n      <number>6</number>\n     </property>\n     <property name=\"leftMargin\">\n      <number>9</number>\n     </property>\n     <property name=\"topMargin\">\n      <number>9</number>\n     </property>\n     <property name=\"rightMargin\">\n      <number>9</number>\n     </property>\n     <property name=\"bottomMargin\">\n      <number>9</number>\n     </property>\n     <item>\n      <widget class=\"QLabel\" name=\"label\">\n       <property name=\"font\">\n        <font>\n         <bold>true</bold>\n        </font>\n       </property>\n       <property name=\"text\">\n        <string>WIRED</string>\n       </property>\n      </widget>\n     </item>\n     <item>\n      <widget class=\"QLabel\" name=\"stateDescription\">\n       <property name=\"text\">\n        <string notr=\"true\">Connect to the Internet using a Wi-Fi network</string>\n       </property>\n      </widget>\n     </item>\n     <item>\n      <layout class=\"QHBoxLayout\" name=\"horizontalLayout\">\n       <item>\n        <widget class=\"QPushButton\" name=\"connectButton\">\n         <property name=\"text\">\n          <string>Use Wired Connection</string>\n         </property>\n         <property name=\"icon\">\n          <iconset theme=\"network-wired\">\n           <normaloff>.</normaloff>.</iconset>\n         </property>\n        </widget>\n       </item>\n       <item>\n        <widget class=\"tCircularSpinner\" name=\"spinner\" native=\"true\"/>\n       </item>\n       <item>\n        <spacer name=\"horizontalSpacer\">\n         <property name=\"orientation\">\n          <enum>Qt::Horizontal</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>40</width>\n           <height>20</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n      </layout>\n     </item>\n    </layout>\n   </item>\n   <item>\n    <widget class=\"Line\" name=\"singlePixelHorizontalLine\">\n     <property name=\"maximumSize\">\n      <size>\n       <width>16777215</width>\n       <height>1</height>\n      </size>\n     </property>\n     <property name=\"orientation\">\n      <enum>Qt::Horizontal</enum>\n     </property>\n    </widget>\n   </item>\n  </layout>\n </widget>\n <customwidgets>\n  <customwidget>\n   <class>tCircularSpinner</class>\n   <extends>QWidget</extends>\n   <header location=\"global\">tcircularspinner.h</header>\n   <container>1</container>\n  </customwidget>\n </customwidgets>\n <resources/>\n <connections/>\n</ui>\n"
  },
  {
    "path": "plugins/NetworkPlugin/onboarding/wirelessonboardingsetup.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2022 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"wirelessonboardingsetup.h\"\n#include \"ui_wirelessonboardingsetup.h\"\n\n#include \"networkplugincommon.h\"\n\n#include \"statusCenter/popovers/wirelessnetworkselectionpopover.h\"\n#include <tpopover.h>\n\n#include <NetworkManagerQt/Manager>\n#include <NetworkManagerQt/WirelessDevice>\n\nstruct WirelessOnboardingSetupPrivate {\n        NetworkManager::WirelessDevice::Ptr device;\n};\n\nWirelessOnboardingSetup::WirelessOnboardingSetup(QString device, QWidget* parent) :\n    QWidget(parent),\n    ui(new Ui::WirelessOnboardingSetup) {\n    ui->setupUi(this);\n\n    d = new WirelessOnboardingSetupPrivate();\n    d->device = NetworkManager::WirelessDevice::Ptr(new NetworkManager::WirelessDevice(device));\n\n    connect(d->device.data(), &NetworkManager::WirelessDevice::stateChanged, this, &WirelessOnboardingSetup::updateState);\n    updateState();\n\n    ui->spinner->setFixedSize(SC_DPI_T(QSize(16, 16), QSize));\n}\n\nWirelessOnboardingSetup::~WirelessOnboardingSetup() {\n    delete ui;\n    delete d;\n}\n\nvoid WirelessOnboardingSetup::on_selectNetworkButton_clicked() {\n    // Turn on Wi-Fi in case it is disabled\n    NetworkManager::setWirelessEnabled(true);\n\n    WirelessNetworkSelectionPopover* selection = new WirelessNetworkSelectionPopover(d->device->uni());\n    tPopover* popover = new tPopover(selection);\n    popover->setPopoverWidth(SC_DPI(600));\n    connect(selection, &WirelessNetworkSelectionPopover::done, popover, &tPopover::dismiss);\n    connect(popover, &tPopover::dismissed, popover, &tPopover::deleteLater);\n    connect(popover, &tPopover::dismissed, selection, &WirelessNetworkSelectionPopover::deleteLater);\n    popover->show(this->window());\n}\n\nvoid WirelessOnboardingSetup::updateState() {\n    ui->spinner->setVisible(NetworkPluginCommon::isDeviceConnecting(d->device));\n}\n"
  },
  {
    "path": "plugins/NetworkPlugin/onboarding/wirelessonboardingsetup.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2022 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef WIRELESSONBOARDINGSETUP_H\n#define WIRELESSONBOARDINGSETUP_H\n\n#include <QWidget>\n\nnamespace Ui {\n    class WirelessOnboardingSetup;\n}\n\nstruct WirelessOnboardingSetupPrivate;\n\nclass WirelessOnboardingSetup : public QWidget {\n        Q_OBJECT\n\n    public:\n        explicit WirelessOnboardingSetup(QString device, QWidget* parent = nullptr);\n        ~WirelessOnboardingSetup();\n\n    private slots:\n        void on_selectNetworkButton_clicked();\n\n    private:\n        Ui::WirelessOnboardingSetup* ui;\n        WirelessOnboardingSetupPrivate* d;\n\n        void updateState();\n};\n\n#endif // WIRELESSONBOARDINGSETUP_H\n"
  },
  {
    "path": "plugins/NetworkPlugin/onboarding/wirelessonboardingsetup.ui",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ui version=\"4.0\">\n <class>WirelessOnboardingSetup</class>\n <widget class=\"QWidget\" name=\"WirelessOnboardingSetup\">\n  <property name=\"geometry\">\n   <rect>\n    <x>0</x>\n    <y>0</y>\n    <width>400</width>\n    <height>92</height>\n   </rect>\n  </property>\n  <property name=\"windowTitle\">\n   <string notr=\"true\">Form</string>\n  </property>\n  <layout class=\"QVBoxLayout\" name=\"verticalLayout_2\">\n   <property name=\"spacing\">\n    <number>0</number>\n   </property>\n   <property name=\"leftMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"topMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"rightMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"bottomMargin\">\n    <number>0</number>\n   </property>\n   <item>\n    <layout class=\"QVBoxLayout\" name=\"verticalLayout\">\n     <property name=\"spacing\">\n      <number>6</number>\n     </property>\n     <property name=\"leftMargin\">\n      <number>9</number>\n     </property>\n     <property name=\"topMargin\">\n      <number>9</number>\n     </property>\n     <property name=\"rightMargin\">\n      <number>9</number>\n     </property>\n     <property name=\"bottomMargin\">\n      <number>9</number>\n     </property>\n     <item>\n      <widget class=\"QLabel\" name=\"label\">\n       <property name=\"font\">\n        <font>\n         <bold>true</bold>\n        </font>\n       </property>\n       <property name=\"text\">\n        <string>WI-FI</string>\n       </property>\n      </widget>\n     </item>\n     <item>\n      <widget class=\"QLabel\" name=\"label_2\">\n       <property name=\"text\">\n        <string>Connect to the Internet using a Wi-Fi network</string>\n       </property>\n      </widget>\n     </item>\n     <item>\n      <layout class=\"QHBoxLayout\" name=\"horizontalLayout\">\n       <item>\n        <widget class=\"QPushButton\" name=\"selectNetworkButton\">\n         <property name=\"text\">\n          <string>Select Network</string>\n         </property>\n         <property name=\"icon\">\n          <iconset theme=\"network-wireless-connected-75\">\n           <normaloff>.</normaloff>.</iconset>\n         </property>\n        </widget>\n       </item>\n       <item>\n        <widget class=\"tCircularSpinner\" name=\"spinner\" native=\"true\"/>\n       </item>\n       <item>\n        <spacer name=\"horizontalSpacer\">\n         <property name=\"orientation\">\n          <enum>Qt::Horizontal</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>40</width>\n           <height>20</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n      </layout>\n     </item>\n    </layout>\n   </item>\n   <item>\n    <widget class=\"Line\" name=\"singlePixelHorizontalLine\">\n     <property name=\"maximumSize\">\n      <size>\n       <width>16777215</width>\n       <height>1</height>\n      </size>\n     </property>\n     <property name=\"orientation\">\n      <enum>Qt::Horizontal</enum>\n     </property>\n    </widget>\n   </item>\n  </layout>\n </widget>\n <customwidgets>\n  <customwidget>\n   <class>tCircularSpinner</class>\n   <extends>QWidget</extends>\n   <header location=\"global\">tcircularspinner.h</header>\n   <container>1</container>\n  </customwidget>\n </customwidgets>\n <resources/>\n <connections/>\n</ui>\n"
  },
  {
    "path": "plugins/NetworkPlugin/plugin.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"plugin.h\"\n\n#include \"chunk/networkchunk.h\"\n#include \"switchmanager.h\"\n#include \"tsettings.h\"\n#include <QApplication>\n#include <QDebug>\n#include <QDir>\n#include <localemanager.h>\n#include <onboardingmanager.h>\n#include <statemanager.h>\n#include <statuscentermanager.h>\n#include <tapplication.h>\n\n#include \"onboarding/onboardingnetwork.h\"\n#include \"statusCenter/networkstatuscenterpane.h\"\n\nstruct PluginPrivate {\n        NetworkStatusCenterPane* statusCenterPane;\n        NetworkChunk* chunk;\n        SwitchManager* switches;\n};\n\nPlugin::Plugin() {\n    d = new PluginPrivate();\n}\n\nPlugin::~Plugin() {\n    delete d;\n}\n\nvoid Plugin::activate() {\n    tApplication::addPluginTranslator(CNTP_TARGET_NAME);\n\n    tSettings::registerDefaults(QDir::cleanPath(qApp->applicationDirPath() + \"/../plugins/NetworkPlugin/thedesk-network.conf\"));\n    tSettings::registerDefaults(\"/usr/share/defaults/thedesk-network.conf\");\n\n    d->chunk = new NetworkChunk();\n    d->switches = new SwitchManager();\n\n    d->statusCenterPane = new NetworkStatusCenterPane(d->switches);\n    StateManager::statusCenterManager()->addPane(d->statusCenterPane);\n\n    QObject::connect(StateManager::onboardingManager(), &OnboardingManager::onboardingRequired, [=] {\n        StateManager::onboardingManager()->addOnboardingStep(new OnboardingNetwork());\n    });\n}\n\nvoid Plugin::deactivate() {\n    d->switches->deleteLater();\n    d->chunk->deleteLater();\n    StateManager::statusCenterManager()->removePane(d->statusCenterPane);\n    d->statusCenterPane->deleteLater();\n    tApplication::removePluginTranslator(CNTP_TARGET_NAME);\n}\n"
  },
  {
    "path": "plugins/NetworkPlugin/plugin.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef PLUGIN_H\n#define PLUGIN_H\n\n#include \"plugins/plugininterface.h\"\n\nstruct PluginPrivate;\nclass Plugin : public QObject,\n               public PluginInterface {\n        Q_OBJECT\n        Q_PLUGIN_METADATA(IID PluginInterface_iid FILE \"Plugin.json\")\n        Q_INTERFACES(PluginInterface)\n\n    public:\n        Plugin();\n        ~Plugin();\n\n    private:\n        PluginPrivate* d;\n\n        // PluginInterface interface\n    public:\n        void activate();\n        void deactivate();\n};\n\n#endif // PLUGIN_H\n"
  },
  {
    "path": "plugins/NetworkPlugin/statusCenter/connectionEditor/connectioneditorpane.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"connectioneditorpane.h\"\n\nConnectionEditorPane::ConnectionEditorPane(NetworkManager::Setting::Ptr setting, QWidget* parent) : QWidget(parent) {\n    setting->setInitialized(true);\n}\n\nbool ConnectionEditorPane::prepareSave() {\n    //noop\n    return true;\n}\n"
  },
  {
    "path": "plugins/NetworkPlugin/statusCenter/connectionEditor/connectioneditorpane.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef CONNECTIONEDITORPANE_H\n#define CONNECTIONEDITORPANE_H\n\n#include <QWidget>\n#include <NetworkManagerQt/Setting>\n\nclass ConnectionEditorPane : public QWidget {\n        Q_OBJECT\n    public:\n        explicit ConnectionEditorPane(NetworkManager::Setting::Ptr setting, QWidget* parent = nullptr);\n\n        virtual QString displayName() = 0;\n        virtual void reload(NetworkManager::Setting::Ptr setting) = 0;\n        virtual NetworkManager::Setting::SettingType type() = 0;\n        virtual bool prepareSave();\n\n    signals:\n        void setConnectionName(QString connectionName);\n        void changed();\n};\n\n#endif // CONNECTIONEDITORPANE_H\n"
  },
  {
    "path": "plugins/NetworkPlugin/statusCenter/connectionEditor/ipv4connectioneditorpane.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"ipv4connectioneditorpane.h\"\n#include \"ui_ipv4connectioneditorpane.h\"\n\n#include <QMenu>\n#include <terrorflash.h>\n#include <NetworkManagerQt/Utils>\n#include <NetworkManagerQt/Ipv4Setting>\n\nstruct IPv4ConnectionEditorPanePrivate {\n    NetworkManager::Ipv4Setting::Ptr setting;\n};\n\nIPv4ConnectionEditorPane::IPv4ConnectionEditorPane(NetworkManager::Setting::Ptr setting, QWidget* parent) :\n    ConnectionEditorPane(setting, parent),\n    ui(new Ui::IPv4ConnectionEditorPane) {\n    ui->setupUi(this);\n    d = new IPv4ConnectionEditorPanePrivate();\n\n    this->reload(setting);\n}\n\nIPv4ConnectionEditorPane::~IPv4ConnectionEditorPane() {\n    delete d;\n    delete ui;\n}\n\nvoid IPv4ConnectionEditorPane::updateDns() {\n    ui->dnsList->clear();\n    for (QHostAddress address : d->setting->dns()) {\n        QListWidgetItem* w = new QListWidgetItem();\n        w->setText(address.toString());\n        ui->dnsList->addItem(w);\n    }\n}\n\nvoid IPv4ConnectionEditorPane::setAddresses() {\n    QHostAddress addr(ui->ipAddress->text());\n    if (addr.isNull()) {\n        d->setting->setAddressData({});\n    } else {\n        d->setting->setAddressData({{\n                {\"address\", ui->ipAddress->text()},\n                {\"prefix\", static_cast<uint>(ui->ipSubnet->value())}\n            }});\n    }\n    emit changed();\n}\n\nQString IPv4ConnectionEditorPane::displayName() {\n    return tr(\"IPv4\");\n}\n\nvoid IPv4ConnectionEditorPane::on_configurationMethod_currentIndexChanged(int index) {\n    bool configureAddresses = false;\n    bool configureDns = false;\n\n    switch (index) {\n        case 0: //DHCP\n            d->setting->setMethod(NetworkManager::Ipv4Setting::Automatic);\n            d->setting->setIgnoreAutoDns(false);\n            break;\n        case 1: //DHCP, Manual DNS\n            d->setting->setMethod(NetworkManager::Ipv4Setting::Automatic);\n            d->setting->setIgnoreAutoDns(true);\n            configureDns = true;\n            break;\n        case 2: //Manual\n            d->setting->setMethod(NetworkManager::Ipv4Setting::Manual);\n            configureAddresses = true;\n            configureDns = true;\n            break;\n        case 3: //Shared\n            d->setting->setMethod(NetworkManager::Ipv4Setting::Shared);\n            break;\n        case 4: //Disabled\n            d->setting->setMethod(NetworkManager::Ipv4Setting::Disabled);\n            break;\n    }\n\n    ui->addressesWidget->setExpanded(configureAddresses);\n    ui->dnsWidget->setExpanded(configureDns);\n    emit changed();\n}\n\nvoid IPv4ConnectionEditorPane::on_requireIPv4Switch_toggled(bool checked) {\n    d->setting->setMayFail(!checked);\n    emit changed();\n}\n\nvoid IPv4ConnectionEditorPane::reload(NetworkManager::Setting::Ptr setting) {\n    d->setting = setting.staticCast<NetworkManager::Ipv4Setting>();\n    d->setting->setInitialized(true);\n\n    switch (d->setting->method()) {\n        case NetworkManager::Ipv4Setting::Automatic:\n            if (d->setting->ignoreAutoDns()) {\n                //DHCP, Manual DNS\n                ui->configurationMethod->setCurrentIndex(1);\n            } else {\n                //DHCP\n                ui->configurationMethod->setCurrentIndex(0);\n            }\n            break;\n        case NetworkManager::Ipv4Setting::LinkLocal:\n            break;\n        case NetworkManager::Ipv4Setting::Manual:\n            ui->configurationMethod->setCurrentIndex(2);\n            break;\n        case NetworkManager::Ipv4Setting::Shared:\n            ui->configurationMethod->setCurrentIndex(3);\n            break;\n        case NetworkManager::Ipv4Setting::Disabled:\n            ui->configurationMethod->setCurrentIndex(4);\n            break;\n    }\n\n    ui->requireIPv4Switch->setChecked(!d->setting->mayFail());\n\n    if (d->setting->addressData().count() > 0) {\n        QVariantMap addressData = d->setting->addressData().first();\n        ui->ipAddress->setText(addressData.value(\"address\").toString());\n        ui->ipSubnet->setValue(addressData.value(\"prefix\").toInt());\n    }\n    ui->ipGateway->setText(d->setting->gateway());\n\n    updateDns();\n}\n\nNetworkManager::Setting::SettingType IPv4ConnectionEditorPane::type() {\n    return NetworkManager::Setting::Ipv4;\n}\n\nbool IPv4ConnectionEditorPane::prepareSave() {\n    switch (d->setting->method()) {\n        case NetworkManager::Ipv4Setting::Automatic:\n        case NetworkManager::Ipv4Setting::Shared:\n            d->setting->setAddresses({});\n            d->setting->setAddressData({});\n            d->setting->setGateway(\"\");\n            if (d->setting->ignoreAutoDns()) {\n                if (d->setting->dns().count() == 0) {\n                    tErrorFlash::flashError(ui->dnsWidget);\n                    return false;\n                }\n            } else {\n                //DHCP\n                d->setting->setDns({});\n            }\n            break;\n        case NetworkManager::Ipv4Setting::Manual:\n            if (ui->ipAddress->text().isEmpty()) {\n                tErrorFlash::flashError(ui->ipAddress);\n                return false;\n            }\n\n            if (ui->ipGateway->text().isEmpty()) {\n                tErrorFlash::flashError(ui->ipGateway);\n                return false;\n            }\n\n            if (d->setting->dns().count() == 0) {\n                tErrorFlash::flashError(ui->dnsWidget);\n                return false;\n            }\n            break;\n        case NetworkManager::Ipv4Setting::LinkLocal:\n        case NetworkManager::Ipv4Setting::Disabled:\n            break;\n    }\n\n    return true;\n}\n\nvoid IPv4ConnectionEditorPane::on_addDnsServerButton_clicked() {\n    QHostAddress address(ui->dnsServer->text());\n    if (address.isNull()) {\n        tErrorFlash::flashError(ui->dnsServer);\n        ui->dnsServer->setFocus();\n        return;\n    }\n\n    QList<QHostAddress> addresses = d->setting->dns();\n    addresses.append(address);\n    d->setting->setDns(addresses);\n\n    ui->dnsServer->clear();\n    updateDns();\n    ui->dnsServer->setFocus();\n\n    emit changed();\n}\n\nvoid IPv4ConnectionEditorPane::on_dnsList_customContextMenuRequested(const QPoint& pos) {\n    QListWidgetItem* item = ui->dnsList->itemAt(pos);\n    int row = ui->dnsList->row(item);\n\n    QMenu* menu = new QMenu();\n    menu->addSection(tr(\"For DNS server %1\").arg(item->text()));\n    menu->addAction(QIcon::fromTheme(\"list-remove\"), tr(\"Remove\"), this, [ = ] {\n        QList<QHostAddress> addresses = d->setting->dns();\n        addresses.removeAt(row);\n        d->setting->setDns(addresses);\n\n        updateDns();\n        emit changed();\n    });\n    connect(menu, &QMenu::aboutToHide, menu, &QMenu::deleteLater);\n    menu->popup(ui->dnsList->mapToGlobal(pos));\n}\n\nvoid IPv4ConnectionEditorPane::on_ipAddress_editingFinished() {\n    QHostAddress addr(ui->ipAddress->text());\n    if (addr.isNull()) {\n        tErrorFlash::flashError(ui->ipAddress);\n        ui->ipAddress->clear();\n        return;\n    }\n\n    ui->ipAddress->setText(addr.toString());\n    setAddresses();\n}\n\nvoid IPv4ConnectionEditorPane::on_ipSubnet_valueChanged(int arg1) {\n    setAddresses();\n}\n\nvoid IPv4ConnectionEditorPane::on_ipGateway_editingFinished() {\n    QHostAddress addr(ui->ipGateway->text());\n    if (addr.isNull()) {\n        tErrorFlash::flashError(ui->ipGateway);\n        ui->ipGateway->clear();\n        return;\n    }\n\n    ui->ipGateway->setText(addr.toString());\n    d->setting->setGateway(ui->ipGateway->text());\n}\n"
  },
  {
    "path": "plugins/NetworkPlugin/statusCenter/connectionEditor/ipv4connectioneditorpane.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef IPV4CONNECTIONEDITORPANE_H\n#define IPV4CONNECTIONEDITORPANE_H\n\n#include \"connectioneditorpane.h\"\n\nnamespace Ui {\n    class IPv4ConnectionEditorPane;\n}\n\nstruct IPv4ConnectionEditorPanePrivate;\nclass IPv4ConnectionEditorPane : public ConnectionEditorPane {\n        Q_OBJECT\n\n    public:\n        explicit IPv4ConnectionEditorPane(NetworkManager::Setting::Ptr setting, QWidget* parent = nullptr);\n        ~IPv4ConnectionEditorPane();\n\n    private:\n        Ui::IPv4ConnectionEditorPane* ui;\n        IPv4ConnectionEditorPanePrivate* d;\n\n        void updateDns();\n        void setAddresses();\n\n        // ConnectionEditorPane interface\n    public:\n        QString displayName();\n        void reload(NetworkManager::Setting::Ptr setting);\n        NetworkManager::Setting::SettingType type();\n        bool prepareSave();\n\n    private slots:\n        void on_configurationMethod_currentIndexChanged(int index);\n        void on_requireIPv4Switch_toggled(bool checked);\n        void on_addDnsServerButton_clicked();\n        void on_dnsList_customContextMenuRequested(const QPoint& pos);\n        void on_ipAddress_editingFinished();\n        void on_ipSubnet_valueChanged(int arg1);\n        void on_ipGateway_editingFinished();\n};\n\n#endif // IPV4CONNECTIONEDITORPANE_H\n"
  },
  {
    "path": "plugins/NetworkPlugin/statusCenter/connectionEditor/ipv4connectioneditorpane.ui",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ui version=\"4.0\">\n <class>IPv4ConnectionEditorPane</class>\n <widget class=\"QWidget\" name=\"IPv4ConnectionEditorPane\">\n  <property name=\"geometry\">\n   <rect>\n    <x>0</x>\n    <y>0</y>\n    <width>419</width>\n    <height>456</height>\n   </rect>\n  </property>\n  <property name=\"windowTitle\">\n   <string notr=\"true\">Form</string>\n  </property>\n  <layout class=\"QVBoxLayout\" name=\"verticalLayout\">\n   <property name=\"spacing\">\n    <number>0</number>\n   </property>\n   <property name=\"leftMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"topMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"rightMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"bottomMargin\">\n    <number>0</number>\n   </property>\n   <item>\n    <widget class=\"tTitleLabel\" name=\"titleLabel\">\n     <property name=\"text\">\n      <string>IPv4</string>\n     </property>\n    </widget>\n   </item>\n   <item>\n    <widget class=\"QScrollArea\" name=\"scrollArea\">\n     <property name=\"frameShape\">\n      <enum>QFrame::NoFrame</enum>\n     </property>\n     <property name=\"widgetResizable\">\n      <bool>true</bool>\n     </property>\n     <widget class=\"QWidget\" name=\"scrollAreaWidgetContents\">\n      <property name=\"geometry\">\n       <rect>\n        <x>0</x>\n        <y>0</y>\n        <width>405</width>\n        <height>532</height>\n       </rect>\n      </property>\n      <layout class=\"QVBoxLayout\" name=\"verticalLayout_2\">\n       <property name=\"spacing\">\n        <number>0</number>\n       </property>\n       <property name=\"leftMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"topMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"rightMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"bottomMargin\">\n        <number>0</number>\n       </property>\n       <item>\n        <layout class=\"QGridLayout\" name=\"gridLayout_2\">\n         <property name=\"leftMargin\">\n          <number>9</number>\n         </property>\n         <property name=\"topMargin\">\n          <number>9</number>\n         </property>\n         <property name=\"rightMargin\">\n          <number>9</number>\n         </property>\n         <property name=\"bottomMargin\">\n          <number>9</number>\n         </property>\n         <property name=\"spacing\">\n          <number>6</number>\n         </property>\n         <item row=\"0\" column=\"1\">\n          <widget class=\"QComboBox\" name=\"configurationMethod\">\n           <property name=\"sizePolicy\">\n            <sizepolicy hsizetype=\"Expanding\" vsizetype=\"Fixed\">\n             <horstretch>0</horstretch>\n             <verstretch>0</verstretch>\n            </sizepolicy>\n           </property>\n           <item>\n            <property name=\"text\">\n             <string>DHCP</string>\n            </property>\n           </item>\n           <item>\n            <property name=\"text\">\n             <string>DHCP with manual DNS</string>\n            </property>\n           </item>\n           <item>\n            <property name=\"text\">\n             <string>Manual</string>\n            </property>\n           </item>\n           <item>\n            <property name=\"text\">\n             <string>Shared</string>\n            </property>\n           </item>\n           <item>\n            <property name=\"text\">\n             <string>Disabled</string>\n            </property>\n           </item>\n          </widget>\n         </item>\n         <item row=\"0\" column=\"0\">\n          <widget class=\"QLabel\" name=\"label\">\n           <property name=\"text\">\n            <string>Configuration Method</string>\n           </property>\n          </widget>\n         </item>\n         <item row=\"1\" column=\"0\" colspan=\"2\">\n          <layout class=\"QHBoxLayout\" name=\"horizontalLayout\">\n           <item>\n            <widget class=\"tSwitch\" name=\"requireIPv4Switch\">\n             <property name=\"text\">\n              <string notr=\"true\">RequireIPv4Switch</string>\n             </property>\n            </widget>\n           </item>\n           <item>\n            <widget class=\"QLabel\" name=\"label_7\">\n             <property name=\"text\">\n              <string>Require IPv4</string>\n             </property>\n            </widget>\n           </item>\n          </layout>\n         </item>\n        </layout>\n       </item>\n       <item>\n        <widget class=\"tConditionalWidget\" name=\"addressesWidget\" native=\"true\">\n         <layout class=\"QVBoxLayout\" name=\"verticalLayout_3\">\n          <property name=\"spacing\">\n           <number>0</number>\n          </property>\n          <property name=\"leftMargin\">\n           <number>0</number>\n          </property>\n          <property name=\"topMargin\">\n           <number>0</number>\n          </property>\n          <property name=\"rightMargin\">\n           <number>0</number>\n          </property>\n          <property name=\"bottomMargin\">\n           <number>0</number>\n          </property>\n          <item>\n           <widget class=\"Line\" name=\"line\">\n            <property name=\"maximumSize\">\n             <size>\n              <width>16777215</width>\n              <height>1</height>\n             </size>\n            </property>\n            <property name=\"orientation\">\n             <enum>Qt::Horizontal</enum>\n            </property>\n           </widget>\n          </item>\n          <item>\n           <layout class=\"QGridLayout\" name=\"gridLayout_3\">\n            <property name=\"leftMargin\">\n             <number>9</number>\n            </property>\n            <property name=\"topMargin\">\n             <number>9</number>\n            </property>\n            <property name=\"rightMargin\">\n             <number>9</number>\n            </property>\n            <property name=\"bottomMargin\">\n             <number>9</number>\n            </property>\n            <property name=\"spacing\">\n             <number>6</number>\n            </property>\n            <item row=\"4\" column=\"1\">\n             <widget class=\"QLineEdit\" name=\"ipGateway\"/>\n            </item>\n            <item row=\"2\" column=\"1\">\n             <widget class=\"QLineEdit\" name=\"ipAddress\"/>\n            </item>\n            <item row=\"2\" column=\"0\">\n             <widget class=\"QLabel\" name=\"label_3\">\n              <property name=\"text\">\n               <string>IP Address</string>\n              </property>\n             </widget>\n            </item>\n            <item row=\"4\" column=\"0\">\n             <widget class=\"QLabel\" name=\"label_5\">\n              <property name=\"text\">\n               <string>Default Gateway</string>\n              </property>\n             </widget>\n            </item>\n            <item row=\"3\" column=\"0\">\n             <widget class=\"QLabel\" name=\"label_4\">\n              <property name=\"text\">\n               <string>Subnet Length</string>\n              </property>\n             </widget>\n            </item>\n            <item row=\"0\" column=\"0\" colspan=\"2\">\n             <widget class=\"QLabel\" name=\"label_2\">\n              <property name=\"font\">\n               <font>\n                <weight>75</weight>\n                <bold>true</bold>\n               </font>\n              </property>\n              <property name=\"text\">\n               <string>ADDRESSES</string>\n              </property>\n             </widget>\n            </item>\n            <item row=\"3\" column=\"1\">\n             <widget class=\"QSpinBox\" name=\"ipSubnet\">\n              <property name=\"minimum\">\n               <number>1</number>\n              </property>\n              <property name=\"maximum\">\n               <number>32</number>\n              </property>\n              <property name=\"value\">\n               <number>24</number>\n              </property>\n             </widget>\n            </item>\n            <item row=\"1\" column=\"0\" colspan=\"2\">\n             <widget class=\"QLabel\" name=\"label_9\">\n              <property name=\"text\">\n               <string>Set the IP address that this device will be assigned.</string>\n              </property>\n              <property name=\"wordWrap\">\n               <bool>true</bool>\n              </property>\n             </widget>\n            </item>\n           </layout>\n          </item>\n         </layout>\n        </widget>\n       </item>\n       <item>\n        <widget class=\"tConditionalWidget\" name=\"dnsWidget\" native=\"true\">\n         <property name=\"autoFillBackground\">\n          <bool>true</bool>\n         </property>\n         <layout class=\"QVBoxLayout\" name=\"verticalLayout_4\">\n          <property name=\"spacing\">\n           <number>0</number>\n          </property>\n          <property name=\"leftMargin\">\n           <number>0</number>\n          </property>\n          <property name=\"topMargin\">\n           <number>0</number>\n          </property>\n          <property name=\"rightMargin\">\n           <number>0</number>\n          </property>\n          <property name=\"bottomMargin\">\n           <number>0</number>\n          </property>\n          <item>\n           <widget class=\"Line\" name=\"line_2\">\n            <property name=\"maximumSize\">\n             <size>\n              <width>16777215</width>\n              <height>1</height>\n             </size>\n            </property>\n            <property name=\"orientation\">\n             <enum>Qt::Horizontal</enum>\n            </property>\n           </widget>\n          </item>\n          <item>\n           <layout class=\"QGridLayout\" name=\"gridLayout\">\n            <property name=\"leftMargin\">\n             <number>9</number>\n            </property>\n            <property name=\"topMargin\">\n             <number>9</number>\n            </property>\n            <property name=\"rightMargin\">\n             <number>9</number>\n            </property>\n            <property name=\"bottomMargin\">\n             <number>9</number>\n            </property>\n            <property name=\"spacing\">\n             <number>6</number>\n            </property>\n            <item row=\"3\" column=\"0\" colspan=\"2\">\n             <widget class=\"QListWidget\" name=\"dnsList\">\n              <property name=\"contextMenuPolicy\">\n               <enum>Qt::CustomContextMenu</enum>\n              </property>\n             </widget>\n            </item>\n            <item row=\"2\" column=\"1\">\n             <widget class=\"QToolButton\" name=\"addDnsServerButton\">\n              <property name=\"text\">\n               <string notr=\"true\">...</string>\n              </property>\n              <property name=\"icon\">\n               <iconset theme=\"list-add\">\n                <normaloff>.</normaloff>.</iconset>\n              </property>\n             </widget>\n            </item>\n            <item row=\"0\" column=\"0\" colspan=\"2\">\n             <widget class=\"QLabel\" name=\"label_6\">\n              <property name=\"font\">\n               <font>\n                <weight>75</weight>\n                <bold>true</bold>\n               </font>\n              </property>\n              <property name=\"text\">\n               <string>DNS</string>\n              </property>\n             </widget>\n            </item>\n            <item row=\"2\" column=\"0\">\n             <widget class=\"QLineEdit\" name=\"dnsServer\">\n              <property name=\"placeholderText\">\n               <string>1.1.1.1</string>\n              </property>\n             </widget>\n            </item>\n            <item row=\"1\" column=\"0\" colspan=\"2\">\n             <widget class=\"QLabel\" name=\"label_8\">\n              <property name=\"text\">\n               <string>Configure the DNS servers that will be used to resolve domain names.</string>\n              </property>\n              <property name=\"wordWrap\">\n               <bool>true</bool>\n              </property>\n             </widget>\n            </item>\n           </layout>\n          </item>\n         </layout>\n        </widget>\n       </item>\n       <item>\n        <spacer name=\"verticalSpacer\">\n         <property name=\"orientation\">\n          <enum>Qt::Vertical</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>20</width>\n           <height>0</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n      </layout>\n     </widget>\n    </widget>\n   </item>\n  </layout>\n </widget>\n <customwidgets>\n  <customwidget>\n   <class>tTitleLabel</class>\n   <extends>QLabel</extends>\n   <header location=\"global\">ttitlelabel.h</header>\n   <slots>\n    <signal>backButtonClicked()</signal>\n   </slots>\n  </customwidget>\n  <customwidget>\n   <class>tSwitch</class>\n   <extends>QPushButton</extends>\n   <header location=\"global\">tswitch.h</header>\n  </customwidget>\n  <customwidget>\n   <class>tConditionalWidget</class>\n   <extends>QWidget</extends>\n   <header location=\"global\">tconditionalwidget.h</header>\n   <container>1</container>\n  </customwidget>\n </customwidgets>\n <tabstops>\n  <tabstop>configurationMethod</tabstop>\n  <tabstop>requireIPv4Switch</tabstop>\n  <tabstop>ipAddress</tabstop>\n  <tabstop>ipSubnet</tabstop>\n  <tabstop>ipGateway</tabstop>\n  <tabstop>dnsServer</tabstop>\n  <tabstop>addDnsServerButton</tabstop>\n  <tabstop>dnsList</tabstop>\n  <tabstop>scrollArea</tabstop>\n </tabstops>\n <resources/>\n <connections>\n  <connection>\n   <sender>dnsServer</sender>\n   <signal>returnPressed()</signal>\n   <receiver>addDnsServerButton</receiver>\n   <slot>click()</slot>\n   <hints>\n    <hint type=\"sourcelabel\">\n     <x>333</x>\n     <y>330</y>\n    </hint>\n    <hint type=\"destinationlabel\">\n     <x>387</x>\n     <y>330</y>\n    </hint>\n   </hints>\n  </connection>\n </connections>\n</ui>\n"
  },
  {
    "path": "plugins/NetworkPlugin/statusCenter/connectionEditor/networkconnectioneditor.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"networkconnectioneditor.h\"\n#include \"ui_networkconnectioneditor.h\"\n\n#include <QDBusPendingCallWatcher>\n#include <ttoast.h>\n#include <terrorflash.h>\n\n#include <NetworkManagerQt/Settings>\n#include \"wificonnectioneditorpane.h\"\n#include \"ipv4connectioneditorpane.h\"\n\nstruct NetworkConnectionEditorPrivate {\n    NetworkManager::ConnectionSettings::Ptr connectionSettings;\n    NetworkManager::Connection::Ptr connection;\n    NMVariantMapMap oldSettings;\n    bool haveUnsaved = false;\n\n    QList<ConnectionEditorPane*> panes;\n};\n\nNetworkConnectionEditor::NetworkConnectionEditor(NetworkManager::ConnectionSettings::Ptr connectionSettings, QWidget* parent) :\n    QWidget(parent),\n    ui(new Ui::NetworkConnectionEditor) {\n    ui->setupUi(this);\n\n    this->init();\n    d->connectionSettings = connectionSettings;\n\n    ui->saveWidget->setVisible(true);\n    ui->unsavedPane->setVisible(false);\n\n    this->populate();\n}\n\nNetworkConnectionEditor::NetworkConnectionEditor(NetworkManager::Connection::Ptr connection, QWidget* parent) :\n    QWidget(parent),\n    ui(new Ui::NetworkConnectionEditor) {\n    ui->setupUi(this);\n\n    this->init();\n    d->connectionSettings = connection->settings();\n    d->connection = connection;\n    d->oldSettings = connection->settings()->toMap();\n\n    ui->saveWidget->setVisible(false);\n    ui->unsavedPane->setVisible(true);\n    ui->unsavedPane->setFixedHeight(0);\n\n    this->populate();\n    d->haveUnsaved = false;\n    updateUnsaved();\n}\n\nNetworkConnectionEditor::~NetworkConnectionEditor() {\n    delete d;\n    delete ui;\n}\n\nint NetworkConnectionEditor::preferredPopoverWidth() {\n    return SC_DPI(-300);\n}\n\nvoid NetworkConnectionEditor::setSaveButtonText(QString text) {\n    ui->saveButton->setText(text);\n}\n\nvoid NetworkConnectionEditor::on_titleLabel_backButtonClicked() {\n    if (d->connection && d->haveUnsaved) {\n        tErrorFlash::flashError(ui->unsavedPane);\n        return;\n    }\n    emit rejected();\n}\n\nvoid NetworkConnectionEditor::on_connectionName_textChanged(const QString& arg1) {\n    ui->titleLabel->setText(arg1);\n    d->connectionSettings->setId(arg1);\n}\n\nvoid NetworkConnectionEditor::init() {\n    d = new NetworkConnectionEditorPrivate();\n    ui->leftWidget->setFixedWidth(SC_DPI(300));\n    ui->titleLabel->setBackButtonShown(true);\n    ui->stackedWidget->setCurrentAnimation(tStackedWidget::Lift);\n}\n\nvoid NetworkConnectionEditor::populate() {\n    ui->connectionName->setText(d->connectionSettings->id());\n    ui->titleLabel->setText(d->connectionSettings->id());\n\n    for (NetworkManager::Setting::Ptr setting : d->connectionSettings->settings()) {\n        ConnectionEditorPane* pane = nullptr;\n\n        switch (setting->type()) {\n            case NetworkManager::Setting::Wireless:\n                pane = new WifiConnectionEditorPane(setting, this);\n                break;\n            case NetworkManager::Setting::Ipv4:\n                pane = new IPv4ConnectionEditorPane(setting, this);\n                break;\n            case NetworkManager::Setting::Adsl:\n            case NetworkManager::Setting::Cdma:\n            case NetworkManager::Setting::Gsm:\n            case NetworkManager::Setting::Infiniband:\n            case NetworkManager::Setting::Ipv6:\n            case NetworkManager::Setting::Ppp:\n            case NetworkManager::Setting::Pppoe:\n            case NetworkManager::Setting::Security8021x:\n            case NetworkManager::Setting::Serial:\n            case NetworkManager::Setting::Vpn:\n            case NetworkManager::Setting::Wired:\n            case NetworkManager::Setting::WirelessSecurity:\n            case NetworkManager::Setting::Bluetooth:\n            case NetworkManager::Setting::OlpcMesh:\n            case NetworkManager::Setting::Vlan:\n            case NetworkManager::Setting::Wimax:\n            case NetworkManager::Setting::Bond:\n            case NetworkManager::Setting::Bridge:\n            case NetworkManager::Setting::BridgePort:\n            case NetworkManager::Setting::Team:\n            case NetworkManager::Setting::Generic:\n            case NetworkManager::Setting::Tun:\n            case NetworkManager::Setting::Vxlan:\n            case NetworkManager::Setting::IpTunnel:\n            case NetworkManager::Setting::Proxy:\n            case NetworkManager::Setting::User:\n            case NetworkManager::Setting::OvsBridge:\n            case NetworkManager::Setting::OvsInterface:\n            case NetworkManager::Setting::OvsPatch:\n            case NetworkManager::Setting::OvsPort:\n            case NetworkManager::Setting::Match:\n            case NetworkManager::Setting::Tc:\n            case NetworkManager::Setting::TeamPort:\n            case NetworkManager::Setting::Macsec:\n            case NetworkManager::Setting::Dcb:\n            case NetworkManager::Setting::WireGuard:\n                continue;\n        }\n\n        if (pane) {\n            ui->stackedWidget->addWidget(pane);\n            d->panes.append(pane);\n\n            QListWidgetItem* item = new QListWidgetItem();\n            item->setText(pane->displayName());\n            ui->listWidget->addItem(item);\n\n            connect(pane, &ConnectionEditorPane::setConnectionName, this, [ = ](QString connectionName) {\n                d->connectionSettings->setId(connectionName);\n                ui->connectionName->setText(connectionName);\n                ui->titleLabel->setText(connectionName);\n            });\n            connect(pane, &ConnectionEditorPane::changed, this, [ = ] {\n                d->haveUnsaved = true;\n                updateUnsaved();\n            });\n        }\n    }\n}\n\nvoid NetworkConnectionEditor::updateUnsaved() {\n    tVariantAnimation* anim = new tVariantAnimation(this);\n    anim->setStartValue(ui->unsavedPane->height());\n    if (d->haveUnsaved) {\n        anim->setEndValue(ui->unsavedPane->sizeHint().height());\n    } else {\n        anim->setEndValue(0);\n    }\n    anim->setDuration(250);\n    anim->setEasingCurve(QEasingCurve::OutCubic);\n    connect(anim, &tVariantAnimation::valueChanged, this, [ = ](QVariant value) {\n        ui->unsavedPane->setFixedHeight(value.toInt());\n    });\n    connect(anim, &tVariantAnimation::finished, anim, &tVariantAnimation::deleteLater);\n    anim->start();\n}\n\nvoid NetworkConnectionEditor::on_saveButton_clicked() {\n    //Save the new connection settings\n    QDBusPendingCallWatcher* watcher = new QDBusPendingCallWatcher(NetworkManager::addConnection(d->connectionSettings->toMap()));\n    connect(watcher, &QDBusPendingCallWatcher::finished, this, [ = ] {\n        if (watcher->isError()) {\n            tToast* toast = new tToast();\n            toast->setTitle(tr(\"Couldn't save settings\"));\n            toast->setText(watcher->error().message());\n            connect(toast, &tToast::dismissed, toast, &tToast::deleteLater);\n            toast->show(this);\n        } else {\n            QDBusObjectPath path = watcher->reply().arguments().first().value<QDBusObjectPath>();\n            NetworkManager::Connection::Ptr connection(new NetworkManager::Connection(path.path()));\n            emit accepted(connection);\n        }\n        watcher->deleteLater();\n    });\n}\n\nvoid NetworkConnectionEditor::on_saveModifiedButton_clicked() {\n    //Notify all panes about intent to save\n    for (ConnectionEditorPane* pane : d->panes) {\n        if (!pane->prepareSave()) {\n            //Can't save this one; go there to let the user know\n            ui->listWidget->setCurrentRow(ui->stackedWidget->indexOf(pane));\n            return;\n        }\n    }\n\n    //Save the changes\n    QDBusPendingCallWatcher* watcher = new QDBusPendingCallWatcher(d->connection->update(d->connectionSettings->toMap()));\n    connect(watcher, &QDBusPendingCallWatcher::finished, this, [ = ] {\n        if (watcher->isError()) {\n            tToast* toast = new tToast();\n            toast->setTitle(tr(\"Couldn't save settings\"));\n            toast->setText(watcher->error().message());\n            connect(toast, &tToast::dismissed, toast, &tToast::deleteLater);\n            toast->show(this);\n        } else {\n            d->connectionSettings = d->connection->settings();\n            for (ConnectionEditorPane* pane : d->panes) {\n                pane->reload(d->connectionSettings->setting(pane->type()));\n            }\n            d->haveUnsaved = false;\n            updateUnsaved();\n        }\n        watcher->deleteLater();\n    });\n}\n\nvoid NetworkConnectionEditor::on_revertButton_clicked() {\n    //Undo the changes\n    d->connectionSettings->fromMap(d->oldSettings);\n    for (ConnectionEditorPane* pane : d->panes) {\n        pane->reload(d->connectionSettings->setting(pane->type()));\n    }\n    d->haveUnsaved = false;\n    updateUnsaved();\n}\n"
  },
  {
    "path": "plugins/NetworkPlugin/statusCenter/connectionEditor/networkconnectioneditor.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef NETWORKCONNECTIONEDITOR_H\n#define NETWORKCONNECTIONEDITOR_H\n\n#include <QWidget>\n#include <NetworkManagerQt/ConnectionSettings>\n#include <NetworkManagerQt/Connection>\n\nnamespace Ui {\n    class NetworkConnectionEditor;\n}\n\nstruct NetworkConnectionEditorPrivate;\nclass NetworkConnectionEditor : public QWidget {\n        Q_OBJECT\n\n    public:\n        explicit NetworkConnectionEditor(NetworkManager::ConnectionSettings::Ptr connectionSettings, QWidget* parent = nullptr);\n        explicit NetworkConnectionEditor(NetworkManager::Connection::Ptr connection, QWidget* parent = nullptr);\n        ~NetworkConnectionEditor();\n\n        static int preferredPopoverWidth();\n\n        void setSaveButtonText(QString text);\n\n    private slots:\n        void on_titleLabel_backButtonClicked();\n\n        void on_connectionName_textChanged(const QString& arg1);\n\n        void on_saveButton_clicked();\n\n        void on_saveModifiedButton_clicked();\n\n        void on_revertButton_clicked();\n\n    signals:\n        void rejected();\n        void accepted(NetworkManager::Connection::Ptr connection);\n\n    private:\n        Ui::NetworkConnectionEditor* ui;\n        NetworkConnectionEditorPrivate* d;\n\n        void init();\n        void populate();\n        void updateUnsaved();\n};\n\n#endif // NETWORKCONNECTIONEDITOR_H\n"
  },
  {
    "path": "plugins/NetworkPlugin/statusCenter/connectionEditor/networkconnectioneditor.ui",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ui version=\"4.0\">\n <class>NetworkConnectionEditor</class>\n <widget class=\"QWidget\" name=\"NetworkConnectionEditor\">\n  <property name=\"geometry\">\n   <rect>\n    <x>0</x>\n    <y>0</y>\n    <width>632</width>\n    <height>400</height>\n   </rect>\n  </property>\n  <property name=\"windowTitle\">\n   <string notr=\"true\">Form</string>\n  </property>\n  <layout class=\"QHBoxLayout\" name=\"horizontalLayout\">\n   <property name=\"spacing\">\n    <number>0</number>\n   </property>\n   <property name=\"leftMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"topMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"rightMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"bottomMargin\">\n    <number>0</number>\n   </property>\n   <item>\n    <widget class=\"QWidget\" name=\"leftWidget\" native=\"true\">\n     <layout class=\"QVBoxLayout\" name=\"verticalLayout\">\n      <property name=\"spacing\">\n       <number>0</number>\n      </property>\n      <property name=\"leftMargin\">\n       <number>0</number>\n      </property>\n      <property name=\"topMargin\">\n       <number>0</number>\n      </property>\n      <property name=\"rightMargin\">\n       <number>0</number>\n      </property>\n      <property name=\"bottomMargin\">\n       <number>0</number>\n      </property>\n      <item>\n       <widget class=\"tTitleLabel\" name=\"titleLabel\">\n        <property name=\"text\">\n         <string notr=\"true\">TextLabel</string>\n        </property>\n       </widget>\n      </item>\n      <item>\n       <widget class=\"QWidget\" name=\"unsavedPane\" native=\"true\">\n        <property name=\"autoFillBackground\">\n         <bool>true</bool>\n        </property>\n        <layout class=\"QVBoxLayout\" name=\"verticalLayout_5\">\n         <property name=\"spacing\">\n          <number>0</number>\n         </property>\n         <property name=\"leftMargin\">\n          <number>0</number>\n         </property>\n         <property name=\"topMargin\">\n          <number>0</number>\n         </property>\n         <property name=\"rightMargin\">\n          <number>0</number>\n         </property>\n         <property name=\"bottomMargin\">\n          <number>0</number>\n         </property>\n         <item>\n          <widget class=\"QWidget\" name=\"widget\" native=\"true\">\n           <layout class=\"QVBoxLayout\" name=\"verticalLayout_7\">\n            <item>\n             <widget class=\"QLabel\" name=\"label_4\">\n              <property name=\"font\">\n               <font>\n                <weight>75</weight>\n                <bold>true</bold>\n               </font>\n              </property>\n              <property name=\"text\">\n               <string>SETTINGS MODIFIED</string>\n              </property>\n             </widget>\n            </item>\n            <item>\n             <widget class=\"QLabel\" name=\"label_5\">\n              <property name=\"text\">\n               <string notr=\"true\">Save your settings once you're done so you don't lose them</string>\n              </property>\n              <property name=\"wordWrap\">\n               <bool>true</bool>\n              </property>\n             </widget>\n            </item>\n            <item>\n             <layout class=\"QHBoxLayout\" name=\"horizontalLayout_3\">\n              <property name=\"spacing\">\n               <number>0</number>\n              </property>\n              <item>\n               <spacer name=\"horizontalSpacer_2\">\n                <property name=\"orientation\">\n                 <enum>Qt::Horizontal</enum>\n                </property>\n                <property name=\"sizeHint\" stdset=\"0\">\n                 <size>\n                  <width>40</width>\n                  <height>20</height>\n                 </size>\n                </property>\n               </spacer>\n              </item>\n              <item>\n               <widget class=\"QPushButton\" name=\"revertButton\">\n                <property name=\"text\">\n                 <string>Revert</string>\n                </property>\n                <property name=\"icon\">\n                 <iconset theme=\"view-refresh\">\n                  <normaloff>.</normaloff>.</iconset>\n                </property>\n               </widget>\n              </item>\n              <item>\n               <widget class=\"QPushButton\" name=\"saveModifiedButton\">\n                <property name=\"text\">\n                 <string>Save</string>\n                </property>\n                <property name=\"icon\">\n                 <iconset theme=\"dialog-ok\">\n                  <normaloff>.</normaloff>.</iconset>\n                </property>\n               </widget>\n              </item>\n             </layout>\n            </item>\n           </layout>\n          </widget>\n         </item>\n         <item>\n          <widget class=\"Line\" name=\"line_2\">\n           <property name=\"maximumSize\">\n            <size>\n             <width>16777215</width>\n             <height>1</height>\n            </size>\n           </property>\n           <property name=\"orientation\">\n            <enum>Qt::Horizontal</enum>\n           </property>\n          </widget>\n         </item>\n        </layout>\n       </widget>\n      </item>\n      <item>\n       <widget class=\"QWidget\" name=\"saveWidget\" native=\"true\">\n        <layout class=\"QVBoxLayout\" name=\"verticalLayout_3\">\n         <property name=\"spacing\">\n          <number>0</number>\n         </property>\n         <property name=\"leftMargin\">\n          <number>0</number>\n         </property>\n         <property name=\"topMargin\">\n          <number>0</number>\n         </property>\n         <property name=\"rightMargin\">\n          <number>0</number>\n         </property>\n         <property name=\"bottomMargin\">\n          <number>0</number>\n         </property>\n         <item>\n          <widget class=\"QWidget\" name=\"widget_2\" native=\"true\">\n           <layout class=\"QVBoxLayout\" name=\"verticalLayout_4\">\n            <item>\n             <widget class=\"QLabel\" name=\"label_2\">\n              <property name=\"font\">\n               <font>\n                <weight>75</weight>\n                <bold>true</bold>\n               </font>\n              </property>\n              <property name=\"text\">\n               <string>DONE?</string>\n              </property>\n             </widget>\n            </item>\n            <item>\n             <widget class=\"QLabel\" name=\"label_3\">\n              <property name=\"text\">\n               <string notr=\"true\">Your settings look good.</string>\n              </property>\n             </widget>\n            </item>\n            <item>\n             <layout class=\"QHBoxLayout\" name=\"horizontalLayout_2\">\n              <item>\n               <spacer name=\"horizontalSpacer\">\n                <property name=\"orientation\">\n                 <enum>Qt::Horizontal</enum>\n                </property>\n                <property name=\"sizeHint\" stdset=\"0\">\n                 <size>\n                  <width>40</width>\n                  <height>20</height>\n                 </size>\n                </property>\n               </spacer>\n              </item>\n              <item>\n               <widget class=\"QPushButton\" name=\"saveButton\">\n                <property name=\"text\">\n                 <string>Save</string>\n                </property>\n                <property name=\"icon\">\n                 <iconset theme=\"dialog-ok\">\n                  <normaloff>.</normaloff>.</iconset>\n                </property>\n               </widget>\n              </item>\n             </layout>\n            </item>\n           </layout>\n          </widget>\n         </item>\n         <item>\n          <widget class=\"Line\" name=\"leftLine\">\n           <property name=\"maximumSize\">\n            <size>\n             <width>16777215</width>\n             <height>1</height>\n            </size>\n           </property>\n           <property name=\"orientation\">\n            <enum>Qt::Horizontal</enum>\n           </property>\n          </widget>\n         </item>\n        </layout>\n       </widget>\n      </item>\n      <item>\n       <widget class=\"QListWidget\" name=\"listWidget\">\n        <property name=\"frameShape\">\n         <enum>QFrame::NoFrame</enum>\n        </property>\n        <item>\n         <property name=\"text\">\n          <string>General</string>\n         </property>\n        </item>\n       </widget>\n      </item>\n     </layout>\n    </widget>\n   </item>\n   <item>\n    <widget class=\"Line\" name=\"line\">\n     <property name=\"maximumSize\">\n      <size>\n       <width>1</width>\n       <height>16777215</height>\n      </size>\n     </property>\n     <property name=\"orientation\">\n      <enum>Qt::Vertical</enum>\n     </property>\n    </widget>\n   </item>\n   <item>\n    <widget class=\"tStackedWidget\" name=\"stackedWidget\">\n     <widget class=\"QWidget\" name=\"generalPage\">\n      <layout class=\"QVBoxLayout\" name=\"verticalLayout_2\">\n       <property name=\"spacing\">\n        <number>0</number>\n       </property>\n       <property name=\"leftMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"topMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"rightMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"bottomMargin\">\n        <number>0</number>\n       </property>\n       <item>\n        <widget class=\"tTitleLabel\" name=\"titleLabel_2\">\n         <property name=\"text\">\n          <string>General</string>\n         </property>\n        </widget>\n       </item>\n       <item>\n        <layout class=\"QGridLayout\" name=\"gridLayout\">\n         <property name=\"leftMargin\">\n          <number>9</number>\n         </property>\n         <property name=\"topMargin\">\n          <number>9</number>\n         </property>\n         <property name=\"rightMargin\">\n          <number>9</number>\n         </property>\n         <property name=\"bottomMargin\">\n          <number>9</number>\n         </property>\n         <property name=\"spacing\">\n          <number>6</number>\n         </property>\n         <item row=\"0\" column=\"0\">\n          <widget class=\"QLabel\" name=\"label\">\n           <property name=\"text\">\n            <string>Connection Name</string>\n           </property>\n          </widget>\n         </item>\n         <item row=\"0\" column=\"1\">\n          <widget class=\"QLineEdit\" name=\"connectionName\"/>\n         </item>\n        </layout>\n       </item>\n       <item>\n        <spacer name=\"verticalSpacer\">\n         <property name=\"orientation\">\n          <enum>Qt::Vertical</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>20</width>\n           <height>337</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n      </layout>\n     </widget>\n    </widget>\n   </item>\n  </layout>\n </widget>\n <customwidgets>\n  <customwidget>\n   <class>tTitleLabel</class>\n   <extends>QLabel</extends>\n   <header location=\"global\">ttitlelabel.h</header>\n   <slots>\n    <signal>backButtonClicked()</signal>\n   </slots>\n  </customwidget>\n  <customwidget>\n   <class>tStackedWidget</class>\n   <extends>QStackedWidget</extends>\n   <header location=\"global\">tstackedwidget.h</header>\n   <container>1</container>\n   <slots>\n    <signal>switchingFrame(int)</signal>\n   </slots>\n  </customwidget>\n </customwidgets>\n <resources/>\n <connections>\n  <connection>\n   <sender>listWidget</sender>\n   <signal>currentRowChanged(int)</signal>\n   <receiver>stackedWidget</receiver>\n   <slot>setCurrentIndex(int)</slot>\n   <hints>\n    <hint type=\"sourcelabel\">\n     <x>225</x>\n     <y>183</y>\n    </hint>\n    <hint type=\"destinationlabel\">\n     <x>486</x>\n     <y>200</y>\n    </hint>\n   </hints>\n  </connection>\n </connections>\n</ui>\n"
  },
  {
    "path": "plugins/NetworkPlugin/statusCenter/connectionEditor/wificonnectioneditorpane.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"wificonnectioneditorpane.h\"\n#include \"ui_wificonnectioneditorpane.h\"\n\n#include <NetworkManagerQt/Settings>\n#include <NetworkManagerQt/WirelessSetting>\n#include <QtConcurrent>\n\nstruct WifiConnectionEditorPanePrivate {\n    NetworkManager::WirelessSetting::Ptr setting;\n};\n\nWifiConnectionEditorPane::WifiConnectionEditorPane(NetworkManager::Setting::Ptr setting, QWidget* parent) :\n    ConnectionEditorPane(setting, parent),\n    ui(new Ui::WifiConnectionEditorPane) {\n    ui->setupUi(this);\n\n    d = new WifiConnectionEditorPanePrivate();\n\n    this->reload(setting);\n}\n\nWifiConnectionEditorPane::~WifiConnectionEditorPane() {\n    delete ui;\n    delete d;\n}\n\nQString WifiConnectionEditorPane::displayName() {\n    return tr(\"Wi-Fi\");\n}\n\nvoid WifiConnectionEditorPane::reload(NetworkManager::Setting::Ptr setting) {\n    d->setting = setting.staticCast<NetworkManager::WirelessSetting>();\n    d->setting->setInitialized(true);\n    ui->ssidLineEdit->setText(d->setting->ssid());\n    ui->modeBox->setCurrentIndex(d->setting->mode());\n}\n\nNetworkManager::Setting::SettingType WifiConnectionEditorPane::type() {\n    return NetworkManager::Setting::Wireless;\n}\n\nvoid WifiConnectionEditorPane::on_ssidLineEdit_textChanged(const QString& arg1) {\n    d->setting->setSsid(arg1.toUtf8());\n\n    QString newId = arg1;\n    int number = 0;\n    bool loopAgain = true;\n\n    auto name = [ & ] {\n        if (number == 0) return arg1;\n        return newId + \" \" + QString::number(number);\n    };\n\n    NetworkManager::Connection::List connections = NetworkManager::listConnections();\n    while (loopAgain) {\n        loopAgain = false;\n        for (NetworkManager::Connection::Ptr connection : connections) {\n            if (connection->settings()->id() == name()) {\n                number++;\n                loopAgain = true;\n            }\n        }\n    }\n    emit setConnectionName(name());\n    emit changed();\n}\n\nvoid WifiConnectionEditorPane::on_modeBox_currentIndexChanged(int index) {\n    d->setting->setMode(static_cast<NetworkManager::WirelessSetting::NetworkMode>(index));\n    emit changed();\n}\n"
  },
  {
    "path": "plugins/NetworkPlugin/statusCenter/connectionEditor/wificonnectioneditorpane.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef WIFICONNECTIONEDITORPANE_H\n#define WIFICONNECTIONEDITORPANE_H\n\n#include \"connectioneditorpane.h\"\n\nnamespace Ui {\n    class WifiConnectionEditorPane;\n}\n\nstruct WifiConnectionEditorPanePrivate;\nclass WifiConnectionEditorPane : public ConnectionEditorPane {\n        Q_OBJECT\n\n    public:\n        explicit WifiConnectionEditorPane(NetworkManager::Setting::Ptr setting, QWidget* parent = nullptr);\n        ~WifiConnectionEditorPane();\n\n    private:\n        Ui::WifiConnectionEditorPane* ui;\n        WifiConnectionEditorPanePrivate* d;\n\n        // ConnectionEditorPane interface\n    public:\n        QString displayName();\n        void reload(NetworkManager::Setting::Ptr setting);\n        NetworkManager::Setting::SettingType type();\n\n    private slots:\n        void on_ssidLineEdit_textChanged(const QString& arg1);\n        void on_modeBox_currentIndexChanged(int index);\n};\n\n#endif // WIFICONNECTIONEDITORPANE_H\n"
  },
  {
    "path": "plugins/NetworkPlugin/statusCenter/connectionEditor/wificonnectioneditorpane.ui",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ui version=\"4.0\">\n <class>WifiConnectionEditorPane</class>\n <widget class=\"QWidget\" name=\"WifiConnectionEditorPane\">\n  <property name=\"geometry\">\n   <rect>\n    <x>0</x>\n    <y>0</y>\n    <width>400</width>\n    <height>300</height>\n   </rect>\n  </property>\n  <property name=\"windowTitle\">\n   <string notr=\"true\">Form</string>\n  </property>\n  <layout class=\"QVBoxLayout\" name=\"verticalLayout\">\n   <property name=\"spacing\">\n    <number>0</number>\n   </property>\n   <property name=\"leftMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"topMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"rightMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"bottomMargin\">\n    <number>0</number>\n   </property>\n   <item>\n    <widget class=\"tTitleLabel\" name=\"titleLabel\">\n     <property name=\"text\">\n      <string>Wi-Fi</string>\n     </property>\n    </widget>\n   </item>\n   <item>\n    <layout class=\"QGridLayout\" name=\"gridLayout\">\n     <property name=\"leftMargin\">\n      <number>9</number>\n     </property>\n     <property name=\"topMargin\">\n      <number>9</number>\n     </property>\n     <property name=\"rightMargin\">\n      <number>9</number>\n     </property>\n     <property name=\"bottomMargin\">\n      <number>9</number>\n     </property>\n     <property name=\"spacing\">\n      <number>6</number>\n     </property>\n     <item row=\"1\" column=\"0\">\n      <widget class=\"QLabel\" name=\"label_2\">\n       <property name=\"text\">\n        <string>Mode</string>\n       </property>\n      </widget>\n     </item>\n     <item row=\"0\" column=\"0\">\n      <widget class=\"QLabel\" name=\"label\">\n       <property name=\"text\">\n        <string>SSID</string>\n       </property>\n      </widget>\n     </item>\n     <item row=\"0\" column=\"1\">\n      <widget class=\"QLineEdit\" name=\"ssidLineEdit\"/>\n     </item>\n     <item row=\"1\" column=\"1\">\n      <widget class=\"QComboBox\" name=\"modeBox\">\n       <item>\n        <property name=\"text\">\n         <string>Infrastructure</string>\n        </property>\n       </item>\n       <item>\n        <property name=\"text\">\n         <string>Ad-Hoc</string>\n        </property>\n       </item>\n       <item>\n        <property name=\"text\">\n         <string>Access Point</string>\n        </property>\n       </item>\n      </widget>\n     </item>\n    </layout>\n   </item>\n   <item>\n    <spacer name=\"verticalSpacer\">\n     <property name=\"orientation\">\n      <enum>Qt::Vertical</enum>\n     </property>\n     <property name=\"sizeHint\" stdset=\"0\">\n      <size>\n       <width>20</width>\n       <height>40</height>\n      </size>\n     </property>\n    </spacer>\n   </item>\n  </layout>\n </widget>\n <customwidgets>\n  <customwidget>\n   <class>tTitleLabel</class>\n   <extends>QLabel</extends>\n   <header location=\"global\">ttitlelabel.h</header>\n   <slots>\n    <signal>backButtonClicked()</signal>\n   </slots>\n  </customwidget>\n </customwidgets>\n <resources/>\n <connections/>\n</ui>\n"
  },
  {
    "path": "plugins/NetworkPlugin/statusCenter/devicePanes/abstractdevicepane.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"abstractdevicepane.h\"\n\nAbstractDevicePane::AbstractDevicePane(QWidget* parent) : QWidget(parent) {\n\n}\n\nAbstractDevicePane::~AbstractDevicePane() {\n\n}\n"
  },
  {
    "path": "plugins/NetworkPlugin/statusCenter/devicePanes/abstractdevicepane.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef ABSTRACTDEVICEPANE_H\n#define ABSTRACTDEVICEPANE_H\n\n#include <QWidget>\n#include <QListWidgetItem>\n\nclass AbstractDevicePane : public QWidget {\n        Q_OBJECT\n    public:\n        explicit AbstractDevicePane(QWidget* parent = nullptr);\n        virtual ~AbstractDevicePane();\n\n        virtual QListWidgetItem* leftPaneItem() = 0;\n    signals:\n\n};\n\n#endif // ABSTRACTDEVICEPANE_H\n"
  },
  {
    "path": "plugins/NetworkPlugin/statusCenter/devicePanes/cellularpane.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"cellularpane.h\"\n#include \"ui_cellularpane.h\"\n\n#include \"../popovers/simsettingspopover.h\"\n#include \"../popovers/unlockmodempopover.h\"\n#include \"networkplugincommon.h\"\n#include <QAction>\n#include <barmanager.h>\n#include <hudmanager.h>\n#include <statemanager.h>\n#include <statuscentermanager.h>\n#include <tnotification.h>\n#include <tpopover.h>\n#include <transparentdialog.h>\n#include <tscrim.h>\n#include <tsettings.h>\n\n#include <actionquickwidget.h>\n#include <icontextchunk.h>\n\n#include <ModemManagerQt/Manager>\n#include <ModemManagerQt/Modem3Gpp>\n#include <ModemManagerQt/Modem>\n#include <ModemManagerQt/Sim>\n#include <NetworkManagerQt/Manager>\n#include <NetworkManagerQt/ModemDevice>\n#include <NetworkManagerQt/Settings>\n\nstruct CellularPanePrivate {\n        QListWidgetItem* item;\n        NetworkManager::ModemDevice::Ptr device;\n        ModemManager::ModemDevice::Ptr modem;\n        ModemManager::Modem3gpp::Ptr modem3gpp;\n\n        IconTextChunk* chunk;\n\n        tSettings settings;\n        NetworkManager::Device::State oldState;\n\n        QAction* unlockSimAction;\n\n        bool pinNotificationSent = false;\n};\n\nCellularPane::CellularPane(QString uni, QWidget* parent) :\n    AbstractDevicePane(parent),\n    ui(new Ui::CellularPane) {\n    ui->setupUi(this);\n    d = new CellularPanePrivate();\n\n    ui->titleLabel->setBackButtonIsMenu(true);\n    ui->titleLabel->setBackButtonShown(StateManager::instance()->statusCenterManager()->isHamburgerMenuRequired());\n    connect(StateManager::instance()->statusCenterManager(), &StatusCenterManager::isHamburgerMenuRequiredChanged, ui->titleLabel, &tTitleLabel::setBackButtonShown);\n\n    const int contentWidth = StateManager::instance()->statusCenterManager()->preferredContentWidth();\n    ui->actionsWidget->setFixedWidth(contentWidth);\n    ui->statusWidget->setFixedWidth(contentWidth);\n\n    ui->disconnectButton->setProperty(\"type\", \"destructive\");\n    ui->errorFrame->setVisible(false);\n\n    d->chunk = new IconTextChunk(\"network-cellular\");\n    d->item = new QListWidgetItem();\n    d->device = NetworkManager::findNetworkInterface(uni).staticCast<NetworkManager::ModemDevice>();\n    d->modem = ModemManager::findModemDevice(d->device->udi());\n    d->modem3gpp = ModemManager::Modem3gpp::Ptr(new ModemManager::Modem3gpp(d->device->udi()));\n\n    d->unlockSimAction = new QAction(this);\n    d->unlockSimAction->setVisible(false);\n    d->unlockSimAction->setIcon(QIcon::fromTheme(\"sim-card\"));\n    connect(d->unlockSimAction, &QAction::triggered, this, &CellularPane::unlockDevice);\n\n    QAction* enableDisableCellularAction = new QAction(this);\n    enableDisableCellularAction->setIcon(QIcon::fromTheme(\"network-cellular\"));\n    connect(enableDisableCellularAction, &QAction::triggered, this, [=] {\n        NetworkManager::setWwanEnabled(!NetworkManager::isWwanEnabled());\n    });\n\n    ActionQuickWidget* quickWidget = new ActionQuickWidget(d->chunk);\n    quickWidget->addAction(d->unlockSimAction);\n    quickWidget->addAction(enableDisableCellularAction);\n    d->chunk->setQuickWidget(quickWidget);\n\n    auto updateWwanEnabled = [=](bool enabled) {\n        if (enabled) {\n            enableDisableCellularAction->setText(tr(\"Disable Cellular\"));\n        } else {\n            enableDisableCellularAction->setText(tr(\"Enable Cellular\"));\n        }\n    };\n    connect(NetworkManager::notifier(), &NetworkManager::Notifier::wwanEnabledChanged, this, updateWwanEnabled);\n    updateWwanEnabled(NetworkManager::isWwanEnabled());\n\n    d->item->setText(this->operatorName());\n    ui->titleLabel->setText(this->operatorName());\n\n    connect(d->device.data(), &NetworkManager::ModemDevice::stateChanged, this, &CellularPane::updateState);\n    updateState();\n\n    connect(d->device.data(), &NetworkManager::ModemDevice::stateChanged, this, [=](NetworkManager::Device::State newState, NetworkManager::Device::State oldState, NetworkManager::Device::StateChangeReason reason) {\n        if (d->settings.value(\"NetworkPlugin/notifications.activation\").toBool()) {\n            switch (newState) {\n                case NetworkManager::Device::Unavailable:\n                    d->device->setAutoconnect(false);\n                    Q_FALLTHROUGH();\n                case NetworkManager::Device::Disconnected:\n                    if (oldState != NetworkManager::Device::Failed) StateManager::hudManager()->showHud({\n                        {\"icon\",  \"network-cellular-disconnected\"},\n                        {\"title\", this->operatorName()           },\n                        {\"text\",  tr(\"Disconnected\")             }\n });\n                    break;\n                case NetworkManager::Device::Activated:\n                    {\n                        d->device->setAutoconnect(true);\n                        QString title = tr(\"Cellular\");\n\n                        StateManager::hudManager()->showHud({\n                            {\"icon\",  \"network-cellular-activated\"},\n                            {\"title\", this->operatorName()        },\n                            {\"text\",  tr(\"Connected\")             }\n                        });\n                        break;\n                    }\n                case NetworkManager::Device::Failed:\n                    d->device->setAutoconnect(false);\n                    StateManager::hudManager()->showHud({\n                        {\"icon\",  \"network-cellular-error\"},\n                        {\"title\", this->operatorName()    },\n                        {\"text\",  tr(\"Failed\")            }\n                    });\n                    break;\n                default:\n                    break;\n            }\n        }\n    });\n\n    connect(d->modem->modemInterface().data(), &ModemManager::Modem::signalQualityChanged, this, &CellularPane::updateState);\n    connect(d->modem->modemInterface().data(), &ModemManager::Modem::currentModesChanged, this, &CellularPane::updateState);\n    connect(d->modem->modemInterface().data(), &ModemManager::Modem::unlockRequiredChanged, this, &CellularPane::updateState);\n    connect(d->modem3gpp.data(), &ModemManager::Modem3gpp::registrationStateChanged, this, &CellularPane::updateState);\n\n    StateManager::barManager()->addChunk(d->chunk);\n}\n\nCellularPane::~CellularPane() {\n    StateManager::barManager()->removeChunk(d->chunk);\n    d->chunk->deleteLater();\n    delete d;\n    delete ui;\n}\n\nvoid CellularPane::updateState() {\n    if (!d->modem) return;\n    if (!d->modem->modemInterface()) return;\n\n    QIcon signalIcon = QIcon::fromTheme(NetworkPluginCommon::iconForSignalStrength(d->modem->modemInterface()->signalQuality().signal, NetworkPluginCommon::Cellular));\n    QIcon signalErrorIcon = QIcon::fromTheme(NetworkPluginCommon::iconForSignalStrength(d->modem->modemInterface()->signalQuality().signal, NetworkPluginCommon::CellularError));\n    ui->deviceIcon->setPixmap(QIcon::fromTheme(\"computer\").pixmap(SC_DPI_T(QSize(96, 96), QSize)));\n    ui->routerIcon->setPixmap(signalIcon.pixmap(SC_DPI_T(QSize(96, 96), QSize)));\n    ui->routerName->setText(this->operatorName());\n\n    ui->unlockModemButton->setVisible(false);\n\n    QStringList chunkParts;\n    chunkParts.append(this->operatorName());\n\n    NetworkManager::DeviceStateReason stateReason = d->device->stateReason();\n    if (d->oldState != NetworkManager::Device::Failed) {\n        // Only get rid of the error message here if the previous state was not failure.\n        ui->errorFrame->setVisible(false);\n    }\n\n    switch (stateReason.state()) {\n        case NetworkManager::Device::UnknownState:\n        case NetworkManager::Device::Unmanaged:\n        case NetworkManager::Device::Unavailable:\n            {\n                ui->stateConnecting->setVisible(false);\n                ui->stateIcon->setVisible(true);\n                ui->stateIcon->setPixmap(QIcon::fromTheme(\"dialog-cancel\").pixmap(SC_DPI_T(QSize(32, 32), QSize)));\n                ui->leftStateLine->setEnabled(false);\n                ui->rightStateLine->setEnabled(false);\n                ui->disconnectButton->setVisible(false);\n                ui->connectButton->setVisible(false);\n                d->device->setAutoconnect(false);\n\n                if (d->modem->sim()->uni() == \"/\") {\n                    ui->errorFrame->setTitle(tr(\"No SIM Card\"));\n                    ui->errorFrame->setText(tr(\"Insert a SIM card to connect to cellular services.\"));\n                    chunkParts.clear();\n                    chunkParts.append(tr(\"No SIM\"));\n                    d->chunk->setIcon(QIcon::fromTheme(\"sim-card-none\"));\n                } else {\n                    ui->errorFrame->setTitle(tr(\"Unavailable\"));\n\n                    QString reasonText;\n                    reasonText = tr(\"This network is unavailable because %2.\");\n                    reasonText = reasonText.arg(NetworkPluginCommon::stateChangeReasonToString(stateReason.reason()));\n                    ui->errorFrame->setText(reasonText);\n                    d->chunk->setIcon(signalErrorIcon);\n                }\n\n                ui->errorFrame->setState(tStatusFrame::Warning);\n                ui->errorFrame->setVisible(true);\n                break;\n            }\n        case NetworkManager::Device::Disconnected:\n            ui->stateConnecting->setVisible(false);\n            ui->stateIcon->setVisible(true);\n            ui->stateIcon->setPixmap(QIcon::fromTheme(\"dialog-cancel\").pixmap(SC_DPI_T(QSize(32, 32), QSize)));\n            ui->leftStateLine->setEnabled(false);\n            ui->rightStateLine->setEnabled(false);\n            ui->disconnectButton->setVisible(false);\n            ui->connectButton->setVisible(true);\n            d->chunk->setIcon(signalErrorIcon);\n            break;\n        case NetworkManager::Device::Failed:\n            {\n                ui->stateConnecting->setVisible(false);\n                ui->stateIcon->setVisible(true);\n                ui->stateIcon->setPixmap(QIcon::fromTheme(\"dialog-cancel\").pixmap(SC_DPI_T(QSize(32, 32), QSize)));\n                ui->leftStateLine->setEnabled(false);\n                ui->rightStateLine->setEnabled(false);\n                ui->disconnectButton->setVisible(false);\n                ui->connectButton->setVisible(true);\n                d->chunk->setIcon(signalErrorIcon);\n\n                ui->errorFrame->setTitle(tr(\"Connection Failure\"));\n\n                QString reasonText = tr(\"Connecting to the network failed because %2.\");\n                reasonText = reasonText.arg(NetworkPluginCommon::stateChangeReasonToString(stateReason.reason()));\n                ui->errorFrame->setText(reasonText);\n                ui->errorFrame->setState(tStatusFrame::Error);\n                ui->errorFrame->setVisible(true);\n                break;\n            }\n        case NetworkManager::Device::Preparing:\n        case NetworkManager::Device::ConfiguringHardware:\n        case NetworkManager::Device::NeedAuth:\n        case NetworkManager::Device::ConfiguringIp:\n        case NetworkManager::Device::CheckingIp:\n        case NetworkManager::Device::WaitingForSecondaries:\n        case NetworkManager::Device::Deactivating:\n            ui->stateConnecting->setVisible(true);\n            ui->stateIcon->setVisible(false);\n            ui->leftStateLine->setEnabled(true);\n            ui->rightStateLine->setEnabled(false);\n            ui->disconnectButton->setVisible(true);\n            ui->connectButton->setVisible(false);\n            d->chunk->setIcon(signalIcon);\n            break;\n        case NetworkManager::Device::Activated:\n            ui->stateConnecting->setVisible(false);\n            ui->stateIcon->setVisible(true);\n            ui->stateIcon->setPixmap(QIcon::fromTheme(\"dialog-ok\").pixmap(SC_DPI_T(QSize(32, 32), QSize)));\n            ui->leftStateLine->setEnabled(true);\n            ui->rightStateLine->setEnabled(true);\n            ui->disconnectButton->setVisible(true);\n            ui->connectButton->setVisible(false);\n            d->chunk->setIcon(signalIcon);\n\n            ModemManager::Modem::AccessTechnologies accessTechnology = d->modem->modemInterface()->accessTechnologies();\n\n#if MM_CHECK_VERSION(1, 14, 0)\n            if (accessTechnology & MM_MODEM_ACCESS_TECHNOLOGY_5GNR) {\n                chunkParts.append(\"5G\");\n            } else\n#endif\n                if (accessTechnology & MM_MODEM_ACCESS_TECHNOLOGY_LTE) {\n                chunkParts.append(\"LTE\");\n            } else if (accessTechnology & MM_MODEM_ACCESS_TECHNOLOGY_HSPA_PLUS) {\n                chunkParts.append(\"H+\");\n            } else if (accessTechnology & MM_MODEM_ACCESS_TECHNOLOGY_HSDPA ||\n                       accessTechnology & MM_MODEM_ACCESS_TECHNOLOGY_HSUPA ||\n                       accessTechnology & MM_MODEM_ACCESS_TECHNOLOGY_HSPA) {\n                chunkParts.append(\"H\");\n            } else if (accessTechnology & MM_MODEM_ACCESS_TECHNOLOGY_UMTS ||\n                       accessTechnology & MM_MODEM_ACCESS_TECHNOLOGY_EVDO0 ||\n                       accessTechnology & MM_MODEM_ACCESS_TECHNOLOGY_EVDOA ||\n                       accessTechnology & MM_MODEM_ACCESS_TECHNOLOGY_EVDOB) {\n                chunkParts.append(\"3G\");\n            } else if (accessTechnology & MM_MODEM_ACCESS_TECHNOLOGY_EDGE) {\n                chunkParts.append(\"E\");\n            } else if (accessTechnology & MM_MODEM_ACCESS_TECHNOLOGY_GPRS) {\n                chunkParts.append(\"G\");\n            } else if (accessTechnology & MM_MODEM_ACCESS_TECHNOLOGY_1XRTT) {\n                chunkParts.append(\"1X\");\n            }\n\n            MMModem3gppRegistrationState modem3gppRegistration = d->modem3gpp->registrationState();\n            if (modem3gppRegistration == MM_MODEM_3GPP_REGISTRATION_STATE_ROAMING ||\n                modem3gppRegistration == MM_MODEM_3GPP_REGISTRATION_STATE_ROAMING_SMS_ONLY ||\n                modem3gppRegistration == MM_MODEM_3GPP_REGISTRATION_STATE_ROAMING_CSFB_NOT_PREFERRED) {\n                chunkParts.append(\"R\");\n            }\n\n            break;\n    }\n\n    MMModemLock unlockRequired = d->modem->modemInterface()->unlockRequired();\n    ModemManager::UnlockRetriesMap retries = d->modem->modemInterface()->unlockRetries();\n    switch (unlockRequired) {\n        case MM_MODEM_LOCK_SIM_PIN:\n            {\n                ui->unlockModemButton->setText(tr(\"Enter SIM PIN\"));\n                ui->unlockModemButton->setVisible(true);\n                chunkParts.append(tr(\"SIM PIN Required\"));\n                d->chunk->setIcon(QIcon::fromTheme(\"sim-card\"));\n                ui->connectButton->setVisible(false);\n\n                ui->errorFrame->setTitle(tr(\"SIM PIN Required\"));\n\n                QString reasonText = tr(\"A SIM PIN is required to connect to the cellular network.\");\n                ui->errorFrame->setText(reasonText);\n                ui->errorFrame->setState(tStatusFrame::Error);\n                ui->errorFrame->setVisible(true);\n\n                d->unlockSimAction->setText(tr(\"Enter SIM PIN\"));\n                d->unlockSimAction->setVisible(true);\n\n                if (!d->pinNotificationSent) {\n                    tNotification* notification = new tNotification();\n                    notification->setSummary(tr(\"SIM PIN Required\"));\n                    notification->setText(reasonText);\n                    notification->insertAction(QStringLiteral(\"unlock\"), tr(\"Enter SIM PIN\"));\n                    connect(notification, &tNotification::actionClicked, this, [=](QString key) {\n                        if (key == QStringLiteral(\"unlock\")) unlockDevice();\n                    });\n                    notification->post();\n                    d->pinNotificationSent = true;\n                }\n                break;\n            }\n        case MM_MODEM_LOCK_SIM_PUK:\n            {\n                ui->unlockModemButton->setText(tr(\"Enter SIM PUK\"));\n                ui->unlockModemButton->setVisible(true);\n                chunkParts.append(tr(\"SIM PUK Required\"));\n                d->chunk->setIcon(QIcon::fromTheme(\"sim-card\"));\n                ui->connectButton->setVisible(false);\n\n                ui->errorFrame->setTitle(tr(\"SIM PUK Required\"));\n\n                QString reasonText = tr(\"A SIM PUK is required to connect to the cellular network.\");\n                ui->errorFrame->setText(reasonText);\n                ui->errorFrame->setState(tStatusFrame::Error);\n                ui->errorFrame->setVisible(true);\n\n                d->unlockSimAction->setText(tr(\"Enter SIM PUK\"));\n                d->unlockSimAction->setVisible(true);\n\n                if (!d->pinNotificationSent) {\n                    tNotification* notification = new tNotification();\n                    notification->setSummary(tr(\"SIM PUK Required\"));\n                    notification->setText(reasonText);\n                    notification->insertAction(QStringLiteral(\"unlock\"), tr(\"Enter SIM PUK\"));\n                    connect(notification, &tNotification::actionClicked, this, [=](QString key) {\n                        if (key == QStringLiteral(\"unlock\")) unlockDevice();\n                    });\n                    notification->post();\n                    d->pinNotificationSent = true;\n                }\n                break;\n            }\n        default:\n            ui->unlockModemButton->setVisible(false);\n            d->unlockSimAction->setVisible(false);\n            d->pinNotificationSent = false;\n    }\n\n    d->oldState = stateReason.state();\n    d->chunk->setText(chunkParts.join(\" · \"));\n}\n\nQString CellularPane::operatorName() {\n    if (!d->modem) return tr(\"Cellular\");\n    return NetworkPluginCommon::operatorNameForModem(d->modem);\n}\n\nvoid CellularPane::unlockDevice() {\n    TransparentDialog* dialog = new TransparentDialog();\n    dialog->setWindowFlag(Qt::FramelessWindowHint);\n    dialog->setWindowFlag(Qt::WindowStaysOnTopHint);\n    tScrim::scrimForWidget(dialog)->setBlurEnabled(false);\n    dialog->showFullScreen();\n\n    QTimer::singleShot(500, [=] {\n        UnlockModemPopover* popoverContents = new UnlockModemPopover(d->modem);\n\n        tPopover* popover = new tPopover(popoverContents);\n        popover->setPopoverSide(tPopover::Bottom);\n        popover->setPopoverWidth(SC_DPI(600));\n        connect(popoverContents, &UnlockModemPopover::done, popover, &tPopover::dismiss);\n        connect(popover, &tPopover::dismissed, [=] {\n            popover->deleteLater();\n            dialog->deleteLater();\n            popoverContents->deleteLater();\n        });\n        popover->show(dialog);\n    });\n}\n\nQListWidgetItem* CellularPane::leftPaneItem() {\n    return d->item;\n}\n\nvoid CellularPane::on_disconnectButton_clicked() {\n    d->device->disconnectInterface();\n}\n\nvoid CellularPane::on_simSettingsButton_clicked() {\n    SimSettingsPopover* simSettings = new SimSettingsPopover(d->modem);\n    tPopover* popover = new tPopover(simSettings);\n    popover->setPopoverWidth(SC_DPI(600));\n    connect(simSettings, &SimSettingsPopover::dismissed, popover, &tPopover::dismiss);\n    connect(popover, &tPopover::dismissed, popover, &tPopover::deleteLater);\n    connect(popover, &tPopover::dismissed, simSettings, &SimSettingsPopover::deleteLater);\n    popover->show(this->window());\n}\n\nvoid CellularPane::on_unlockModemButton_clicked() {\n    unlockDevice();\n}\n\nvoid CellularPane::on_titleLabel_backButtonClicked() {\n    StateManager::statusCenterManager()->showStatusCenterHamburgerMenu();\n}\n\nvoid CellularPane::changeEvent(QEvent* event) {\n    if (event->type() == QEvent::LanguageChange) {\n        ui->retranslateUi(this);\n    }\n}\n"
  },
  {
    "path": "plugins/NetworkPlugin/statusCenter/devicePanes/cellularpane.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef CELLULARPANE_H\n#define CELLULARPANE_H\n\n#include <QWidget>\n#include \"abstractdevicepane.h\"\n\nnamespace Ui {\n    class CellularPane;\n}\n\nstruct CellularPanePrivate;\nclass CellularPane : public AbstractDevicePane {\n        Q_OBJECT\n\n    public:\n        explicit CellularPane(QString uni, QWidget* parent = nullptr);\n        ~CellularPane();\n\n        void updateState();\n\n        QString operatorName();\n\n    private:\n        Ui::CellularPane* ui;\n        CellularPanePrivate* d;\n\n        void unlockDevice();\n\n        // AbstractDevicePane interface\n    public:\n        QListWidgetItem* leftPaneItem();\n\n    private slots:\n        void on_disconnectButton_clicked();\n        void on_simSettingsButton_clicked();\n        void on_unlockModemButton_clicked();\n        void on_titleLabel_backButtonClicked();\n\n        // QWidget interface\n    protected:\n        void changeEvent(QEvent* event);\n};\n\n#endif // CELLULARPANE_H\n"
  },
  {
    "path": "plugins/NetworkPlugin/statusCenter/devicePanes/cellularpane.ui",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ui version=\"4.0\">\n <class>CellularPane</class>\n <widget class=\"QWidget\" name=\"CellularPane\">\n  <property name=\"geometry\">\n   <rect>\n    <x>0</x>\n    <y>0</y>\n    <width>806</width>\n    <height>594</height>\n   </rect>\n  </property>\n  <property name=\"windowTitle\">\n   <string notr=\"true\">Form</string>\n  </property>\n  <layout class=\"QVBoxLayout\" name=\"verticalLayout\">\n   <property name=\"spacing\">\n    <number>0</number>\n   </property>\n   <property name=\"leftMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"topMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"rightMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"bottomMargin\">\n    <number>0</number>\n   </property>\n   <item>\n    <widget class=\"tTitleLabel\" name=\"titleLabel\">\n     <property name=\"text\">\n      <string notr=\"true\">Cellular</string>\n     </property>\n    </widget>\n   </item>\n   <item>\n    <widget class=\"QScrollArea\" name=\"scrollArea\">\n     <property name=\"frameShape\">\n      <enum>QFrame::NoFrame</enum>\n     </property>\n     <property name=\"widgetResizable\">\n      <bool>true</bool>\n     </property>\n     <widget class=\"QWidget\" name=\"scrollAreaWidgetContents\">\n      <property name=\"geometry\">\n       <rect>\n        <x>0</x>\n        <y>0</y>\n        <width>806</width>\n        <height>577</height>\n       </rect>\n      </property>\n      <layout class=\"QVBoxLayout\" name=\"verticalLayout_2\">\n       <property name=\"spacing\">\n        <number>0</number>\n       </property>\n       <property name=\"leftMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"topMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"rightMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"bottomMargin\">\n        <number>0</number>\n       </property>\n       <item alignment=\"Qt::AlignHCenter\">\n        <widget class=\"QWidget\" name=\"statusWidget\" native=\"true\">\n         <layout class=\"QVBoxLayout\" name=\"verticalLayout_4\">\n          <item>\n           <widget class=\"QLabel\" name=\"label_2\">\n            <property name=\"font\">\n             <font>\n              <weight>75</weight>\n              <bold>true</bold>\n             </font>\n            </property>\n            <property name=\"text\">\n             <string>STATUS</string>\n            </property>\n           </widget>\n          </item>\n          <item>\n           <layout class=\"QHBoxLayout\" name=\"horizontalLayout_2\">\n            <item>\n             <layout class=\"QVBoxLayout\" name=\"verticalLayout_5\">\n              <item>\n               <widget class=\"QLabel\" name=\"deviceIcon\">\n                <property name=\"text\">\n                 <string notr=\"true\">TextLabel</string>\n                </property>\n               </widget>\n              </item>\n              <item>\n               <widget class=\"QLabel\" name=\"label_3\">\n                <property name=\"text\">\n                 <string>This Device</string>\n                </property>\n                <property name=\"alignment\">\n                 <set>Qt::AlignCenter</set>\n                </property>\n               </widget>\n              </item>\n             </layout>\n            </item>\n            <item>\n             <widget class=\"Line\" name=\"leftStateLine\">\n              <property name=\"sizePolicy\">\n               <sizepolicy hsizetype=\"Expanding\" vsizetype=\"Fixed\">\n                <horstretch>0</horstretch>\n                <verstretch>0</verstretch>\n               </sizepolicy>\n              </property>\n              <property name=\"maximumSize\">\n               <size>\n                <width>16777215</width>\n                <height>1</height>\n               </size>\n              </property>\n              <property name=\"orientation\">\n               <enum>Qt::Horizontal</enum>\n              </property>\n             </widget>\n            </item>\n            <item>\n             <widget class=\"tCircularSpinner\" name=\"stateConnecting\" native=\"true\"/>\n            </item>\n            <item>\n             <widget class=\"QLabel\" name=\"stateIcon\">\n              <property name=\"text\">\n               <string notr=\"true\">TextLabel</string>\n              </property>\n             </widget>\n            </item>\n            <item>\n             <widget class=\"Line\" name=\"rightStateLine\">\n              <property name=\"sizePolicy\">\n               <sizepolicy hsizetype=\"Expanding\" vsizetype=\"Fixed\">\n                <horstretch>0</horstretch>\n                <verstretch>0</verstretch>\n               </sizepolicy>\n              </property>\n              <property name=\"maximumSize\">\n               <size>\n                <width>16777215</width>\n                <height>1</height>\n               </size>\n              </property>\n              <property name=\"orientation\">\n               <enum>Qt::Horizontal</enum>\n              </property>\n             </widget>\n            </item>\n            <item>\n             <layout class=\"QVBoxLayout\" name=\"verticalLayout_6\">\n              <item>\n               <widget class=\"QLabel\" name=\"routerIcon\">\n                <property name=\"text\">\n                 <string notr=\"true\">TextLabel</string>\n                </property>\n               </widget>\n              </item>\n              <item>\n               <widget class=\"QLabel\" name=\"routerName\">\n                <property name=\"text\">\n                 <string notr=\"true\">TextLabel</string>\n                </property>\n                <property name=\"alignment\">\n                 <set>Qt::AlignCenter</set>\n                </property>\n               </widget>\n              </item>\n             </layout>\n            </item>\n           </layout>\n          </item>\n          <item>\n           <widget class=\"tStatusFrame\" name=\"errorFrame\">\n            <property name=\"frameShape\">\n             <enum>QFrame::StyledPanel</enum>\n            </property>\n            <property name=\"frameShadow\">\n             <enum>QFrame::Raised</enum>\n            </property>\n           </widget>\n          </item>\n         </layout>\n        </widget>\n       </item>\n       <item>\n        <widget class=\"Line\" name=\"line\">\n         <property name=\"maximumSize\">\n          <size>\n           <width>16777215</width>\n           <height>1</height>\n          </size>\n         </property>\n         <property name=\"orientation\">\n          <enum>Qt::Horizontal</enum>\n         </property>\n        </widget>\n       </item>\n       <item alignment=\"Qt::AlignHCenter\">\n        <widget class=\"QWidget\" name=\"actionsWidget\" native=\"true\">\n         <layout class=\"QVBoxLayout\" name=\"verticalLayout_3\">\n          <property name=\"spacing\">\n           <number>0</number>\n          </property>\n          <property name=\"leftMargin\">\n           <number>0</number>\n          </property>\n          <property name=\"topMargin\">\n           <number>0</number>\n          </property>\n          <property name=\"rightMargin\">\n           <number>0</number>\n          </property>\n          <item>\n           <layout class=\"QHBoxLayout\" name=\"horizontalLayout\">\n            <property name=\"leftMargin\">\n             <number>9</number>\n            </property>\n            <property name=\"topMargin\">\n             <number>9</number>\n            </property>\n            <property name=\"rightMargin\">\n             <number>9</number>\n            </property>\n            <property name=\"bottomMargin\">\n             <number>6</number>\n            </property>\n            <item>\n             <widget class=\"QLabel\" name=\"label\">\n              <property name=\"font\">\n               <font>\n                <weight>75</weight>\n                <bold>true</bold>\n               </font>\n              </property>\n              <property name=\"text\">\n               <string>ACTIONS</string>\n              </property>\n             </widget>\n            </item>\n           </layout>\n          </item>\n          <item>\n           <widget class=\"QPushButton\" name=\"unlockModemButton\">\n            <property name=\"text\">\n             <string notr=\"true\">Enter SIM PIN</string>\n            </property>\n           </widget>\n          </item>\n          <item>\n           <widget class=\"QPushButton\" name=\"connectButton\">\n            <property name=\"text\">\n             <string>Connect</string>\n            </property>\n           </widget>\n          </item>\n          <item>\n           <widget class=\"QPushButton\" name=\"disconnectButton\">\n            <property name=\"text\">\n             <string>Disconnect</string>\n            </property>\n           </widget>\n          </item>\n          <item>\n           <widget class=\"QPushButton\" name=\"simSettingsButton\">\n            <property name=\"text\">\n             <string>Modem Settings</string>\n            </property>\n           </widget>\n          </item>\n         </layout>\n        </widget>\n       </item>\n       <item>\n        <spacer name=\"verticalSpacer\">\n         <property name=\"orientation\">\n          <enum>Qt::Vertical</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>20</width>\n           <height>138</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n      </layout>\n     </widget>\n    </widget>\n   </item>\n  </layout>\n </widget>\n <customwidgets>\n  <customwidget>\n   <class>tTitleLabel</class>\n   <extends>QLabel</extends>\n   <header location=\"global\">ttitlelabel.h</header>\n   <slots>\n    <signal>backButtonClicked()</signal>\n   </slots>\n  </customwidget>\n  <customwidget>\n   <class>tCircularSpinner</class>\n   <extends>QWidget</extends>\n   <header location=\"global\">tcircularspinner.h</header>\n   <container>1</container>\n  </customwidget>\n  <customwidget>\n   <class>tStatusFrame</class>\n   <extends>QFrame</extends>\n   <header location=\"global\">tstatusframe.h</header>\n   <container>1</container>\n  </customwidget>\n </customwidgets>\n <resources/>\n <connections/>\n</ui>\n"
  },
  {
    "path": "plugins/NetworkPlugin/statusCenter/devicePanes/devicepane.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"devicepane.h\"\n#include \"ui_devicepane.h\"\n\n#include <statemanager.h>\n#include <statuscentermanager.h>\n\n#include <NetworkManagerQt/Manager>\n#include <NetworkManagerQt/Device>\n\nstruct DevicePanePrivate {\n    QListWidgetItem* item;\n    NetworkManager::Device::Ptr device;\n};\n\nDevicePane::DevicePane(QString uni, QWidget* parent) :\n    AbstractDevicePane(parent),\n    ui(new Ui::DevicePane) {\n    ui->setupUi(this);\n\n    ui->titleLabel->setBackButtonIsMenu(true);\n    ui->titleLabel->setBackButtonShown(StateManager::instance()->statusCenterManager()->isHamburgerMenuRequired());\n    connect(StateManager::instance()->statusCenterManager(), &StatusCenterManager::isHamburgerMenuRequiredChanged, ui->titleLabel, &tTitleLabel::setBackButtonShown);\n\n    const int contentWidth = StateManager::instance()->statusCenterManager()->preferredContentWidth();\n    ui->actionsWidget->setFixedWidth(contentWidth);\n    ui->statusWidget->setFixedWidth(contentWidth);\n\n    ui->disconnectButton->setProperty(\"type\", \"destructive\");\n\n    d = new DevicePanePrivate();\n    d->item = new QListWidgetItem();\n    d->device = NetworkManager::findNetworkInterface(uni);\n\n    d->item->setText(d->device->interfaceName());\n    ui->titleLabel->setText(d->device->interfaceName());\n\n    connect(d->device.data(), &NetworkManager::Device::interfaceNameChanged, this, [ = ] {\n        d->item->setText(d->device->interfaceName());\n        ui->titleLabel->setText(d->device->interfaceName());\n    });\n}\n\nDevicePane::~DevicePane() {\n    delete d->item;\n    delete d;\n    delete ui;\n}\n\nQListWidgetItem* DevicePane::leftPaneItem() {\n    return d->item;\n}\n\nvoid DevicePane::on_disconnectButton_clicked() {\n    d->device->disconnectInterface();\n}\n\nvoid DevicePane::on_titleLabel_backButtonClicked() {\n    StateManager::statusCenterManager()->showStatusCenterHamburgerMenu();\n}\n\n\nvoid DevicePane::changeEvent(QEvent* event) {\n    if (event->type() == QEvent::LanguageChange) {\n        ui->retranslateUi(this);\n    }\n}\n"
  },
  {
    "path": "plugins/NetworkPlugin/statusCenter/devicePanes/devicepane.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef DEVICEPANE_H\n#define DEVICEPANE_H\n\n#include \"abstractdevicepane.h\"\n\nnamespace Ui {\n    class DevicePane;\n}\n\nstruct DevicePanePrivate;\nclass DevicePane : public AbstractDevicePane {\n        Q_OBJECT\n\n    public:\n        explicit DevicePane(QString uni, QWidget* parent = nullptr);\n        ~DevicePane();\n\n    private:\n        Ui::DevicePane* ui;\n        DevicePanePrivate* d;\n\n        // AbstractDevicePane interface\n    public:\n        QListWidgetItem* leftPaneItem();\n    private slots:\n        void on_disconnectButton_clicked();\n        void on_titleLabel_backButtonClicked();\n\n        // QWidget interface\n    protected:\n        void changeEvent(QEvent* event);\n};\n\n#endif // DEVICEPANE_H\n"
  },
  {
    "path": "plugins/NetworkPlugin/statusCenter/devicePanes/devicepane.ui",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ui version=\"4.0\">\n <class>DevicePane</class>\n <widget class=\"QWidget\" name=\"DevicePane\">\n  <property name=\"geometry\">\n   <rect>\n    <x>0</x>\n    <y>0</y>\n    <width>400</width>\n    <height>300</height>\n   </rect>\n  </property>\n  <property name=\"windowTitle\">\n   <string notr=\"true\">Form</string>\n  </property>\n  <layout class=\"QVBoxLayout\" name=\"verticalLayout\">\n   <property name=\"spacing\">\n    <number>0</number>\n   </property>\n   <property name=\"leftMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"topMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"rightMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"bottomMargin\">\n    <number>0</number>\n   </property>\n   <item>\n    <widget class=\"tTitleLabel\" name=\"titleLabel\">\n     <property name=\"text\">\n      <string notr=\"true\">TextLabel</string>\n     </property>\n    </widget>\n   </item>\n   <item>\n    <widget class=\"QScrollArea\" name=\"scrollArea\">\n     <property name=\"frameShape\">\n      <enum>QFrame::NoFrame</enum>\n     </property>\n     <property name=\"widgetResizable\">\n      <bool>true</bool>\n     </property>\n     <widget class=\"QWidget\" name=\"scrollAreaWidgetContents\">\n      <property name=\"geometry\">\n       <rect>\n        <x>0</x>\n        <y>0</y>\n        <width>400</width>\n        <height>283</height>\n       </rect>\n      </property>\n      <layout class=\"QVBoxLayout\" name=\"verticalLayout_2\">\n       <property name=\"spacing\">\n        <number>0</number>\n       </property>\n       <property name=\"leftMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"topMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"rightMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"bottomMargin\">\n        <number>0</number>\n       </property>\n       <item alignment=\"Qt::AlignHCenter\">\n        <widget class=\"QWidget\" name=\"statusWidget\" native=\"true\">\n         <layout class=\"QVBoxLayout\" name=\"verticalLayout_4\">\n          <item>\n           <widget class=\"QLabel\" name=\"label_2\">\n            <property name=\"font\">\n             <font>\n              <bold>true</bold>\n             </font>\n            </property>\n            <property name=\"text\">\n             <string>STATUS</string>\n            </property>\n           </widget>\n          </item>\n          <item>\n           <widget class=\"QLabel\" name=\"label_3\">\n            <property name=\"text\">\n             <string>theDesk doesn't support this network interface, so you won't be able to configure it fully here.</string>\n            </property>\n            <property name=\"wordWrap\">\n             <bool>true</bool>\n            </property>\n           </widget>\n          </item>\n         </layout>\n        </widget>\n       </item>\n       <item>\n        <widget class=\"Line\" name=\"line\">\n         <property name=\"maximumSize\">\n          <size>\n           <width>16777215</width>\n           <height>1</height>\n          </size>\n         </property>\n         <property name=\"orientation\">\n          <enum>Qt::Horizontal</enum>\n         </property>\n        </widget>\n       </item>\n       <item alignment=\"Qt::AlignHCenter\">\n        <widget class=\"QWidget\" name=\"actionsWidget\" native=\"true\">\n         <layout class=\"QVBoxLayout\" name=\"verticalLayout_3\">\n          <property name=\"leftMargin\">\n           <number>0</number>\n          </property>\n          <property name=\"topMargin\">\n           <number>0</number>\n          </property>\n          <property name=\"rightMargin\">\n           <number>0</number>\n          </property>\n          <item>\n           <layout class=\"QHBoxLayout\" name=\"horizontalLayout\">\n            <property name=\"leftMargin\">\n             <number>9</number>\n            </property>\n            <property name=\"topMargin\">\n             <number>9</number>\n            </property>\n            <property name=\"rightMargin\">\n             <number>9</number>\n            </property>\n            <item>\n             <widget class=\"QLabel\" name=\"label\">\n              <property name=\"font\">\n               <font>\n                <bold>true</bold>\n               </font>\n              </property>\n              <property name=\"text\">\n               <string>ACTIONS</string>\n              </property>\n             </widget>\n            </item>\n           </layout>\n          </item>\n          <item>\n           <widget class=\"QPushButton\" name=\"disconnectButton\">\n            <property name=\"text\">\n             <string>Disconnect</string>\n            </property>\n            <property name=\"icon\">\n             <iconset theme=\"network-disconnect\">\n              <normaloff>.</normaloff>.</iconset>\n            </property>\n           </widget>\n          </item>\n         </layout>\n        </widget>\n       </item>\n       <item>\n        <spacer name=\"verticalSpacer\">\n         <property name=\"orientation\">\n          <enum>Qt::Vertical</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>20</width>\n           <height>138</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n      </layout>\n     </widget>\n    </widget>\n   </item>\n  </layout>\n </widget>\n <customwidgets>\n  <customwidget>\n   <class>tTitleLabel</class>\n   <extends>QLabel</extends>\n   <header location=\"global\">ttitlelabel.h</header>\n   <slots>\n    <signal>backButtonClicked()</signal>\n   </slots>\n  </customwidget>\n </customwidgets>\n <resources/>\n <connections/>\n</ui>\n"
  },
  {
    "path": "plugins/NetworkPlugin/statusCenter/devicePanes/wifidevicepane.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"wifidevicepane.h\"\n#include \"ui_wifidevicepane.h\"\n\n#include \"../popovers/tetheringsettingspopover.h\"\n#include \"../popovers/wirelessnetworkselectionpopover.h\"\n#include \"networkplugincommon.h\"\n#include \"switchmanager.h\"\n#include <QFontDatabase>\n#include <QHostInfo>\n#include <QRandomGenerator>\n#include <actionquickwidget.h>\n#include <barmanager.h>\n#include <hudmanager.h>\n#include <icontextchunk.h>\n#include <qrencode.h>\n#include <statemanager.h>\n#include <statuscentermanager.h>\n#include <tpopover.h>\n#include <tsettings.h>\n#include <ttoast.h>\n\n#include <NetworkManagerQt/Ipv4Setting>\n#include <NetworkManagerQt/Ipv6Setting>\n#include <NetworkManagerQt/Manager>\n#include <NetworkManagerQt/Settings>\n#include <NetworkManagerQt/WirelessDevice>\n#include <NetworkManagerQt/WirelessSecuritySetting>\n#include <NetworkManagerQt/WirelessSetting>\n\nstruct WifiDevicePanePrivate {\n        QListWidgetItem* item;\n        NetworkManager::WirelessDevice::Ptr device;\n\n        IconTextChunk* tetheringChunk;\n\n        SwitchManager* switchManager = nullptr;\n\n        tSettings settings;\n};\n\nWifiDevicePane::WifiDevicePane(QString uni, QWidget* parent) :\n    AbstractDevicePane(parent),\n    ui(new Ui::WifiDevicePane) {\n    ui->setupUi(this);\n\n    ui->titleLabel->setBackButtonIsMenu(true);\n    ui->titleLabel->setBackButtonShown(StateManager::instance()->statusCenterManager()->isHamburgerMenuRequired());\n    connect(StateManager::instance()->statusCenterManager(), &StatusCenterManager::isHamburgerMenuRequiredChanged, ui->titleLabel, &tTitleLabel::setBackButtonShown);\n\n    const int contentWidth = StateManager::instance()->statusCenterManager()->preferredContentWidth();\n    ui->actionsWidget->setFixedWidth(contentWidth);\n    ui->statusWidget->setFixedWidth(contentWidth);\n    ui->tetheringWidget->setFixedWidth(contentWidth);\n    ui->stackedWidget->setCurrentAnimation(tStackedWidget::Fade);\n    ui->wifiOffIcon->setPixmap(QIcon::fromTheme(\"network-wireless-disconnected\").pixmap(SC_DPI_T(QSize(128, 128), QSize)));\n    ui->wifiBlockedIcon->setPixmap(QIcon::fromTheme(\"network-wireless-disconnected\").pixmap(SC_DPI_T(QSize(128, 128), QSize)));\n    ui->wifiFlightIcon->setPixmap(QIcon::fromTheme(\"flight-mode\").pixmap(SC_DPI_T(QSize(128, 128), QSize)));\n\n    ui->disconnectButton->setProperty(\"type\", \"destructive\");\n    ui->errorFrame->setVisible(false);\n    ui->tetheringKey->setFont(QFontDatabase::systemFont(QFontDatabase::FixedFont));\n\n    d = new WifiDevicePanePrivate();\n    d->item = new QListWidgetItem();\n    d->device = NetworkManager::findNetworkInterface(uni).staticCast<NetworkManager::WirelessDevice>();\n\n    d->tetheringChunk = new IconTextChunk(\"network-tethering\");\n    d->tetheringChunk->setIcon(QIcon::fromTheme(\"network-wireless-tethered\"));\n    d->tetheringChunk->setText(tr(\"Tethering\"));\n\n    ActionQuickWidget* tetheringQuickWidget = new ActionQuickWidget(d->tetheringChunk);\n    tetheringQuickWidget->addAction(QIcon::fromTheme(\"network-wireless-tethered\"), tr(\"Disable Tethering\"), [=] {\n        ui->tetheringSwitch->setChecked(false);\n    });\n    d->tetheringChunk->setQuickWidget(tetheringQuickWidget);\n\n    connect(d->device.data(), &NetworkManager::WirelessDevice::activeConnectionChanged, this, &WifiDevicePane::updateNetworkName);\n    connect(d->device.data(), &NetworkManager::WirelessDevice::activeAccessPointChanged, this, &WifiDevicePane::updateNetworkName);\n    updateNetworkName();\n\n    connect(d->device.data(), &NetworkManager::WirelessDevice::stateChanged, this, &WifiDevicePane::updateState);\n    connect(d->device.data(), &NetworkManager::WirelessDevice::activeAccessPointChanged, this, &WifiDevicePane::updateState);\n    connect(d->device.data(), &NetworkManager::WirelessDevice::wirelessCapabilitiesChanged, this, &WifiDevicePane::updateState);\n    updateState();\n\n    connect(&d->settings, &tSettings::settingChanged, this, [=](QString key, QVariant value) {\n        if (key.startsWith(\"NetworkPlugin/tethering\")) {\n            updateState();\n        }\n    });\n    updateState();\n\n    connect(d->device.data(), &NetworkManager::WirelessDevice::stateChanged, this, [=](NetworkManager::Device::State newState, NetworkManager::Device::State oldState, NetworkManager::Device::StateChangeReason reason) {\n        if (d->settings.value(\"NetworkPlugin/notifications.activation\").toBool()) {\n            switch (newState) {\n                case NetworkManager::Device::Disconnected:\n                    if (oldState != NetworkManager::Device::Failed) StateManager::hudManager()->showHud({\n                        {\"icon\",  \"network-wireless-disconnected\"},\n                        {\"title\", tr(\"Wi-Fi\")                    },\n                        {\"text\",  tr(\"Disconnected\")             }\n });\n                    break;\n                case NetworkManager::Device::Activated:\n                    {\n                        QString title;\n                        QString text;\n                        QString connUuid = d->settings.value(\"NetworkPlugin/tethering.uuid\").toString();\n\n                        if (d->device->activeConnection()->uuid() == connUuid) {\n                            StateManager::hudManager()->showHud({\n                                {\"icon\",  \"network-wireless-tethered\"},\n                                {\"title\", tr(\"Tethering\")            },\n                                {\"text\",  tr(\"Active\")               }\n                            });\n                        } else if (d->device->activeAccessPoint()) {\n                            StateManager::hudManager()->showHud({\n                                {\"icon\",  \"network-wireless-connected-100\"      },\n                                {\"title\", d->device->activeAccessPoint()->ssid()},\n                                {\"text\",  tr(\"Connected\")                       }\n                            });\n                        } else {\n                            StateManager::hudManager()->showHud({\n                                {\"icon\",  \"network-wireless-connected-100\"},\n                                {\"title\", tr(\"Wi-Fi\")                     },\n                                {\"text\",  tr(\"Connected\")                 }\n                            });\n                        }\n\n                        break;\n                    }\n                case NetworkManager::Device::Failed:\n                    StateManager::hudManager()->showHud({\n                        {\"icon\",  \"network-wireless-disconnected\"},\n                        {\"title\", tr(\"Wi-Fi\")                    },\n                        {\"text\",  tr(\"Failed\")                   }\n                    });\n                    break;\n                default:\n                    break;\n            }\n        }\n\n        if (newState == NetworkManager::Device::Failed) {\n            d->device->setAutoconnect(false);\n            ui->errorFrame->setTitle(tr(\"Connection Failure\"));\n\n            QString reasonText = tr(\"Connecting to %1 failed because %2.\");\n            if (d->device->activeAccessPoint()) {\n                reasonText = reasonText.arg(d->device->activeAccessPoint()->ssid());\n            } else {\n                reasonText = reasonText.arg(tr(\"the network\"));\n            }\n            reasonText = reasonText.arg(NetworkPluginCommon::stateChangeReasonToString(reason));\n            ui->errorFrame->setText(reasonText);\n            ui->errorFrame->setState(tStatusFrame::Error);\n            ui->errorFrame->setVisible(true);\n        } else if (oldState != NetworkManager::Device::Failed) {\n            ui->errorFrame->setVisible(false);\n        }\n    });\n\n    connect(NetworkManager::notifier(), &NetworkManager::Notifier::wirelessEnabledChanged, this, &WifiDevicePane::updateNetworkCardState);\n    connect(NetworkManager::notifier(), &NetworkManager::Notifier::wirelessHardwareEnabledChanged, this, &WifiDevicePane::updateNetworkCardState);\n    updateNetworkCardState();\n}\n\nWifiDevicePane::~WifiDevicePane() {\n    delete d->item;\n    d->tetheringChunk->deleteLater();\n    delete d;\n    delete ui;\n}\n\nvoid WifiDevicePane::setSwitchManager(SwitchManager* switchManager) {\n    d->switchManager = switchManager;\n}\n\nvoid WifiDevicePane::updateNetworkName() {\n    if (d->device->isActive() && d->device->activeAccessPoint()) {\n        d->item->setText(d->device->activeAccessPoint()->ssid());\n        ui->titleLabel->setText(d->device->activeAccessPoint()->ssid());\n    } else {\n        d->item->setText(tr(\"Wi-Fi\"));\n        ui->titleLabel->setText(tr(\"Wi-Fi\"));\n    }\n}\n\nvoid WifiDevicePane::updateState() {\n    ui->deviceIcon->setPixmap(QIcon::fromTheme(\"computer\").pixmap(SC_DPI_T(QSize(96, 96), QSize)));\n    switch (d->device->mode()) {\n        case NetworkManager::WirelessDevice::Adhoc:\n        case NetworkManager::WirelessDevice::ApMode:\n            ui->routerIcon->setPixmap(QIcon::fromTheme(\"computer\").pixmap(SC_DPI_T(QSize(96, 96), QSize)));\n            break;\n        case NetworkManager::WirelessDevice::Unknown:\n        case NetworkManager::WirelessDevice::Infra:\n            ui->routerIcon->setPixmap(QIcon::fromTheme(\"network-wireless-connected-100\").pixmap(SC_DPI_T(QSize(96, 96), QSize)));\n            break;\n    }\n\n    bool setRouterName = false;\n\n    switch (d->device->state()) {\n        case NetworkManager::Device::UnknownState:\n        case NetworkManager::Device::Unmanaged:\n        case NetworkManager::Device::Unavailable:\n        case NetworkManager::Device::Disconnected:\n            ui->stateConnecting->setVisible(false);\n            ui->stateIcon->setVisible(true);\n            ui->stateIcon->setPixmap(QIcon::fromTheme(\"dialog-cancel\").pixmap(SC_DPI_T(QSize(32, 32), QSize)));\n            ui->routerName->setText(tr(\"Disconnected\"));\n            ui->leftStateLine->setEnabled(false);\n            ui->rightStateLine->setEnabled(false);\n            ui->disconnectButton->setVisible(false);\n            break;\n        case NetworkManager::Device::Failed:\n            ui->stateConnecting->setVisible(false);\n            ui->stateIcon->setVisible(true);\n            ui->stateIcon->setPixmap(QIcon::fromTheme(\"dialog-cancel\").pixmap(SC_DPI_T(QSize(32, 32), QSize)));\n            ui->routerName->setText(tr(\"Failed\"));\n            ui->leftStateLine->setEnabled(false);\n            ui->rightStateLine->setEnabled(false);\n            ui->disconnectButton->setVisible(false);\n            break;\n        case NetworkManager::Device::Preparing:\n        case NetworkManager::Device::ConfiguringHardware:\n        case NetworkManager::Device::NeedAuth:\n        case NetworkManager::Device::ConfiguringIp:\n        case NetworkManager::Device::CheckingIp:\n        case NetworkManager::Device::WaitingForSecondaries:\n        case NetworkManager::Device::Deactivating:\n            ui->stateConnecting->setVisible(true);\n            ui->stateIcon->setVisible(false);\n            setRouterName = true;\n            ui->leftStateLine->setEnabled(true);\n            ui->rightStateLine->setEnabled(false);\n            ui->disconnectButton->setVisible(true);\n            break;\n        case NetworkManager::Device::Activated:\n            ui->stateConnecting->setVisible(false);\n            ui->stateIcon->setVisible(true);\n            ui->stateIcon->setPixmap(QIcon::fromTheme(\"dialog-ok\").pixmap(SC_DPI_T(QSize(32, 32), QSize)));\n            setRouterName = true;\n            ui->leftStateLine->setEnabled(true);\n            ui->rightStateLine->setEnabled(true);\n            ui->disconnectButton->setVisible(true);\n            break;\n    }\n\n    if (setRouterName) {\n        QString routerName;\n        switch (d->device->mode()) {\n            case NetworkManager::WirelessDevice::ApMode:\n                routerName = tr(\"0 Devices\");\n                break;\n            case NetworkManager::WirelessDevice::Infra:\n                if (d->device->activeAccessPoint()) {\n                    routerName = d->device->activeAccessPoint()->ssid();\n                    break;\n                }\n                Q_FALLTHROUGH();\n            default:\n                routerName = tr(\"Unknown\");\n        }\n\n        ui->routerName->setText(routerName);\n    }\n\n    if (d->device->wirelessCapabilities() & NetworkManager::WirelessDevice::ApCap || d->device->wirelessCapabilities() & NetworkManager::WirelessDevice::AdhocCap) {\n        ui->tetheringWidget->setVisible(true);\n        ui->tetheringLine->setVisible(true);\n\n        QString ssid = d->settings.value(\"NetworkPlugin/tethering.ssid\").toString();\n        ssid = ssid.replace(\"$hostname\", QHostInfo::localHostName());\n        ui->tetheringSsid->setText(ssid);\n\n        QString key = d->settings.value(\"NetworkPlugin/tethering.key\").toString();\n        if (key == \".\") {\n            QString validChars = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890!@#$%^&*()\";\n            QRandomGenerator* random = QRandomGenerator::global();\n            key.clear();\n            while (key.length() < 10) {\n                key.append(validChars.at(random->bounded(validChars.length())));\n            }\n            d->settings.setValue(\"NetworkPlugin/tethering.key\", key);\n        }\n        ui->tetheringKey->setText(key);\n\n        bool tetheringOn = false;\n        QSignalBlocker blocker(ui->tetheringSwitch);\n        QString connUuid = d->settings.value(\"NetworkPlugin/tethering.uuid\").toString();\n        for (NetworkManager::ActiveConnection::Ptr connection : NetworkManager::activeConnections()) {\n            if (connection->connection()->uuid() == connUuid) {\n                tetheringOn = true;\n            }\n        }\n\n        QString qrString = QStringLiteral(\"WIFI:T:WPA;S:%1;P:%2;;\").arg(ssid, key.replace(\":\", \"\\\\:\"));\n        QRcode* qrc = QRcode_encodeString(qrString.toUtf8().data(), 0, QR_ECLEVEL_M, QR_MODE_8, 1);\n\n        QPixmap qrcode(ui->tetheringWidget->width() / 2, ui->tetheringWidget->width() / 2);\n        qrcode.fill(Qt::white);\n\n        int margin = ui->tetheringWidget->width() / 20;\n\n        QPainter qrcodePainter(&qrcode);\n        qrcodePainter.setWindow(QRect(0, 0, qrc->width, qrc->width));\n        qrcodePainter.setViewport(QRect(margin, margin, qrcode.width() - margin * 2, qrcode.width() - margin * 2));\n        for (int y = 0; y < qrc->width; y++) {\n            for (int x = 0; x < qrc->width; x++) {\n                if (qrc->data[qrc->width * y + x] & 1) qrcodePainter.fillRect(x, y, 1, 1, Qt::black);\n            }\n        }\n        qrcodePainter.end();\n        ui->tetheringQrCodeLabel->setPixmap(qrcode);\n\n        QRcode_free(qrc);\n\n        ui->tetheringSwitch->setChecked(tetheringOn);\n        ui->tetheringSettings->setVisible(!tetheringOn);\n        ui->actionsWidget->setVisible(!tetheringOn);\n        ui->actionsLine->setVisible(!tetheringOn);\n        ui->tetheringQrCodeLabel->setVisible(tetheringOn);\n\n        if (tetheringOn && !StateManager::barManager()->isChunkRegistered(d->tetheringChunk)) {\n            StateManager::barManager()->addChunk(d->tetheringChunk);\n        } else if (!tetheringOn && StateManager::barManager()->isChunkRegistered(d->tetheringChunk)) {\n            StateManager::barManager()->removeChunk(d->tetheringChunk);\n        }\n    } else {\n        ui->tetheringWidget->setVisible(false);\n        ui->tetheringLine->setVisible(false);\n        ui->actionsWidget->setVisible(true);\n        ui->actionsLine->setVisible(true);\n        if (StateManager::barManager()->isChunkRegistered(d->tetheringChunk)) d->tetheringChunk->setVisible(false);\n    }\n}\n\nvoid WifiDevicePane::updateNetworkCardState() {\n    if (!NetworkManager::isWirelessHardwareEnabled()) {\n        ui->stackedWidget->setCurrentWidget(ui->wifiBlockedPage);\n    } else if (!NetworkManager::isWirelessEnabled()) {\n        if (d->switchManager && d->switchManager->isFlightModeEnabled()) {\n            ui->stackedWidget->setCurrentWidget(ui->wifiFlightPage);\n        } else {\n            ui->stackedWidget->setCurrentWidget(ui->wifiOffPage);\n        }\n    } else {\n        ui->stackedWidget->setCurrentWidget(ui->mainPage);\n    }\n}\n\nQListWidgetItem* WifiDevicePane::leftPaneItem() {\n    return d->item;\n}\n\nvoid WifiDevicePane::on_disconnectButton_clicked() {\n    d->device->disconnectInterface();\n}\n\nvoid WifiDevicePane::on_selectNetworkButton_clicked() {\n    WirelessNetworkSelectionPopover* selection = new WirelessNetworkSelectionPopover(d->device->uni());\n    tPopover* popover = new tPopover(selection);\n    popover->setPopoverWidth(SC_DPI(600));\n    connect(selection, &WirelessNetworkSelectionPopover::done, popover, &tPopover::dismiss);\n    connect(popover, &tPopover::dismissed, popover, &tPopover::deleteLater);\n    connect(popover, &tPopover::dismissed, selection, &WirelessNetworkSelectionPopover::deleteLater);\n    popover->show(this->window());\n}\n\nvoid WifiDevicePane::on_titleLabel_backButtonClicked() {\n    StateManager::statusCenterManager()->showStatusCenterHamburgerMenu();\n}\n\nvoid WifiDevicePane::on_tetheringSwitch_toggled(bool checked) {\n    if (checked) {\n        NetworkManager::ConnectionSettings::Ptr settings(new NetworkManager::ConnectionSettings(NetworkManager::ConnectionSettings::Wireless));\n        settings->setId(\"Tethering\");\n        settings->setAutoconnect(false);\n        settings->setInterfaceName(d->device->interfaceName());\n\n        NetworkManager::WirelessSetting::Ptr wirelessSettings = settings->setting(NetworkManager::Setting::Wireless).staticCast<NetworkManager::WirelessSetting>();\n        NetworkManager::WirelessSecuritySetting::Ptr wirelessSecuritySettings = settings->setting(NetworkManager::Setting::WirelessSecurity).staticCast<NetworkManager::WirelessSecuritySetting>();\n        NetworkManager::Ipv4Setting::Ptr ipv4 = settings->setting(NetworkManager::Setting::Ipv4).staticCast<NetworkManager::Ipv4Setting>();\n        NetworkManager::Ipv6Setting::Ptr ipv6 = settings->setting(NetworkManager::Setting::Ipv6).staticCast<NetworkManager::Ipv6Setting>();\n\n        QString ssid = d->settings.value(\"NetworkPlugin/tethering.ssid\").toString();\n        ssid = ssid.replace(\"$hostname\", QHostInfo::localHostName());\n        wirelessSettings->setSsid(ssid.toUtf8());\n        wirelessSettings->setSecurity(\"802-11-wireless-security\");\n\n        if (d->device->wirelessCapabilities() & NetworkManager::WirelessDevice::ApCap) {\n            wirelessSettings->setMode(NetworkManager::WirelessSetting::Ap);\n        } else {\n            wirelessSettings->setMode(NetworkManager::WirelessSetting::Adhoc);\n        }\n        wirelessSettings->setInitialized(true);\n\n        wirelessSecuritySettings->setKeyMgmt(NetworkManager::WirelessSecuritySetting::WpaPsk);\n        wirelessSecuritySettings->setGroup({NetworkManager::WirelessSecuritySetting::Ccmp});\n        wirelessSecuritySettings->setPairwise({NetworkManager::WirelessSecuritySetting::Ccmp});\n        wirelessSecuritySettings->setProto({NetworkManager::WirelessSecuritySetting::Rsn});\n        wirelessSecuritySettings->setPsk(d->settings.value(\"NetworkPlugin/tethering.key\").toString());\n        wirelessSecuritySettings->setInitialized(true);\n\n        ipv4->setMethod(NetworkManager::Ipv4Setting::Shared);\n        ipv4->setInitialized(true);\n        ipv6->setMethod(NetworkManager::Ipv6Setting::Ignored);\n        ipv6->setInitialized(true);\n\n        QString connUuid = d->settings.value(\"NetworkPlugin/tethering.uuid\").toString();\n        NetworkManager::Connection::Ptr connection;\n        if (connUuid == \".\") {\n            connUuid = NetworkManager::ConnectionSettings::createNewUuid();\n            d->settings.setValue(\"NetworkPlugin/tethering.uuid\", connUuid);\n        } else {\n            for (NetworkManager::Connection::Ptr checkConnection : NetworkManager::listConnections()) {\n                if (checkConnection->uuid() == connUuid) connection = checkConnection;\n            }\n        }\n\n        settings->setUuid(connUuid);\n\n        QDBusPendingCallWatcher* watcher;\n        if (!connection) {\n            watcher = new QDBusPendingCallWatcher(NetworkManager::addConnectionUnsaved(settings->toMap()));\n        } else {\n            watcher = new QDBusPendingCallWatcher(connection->updateUnsaved(settings->toMap()));\n        }\n        connect(watcher, &QDBusPendingCallWatcher::finished, this, [=] {\n            if (watcher->isError()) {\n                tToast* toast = new tToast();\n                toast->setTitle(tr(\"Couldn't configure tethering\"));\n                toast->setText(watcher->error().message());\n                connect(toast, &tToast::dismissed, toast, &tToast::deleteLater);\n                toast->show(this);\n\n                updateState();\n            } else {\n                QString connectionPath;\n                if (connection) {\n                    connectionPath = connection->path();\n                } else {\n                    connectionPath = watcher->reply().arguments().first().value<QDBusObjectPath>().path();\n                }\n\n                NetworkManager::activateConnection(connectionPath, d->device->uni(), \"\");\n            }\n            watcher->deleteLater();\n        });\n    } else {\n        QString connUuid = d->settings.value(\"NetworkPlugin/tethering.uuid\").toString();\n        for (NetworkManager::ActiveConnection::Ptr connection : NetworkManager::activeConnections()) {\n            if (connection->connection()->uuid() == connUuid) {\n                QDBusPendingCallWatcher* watcher = new QDBusPendingCallWatcher(connection->connection()->remove());\n                connect(watcher, &QDBusPendingCallWatcher::finished, this, [=] {\n                    if (watcher->isError()) {\n                        tToast* toast = new tToast();\n                        toast->setTitle(tr(\"Couldn't switch off tethering\"));\n                        toast->setText(watcher->error().message());\n                        connect(toast, &tToast::dismissed, toast, &tToast::deleteLater);\n                        toast->show(this);\n                    }\n                    updateState();\n                    watcher->deleteLater();\n                });\n            }\n        }\n    }\n}\n\nvoid WifiDevicePane::on_turnWifiOnButton_clicked() {\n    NetworkManager::setWirelessEnabled(true);\n}\n\nvoid WifiDevicePane::on_turnWifiOnButton_2_clicked() {\n    NetworkManager::setWirelessEnabled(true);\n}\n\nvoid WifiDevicePane::on_tetheringSettings_clicked() {\n    TetheringSettingsPopover* tetheringSettings = new TetheringSettingsPopover();\n    tPopover* popover = new tPopover(tetheringSettings);\n    popover->setPopoverWidth(SC_DPI(600));\n    connect(tetheringSettings, &TetheringSettingsPopover::done, popover, &tPopover::dismiss);\n    connect(popover, &tPopover::dismissed, popover, &tPopover::deleteLater);\n    connect(popover, &tPopover::dismissed, tetheringSettings, &TetheringSettingsPopover::deleteLater);\n    popover->show(this->window());\n}\n\nvoid WifiDevicePane::changeEvent(QEvent* event) {\n    if (event->type() == QEvent::LanguageChange) {\n        ui->retranslateUi(this);\n    }\n}\n"
  },
  {
    "path": "plugins/NetworkPlugin/statusCenter/devicePanes/wifidevicepane.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef WIFIDEVICEPANE_H\n#define WIFIDEVICEPANE_H\n\n#include \"abstractdevicepane.h\"\n\nnamespace Ui {\n    class WifiDevicePane;\n}\n\nclass SwitchManager;\nstruct WifiDevicePanePrivate;\nclass WifiDevicePane : public AbstractDevicePane {\n        Q_OBJECT\n\n    public:\n        explicit WifiDevicePane(QString uni, QWidget* parent = nullptr);\n        ~WifiDevicePane();\n\n        void setSwitchManager(SwitchManager* switchManager);\n\n    private:\n        Ui::WifiDevicePane* ui;\n        WifiDevicePanePrivate* d;\n\n        void updateNetworkName();\n        void updateState();\n        void updateNetworkCardState();\n\n        // AbstractDevicePane interface\n    public:\n        QListWidgetItem* leftPaneItem();\n\n    private slots:\n        void on_disconnectButton_clicked();\n        void on_selectNetworkButton_clicked();\n        void on_titleLabel_backButtonClicked();\n        void on_tetheringSwitch_toggled(bool checked);\n        void on_turnWifiOnButton_clicked();\n        void on_turnWifiOnButton_2_clicked();\n        void on_tetheringSettings_clicked();\n\n        // QWidget interface\n    protected:\n        void changeEvent(QEvent* event);\n};\n\n#endif // WIFIDEVICEPANE_H\n"
  },
  {
    "path": "plugins/NetworkPlugin/statusCenter/devicePanes/wifidevicepane.ui",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ui version=\"4.0\">\n <class>WifiDevicePane</class>\n <widget class=\"QWidget\" name=\"WifiDevicePane\">\n  <property name=\"geometry\">\n   <rect>\n    <x>0</x>\n    <y>0</y>\n    <width>730</width>\n    <height>597</height>\n   </rect>\n  </property>\n  <property name=\"windowTitle\">\n   <string notr=\"true\">Form</string>\n  </property>\n  <layout class=\"QVBoxLayout\" name=\"verticalLayout\">\n   <property name=\"spacing\">\n    <number>0</number>\n   </property>\n   <property name=\"leftMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"topMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"rightMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"bottomMargin\">\n    <number>0</number>\n   </property>\n   <item>\n    <widget class=\"tTitleLabel\" name=\"titleLabel\">\n     <property name=\"text\">\n      <string notr=\"true\">TextLabel</string>\n     </property>\n    </widget>\n   </item>\n   <item>\n    <widget class=\"tStackedWidget\" name=\"stackedWidget\">\n     <property name=\"currentIndex\">\n      <number>0</number>\n     </property>\n     <widget class=\"QWidget\" name=\"mainPage\">\n      <layout class=\"QVBoxLayout\" name=\"verticalLayout_8\">\n       <property name=\"spacing\">\n        <number>0</number>\n       </property>\n       <property name=\"leftMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"topMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"rightMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"bottomMargin\">\n        <number>0</number>\n       </property>\n       <item>\n        <widget class=\"QScrollArea\" name=\"scrollArea\">\n         <property name=\"frameShape\">\n          <enum>QFrame::NoFrame</enum>\n         </property>\n         <property name=\"widgetResizable\">\n          <bool>true</bool>\n         </property>\n         <widget class=\"QWidget\" name=\"scrollAreaWidgetContents\">\n          <property name=\"geometry\">\n           <rect>\n            <x>0</x>\n            <y>0</y>\n            <width>730</width>\n            <height>580</height>\n           </rect>\n          </property>\n          <layout class=\"QVBoxLayout\" name=\"verticalLayout_2\">\n           <property name=\"spacing\">\n            <number>0</number>\n           </property>\n           <property name=\"leftMargin\">\n            <number>0</number>\n           </property>\n           <property name=\"topMargin\">\n            <number>0</number>\n           </property>\n           <property name=\"rightMargin\">\n            <number>0</number>\n           </property>\n           <property name=\"bottomMargin\">\n            <number>0</number>\n           </property>\n           <item alignment=\"Qt::AlignHCenter\">\n            <widget class=\"QWidget\" name=\"statusWidget\" native=\"true\">\n             <layout class=\"QVBoxLayout\" name=\"verticalLayout_4\">\n              <item>\n               <widget class=\"QLabel\" name=\"label_2\">\n                <property name=\"font\">\n                 <font>\n                  <weight>75</weight>\n                  <bold>true</bold>\n                 </font>\n                </property>\n                <property name=\"text\">\n                 <string>STATUS</string>\n                </property>\n               </widget>\n              </item>\n              <item>\n               <layout class=\"QHBoxLayout\" name=\"horizontalLayout_2\">\n                <item>\n                 <layout class=\"QVBoxLayout\" name=\"verticalLayout_5\">\n                  <item>\n                   <widget class=\"QLabel\" name=\"deviceIcon\">\n                    <property name=\"text\">\n                     <string notr=\"true\">TextLabel</string>\n                    </property>\n                   </widget>\n                  </item>\n                  <item>\n                   <widget class=\"QLabel\" name=\"label_3\">\n                    <property name=\"text\">\n                     <string>This Device</string>\n                    </property>\n                    <property name=\"alignment\">\n                     <set>Qt::AlignCenter</set>\n                    </property>\n                   </widget>\n                  </item>\n                 </layout>\n                </item>\n                <item>\n                 <widget class=\"Line\" name=\"leftStateLine\">\n                  <property name=\"sizePolicy\">\n                   <sizepolicy hsizetype=\"Expanding\" vsizetype=\"Fixed\">\n                    <horstretch>0</horstretch>\n                    <verstretch>0</verstretch>\n                   </sizepolicy>\n                  </property>\n                  <property name=\"maximumSize\">\n                   <size>\n                    <width>16777215</width>\n                    <height>1</height>\n                   </size>\n                  </property>\n                  <property name=\"orientation\">\n                   <enum>Qt::Horizontal</enum>\n                  </property>\n                 </widget>\n                </item>\n                <item>\n                 <widget class=\"tCircularSpinner\" name=\"stateConnecting\" native=\"true\"/>\n                </item>\n                <item>\n                 <widget class=\"QLabel\" name=\"stateIcon\">\n                  <property name=\"text\">\n                   <string notr=\"true\">TextLabel</string>\n                  </property>\n                 </widget>\n                </item>\n                <item>\n                 <widget class=\"Line\" name=\"rightStateLine\">\n                  <property name=\"sizePolicy\">\n                   <sizepolicy hsizetype=\"Expanding\" vsizetype=\"Fixed\">\n                    <horstretch>0</horstretch>\n                    <verstretch>0</verstretch>\n                   </sizepolicy>\n                  </property>\n                  <property name=\"maximumSize\">\n                   <size>\n                    <width>16777215</width>\n                    <height>1</height>\n                   </size>\n                  </property>\n                  <property name=\"orientation\">\n                   <enum>Qt::Horizontal</enum>\n                  </property>\n                 </widget>\n                </item>\n                <item>\n                 <layout class=\"QVBoxLayout\" name=\"verticalLayout_6\">\n                  <item>\n                   <widget class=\"QLabel\" name=\"routerIcon\">\n                    <property name=\"text\">\n                     <string notr=\"true\">TextLabel</string>\n                    </property>\n                   </widget>\n                  </item>\n                  <item>\n                   <widget class=\"QLabel\" name=\"routerName\">\n                    <property name=\"text\">\n                     <string notr=\"true\">TextLabel</string>\n                    </property>\n                    <property name=\"alignment\">\n                     <set>Qt::AlignCenter</set>\n                    </property>\n                   </widget>\n                  </item>\n                 </layout>\n                </item>\n               </layout>\n              </item>\n              <item>\n               <widget class=\"tStatusFrame\" name=\"errorFrame\">\n                <property name=\"frameShape\">\n                 <enum>QFrame::StyledPanel</enum>\n                </property>\n                <property name=\"frameShadow\">\n                 <enum>QFrame::Raised</enum>\n                </property>\n               </widget>\n              </item>\n             </layout>\n            </widget>\n           </item>\n           <item>\n            <widget class=\"Line\" name=\"actionsLine\">\n             <property name=\"maximumSize\">\n              <size>\n               <width>16777215</width>\n               <height>1</height>\n              </size>\n             </property>\n             <property name=\"orientation\">\n              <enum>Qt::Horizontal</enum>\n             </property>\n            </widget>\n           </item>\n           <item alignment=\"Qt::AlignHCenter\">\n            <widget class=\"QWidget\" name=\"actionsWidget\" native=\"true\">\n             <layout class=\"QVBoxLayout\" name=\"verticalLayout_3\">\n              <property name=\"spacing\">\n               <number>0</number>\n              </property>\n              <property name=\"leftMargin\">\n               <number>0</number>\n              </property>\n              <property name=\"topMargin\">\n               <number>0</number>\n              </property>\n              <property name=\"rightMargin\">\n               <number>0</number>\n              </property>\n              <item>\n               <layout class=\"QHBoxLayout\" name=\"horizontalLayout\">\n                <property name=\"leftMargin\">\n                 <number>9</number>\n                </property>\n                <property name=\"topMargin\">\n                 <number>9</number>\n                </property>\n                <property name=\"rightMargin\">\n                 <number>9</number>\n                </property>\n                <property name=\"bottomMargin\">\n                 <number>6</number>\n                </property>\n                <item>\n                 <widget class=\"QLabel\" name=\"label\">\n                  <property name=\"font\">\n                   <font>\n                    <weight>75</weight>\n                    <bold>true</bold>\n                   </font>\n                  </property>\n                  <property name=\"text\">\n                   <string>ACTIONS</string>\n                  </property>\n                 </widget>\n                </item>\n               </layout>\n              </item>\n              <item>\n               <widget class=\"QPushButton\" name=\"selectNetworkButton\">\n                <property name=\"text\">\n                 <string>Select Network</string>\n                </property>\n               </widget>\n              </item>\n              <item>\n               <widget class=\"QPushButton\" name=\"disconnectButton\">\n                <property name=\"text\">\n                 <string>Disconnect</string>\n                </property>\n               </widget>\n              </item>\n             </layout>\n            </widget>\n           </item>\n           <item>\n            <widget class=\"Line\" name=\"tetheringLine\">\n             <property name=\"maximumSize\">\n              <size>\n               <width>16777215</width>\n               <height>1</height>\n              </size>\n             </property>\n             <property name=\"orientation\">\n              <enum>Qt::Horizontal</enum>\n             </property>\n            </widget>\n           </item>\n           <item alignment=\"Qt::AlignHCenter\">\n            <widget class=\"QWidget\" name=\"tetheringWidget\" native=\"true\">\n             <layout class=\"QVBoxLayout\" name=\"verticalLayout_7\">\n              <property name=\"spacing\">\n               <number>0</number>\n              </property>\n              <property name=\"leftMargin\">\n               <number>0</number>\n              </property>\n              <property name=\"topMargin\">\n               <number>0</number>\n              </property>\n              <property name=\"rightMargin\">\n               <number>0</number>\n              </property>\n              <property name=\"bottomMargin\">\n               <number>0</number>\n              </property>\n              <item>\n               <layout class=\"QGridLayout\" name=\"gridLayout\">\n                <property name=\"leftMargin\">\n                 <number>9</number>\n                </property>\n                <property name=\"topMargin\">\n                 <number>9</number>\n                </property>\n                <property name=\"rightMargin\">\n                 <number>9</number>\n                </property>\n                <property name=\"bottomMargin\">\n                 <number>6</number>\n                </property>\n                <property name=\"spacing\">\n                 <number>6</number>\n                </property>\n                <item row=\"0\" column=\"0\" colspan=\"2\">\n                 <widget class=\"QLabel\" name=\"label_4\">\n                  <property name=\"font\">\n                   <font>\n                    <weight>75</weight>\n                    <bold>true</bold>\n                   </font>\n                  </property>\n                  <property name=\"text\">\n                   <string>TETHERING</string>\n                  </property>\n                 </widget>\n                </item>\n                <item row=\"4\" column=\"0\">\n                 <widget class=\"QLabel\" name=\"label_7\">\n                  <property name=\"text\">\n                   <string>Network Key</string>\n                  </property>\n                 </widget>\n                </item>\n                <item row=\"3\" column=\"1\">\n                 <widget class=\"QLabel\" name=\"tetheringSsid\">\n                  <property name=\"sizePolicy\">\n                   <sizepolicy hsizetype=\"Expanding\" vsizetype=\"Preferred\">\n                    <horstretch>0</horstretch>\n                    <verstretch>0</verstretch>\n                   </sizepolicy>\n                  </property>\n                  <property name=\"text\">\n                   <string notr=\"true\">TextLabel</string>\n                  </property>\n                 </widget>\n                </item>\n                <item row=\"1\" column=\"0\" colspan=\"2\">\n                 <widget class=\"QLabel\" name=\"label_8\">\n                  <property name=\"text\">\n                   <string>Use Tethering to share your internet connection with other devices over Wi-Fi.\n\n**While Tethering is active, you won't be able to connect to the Internet with Wi-Fi, so you'll need to make sure you have an alternate way to connect to the Internet.**</string>\n                  </property>\n                  <property name=\"textFormat\">\n                   <enum>Qt::MarkdownText</enum>\n                  </property>\n                  <property name=\"wordWrap\">\n                   <bool>true</bool>\n                  </property>\n                 </widget>\n                </item>\n                <item row=\"2\" column=\"0\" colspan=\"2\">\n                 <layout class=\"QHBoxLayout\" name=\"horizontalLayout_3\">\n                  <item>\n                   <widget class=\"QLabel\" name=\"label_5\">\n                    <property name=\"sizePolicy\">\n                     <sizepolicy hsizetype=\"Expanding\" vsizetype=\"Preferred\">\n                      <horstretch>0</horstretch>\n                      <verstretch>0</verstretch>\n                     </sizepolicy>\n                    </property>\n                    <property name=\"text\">\n                     <string>Enable Tethering</string>\n                    </property>\n                   </widget>\n                  </item>\n                  <item>\n                   <widget class=\"tSwitch\" name=\"tetheringSwitch\">\n                    <property name=\"text\">\n                     <string notr=\"true\">TetheringSwitch</string>\n                    </property>\n                   </widget>\n                  </item>\n                 </layout>\n                </item>\n                <item row=\"3\" column=\"0\">\n                 <widget class=\"QLabel\" name=\"label_6\">\n                  <property name=\"text\">\n                   <string>SSID</string>\n                  </property>\n                 </widget>\n                </item>\n                <item row=\"4\" column=\"1\">\n                 <widget class=\"QLabel\" name=\"tetheringKey\">\n                  <property name=\"text\">\n                   <string notr=\"true\">TextLabel</string>\n                  </property>\n                 </widget>\n                </item>\n                <item row=\"5\" column=\"0\" colspan=\"2\">\n                 <widget class=\"QLabel\" name=\"tetheringQrCodeLabel\">\n                  <property name=\"text\">\n                   <string notr=\"true\"/>\n                  </property>\n                  <property name=\"alignment\">\n                   <set>Qt::AlignCenter</set>\n                  </property>\n                 </widget>\n                </item>\n               </layout>\n              </item>\n              <item>\n               <widget class=\"QPushButton\" name=\"tetheringSettings\">\n                <property name=\"text\">\n                 <string>Set Tethering Settings</string>\n                </property>\n               </widget>\n              </item>\n             </layout>\n            </widget>\n           </item>\n           <item>\n            <spacer name=\"verticalSpacer\">\n             <property name=\"orientation\">\n              <enum>Qt::Vertical</enum>\n             </property>\n             <property name=\"sizeHint\" stdset=\"0\">\n              <size>\n               <width>20</width>\n               <height>138</height>\n              </size>\n             </property>\n            </spacer>\n           </item>\n          </layout>\n         </widget>\n        </widget>\n       </item>\n      </layout>\n     </widget>\n     <widget class=\"QWidget\" name=\"wifiOffPage\">\n      <layout class=\"QVBoxLayout\" name=\"verticalLayout_9\">\n       <item>\n        <spacer name=\"verticalSpacer_2\">\n         <property name=\"orientation\">\n          <enum>Qt::Vertical</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>20</width>\n           <height>217</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n       <item>\n        <widget class=\"QLabel\" name=\"label_9\">\n         <property name=\"font\">\n          <font>\n           <pointsize>20</pointsize>\n          </font>\n         </property>\n         <property name=\"text\">\n          <string>Wi-Fi is off</string>\n         </property>\n         <property name=\"alignment\">\n          <set>Qt::AlignCenter</set>\n         </property>\n        </widget>\n       </item>\n       <item>\n        <widget class=\"QLabel\" name=\"wifiOffIcon\">\n         <property name=\"enabled\">\n          <bool>false</bool>\n         </property>\n         <property name=\"text\">\n          <string notr=\"true\">TextLabel</string>\n         </property>\n         <property name=\"alignment\">\n          <set>Qt::AlignCenter</set>\n         </property>\n        </widget>\n       </item>\n       <item>\n        <widget class=\"QLabel\" name=\"label_10\">\n         <property name=\"text\">\n          <string>Switch Wi-Fi on to connect to a wireless network</string>\n         </property>\n         <property name=\"alignment\">\n          <set>Qt::AlignCenter</set>\n         </property>\n        </widget>\n       </item>\n       <item alignment=\"Qt::AlignHCenter\">\n        <widget class=\"QPushButton\" name=\"turnWifiOnButton\">\n         <property name=\"text\">\n          <string>Switch Wi-Fi On</string>\n         </property>\n         <property name=\"icon\">\n          <iconset theme=\"network-wireless\">\n           <normaloff>.</normaloff>.</iconset>\n         </property>\n        </widget>\n       </item>\n       <item>\n        <spacer name=\"verticalSpacer_3\">\n         <property name=\"orientation\">\n          <enum>Qt::Vertical</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>20</width>\n           <height>217</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n      </layout>\n     </widget>\n     <widget class=\"QWidget\" name=\"wifiBlockedPage\">\n      <layout class=\"QVBoxLayout\" name=\"verticalLayout_10\">\n       <item>\n        <spacer name=\"verticalSpacer_4\">\n         <property name=\"orientation\">\n          <enum>Qt::Vertical</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>20</width>\n           <height>233</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n       <item>\n        <widget class=\"QLabel\" name=\"label_12\">\n         <property name=\"font\">\n          <font>\n           <pointsize>20</pointsize>\n          </font>\n         </property>\n         <property name=\"text\">\n          <string>Wi-Fi is disabled</string>\n         </property>\n         <property name=\"alignment\">\n          <set>Qt::AlignCenter</set>\n         </property>\n        </widget>\n       </item>\n       <item>\n        <widget class=\"QLabel\" name=\"wifiBlockedIcon\">\n         <property name=\"enabled\">\n          <bool>false</bool>\n         </property>\n         <property name=\"text\">\n          <string notr=\"true\">TextLabel</string>\n         </property>\n         <property name=\"alignment\">\n          <set>Qt::AlignCenter</set>\n         </property>\n        </widget>\n       </item>\n       <item>\n        <widget class=\"QLabel\" name=\"label_11\">\n         <property name=\"text\">\n          <string>Use the Wi-Fi switch to enable Wi-Fi and connect to a network</string>\n         </property>\n         <property name=\"alignment\">\n          <set>Qt::AlignCenter</set>\n         </property>\n        </widget>\n       </item>\n       <item>\n        <spacer name=\"verticalSpacer_5\">\n         <property name=\"orientation\">\n          <enum>Qt::Vertical</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>20</width>\n           <height>232</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n      </layout>\n     </widget>\n     <widget class=\"QWidget\" name=\"wifiFlightPage\">\n      <layout class=\"QVBoxLayout\" name=\"verticalLayout_11\">\n       <item>\n        <spacer name=\"verticalSpacer_6\">\n         <property name=\"orientation\">\n          <enum>Qt::Vertical</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>20</width>\n           <height>217</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n       <item>\n        <widget class=\"QLabel\" name=\"label_14\">\n         <property name=\"font\">\n          <font>\n           <pointsize>20</pointsize>\n          </font>\n         </property>\n         <property name=\"text\">\n          <string>You're in flight mode</string>\n         </property>\n         <property name=\"alignment\">\n          <set>Qt::AlignCenter</set>\n         </property>\n        </widget>\n       </item>\n       <item>\n        <widget class=\"QLabel\" name=\"wifiFlightIcon\">\n         <property name=\"enabled\">\n          <bool>false</bool>\n         </property>\n         <property name=\"text\">\n          <string notr=\"true\">TextLabel</string>\n         </property>\n         <property name=\"alignment\">\n          <set>Qt::AlignCenter</set>\n         </property>\n        </widget>\n       </item>\n       <item>\n        <widget class=\"QLabel\" name=\"label_13\">\n         <property name=\"text\">\n          <string>Switch Wi-Fi on to connect to a wireless network. Flight mode won't be disabled.</string>\n         </property>\n         <property name=\"alignment\">\n          <set>Qt::AlignCenter</set>\n         </property>\n        </widget>\n       </item>\n       <item alignment=\"Qt::AlignHCenter\">\n        <widget class=\"QPushButton\" name=\"turnWifiOnButton_2\">\n         <property name=\"text\">\n          <string>Switch Wi-Fi On</string>\n         </property>\n         <property name=\"icon\">\n          <iconset theme=\"network-wireless\">\n           <normaloff>.</normaloff>.</iconset>\n         </property>\n        </widget>\n       </item>\n       <item>\n        <spacer name=\"verticalSpacer_7\">\n         <property name=\"orientation\">\n          <enum>Qt::Vertical</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>20</width>\n           <height>217</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n      </layout>\n     </widget>\n    </widget>\n   </item>\n  </layout>\n </widget>\n <customwidgets>\n  <customwidget>\n   <class>tTitleLabel</class>\n   <extends>QLabel</extends>\n   <header location=\"global\">ttitlelabel.h</header>\n   <slots>\n    <signal>backButtonClicked()</signal>\n   </slots>\n  </customwidget>\n  <customwidget>\n   <class>tStackedWidget</class>\n   <extends>QStackedWidget</extends>\n   <header location=\"global\">tstackedwidget.h</header>\n   <container>1</container>\n   <slots>\n    <signal>switchingFrame(int)</signal>\n   </slots>\n  </customwidget>\n  <customwidget>\n   <class>tSwitch</class>\n   <extends>QPushButton</extends>\n   <header location=\"global\">tswitch.h</header>\n  </customwidget>\n  <customwidget>\n   <class>tCircularSpinner</class>\n   <extends>QWidget</extends>\n   <header location=\"global\">tcircularspinner.h</header>\n   <container>1</container>\n  </customwidget>\n  <customwidget>\n   <class>tStatusFrame</class>\n   <extends>QFrame</extends>\n   <header location=\"global\">tstatusframe.h</header>\n   <container>1</container>\n  </customwidget>\n </customwidgets>\n <resources/>\n <connections/>\n</ui>\n"
  },
  {
    "path": "plugins/NetworkPlugin/statusCenter/devicePanes/wireddevicepane.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"wireddevicepane.h\"\n#include \"ui_wireddevicepane.h\"\n\n#include <QtConcurrent>\n\n#include \"../popovers/connectionselectionpopover.h\"\n#include \"networkplugincommon.h\"\n\n#include <hudmanager.h>\n#include <statemanager.h>\n#include <statuscentermanager.h>\n#include <tpopover.h>\n#include <tsettings.h>\n\n#include <NetworkManagerQt/Manager>\n#include <NetworkManagerQt/Settings>\n#include <NetworkManagerQt/WiredDevice>\n\nstruct WiredDevicePanePrivate {\n        QListWidgetItem* item;\n        NetworkManager::WiredDevice::Ptr device;\n\n        tSettings settings;\n        NetworkManager::Device::State oldState;\n};\n\nWiredDevicePane::WiredDevicePane(QString uni, QWidget* parent) :\n    AbstractDevicePane(parent),\n    ui(new Ui::WiredDevicePane) {\n    ui->setupUi(this);\n    d = new WiredDevicePanePrivate();\n\n    ui->titleLabel->setBackButtonIsMenu(true);\n    ui->titleLabel->setBackButtonShown(StateManager::instance()->statusCenterManager()->isHamburgerMenuRequired());\n    connect(StateManager::instance()->statusCenterManager(), &StatusCenterManager::isHamburgerMenuRequiredChanged, ui->titleLabel, &tTitleLabel::setBackButtonShown);\n\n    const int contentWidth = StateManager::instance()->statusCenterManager()->preferredContentWidth();\n    ui->actionsWidget->setFixedWidth(contentWidth);\n    ui->statusWidget->setFixedWidth(contentWidth);\n\n    ui->disconnectButton->setProperty(\"type\", \"destructive\");\n    ui->errorFrame->setVisible(false);\n\n    d->item = new QListWidgetItem();\n    d->item->setText(tr(\"Wired\"));\n    d->device = NetworkManager::findNetworkInterface(uni).staticCast<NetworkManager::WiredDevice>();\n\n    //    connect(d->device.data(), &NetworkManager::WirelessDevice::activeConnectionChanged, this, &WifiDevicePane::updateNetworkName);\n    //    connect(d->device.data(), &NetworkManager::WirelessDevice::activeAccessPointChanged, this, &WifiDevicePane::updateNetworkName);\n    //    updateNetworkName();\n\n    connect(d->device.data(), &NetworkManager::WiredDevice::stateChanged, this, &WiredDevicePane::updateState);\n    updateState();\n\n    connect(d->device.data(), &NetworkManager::WiredDevice::stateChanged, this, [=](NetworkManager::Device::State newState, NetworkManager::Device::State oldState, NetworkManager::Device::StateChangeReason reason) {\n        if (d->settings.value(\"NetworkPlugin/notifications.activation\").toBool()) {\n            switch (newState) {\n                case NetworkManager::Device::Unavailable:\n                    d->device->setAutoconnect(false);\n                    Q_FALLTHROUGH();\n                case NetworkManager::Device::Disconnected:\n                    if (oldState != NetworkManager::Device::Failed) StateManager::hudManager()->showHud({\n                        {\"icon\",  \"network-wired-unavailable\"},\n                        {\"title\", tr(\"Wired\")                },\n                        {\"text\",  tr(\"Disconnected\")         }\n });\n                    break;\n                case NetworkManager::Device::Activated:\n                    {\n                        d->device->setAutoconnect(true);\n                        QString title = tr(\"Wired\");\n\n                        StateManager::hudManager()->showHud({\n                            {\"icon\",  \"network-wired-activated\"},\n                            {\"title\", title                    },\n                            {\"text\",  tr(\"Connected\")          }\n                        });\n                        break;\n                    }\n                case NetworkManager::Device::Failed:\n                    d->device->setAutoconnect(false);\n                    StateManager::hudManager()->showHud({\n                        {\"icon\",  \"network-wired-error\"},\n                        {\"title\", tr(\"Wired\")          },\n                        {\"text\",  tr(\"Failed\")         }\n                    });\n                    break;\n                default:\n                    break;\n            }\n        }\n    });\n}\n\nWiredDevicePane::~WiredDevicePane() {\n    delete d;\n    delete ui;\n}\n\nvoid WiredDevicePane::updateState() {\n    ui->deviceIcon->setPixmap(QIcon::fromTheme(\"computer\").pixmap(SC_DPI_T(QSize(96, 96), QSize)));\n    ui->routerIcon->setPixmap(QIcon::fromTheme(\"network-modem\").pixmap(SC_DPI_T(QSize(96, 96), QSize)));\n    ui->routerName->setText(tr(\"Router\"));\n\n    NetworkManager::DeviceStateReason stateReason = d->device->stateReason();\n    if (d->oldState != NetworkManager::Device::Failed) {\n        // Only get rid of the error message here if the previous state was not failure.\n        ui->errorFrame->setVisible(false);\n    }\n\n    switch (stateReason.state()) {\n        case NetworkManager::Device::UnknownState:\n        case NetworkManager::Device::Unmanaged:\n        case NetworkManager::Device::Unavailable:\n            {\n                ui->stateConnecting->setVisible(false);\n                ui->stateIcon->setVisible(true);\n                ui->stateIcon->setPixmap(QIcon::fromTheme(\"dialog-cancel\").pixmap(SC_DPI_T(QSize(32, 32), QSize)));\n                ui->leftStateLine->setEnabled(false);\n                ui->rightStateLine->setEnabled(false);\n                ui->disconnectButton->setVisible(false);\n                ui->connectButton->setVisible(false);\n\n                d->device->setAutoconnect(false);\n                ui->errorFrame->setTitle(tr(\"Unavailable\"));\n\n                QString reasonText;\n                if (stateReason.reason() == NetworkManager::Device::CarrierReason) {\n                    reasonText = tr(\"Connect an Ethernet cable.\");\n                } else {\n                    reasonText = tr(\"This network is unavailable because %2.\");\n                    reasonText = reasonText.arg(NetworkPluginCommon::stateChangeReasonToString(stateReason.reason()));\n                }\n                ui->errorFrame->setText(reasonText);\n                ui->errorFrame->setState(tStatusFrame::Warning);\n                ui->errorFrame->setVisible(true);\n                break;\n            }\n        case NetworkManager::Device::Disconnected:\n            ui->stateConnecting->setVisible(false);\n            ui->stateIcon->setVisible(true);\n            ui->stateIcon->setPixmap(QIcon::fromTheme(\"dialog-cancel\").pixmap(SC_DPI_T(QSize(32, 32), QSize)));\n            ui->leftStateLine->setEnabled(false);\n            ui->rightStateLine->setEnabled(false);\n            ui->disconnectButton->setVisible(false);\n            ui->connectButton->setVisible(true);\n            break;\n        case NetworkManager::Device::Failed:\n            {\n                ui->stateConnecting->setVisible(false);\n                ui->stateIcon->setVisible(true);\n                ui->stateIcon->setPixmap(QIcon::fromTheme(\"dialog-cancel\").pixmap(SC_DPI_T(QSize(32, 32), QSize)));\n                ui->leftStateLine->setEnabled(false);\n                ui->rightStateLine->setEnabled(false);\n                ui->disconnectButton->setVisible(false);\n                ui->connectButton->setVisible(true);\n\n                ui->errorFrame->setTitle(tr(\"Connection Failure\"));\n\n                QString reasonText = tr(\"Connecting to the network failed because %2.\");\n                reasonText = reasonText.arg(NetworkPluginCommon::stateChangeReasonToString(stateReason.reason()));\n                ui->errorFrame->setText(reasonText);\n                ui->errorFrame->setState(tStatusFrame::Error);\n                ui->errorFrame->setVisible(true);\n                break;\n            }\n        case NetworkManager::Device::Preparing:\n        case NetworkManager::Device::ConfiguringHardware:\n        case NetworkManager::Device::NeedAuth:\n        case NetworkManager::Device::ConfiguringIp:\n        case NetworkManager::Device::CheckingIp:\n        case NetworkManager::Device::WaitingForSecondaries:\n        case NetworkManager::Device::Deactivating:\n            ui->stateConnecting->setVisible(true);\n            ui->stateIcon->setVisible(false);\n            ui->leftStateLine->setEnabled(true);\n            ui->rightStateLine->setEnabled(false);\n            ui->disconnectButton->setVisible(true);\n            ui->connectButton->setVisible(false);\n            break;\n        case NetworkManager::Device::Activated:\n            ui->stateConnecting->setVisible(false);\n            ui->stateIcon->setVisible(true);\n            ui->stateIcon->setPixmap(QIcon::fromTheme(\"dialog-ok\").pixmap(SC_DPI_T(QSize(32, 32), QSize)));\n            ui->leftStateLine->setEnabled(true);\n            ui->rightStateLine->setEnabled(true);\n            ui->disconnectButton->setVisible(true);\n            ui->connectButton->setVisible(false);\n            break;\n    }\n\n    d->oldState = stateReason.state();\n}\n\nQListWidgetItem* WiredDevicePane::leftPaneItem() {\n    return d->item;\n}\n\nvoid WiredDevicePane::on_disconnectButton_clicked() {\n    d->device->disconnectInterface();\n}\n\nvoid WiredDevicePane::on_connectButton_clicked() {\n    NetworkManager::Connection::List connections = NetworkManager::listConnections();\n    QtConcurrent::blockingFilter(connections, [=](const NetworkManager::Connection::Ptr& connection) {\n        NetworkManager::ConnectionSettings::Ptr settings = connection->settings();\n        if (settings->interfaceName() != \"\" && d->device->interfaceName() != settings->interfaceName()) return false; // This connection is not applicable to this device\n        return QList<NetworkManager::ConnectionSettings::ConnectionType>({NetworkManager::ConnectionSettings::Wired}).contains(connection->settings()->connectionType());\n    });\n\n    if (connections.count() == 0) {\n        // Create a new automatic connection\n        NetworkManager::ConnectionSettings settings(NetworkManager::ConnectionSettings::Wired);\n        settings.setUuid(NetworkManager::ConnectionSettings::createNewUuid());\n        settings.setInterfaceName(d->device->interfaceName());\n        NetworkManager::addAndActivateConnection(settings.toMap(), d->device->uni(), \"\");\n    } else if (connections.count() == 1) {\n        // Use this connection\n        NetworkManager::activateConnection(connections.first()->path(), d->device->uni(), \"\");\n    } else {\n        // Ask the user for the connection to use\n        ConnectionSelectionPopover* selection = new ConnectionSelectionPopover(connections);\n        tPopover* popover = new tPopover(selection);\n        popover->setPopoverWidth(SC_DPI(600));\n        connect(selection, &ConnectionSelectionPopover::reject, popover, &tPopover::dismiss);\n        connect(selection, &ConnectionSelectionPopover::accept, this, [=](NetworkManager::Connection::Ptr connection) {\n            NetworkManager::activateConnection(connection->path(), d->device->uni(), \"\");\n            popover->dismiss();\n        });\n        connect(popover, &tPopover::dismissed, popover, &tPopover::deleteLater);\n        connect(popover, &tPopover::dismissed, selection, &ConnectionSelectionPopover::deleteLater);\n        popover->show(this->window());\n    }\n}\n\nvoid WiredDevicePane::on_titleLabel_backButtonClicked() {\n    StateManager::statusCenterManager()->showStatusCenterHamburgerMenu();\n}\n\nvoid WiredDevicePane::changeEvent(QEvent* event) {\n    if (event->type() == QEvent::LanguageChange) {\n        ui->retranslateUi(this);\n    }\n}\n"
  },
  {
    "path": "plugins/NetworkPlugin/statusCenter/devicePanes/wireddevicepane.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef WIREDDEVICEPANE_H\n#define WIREDDEVICEPANE_H\n\n#include \"abstractdevicepane.h\"\n\nnamespace Ui {\n    class WiredDevicePane;\n}\n\nstruct WiredDevicePanePrivate;\nclass WiredDevicePane : public AbstractDevicePane {\n        Q_OBJECT\n\n    public:\n        explicit WiredDevicePane(QString uni, QWidget* parent = nullptr);\n        ~WiredDevicePane();\n\n    private:\n        Ui::WiredDevicePane* ui;\n        WiredDevicePanePrivate* d;\n\n        void updateState();\n\n        // AbstractDevicePane interface\n    public:\n        QListWidgetItem* leftPaneItem();\n\n    private slots:\n        void on_disconnectButton_clicked();\n        void on_connectButton_clicked();\n        void on_titleLabel_backButtonClicked();\n\n        // QWidget interface\n    protected:\n        void changeEvent(QEvent* event);\n};\n\n#endif // WIREDDEVICEPANE_H\n"
  },
  {
    "path": "plugins/NetworkPlugin/statusCenter/devicePanes/wireddevicepane.ui",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ui version=\"4.0\">\n <class>WiredDevicePane</class>\n <widget class=\"QWidget\" name=\"WiredDevicePane\">\n  <property name=\"geometry\">\n   <rect>\n    <x>0</x>\n    <y>0</y>\n    <width>400</width>\n    <height>300</height>\n   </rect>\n  </property>\n  <property name=\"windowTitle\">\n   <string notr=\"true\">Form</string>\n  </property>\n  <layout class=\"QVBoxLayout\" name=\"verticalLayout\">\n   <property name=\"spacing\">\n    <number>0</number>\n   </property>\n   <property name=\"leftMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"topMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"rightMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"bottomMargin\">\n    <number>0</number>\n   </property>\n   <item>\n    <widget class=\"tTitleLabel\" name=\"titleLabel\">\n     <property name=\"text\">\n      <string>Wired</string>\n     </property>\n    </widget>\n   </item>\n   <item>\n    <widget class=\"QScrollArea\" name=\"scrollArea\">\n     <property name=\"frameShape\">\n      <enum>QFrame::NoFrame</enum>\n     </property>\n     <property name=\"widgetResizable\">\n      <bool>true</bool>\n     </property>\n     <widget class=\"QWidget\" name=\"scrollAreaWidgetContents\">\n      <property name=\"geometry\">\n       <rect>\n        <x>0</x>\n        <y>0</y>\n        <width>400</width>\n        <height>283</height>\n       </rect>\n      </property>\n      <layout class=\"QVBoxLayout\" name=\"verticalLayout_2\">\n       <property name=\"spacing\">\n        <number>0</number>\n       </property>\n       <property name=\"leftMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"topMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"rightMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"bottomMargin\">\n        <number>0</number>\n       </property>\n       <item alignment=\"Qt::AlignHCenter\">\n        <widget class=\"QWidget\" name=\"statusWidget\" native=\"true\">\n         <layout class=\"QVBoxLayout\" name=\"verticalLayout_4\">\n          <item>\n           <widget class=\"QLabel\" name=\"label_2\">\n            <property name=\"font\">\n             <font>\n              <weight>75</weight>\n              <bold>true</bold>\n             </font>\n            </property>\n            <property name=\"text\">\n             <string>STATUS</string>\n            </property>\n           </widget>\n          </item>\n          <item>\n           <layout class=\"QHBoxLayout\" name=\"horizontalLayout_2\">\n            <item>\n             <layout class=\"QVBoxLayout\" name=\"verticalLayout_5\">\n              <item>\n               <widget class=\"QLabel\" name=\"deviceIcon\">\n                <property name=\"text\">\n                 <string notr=\"true\">TextLabel</string>\n                </property>\n               </widget>\n              </item>\n              <item>\n               <widget class=\"QLabel\" name=\"label_3\">\n                <property name=\"text\">\n                 <string>This Device</string>\n                </property>\n                <property name=\"alignment\">\n                 <set>Qt::AlignCenter</set>\n                </property>\n               </widget>\n              </item>\n             </layout>\n            </item>\n            <item>\n             <widget class=\"Line\" name=\"leftStateLine\">\n              <property name=\"sizePolicy\">\n               <sizepolicy hsizetype=\"Expanding\" vsizetype=\"Fixed\">\n                <horstretch>0</horstretch>\n                <verstretch>0</verstretch>\n               </sizepolicy>\n              </property>\n              <property name=\"maximumSize\">\n               <size>\n                <width>16777215</width>\n                <height>1</height>\n               </size>\n              </property>\n              <property name=\"orientation\">\n               <enum>Qt::Horizontal</enum>\n              </property>\n             </widget>\n            </item>\n            <item>\n             <widget class=\"tCircularSpinner\" name=\"stateConnecting\" native=\"true\"/>\n            </item>\n            <item>\n             <widget class=\"QLabel\" name=\"stateIcon\">\n              <property name=\"text\">\n               <string notr=\"true\">TextLabel</string>\n              </property>\n             </widget>\n            </item>\n            <item>\n             <widget class=\"Line\" name=\"rightStateLine\">\n              <property name=\"sizePolicy\">\n               <sizepolicy hsizetype=\"Expanding\" vsizetype=\"Fixed\">\n                <horstretch>0</horstretch>\n                <verstretch>0</verstretch>\n               </sizepolicy>\n              </property>\n              <property name=\"maximumSize\">\n               <size>\n                <width>16777215</width>\n                <height>1</height>\n               </size>\n              </property>\n              <property name=\"orientation\">\n               <enum>Qt::Horizontal</enum>\n              </property>\n             </widget>\n            </item>\n            <item>\n             <layout class=\"QVBoxLayout\" name=\"verticalLayout_6\">\n              <item>\n               <widget class=\"QLabel\" name=\"routerIcon\">\n                <property name=\"text\">\n                 <string notr=\"true\">TextLabel</string>\n                </property>\n               </widget>\n              </item>\n              <item>\n               <widget class=\"QLabel\" name=\"routerName\">\n                <property name=\"text\">\n                 <string notr=\"true\">TextLabel</string>\n                </property>\n                <property name=\"alignment\">\n                 <set>Qt::AlignCenter</set>\n                </property>\n               </widget>\n              </item>\n             </layout>\n            </item>\n           </layout>\n          </item>\n          <item>\n           <widget class=\"tStatusFrame\" name=\"errorFrame\">\n            <property name=\"frameShape\">\n             <enum>QFrame::StyledPanel</enum>\n            </property>\n            <property name=\"frameShadow\">\n             <enum>QFrame::Raised</enum>\n            </property>\n           </widget>\n          </item>\n         </layout>\n        </widget>\n       </item>\n       <item>\n        <widget class=\"Line\" name=\"line\">\n         <property name=\"maximumSize\">\n          <size>\n           <width>16777215</width>\n           <height>1</height>\n          </size>\n         </property>\n         <property name=\"orientation\">\n          <enum>Qt::Horizontal</enum>\n         </property>\n        </widget>\n       </item>\n       <item alignment=\"Qt::AlignHCenter\">\n        <widget class=\"QWidget\" name=\"actionsWidget\" native=\"true\">\n         <layout class=\"QVBoxLayout\" name=\"verticalLayout_3\">\n          <property name=\"spacing\">\n           <number>0</number>\n          </property>\n          <property name=\"leftMargin\">\n           <number>0</number>\n          </property>\n          <property name=\"topMargin\">\n           <number>0</number>\n          </property>\n          <property name=\"rightMargin\">\n           <number>0</number>\n          </property>\n          <item>\n           <layout class=\"QHBoxLayout\" name=\"horizontalLayout\">\n            <property name=\"leftMargin\">\n             <number>9</number>\n            </property>\n            <property name=\"topMargin\">\n             <number>9</number>\n            </property>\n            <property name=\"rightMargin\">\n             <number>9</number>\n            </property>\n            <property name=\"bottomMargin\">\n             <number>6</number>\n            </property>\n            <item>\n             <widget class=\"QLabel\" name=\"label\">\n              <property name=\"font\">\n               <font>\n                <weight>75</weight>\n                <bold>true</bold>\n               </font>\n              </property>\n              <property name=\"text\">\n               <string>ACTIONS</string>\n              </property>\n             </widget>\n            </item>\n           </layout>\n          </item>\n          <item>\n           <widget class=\"QPushButton\" name=\"connectButton\">\n            <property name=\"text\">\n             <string>Connect</string>\n            </property>\n           </widget>\n          </item>\n          <item>\n           <widget class=\"QPushButton\" name=\"disconnectButton\">\n            <property name=\"text\">\n             <string>Disconnect</string>\n            </property>\n           </widget>\n          </item>\n         </layout>\n        </widget>\n       </item>\n       <item>\n        <spacer name=\"verticalSpacer\">\n         <property name=\"orientation\">\n          <enum>Qt::Vertical</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>20</width>\n           <height>138</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n      </layout>\n     </widget>\n    </widget>\n   </item>\n  </layout>\n </widget>\n <customwidgets>\n  <customwidget>\n   <class>tTitleLabel</class>\n   <extends>QLabel</extends>\n   <header location=\"global\">ttitlelabel.h</header>\n   <slots>\n    <signal>backButtonClicked()</signal>\n   </slots>\n  </customwidget>\n  <customwidget>\n   <class>tCircularSpinner</class>\n   <extends>QWidget</extends>\n   <header location=\"global\">tcircularspinner.h</header>\n   <container>1</container>\n  </customwidget>\n  <customwidget>\n   <class>tStatusFrame</class>\n   <extends>QFrame</extends>\n   <header location=\"global\">tstatusframe.h</header>\n   <container>1</container>\n  </customwidget>\n </customwidgets>\n <resources/>\n <connections/>\n</ui>\n"
  },
  {
    "path": "plugins/NetworkPlugin/statusCenter/eap/securityeap.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"securityeap.h\"\n\nSecurityEap::SecurityEap(QWidget *parent) : QWidget(parent)\n{\n\n}\n"
  },
  {
    "path": "plugins/NetworkPlugin/statusCenter/eap/securityeap.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef SECURITYEAP_H\n#define SECURITYEAP_H\n\n#include <QWidget>\n#include <NetworkManagerQt/Security8021xSetting>\n\nclass SecurityEap : public QWidget {\n        Q_OBJECT\n    public:\n        explicit SecurityEap(QWidget* parent = nullptr);\n\n        virtual void populateSetting(NetworkManager::Security8021xSetting::Ptr setting) = 0;\n\n    signals:\n        void back();\n        void done();\n};\n\n#endif // SECURITYEAP_H\n"
  },
  {
    "path": "plugins/NetworkPlugin/statusCenter/eap/securityeappeap.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"securityeappeap.h\"\n#include \"ui_securityeappeap.h\"\n\n#include <terrorflash.h>\n#include <QFile>\n#include <QFileDialog>\n\nstruct SecurityEapPeapPrivate {\n    QByteArray caCert;\n};\n\nSecurityEapPeap::SecurityEapPeap(QWidget* parent) :\n    SecurityEap(parent),\n    ui(new Ui::SecurityEapPeap) {\n    ui->setupUi(this);\n\n    d = new SecurityEapPeapPrivate();\n    ui->titleLabel->setBackButtonShown(true);\n}\n\nSecurityEapPeap::~SecurityEapPeap() {\n    delete ui;\n    delete d;\n}\n\nvoid SecurityEapPeap::on_titleLabel_backButtonClicked() {\n    emit back();\n}\n\nvoid SecurityEapPeap::on_connectButton_clicked() {\n    if (ui->username->text().isEmpty()) {\n        tErrorFlash::flashError(ui->username);\n        return;\n    }\n\n    if (ui->password->text().isEmpty()) {\n        tErrorFlash::flashError(ui->password);\n        return;\n    }\n\n    if (!ui->caCertificate->text().isEmpty()) {\n        QFile file(ui->caCertificate->text());\n        if (!file.open(QFile::ReadOnly)) {\n            tErrorFlash::flashError(ui->caCertificate);\n            return;\n        }\n\n        d->caCert = file.readAll();\n        file.close();\n    }\n\n    emit done();\n}\n\n\nvoid SecurityEapPeap::populateSetting(NetworkManager::Security8021xSetting::Ptr setting) {\n    setting->setEapMethods({NetworkManager::Security8021xSetting::EapMethodPeap});\n\n    if (ui->peapVersionAuto->isChecked()) {\n        setting->setPhase1PeapVersion(NetworkManager::Security8021xSetting::PeapVersionUnknown);\n    } else if (ui->peapVersion0->isChecked()) {\n        setting->setPhase1PeapVersion(NetworkManager::Security8021xSetting::PeapVersionZero);\n    } else {\n        setting->setPhase1PeapVersion(NetworkManager::Security8021xSetting::PeapVersionOne);\n    }\n\n    switch (ui->phase2Auth->currentIndex()) {\n        case 0: //MSCHAPv2\n            setting->setPhase2AuthMethod(NetworkManager::Security8021xSetting::AuthMethodMschapv2);\n            break;\n        case 1: //MD5\n            setting->setPhase2AuthMethod(NetworkManager::Security8021xSetting::AuthMethodMd5);\n            break;\n        case 2: //GTC\n            setting->setPhase2AuthMethod(NetworkManager::Security8021xSetting::AuthMethodGtc);\n            break;\n    }\n\n    setting->setCaCertificate(d->caCert);\n    setting->setAnonymousIdentity(ui->anonymousIdentity->text());\n    setting->setIdentity(ui->username->text());\n    setting->setPassword(ui->password->text());\n}\n\nvoid SecurityEapPeap::on_browseCaCertButton_clicked() {\n    QFileDialog* d = new QFileDialog(this);\n    d->setAcceptMode(QFileDialog::AcceptOpen);\n    d->setNameFilters({tr(\"Certificates (*.pem, *.cer)\")});\n    connect(d, &QFileDialog::finished, this, [ = ](int result) {\n        if (result == QFileDialog::Accepted) {\n            ui->caCertificate->setText(d->selectedFiles().first());\n        }\n        d->deleteLater();\n    });\n    d->open();\n}\n"
  },
  {
    "path": "plugins/NetworkPlugin/statusCenter/eap/securityeappeap.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef SECURITYEAPPEAP_H\n#define SECURITYEAPPEAP_H\n\n#include \"securityeap.h\"\n\nnamespace Ui {\n    class SecurityEapPeap;\n}\n\nstruct SecurityEapPeapPrivate;\nclass SecurityEapPeap : public SecurityEap {\n        Q_OBJECT\n\n    public:\n        explicit SecurityEapPeap(QWidget* parent = nullptr);\n        ~SecurityEapPeap();\n\n    private slots:\n        void on_titleLabel_backButtonClicked();\n\n        void on_connectButton_clicked();\n\n        void on_browseCaCertButton_clicked();\n\n    private:\n        Ui::SecurityEapPeap* ui;\n        SecurityEapPeapPrivate* d;\n\n        // SecurityEap interface\n    public:\n        void populateSetting(NetworkManager::Security8021xSetting::Ptr setting);\n};\n\n#endif // SECURITYEAPPEAP_H\n"
  },
  {
    "path": "plugins/NetworkPlugin/statusCenter/eap/securityeappeap.ui",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ui version=\"4.0\">\n <class>SecurityEapPeap</class>\n <widget class=\"QWidget\" name=\"SecurityEapPeap\">\n  <property name=\"geometry\">\n   <rect>\n    <x>0</x>\n    <y>0</y>\n    <width>519</width>\n    <height>489</height>\n   </rect>\n  </property>\n  <property name=\"windowTitle\">\n   <string notr=\"true\">Form</string>\n  </property>\n  <layout class=\"QVBoxLayout\" name=\"verticalLayout\">\n   <property name=\"spacing\">\n    <number>0</number>\n   </property>\n   <property name=\"leftMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"topMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"rightMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"bottomMargin\">\n    <number>0</number>\n   </property>\n   <item>\n    <widget class=\"tTitleLabel\" name=\"titleLabel\">\n     <property name=\"text\">\n      <string>PEAP</string>\n     </property>\n    </widget>\n   </item>\n   <item>\n    <widget class=\"QLabel\" name=\"label_2\">\n     <property name=\"text\">\n      <string>Enter the settings for this network</string>\n     </property>\n     <property name=\"margin\">\n      <number>9</number>\n     </property>\n    </widget>\n   </item>\n   <item>\n    <widget class=\"Line\" name=\"line\">\n     <property name=\"maximumSize\">\n      <size>\n       <width>16777215</width>\n       <height>1</height>\n      </size>\n     </property>\n     <property name=\"orientation\">\n      <enum>Qt::Horizontal</enum>\n     </property>\n    </widget>\n   </item>\n   <item>\n    <layout class=\"QGridLayout\" name=\"gridLayout\">\n     <property name=\"leftMargin\">\n      <number>9</number>\n     </property>\n     <property name=\"topMargin\">\n      <number>9</number>\n     </property>\n     <property name=\"rightMargin\">\n      <number>9</number>\n     </property>\n     <property name=\"bottomMargin\">\n      <number>9</number>\n     </property>\n     <property name=\"spacing\">\n      <number>6</number>\n     </property>\n     <item row=\"1\" column=\"0\">\n      <widget class=\"QLabel\" name=\"label\">\n       <property name=\"text\">\n        <string>Phase-2 Authentication</string>\n       </property>\n      </widget>\n     </item>\n     <item row=\"3\" column=\"0\">\n      <widget class=\"QLabel\" name=\"label_4\">\n       <property name=\"text\">\n        <string>Anonymous Identity</string>\n       </property>\n      </widget>\n     </item>\n     <item row=\"2\" column=\"1\">\n      <widget class=\"QLineEdit\" name=\"caCertificate\"/>\n     </item>\n     <item row=\"0\" column=\"0\">\n      <widget class=\"QLabel\" name=\"label_7\">\n       <property name=\"text\">\n        <string>PEAP version</string>\n       </property>\n      </widget>\n     </item>\n     <item row=\"4\" column=\"0\">\n      <widget class=\"QLabel\" name=\"label_5\">\n       <property name=\"text\">\n        <string>Username</string>\n       </property>\n      </widget>\n     </item>\n     <item row=\"5\" column=\"0\">\n      <widget class=\"QLabel\" name=\"label_6\">\n       <property name=\"text\">\n        <string>Password</string>\n       </property>\n      </widget>\n     </item>\n     <item row=\"2\" column=\"0\">\n      <widget class=\"QLabel\" name=\"label_3\">\n       <property name=\"text\">\n        <string>CA Certificate</string>\n       </property>\n      </widget>\n     </item>\n     <item row=\"2\" column=\"2\">\n      <widget class=\"QPushButton\" name=\"browseCaCertButton\">\n       <property name=\"text\">\n        <string>Browse...</string>\n       </property>\n      </widget>\n     </item>\n     <item row=\"1\" column=\"1\" colspan=\"2\">\n      <widget class=\"QComboBox\" name=\"phase2Auth\">\n       <item>\n        <property name=\"text\">\n         <string>MSCHAPv2</string>\n        </property>\n       </item>\n       <item>\n        <property name=\"text\">\n         <string>MD5</string>\n        </property>\n       </item>\n       <item>\n        <property name=\"text\">\n         <string>GTC</string>\n        </property>\n       </item>\n      </widget>\n     </item>\n     <item row=\"0\" column=\"1\" colspan=\"2\">\n      <widget class=\"QWidget\" name=\"widget\" native=\"true\">\n       <layout class=\"QHBoxLayout\" name=\"horizontalLayout\">\n        <property name=\"spacing\">\n         <number>0</number>\n        </property>\n        <property name=\"leftMargin\">\n         <number>0</number>\n        </property>\n        <property name=\"topMargin\">\n         <number>0</number>\n        </property>\n        <property name=\"rightMargin\">\n         <number>0</number>\n        </property>\n        <property name=\"bottomMargin\">\n         <number>0</number>\n        </property>\n        <item>\n         <widget class=\"QPushButton\" name=\"peapVersionAuto\">\n          <property name=\"text\">\n           <string>Automatic</string>\n          </property>\n          <property name=\"checkable\">\n           <bool>true</bool>\n          </property>\n          <property name=\"checked\">\n           <bool>true</bool>\n          </property>\n          <property name=\"autoExclusive\">\n           <bool>true</bool>\n          </property>\n         </widget>\n        </item>\n        <item>\n         <widget class=\"QPushButton\" name=\"peapVersion0\">\n          <property name=\"text\">\n           <string>Version 0</string>\n          </property>\n          <property name=\"checkable\">\n           <bool>true</bool>\n          </property>\n          <property name=\"autoExclusive\">\n           <bool>true</bool>\n          </property>\n         </widget>\n        </item>\n        <item>\n         <widget class=\"QPushButton\" name=\"peapVersion1\">\n          <property name=\"text\">\n           <string>Version 1</string>\n          </property>\n          <property name=\"checkable\">\n           <bool>true</bool>\n          </property>\n          <property name=\"autoExclusive\">\n           <bool>true</bool>\n          </property>\n         </widget>\n        </item>\n        <item>\n         <spacer name=\"horizontalSpacer\">\n          <property name=\"orientation\">\n           <enum>Qt::Horizontal</enum>\n          </property>\n          <property name=\"sizeHint\" stdset=\"0\">\n           <size>\n            <width>40</width>\n            <height>20</height>\n           </size>\n          </property>\n         </spacer>\n        </item>\n       </layout>\n      </widget>\n     </item>\n     <item row=\"3\" column=\"1\" colspan=\"2\">\n      <widget class=\"QLineEdit\" name=\"anonymousIdentity\"/>\n     </item>\n     <item row=\"4\" column=\"1\" colspan=\"2\">\n      <widget class=\"QLineEdit\" name=\"username\"/>\n     </item>\n     <item row=\"5\" column=\"1\" colspan=\"2\">\n      <widget class=\"QLineEdit\" name=\"password\">\n       <property name=\"echoMode\">\n        <enum>QLineEdit::Password</enum>\n       </property>\n      </widget>\n     </item>\n    </layout>\n   </item>\n   <item>\n    <widget class=\"QPushButton\" name=\"connectButton\">\n     <property name=\"text\">\n      <string>Connect</string>\n     </property>\n    </widget>\n   </item>\n   <item>\n    <spacer name=\"verticalSpacer\">\n     <property name=\"orientation\">\n      <enum>Qt::Vertical</enum>\n     </property>\n     <property name=\"sizeHint\" stdset=\"0\">\n      <size>\n       <width>20</width>\n       <height>40</height>\n      </size>\n     </property>\n    </spacer>\n   </item>\n  </layout>\n </widget>\n <customwidgets>\n  <customwidget>\n   <class>tTitleLabel</class>\n   <extends>QLabel</extends>\n   <header location=\"global\">ttitlelabel.h</header>\n   <slots>\n    <signal>backButtonClicked()</signal>\n   </slots>\n  </customwidget>\n </customwidgets>\n <resources/>\n <connections/>\n</ui>\n"
  },
  {
    "path": "plugins/NetworkPlugin/statusCenter/eap/securityeapunsupported.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"securityeapunsupported.h\"\n#include \"ui_securityeapunsupported.h\"\n\nSecurityEapUnsupported::SecurityEapUnsupported(QWidget* parent) :\n    SecurityEap(parent),\n    ui(new Ui::SecurityEapUnsupported) {\n    ui->setupUi(this);\n\n    ui->titleLabel->setBackButtonShown(true);\n}\n\nSecurityEapUnsupported::~SecurityEapUnsupported() {\n    delete ui;\n}\n\nvoid SecurityEapUnsupported::on_titleLabel_backButtonClicked() {\n    emit back();\n}\n\n\nvoid SecurityEapUnsupported::populateSetting(NetworkManager::Security8021xSetting::Ptr setting) {\n}\n"
  },
  {
    "path": "plugins/NetworkPlugin/statusCenter/eap/securityeapunsupported.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef SECURITYEAPUNSUPPORTED_H\n#define SECURITYEAPUNSUPPORTED_H\n\n#include \"securityeap.h\"\n\nnamespace Ui {\n    class SecurityEapUnsupported;\n}\n\nclass SecurityEapUnsupported : public SecurityEap {\n        Q_OBJECT\n\n    public:\n        explicit SecurityEapUnsupported(QWidget* parent = nullptr);\n        ~SecurityEapUnsupported();\n\n    private slots:\n        void on_titleLabel_backButtonClicked();\n\n    private:\n        Ui::SecurityEapUnsupported* ui;\n\n        // SecurityEap interface\n    public:\n        void populateSetting(NetworkManager::Security8021xSetting::Ptr setting);\n};\n\n#endif // SECURITYEAPUNSUPPORTED_H\n"
  },
  {
    "path": "plugins/NetworkPlugin/statusCenter/eap/securityeapunsupported.ui",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ui version=\"4.0\">\n <class>SecurityEapUnsupported</class>\n <widget class=\"QWidget\" name=\"SecurityEapUnsupported\">\n  <property name=\"geometry\">\n   <rect>\n    <x>0</x>\n    <y>0</y>\n    <width>488</width>\n    <height>412</height>\n   </rect>\n  </property>\n  <property name=\"windowTitle\">\n   <string notr=\"true\">Form</string>\n  </property>\n  <layout class=\"QVBoxLayout\" name=\"verticalLayout_2\">\n   <property name=\"spacing\">\n    <number>0</number>\n   </property>\n   <property name=\"leftMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"topMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"rightMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"bottomMargin\">\n    <number>0</number>\n   </property>\n   <item>\n    <widget class=\"tTitleLabel\" name=\"titleLabel\">\n     <property name=\"text\">\n      <string>Unsupported Security Settings</string>\n     </property>\n    </widget>\n   </item>\n   <item>\n    <layout class=\"QVBoxLayout\" name=\"verticalLayout\">\n     <property name=\"spacing\">\n      <number>6</number>\n     </property>\n     <property name=\"leftMargin\">\n      <number>9</number>\n     </property>\n     <property name=\"topMargin\">\n      <number>9</number>\n     </property>\n     <property name=\"rightMargin\">\n      <number>9</number>\n     </property>\n     <property name=\"bottomMargin\">\n      <number>9</number>\n     </property>\n     <item>\n      <spacer name=\"verticalSpacer_2\">\n       <property name=\"orientation\">\n        <enum>Qt::Vertical</enum>\n       </property>\n       <property name=\"sizeHint\" stdset=\"0\">\n        <size>\n         <width>20</width>\n         <height>40</height>\n        </size>\n       </property>\n      </spacer>\n     </item>\n     <item>\n      <widget class=\"QLabel\" name=\"label\">\n       <property name=\"font\">\n        <font>\n         <pointsize>20</pointsize>\n        </font>\n       </property>\n       <property name=\"text\">\n        <string>Unsupported Security Settings</string>\n       </property>\n       <property name=\"alignment\">\n        <set>Qt::AlignCenter</set>\n       </property>\n      </widget>\n     </item>\n     <item>\n      <widget class=\"QLabel\" name=\"label_2\">\n       <property name=\"text\">\n        <string>Sorry, theDesk doesn't support those security settings at the moment. You can try using the terminal to configure this network.</string>\n       </property>\n       <property name=\"alignment\">\n        <set>Qt::AlignCenter</set>\n       </property>\n       <property name=\"wordWrap\">\n        <bool>true</bool>\n       </property>\n      </widget>\n     </item>\n     <item>\n      <spacer name=\"verticalSpacer\">\n       <property name=\"orientation\">\n        <enum>Qt::Vertical</enum>\n       </property>\n       <property name=\"sizeHint\" stdset=\"0\">\n        <size>\n         <width>20</width>\n         <height>40</height>\n        </size>\n       </property>\n      </spacer>\n     </item>\n    </layout>\n   </item>\n  </layout>\n </widget>\n <customwidgets>\n  <customwidget>\n   <class>tTitleLabel</class>\n   <extends>QLabel</extends>\n   <header location=\"global\">ttitlelabel.h</header>\n   <slots>\n    <signal>backButtonClicked()</signal>\n   </slots>\n  </customwidget>\n </customwidgets>\n <resources/>\n <connections/>\n</ui>\n"
  },
  {
    "path": "plugins/NetworkPlugin/statusCenter/networkstatuscenterleftpane.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"networkstatuscenterleftpane.h\"\n#include \"ui_networkstatuscenterleftpane.h\"\n\n#include <statemanager.h>\n#include <statuscentermanager.h>\n\nNetworkStatusCenterLeftPane::NetworkStatusCenterLeftPane(QWidget* parent) :\n    QWidget(parent),\n    ui(new Ui::NetworkStatusCenterLeftPane) {\n    ui->setupUi(this);\n\n    ui->titleLabel->setBackButtonShown(true);\n}\n\nNetworkStatusCenterLeftPane::~NetworkStatusCenterLeftPane() {\n    delete ui;\n}\n\nvoid NetworkStatusCenterLeftPane::addItem(QListWidgetItem* item) {\n    ui->devicesWidget->addItem(item);\n}\n\nvoid NetworkStatusCenterLeftPane::removeItem(QListWidgetItem* item) {\n    ui->devicesWidget->takeItem(ui->devicesWidget->row(item));\n}\n\nvoid NetworkStatusCenterLeftPane::on_titleLabel_backButtonClicked() {\n    StateManager::statusCenterManager()->returnToRootMenu();\n}\n\nvoid NetworkStatusCenterLeftPane::on_devicesWidget_currentRowChanged(int currentRow) {\n    emit currentChanged(currentRow);\n}\n"
  },
  {
    "path": "plugins/NetworkPlugin/statusCenter/networkstatuscenterleftpane.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef NETWORKSTATUSCENTERLEFTPANE_H\n#define NETWORKSTATUSCENTERLEFTPANE_H\n\n#include <QWidget>\n#include <QListWidgetItem>\n\nnamespace Ui {\n    class NetworkStatusCenterLeftPane;\n}\n\nclass NetworkStatusCenterLeftPane : public QWidget {\n        Q_OBJECT\n\n    public:\n        explicit NetworkStatusCenterLeftPane(QWidget* parent = nullptr);\n        ~NetworkStatusCenterLeftPane();\n\n        void addItem(QListWidgetItem* item);\n        void removeItem(QListWidgetItem* item);\n\n    signals:\n        void currentChanged(int device);\n\n    private slots:\n        void on_titleLabel_backButtonClicked();\n\n        void on_devicesWidget_currentRowChanged(int currentRow);\n\n    private:\n        Ui::NetworkStatusCenterLeftPane* ui;\n};\n\n#endif // NETWORKSTATUSCENTERLEFTPANE_H\n"
  },
  {
    "path": "plugins/NetworkPlugin/statusCenter/networkstatuscenterleftpane.ui",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ui version=\"4.0\">\n <class>NetworkStatusCenterLeftPane</class>\n <widget class=\"QWidget\" name=\"NetworkStatusCenterLeftPane\">\n  <property name=\"geometry\">\n   <rect>\n    <x>0</x>\n    <y>0</y>\n    <width>400</width>\n    <height>300</height>\n   </rect>\n  </property>\n  <property name=\"windowTitle\">\n   <string notr=\"true\">Form</string>\n  </property>\n  <layout class=\"QVBoxLayout\" name=\"verticalLayout\">\n   <property name=\"spacing\">\n    <number>0</number>\n   </property>\n   <property name=\"leftMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"topMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"rightMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"bottomMargin\">\n    <number>0</number>\n   </property>\n   <item>\n    <widget class=\"tTitleLabel\" name=\"titleLabel\">\n     <property name=\"text\">\n      <string>Network</string>\n     </property>\n    </widget>\n   </item>\n   <item>\n    <widget class=\"QListWidget\" name=\"devicesWidget\">\n     <property name=\"frameShape\">\n      <enum>QFrame::NoFrame</enum>\n     </property>\n    </widget>\n   </item>\n  </layout>\n </widget>\n <customwidgets>\n  <customwidget>\n   <class>tTitleLabel</class>\n   <extends>QLabel</extends>\n   <header location=\"global\">ttitlelabel.h</header>\n   <slots>\n    <signal>backButtonClicked()</signal>\n   </slots>\n  </customwidget>\n </customwidgets>\n <resources/>\n <connections/>\n</ui>\n"
  },
  {
    "path": "plugins/NetworkPlugin/statusCenter/networkstatuscenterpane.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"networkstatuscenterpane.h\"\n#include \"ui_networkstatuscenterpane.h\"\n\n#include \"networkstatuscenterleftpane.h\"\n#include <QIcon>\n#include <QDBusConnection>\n#include <QDBusConnectionInterface>\n#include <QDBusServiceWatcher>\n\n#include \"devicePanes/devicepane.h\"\n#include \"devicePanes/wifidevicepane.h\"\n#include \"devicePanes/wireddevicepane.h\"\n#include \"devicePanes/cellularpane.h\"\n\n#include <statemanager.h>\n#include <statuscentermanager.h>\n\n#include <NetworkManagerQt/Manager>\n\nstruct NetworkStatusCenterPanePrivate {\n    NetworkStatusCenterLeftPane* leftPane;\n    QDBusServiceWatcher* nmWatcher;\n    SwitchManager* switchManager;\n\n    QStringList unis;\n    QStringList visibleUnis;\n    QMap<QString, AbstractDevicePane*> devicePanes;\n};\n\nNetworkStatusCenterPane::NetworkStatusCenterPane(SwitchManager* switchManager) :\n    StatusCenterPane(),\n    ui(new Ui::NetworkStatusCenterPane) {\n    ui->setupUi(this);\n\n    d = new NetworkStatusCenterPanePrivate();\n    d->switchManager = switchManager;\n\n    ui->menuButtonErrorPage->setVisible(StateManager::instance()->statusCenterManager()->isHamburgerMenuRequired());\n    connect(StateManager::instance()->statusCenterManager(), &StatusCenterManager::isHamburgerMenuRequiredChanged, ui->menuButtonErrorPage, &QToolButton::setVisible);\n\n    d->leftPane = new NetworkStatusCenterLeftPane();\n    connect(d->leftPane, &NetworkStatusCenterLeftPane::currentChanged, this, [ = ](int index) {\n        ui->devicesStack->setCurrentIndex(index);\n    });\n\n    ui->devicesStack->setCurrentAnimation(tStackedWidget::Lift);\n\n    d->nmWatcher = new QDBusServiceWatcher(\"org.freedesktop.NetworkManager\", QDBusConnection::systemBus());\n    connect(d->nmWatcher, &QDBusServiceWatcher::serviceRegistered, this, &NetworkStatusCenterPane::networkManagerRunning);\n    connect(d->nmWatcher, &QDBusServiceWatcher::serviceUnregistered, this, &NetworkStatusCenterPane::networkManagerGone);\n\n    if (QDBusConnection::systemBus().interface()->registeredServiceNames().value().contains(\"org.freedesktop.NetworkManager\")) {\n        networkManagerRunning();\n    } else {\n        networkManagerGone();\n    }\n\n    connect(NetworkManager::notifier(), &NetworkManager::Notifier::deviceAdded, this, &NetworkStatusCenterPane::deviceAdded);\n    connect(NetworkManager::notifier(), &NetworkManager::Notifier::deviceRemoved, this, &NetworkStatusCenterPane::deviceRemoved);\n}\n\nNetworkStatusCenterPane::~NetworkStatusCenterPane() {\n    d->leftPane->deleteLater();\n    delete d;\n    delete ui;\n}\n\nvoid NetworkStatusCenterPane::networkManagerRunning() {\n    ui->stackedWidget->setCurrentWidget(ui->activePage);\n\n    for (NetworkManager::Device::Ptr device : NetworkManager::networkInterfaces()) {\n        this->deviceAdded(device->uni());\n    }\n}\n\nvoid NetworkStatusCenterPane::networkManagerGone() {\n    QStringList unis = d->unis;\n    for (QString str : unis) {\n        this->deviceRemoved(str);\n    }\n\n    ui->stackedWidget->setCurrentWidget(ui->errorPage);\n}\n\nvoid NetworkStatusCenterPane::deviceAdded(QString uni) {\n    d->unis.append(uni);\n\n    AbstractDevicePane* devicePane;\n    NetworkManager::Device::Ptr device = NetworkManager::findNetworkInterface(uni);\n\n    switch (device->type()) {\n        case NetworkManager::Device::Wifi:\n            devicePane = new WifiDevicePane(uni);\n            static_cast<WifiDevicePane*>(devicePane)->setSwitchManager(d->switchManager);\n            break;\n        case NetworkManager::Device::Ethernet:\n            devicePane = new WiredDevicePane(uni);\n            break;\n        case NetworkManager::Device::Modem:\n            devicePane = new CellularPane(uni);\n            break;\n        default:\n            devicePane = new DevicePane(uni);\n    }\n\n    auto managedChanged = [ = ] {\n        if (device->managed() && !d->visibleUnis.contains(uni)) {\n            d->visibleUnis.append(uni);\n            d->leftPane->addItem(devicePane->leftPaneItem());\n            ui->devicesStack->addWidget(devicePane);\n        } else if (!device->managed() && d->visibleUnis.contains(uni)) {\n            d->visibleUnis.removeOne(uni);\n            d->leftPane->removeItem(devicePane->leftPaneItem());\n            ui->devicesStack->removeWidget(devicePane);\n        }\n    };\n    connect(device.data(), &NetworkManager::Device::managedChanged, this, managedChanged);\n    managedChanged();\n    d->devicePanes.insert(uni, devicePane);\n}\n\nvoid NetworkStatusCenterPane::deviceRemoved(QString uni) {\n    AbstractDevicePane* devicePane = d->devicePanes.value(uni);\n    d->unis.removeOne(uni);\n    if (d->visibleUnis.contains(uni)) {\n        d->leftPane->removeItem(devicePane->leftPaneItem());\n        ui->devicesStack->removeWidget(devicePane);\n        d->visibleUnis.removeOne(uni);\n    }\n\n    devicePane->deleteLater();\n    d->devicePanes.remove(uni);\n}\n\nQString NetworkStatusCenterPane::name() {\n    return \"NetworkManagerPane\";\n}\n\nQString NetworkStatusCenterPane::displayName() {\n    return tr(\"Network\");\n}\n\nQIcon NetworkStatusCenterPane::icon() {\n    return QIcon::fromTheme(\"preferences-system-network\");\n}\n\nQWidget* NetworkStatusCenterPane::leftPane() {\n    return d->leftPane;\n}\n\nvoid NetworkStatusCenterPane::on_menuButtonErrorPage_clicked() {\n    StateManager::statusCenterManager()->showStatusCenterHamburgerMenu();\n}\n\n\nvoid NetworkStatusCenterPane::changeEvent(QEvent* event) {\n    if (event->type() == QEvent::LanguageChange) {\n        ui->retranslateUi(this);\n        emit displayNameChanged();\n    }\n}\n"
  },
  {
    "path": "plugins/NetworkPlugin/statusCenter/networkstatuscenterpane.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef NETWORKSTATUSCENTERPANE_H\n#define NETWORKSTATUSCENTERPANE_H\n\n#include <statuscenterpane.h>\n\nnamespace Ui {\n    class NetworkStatusCenterPane;\n}\n\nclass SwitchManager;\nstruct NetworkStatusCenterPanePrivate;\nclass NetworkStatusCenterPane : public StatusCenterPane {\n        Q_OBJECT\n\n    public:\n        explicit NetworkStatusCenterPane(SwitchManager* switchManager);\n        ~NetworkStatusCenterPane();\n\n    private:\n        Ui::NetworkStatusCenterPane* ui;\n        NetworkStatusCenterPanePrivate* d;\n\n        void networkManagerRunning();\n        void networkManagerGone();\n\n        void deviceAdded(QString uni);\n        void deviceRemoved(QString uni);\n\n        // StatusCenterPane interface\n    public:\n        QString name();\n        QString displayName();\n        QIcon icon();\n        QWidget* leftPane();\n    private slots:\n        void on_menuButtonErrorPage_clicked();\n\n        // QWidget interface\n    protected:\n        void changeEvent(QEvent* event);\n};\n\n#endif // NETWORKSTATUSCENTERPANE_H\n"
  },
  {
    "path": "plugins/NetworkPlugin/statusCenter/networkstatuscenterpane.ui",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ui version=\"4.0\">\n <class>NetworkStatusCenterPane</class>\n <widget class=\"QWidget\" name=\"NetworkStatusCenterPane\">\n  <property name=\"geometry\">\n   <rect>\n    <x>0</x>\n    <y>0</y>\n    <width>615</width>\n    <height>401</height>\n   </rect>\n  </property>\n  <property name=\"windowTitle\">\n   <string notr=\"true\">Form</string>\n  </property>\n  <layout class=\"QVBoxLayout\" name=\"verticalLayout\">\n   <property name=\"spacing\">\n    <number>0</number>\n   </property>\n   <property name=\"leftMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"topMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"rightMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"bottomMargin\">\n    <number>0</number>\n   </property>\n   <item>\n    <widget class=\"QStackedWidget\" name=\"stackedWidget\">\n     <widget class=\"QWidget\" name=\"errorPage\">\n      <layout class=\"QVBoxLayout\" name=\"verticalLayout_2\">\n       <property name=\"leftMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"topMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"rightMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"bottomMargin\">\n        <number>0</number>\n       </property>\n       <item>\n        <layout class=\"QHBoxLayout\" name=\"horizontalLayout\">\n         <item>\n          <widget class=\"QToolButton\" name=\"menuButtonErrorPage\">\n           <property name=\"text\">\n            <string/>\n           </property>\n           <property name=\"icon\">\n            <iconset theme=\"application-menu\">\n             <normaloff>.</normaloff>.</iconset>\n           </property>\n           <property name=\"autoRaise\">\n            <bool>true</bool>\n           </property>\n          </widget>\n         </item>\n         <item>\n          <spacer name=\"horizontalSpacer\">\n           <property name=\"orientation\">\n            <enum>Qt::Horizontal</enum>\n           </property>\n           <property name=\"sizeHint\" stdset=\"0\">\n            <size>\n             <width>40</width>\n             <height>20</height>\n            </size>\n           </property>\n          </spacer>\n         </item>\n        </layout>\n       </item>\n       <item>\n        <spacer name=\"verticalSpacer_2\">\n         <property name=\"orientation\">\n          <enum>Qt::Vertical</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>20</width>\n           <height>40</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n       <item>\n        <widget class=\"QLabel\" name=\"label\">\n         <property name=\"font\">\n          <font>\n           <pointsize>15</pointsize>\n          </font>\n         </property>\n         <property name=\"text\">\n          <string>NetworkManager is not operational</string>\n         </property>\n         <property name=\"alignment\">\n          <set>Qt::AlignCenter</set>\n         </property>\n        </widget>\n       </item>\n       <item>\n        <widget class=\"QLabel\" name=\"label_2\">\n         <property name=\"text\">\n          <string>Contact your system administrator</string>\n         </property>\n         <property name=\"alignment\">\n          <set>Qt::AlignCenter</set>\n         </property>\n        </widget>\n       </item>\n       <item>\n        <spacer name=\"verticalSpacer\">\n         <property name=\"orientation\">\n          <enum>Qt::Vertical</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>20</width>\n           <height>40</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n      </layout>\n     </widget>\n     <widget class=\"QWidget\" name=\"activePage\">\n      <layout class=\"QVBoxLayout\" name=\"verticalLayout_3\">\n       <property name=\"leftMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"topMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"rightMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"bottomMargin\">\n        <number>0</number>\n       </property>\n       <item>\n        <widget class=\"tStackedWidget\" name=\"devicesStack\"/>\n       </item>\n      </layout>\n     </widget>\n    </widget>\n   </item>\n  </layout>\n </widget>\n <customwidgets>\n  <customwidget>\n   <class>tStackedWidget</class>\n   <extends>QStackedWidget</extends>\n   <header location=\"global\">tstackedwidget.h</header>\n   <container>1</container>\n   <slots>\n    <signal>switchingFrame(int)</signal>\n   </slots>\n  </customwidget>\n </customwidgets>\n <resources/>\n <connections/>\n</ui>\n"
  },
  {
    "path": "plugins/NetworkPlugin/statusCenter/popovers/connectionselectionpopover.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"connectionselectionpopover.h\"\n#include \"ui_connectionselectionpopover.h\"\n\nstruct ConnectionSelectionPopoverPrivate {\n    NetworkManager::Connection::List connectionList;\n};\n\nConnectionSelectionPopover::ConnectionSelectionPopover(NetworkManager::Connection::List connectionList, QWidget* parent) :\n    QWidget(parent),\n    ui(new Ui::ConnectionSelectionPopover) {\n    ui->setupUi(this);\n    d = new ConnectionSelectionPopoverPrivate();\n\n    ui->titleLabel->setBackButtonShown(true);\n\n    d->connectionList = connectionList;\n    for (NetworkManager::Connection::Ptr connection : connectionList) {\n        QListWidgetItem* item = new QListWidgetItem();\n        item->setText(connection->name());\n        ui->connectionList->addItem(item);\n    }\n}\n\nConnectionSelectionPopover::~ConnectionSelectionPopover() {\n    delete d;\n    delete ui;\n}\n\nvoid ConnectionSelectionPopover::on_titleLabel_backButtonClicked() {\n    emit reject();\n}\n\nvoid ConnectionSelectionPopover::on_connectionList_itemActivated(QListWidgetItem* item) {\n    emit accept(d->connectionList.at(ui->connectionList->row(item)));\n}\n"
  },
  {
    "path": "plugins/NetworkPlugin/statusCenter/popovers/connectionselectionpopover.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef CONNECTIONSELECTIONPOPOVER_H\n#define CONNECTIONSELECTIONPOPOVER_H\n\n#include <QWidget>\n#include <NetworkManagerQt/Connection>\n\nnamespace Ui {\n    class ConnectionSelectionPopover;\n}\n\nclass QListWidgetItem;\nstruct ConnectionSelectionPopoverPrivate;\nclass ConnectionSelectionPopover : public QWidget {\n        Q_OBJECT\n\n    public:\n        explicit ConnectionSelectionPopover(NetworkManager::Connection::List connectionList, QWidget* parent = nullptr);\n        ~ConnectionSelectionPopover();\n\n    private slots:\n        void on_titleLabel_backButtonClicked();\n\n        void on_connectionList_itemActivated(QListWidgetItem* item);\n\n    signals:\n        void reject();\n        void accept(NetworkManager::Connection::Ptr connection);\n\n    private:\n        Ui::ConnectionSelectionPopover* ui;\n        ConnectionSelectionPopoverPrivate* d;\n};\n\n#endif // CONNECTIONSELECTIONPOPOVER_H\n"
  },
  {
    "path": "plugins/NetworkPlugin/statusCenter/popovers/connectionselectionpopover.ui",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ui version=\"4.0\">\n <class>ConnectionSelectionPopover</class>\n <widget class=\"QWidget\" name=\"ConnectionSelectionPopover\">\n  <property name=\"geometry\">\n   <rect>\n    <x>0</x>\n    <y>0</y>\n    <width>400</width>\n    <height>447</height>\n   </rect>\n  </property>\n  <property name=\"windowTitle\">\n   <string notr=\"true\">Form</string>\n  </property>\n  <layout class=\"QVBoxLayout\" name=\"verticalLayout\">\n   <property name=\"spacing\">\n    <number>0</number>\n   </property>\n   <property name=\"leftMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"topMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"rightMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"bottomMargin\">\n    <number>0</number>\n   </property>\n   <item>\n    <widget class=\"tTitleLabel\" name=\"titleLabel\">\n     <property name=\"text\">\n      <string>Select Connection Profile</string>\n     </property>\n    </widget>\n   </item>\n   <item>\n    <widget class=\"QLabel\" name=\"label\">\n     <property name=\"text\">\n      <string>Select a connection profile to use</string>\n     </property>\n     <property name=\"margin\">\n      <number>9</number>\n     </property>\n    </widget>\n   </item>\n   <item>\n    <widget class=\"Line\" name=\"line\">\n     <property name=\"maximumSize\">\n      <size>\n       <width>16777215</width>\n       <height>1</height>\n      </size>\n     </property>\n     <property name=\"orientation\">\n      <enum>Qt::Horizontal</enum>\n     </property>\n    </widget>\n   </item>\n   <item>\n    <widget class=\"QListWidget\" name=\"connectionList\">\n     <property name=\"frameShape\">\n      <enum>QFrame::NoFrame</enum>\n     </property>\n    </widget>\n   </item>\n  </layout>\n </widget>\n <customwidgets>\n  <customwidget>\n   <class>tTitleLabel</class>\n   <extends>QLabel</extends>\n   <header location=\"global\">ttitlelabel.h</header>\n   <slots>\n    <signal>backButtonClicked()</signal>\n   </slots>\n  </customwidget>\n </customwidgets>\n <resources/>\n <connections/>\n</ui>\n"
  },
  {
    "path": "plugins/NetworkPlugin/statusCenter/popovers/simsettingspopover.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"simsettingspopover.h\"\n#include \"ui_simsettingspopover.h\"\n\n#include \"networkplugincommon.h\"\n#include <ModemManagerQt/Modem3Gpp>\n#include <QDBusConnection>\n#include <ttoast.h>\n\nstruct SimSettingsPopoverPrivate {\n        ModemManager::ModemDevice::Ptr modem;\n\n        enum Operation {\n            EnablePin,\n            DisablePin,\n            ChangePin\n        };\n        Operation operation;\n};\n\nSimSettingsPopover::SimSettingsPopover(ModemManager::ModemDevice::Ptr modem, QWidget* parent) :\n    QWidget(parent),\n    ui(new Ui::SimSettingsPopover) {\n    ui->setupUi(this);\n    d = new SimSettingsPopoverPrivate();\n    d->modem = modem;\n\n    ui->titleLabel->setBackButtonShown(true);\n    ui->currentPinTitleLabel->setBackButtonShown(true);\n    ui->changeSimPinTitleLabel->setBackButtonShown(true);\n    ui->callWaitingTitleLabel->setBackButtonShown(true);\n    ui->stackedWidget->setCurrentAnimation(tStackedWidget::SlideHorizontal);\n    ui->spinner->setFixedSize(SC_DPI_T(QSize(32, 32), QSize));\n\n    ui->modemImeiLabel->setText(modem->modemInterface()->equipmentIdentifier());\n    ui->callWaitingSpinner->setVisible(false);\n    ui->callWaitingSpinner->setFixedSize(SC_DPI_T(QSize(16, 16), QSize));\n\n    if (modem->sim()->uni() == \"/\") {\n        ui->modemImsiLabel->setText(tr(\"No SIM card\"));\n        ui->modemCarrierLabel->setText(tr(\"No SIM card\"));\n        ui->simSettingsWidget->setVisible(false);\n    } else {\n        ui->modemImsiLabel->setText(modem->sim()->imsi());\n        ui->modemCarrierLabel->setText(modem->sim()->operatorName());\n        ui->simSettingsWidget->setVisible(true);\n    }\n\n    prepareMainPage();\n}\n\nSimSettingsPopover::~SimSettingsPopover() {\n    delete d;\n    delete ui;\n}\n\nvoid SimSettingsPopover::on_currentSimPinAcceptButton_clicked() {\n    ui->stackedWidget->setCurrentAnimation(tStackedWidget::Fade);\n    ui->stackedWidget->setCurrentWidget(ui->spinnerPage);\n\n    QDBusPendingReply<> pendingReply;\n    switch (d->operation) {\n        case SimSettingsPopoverPrivate::EnablePin:\n            pendingReply = d->modem->sim()->enablePin(ui->currentPinBox->text(), true);\n            break;\n        case SimSettingsPopoverPrivate::DisablePin:\n            pendingReply = d->modem->sim()->enablePin(ui->currentPinBox->text(), false);\n            break;\n        case SimSettingsPopoverPrivate::ChangePin:\n            pendingReply = d->modem->sim()->changePin(ui->currentPinBox->text(), ui->changeSimPinBox->text());\n            break;\n    }\n\n    QDBusPendingCallWatcher* watcher = new QDBusPendingCallWatcher(pendingReply);\n    connect(watcher, &QDBusPendingCallWatcher::finished, this, [=] {\n        if (watcher->isError()) {\n            prepareCurrentPinPage();\n\n            QTimer::singleShot(0, [=] {\n                ui->stackedWidget->setCurrentAnimation(tStackedWidget::SlideHorizontal);\n            });\n        } else {\n            ui->stackedWidget->setCurrentAnimation(tStackedWidget::SlideHorizontal);\n            ui->stackedWidget->setCurrentWidget(ui->startPage);\n            prepareMainPage();\n        }\n    });\n}\n\nvoid SimSettingsPopover::on_titleLabel_backButtonClicked() {\n    emit dismissed();\n}\n\nvoid SimSettingsPopover::on_enableSimPinButton_clicked() {\n    d->operation = SimSettingsPopoverPrivate::EnablePin;\n    ui->currentPinTitleLabel->setText(tr(\"Enable SIM PIN\"));\n    prepareCurrentPinPage();\n}\n\nvoid SimSettingsPopover::on_disableSimPinButton_clicked() {\n    d->operation = SimSettingsPopoverPrivate::DisablePin;\n    ui->currentPinTitleLabel->setText(tr(\"Disable SIM PIN\"));\n    prepareCurrentPinPage();\n}\n\nvoid SimSettingsPopover::on_currentPinTitleLabel_backButtonClicked() {\n    if (d->operation == SimSettingsPopoverPrivate::ChangePin) {\n        ui->stackedWidget->setCurrentWidget(ui->changeSimPinPage);\n    } else {\n        ui->stackedWidget->setCurrentWidget(ui->startPage);\n    }\n}\n\nvoid SimSettingsPopover::prepareCurrentPinPage() {\n    ModemManager::UnlockRetriesMap retries;\n\n    QDBusMessage unlockRetriesMessage = QDBusMessage::createMethodCall(\"org.freedesktop.ModemManager1\", d->modem->uni(), \"org.freedesktop.DBus.Properties\", \"Get\");\n    unlockRetriesMessage.setArguments({\"org.freedesktop.ModemManager1.Modem\", \"UnlockRetries\"});\n    QDBusMessage unlockRetriesReply = QDBusConnection::systemBus().call(unlockRetriesMessage);\n    QDBusArgument unlockRetriesArg = unlockRetriesReply.arguments().first().value<QDBusVariant>().variant().value<QDBusArgument>();\n    unlockRetriesArg >> retries;\n\n    ui->currentPinPageOperatorName->setText(NetworkPluginCommon::operatorNameForModem(d->modem));\n    ui->pinRetryCount->setText(tr(\"You have %n remaining tries\", nullptr, retries.value(MM_MODEM_LOCK_SIM_PIN)));\n    ui->stackedWidget->setCurrentWidget(ui->currentPinPage);\n}\n\nvoid SimSettingsPopover::prepareMainPage() {\n    ModemManager::Modem3gpp::Ptr modem3gpp(new ModemManager::Modem3gpp(d->modem->uni()));\n    bool simLockEnabled = modem3gpp->enabledFacilityLocks() & MM_MODEM_3GPP_FACILITY_SIM;\n\n    ui->enableSimPinButton->setVisible(!simLockEnabled);\n    ui->disableSimPinButton->setVisible(simLockEnabled);\n}\n\nvoid SimSettingsPopover::on_changeSimPinTitleLabel_backButtonClicked() {\n    ui->stackedWidget->setCurrentWidget(ui->startPage);\n}\n\nvoid SimSettingsPopover::on_changeSimPinAcceptButton_clicked() {\n    prepareCurrentPinPage();\n}\n\nvoid SimSettingsPopover::on_changeSimPinButton_clicked() {\n    d->operation = SimSettingsPopoverPrivate::ChangePin;\n    ui->currentPinTitleLabel->setText(tr(\"Change SIM PIN\"));\n    ui->changeSimPinOperatorName->setText(NetworkPluginCommon::operatorNameForModem(d->modem));\n    ui->stackedWidget->setCurrentWidget(ui->changeSimPinPage);\n}\n\nvoid SimSettingsPopover::on_enableCallWaitingSwitch_toggled(bool checked) {\n    this->setEnabled(false);\n    ui->callWaitingSpinner->setVisible(true);\n\n    QString uni = d->modem->uni();\n    QDBusMessage message = QDBusMessage::createMethodCall(\"org.freedesktop.ModemManager1\", uni, \"org.freedesktop.ModemManager1.Modem.Voice\", \"CallWaitingSetup\");\n    message.setArguments({checked});\n\n    QDBusPendingCallWatcher* watcher = new QDBusPendingCallWatcher(QDBusConnection::systemBus().asyncCall(message));\n    connect(watcher, &QDBusPendingCallWatcher::finished, this, [=] {\n        this->setEnabled(true);\n        ui->callWaitingSpinner->setVisible(false);\n        watcher->deleteLater();\n    });\n}\n\nvoid SimSettingsPopover::on_callWaitingTitleLabel_backButtonClicked() {\n    ui->stackedWidget->setCurrentWidget(ui->startPage);\n}\n\nvoid SimSettingsPopover::on_callWaitingButton_clicked() {\n    ui->stackedWidget->setCurrentWidget(ui->spinnerPage);\n\n    QString uni = d->modem->uni();\n    QDBusMessage message = QDBusMessage::createMethodCall(\"org.freedesktop.ModemManager1\", uni, \"org.freedesktop.ModemManager1.Modem.Voice\", \"CallWaitingQuery\");\n\n    QDBusPendingCallWatcher* watcher = new QDBusPendingCallWatcher(QDBusConnection::systemBus().asyncCall(message));\n    connect(watcher, &QDBusPendingCallWatcher::finished, this, [=] {\n        QSignalBlocker blocker(ui->enableCallWaitingSwitch);\n\n        if (watcher->isError()) {\n            ui->stackedWidget->setCurrentWidget(ui->startPage);\n\n            tToast* toast = new tToast(this);\n            toast->setTitle(tr(\"Error\"));\n            toast->setText(tr(\"Couldn't get current Call Waiting status from carrier\"));\n            toast->show(this);\n        } else {\n            ui->stackedWidget->setCurrentWidget(ui->callWaitingPage);\n            ui->enableCallWaitingSwitch->setChecked(watcher->reply().arguments().first().toBool());\n        }\n        watcher->deleteLater();\n    });\n}\n"
  },
  {
    "path": "plugins/NetworkPlugin/statusCenter/popovers/simsettingspopover.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef SIMSETTINGSPOPOVER_H\n#define SIMSETTINGSPOPOVER_H\n\n#include <ModemManagerQt/ModemDevice>\n#include <QWidget>\n\nnamespace Ui {\n    class SimSettingsPopover;\n}\n\nstruct SimSettingsPopoverPrivate;\nclass SimSettingsPopover : public QWidget {\n        Q_OBJECT\n\n    public:\n        explicit SimSettingsPopover(ModemManager::ModemDevice::Ptr modem, QWidget* parent = nullptr);\n        ~SimSettingsPopover();\n\n    private slots:\n        void on_currentSimPinAcceptButton_clicked();\n\n        void on_titleLabel_backButtonClicked();\n\n        void on_enableSimPinButton_clicked();\n\n        void on_disableSimPinButton_clicked();\n\n        void on_currentPinTitleLabel_backButtonClicked();\n\n        void on_changeSimPinTitleLabel_backButtonClicked();\n\n        void on_changeSimPinAcceptButton_clicked();\n\n        void on_changeSimPinButton_clicked();\n\n        void on_enableCallWaitingSwitch_toggled(bool checked);\n\n        void on_callWaitingTitleLabel_backButtonClicked();\n\n        void on_callWaitingButton_clicked();\n\n    signals:\n        void dismissed();\n\n    private:\n        Ui::SimSettingsPopover* ui;\n        SimSettingsPopoverPrivate* d;\n\n        void prepareCurrentPinPage();\n        void prepareMainPage();\n};\n\n#endif // SIMSETTINGSPOPOVER_H\n"
  },
  {
    "path": "plugins/NetworkPlugin/statusCenter/popovers/simsettingspopover.ui",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ui version=\"4.0\">\n <class>SimSettingsPopover</class>\n <widget class=\"QWidget\" name=\"SimSettingsPopover\">\n  <property name=\"geometry\">\n   <rect>\n    <x>0</x>\n    <y>0</y>\n    <width>720</width>\n    <height>806</height>\n   </rect>\n  </property>\n  <property name=\"windowTitle\">\n   <string notr=\"true\">Form</string>\n  </property>\n  <layout class=\"QVBoxLayout\" name=\"verticalLayout\">\n   <property name=\"spacing\">\n    <number>0</number>\n   </property>\n   <property name=\"leftMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"topMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"rightMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"bottomMargin\">\n    <number>0</number>\n   </property>\n   <item>\n    <widget class=\"tStackedWidget\" name=\"stackedWidget\">\n     <property name=\"currentIndex\">\n      <number>0</number>\n     </property>\n     <widget class=\"QWidget\" name=\"startPage\">\n      <layout class=\"QVBoxLayout\" name=\"verticalLayout_2\">\n       <property name=\"spacing\">\n        <number>0</number>\n       </property>\n       <property name=\"leftMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"topMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"rightMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"bottomMargin\">\n        <number>0</number>\n       </property>\n       <item>\n        <widget class=\"tTitleLabel\" name=\"titleLabel\">\n         <property name=\"text\">\n          <string>Modem Settings</string>\n         </property>\n        </widget>\n       </item>\n       <item>\n        <widget class=\"QWidget\" name=\"simSettingsWidget\" native=\"true\">\n         <layout class=\"QVBoxLayout\" name=\"verticalLayout_4\">\n          <property name=\"spacing\">\n           <number>0</number>\n          </property>\n          <property name=\"leftMargin\">\n           <number>0</number>\n          </property>\n          <property name=\"topMargin\">\n           <number>0</number>\n          </property>\n          <property name=\"rightMargin\">\n           <number>0</number>\n          </property>\n          <property name=\"bottomMargin\">\n           <number>0</number>\n          </property>\n          <item>\n           <widget class=\"QLabel\" name=\"label\">\n            <property name=\"font\">\n             <font>\n              <weight>75</weight>\n              <bold>true</bold>\n             </font>\n            </property>\n            <property name=\"text\">\n             <string>SIM PIN</string>\n            </property>\n            <property name=\"margin\">\n             <number>9</number>\n            </property>\n           </widget>\n          </item>\n          <item>\n           <widget class=\"QPushButton\" name=\"enableSimPinButton\">\n            <property name=\"text\">\n             <string>Enable SIM PIN</string>\n            </property>\n           </widget>\n          </item>\n          <item>\n           <widget class=\"QPushButton\" name=\"disableSimPinButton\">\n            <property name=\"text\">\n             <string>Disable SIM PIN</string>\n            </property>\n           </widget>\n          </item>\n          <item>\n           <widget class=\"QPushButton\" name=\"changeSimPinButton\">\n            <property name=\"text\">\n             <string>Change SIM PIN</string>\n            </property>\n           </widget>\n          </item>\n         </layout>\n        </widget>\n       </item>\n       <item>\n        <widget class=\"QLabel\" name=\"label_8\">\n         <property name=\"font\">\n          <font>\n           <weight>75</weight>\n           <bold>true</bold>\n          </font>\n         </property>\n         <property name=\"text\">\n          <string>CALLS</string>\n         </property>\n         <property name=\"margin\">\n          <number>9</number>\n         </property>\n        </widget>\n       </item>\n       <item>\n        <widget class=\"QPushButton\" name=\"callWaitingButton\">\n         <property name=\"text\">\n          <string>Call Waiting</string>\n         </property>\n        </widget>\n       </item>\n       <item>\n        <layout class=\"QGridLayout\" name=\"gridLayout_4\">\n         <property name=\"leftMargin\">\n          <number>9</number>\n         </property>\n         <property name=\"topMargin\">\n          <number>9</number>\n         </property>\n         <property name=\"rightMargin\">\n          <number>9</number>\n         </property>\n         <property name=\"bottomMargin\">\n          <number>9</number>\n         </property>\n         <property name=\"spacing\">\n          <number>6</number>\n         </property>\n         <item row=\"2\" column=\"1\">\n          <widget class=\"QLabel\" name=\"modemImsiLabel\">\n           <property name=\"text\">\n            <string notr=\"true\">TextLabel</string>\n           </property>\n           <property name=\"textInteractionFlags\">\n            <set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse</set>\n           </property>\n          </widget>\n         </item>\n         <item row=\"1\" column=\"1\">\n          <widget class=\"QLabel\" name=\"modemImeiLabel\">\n           <property name=\"sizePolicy\">\n            <sizepolicy hsizetype=\"Expanding\" vsizetype=\"Preferred\">\n             <horstretch>0</horstretch>\n             <verstretch>0</verstretch>\n            </sizepolicy>\n           </property>\n           <property name=\"text\">\n            <string notr=\"true\">TextLabel</string>\n           </property>\n           <property name=\"textInteractionFlags\">\n            <set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse</set>\n           </property>\n          </widget>\n         </item>\n         <item row=\"2\" column=\"0\">\n          <widget class=\"QLabel\" name=\"label_6\">\n           <property name=\"text\">\n            <string>IMSI</string>\n           </property>\n          </widget>\n         </item>\n         <item row=\"1\" column=\"0\">\n          <widget class=\"QLabel\" name=\"label_5\">\n           <property name=\"text\">\n            <string>IMEI</string>\n           </property>\n          </widget>\n         </item>\n         <item row=\"0\" column=\"0\" colspan=\"2\">\n          <widget class=\"QLabel\" name=\"label_2\">\n           <property name=\"font\">\n            <font>\n             <weight>75</weight>\n             <bold>true</bold>\n            </font>\n           </property>\n           <property name=\"text\">\n            <string>MODEM INFORMATION</string>\n           </property>\n          </widget>\n         </item>\n         <item row=\"3\" column=\"0\">\n          <widget class=\"QLabel\" name=\"label_7\">\n           <property name=\"text\">\n            <string>Carrier</string>\n           </property>\n          </widget>\n         </item>\n         <item row=\"3\" column=\"1\">\n          <widget class=\"QLabel\" name=\"modemCarrierLabel\">\n           <property name=\"text\">\n            <string notr=\"true\">TextLabel</string>\n           </property>\n           <property name=\"textInteractionFlags\">\n            <set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse</set>\n           </property>\n          </widget>\n         </item>\n        </layout>\n       </item>\n       <item>\n        <spacer name=\"verticalSpacer\">\n         <property name=\"orientation\">\n          <enum>Qt::Vertical</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>20</width>\n           <height>40</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n      </layout>\n     </widget>\n     <widget class=\"QWidget\" name=\"changeSimPinPage\">\n      <layout class=\"QGridLayout\" name=\"gridLayout_3\">\n       <property name=\"leftMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"topMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"rightMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"bottomMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"spacing\">\n        <number>0</number>\n       </property>\n       <item row=\"0\" column=\"0\" colspan=\"3\">\n        <widget class=\"tTitleLabel\" name=\"changeSimPinTitleLabel\">\n         <property name=\"text\">\n          <string notr=\"true\">Change SIM PIN</string>\n         </property>\n        </widget>\n       </item>\n       <item row=\"1\" column=\"1\">\n        <spacer name=\"verticalSpacer_8\">\n         <property name=\"orientation\">\n          <enum>Qt::Vertical</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>20</width>\n           <height>297</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n       <item row=\"2\" column=\"0\">\n        <spacer name=\"horizontalSpacer_5\">\n         <property name=\"orientation\">\n          <enum>Qt::Horizontal</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>107</width>\n           <height>20</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n       <item row=\"2\" column=\"1\">\n        <widget class=\"QFrame\" name=\"lockFrame_2\">\n         <property name=\"minimumSize\">\n          <size>\n           <width>500</width>\n           <height>0</height>\n          </size>\n         </property>\n         <property name=\"autoFillBackground\">\n          <bool>false</bool>\n         </property>\n         <property name=\"frameShape\">\n          <enum>QFrame::NoFrame</enum>\n         </property>\n         <property name=\"frameShadow\">\n          <enum>QFrame::Plain</enum>\n         </property>\n         <property name=\"lineWidth\">\n          <number>0</number>\n         </property>\n         <layout class=\"QVBoxLayout\" name=\"verticalLayout_7\">\n          <item>\n           <widget class=\"QLabel\" name=\"changeSimPinOperatorName\">\n            <property name=\"font\">\n             <font>\n              <pointsize>15</pointsize>\n             </font>\n            </property>\n            <property name=\"text\">\n             <string notr=\"true\">Username</string>\n            </property>\n            <property name=\"buddy\">\n             <cstring></cstring>\n            </property>\n           </widget>\n          </item>\n          <item>\n           <widget class=\"QLabel\" name=\"label_4\">\n            <property name=\"font\">\n             <font>\n              <pointsize>20</pointsize>\n             </font>\n            </property>\n            <property name=\"text\">\n             <string>Enter the new SIM PIN</string>\n            </property>\n           </widget>\n          </item>\n          <item>\n           <spacer name=\"verticalSpacer_9\">\n            <property name=\"orientation\">\n             <enum>Qt::Vertical</enum>\n            </property>\n            <property name=\"sizeType\">\n             <enum>QSizePolicy::Fixed</enum>\n            </property>\n            <property name=\"sizeHint\" stdset=\"0\">\n             <size>\n              <width>20</width>\n              <height>40</height>\n             </size>\n            </property>\n           </spacer>\n          </item>\n          <item>\n           <layout class=\"QHBoxLayout\" name=\"horizontalLayout_9\">\n            <property name=\"bottomMargin\">\n             <number>0</number>\n            </property>\n            <item>\n             <widget class=\"QWidget\" name=\"networkKeyContainer_2\" native=\"true\">\n              <property name=\"autoFillBackground\">\n               <bool>true</bool>\n              </property>\n              <layout class=\"QHBoxLayout\" name=\"horizontalLayout_2\">\n               <property name=\"leftMargin\">\n                <number>0</number>\n               </property>\n               <property name=\"topMargin\">\n                <number>0</number>\n               </property>\n               <property name=\"rightMargin\">\n                <number>0</number>\n               </property>\n               <property name=\"bottomMargin\">\n                <number>0</number>\n               </property>\n               <item>\n                <widget class=\"QLineEdit\" name=\"changeSimPinBox\">\n                 <property name=\"font\">\n                  <font>\n                   <pointsize>30</pointsize>\n                  </font>\n                 </property>\n                 <property name=\"frame\">\n                  <bool>false</bool>\n                 </property>\n                 <property name=\"echoMode\">\n                  <enum>QLineEdit::Password</enum>\n                 </property>\n                 <property name=\"alignment\">\n                  <set>Qt::AlignCenter</set>\n                 </property>\n                 <property name=\"clearButtonEnabled\">\n                  <bool>false</bool>\n                 </property>\n                </widget>\n               </item>\n              </layout>\n             </widget>\n            </item>\n            <item>\n             <widget class=\"QPushButton\" name=\"changeSimPinAcceptButton\">\n              <property name=\"sizePolicy\">\n               <sizepolicy hsizetype=\"Preferred\" vsizetype=\"Preferred\">\n                <horstretch>0</horstretch>\n                <verstretch>0</verstretch>\n               </sizepolicy>\n              </property>\n              <property name=\"text\">\n               <string/>\n              </property>\n              <property name=\"icon\">\n               <iconset theme=\"go-next\">\n                <normaloff>.</normaloff>.</iconset>\n              </property>\n              <property name=\"default\">\n               <bool>false</bool>\n              </property>\n              <property name=\"flat\">\n               <bool>true</bool>\n              </property>\n             </widget>\n            </item>\n           </layout>\n          </item>\n         </layout>\n        </widget>\n       </item>\n       <item row=\"2\" column=\"2\">\n        <spacer name=\"horizontalSpacer_6\">\n         <property name=\"orientation\">\n          <enum>Qt::Horizontal</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>107</width>\n           <height>20</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n       <item row=\"3\" column=\"1\">\n        <spacer name=\"verticalSpacer_6\">\n         <property name=\"orientation\">\n          <enum>Qt::Vertical</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>20</width>\n           <height>297</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n      </layout>\n     </widget>\n     <widget class=\"QWidget\" name=\"currentPinPage\">\n      <layout class=\"QGridLayout\" name=\"gridLayout\">\n       <property name=\"leftMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"topMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"rightMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"bottomMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"spacing\">\n        <number>0</number>\n       </property>\n       <item row=\"2\" column=\"0\">\n        <spacer name=\"horizontalSpacer\">\n         <property name=\"orientation\">\n          <enum>Qt::Horizontal</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>107</width>\n           <height>20</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n       <item row=\"2\" column=\"1\">\n        <widget class=\"QFrame\" name=\"lockFrame\">\n         <property name=\"minimumSize\">\n          <size>\n           <width>500</width>\n           <height>0</height>\n          </size>\n         </property>\n         <property name=\"autoFillBackground\">\n          <bool>false</bool>\n         </property>\n         <property name=\"frameShape\">\n          <enum>QFrame::NoFrame</enum>\n         </property>\n         <property name=\"frameShadow\">\n          <enum>QFrame::Plain</enum>\n         </property>\n         <property name=\"lineWidth\">\n          <number>0</number>\n         </property>\n         <layout class=\"QVBoxLayout\" name=\"verticalLayout_6\">\n          <item>\n           <widget class=\"QLabel\" name=\"currentPinPageOperatorName\">\n            <property name=\"font\">\n             <font>\n              <pointsize>15</pointsize>\n             </font>\n            </property>\n            <property name=\"text\">\n             <string notr=\"true\">Username</string>\n            </property>\n            <property name=\"buddy\">\n             <cstring></cstring>\n            </property>\n           </widget>\n          </item>\n          <item>\n           <widget class=\"QLabel\" name=\"label_3\">\n            <property name=\"font\">\n             <font>\n              <pointsize>20</pointsize>\n             </font>\n            </property>\n            <property name=\"text\">\n             <string>Enter the current SIM PIN</string>\n            </property>\n           </widget>\n          </item>\n          <item>\n           <widget class=\"QLabel\" name=\"pinRetryCount\">\n            <property name=\"enabled\">\n             <bool>false</bool>\n            </property>\n            <property name=\"text\">\n             <string notr=\"true\">You have 3 remaining tries</string>\n            </property>\n           </widget>\n          </item>\n          <item>\n           <spacer name=\"verticalSpacer_7\">\n            <property name=\"orientation\">\n             <enum>Qt::Vertical</enum>\n            </property>\n            <property name=\"sizeType\">\n             <enum>QSizePolicy::Fixed</enum>\n            </property>\n            <property name=\"sizeHint\" stdset=\"0\">\n             <size>\n              <width>20</width>\n              <height>40</height>\n             </size>\n            </property>\n           </spacer>\n          </item>\n          <item>\n           <layout class=\"QHBoxLayout\" name=\"horizontalLayout_8\">\n            <property name=\"bottomMargin\">\n             <number>0</number>\n            </property>\n            <item>\n             <widget class=\"QWidget\" name=\"networkKeyContainer\" native=\"true\">\n              <property name=\"autoFillBackground\">\n               <bool>true</bool>\n              </property>\n              <layout class=\"QHBoxLayout\" name=\"horizontalLayout\">\n               <property name=\"leftMargin\">\n                <number>0</number>\n               </property>\n               <property name=\"topMargin\">\n                <number>0</number>\n               </property>\n               <property name=\"rightMargin\">\n                <number>0</number>\n               </property>\n               <property name=\"bottomMargin\">\n                <number>0</number>\n               </property>\n               <item>\n                <widget class=\"QLineEdit\" name=\"currentPinBox\">\n                 <property name=\"font\">\n                  <font>\n                   <pointsize>30</pointsize>\n                  </font>\n                 </property>\n                 <property name=\"frame\">\n                  <bool>false</bool>\n                 </property>\n                 <property name=\"echoMode\">\n                  <enum>QLineEdit::Password</enum>\n                 </property>\n                 <property name=\"alignment\">\n                  <set>Qt::AlignCenter</set>\n                 </property>\n                 <property name=\"clearButtonEnabled\">\n                  <bool>false</bool>\n                 </property>\n                </widget>\n               </item>\n              </layout>\n             </widget>\n            </item>\n            <item>\n             <widget class=\"QPushButton\" name=\"currentSimPinAcceptButton\">\n              <property name=\"sizePolicy\">\n               <sizepolicy hsizetype=\"Preferred\" vsizetype=\"Preferred\">\n                <horstretch>0</horstretch>\n                <verstretch>0</verstretch>\n               </sizepolicy>\n              </property>\n              <property name=\"text\">\n               <string/>\n              </property>\n              <property name=\"icon\">\n               <iconset theme=\"go-next\">\n                <normaloff>.</normaloff>.</iconset>\n              </property>\n              <property name=\"default\">\n               <bool>false</bool>\n              </property>\n              <property name=\"flat\">\n               <bool>true</bool>\n              </property>\n             </widget>\n            </item>\n           </layout>\n          </item>\n         </layout>\n        </widget>\n       </item>\n       <item row=\"1\" column=\"1\">\n        <spacer name=\"verticalSpacer_2\">\n         <property name=\"orientation\">\n          <enum>Qt::Vertical</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>20</width>\n           <height>286</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n       <item row=\"2\" column=\"2\">\n        <spacer name=\"horizontalSpacer_2\">\n         <property name=\"orientation\">\n          <enum>Qt::Horizontal</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>107</width>\n           <height>20</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n       <item row=\"3\" column=\"1\">\n        <spacer name=\"verticalSpacer_3\">\n         <property name=\"orientation\">\n          <enum>Qt::Vertical</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>20</width>\n           <height>285</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n       <item row=\"0\" column=\"0\" colspan=\"3\">\n        <widget class=\"tTitleLabel\" name=\"currentPinTitleLabel\">\n         <property name=\"text\">\n          <string notr=\"true\">Activate SIM PIN</string>\n         </property>\n        </widget>\n       </item>\n      </layout>\n     </widget>\n     <widget class=\"QWidget\" name=\"spinnerPage\">\n      <layout class=\"QGridLayout\" name=\"gridLayout_2\">\n       <item row=\"0\" column=\"1\">\n        <spacer name=\"verticalSpacer_4\">\n         <property name=\"orientation\">\n          <enum>Qt::Vertical</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>20</width>\n           <height>374</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n       <item row=\"1\" column=\"0\">\n        <spacer name=\"horizontalSpacer_3\">\n         <property name=\"orientation\">\n          <enum>Qt::Horizontal</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>331</width>\n           <height>20</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n       <item row=\"1\" column=\"1\">\n        <widget class=\"tCircularSpinner\" name=\"spinner\" native=\"true\"/>\n       </item>\n       <item row=\"1\" column=\"2\">\n        <spacer name=\"horizontalSpacer_4\">\n         <property name=\"orientation\">\n          <enum>Qt::Horizontal</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>330</width>\n           <height>20</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n       <item row=\"2\" column=\"1\">\n        <spacer name=\"verticalSpacer_5\">\n         <property name=\"orientation\">\n          <enum>Qt::Vertical</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>20</width>\n           <height>373</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n      </layout>\n     </widget>\n     <widget class=\"QWidget\" name=\"callWaitingPage\">\n      <layout class=\"QVBoxLayout\" name=\"verticalLayout_3\">\n       <property name=\"spacing\">\n        <number>0</number>\n       </property>\n       <property name=\"leftMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"topMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"rightMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"bottomMargin\">\n        <number>0</number>\n       </property>\n       <item>\n        <widget class=\"tTitleLabel\" name=\"callWaitingTitleLabel\">\n         <property name=\"text\">\n          <string>Call Waiting</string>\n         </property>\n        </widget>\n       </item>\n       <item>\n        <layout class=\"QGridLayout\" name=\"gridLayout_5\">\n         <property name=\"leftMargin\">\n          <number>9</number>\n         </property>\n         <property name=\"topMargin\">\n          <number>9</number>\n         </property>\n         <property name=\"rightMargin\">\n          <number>9</number>\n         </property>\n         <property name=\"bottomMargin\">\n          <number>9</number>\n         </property>\n         <property name=\"spacing\">\n          <number>6</number>\n         </property>\n         <item row=\"0\" column=\"2\">\n          <widget class=\"tSwitch\" name=\"enableCallWaitingSwitch\">\n           <property name=\"text\">\n            <string notr=\"true\">EnableCallWaiting</string>\n           </property>\n          </widget>\n         </item>\n         <item row=\"0\" column=\"0\">\n          <widget class=\"QLabel\" name=\"label_10\">\n           <property name=\"sizePolicy\">\n            <sizepolicy hsizetype=\"Expanding\" vsizetype=\"Preferred\">\n             <horstretch>0</horstretch>\n             <verstretch>0</verstretch>\n            </sizepolicy>\n           </property>\n           <property name=\"text\">\n            <string>Enable Call Waiting</string>\n           </property>\n          </widget>\n         </item>\n         <item row=\"1\" column=\"0\" colspan=\"3\">\n          <widget class=\"QLabel\" name=\"label_9\">\n           <property name=\"text\">\n            <string>Call Waiting allows you to receive calls while another call is currently active.</string>\n           </property>\n          </widget>\n         </item>\n         <item row=\"0\" column=\"1\">\n          <widget class=\"tCircularSpinner\" name=\"callWaitingSpinner\" native=\"true\"/>\n         </item>\n        </layout>\n       </item>\n       <item>\n        <spacer name=\"verticalSpacer_10\">\n         <property name=\"orientation\">\n          <enum>Qt::Vertical</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>20</width>\n           <height>720</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n      </layout>\n     </widget>\n    </widget>\n   </item>\n  </layout>\n </widget>\n <customwidgets>\n  <customwidget>\n   <class>tTitleLabel</class>\n   <extends>QLabel</extends>\n   <header location=\"global\">ttitlelabel.h</header>\n   <slots>\n    <signal>backButtonClicked()</signal>\n   </slots>\n  </customwidget>\n  <customwidget>\n   <class>tStackedWidget</class>\n   <extends>QStackedWidget</extends>\n   <header location=\"global\">tstackedwidget.h</header>\n   <container>1</container>\n   <slots>\n    <signal>switchingFrame(int)</signal>\n   </slots>\n  </customwidget>\n  <customwidget>\n   <class>tSwitch</class>\n   <extends>QPushButton</extends>\n   <header location=\"global\">tswitch.h</header>\n  </customwidget>\n  <customwidget>\n   <class>tCircularSpinner</class>\n   <extends>QWidget</extends>\n   <header location=\"global\">tcircularspinner.h</header>\n   <container>1</container>\n  </customwidget>\n </customwidgets>\n <resources/>\n <connections/>\n</ui>\n"
  },
  {
    "path": "plugins/NetworkPlugin/statusCenter/popovers/tetheringsettingspopover.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"tetheringsettingspopover.h\"\n#include \"ui_tetheringsettingspopover.h\"\n\n#include <terrorflash.h>\n#include <QHostInfo>\n#include <tsettings.h>\n\nstruct TetheringSettingsPopoverPrivate {\n    tSettings settings;\n};\n\nTetheringSettingsPopover::TetheringSettingsPopover(QWidget* parent) :\n    QWidget(parent),\n    ui(new Ui::TetheringSettingsPopover) {\n    ui->setupUi(this);\n    d = new TetheringSettingsPopoverPrivate();\n\n    ui->titleLabel->setBackButtonShown(true);\n\n    QString ssid = d->settings.value(\"NetworkPlugin/tethering.ssid\").toString();\n    ssid = ssid.replace(\"$hostname\", QHostInfo::localHostName());\n    ui->ssidBox->setText(ssid);\n    ui->keyBox->setText(d->settings.value(\"NetworkPlugin/tethering.key\").toString());\n}\n\nTetheringSettingsPopover::~TetheringSettingsPopover() {\n    delete ui;\n    delete d;\n}\n\nvoid TetheringSettingsPopover::on_ssidBox_textChanged(const QString& arg1) {\n    QString ssid = arg1;\n    if (arg1.isEmpty()) {\n        ui->ssidBox->setText(QHostInfo::localHostName());\n        ssid = QHostInfo::localHostName();\n    }\n\n    d->settings.setValue(\"NetworkPlugin/tethering.ssid\", ssid);\n}\n\nvoid TetheringSettingsPopover::on_keyBox_textChanged(const QString& arg1) {\n    if (arg1.length() < 8) {\n        tErrorFlash::flashError(ui->keyBox);\n        ui->keyError->setVisible(true);\n        ui->keyError->setText(tr(\"Network key needs to be at least 8 characters long\"));\n        return;\n    }\n\n    ui->keyError->setVisible(false);\n\n    d->settings.setValue(\"NetworkPlugin/tethering.key\", arg1);\n}\n\nvoid TetheringSettingsPopover::on_titleLabel_backButtonClicked() {\n    emit done();\n}\n"
  },
  {
    "path": "plugins/NetworkPlugin/statusCenter/popovers/tetheringsettingspopover.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef TETHERINGSETTINGSPOPOVER_H\n#define TETHERINGSETTINGSPOPOVER_H\n\n#include <QWidget>\n\nnamespace Ui {\n    class TetheringSettingsPopover;\n}\n\nstruct TetheringSettingsPopoverPrivate;\nclass TetheringSettingsPopover : public QWidget {\n        Q_OBJECT\n\n    public:\n        explicit TetheringSettingsPopover(QWidget* parent = nullptr);\n        ~TetheringSettingsPopover();\n\n    signals:\n        void done();\n\n    private slots:\n        void on_ssidBox_textChanged(const QString& arg1);\n\n        void on_keyBox_textChanged(const QString& arg1);\n\n        void on_titleLabel_backButtonClicked();\n\n    private:\n        Ui::TetheringSettingsPopover* ui;\n        TetheringSettingsPopoverPrivate* d;\n};\n\n#endif // TETHERINGSETTINGSPOPOVER_H\n"
  },
  {
    "path": "plugins/NetworkPlugin/statusCenter/popovers/tetheringsettingspopover.ui",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ui version=\"4.0\">\n <class>TetheringSettingsPopover</class>\n <widget class=\"QWidget\" name=\"TetheringSettingsPopover\">\n  <property name=\"geometry\">\n   <rect>\n    <x>0</x>\n    <y>0</y>\n    <width>503</width>\n    <height>500</height>\n   </rect>\n  </property>\n  <property name=\"windowTitle\">\n   <string notr=\"true\">Form</string>\n  </property>\n  <layout class=\"QVBoxLayout\" name=\"verticalLayout\">\n   <property name=\"spacing\">\n    <number>0</number>\n   </property>\n   <property name=\"leftMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"topMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"rightMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"bottomMargin\">\n    <number>0</number>\n   </property>\n   <item>\n    <widget class=\"tTitleLabel\" name=\"titleLabel\">\n     <property name=\"text\">\n      <string>Tethering Settings</string>\n     </property>\n    </widget>\n   </item>\n   <item>\n    <widget class=\"QScrollArea\" name=\"scrollArea\">\n     <property name=\"frameShape\">\n      <enum>QFrame::NoFrame</enum>\n     </property>\n     <property name=\"widgetResizable\">\n      <bool>true</bool>\n     </property>\n     <widget class=\"QWidget\" name=\"scrollAreaWidgetContents\">\n      <property name=\"geometry\">\n       <rect>\n        <x>0</x>\n        <y>0</y>\n        <width>503</width>\n        <height>483</height>\n       </rect>\n      </property>\n      <layout class=\"QGridLayout\" name=\"gridLayout\">\n       <item row=\"2\" column=\"1\">\n        <widget class=\"QLineEdit\" name=\"keyBox\"/>\n       </item>\n       <item row=\"1\" column=\"0\">\n        <widget class=\"QLabel\" name=\"label_2\">\n         <property name=\"text\">\n          <string>SSID</string>\n         </property>\n        </widget>\n       </item>\n       <item row=\"1\" column=\"1\">\n        <widget class=\"QLineEdit\" name=\"ssidBox\"/>\n       </item>\n       <item row=\"0\" column=\"0\" colspan=\"2\">\n        <widget class=\"QLabel\" name=\"label\">\n         <property name=\"text\">\n          <string>These settings will be used to set up a Wi-Fi network that other devices can connect to when tethering is enabled.</string>\n         </property>\n         <property name=\"wordWrap\">\n          <bool>true</bool>\n         </property>\n        </widget>\n       </item>\n       <item row=\"4\" column=\"0\">\n        <spacer name=\"verticalSpacer\">\n         <property name=\"orientation\">\n          <enum>Qt::Vertical</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>20</width>\n           <height>0</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n       <item row=\"2\" column=\"0\">\n        <widget class=\"QLabel\" name=\"label_3\">\n         <property name=\"text\">\n          <string>Network Key</string>\n         </property>\n        </widget>\n       </item>\n       <item row=\"3\" column=\"1\">\n        <widget class=\"QLabel\" name=\"keyError\">\n         <property name=\"text\">\n          <string notr=\"true\"/>\n         </property>\n        </widget>\n       </item>\n      </layout>\n     </widget>\n    </widget>\n   </item>\n  </layout>\n </widget>\n <customwidgets>\n  <customwidget>\n   <class>tTitleLabel</class>\n   <extends>QLabel</extends>\n   <header location=\"global\">ttitlelabel.h</header>\n   <slots>\n    <signal>backButtonClicked()</signal>\n   </slots>\n  </customwidget>\n </customwidgets>\n <resources/>\n <connections/>\n</ui>\n"
  },
  {
    "path": "plugins/NetworkPlugin/statusCenter/popovers/unlockmodempopover.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"unlockmodempopover.h\"\n#include \"ui_unlockmodempopover.h\"\n\n#include \"networkplugincommon.h\"\n#include <QDBusConnection>\n#include <QDBusPendingCallWatcher>\n#include <terrorflash.h>\n\nstruct UnlockModemPopoverPrivate {\n        ModemManager::ModemDevice::Ptr modem;\n};\n\nUnlockModemPopover::UnlockModemPopover(ModemManager::ModemDevice::Ptr modem, QWidget* parent) :\n    QWidget(parent),\n    ui(new Ui::UnlockModemPopover) {\n    ui->setupUi(this);\n    d = new UnlockModemPopoverPrivate();\n\n    d->modem = modem;\n    updatePage();\n\n    ui->simPinTitleLabel->setBackButtonShown(true);\n    ui->simPukTitleLabel->setBackButtonShown(true);\n    ui->spinner->setFixedSize(SC_DPI_T(QSize(32, 32), QSize));\n    ui->stackedWidget->setCurrentAnimation(tStackedWidget::Fade);\n    ui->simPukContainer->setFixedWidth(SC_DPI(600));\n\n    ui->simPukWarning->setState(tStatusFrame::Warning);\n    ui->simPukWarning->setTitle(tr(\"Don't guess the PUK!\"));\n    ui->simPukWarning->setText(tr(\"Once you exhaust your attempts, the SIM card will be blocked forever.\\n\\nYou'll need to contact your carrier for a new SIM card.\"));\n}\n\nUnlockModemPopover::~UnlockModemPopover() {\n    delete d;\n    delete ui;\n}\n\nvoid UnlockModemPopover::updatePage() {\n    MMModemLock unlockRequired = d->modem->modemInterface()->unlockRequired();\n    ModemManager::UnlockRetriesMap retries;\n\n    QDBusMessage unlockRetriesMessage = QDBusMessage::createMethodCall(\"org.freedesktop.ModemManager1\", d->modem->uni(), \"org.freedesktop.DBus.Properties\", \"Get\");\n    unlockRetriesMessage.setArguments({\"org.freedesktop.ModemManager1.Modem\", \"UnlockRetries\"});\n    QDBusMessage unlockRetriesReply = QDBusConnection::systemBus().call(unlockRetriesMessage);\n    QDBusArgument unlockRetriesArg = unlockRetriesReply.arguments().first().value<QDBusVariant>().variant().value<QDBusArgument>();\n    unlockRetriesArg >> retries;\n\n    if (retries.value(MM_MODEM_LOCK_SIM_PIN) == 1) {\n        ui->pinRetryCount->setText(tr(\"If you enter the incorrect PIN again, your SIM card will be PUK locked, and you'll need to contact your carrier.\"));\n    } else {\n        ui->pinRetryCount->setText(tr(\"You have %n remaining tries\", nullptr, retries.value(MM_MODEM_LOCK_SIM_PIN)));\n    }\n    if (retries.value(MM_MODEM_LOCK_SIM_PUK) == 1) {\n        ui->pukRetryCount->setText(tr(\"This is your final chance to get the PUK right before you'll need to obtain a new SIM card from your carrier.\"));\n    } else {\n        ui->pukRetryCount->setText(tr(\"You have %n remaining tries\", nullptr, retries.value(MM_MODEM_LOCK_SIM_PUK)));\n    }\n    ui->simPinOperatorName->setText(NetworkPluginCommon::operatorNameForModem(d->modem));\n    ui->pukDescription->setText(tr(\"Contact your carrier to obtain the <b>SIM PUK</b>, and enter it below to unlock %1.\").arg(QLocale().quoteString(NetworkPluginCommon::operatorNameForModem(d->modem))));\n    ui->simPinBox->clear();\n    ui->simPukBox->clear();\n\n    switch (unlockRequired) {\n        case MM_MODEM_LOCK_SIM_PIN:\n            {\n                ui->stackedWidget->setCurrentWidget(ui->simPinPage);\n                ui->simPinBox->setFocus();\n                break;\n            }\n        case MM_MODEM_LOCK_SIM_PUK:\n            {\n                ui->stackedWidget->setCurrentWidget(ui->simPukPage);\n                ui->simPukBox->setFocus();\n                break;\n            }\n        default:\n            emit done();\n    }\n}\n\nvoid UnlockModemPopover::on_simPinAcceptButton_clicked() {\n    bool ok;\n    ui->simPinBox->text().toInt(&ok);\n    if (!ok) {\n        tErrorFlash::flashError(ui->simPinBox);\n        return;\n    }\n\n    if (ui->simPinBox->text().count() < 4) {\n        tErrorFlash::flashError(ui->simPinBox);\n        return;\n    }\n\n    ui->stackedWidget->setCurrentWidget(ui->loadingPage);\n    QDBusPendingCallWatcher* watcher = new QDBusPendingCallWatcher(d->modem->sim()->sendPin(ui->simPinBox->text()));\n    connect(watcher, &QDBusPendingCallWatcher::finished, this, [=] {\n        QTimer::singleShot(200, this, &UnlockModemPopover::updatePage);\n        watcher->deleteLater();\n    });\n}\n\nvoid UnlockModemPopover::on_simPinTitleLabel_backButtonClicked() {\n    emit done();\n}\n\nvoid UnlockModemPopover::on_simPukAcceptButton_clicked() {\n    bool ok;\n    ui->simPukBox->text().toInt(&ok);\n    if (!ok) {\n        tErrorFlash::flashError(ui->simPukBox);\n        return;\n    }\n\n    if (ui->simPukBox->text().count() < 8) {\n        tErrorFlash::flashError(ui->simPukBox);\n        return;\n    }\n\n    ui->simPukNewSimPin->text().toInt(&ok);\n    if (!ok) {\n        tErrorFlash::flashError(ui->simPukNewSimPin);\n        return;\n    }\n\n    if (ui->simPukNewSimPin->text().count() < 4) {\n        tErrorFlash::flashError(ui->simPukNewSimPin);\n        return;\n    }\n\n    if (ui->simPukConfirmSimPin->text() != ui->simPukNewSimPin->text()) {\n        tErrorFlash::flashError(ui->simPukConfirmSimPin);\n        return;\n    }\n\n    ui->stackedWidget->setCurrentWidget(ui->loadingPage);\n    QDBusPendingCallWatcher* watcher = new QDBusPendingCallWatcher(d->modem->sim()->sendPuk(ui->simPukBox->text(), ui->simPukNewSimPin->text()));\n    connect(watcher, &QDBusPendingCallWatcher::finished, this, [=] {\n        QTimer::singleShot(200, this, &UnlockModemPopover::updatePage);\n        watcher->deleteLater();\n    });\n}\n\nvoid UnlockModemPopover::on_simPukTitleLabel_backButtonClicked() {\n    emit done();\n}\n"
  },
  {
    "path": "plugins/NetworkPlugin/statusCenter/popovers/unlockmodempopover.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef UNLOCKMODEMPOPOVER_H\n#define UNLOCKMODEMPOPOVER_H\n\n#include <ModemManagerQt/ModemDevice>\n#include <QWidget>\n\nnamespace Ui {\n    class UnlockModemPopover;\n}\n\nstruct UnlockModemPopoverPrivate;\nclass UnlockModemPopover : public QWidget {\n        Q_OBJECT\n\n    public:\n        explicit UnlockModemPopover(ModemManager::ModemDevice::Ptr modem, QWidget* parent = nullptr);\n        ~UnlockModemPopover();\n\n    signals:\n        void done();\n\n    private slots:\n        void on_simPinAcceptButton_clicked();\n\n        void on_simPinTitleLabel_backButtonClicked();\n\n        void on_simPukAcceptButton_clicked();\n\n        void on_simPukTitleLabel_backButtonClicked();\n\n    private:\n        Ui::UnlockModemPopover* ui;\n        UnlockModemPopoverPrivate* d;\n\n        void updatePage();\n};\n\n#endif // UNLOCKMODEMPOPOVER_H\n"
  },
  {
    "path": "plugins/NetworkPlugin/statusCenter/popovers/unlockmodempopover.ui",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ui version=\"4.0\">\n <class>UnlockModemPopover</class>\n <widget class=\"QWidget\" name=\"UnlockModemPopover\">\n  <property name=\"geometry\">\n   <rect>\n    <x>0</x>\n    <y>0</y>\n    <width>923</width>\n    <height>547</height>\n   </rect>\n  </property>\n  <property name=\"windowTitle\">\n   <string notr=\"true\">Form</string>\n  </property>\n  <layout class=\"QVBoxLayout\" name=\"verticalLayout\">\n   <property name=\"spacing\">\n    <number>0</number>\n   </property>\n   <property name=\"leftMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"topMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"rightMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"bottomMargin\">\n    <number>0</number>\n   </property>\n   <item>\n    <widget class=\"tStackedWidget\" name=\"stackedWidget\">\n     <property name=\"currentIndex\">\n      <number>1</number>\n     </property>\n     <widget class=\"QWidget\" name=\"loadingPage\">\n      <layout class=\"QGridLayout\" name=\"gridLayout\">\n       <item row=\"0\" column=\"1\">\n        <spacer name=\"verticalSpacer_2\">\n         <property name=\"orientation\">\n          <enum>Qt::Vertical</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>20</width>\n           <height>244</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n       <item row=\"1\" column=\"0\">\n        <spacer name=\"horizontalSpacer\">\n         <property name=\"orientation\">\n          <enum>Qt::Horizontal</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>432</width>\n           <height>20</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n       <item row=\"1\" column=\"1\">\n        <widget class=\"tCircularSpinner\" name=\"spinner\" native=\"true\"/>\n       </item>\n       <item row=\"1\" column=\"2\">\n        <spacer name=\"horizontalSpacer_2\">\n         <property name=\"orientation\">\n          <enum>Qt::Horizontal</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>432</width>\n           <height>20</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n       <item row=\"2\" column=\"1\">\n        <spacer name=\"verticalSpacer\">\n         <property name=\"orientation\">\n          <enum>Qt::Vertical</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>20</width>\n           <height>244</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n      </layout>\n     </widget>\n     <widget class=\"QWidget\" name=\"simPinPage\">\n      <layout class=\"QGridLayout\" name=\"gridLayout_2\">\n       <property name=\"leftMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"topMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"rightMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"bottomMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"spacing\">\n        <number>0</number>\n       </property>\n       <item row=\"0\" column=\"0\" colspan=\"3\">\n        <widget class=\"tTitleLabel\" name=\"simPinTitleLabel\">\n         <property name=\"text\">\n          <string notr=\"true\">SIM PIN</string>\n         </property>\n        </widget>\n       </item>\n       <item row=\"1\" column=\"1\">\n        <spacer name=\"verticalSpacer_8\">\n         <property name=\"orientation\">\n          <enum>Qt::Vertical</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>20</width>\n           <height>156</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n       <item row=\"2\" column=\"0\">\n        <spacer name=\"horizontalSpacer_5\">\n         <property name=\"orientation\">\n          <enum>Qt::Horizontal</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>209</width>\n           <height>20</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n       <item row=\"2\" column=\"1\">\n        <widget class=\"QFrame\" name=\"lockFrame_2\">\n         <property name=\"minimumSize\">\n          <size>\n           <width>500</width>\n           <height>0</height>\n          </size>\n         </property>\n         <property name=\"autoFillBackground\">\n          <bool>false</bool>\n         </property>\n         <property name=\"frameShape\">\n          <enum>QFrame::NoFrame</enum>\n         </property>\n         <property name=\"frameShadow\">\n          <enum>QFrame::Plain</enum>\n         </property>\n         <property name=\"lineWidth\">\n          <number>0</number>\n         </property>\n         <layout class=\"QVBoxLayout\" name=\"verticalLayout_7\">\n          <item>\n           <widget class=\"QLabel\" name=\"simPinOperatorName\">\n            <property name=\"font\">\n             <font>\n              <pointsize>15</pointsize>\n             </font>\n            </property>\n            <property name=\"text\">\n             <string notr=\"true\">Username</string>\n            </property>\n            <property name=\"buddy\">\n             <cstring></cstring>\n            </property>\n           </widget>\n          </item>\n          <item>\n           <widget class=\"QLabel\" name=\"label_4\">\n            <property name=\"font\">\n             <font>\n              <pointsize>20</pointsize>\n             </font>\n            </property>\n            <property name=\"text\">\n             <string>Enter the SIM PIN</string>\n            </property>\n           </widget>\n          </item>\n          <item>\n           <widget class=\"QLabel\" name=\"pinRetryCount\">\n            <property name=\"enabled\">\n             <bool>false</bool>\n            </property>\n            <property name=\"text\">\n             <string notr=\"true\">You have 3 remaining tries</string>\n            </property>\n           </widget>\n          </item>\n          <item>\n           <spacer name=\"verticalSpacer_9\">\n            <property name=\"orientation\">\n             <enum>Qt::Vertical</enum>\n            </property>\n            <property name=\"sizeType\">\n             <enum>QSizePolicy::Fixed</enum>\n            </property>\n            <property name=\"sizeHint\" stdset=\"0\">\n             <size>\n              <width>20</width>\n              <height>40</height>\n             </size>\n            </property>\n           </spacer>\n          </item>\n          <item>\n           <layout class=\"QHBoxLayout\" name=\"horizontalLayout_9\">\n            <property name=\"bottomMargin\">\n             <number>0</number>\n            </property>\n            <item>\n             <widget class=\"QWidget\" name=\"networkKeyContainer_2\" native=\"true\">\n              <property name=\"autoFillBackground\">\n               <bool>true</bool>\n              </property>\n              <layout class=\"QHBoxLayout\" name=\"horizontalLayout_2\">\n               <property name=\"leftMargin\">\n                <number>0</number>\n               </property>\n               <property name=\"topMargin\">\n                <number>0</number>\n               </property>\n               <property name=\"rightMargin\">\n                <number>0</number>\n               </property>\n               <property name=\"bottomMargin\">\n                <number>0</number>\n               </property>\n               <item>\n                <widget class=\"QLineEdit\" name=\"simPinBox\">\n                 <property name=\"font\">\n                  <font>\n                   <pointsize>30</pointsize>\n                  </font>\n                 </property>\n                 <property name=\"frame\">\n                  <bool>false</bool>\n                 </property>\n                 <property name=\"echoMode\">\n                  <enum>QLineEdit::Password</enum>\n                 </property>\n                 <property name=\"alignment\">\n                  <set>Qt::AlignCenter</set>\n                 </property>\n                 <property name=\"clearButtonEnabled\">\n                  <bool>false</bool>\n                 </property>\n                </widget>\n               </item>\n              </layout>\n             </widget>\n            </item>\n            <item>\n             <widget class=\"QPushButton\" name=\"simPinAcceptButton\">\n              <property name=\"sizePolicy\">\n               <sizepolicy hsizetype=\"Preferred\" vsizetype=\"Preferred\">\n                <horstretch>0</horstretch>\n                <verstretch>0</verstretch>\n               </sizepolicy>\n              </property>\n              <property name=\"text\">\n               <string/>\n              </property>\n              <property name=\"icon\">\n               <iconset theme=\"go-next\">\n                <normaloff>.</normaloff>.</iconset>\n              </property>\n              <property name=\"default\">\n               <bool>false</bool>\n              </property>\n              <property name=\"flat\">\n               <bool>true</bool>\n              </property>\n             </widget>\n            </item>\n           </layout>\n          </item>\n         </layout>\n        </widget>\n       </item>\n       <item row=\"2\" column=\"2\">\n        <spacer name=\"horizontalSpacer_6\">\n         <property name=\"orientation\">\n          <enum>Qt::Horizontal</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>208</width>\n           <height>20</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n       <item row=\"3\" column=\"1\">\n        <spacer name=\"verticalSpacer_6\">\n         <property name=\"orientation\">\n          <enum>Qt::Vertical</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>20</width>\n           <height>156</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n      </layout>\n     </widget>\n     <widget class=\"QWidget\" name=\"simPukPage\">\n      <layout class=\"QVBoxLayout\" name=\"verticalLayout_2\">\n       <property name=\"spacing\">\n        <number>0</number>\n       </property>\n       <property name=\"leftMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"topMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"rightMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"bottomMargin\">\n        <number>0</number>\n       </property>\n       <item>\n        <widget class=\"tTitleLabel\" name=\"simPukTitleLabel\">\n         <property name=\"text\">\n          <string notr=\"true\">SIM PUK</string>\n         </property>\n        </widget>\n       </item>\n       <item alignment=\"Qt::AlignHCenter\">\n        <widget class=\"QWidget\" name=\"simPukContainer\" native=\"true\">\n         <layout class=\"QGridLayout\" name=\"gridLayout_3\">\n          <item row=\"3\" column=\"0\">\n           <widget class=\"QLineEdit\" name=\"simPukBox\">\n            <property name=\"echoMode\">\n             <enum>QLineEdit::Password</enum>\n            </property>\n            <property name=\"placeholderText\">\n             <string>SIM PUK</string>\n            </property>\n           </widget>\n          </item>\n          <item row=\"4\" column=\"0\">\n           <widget class=\"QLabel\" name=\"label_2\">\n            <property name=\"text\">\n             <string>You'll also need to provide a new SIM PIN to set once the SIM is unlocked.</string>\n            </property>\n            <property name=\"wordWrap\">\n             <bool>true</bool>\n            </property>\n           </widget>\n          </item>\n          <item row=\"0\" column=\"0\">\n           <widget class=\"QLabel\" name=\"label\">\n            <property name=\"font\">\n             <font>\n              <weight>75</weight>\n              <bold>true</bold>\n             </font>\n            </property>\n            <property name=\"text\">\n             <string>SIM PUK REQUIRED</string>\n            </property>\n           </widget>\n          </item>\n          <item row=\"8\" column=\"0\">\n           <widget class=\"tStatusFrame\" name=\"simPukWarning\">\n            <property name=\"sizePolicy\">\n             <sizepolicy hsizetype=\"Preferred\" vsizetype=\"Fixed\">\n              <horstretch>0</horstretch>\n              <verstretch>0</verstretch>\n             </sizepolicy>\n            </property>\n            <property name=\"frameShape\">\n             <enum>QFrame::StyledPanel</enum>\n            </property>\n            <property name=\"frameShadow\">\n             <enum>QFrame::Raised</enum>\n            </property>\n           </widget>\n          </item>\n          <item row=\"1\" column=\"0\">\n           <widget class=\"QLabel\" name=\"pukDescription\">\n            <property name=\"text\">\n             <string notr=\"true\">Provide the &lt;b&gt;SIM PUK&lt;/b&gt; to unlock this SIM card.</string>\n            </property>\n            <property name=\"wordWrap\">\n             <bool>true</bool>\n            </property>\n           </widget>\n          </item>\n          <item row=\"2\" column=\"0\">\n           <widget class=\"QLabel\" name=\"pukRetryCount\">\n            <property name=\"enabled\">\n             <bool>false</bool>\n            </property>\n            <property name=\"text\">\n             <string notr=\"true\">You have 3 tries remaining.</string>\n            </property>\n            <property name=\"wordWrap\">\n             <bool>true</bool>\n            </property>\n           </widget>\n          </item>\n          <item row=\"9\" column=\"0\">\n           <widget class=\"QPushButton\" name=\"simPukAcceptButton\">\n            <property name=\"text\">\n             <string>Unlock SIM Card</string>\n            </property>\n            <property name=\"icon\">\n             <iconset theme=\"sim-card\">\n              <normaloff>.</normaloff>.</iconset>\n            </property>\n           </widget>\n          </item>\n          <item row=\"5\" column=\"0\">\n           <layout class=\"QVBoxLayout\" name=\"verticalLayout_3\">\n            <property name=\"spacing\">\n             <number>0</number>\n            </property>\n            <property name=\"leftMargin\">\n             <number>0</number>\n            </property>\n            <property name=\"topMargin\">\n             <number>0</number>\n            </property>\n            <property name=\"rightMargin\">\n             <number>0</number>\n            </property>\n            <property name=\"bottomMargin\">\n             <number>0</number>\n            </property>\n            <item>\n             <widget class=\"QLineEdit\" name=\"simPukNewSimPin\">\n              <property name=\"echoMode\">\n               <enum>QLineEdit::Password</enum>\n              </property>\n              <property name=\"placeholderText\">\n               <string>New SIM PIN</string>\n              </property>\n             </widget>\n            </item>\n            <item>\n             <widget class=\"QLineEdit\" name=\"simPukConfirmSimPin\">\n              <property name=\"echoMode\">\n               <enum>QLineEdit::Password</enum>\n              </property>\n              <property name=\"placeholderText\">\n               <string>Confirm SIM PIN</string>\n              </property>\n             </widget>\n            </item>\n           </layout>\n          </item>\n         </layout>\n        </widget>\n       </item>\n       <item>\n        <spacer name=\"verticalSpacer_3\">\n         <property name=\"orientation\">\n          <enum>Qt::Vertical</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>20</width>\n           <height>0</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n      </layout>\n     </widget>\n    </widget>\n   </item>\n  </layout>\n </widget>\n <customwidgets>\n  <customwidget>\n   <class>tTitleLabel</class>\n   <extends>QLabel</extends>\n   <header location=\"global\">ttitlelabel.h</header>\n   <slots>\n    <signal>backButtonClicked()</signal>\n   </slots>\n  </customwidget>\n  <customwidget>\n   <class>tStackedWidget</class>\n   <extends>QStackedWidget</extends>\n   <header location=\"global\">tstackedwidget.h</header>\n   <container>1</container>\n   <slots>\n    <signal>switchingFrame(int)</signal>\n   </slots>\n  </customwidget>\n  <customwidget>\n   <class>tCircularSpinner</class>\n   <extends>QWidget</extends>\n   <header location=\"global\">tcircularspinner.h</header>\n   <container>1</container>\n  </customwidget>\n  <customwidget>\n   <class>tStatusFrame</class>\n   <extends>QFrame</extends>\n   <header location=\"global\">tstatusframe.h</header>\n   <container>1</container>\n  </customwidget>\n </customwidgets>\n <resources/>\n <connections>\n  <connection>\n   <sender>simPukConfirmSimPin</sender>\n   <signal>returnPressed()</signal>\n   <receiver>simPukAcceptButton</receiver>\n   <slot>click()</slot>\n   <hints>\n    <hint type=\"sourcelabel\">\n     <x>368</x>\n     <y>196</y>\n    </hint>\n    <hint type=\"destinationlabel\">\n     <x>396</x>\n     <y>238</y>\n    </hint>\n   </hints>\n  </connection>\n  <connection>\n   <sender>simPinBox</sender>\n   <signal>returnPressed()</signal>\n   <receiver>simPinAcceptButton</receiver>\n   <slot>click()</slot>\n   <hints>\n    <hint type=\"sourcelabel\">\n     <x>568</x>\n     <y>350</y>\n    </hint>\n    <hint type=\"destinationlabel\">\n     <x>692</x>\n     <y>350</y>\n    </hint>\n   </hints>\n  </connection>\n </connections>\n</ui>\n"
  },
  {
    "path": "plugins/NetworkPlugin/statusCenter/popovers/wirelessnetworkselectionpopover.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"wirelessnetworkselectionpopover.h\"\n#include \"ui_wirelessnetworkselectionpopover.h\"\n\n#include <NetworkManagerQt/Manager>\n#include <NetworkManagerQt/WirelessDevice>\n#include <NetworkManagerQt/Connection>\n#include <NetworkManagerQt/AccessPoint>\n#include <NetworkManagerQt/Utils>\n#include <NetworkManagerQt/Settings>\n#include <NetworkManagerQt/Security8021xSetting>\n#include <QMenu>\n\n#include \"../eap/securityeappeap.h\"\n#include \"../eap/securityeapunsupported.h\"\n\n#include <ttoast.h>\n#include <terrorflash.h>\n#include <tpopover.h>\n\n#include \"models/wirelessconnectionlistmodel.h\"\n#include \"models/wirelessaccesspointsmodel.h\"\n#include \"models/wirelessnetworklistdelegate.h\"\n\n#include \"../connectionEditor/networkconnectioneditor.h\"\n\nstruct WirelessNetworkSelectionPopoverPrivate {\n    NetworkManager::WirelessDevice::Ptr device;\n    WirelessConnectionListModel* knownNetworksModel;\n    WirelessAccessPointsModel* newNetworksModel;\n\n    NetworkManager::AccessPoint::Ptr apConnect;\n    NetworkManager::WirelessSecurityType connectWithSecurity;\n\n    SecurityEap* eapPane = nullptr;\n    NetworkConnectionEditor* editor = nullptr;\n};\n\nWirelessNetworkSelectionPopover::WirelessNetworkSelectionPopover(QString deviceUni, QWidget* parent) :\n    QWidget(parent),\n    ui(new Ui::WirelessNetworkSelectionPopover) {\n    ui->setupUi(this);\n\n    ui->titleLabel->setBackButtonShown(true);\n    ui->keyTitleLabel->setBackButtonShown(true);\n    ui->eapMethodTitleLabel->setBackButtonShown(true);\n\n    d = new WirelessNetworkSelectionPopoverPrivate();\n    d->device = NetworkManager::findNetworkInterface(deviceUni).staticCast<NetworkManager::WirelessDevice>();\n\n    d->knownNetworksModel = new WirelessConnectionListModel();\n    ui->knownNetworksListView->setModel(d->knownNetworksModel);\n\n    connect(d->knownNetworksModel, &WirelessConnectionListModel::dataChanged, this, [ = ] {\n        ui->knownNetworksListView->setFixedHeight(d->knownNetworksModel->rowCount() * ui->knownNetworksListView->sizeHintForRow(0));\n    });\n    ui->knownNetworksListView->setItemDelegate(new WirelessNetworkListDelegate(deviceUni));\n    ui->knownNetworksListView->setFixedHeight(d->knownNetworksModel->rowCount() * ui->knownNetworksListView->sizeHintForRow(0));\n\n    d->newNetworksModel = new WirelessAccessPointsModel(deviceUni, false);\n    ui->newNetworksListView->setModel(d->newNetworksModel);\n\n    connect(d->newNetworksModel, &WirelessAccessPointsModel::dataChanged, this, [ = ] {\n        ui->newNetworksListView->setFixedHeight(d->newNetworksModel->rowCount() * ui->newNetworksListView->sizeHintForRow(0));\n    });\n    ui->newNetworksListView->setItemDelegate(new WirelessNetworkListDelegate(deviceUni));\n    ui->newNetworksListView->setFixedHeight(d->newNetworksModel->rowCount() * ui->newNetworksListView->sizeHintForRow(0));\n\n    ui->stackedWidget->setCurrentAnimation(tStackedWidget::SlideHorizontal);\n}\n\nWirelessNetworkSelectionPopover::~WirelessNetworkSelectionPopover() {\n    d->knownNetworksModel->deleteLater();\n    d->newNetworksModel->deleteLater();\n    delete d;\n    delete ui;\n}\n\nvoid WirelessNetworkSelectionPopover::on_titleLabel_backButtonClicked() {\n    emit done();\n}\n\nvoid WirelessNetworkSelectionPopover::on_knownNetworksListView_activated(const QModelIndex& index) {\n    activateConnection(index);\n}\n\nvoid WirelessNetworkSelectionPopover::activateConnection(const QModelIndex& index) {\n    QVariant networkInformation = index.data(Qt::UserRole);\n    if (networkInformation.canConvert<NetworkManager::Connection::Ptr>()) {\n        //Attempt to activate this known connection\n        NetworkManager::activateConnection(networkInformation.value<NetworkManager::Connection::Ptr>()->path(), d->device->uni(), \"\");\n        emit done();\n    } else if (networkInformation.canConvert<NetworkManager::AccessPoint::Ptr>()) {\n        //Connect to a new AP\n        d->apConnect = networkInformation.value<NetworkManager::AccessPoint::Ptr>();\n        d->connectWithSecurity = NetworkManager::findBestWirelessSecurity(d->device->wirelessCapabilities(), true, false, d->apConnect->capabilities(), d->apConnect->wpaFlags(), d->apConnect->rsnFlags());\n\n        switch (d->connectWithSecurity) {\n            case NetworkManager::NoneSecurity: {\n                //Attempt to activate a new connection\n                createConnection();\n                break;\n            }\n            case NetworkManager::StaticWep:\n            case NetworkManager::DynamicWep:\n            case NetworkManager::WpaPsk:\n            case NetworkManager::Wpa2Psk:\n            case NetworkManager::SAE:\n                ui->securityNetworkName->setText(d->apConnect->ssid());\n                ui->networkKey->clear();\n                ui->stackedWidget->setCurrentWidget(ui->keyPage);\n                break;\n            case NetworkManager::WpaEap:\n            case NetworkManager::Wpa2Eap:\n                ui->eapMethodTitleLabel->setText(d->apConnect->ssid());\n                ui->networkKey->clear();\n                ui->stackedWidget->setCurrentWidget(ui->eapMethodPage);\n                break;\n            case NetworkManager::Leap:\n            case NetworkManager::UnknownSecurity:\n            default: {\n                tToast* toast = new tToast(this);\n                toast->setTitle(tr(\"Unknown Security\"));\n                toast->setText(tr(\"Not sure how to connect to this network. Use manual setup to connect to it.\"));\n                connect(toast, &tToast::dismissed, toast, &tToast::deleteLater);\n                toast->show(this);\n                break;\n            }\n        }\n    }\n}\n\nvoid WirelessNetworkSelectionPopover::createConnection() {\n    NetworkManager::ConnectionSettings settings(NetworkManager::ConnectionSettings::Wireless);\n    NetworkManager::WirelessSetting::Ptr wirelessSettings = settings.setting(NetworkManager::Setting::Wireless).staticCast<NetworkManager::WirelessSetting>();\n    NetworkManager::WirelessSecuritySetting::Ptr securitySettings = settings.setting(NetworkManager::Setting::WirelessSecurity).staticCast<NetworkManager::WirelessSecuritySetting>();\n    NetworkManager::Security8021xSetting::Ptr eapSettings = settings.setting(NetworkManager::Setting::Security8021x).staticCast<NetworkManager::Security8021xSetting>();\n\n    settings.setUuid(NetworkManager::ConnectionSettings::createNewUuid());\n\n    wirelessSettings->setSsid(d->apConnect->ssid().toUtf8());\n\n    switch (d->connectWithSecurity) {\n        case NetworkManager::NoneSecurity:\n            //Don't need to set anything special here\n            break;\n        case NetworkManager::StaticWep:\n        case NetworkManager::DynamicWep:\n            securitySettings->setKeyMgmt(NetworkManager::WirelessSecuritySetting::Wep);\n            securitySettings->setAuthAlg(NetworkManager::WirelessSecuritySetting::Shared);\n            securitySettings->setWepKey0(ui->networkKey->text());\n            securitySettings->setInitialized(true);\n            break;\n        case NetworkManager::WpaPsk:\n        case NetworkManager::Wpa2Psk:\n            securitySettings->setKeyMgmt(NetworkManager::WirelessSecuritySetting::WpaPsk);\n            securitySettings->setPsk(ui->networkKey->text());\n            securitySettings->setInitialized(true);\n            break;\n        case NetworkManager::SAE:\n            securitySettings->setKeyMgmt(NetworkManager::WirelessSecuritySetting::SAE);\n            securitySettings->setPsk(ui->networkKey->text());\n            securitySettings->setInitialized(true);\n            break;\n        case NetworkManager::WpaEap:\n        case NetworkManager::Wpa2Eap:\n            securitySettings->setKeyMgmt(NetworkManager::WirelessSecuritySetting::WpaEap);\n            securitySettings->setInitialized(true);\n\n            d->eapPane->populateSetting(eapSettings);\n            eapSettings->setInitialized(true);\n            break;\n        case NetworkManager::Leap:\n        case NetworkManager::UnknownSecurity:\n        default:\n            return;\n    }\n\n    wirelessSettings->setInitialized(true);\n//    securitySettings->setInitialized(true);\n//    eapSettings->setInitialized(true);\n\n    qDebug() << settings;\n    qDebug() << settings.toMap();\n\n    QDBusPendingReply<QDBusObjectPath, QDBusObjectPath> r = NetworkManager::addAndActivateConnection(settings.toMap(), d->device->uni(), \"\");\n    r.waitForFinished();\n    if (r.isError()) {\n        qDebug() << r.error().name() << r.error().message();\n    }\n    emit done();\n}\n\nvoid WirelessNetworkSelectionPopover::on_knownNetworksListView_customContextMenuRequested(const QPoint& pos) {\n    QModelIndex index = ui->knownNetworksListView->indexAt(pos);\n    NetworkManager::Connection::Ptr cn = index.data(Qt::UserRole).value<NetworkManager::Connection::Ptr>();\n\n    QMenu* menu = new QMenu(this);\n    menu->addSection(tr(\"For network %1\").arg(cn->name()));\n    menu->addAction(QIcon::fromTheme(\"edit-rename\"), tr(\"Edit\"), [ = ] {\n        if (d->editor) {\n            ui->manualPage->layout()->removeWidget(d->editor);\n            d->editor->deleteLater();\n        }\n\n        d->editor = new NetworkConnectionEditor(cn, this);\n        ui->manualPage->layout()->addWidget(d->editor);\n        connect(d->editor, &NetworkConnectionEditor::accepted, this, [ = ] {\n            ui->stackedWidget->setCurrentWidget(ui->selectionPage);\n        });\n        connect(d->editor, &NetworkConnectionEditor::rejected, this, [ = ] {\n            ui->stackedWidget->setCurrentWidget(ui->selectionPage);\n        });\n\n        ui->stackedWidget->setCurrentWidget(ui->manualPage);\n    });\n    menu->addAction(QIcon::fromTheme(\"list-remove\"), tr(\"Forget Network\"), [ = ] {\n        cn->remove();\n    });\n    connect(menu, &QMenu::aboutToHide, menu, &QMenu::deleteLater);\n    menu->popup(ui->knownNetworksListView->mapToGlobal(pos));\n}\n\nvoid WirelessNetworkSelectionPopover::on_keyTitleLabel_backButtonClicked() {\n    ui->stackedWidget->setCurrentWidget(ui->selectionPage);\n}\n\nvoid WirelessNetworkSelectionPopover::on_newNetworksListView_activated(const QModelIndex& index) {\n    activateConnection(index);\n}\n\nvoid WirelessNetworkSelectionPopover::on_securityConnectButton_clicked() {\n    switch (d->connectWithSecurity) {\n        case NetworkManager::StaticWep:\n        case NetworkManager::DynamicWep:\n        case NetworkManager::SAE:\n            if (ui->networkKey->text().isEmpty()) {\n                tErrorFlash::flashError(ui->networkKeyContainer);\n                return;\n            }\n            break;\n        case NetworkManager::WpaPsk:\n        case NetworkManager::Wpa2Psk:\n            if (ui->networkKey->text().length() < 8) {\n                tErrorFlash::flashError(ui->networkKeyContainer);\n                return;\n            }\n            break;\n        default:\n            return;\n    }\n\n    this->createConnection();\n}\n\nvoid WirelessNetworkSelectionPopover::on_eapMethodTitleLabel_backButtonClicked() {\n    ui->stackedWidget->setCurrentWidget(ui->selectionPage);\n}\n\nvoid WirelessNetworkSelectionPopover::on_eapMethodList_activated(const QModelIndex& index) {\n    if (d->eapPane) {\n        ui->stackedWidget->removeWidget(d->eapPane);\n        d->eapPane->deleteLater();\n        d->eapPane = nullptr;\n    }\n\n    switch (index.row()) {\n        case 0: //TLS\n        case 1: //LEAP\n        case 2: //PWD\n        case 3: //FAST\n        case 4: //TTLS\n            d->eapPane = new SecurityEapUnsupported(this);\n            break;\n        case 5: //PEAP\n            d->eapPane = new SecurityEapPeap(this);\n    }\n\n    if (d->eapPane) {\n        ui->stackedWidget->addWidget(d->eapPane);\n        ui->stackedWidget->setCurrentWidget(d->eapPane);\n\n        connect(d->eapPane, &SecurityEap::back, this, [ = ] {\n            ui->stackedWidget->setCurrentWidget(ui->eapMethodPage);\n        });\n        connect(d->eapPane, &SecurityEap::done, this, &WirelessNetworkSelectionPopover::createConnection);\n    }\n}\n\nvoid WirelessNetworkSelectionPopover::on_manualButton_clicked() {\n    if (d->editor) {\n        ui->manualPage->layout()->removeWidget(d->editor);\n        d->editor->deleteLater();\n    }\n\n    NetworkManager::ConnectionSettings::Ptr settings(new NetworkManager::ConnectionSettings(NetworkManager::ConnectionSettings::Wireless));\n    settings->setUuid(NetworkManager::ConnectionSettings::createNewUuid());\n    settings->setId(tr(\"Wireless\"));\n\n    d->editor = new NetworkConnectionEditor(settings);\n    d->editor->setSaveButtonText(tr(\"Connect\"));\n    ui->manualPage->layout()->addWidget(d->editor);\n    connect(d->editor, &NetworkConnectionEditor::accepted, this, [ = ](NetworkManager::Connection::Ptr connection) {\n        //Activate this connection\n        NetworkManager::activateConnection(connection->path(), d->device->uni(), \"\");\n        emit done();\n    });\n    connect(d->editor, &NetworkConnectionEditor::rejected, this, [ = ] {\n        ui->stackedWidget->setCurrentWidget(ui->selectionPage);\n    });\n\n    ui->stackedWidget->setCurrentWidget(ui->manualPage);\n}\n\nvoid WirelessNetworkSelectionPopover::on_stackedWidget_switchingFrame(int frame) {\n    tPopover* popover = tPopover::popoverForPopoverWidget(this);\n    if (ui->stackedWidget->widget(frame) == ui->manualPage) {\n        popover->setPopoverWidth(d->editor->preferredPopoverWidth());\n        popover->setDismissable(false);\n    } else {\n        popover->setPopoverWidth(SC_DPI(600));\n        popover->setDismissable(true);\n    }\n}\n"
  },
  {
    "path": "plugins/NetworkPlugin/statusCenter/popovers/wirelessnetworkselectionpopover.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef WIRELESSNETWORKSELECTIONPOPOVER_H\n#define WIRELESSNETWORKSELECTIONPOPOVER_H\n\n#include <QWidget>\n\nnamespace Ui {\n    class WirelessNetworkSelectionPopover;\n}\n\nstruct WirelessNetworkSelectionPopoverPrivate;\nclass WirelessNetworkSelectionPopover : public QWidget {\n        Q_OBJECT\n\n    public:\n        explicit WirelessNetworkSelectionPopover(QString deviceUni, QWidget* parent = nullptr);\n        ~WirelessNetworkSelectionPopover();\n\n    signals:\n        void done();\n\n    private slots:\n        void on_titleLabel_backButtonClicked();\n\n        void on_knownNetworksListView_activated(const QModelIndex& index);\n\n        void on_knownNetworksListView_customContextMenuRequested(const QPoint& pos);\n\n        void on_keyTitleLabel_backButtonClicked();\n\n        void on_newNetworksListView_activated(const QModelIndex& index);\n\n        void on_securityConnectButton_clicked();\n\n        void on_eapMethodTitleLabel_backButtonClicked();\n\n        void on_eapMethodList_activated(const QModelIndex& index);\n\n        void on_manualButton_clicked();\n\n        void on_stackedWidget_switchingFrame(int frame);\n\n    private:\n        Ui::WirelessNetworkSelectionPopover* ui;\n        WirelessNetworkSelectionPopoverPrivate* d;\n\n        void activateConnection(const QModelIndex& index);\n        void createConnection();\n};\n\n#endif // WIRELESSNETWORKSELECTIONPOPOVER_H\n"
  },
  {
    "path": "plugins/NetworkPlugin/statusCenter/popovers/wirelessnetworkselectionpopover.ui",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ui version=\"4.0\">\n <class>WirelessNetworkSelectionPopover</class>\n <widget class=\"QWidget\" name=\"WirelessNetworkSelectionPopover\">\n  <property name=\"geometry\">\n   <rect>\n    <x>0</x>\n    <y>0</y>\n    <width>765</width>\n    <height>505</height>\n   </rect>\n  </property>\n  <property name=\"windowTitle\">\n   <string notr=\"true\">Form</string>\n  </property>\n  <layout class=\"QVBoxLayout\" name=\"verticalLayout\">\n   <property name=\"spacing\">\n    <number>0</number>\n   </property>\n   <property name=\"leftMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"topMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"rightMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"bottomMargin\">\n    <number>0</number>\n   </property>\n   <item>\n    <widget class=\"tStackedWidget\" name=\"stackedWidget\">\n     <property name=\"currentIndex\">\n      <number>0</number>\n     </property>\n     <widget class=\"QWidget\" name=\"selectionPage\">\n      <layout class=\"QVBoxLayout\" name=\"verticalLayout_2\">\n       <property name=\"spacing\">\n        <number>0</number>\n       </property>\n       <property name=\"leftMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"topMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"rightMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"bottomMargin\">\n        <number>0</number>\n       </property>\n       <item>\n        <widget class=\"tTitleLabel\" name=\"titleLabel\">\n         <property name=\"text\">\n          <string>Connect to a Wireless Network</string>\n         </property>\n        </widget>\n       </item>\n       <item>\n        <widget class=\"QScrollArea\" name=\"scrollArea\">\n         <property name=\"frameShape\">\n          <enum>QFrame::NoFrame</enum>\n         </property>\n         <property name=\"widgetResizable\">\n          <bool>true</bool>\n         </property>\n         <widget class=\"QWidget\" name=\"scrollAreaWidgetContents\">\n          <property name=\"geometry\">\n           <rect>\n            <x>0</x>\n            <y>0</y>\n            <width>765</width>\n            <height>488</height>\n           </rect>\n          </property>\n          <layout class=\"QVBoxLayout\" name=\"verticalLayout_5\">\n           <property name=\"spacing\">\n            <number>0</number>\n           </property>\n           <property name=\"leftMargin\">\n            <number>0</number>\n           </property>\n           <property name=\"topMargin\">\n            <number>0</number>\n           </property>\n           <property name=\"rightMargin\">\n            <number>0</number>\n           </property>\n           <property name=\"bottomMargin\">\n            <number>0</number>\n           </property>\n           <item>\n            <layout class=\"QVBoxLayout\" name=\"verticalLayout_3\">\n             <property name=\"spacing\">\n              <number>0</number>\n             </property>\n             <item>\n              <widget class=\"QLabel\" name=\"label\">\n               <property name=\"font\">\n                <font>\n                 <bold>true</bold>\n                </font>\n               </property>\n               <property name=\"text\">\n                <string>KNOWN NETWORKS</string>\n               </property>\n               <property name=\"margin\">\n                <number>9</number>\n               </property>\n              </widget>\n             </item>\n             <item>\n              <widget class=\"QListView\" name=\"knownNetworksListView\">\n               <property name=\"sizePolicy\">\n                <sizepolicy hsizetype=\"Expanding\" vsizetype=\"Preferred\">\n                 <horstretch>0</horstretch>\n                 <verstretch>0</verstretch>\n                </sizepolicy>\n               </property>\n               <property name=\"contextMenuPolicy\">\n                <enum>Qt::CustomContextMenu</enum>\n               </property>\n               <property name=\"frameShape\">\n                <enum>QFrame::NoFrame</enum>\n               </property>\n              </widget>\n             </item>\n            </layout>\n           </item>\n           <item>\n            <widget class=\"Line\" name=\"line\">\n             <property name=\"maximumSize\">\n              <size>\n               <width>16777215</width>\n               <height>1</height>\n              </size>\n             </property>\n             <property name=\"orientation\">\n              <enum>Qt::Horizontal</enum>\n             </property>\n            </widget>\n           </item>\n           <item>\n            <layout class=\"QVBoxLayout\" name=\"verticalLayout_4\">\n             <property name=\"spacing\">\n              <number>0</number>\n             </property>\n             <item>\n              <widget class=\"QLabel\" name=\"label_2\">\n               <property name=\"font\">\n                <font>\n                 <bold>true</bold>\n                </font>\n               </property>\n               <property name=\"text\">\n                <string>NEW NETWORKS</string>\n               </property>\n               <property name=\"margin\">\n                <number>9</number>\n               </property>\n              </widget>\n             </item>\n             <item>\n              <widget class=\"QListView\" name=\"newNetworksListView\">\n               <property name=\"sizePolicy\">\n                <sizepolicy hsizetype=\"Expanding\" vsizetype=\"Preferred\">\n                 <horstretch>0</horstretch>\n                 <verstretch>0</verstretch>\n                </sizepolicy>\n               </property>\n               <property name=\"frameShape\">\n                <enum>QFrame::NoFrame</enum>\n               </property>\n              </widget>\n             </item>\n             <item>\n              <widget class=\"QPushButton\" name=\"manualButton\">\n               <property name=\"text\">\n                <string>New Manual Connection</string>\n               </property>\n               <property name=\"icon\">\n                <iconset theme=\"list-add\">\n                 <normaloff>.</normaloff>.</iconset>\n               </property>\n              </widget>\n             </item>\n            </layout>\n           </item>\n           <item>\n            <spacer name=\"verticalSpacer\">\n             <property name=\"orientation\">\n              <enum>Qt::Vertical</enum>\n             </property>\n             <property name=\"sizeHint\" stdset=\"0\">\n              <size>\n               <width>20</width>\n               <height>40</height>\n              </size>\n             </property>\n            </spacer>\n           </item>\n          </layout>\n         </widget>\n        </widget>\n       </item>\n      </layout>\n     </widget>\n     <widget class=\"QWidget\" name=\"keyPage\">\n      <layout class=\"QGridLayout\" name=\"gridLayout\">\n       <property name=\"leftMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"topMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"rightMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"bottomMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"spacing\">\n        <number>0</number>\n       </property>\n       <item row=\"1\" column=\"1\">\n        <spacer name=\"verticalSpacer_2\">\n         <property name=\"orientation\">\n          <enum>Qt::Vertical</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>20</width>\n           <height>224</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n       <item row=\"2\" column=\"0\">\n        <spacer name=\"horizontalSpacer\">\n         <property name=\"orientation\">\n          <enum>Qt::Horizontal</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>161</width>\n           <height>20</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n       <item row=\"2\" column=\"1\">\n        <widget class=\"QFrame\" name=\"lockFrame\">\n         <property name=\"minimumSize\">\n          <size>\n           <width>500</width>\n           <height>0</height>\n          </size>\n         </property>\n         <property name=\"autoFillBackground\">\n          <bool>false</bool>\n         </property>\n         <property name=\"frameShape\">\n          <enum>QFrame::NoFrame</enum>\n         </property>\n         <property name=\"frameShadow\">\n          <enum>QFrame::Plain</enum>\n         </property>\n         <property name=\"lineWidth\">\n          <number>0</number>\n         </property>\n         <layout class=\"QVBoxLayout\" name=\"verticalLayout_6\">\n          <item>\n           <widget class=\"QLabel\" name=\"securityNetworkName\">\n            <property name=\"font\">\n             <font>\n              <pointsize>15</pointsize>\n             </font>\n            </property>\n            <property name=\"text\">\n             <string notr=\"true\">Username</string>\n            </property>\n            <property name=\"buddy\">\n             <cstring></cstring>\n            </property>\n           </widget>\n          </item>\n          <item>\n           <widget class=\"QLabel\" name=\"label_3\">\n            <property name=\"font\">\n             <font>\n              <pointsize>20</pointsize>\n             </font>\n            </property>\n            <property name=\"text\">\n             <string>Enter the security key</string>\n            </property>\n           </widget>\n          </item>\n          <item>\n           <spacer name=\"verticalSpacer_7\">\n            <property name=\"orientation\">\n             <enum>Qt::Vertical</enum>\n            </property>\n            <property name=\"sizeType\">\n             <enum>QSizePolicy::Fixed</enum>\n            </property>\n            <property name=\"sizeHint\" stdset=\"0\">\n             <size>\n              <width>20</width>\n              <height>40</height>\n             </size>\n            </property>\n           </spacer>\n          </item>\n          <item>\n           <layout class=\"QHBoxLayout\" name=\"horizontalLayout_8\">\n            <property name=\"bottomMargin\">\n             <number>0</number>\n            </property>\n            <item>\n             <widget class=\"QWidget\" name=\"networkKeyContainer\" native=\"true\">\n              <property name=\"autoFillBackground\">\n               <bool>true</bool>\n              </property>\n              <layout class=\"QHBoxLayout\" name=\"horizontalLayout\">\n               <property name=\"leftMargin\">\n                <number>0</number>\n               </property>\n               <property name=\"topMargin\">\n                <number>0</number>\n               </property>\n               <property name=\"rightMargin\">\n                <number>0</number>\n               </property>\n               <property name=\"bottomMargin\">\n                <number>0</number>\n               </property>\n               <item>\n                <widget class=\"QLineEdit\" name=\"networkKey\">\n                 <property name=\"font\">\n                  <font>\n                   <pointsize>30</pointsize>\n                  </font>\n                 </property>\n                 <property name=\"frame\">\n                  <bool>false</bool>\n                 </property>\n                 <property name=\"echoMode\">\n                  <enum>QLineEdit::Password</enum>\n                 </property>\n                 <property name=\"alignment\">\n                  <set>Qt::AlignCenter</set>\n                 </property>\n                 <property name=\"clearButtonEnabled\">\n                  <bool>false</bool>\n                 </property>\n                </widget>\n               </item>\n              </layout>\n             </widget>\n            </item>\n            <item>\n             <widget class=\"QPushButton\" name=\"securityConnectButton\">\n              <property name=\"sizePolicy\">\n               <sizepolicy hsizetype=\"Preferred\" vsizetype=\"Preferred\">\n                <horstretch>0</horstretch>\n                <verstretch>0</verstretch>\n               </sizepolicy>\n              </property>\n              <property name=\"text\">\n               <string/>\n              </property>\n              <property name=\"icon\">\n               <iconset theme=\"go-next\">\n                <normaloff>.</normaloff>.</iconset>\n              </property>\n              <property name=\"default\">\n               <bool>false</bool>\n              </property>\n              <property name=\"flat\">\n               <bool>true</bool>\n              </property>\n             </widget>\n            </item>\n           </layout>\n          </item>\n         </layout>\n        </widget>\n       </item>\n       <item row=\"2\" column=\"2\">\n        <spacer name=\"horizontalSpacer_2\">\n         <property name=\"orientation\">\n          <enum>Qt::Horizontal</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>161</width>\n           <height>20</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n       <item row=\"3\" column=\"1\">\n        <spacer name=\"verticalSpacer_3\">\n         <property name=\"orientation\">\n          <enum>Qt::Vertical</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>20</width>\n           <height>223</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n       <item row=\"0\" column=\"0\" colspan=\"3\">\n        <widget class=\"tTitleLabel\" name=\"keyTitleLabel\">\n         <property name=\"text\">\n          <string>Network Security</string>\n         </property>\n        </widget>\n       </item>\n      </layout>\n     </widget>\n     <widget class=\"QWidget\" name=\"eapMethodPage\">\n      <layout class=\"QVBoxLayout\" name=\"verticalLayout_7\">\n       <property name=\"spacing\">\n        <number>0</number>\n       </property>\n       <property name=\"leftMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"topMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"rightMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"bottomMargin\">\n        <number>0</number>\n       </property>\n       <item>\n        <widget class=\"tTitleLabel\" name=\"eapMethodTitleLabel\">\n         <property name=\"text\">\n          <string notr=\"true\">TextLabel</string>\n         </property>\n        </widget>\n       </item>\n       <item>\n        <widget class=\"QLabel\" name=\"label_5\">\n         <property name=\"text\">\n          <string>Select the EAP method. If you don't know what to select, contact your system administrator for the details.</string>\n         </property>\n         <property name=\"wordWrap\">\n          <bool>true</bool>\n         </property>\n         <property name=\"margin\">\n          <number>9</number>\n         </property>\n        </widget>\n       </item>\n       <item>\n        <widget class=\"Line\" name=\"line_2\">\n         <property name=\"maximumSize\">\n          <size>\n           <width>16777215</width>\n           <height>1</height>\n          </size>\n         </property>\n         <property name=\"orientation\">\n          <enum>Qt::Horizontal</enum>\n         </property>\n        </widget>\n       </item>\n       <item>\n        <widget class=\"QListWidget\" name=\"eapMethodList\">\n         <property name=\"frameShape\">\n          <enum>QFrame::NoFrame</enum>\n         </property>\n         <item>\n          <property name=\"text\">\n           <string>TLS</string>\n          </property>\n         </item>\n         <item>\n          <property name=\"text\">\n           <string>LEAP</string>\n          </property>\n         </item>\n         <item>\n          <property name=\"text\">\n           <string>PWD</string>\n          </property>\n         </item>\n         <item>\n          <property name=\"text\">\n           <string>FAST</string>\n          </property>\n         </item>\n         <item>\n          <property name=\"text\">\n           <string>TTLS</string>\n          </property>\n         </item>\n         <item>\n          <property name=\"text\">\n           <string>PEAP</string>\n          </property>\n         </item>\n        </widget>\n       </item>\n      </layout>\n     </widget>\n     <widget class=\"QWidget\" name=\"manualPage\">\n      <layout class=\"QVBoxLayout\" name=\"verticalLayout_8\">\n       <property name=\"spacing\">\n        <number>0</number>\n       </property>\n       <property name=\"leftMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"topMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"rightMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"bottomMargin\">\n        <number>0</number>\n       </property>\n      </layout>\n     </widget>\n    </widget>\n   </item>\n  </layout>\n </widget>\n <customwidgets>\n  <customwidget>\n   <class>tStackedWidget</class>\n   <extends>QStackedWidget</extends>\n   <header location=\"global\">tstackedwidget.h</header>\n   <container>1</container>\n   <slots>\n    <signal>switchingFrame(int)</signal>\n   </slots>\n  </customwidget>\n  <customwidget>\n   <class>tTitleLabel</class>\n   <extends>QLabel</extends>\n   <header location=\"global\">ttitlelabel.h</header>\n   <slots>\n    <signal>backButtonClicked()</signal>\n   </slots>\n  </customwidget>\n </customwidgets>\n <resources/>\n <connections>\n  <connection>\n   <sender>networkKey</sender>\n   <signal>returnPressed()</signal>\n   <receiver>securityConnectButton</receiver>\n   <slot>click()</slot>\n   <hints>\n    <hint type=\"sourcelabel\">\n     <x>455</x>\n     <y>30</y>\n    </hint>\n    <hint type=\"destinationlabel\">\n     <x>489</x>\n     <y>30</y>\n    </hint>\n   </hints>\n  </connection>\n </connections>\n</ui>\n"
  },
  {
    "path": "plugins/NetworkPlugin/switchmanager.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"switchmanager.h\"\n\n#include <QDBusConnection>\n#include <QDBusServiceWatcher>\n#include <QDBusConnectionInterface>\n#include <QDBusInterface>\n\n#include <statemanager.h>\n#include <statuscentermanager.h>\n#include <quickswitch.h>\n#include <barmanager.h>\n#include <icontextchunk.h>\n#include <actionquickwidget.h>\n\n#include <tsettings.h>\n\n#include <NetworkManagerQt/Device>\n#include <NetworkManagerQt/Manager>\n\nstruct SwitchManagerPrivate {\n    QDBusServiceWatcher* nmWatcher;\n    QDBusInterface* interface;\n\n    QuickSwitch* flightModeSwitch;\n    QuickSwitch* wifiSwitch;\n    QuickSwitch* cellularSwitch;\n\n    IconTextChunk* flightModeChunk;\n\n    tSettings settings;\n    bool block = false;\n};\n\nSwitchManager::SwitchManager(QObject* parent) : QObject(parent) {\n    d = new SwitchManagerPrivate();\n\n    d->interface = new QDBusInterface(\"org.freedesktop.NetworkManager\", \"/org/freedesktop/NetworkManager\", \"org.freedesktop.DBus.Properties\", QDBusConnection::systemBus(), this);\n\n    d->flightModeSwitch = new QuickSwitch(\"NetworkFlight\");\n    d->wifiSwitch = new QuickSwitch(\"NetworkWireless\");\n    d->cellularSwitch = new QuickSwitch(\"NetworkCellular\");\n\n    d->flightModeChunk = new IconTextChunk(\"flight-mode\");\n    d->flightModeChunk->setText(tr(\"Flight Mode\"));\n    d->flightModeChunk->setIcon(QIcon::fromTheme(\"flight-mode\"));\n\n    ActionQuickWidget* flightChunkQuickWidget = new ActionQuickWidget(d->flightModeChunk);\n    flightChunkQuickWidget->addAction(QIcon::fromTheme(\"flight-mode\"), tr(\"Switch off Flight Mode\"), [ = ] {\n        this->setFlightMode(false);\n    });\n    d->flightModeChunk->setQuickWidget(flightChunkQuickWidget);\n\n    d->flightModeSwitch->setTitle(tr(\"Flight Mode\"));\n    connect(d->flightModeSwitch, &QuickSwitch::toggled, this, &SwitchManager::setFlightMode);\n    if (d->settings.value(\"NetworkPlugin/flight.on\").toBool()) {\n        this->setFlightMode(true);\n    }\n\n    d->wifiSwitch->setTitle(tr(\"Wi-Fi\"));\n    d->wifiSwitch->setChecked(NetworkManager::isWirelessEnabled());\n    connect(NetworkManager::notifier(), &NetworkManager::Notifier::wirelessEnabledChanged, this, [ = ](bool enabled) {\n        QSignalBlocker blocker(d->wifiSwitch);\n        d->wifiSwitch->setChecked(enabled);\n    });\n    connect(d->wifiSwitch, &QuickSwitch::toggled, this, [ = ](bool enabled) {\n        d->interface->asyncCall(\"Set\", \"org.freedesktop.NetworkManager\", \"WirelessEnabled\", QVariant::fromValue(QDBusVariant(enabled)));\n    });\n\n    d->cellularSwitch->setTitle(tr(\"Cellular\"));\n    d->cellularSwitch->setChecked(NetworkManager::isWwanEnabled());\n    connect(NetworkManager::notifier(), &NetworkManager::Notifier::wwanEnabledChanged, this, [ = ](bool enabled) {\n        QSignalBlocker blocker(d->cellularSwitch);\n        d->cellularSwitch->setChecked(enabled);\n    });\n    connect(d->cellularSwitch, &QuickSwitch::toggled, this, [ = ](bool enabled) {\n        d->interface->asyncCall(\"Set\", \"org.freedesktop.NetworkManager\", \"WwanEnabled\", QVariant::fromValue(QDBusVariant(enabled)));\n    });\n\n    d->nmWatcher = new QDBusServiceWatcher(\"org.freedesktop.NetworkManager\", QDBusConnection::systemBus());\n    connect(d->nmWatcher, &QDBusServiceWatcher::serviceRegistered, this, &SwitchManager::networkManagerRunning);\n    connect(d->nmWatcher, &QDBusServiceWatcher::serviceUnregistered, this, &SwitchManager::networkManagerGone);\n\n    if (QDBusConnection::systemBus().interface()->registeredServiceNames().value().contains(\"org.freedesktop.NetworkManager\")) networkManagerRunning();\n\n    connect(NetworkManager::notifier(), &NetworkManager::Notifier::deviceAdded, this, &SwitchManager::updateDevices);\n    connect(NetworkManager::notifier(), &NetworkManager::Notifier::deviceRemoved, this, &SwitchManager::updateDevices);\n}\n\nSwitchManager::~SwitchManager() {\n    d->nmWatcher->deleteLater();\n    d->flightModeSwitch->deleteLater();\n    d->wifiSwitch->deleteLater();\n    d->cellularSwitch->deleteLater();\n    delete d;\n}\n\nbool SwitchManager::isFlightModeEnabled() {\n    return d->flightModeSwitch->isChecked();\n}\n\nvoid SwitchManager::changeEvent(QEvent* event) {\n    if (event->type() == QEvent::LanguageChange) {\n        d->flightModeSwitch->setTitle(tr(\"Flight Mode\"));\n        d->wifiSwitch->setTitle(tr(\"Wi-Fi\"));\n        d->cellularSwitch->setTitle(tr(\"Cellular\"));\n    }\n}\n\nvoid SwitchManager::networkManagerRunning() {\n    StateManager::statusCenterManager()->addSwitch(d->flightModeSwitch);\n    updateDevices();\n}\n\nvoid SwitchManager::networkManagerGone() {\n    StatusCenterManager* mgr = StateManager::statusCenterManager();\n    mgr->removeSwitch(d->flightModeSwitch);\n    mgr->removeSwitch(d->wifiSwitch);\n    mgr->removeSwitch(d->cellularSwitch);\n}\n\nvoid SwitchManager::updateDevices() {\n    StatusCenterManager* mgr = StateManager::statusCenterManager();\n    bool wifi = false;\n    bool cellular = false;\n    for (NetworkManager::Device::Ptr device : NetworkManager::networkInterfaces()) {\n        if (device->type() == NetworkManager::Device::Wifi) wifi = true;\n        if (device->type() == NetworkManager::Device::Modem) cellular = true;\n    }\n\n    if (wifi) {\n        mgr->addSwitch(d->wifiSwitch);\n    } else {\n        mgr->removeSwitch(d->wifiSwitch);\n    }\n\n    if (cellular) {\n        mgr->addSwitch(d->cellularSwitch);\n    } else {\n        mgr->removeSwitch(d->cellularSwitch);\n    }\n}\n\nvoid SwitchManager::setFlightMode(bool flightOn) {\n    QSignalBlocker blocker(d->flightModeSwitch);\n    d->flightModeSwitch->setChecked(flightOn);\n\n    if (flightOn) {\n        d->settings.setValue(\"NetworkPlugin/flight.wifi\", NetworkManager::isWirelessEnabled());\n        d->settings.setValue(\"NetworkPlugin/flight.cellular\", NetworkManager::isWwanEnabled());\n        d->settings.setValue(\"NetworkPlugin/flight.on\", true);\n\n        d->interface->asyncCall(\"Set\", \"org.freedesktop.NetworkManager\", \"WirelessEnabled\", QVariant::fromValue(QDBusVariant(false)));\n        d->interface->asyncCall(\"Set\", \"org.freedesktop.NetworkManager\", \"WwanEnabled\", QVariant::fromValue(QDBusVariant(false)));\n        if (!StateManager::instance()->barManager()->isChunkRegistered(d->flightModeChunk)) StateManager::instance()->barManager()->addChunk(d->flightModeChunk);\n    } else {\n        d->interface->asyncCall(\"Set\", \"org.freedesktop.NetworkManager\", \"WirelessEnabled\", QVariant::fromValue(QDBusVariant(d->settings.value(\"NetworkPlugin/flight.wifi\").toBool())));\n        d->interface->asyncCall(\"Set\", \"org.freedesktop.NetworkManager\", \"WwanEnabled\", QVariant::fromValue(QDBusVariant(d->settings.value(\"NetworkPlugin/flight.cellular\").toBool())));\n\n        d->settings.setValue(\"NetworkPlugin/flight.on\", false);\n        if (StateManager::instance()->barManager()->isChunkRegistered(d->flightModeChunk)) StateManager::instance()->barManager()->removeChunk(d->flightModeChunk);\n    }\n}\n"
  },
  {
    "path": "plugins/NetworkPlugin/switchmanager.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef SWITCHMANAGER_H\n#define SWITCHMANAGER_H\n\n#include <QObject>\n\nstruct SwitchManagerPrivate;\nclass SwitchManager : public QObject {\n        Q_OBJECT\n    public:\n        explicit SwitchManager(QObject* parent = nullptr);\n        ~SwitchManager();\n\n        bool isFlightModeEnabled();\n        void setFlightMode(bool flightOn);\n\n    signals:\n\n    private:\n        SwitchManagerPrivate* d;\n\n        void changeEvent(QEvent* event);\n\n        void networkManagerRunning();\n        void networkManagerGone();\n        void updateDevices();\n\n};\n\n#endif // SWITCHMANAGER_H\n"
  },
  {
    "path": "plugins/NetworkPlugin/thedesk-network.conf",
    "content": "[NetworkPlugin]\nnotifications.activation=true\nflight.on=false\nflight.wifi=true\nflight.cellular=true\ntethering.ssid=$hostname\ntethering.key=.\ntethering.uuid=.\n"
  },
  {
    "path": "plugins/NetworkPlugin/translations/ar_SA.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"ar_SA\" sourcelanguage=\"en_US\">\n<context>\n    <name>CellularPane</name>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.ui\" line=\"84\"/>\n        <source>STATUS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.ui\" line=\"102\"/>\n        <source>This Device</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.ui\" line=\"246\"/>\n        <source>ACTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.ui\" line=\"262\"/>\n        <source>Connect</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.ui\" line=\"269\"/>\n        <source>Disconnect</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.ui\" line=\"276\"/>\n        <source>Modem Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"105\"/>\n        <source>Disable Cellular</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"107\"/>\n        <source>Enable Cellular</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"129\"/>\n        <source>Disconnected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"135\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"397\"/>\n        <source>Cellular</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"140\"/>\n        <source>Connected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"149\"/>\n        <source>Failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"209\"/>\n        <source>No SIM Card</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"210\"/>\n        <source>Insert a SIM card to connect to cellular services.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"212\"/>\n        <source>No SIM</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"215\"/>\n        <source>Unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"218\"/>\n        <source>This network is unavailable because %2.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"249\"/>\n        <source>Connection Failure</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"251\"/>\n        <source>Connecting to the network failed because %2.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"326\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"339\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"346\"/>\n        <source>Enter SIM PIN</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"328\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"332\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"344\"/>\n        <source>SIM PIN Required</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"334\"/>\n        <source>A SIM PIN is required to connect to the cellular network.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"357\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"370\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"377\"/>\n        <source>Enter SIM PUK</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"359\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"363\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"375\"/>\n        <source>SIM PUK Required</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"365\"/>\n        <source>A SIM PUK is required to connect to the cellular network.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>Common</name>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"27\"/>\n        <source>the device is no longer managed by NetworkManager</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"29\"/>\n        <source>configuration of the device failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"31\"/>\n        <source>configuration of the device is unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"33\"/>\n        <source>configuration of the device expired</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"35\"/>\n        <source>required secrets were not provided</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"37\"/>\n        <source>the authentication supplicant disconnected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"39\"/>\n        <source>configuration of the authentication supplicant failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"41\"/>\n        <source>the authentication supplicant failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"43\"/>\n        <source>the authentication supplicant timed out</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"45\"/>\n        <source>the PPP network failed to start</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"47\"/>\n        <source>the PPP network was disconnected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"49\"/>\n        <source>the PPP network failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"51\"/>\n        <source>DHCP configuration failed to start</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"53\"/>\n        <source>DHCP configuration had an error</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"55\"/>\n        <source>DHCP configuration failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"67\"/>\n        <source>the modem is busy</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"69\"/>\n        <source>there is no dial tone on the modem</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"71\"/>\n        <source>no carrier is available on the modem</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"73\"/>\n        <source>dialling the number on the modem timed out</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"75\"/>\n        <source>dialling the number on the modem failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"77\"/>\n        <source>initialising the modem failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"79\"/>\n        <source>APN selection failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"81\"/>\n        <source>the modem is not searching</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"83\"/>\n        <source>the cell tower denied registration of the modem</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"85\"/>\n        <source>registration of the modem on the cell tower timed out</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"87\"/>\n        <source>registration of the modem on the cell tower failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"91\"/>\n        <source>the device firmware is missing</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"93\"/>\n        <source>the device was removed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"95\"/>\n        <source>the device is sleeping</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"97\"/>\n        <source>the connection was removed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"99\"/>\n        <source>you requested the action</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"107\"/>\n        <source>the modem was not found</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"109\"/>\n        <source>Bluetooth is not available</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"111\"/>\n        <source>the SIM card is not inserted</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"113\"/>\n        <source>the SIM PIN is required</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"115\"/>\n        <source>the SIM PUK is required</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"118\"/>\n        <source>the SIM PUK is exhausted</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"126\"/>\n        <source>ModemManager is not operational on this device</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"128\"/>\n        <source>the wireless network wasn&apos;t found</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"152\"/>\n        <source>an unknown error occurred</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"198\"/>\n        <source>Cellular</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>ConnectionSelectionPopover</name>\n    <message>\n        <location filename=\"../statusCenter/popovers/connectionselectionpopover.ui\" line=\"35\"/>\n        <source>Select Connection Profile</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/connectionselectionpopover.ui\" line=\"42\"/>\n        <source>Select a connection profile to use</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>DevicePane</name>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/devicepane.ui\" line=\"83\"/>\n        <source>STATUS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/devicepane.ui\" line=\"90\"/>\n        <source>theDesk doesn&apos;t support this network interface, so you won&apos;t be able to configure it fully here.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/devicepane.ui\" line=\"144\"/>\n        <source>ACTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/devicepane.ui\" line=\"153\"/>\n        <source>Disconnect</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>GenericChunkUpdater</name>\n    <message>\n        <location filename=\"../chunk/genericchunkupdater.cpp\" line=\"24\"/>\n        <source>Connected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>IPv4ConnectionEditorPane</name>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"35\"/>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.cpp\" line=\"69\"/>\n        <source>IPv4</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"99\"/>\n        <source>DHCP</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"104\"/>\n        <source>DHCP with manual DNS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"109\"/>\n        <source>Manual</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"114\"/>\n        <source>Shared</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"119\"/>\n        <source>Disabled</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"127\"/>\n        <source>Configuration Method</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"143\"/>\n        <source>Require IPv4</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"208\"/>\n        <source>IP Address</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"215\"/>\n        <source>Default Gateway</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"222\"/>\n        <source>Subnet Length</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"235\"/>\n        <source>ADDRESSES</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"255\"/>\n        <source>Set the IP address that this device will be assigned.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"345\"/>\n        <source>DNS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"352\"/>\n        <source>1.1.1.1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"359\"/>\n        <source>Configure the DNS servers that will be used to resolve domain names.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.cpp\" line=\"217\"/>\n        <source>For DNS server %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.cpp\" line=\"218\"/>\n        <source>Remove</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>NetworkChunk</name>\n    <message>\n        <location filename=\"../chunk/networkchunk.cpp\" line=\"64\"/>\n        <source>Network Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../chunk/networkchunk.cpp\" line=\"103\"/>\n        <source>Disconnected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../chunk/networkchunk.cpp\" line=\"137\"/>\n        <source>Login Required</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../chunk/networkchunk.cpp\" line=\"140\"/>\n        <source>Can&apos;t get to the Internet</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>NetworkConnectionEditor</name>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"90\"/>\n        <source>SETTINGS MODIFIED</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"125\"/>\n        <source>Revert</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"136\"/>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"224\"/>\n        <source>Save</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"195\"/>\n        <source>DONE?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"260\"/>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"303\"/>\n        <source>General</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"327\"/>\n        <source>Connection Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.cpp\" line=\"203\"/>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.cpp\" line=\"231\"/>\n        <source>Couldn&apos;t save settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>NetworkStatusCenterLeftPane</name>\n    <message>\n        <location filename=\"../statusCenter/networkstatuscenterleftpane.ui\" line=\"35\"/>\n        <source>Network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>NetworkStatusCenterPane</name>\n    <message>\n        <location filename=\"../statusCenter/networkstatuscenterpane.ui\" line=\"100\"/>\n        <source>NetworkManager is not operational</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/networkstatuscenterpane.ui\" line=\"110\"/>\n        <source>Contact your system administrator</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/networkstatuscenterpane.cpp\" line=\"159\"/>\n        <source>Network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>OnboardingNetwork</name>\n    <message>\n        <location filename=\"../onboarding/onboardingnetwork.ui\" line=\"35\"/>\n        <location filename=\"../onboarding/onboardingnetwork.cpp\" line=\"96\"/>\n        <source>Network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingnetwork.ui\" line=\"42\"/>\n        <source>Connect to the Internet to get updates and install new software.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingnetwork.ui\" line=\"194\"/>\n        <source>You&apos;re connected!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingnetwork.ui\" line=\"204\"/>\n        <source>Disconnect and connect to a different network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingnetwork.ui\" line=\"275\"/>\n        <source>You can always set up the network connection later.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingnetwork.cpp\" line=\"73\"/>\n        <source>Continue without Internet</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingnetwork.cpp\" line=\"79\"/>\n        <location filename=\"../onboarding/onboardingnetwork.cpp\" line=\"85\"/>\n        <source>Next</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SecurityEapPeap</name>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"35\"/>\n        <source>PEAP</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"42\"/>\n        <source>Enter the settings for this network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"82\"/>\n        <source>Phase-2 Authentication</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"89\"/>\n        <source>Anonymous Identity</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"99\"/>\n        <source>PEAP version</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"106\"/>\n        <source>Username</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"113\"/>\n        <source>Password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"120\"/>\n        <source>CA Certificate</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"127\"/>\n        <source>Browse...</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"135\"/>\n        <source>MSCHAPv2</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"140\"/>\n        <source>MD5</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"145\"/>\n        <source>GTC</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"171\"/>\n        <source>Automatic</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"187\"/>\n        <source>Version 0</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"200\"/>\n        <source>Version 1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"244\"/>\n        <source>Connect</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.cpp\" line=\"107\"/>\n        <source>Certificates (*.pem, *.cer)</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SecurityEapUnsupported</name>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeapunsupported.ui\" line=\"35\"/>\n        <location filename=\"../statusCenter/eap/securityeapunsupported.ui\" line=\"77\"/>\n        <source>Unsupported Security Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeapunsupported.ui\" line=\"87\"/>\n        <source>Sorry, theDesk doesn&apos;t support those security settings at the moment. You can try using the terminal to configure this network.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SimSettingsPopover</name>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"57\"/>\n        <source>Modem Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"88\"/>\n        <source>SIM PIN</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"98\"/>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"114\"/>\n        <source>Enable SIM PIN</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"105\"/>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"120\"/>\n        <source>Disable SIM PIN</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"112\"/>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"164\"/>\n        <source>Change SIM PIN</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"128\"/>\n        <source>CALLS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"138\"/>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"769\"/>\n        <source>Call Waiting</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"188\"/>\n        <source>IMSI</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"195\"/>\n        <source>IMEI</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"208\"/>\n        <source>MODEM INFORMATION</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"215\"/>\n        <source>Carrier</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"340\"/>\n        <source>Enter the new SIM PIN</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"537\"/>\n        <source>Enter the current SIM PIN</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"806\"/>\n        <source>Enable Call Waiting</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"813\"/>\n        <source>Call Waiting allows you to receive calls while another call is currently active.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"58\"/>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"59\"/>\n        <source>No SIM card</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"142\"/>\n        <source>You have %n remaining tries</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n        </translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"203\"/>\n        <source>Error</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"204\"/>\n        <source>Couldn&apos;t get current Call Waiting status from carrier</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SwitchManager</name>\n    <message>\n        <location filename=\"../switchmanager.cpp\" line=\"63\"/>\n        <location filename=\"../switchmanager.cpp\" line=\"72\"/>\n        <location filename=\"../switchmanager.cpp\" line=\"122\"/>\n        <source>Flight Mode</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../switchmanager.cpp\" line=\"67\"/>\n        <source>Switch off Flight Mode</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../switchmanager.cpp\" line=\"78\"/>\n        <location filename=\"../switchmanager.cpp\" line=\"123\"/>\n        <source>Wi-Fi</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../switchmanager.cpp\" line=\"88\"/>\n        <location filename=\"../switchmanager.cpp\" line=\"124\"/>\n        <source>Cellular</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>TetheringSettingsPopover</name>\n    <message>\n        <location filename=\"../statusCenter/popovers/tetheringsettingspopover.ui\" line=\"35\"/>\n        <source>Tethering Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/tetheringsettingspopover.ui\" line=\"63\"/>\n        <source>SSID</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/tetheringsettingspopover.ui\" line=\"73\"/>\n        <source>These settings will be used to set up a Wi-Fi network that other devices can connect to when tethering is enabled.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/tetheringsettingspopover.ui\" line=\"96\"/>\n        <source>Network Key</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/tetheringsettingspopover.cpp\" line=\"64\"/>\n        <source>Network key needs to be at least 8 characters long</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>UnlockModemPopover</name>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.ui\" line=\"190\"/>\n        <source>Enter the SIM PIN</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.ui\" line=\"356\"/>\n        <source>SIM PUK</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.ui\" line=\"363\"/>\n        <source>You&apos;ll also need to provide a new SIM PIN to set once the SIM is unlocked.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.ui\" line=\"379\"/>\n        <source>SIM PUK REQUIRED</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.ui\" line=\"425\"/>\n        <source>Unlock SIM Card</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.ui\" line=\"456\"/>\n        <source>New SIM PIN</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.ui\" line=\"466\"/>\n        <source>Confirm SIM PIN</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.cpp\" line=\"48\"/>\n        <source>Don&apos;t guess the PUK!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.cpp\" line=\"49\"/>\n        <source>Once you exhaust your attempts, the SIM card will be blocked forever.\n\nYou&apos;ll need to contact your carrier for a new SIM card.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.cpp\" line=\"68\"/>\n        <source>If you enter the incorrect PIN again, your SIM card will be PUK locked, and you&apos;ll need to contact your carrier.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.cpp\" line=\"70\"/>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.cpp\" line=\"75\"/>\n        <source>You have %n remaining tries</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n        </translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.cpp\" line=\"73\"/>\n        <source>This is your final chance to get the PUK right before you&apos;ll need to obtain a new SIM card from your carrier.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.cpp\" line=\"78\"/>\n        <source>Contact your carrier to obtain the &lt;b&gt;SIM PUK&lt;/b&gt;, and enter it below to unlock %1.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>WifiConnectionEditorPane</name>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/wificonnectioneditorpane.ui\" line=\"35\"/>\n        <location filename=\"../statusCenter/connectionEditor/wificonnectioneditorpane.cpp\" line=\"47\"/>\n        <source>Wi-Fi</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/wificonnectioneditorpane.ui\" line=\"59\"/>\n        <source>Mode</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/wificonnectioneditorpane.ui\" line=\"66\"/>\n        <source>SSID</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/wificonnectioneditorpane.ui\" line=\"77\"/>\n        <source>Infrastructure</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/wificonnectioneditorpane.ui\" line=\"82\"/>\n        <source>Ad-Hoc</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/wificonnectioneditorpane.ui\" line=\"87\"/>\n        <source>Access Point</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>WifiDevicePane</name>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"106\"/>\n        <source>STATUS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"124\"/>\n        <source>This Device</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"268\"/>\n        <source>ACTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"277\"/>\n        <source>Select Network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"284\"/>\n        <source>Disconnect</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"348\"/>\n        <source>TETHERING</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"355\"/>\n        <source>Network Key</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"375\"/>\n        <source>Use Tethering to share your internet connection with other devices over Wi-Fi.\n\n**While Tethering is active, you won&apos;t be able to connect to the Internet with Wi-Fi, so you&apos;ll need to make sure you have an alternate way to connect to the Internet.**</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"398\"/>\n        <source>Enable Tethering</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"414\"/>\n        <source>SSID</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"440\"/>\n        <source>Set Tethering Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"489\"/>\n        <source>Wi-Fi is off</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"512\"/>\n        <source>Switch Wi-Fi on to connect to a wireless network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"522\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"669\"/>\n        <source>Switch Wi-Fi On</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"568\"/>\n        <source>Wi-Fi is disabled</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"591\"/>\n        <source>Use the Wi-Fi switch to enable Wi-Fi and connect to a network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"636\"/>\n        <source>You&apos;re in flight mode</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"659\"/>\n        <source>Switch Wi-Fi on to connect to a wireless network. Flight mode won&apos;t be disabled.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"88\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"131\"/>\n        <source>Tethering</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"91\"/>\n        <source>Disable Tethering</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"118\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"143\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"153\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"202\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"203\"/>\n        <source>Wi-Fi</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"119\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"230\"/>\n        <source>Disconnected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"132\"/>\n        <source>Active</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"138\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"144\"/>\n        <source>Connected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"154\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"239\"/>\n        <source>Failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"164\"/>\n        <source>Connection Failure</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"166\"/>\n        <source>Connecting to %1 failed because %2.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"170\"/>\n        <source>the network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"273\"/>\n        <source>0 Devices</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"282\"/>\n        <source>Unknown</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"452\"/>\n        <source>Couldn&apos;t configure tethering</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"478\"/>\n        <source>Couldn&apos;t switch off tethering</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>WiredChunkUpdater</name>\n    <message>\n        <location filename=\"../chunk/wiredchunkupdater.cpp\" line=\"25\"/>\n        <source>Wired</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>WiredDevicePane</name>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.ui\" line=\"35\"/>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"64\"/>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"83\"/>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"90\"/>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"103\"/>\n        <source>Wired</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.ui\" line=\"84\"/>\n        <source>STATUS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.ui\" line=\"102\"/>\n        <source>This Device</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.ui\" line=\"246\"/>\n        <source>ACTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.ui\" line=\"255\"/>\n        <source>Connect</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.ui\" line=\"262\"/>\n        <source>Disconnect</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"84\"/>\n        <source>Disconnected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"95\"/>\n        <source>Connected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"104\"/>\n        <source>Failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"122\"/>\n        <source>Router</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"144\"/>\n        <source>Unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"148\"/>\n        <source>Connect an Ethernet cable.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"150\"/>\n        <source>This network is unavailable because %2.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"177\"/>\n        <source>Connection Failure</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"179\"/>\n        <source>Connecting to the network failed because %2.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>WiredOnboardingSetup</name>\n    <message>\n        <location filename=\"../onboarding/wiredonboardingsetup.ui\" line=\"57\"/>\n        <source>WIRED</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/wiredonboardingsetup.ui\" line=\"73\"/>\n        <source>Use Wired Connection</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/wiredonboardingsetup.cpp\" line=\"91\"/>\n        <source>Connect to the Internet using a wired network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/wiredonboardingsetup.cpp\" line=\"94\"/>\n        <source>To connect to the Internet using a wired network, connect the network cable.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>WirelessNetworkListDelegate</name>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"85\"/>\n        <source>Connected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"89\"/>\n        <source>In Range</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"97\"/>\n        <source>Out of range</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"107\"/>\n        <source>Not Secured</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"110\"/>\n        <source>Secured with Static WEP</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"113\"/>\n        <source>Secured with Dynamic WEP</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"116\"/>\n        <source>Secured with LEAP</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"119\"/>\n        <source>Secured with WPA-PSK</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"122\"/>\n        <source>Secured with WPA Enterprise</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"125\"/>\n        <source>Secured with WPA2-PSK</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"128\"/>\n        <source>Secured with WPA2 Enterprise</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"131\"/>\n        <source>Secured with WPA3</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>WirelessNetworkSelectionPopover</name>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"57\"/>\n        <source>Connect to a Wireless Network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"107\"/>\n        <source>KNOWN NETWORKS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"158\"/>\n        <source>NEW NETWORKS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"181\"/>\n        <source>New Manual Connection</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"297\"/>\n        <source>Enter the security key</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"421\"/>\n        <source>Network Security</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"454\"/>\n        <source>Select the EAP method. If you don&apos;t know what to select, contact your system administrator for the details.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"484\"/>\n        <source>TLS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"489\"/>\n        <source>LEAP</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"494\"/>\n        <source>PWD</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"499\"/>\n        <source>FAST</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"504\"/>\n        <source>TTLS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"509\"/>\n        <source>PEAP</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.cpp\" line=\"141\"/>\n        <source>Unknown Security</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.cpp\" line=\"142\"/>\n        <source>Not sure how to connect to this network. Use manual setup to connect to it.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.cpp\" line=\"217\"/>\n        <source>For network %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.cpp\" line=\"218\"/>\n        <source>Edit</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.cpp\" line=\"235\"/>\n        <source>Forget Network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.cpp\" line=\"316\"/>\n        <source>Wireless</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.cpp\" line=\"319\"/>\n        <source>Connect</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>WirelessOnboardingSetup</name>\n    <message>\n        <location filename=\"../onboarding/wirelessonboardingsetup.ui\" line=\"57\"/>\n        <source>WI-FI</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/wirelessonboardingsetup.ui\" line=\"64\"/>\n        <source>Connect to the Internet using a Wi-Fi network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/wirelessonboardingsetup.ui\" line=\"73\"/>\n        <source>Select Network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/NetworkPlugin/translations/au_AU.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"au_AU\" sourcelanguage=\"en_US\">\n<context>\n    <name>CellularPane</name>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.ui\" line=\"84\"/>\n        <source>STATUS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.ui\" line=\"102\"/>\n        <source>This Device</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.ui\" line=\"246\"/>\n        <source>ACTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.ui\" line=\"262\"/>\n        <source>Connect</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.ui\" line=\"269\"/>\n        <source>Disconnect</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.ui\" line=\"276\"/>\n        <source>Modem Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"105\"/>\n        <source>Disable Cellular</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"107\"/>\n        <source>Enable Cellular</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"129\"/>\n        <source>Disconnected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"135\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"397\"/>\n        <source>Cellular</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"140\"/>\n        <source>Connected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"149\"/>\n        <source>Failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"209\"/>\n        <source>No SIM Card</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"210\"/>\n        <source>Insert a SIM card to connect to cellular services.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"212\"/>\n        <source>No SIM</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"215\"/>\n        <source>Unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"218\"/>\n        <source>This network is unavailable because %2.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"249\"/>\n        <source>Connection Failure</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"251\"/>\n        <source>Connecting to the network failed because %2.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"326\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"339\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"346\"/>\n        <source>Enter SIM PIN</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"328\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"332\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"344\"/>\n        <source>SIM PIN Required</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"334\"/>\n        <source>A SIM PIN is required to connect to the cellular network.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"357\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"370\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"377\"/>\n        <source>Enter SIM PUK</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"359\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"363\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"375\"/>\n        <source>SIM PUK Required</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"365\"/>\n        <source>A SIM PUK is required to connect to the cellular network.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>Common</name>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"27\"/>\n        <source>the device is no longer managed by NetworkManager</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"29\"/>\n        <source>configuration of the device failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"31\"/>\n        <source>configuration of the device is unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"33\"/>\n        <source>configuration of the device expired</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"35\"/>\n        <source>required secrets were not provided</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"37\"/>\n        <source>the authentication supplicant disconnected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"39\"/>\n        <source>configuration of the authentication supplicant failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"41\"/>\n        <source>the authentication supplicant failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"43\"/>\n        <source>the authentication supplicant timed out</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"45\"/>\n        <source>the PPP network failed to start</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"47\"/>\n        <source>the PPP network was disconnected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"49\"/>\n        <source>the PPP network failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"51\"/>\n        <source>DHCP configuration failed to start</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"53\"/>\n        <source>DHCP configuration had an error</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"55\"/>\n        <source>DHCP configuration failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"67\"/>\n        <source>the modem is busy</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"69\"/>\n        <source>there is no dial tone on the modem</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"71\"/>\n        <source>no carrier is available on the modem</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"73\"/>\n        <source>dialling the number on the modem timed out</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"75\"/>\n        <source>dialling the number on the modem failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"77\"/>\n        <source>initialising the modem failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"79\"/>\n        <source>APN selection failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"81\"/>\n        <source>the modem is not searching</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"83\"/>\n        <source>the cell tower denied registration of the modem</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"85\"/>\n        <source>registration of the modem on the cell tower timed out</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"87\"/>\n        <source>registration of the modem on the cell tower failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"91\"/>\n        <source>the device firmware is missing</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"93\"/>\n        <source>the device was removed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"95\"/>\n        <source>the device is sleeping</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"97\"/>\n        <source>the connection was removed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"99\"/>\n        <source>you requested the action</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"107\"/>\n        <source>the modem was not found</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"109\"/>\n        <source>Bluetooth is not available</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"111\"/>\n        <source>the SIM card is not inserted</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"113\"/>\n        <source>the SIM PIN is required</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"115\"/>\n        <source>the SIM PUK is required</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"118\"/>\n        <source>the SIM PUK is exhausted</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"126\"/>\n        <source>ModemManager is not operational on this device</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"128\"/>\n        <source>the wireless network wasn&apos;t found</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"152\"/>\n        <source>an unknown error occurred</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"198\"/>\n        <source>Cellular</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>ConnectionSelectionPopover</name>\n    <message>\n        <location filename=\"../statusCenter/popovers/connectionselectionpopover.ui\" line=\"35\"/>\n        <source>Select Connection Profile</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/connectionselectionpopover.ui\" line=\"42\"/>\n        <source>Select a connection profile to use</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>DevicePane</name>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/devicepane.ui\" line=\"83\"/>\n        <source>STATUS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/devicepane.ui\" line=\"90\"/>\n        <source>theDesk doesn&apos;t support this network interface, so you won&apos;t be able to configure it fully here.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/devicepane.ui\" line=\"144\"/>\n        <source>ACTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/devicepane.ui\" line=\"153\"/>\n        <source>Disconnect</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>GenericChunkUpdater</name>\n    <message>\n        <location filename=\"../chunk/genericchunkupdater.cpp\" line=\"24\"/>\n        <source>Connected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>IPv4ConnectionEditorPane</name>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"35\"/>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.cpp\" line=\"69\"/>\n        <source>IPv4</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"99\"/>\n        <source>DHCP</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"104\"/>\n        <source>DHCP with manual DNS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"109\"/>\n        <source>Manual</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"114\"/>\n        <source>Shared</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"119\"/>\n        <source>Disabled</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"127\"/>\n        <source>Configuration Method</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"143\"/>\n        <source>Require IPv4</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"208\"/>\n        <source>IP Address</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"215\"/>\n        <source>Default Gateway</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"222\"/>\n        <source>Subnet Length</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"235\"/>\n        <source>ADDRESSES</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"255\"/>\n        <source>Set the IP address that this device will be assigned.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"345\"/>\n        <source>DNS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"352\"/>\n        <source>1.1.1.1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"359\"/>\n        <source>Configure the DNS servers that will be used to resolve domain names.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.cpp\" line=\"217\"/>\n        <source>For DNS server %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.cpp\" line=\"218\"/>\n        <source>Remove</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>NetworkChunk</name>\n    <message>\n        <location filename=\"../chunk/networkchunk.cpp\" line=\"64\"/>\n        <source>Network Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../chunk/networkchunk.cpp\" line=\"103\"/>\n        <source>Disconnected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../chunk/networkchunk.cpp\" line=\"137\"/>\n        <source>Login Required</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../chunk/networkchunk.cpp\" line=\"140\"/>\n        <source>Can&apos;t get to the Internet</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>NetworkConnectionEditor</name>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"90\"/>\n        <source>SETTINGS MODIFIED</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"125\"/>\n        <source>Revert</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"136\"/>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"224\"/>\n        <source>Save</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"195\"/>\n        <source>DONE?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"260\"/>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"303\"/>\n        <source>General</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"327\"/>\n        <source>Connection Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.cpp\" line=\"203\"/>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.cpp\" line=\"231\"/>\n        <source>Couldn&apos;t save settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>NetworkStatusCenterLeftPane</name>\n    <message>\n        <location filename=\"../statusCenter/networkstatuscenterleftpane.ui\" line=\"35\"/>\n        <source>Network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>NetworkStatusCenterPane</name>\n    <message>\n        <location filename=\"../statusCenter/networkstatuscenterpane.ui\" line=\"100\"/>\n        <source>NetworkManager is not operational</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/networkstatuscenterpane.ui\" line=\"110\"/>\n        <source>Contact your system administrator</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/networkstatuscenterpane.cpp\" line=\"159\"/>\n        <source>Network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>OnboardingNetwork</name>\n    <message>\n        <location filename=\"../onboarding/onboardingnetwork.ui\" line=\"35\"/>\n        <location filename=\"../onboarding/onboardingnetwork.cpp\" line=\"96\"/>\n        <source>Network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingnetwork.ui\" line=\"42\"/>\n        <source>Connect to the Internet to get updates and install new software.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingnetwork.ui\" line=\"194\"/>\n        <source>You&apos;re connected!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingnetwork.ui\" line=\"204\"/>\n        <source>Disconnect and connect to a different network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingnetwork.ui\" line=\"275\"/>\n        <source>You can always set up the network connection later.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingnetwork.cpp\" line=\"73\"/>\n        <source>Continue without Internet</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingnetwork.cpp\" line=\"79\"/>\n        <location filename=\"../onboarding/onboardingnetwork.cpp\" line=\"85\"/>\n        <source>Next</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SecurityEapPeap</name>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"35\"/>\n        <source>PEAP</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"42\"/>\n        <source>Enter the settings for this network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"82\"/>\n        <source>Phase-2 Authentication</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"89\"/>\n        <source>Anonymous Identity</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"99\"/>\n        <source>PEAP version</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"106\"/>\n        <source>Username</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"113\"/>\n        <source>Password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"120\"/>\n        <source>CA Certificate</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"127\"/>\n        <source>Browse...</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"135\"/>\n        <source>MSCHAPv2</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"140\"/>\n        <source>MD5</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"145\"/>\n        <source>GTC</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"171\"/>\n        <source>Automatic</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"187\"/>\n        <source>Version 0</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"200\"/>\n        <source>Version 1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"244\"/>\n        <source>Connect</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.cpp\" line=\"107\"/>\n        <source>Certificates (*.pem, *.cer)</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SecurityEapUnsupported</name>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeapunsupported.ui\" line=\"35\"/>\n        <location filename=\"../statusCenter/eap/securityeapunsupported.ui\" line=\"77\"/>\n        <source>Unsupported Security Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeapunsupported.ui\" line=\"87\"/>\n        <source>Sorry, theDesk doesn&apos;t support those security settings at the moment. You can try using the terminal to configure this network.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SimSettingsPopover</name>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"57\"/>\n        <source>Modem Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"88\"/>\n        <source>SIM PIN</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"98\"/>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"114\"/>\n        <source>Enable SIM PIN</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"105\"/>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"120\"/>\n        <source>Disable SIM PIN</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"112\"/>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"164\"/>\n        <source>Change SIM PIN</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"128\"/>\n        <source>CALLS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"138\"/>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"769\"/>\n        <source>Call Waiting</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"188\"/>\n        <source>IMSI</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"195\"/>\n        <source>IMEI</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"208\"/>\n        <source>MODEM INFORMATION</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"215\"/>\n        <source>Carrier</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"340\"/>\n        <source>Enter the new SIM PIN</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"537\"/>\n        <source>Enter the current SIM PIN</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"806\"/>\n        <source>Enable Call Waiting</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"813\"/>\n        <source>Call Waiting allows you to receive calls while another call is currently active.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"58\"/>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"59\"/>\n        <source>No SIM card</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"142\"/>\n        <source>You have %n remaining tries</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n        </translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"203\"/>\n        <source>Error</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"204\"/>\n        <source>Couldn&apos;t get current Call Waiting status from carrier</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SwitchManager</name>\n    <message>\n        <location filename=\"../switchmanager.cpp\" line=\"63\"/>\n        <location filename=\"../switchmanager.cpp\" line=\"72\"/>\n        <location filename=\"../switchmanager.cpp\" line=\"122\"/>\n        <source>Flight Mode</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../switchmanager.cpp\" line=\"67\"/>\n        <source>Switch off Flight Mode</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../switchmanager.cpp\" line=\"78\"/>\n        <location filename=\"../switchmanager.cpp\" line=\"123\"/>\n        <source>Wi-Fi</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../switchmanager.cpp\" line=\"88\"/>\n        <location filename=\"../switchmanager.cpp\" line=\"124\"/>\n        <source>Cellular</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>TetheringSettingsPopover</name>\n    <message>\n        <location filename=\"../statusCenter/popovers/tetheringsettingspopover.ui\" line=\"35\"/>\n        <source>Tethering Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/tetheringsettingspopover.ui\" line=\"63\"/>\n        <source>SSID</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/tetheringsettingspopover.ui\" line=\"73\"/>\n        <source>These settings will be used to set up a Wi-Fi network that other devices can connect to when tethering is enabled.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/tetheringsettingspopover.ui\" line=\"96\"/>\n        <source>Network Key</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/tetheringsettingspopover.cpp\" line=\"64\"/>\n        <source>Network key needs to be at least 8 characters long</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>UnlockModemPopover</name>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.ui\" line=\"190\"/>\n        <source>Enter the SIM PIN</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.ui\" line=\"356\"/>\n        <source>SIM PUK</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.ui\" line=\"363\"/>\n        <source>You&apos;ll also need to provide a new SIM PIN to set once the SIM is unlocked.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.ui\" line=\"379\"/>\n        <source>SIM PUK REQUIRED</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.ui\" line=\"425\"/>\n        <source>Unlock SIM Card</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.ui\" line=\"456\"/>\n        <source>New SIM PIN</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.ui\" line=\"466\"/>\n        <source>Confirm SIM PIN</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.cpp\" line=\"48\"/>\n        <source>Don&apos;t guess the PUK!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.cpp\" line=\"49\"/>\n        <source>Once you exhaust your attempts, the SIM card will be blocked forever.\n\nYou&apos;ll need to contact your carrier for a new SIM card.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.cpp\" line=\"68\"/>\n        <source>If you enter the incorrect PIN again, your SIM card will be PUK locked, and you&apos;ll need to contact your carrier.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.cpp\" line=\"70\"/>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.cpp\" line=\"75\"/>\n        <source>You have %n remaining tries</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n        </translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.cpp\" line=\"73\"/>\n        <source>This is your final chance to get the PUK right before you&apos;ll need to obtain a new SIM card from your carrier.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.cpp\" line=\"78\"/>\n        <source>Contact your carrier to obtain the &lt;b&gt;SIM PUK&lt;/b&gt;, and enter it below to unlock %1.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>WifiConnectionEditorPane</name>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/wificonnectioneditorpane.ui\" line=\"35\"/>\n        <location filename=\"../statusCenter/connectionEditor/wificonnectioneditorpane.cpp\" line=\"47\"/>\n        <source>Wi-Fi</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/wificonnectioneditorpane.ui\" line=\"59\"/>\n        <source>Mode</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/wificonnectioneditorpane.ui\" line=\"66\"/>\n        <source>SSID</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/wificonnectioneditorpane.ui\" line=\"77\"/>\n        <source>Infrastructure</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/wificonnectioneditorpane.ui\" line=\"82\"/>\n        <source>Ad-Hoc</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/wificonnectioneditorpane.ui\" line=\"87\"/>\n        <source>Access Point</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>WifiDevicePane</name>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"106\"/>\n        <source>STATUS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"124\"/>\n        <source>This Device</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"268\"/>\n        <source>ACTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"277\"/>\n        <source>Select Network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"284\"/>\n        <source>Disconnect</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"348\"/>\n        <source>TETHERING</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"355\"/>\n        <source>Network Key</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"375\"/>\n        <source>Use Tethering to share your internet connection with other devices over Wi-Fi.\n\n**While Tethering is active, you won&apos;t be able to connect to the Internet with Wi-Fi, so you&apos;ll need to make sure you have an alternate way to connect to the Internet.**</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"398\"/>\n        <source>Enable Tethering</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"414\"/>\n        <source>SSID</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"440\"/>\n        <source>Set Tethering Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"489\"/>\n        <source>Wi-Fi is off</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"512\"/>\n        <source>Switch Wi-Fi on to connect to a wireless network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"522\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"669\"/>\n        <source>Switch Wi-Fi On</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"568\"/>\n        <source>Wi-Fi is disabled</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"591\"/>\n        <source>Use the Wi-Fi switch to enable Wi-Fi and connect to a network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"636\"/>\n        <source>You&apos;re in flight mode</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"659\"/>\n        <source>Switch Wi-Fi on to connect to a wireless network. Flight mode won&apos;t be disabled.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"88\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"131\"/>\n        <source>Tethering</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"91\"/>\n        <source>Disable Tethering</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"118\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"143\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"153\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"202\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"203\"/>\n        <source>Wi-Fi</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"119\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"230\"/>\n        <source>Disconnected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"132\"/>\n        <source>Active</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"138\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"144\"/>\n        <source>Connected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"154\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"239\"/>\n        <source>Failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"164\"/>\n        <source>Connection Failure</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"166\"/>\n        <source>Connecting to %1 failed because %2.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"170\"/>\n        <source>the network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"273\"/>\n        <source>0 Devices</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"282\"/>\n        <source>Unknown</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"452\"/>\n        <source>Couldn&apos;t configure tethering</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"478\"/>\n        <source>Couldn&apos;t switch off tethering</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>WiredChunkUpdater</name>\n    <message>\n        <location filename=\"../chunk/wiredchunkupdater.cpp\" line=\"25\"/>\n        <source>Wired</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>WiredDevicePane</name>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.ui\" line=\"35\"/>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"64\"/>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"83\"/>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"90\"/>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"103\"/>\n        <source>Wired</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.ui\" line=\"84\"/>\n        <source>STATUS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.ui\" line=\"102\"/>\n        <source>This Device</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.ui\" line=\"246\"/>\n        <source>ACTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.ui\" line=\"255\"/>\n        <source>Connect</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.ui\" line=\"262\"/>\n        <source>Disconnect</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"84\"/>\n        <source>Disconnected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"95\"/>\n        <source>Connected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"104\"/>\n        <source>Failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"122\"/>\n        <source>Router</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"144\"/>\n        <source>Unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"148\"/>\n        <source>Connect an Ethernet cable.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"150\"/>\n        <source>This network is unavailable because %2.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"177\"/>\n        <source>Connection Failure</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"179\"/>\n        <source>Connecting to the network failed because %2.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>WiredOnboardingSetup</name>\n    <message>\n        <location filename=\"../onboarding/wiredonboardingsetup.ui\" line=\"57\"/>\n        <source>WIRED</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/wiredonboardingsetup.ui\" line=\"73\"/>\n        <source>Use Wired Connection</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/wiredonboardingsetup.cpp\" line=\"91\"/>\n        <source>Connect to the Internet using a wired network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/wiredonboardingsetup.cpp\" line=\"94\"/>\n        <source>To connect to the Internet using a wired network, connect the network cable.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>WirelessNetworkListDelegate</name>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"85\"/>\n        <source>Connected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"89\"/>\n        <source>In Range</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"97\"/>\n        <source>Out of range</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"107\"/>\n        <source>Not Secured</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"110\"/>\n        <source>Secured with Static WEP</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"113\"/>\n        <source>Secured with Dynamic WEP</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"116\"/>\n        <source>Secured with LEAP</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"119\"/>\n        <source>Secured with WPA-PSK</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"122\"/>\n        <source>Secured with WPA Enterprise</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"125\"/>\n        <source>Secured with WPA2-PSK</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"128\"/>\n        <source>Secured with WPA2 Enterprise</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"131\"/>\n        <source>Secured with WPA3</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>WirelessNetworkSelectionPopover</name>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"57\"/>\n        <source>Connect to a Wireless Network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"107\"/>\n        <source>KNOWN NETWORKS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"158\"/>\n        <source>NEW NETWORKS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"181\"/>\n        <source>New Manual Connection</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"297\"/>\n        <source>Enter the security key</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"421\"/>\n        <source>Network Security</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"454\"/>\n        <source>Select the EAP method. If you don&apos;t know what to select, contact your system administrator for the details.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"484\"/>\n        <source>TLS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"489\"/>\n        <source>LEAP</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"494\"/>\n        <source>PWD</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"499\"/>\n        <source>FAST</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"504\"/>\n        <source>TTLS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"509\"/>\n        <source>PEAP</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.cpp\" line=\"141\"/>\n        <source>Unknown Security</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.cpp\" line=\"142\"/>\n        <source>Not sure how to connect to this network. Use manual setup to connect to it.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.cpp\" line=\"217\"/>\n        <source>For network %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.cpp\" line=\"218\"/>\n        <source>Edit</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.cpp\" line=\"235\"/>\n        <source>Forget Network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.cpp\" line=\"316\"/>\n        <source>Wireless</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.cpp\" line=\"319\"/>\n        <source>Connect</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>WirelessOnboardingSetup</name>\n    <message>\n        <location filename=\"../onboarding/wirelessonboardingsetup.ui\" line=\"57\"/>\n        <source>WI-FI</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/wirelessonboardingsetup.ui\" line=\"64\"/>\n        <source>Connect to the Internet using a Wi-Fi network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/wirelessonboardingsetup.ui\" line=\"73\"/>\n        <source>Select Network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/NetworkPlugin/translations/cy.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"cy\" sourcelanguage=\"en_US\">\n<context>\n    <name>CellularPane</name>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.ui\" line=\"84\"/>\n        <source>STATUS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.ui\" line=\"102\"/>\n        <source>This Device</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.ui\" line=\"246\"/>\n        <source>ACTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.ui\" line=\"262\"/>\n        <source>Connect</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.ui\" line=\"269\"/>\n        <source>Disconnect</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.ui\" line=\"276\"/>\n        <source>Modem Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"105\"/>\n        <source>Disable Cellular</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"107\"/>\n        <source>Enable Cellular</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"129\"/>\n        <source>Disconnected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"135\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"397\"/>\n        <source>Cellular</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"140\"/>\n        <source>Connected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"149\"/>\n        <source>Failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"209\"/>\n        <source>No SIM Card</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"210\"/>\n        <source>Insert a SIM card to connect to cellular services.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"212\"/>\n        <source>No SIM</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"215\"/>\n        <source>Unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"218\"/>\n        <source>This network is unavailable because %2.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"249\"/>\n        <source>Connection Failure</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"251\"/>\n        <source>Connecting to the network failed because %2.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"326\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"339\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"346\"/>\n        <source>Enter SIM PIN</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"328\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"332\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"344\"/>\n        <source>SIM PIN Required</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"334\"/>\n        <source>A SIM PIN is required to connect to the cellular network.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"357\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"370\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"377\"/>\n        <source>Enter SIM PUK</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"359\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"363\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"375\"/>\n        <source>SIM PUK Required</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"365\"/>\n        <source>A SIM PUK is required to connect to the cellular network.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>Common</name>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"27\"/>\n        <source>the device is no longer managed by NetworkManager</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"29\"/>\n        <source>configuration of the device failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"31\"/>\n        <source>configuration of the device is unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"33\"/>\n        <source>configuration of the device expired</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"35\"/>\n        <source>required secrets were not provided</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"37\"/>\n        <source>the authentication supplicant disconnected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"39\"/>\n        <source>configuration of the authentication supplicant failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"41\"/>\n        <source>the authentication supplicant failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"43\"/>\n        <source>the authentication supplicant timed out</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"45\"/>\n        <source>the PPP network failed to start</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"47\"/>\n        <source>the PPP network was disconnected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"49\"/>\n        <source>the PPP network failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"51\"/>\n        <source>DHCP configuration failed to start</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"53\"/>\n        <source>DHCP configuration had an error</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"55\"/>\n        <source>DHCP configuration failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"67\"/>\n        <source>the modem is busy</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"69\"/>\n        <source>there is no dial tone on the modem</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"71\"/>\n        <source>no carrier is available on the modem</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"73\"/>\n        <source>dialling the number on the modem timed out</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"75\"/>\n        <source>dialling the number on the modem failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"77\"/>\n        <source>initialising the modem failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"79\"/>\n        <source>APN selection failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"81\"/>\n        <source>the modem is not searching</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"83\"/>\n        <source>the cell tower denied registration of the modem</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"85\"/>\n        <source>registration of the modem on the cell tower timed out</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"87\"/>\n        <source>registration of the modem on the cell tower failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"91\"/>\n        <source>the device firmware is missing</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"93\"/>\n        <source>the device was removed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"95\"/>\n        <source>the device is sleeping</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"97\"/>\n        <source>the connection was removed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"99\"/>\n        <source>you requested the action</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"107\"/>\n        <source>the modem was not found</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"109\"/>\n        <source>Bluetooth is not available</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"111\"/>\n        <source>the SIM card is not inserted</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"113\"/>\n        <source>the SIM PIN is required</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"115\"/>\n        <source>the SIM PUK is required</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"118\"/>\n        <source>the SIM PUK is exhausted</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"126\"/>\n        <source>ModemManager is not operational on this device</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"128\"/>\n        <source>the wireless network wasn&apos;t found</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"152\"/>\n        <source>an unknown error occurred</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"198\"/>\n        <source>Cellular</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>ConnectionSelectionPopover</name>\n    <message>\n        <location filename=\"../statusCenter/popovers/connectionselectionpopover.ui\" line=\"35\"/>\n        <source>Select Connection Profile</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/connectionselectionpopover.ui\" line=\"42\"/>\n        <source>Select a connection profile to use</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>DevicePane</name>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/devicepane.ui\" line=\"83\"/>\n        <source>STATUS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/devicepane.ui\" line=\"90\"/>\n        <source>theDesk doesn&apos;t support this network interface, so you won&apos;t be able to configure it fully here.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/devicepane.ui\" line=\"144\"/>\n        <source>ACTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/devicepane.ui\" line=\"153\"/>\n        <source>Disconnect</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>GenericChunkUpdater</name>\n    <message>\n        <location filename=\"../chunk/genericchunkupdater.cpp\" line=\"24\"/>\n        <source>Connected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>IPv4ConnectionEditorPane</name>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"35\"/>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.cpp\" line=\"69\"/>\n        <source>IPv4</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"99\"/>\n        <source>DHCP</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"104\"/>\n        <source>DHCP with manual DNS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"109\"/>\n        <source>Manual</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"114\"/>\n        <source>Shared</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"119\"/>\n        <source>Disabled</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"127\"/>\n        <source>Configuration Method</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"143\"/>\n        <source>Require IPv4</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"208\"/>\n        <source>IP Address</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"215\"/>\n        <source>Default Gateway</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"222\"/>\n        <source>Subnet Length</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"235\"/>\n        <source>ADDRESSES</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"255\"/>\n        <source>Set the IP address that this device will be assigned.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"345\"/>\n        <source>DNS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"352\"/>\n        <source>1.1.1.1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"359\"/>\n        <source>Configure the DNS servers that will be used to resolve domain names.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.cpp\" line=\"217\"/>\n        <source>For DNS server %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.cpp\" line=\"218\"/>\n        <source>Remove</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>NetworkChunk</name>\n    <message>\n        <location filename=\"../chunk/networkchunk.cpp\" line=\"64\"/>\n        <source>Network Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../chunk/networkchunk.cpp\" line=\"103\"/>\n        <source>Disconnected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../chunk/networkchunk.cpp\" line=\"137\"/>\n        <source>Login Required</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../chunk/networkchunk.cpp\" line=\"140\"/>\n        <source>Can&apos;t get to the Internet</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>NetworkConnectionEditor</name>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"90\"/>\n        <source>SETTINGS MODIFIED</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"125\"/>\n        <source>Revert</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"136\"/>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"224\"/>\n        <source>Save</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"195\"/>\n        <source>DONE?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"260\"/>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"303\"/>\n        <source>General</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"327\"/>\n        <source>Connection Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.cpp\" line=\"203\"/>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.cpp\" line=\"231\"/>\n        <source>Couldn&apos;t save settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>NetworkStatusCenterLeftPane</name>\n    <message>\n        <location filename=\"../statusCenter/networkstatuscenterleftpane.ui\" line=\"35\"/>\n        <source>Network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>NetworkStatusCenterPane</name>\n    <message>\n        <location filename=\"../statusCenter/networkstatuscenterpane.ui\" line=\"100\"/>\n        <source>NetworkManager is not operational</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/networkstatuscenterpane.ui\" line=\"110\"/>\n        <source>Contact your system administrator</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/networkstatuscenterpane.cpp\" line=\"159\"/>\n        <source>Network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>OnboardingNetwork</name>\n    <message>\n        <location filename=\"../onboarding/onboardingnetwork.ui\" line=\"35\"/>\n        <location filename=\"../onboarding/onboardingnetwork.cpp\" line=\"96\"/>\n        <source>Network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingnetwork.ui\" line=\"42\"/>\n        <source>Connect to the Internet to get updates and install new software.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingnetwork.ui\" line=\"194\"/>\n        <source>You&apos;re connected!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingnetwork.ui\" line=\"204\"/>\n        <source>Disconnect and connect to a different network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingnetwork.ui\" line=\"275\"/>\n        <source>You can always set up the network connection later.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingnetwork.cpp\" line=\"73\"/>\n        <source>Continue without Internet</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingnetwork.cpp\" line=\"79\"/>\n        <location filename=\"../onboarding/onboardingnetwork.cpp\" line=\"85\"/>\n        <source>Next</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SecurityEapPeap</name>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"35\"/>\n        <source>PEAP</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"42\"/>\n        <source>Enter the settings for this network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"82\"/>\n        <source>Phase-2 Authentication</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"89\"/>\n        <source>Anonymous Identity</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"99\"/>\n        <source>PEAP version</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"106\"/>\n        <source>Username</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"113\"/>\n        <source>Password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"120\"/>\n        <source>CA Certificate</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"127\"/>\n        <source>Browse...</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"135\"/>\n        <source>MSCHAPv2</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"140\"/>\n        <source>MD5</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"145\"/>\n        <source>GTC</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"171\"/>\n        <source>Automatic</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"187\"/>\n        <source>Version 0</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"200\"/>\n        <source>Version 1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"244\"/>\n        <source>Connect</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.cpp\" line=\"107\"/>\n        <source>Certificates (*.pem, *.cer)</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SecurityEapUnsupported</name>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeapunsupported.ui\" line=\"35\"/>\n        <location filename=\"../statusCenter/eap/securityeapunsupported.ui\" line=\"77\"/>\n        <source>Unsupported Security Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeapunsupported.ui\" line=\"87\"/>\n        <source>Sorry, theDesk doesn&apos;t support those security settings at the moment. You can try using the terminal to configure this network.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SimSettingsPopover</name>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"57\"/>\n        <source>Modem Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"88\"/>\n        <source>SIM PIN</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"98\"/>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"114\"/>\n        <source>Enable SIM PIN</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"105\"/>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"120\"/>\n        <source>Disable SIM PIN</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"112\"/>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"164\"/>\n        <source>Change SIM PIN</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"128\"/>\n        <source>CALLS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"138\"/>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"769\"/>\n        <source>Call Waiting</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"188\"/>\n        <source>IMSI</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"195\"/>\n        <source>IMEI</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"208\"/>\n        <source>MODEM INFORMATION</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"215\"/>\n        <source>Carrier</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"340\"/>\n        <source>Enter the new SIM PIN</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"537\"/>\n        <source>Enter the current SIM PIN</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"806\"/>\n        <source>Enable Call Waiting</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"813\"/>\n        <source>Call Waiting allows you to receive calls while another call is currently active.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"58\"/>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"59\"/>\n        <source>No SIM card</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"142\"/>\n        <source>You have %n remaining tries</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n        </translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"203\"/>\n        <source>Error</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"204\"/>\n        <source>Couldn&apos;t get current Call Waiting status from carrier</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SwitchManager</name>\n    <message>\n        <location filename=\"../switchmanager.cpp\" line=\"63\"/>\n        <location filename=\"../switchmanager.cpp\" line=\"72\"/>\n        <location filename=\"../switchmanager.cpp\" line=\"122\"/>\n        <source>Flight Mode</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../switchmanager.cpp\" line=\"67\"/>\n        <source>Switch off Flight Mode</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../switchmanager.cpp\" line=\"78\"/>\n        <location filename=\"../switchmanager.cpp\" line=\"123\"/>\n        <source>Wi-Fi</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../switchmanager.cpp\" line=\"88\"/>\n        <location filename=\"../switchmanager.cpp\" line=\"124\"/>\n        <source>Cellular</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>TetheringSettingsPopover</name>\n    <message>\n        <location filename=\"../statusCenter/popovers/tetheringsettingspopover.ui\" line=\"35\"/>\n        <source>Tethering Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/tetheringsettingspopover.ui\" line=\"63\"/>\n        <source>SSID</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/tetheringsettingspopover.ui\" line=\"73\"/>\n        <source>These settings will be used to set up a Wi-Fi network that other devices can connect to when tethering is enabled.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/tetheringsettingspopover.ui\" line=\"96\"/>\n        <source>Network Key</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/tetheringsettingspopover.cpp\" line=\"64\"/>\n        <source>Network key needs to be at least 8 characters long</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>UnlockModemPopover</name>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.ui\" line=\"190\"/>\n        <source>Enter the SIM PIN</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.ui\" line=\"356\"/>\n        <source>SIM PUK</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.ui\" line=\"363\"/>\n        <source>You&apos;ll also need to provide a new SIM PIN to set once the SIM is unlocked.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.ui\" line=\"379\"/>\n        <source>SIM PUK REQUIRED</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.ui\" line=\"425\"/>\n        <source>Unlock SIM Card</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.ui\" line=\"456\"/>\n        <source>New SIM PIN</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.ui\" line=\"466\"/>\n        <source>Confirm SIM PIN</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.cpp\" line=\"48\"/>\n        <source>Don&apos;t guess the PUK!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.cpp\" line=\"49\"/>\n        <source>Once you exhaust your attempts, the SIM card will be blocked forever.\n\nYou&apos;ll need to contact your carrier for a new SIM card.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.cpp\" line=\"68\"/>\n        <source>If you enter the incorrect PIN again, your SIM card will be PUK locked, and you&apos;ll need to contact your carrier.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.cpp\" line=\"70\"/>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.cpp\" line=\"75\"/>\n        <source>You have %n remaining tries</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n        </translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.cpp\" line=\"73\"/>\n        <source>This is your final chance to get the PUK right before you&apos;ll need to obtain a new SIM card from your carrier.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.cpp\" line=\"78\"/>\n        <source>Contact your carrier to obtain the &lt;b&gt;SIM PUK&lt;/b&gt;, and enter it below to unlock %1.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>WifiConnectionEditorPane</name>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/wificonnectioneditorpane.ui\" line=\"35\"/>\n        <location filename=\"../statusCenter/connectionEditor/wificonnectioneditorpane.cpp\" line=\"47\"/>\n        <source>Wi-Fi</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/wificonnectioneditorpane.ui\" line=\"59\"/>\n        <source>Mode</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/wificonnectioneditorpane.ui\" line=\"66\"/>\n        <source>SSID</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/wificonnectioneditorpane.ui\" line=\"77\"/>\n        <source>Infrastructure</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/wificonnectioneditorpane.ui\" line=\"82\"/>\n        <source>Ad-Hoc</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/wificonnectioneditorpane.ui\" line=\"87\"/>\n        <source>Access Point</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>WifiDevicePane</name>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"106\"/>\n        <source>STATUS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"124\"/>\n        <source>This Device</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"268\"/>\n        <source>ACTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"277\"/>\n        <source>Select Network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"284\"/>\n        <source>Disconnect</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"348\"/>\n        <source>TETHERING</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"355\"/>\n        <source>Network Key</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"375\"/>\n        <source>Use Tethering to share your internet connection with other devices over Wi-Fi.\n\n**While Tethering is active, you won&apos;t be able to connect to the Internet with Wi-Fi, so you&apos;ll need to make sure you have an alternate way to connect to the Internet.**</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"398\"/>\n        <source>Enable Tethering</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"414\"/>\n        <source>SSID</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"440\"/>\n        <source>Set Tethering Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"489\"/>\n        <source>Wi-Fi is off</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"512\"/>\n        <source>Switch Wi-Fi on to connect to a wireless network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"522\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"669\"/>\n        <source>Switch Wi-Fi On</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"568\"/>\n        <source>Wi-Fi is disabled</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"591\"/>\n        <source>Use the Wi-Fi switch to enable Wi-Fi and connect to a network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"636\"/>\n        <source>You&apos;re in flight mode</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"659\"/>\n        <source>Switch Wi-Fi on to connect to a wireless network. Flight mode won&apos;t be disabled.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"88\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"131\"/>\n        <source>Tethering</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"91\"/>\n        <source>Disable Tethering</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"118\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"143\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"153\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"202\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"203\"/>\n        <source>Wi-Fi</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"119\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"230\"/>\n        <source>Disconnected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"132\"/>\n        <source>Active</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"138\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"144\"/>\n        <source>Connected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"154\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"239\"/>\n        <source>Failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"164\"/>\n        <source>Connection Failure</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"166\"/>\n        <source>Connecting to %1 failed because %2.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"170\"/>\n        <source>the network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"273\"/>\n        <source>0 Devices</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"282\"/>\n        <source>Unknown</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"452\"/>\n        <source>Couldn&apos;t configure tethering</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"478\"/>\n        <source>Couldn&apos;t switch off tethering</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>WiredChunkUpdater</name>\n    <message>\n        <location filename=\"../chunk/wiredchunkupdater.cpp\" line=\"25\"/>\n        <source>Wired</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>WiredDevicePane</name>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.ui\" line=\"35\"/>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"64\"/>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"83\"/>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"90\"/>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"103\"/>\n        <source>Wired</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.ui\" line=\"84\"/>\n        <source>STATUS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.ui\" line=\"102\"/>\n        <source>This Device</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.ui\" line=\"246\"/>\n        <source>ACTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.ui\" line=\"255\"/>\n        <source>Connect</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.ui\" line=\"262\"/>\n        <source>Disconnect</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"84\"/>\n        <source>Disconnected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"95\"/>\n        <source>Connected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"104\"/>\n        <source>Failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"122\"/>\n        <source>Router</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"144\"/>\n        <source>Unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"148\"/>\n        <source>Connect an Ethernet cable.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"150\"/>\n        <source>This network is unavailable because %2.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"177\"/>\n        <source>Connection Failure</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"179\"/>\n        <source>Connecting to the network failed because %2.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>WiredOnboardingSetup</name>\n    <message>\n        <location filename=\"../onboarding/wiredonboardingsetup.ui\" line=\"57\"/>\n        <source>WIRED</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/wiredonboardingsetup.ui\" line=\"73\"/>\n        <source>Use Wired Connection</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/wiredonboardingsetup.cpp\" line=\"91\"/>\n        <source>Connect to the Internet using a wired network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/wiredonboardingsetup.cpp\" line=\"94\"/>\n        <source>To connect to the Internet using a wired network, connect the network cable.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>WirelessNetworkListDelegate</name>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"85\"/>\n        <source>Connected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"89\"/>\n        <source>In Range</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"97\"/>\n        <source>Out of range</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"107\"/>\n        <source>Not Secured</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"110\"/>\n        <source>Secured with Static WEP</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"113\"/>\n        <source>Secured with Dynamic WEP</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"116\"/>\n        <source>Secured with LEAP</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"119\"/>\n        <source>Secured with WPA-PSK</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"122\"/>\n        <source>Secured with WPA Enterprise</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"125\"/>\n        <source>Secured with WPA2-PSK</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"128\"/>\n        <source>Secured with WPA2 Enterprise</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"131\"/>\n        <source>Secured with WPA3</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>WirelessNetworkSelectionPopover</name>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"57\"/>\n        <source>Connect to a Wireless Network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"107\"/>\n        <source>KNOWN NETWORKS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"158\"/>\n        <source>NEW NETWORKS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"181\"/>\n        <source>New Manual Connection</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"297\"/>\n        <source>Enter the security key</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"421\"/>\n        <source>Network Security</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"454\"/>\n        <source>Select the EAP method. If you don&apos;t know what to select, contact your system administrator for the details.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"484\"/>\n        <source>TLS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"489\"/>\n        <source>LEAP</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"494\"/>\n        <source>PWD</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"499\"/>\n        <source>FAST</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"504\"/>\n        <source>TTLS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"509\"/>\n        <source>PEAP</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.cpp\" line=\"141\"/>\n        <source>Unknown Security</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.cpp\" line=\"142\"/>\n        <source>Not sure how to connect to this network. Use manual setup to connect to it.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.cpp\" line=\"217\"/>\n        <source>For network %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.cpp\" line=\"218\"/>\n        <source>Edit</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.cpp\" line=\"235\"/>\n        <source>Forget Network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.cpp\" line=\"316\"/>\n        <source>Wireless</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.cpp\" line=\"319\"/>\n        <source>Connect</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>WirelessOnboardingSetup</name>\n    <message>\n        <location filename=\"../onboarding/wirelessonboardingsetup.ui\" line=\"57\"/>\n        <source>WI-FI</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/wirelessonboardingsetup.ui\" line=\"64\"/>\n        <source>Connect to the Internet using a Wi-Fi network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/wirelessonboardingsetup.ui\" line=\"73\"/>\n        <source>Select Network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/NetworkPlugin/translations/da.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"da\" sourcelanguage=\"en_US\">\n<context>\n    <name>CellularPane</name>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.ui\" line=\"84\"/>\n        <source>STATUS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.ui\" line=\"102\"/>\n        <source>This Device</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.ui\" line=\"246\"/>\n        <source>ACTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.ui\" line=\"262\"/>\n        <source>Connect</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.ui\" line=\"269\"/>\n        <source>Disconnect</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.ui\" line=\"276\"/>\n        <source>Modem Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"105\"/>\n        <source>Disable Cellular</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"107\"/>\n        <source>Enable Cellular</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"129\"/>\n        <source>Disconnected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"135\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"397\"/>\n        <source>Cellular</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"140\"/>\n        <source>Connected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"149\"/>\n        <source>Failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"209\"/>\n        <source>No SIM Card</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"210\"/>\n        <source>Insert a SIM card to connect to cellular services.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"212\"/>\n        <source>No SIM</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"215\"/>\n        <source>Unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"218\"/>\n        <source>This network is unavailable because %2.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"249\"/>\n        <source>Connection Failure</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"251\"/>\n        <source>Connecting to the network failed because %2.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"326\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"339\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"346\"/>\n        <source>Enter SIM PIN</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"328\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"332\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"344\"/>\n        <source>SIM PIN Required</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"334\"/>\n        <source>A SIM PIN is required to connect to the cellular network.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"357\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"370\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"377\"/>\n        <source>Enter SIM PUK</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"359\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"363\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"375\"/>\n        <source>SIM PUK Required</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"365\"/>\n        <source>A SIM PUK is required to connect to the cellular network.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>Common</name>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"27\"/>\n        <source>the device is no longer managed by NetworkManager</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"29\"/>\n        <source>configuration of the device failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"31\"/>\n        <source>configuration of the device is unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"33\"/>\n        <source>configuration of the device expired</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"35\"/>\n        <source>required secrets were not provided</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"37\"/>\n        <source>the authentication supplicant disconnected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"39\"/>\n        <source>configuration of the authentication supplicant failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"41\"/>\n        <source>the authentication supplicant failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"43\"/>\n        <source>the authentication supplicant timed out</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"45\"/>\n        <source>the PPP network failed to start</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"47\"/>\n        <source>the PPP network was disconnected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"49\"/>\n        <source>the PPP network failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"51\"/>\n        <source>DHCP configuration failed to start</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"53\"/>\n        <source>DHCP configuration had an error</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"55\"/>\n        <source>DHCP configuration failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"67\"/>\n        <source>the modem is busy</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"69\"/>\n        <source>there is no dial tone on the modem</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"71\"/>\n        <source>no carrier is available on the modem</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"73\"/>\n        <source>dialling the number on the modem timed out</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"75\"/>\n        <source>dialling the number on the modem failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"77\"/>\n        <source>initialising the modem failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"79\"/>\n        <source>APN selection failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"81\"/>\n        <source>the modem is not searching</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"83\"/>\n        <source>the cell tower denied registration of the modem</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"85\"/>\n        <source>registration of the modem on the cell tower timed out</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"87\"/>\n        <source>registration of the modem on the cell tower failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"91\"/>\n        <source>the device firmware is missing</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"93\"/>\n        <source>the device was removed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"95\"/>\n        <source>the device is sleeping</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"97\"/>\n        <source>the connection was removed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"99\"/>\n        <source>you requested the action</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"107\"/>\n        <source>the modem was not found</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"109\"/>\n        <source>Bluetooth is not available</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"111\"/>\n        <source>the SIM card is not inserted</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"113\"/>\n        <source>the SIM PIN is required</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"115\"/>\n        <source>the SIM PUK is required</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"118\"/>\n        <source>the SIM PUK is exhausted</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"126\"/>\n        <source>ModemManager is not operational on this device</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"128\"/>\n        <source>the wireless network wasn&apos;t found</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"152\"/>\n        <source>an unknown error occurred</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"198\"/>\n        <source>Cellular</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>ConnectionSelectionPopover</name>\n    <message>\n        <location filename=\"../statusCenter/popovers/connectionselectionpopover.ui\" line=\"35\"/>\n        <source>Select Connection Profile</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/connectionselectionpopover.ui\" line=\"42\"/>\n        <source>Select a connection profile to use</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>DevicePane</name>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/devicepane.ui\" line=\"83\"/>\n        <source>STATUS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/devicepane.ui\" line=\"90\"/>\n        <source>theDesk doesn&apos;t support this network interface, so you won&apos;t be able to configure it fully here.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/devicepane.ui\" line=\"144\"/>\n        <source>ACTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/devicepane.ui\" line=\"153\"/>\n        <source>Disconnect</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>GenericChunkUpdater</name>\n    <message>\n        <location filename=\"../chunk/genericchunkupdater.cpp\" line=\"24\"/>\n        <source>Connected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>IPv4ConnectionEditorPane</name>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"35\"/>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.cpp\" line=\"69\"/>\n        <source>IPv4</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"99\"/>\n        <source>DHCP</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"104\"/>\n        <source>DHCP with manual DNS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"109\"/>\n        <source>Manual</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"114\"/>\n        <source>Shared</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"119\"/>\n        <source>Disabled</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"127\"/>\n        <source>Configuration Method</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"143\"/>\n        <source>Require IPv4</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"208\"/>\n        <source>IP Address</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"215\"/>\n        <source>Default Gateway</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"222\"/>\n        <source>Subnet Length</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"235\"/>\n        <source>ADDRESSES</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"255\"/>\n        <source>Set the IP address that this device will be assigned.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"345\"/>\n        <source>DNS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"352\"/>\n        <source>1.1.1.1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"359\"/>\n        <source>Configure the DNS servers that will be used to resolve domain names.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.cpp\" line=\"217\"/>\n        <source>For DNS server %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.cpp\" line=\"218\"/>\n        <source>Remove</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>NetworkChunk</name>\n    <message>\n        <location filename=\"../chunk/networkchunk.cpp\" line=\"64\"/>\n        <source>Network Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../chunk/networkchunk.cpp\" line=\"103\"/>\n        <source>Disconnected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../chunk/networkchunk.cpp\" line=\"137\"/>\n        <source>Login Required</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../chunk/networkchunk.cpp\" line=\"140\"/>\n        <source>Can&apos;t get to the Internet</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>NetworkConnectionEditor</name>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"90\"/>\n        <source>SETTINGS MODIFIED</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"125\"/>\n        <source>Revert</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"136\"/>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"224\"/>\n        <source>Save</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"195\"/>\n        <source>DONE?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"260\"/>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"303\"/>\n        <source>General</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"327\"/>\n        <source>Connection Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.cpp\" line=\"203\"/>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.cpp\" line=\"231\"/>\n        <source>Couldn&apos;t save settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>NetworkStatusCenterLeftPane</name>\n    <message>\n        <location filename=\"../statusCenter/networkstatuscenterleftpane.ui\" line=\"35\"/>\n        <source>Network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>NetworkStatusCenterPane</name>\n    <message>\n        <location filename=\"../statusCenter/networkstatuscenterpane.ui\" line=\"100\"/>\n        <source>NetworkManager is not operational</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/networkstatuscenterpane.ui\" line=\"110\"/>\n        <source>Contact your system administrator</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/networkstatuscenterpane.cpp\" line=\"159\"/>\n        <source>Network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>OnboardingNetwork</name>\n    <message>\n        <location filename=\"../onboarding/onboardingnetwork.ui\" line=\"35\"/>\n        <location filename=\"../onboarding/onboardingnetwork.cpp\" line=\"96\"/>\n        <source>Network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingnetwork.ui\" line=\"42\"/>\n        <source>Connect to the Internet to get updates and install new software.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingnetwork.ui\" line=\"194\"/>\n        <source>You&apos;re connected!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingnetwork.ui\" line=\"204\"/>\n        <source>Disconnect and connect to a different network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingnetwork.ui\" line=\"275\"/>\n        <source>You can always set up the network connection later.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingnetwork.cpp\" line=\"73\"/>\n        <source>Continue without Internet</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingnetwork.cpp\" line=\"79\"/>\n        <location filename=\"../onboarding/onboardingnetwork.cpp\" line=\"85\"/>\n        <source>Next</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SecurityEapPeap</name>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"35\"/>\n        <source>PEAP</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"42\"/>\n        <source>Enter the settings for this network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"82\"/>\n        <source>Phase-2 Authentication</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"89\"/>\n        <source>Anonymous Identity</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"99\"/>\n        <source>PEAP version</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"106\"/>\n        <source>Username</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"113\"/>\n        <source>Password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"120\"/>\n        <source>CA Certificate</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"127\"/>\n        <source>Browse...</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"135\"/>\n        <source>MSCHAPv2</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"140\"/>\n        <source>MD5</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"145\"/>\n        <source>GTC</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"171\"/>\n        <source>Automatic</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"187\"/>\n        <source>Version 0</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"200\"/>\n        <source>Version 1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"244\"/>\n        <source>Connect</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.cpp\" line=\"107\"/>\n        <source>Certificates (*.pem, *.cer)</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SecurityEapUnsupported</name>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeapunsupported.ui\" line=\"35\"/>\n        <location filename=\"../statusCenter/eap/securityeapunsupported.ui\" line=\"77\"/>\n        <source>Unsupported Security Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeapunsupported.ui\" line=\"87\"/>\n        <source>Sorry, theDesk doesn&apos;t support those security settings at the moment. You can try using the terminal to configure this network.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SimSettingsPopover</name>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"57\"/>\n        <source>Modem Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"88\"/>\n        <source>SIM PIN</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"98\"/>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"114\"/>\n        <source>Enable SIM PIN</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"105\"/>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"120\"/>\n        <source>Disable SIM PIN</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"112\"/>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"164\"/>\n        <source>Change SIM PIN</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"128\"/>\n        <source>CALLS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"138\"/>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"769\"/>\n        <source>Call Waiting</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"188\"/>\n        <source>IMSI</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"195\"/>\n        <source>IMEI</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"208\"/>\n        <source>MODEM INFORMATION</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"215\"/>\n        <source>Carrier</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"340\"/>\n        <source>Enter the new SIM PIN</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"537\"/>\n        <source>Enter the current SIM PIN</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"806\"/>\n        <source>Enable Call Waiting</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"813\"/>\n        <source>Call Waiting allows you to receive calls while another call is currently active.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"58\"/>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"59\"/>\n        <source>No SIM card</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"142\"/>\n        <source>You have %n remaining tries</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n        </translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"203\"/>\n        <source>Error</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"204\"/>\n        <source>Couldn&apos;t get current Call Waiting status from carrier</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SwitchManager</name>\n    <message>\n        <location filename=\"../switchmanager.cpp\" line=\"63\"/>\n        <location filename=\"../switchmanager.cpp\" line=\"72\"/>\n        <location filename=\"../switchmanager.cpp\" line=\"122\"/>\n        <source>Flight Mode</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../switchmanager.cpp\" line=\"67\"/>\n        <source>Switch off Flight Mode</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../switchmanager.cpp\" line=\"78\"/>\n        <location filename=\"../switchmanager.cpp\" line=\"123\"/>\n        <source>Wi-Fi</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../switchmanager.cpp\" line=\"88\"/>\n        <location filename=\"../switchmanager.cpp\" line=\"124\"/>\n        <source>Cellular</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>TetheringSettingsPopover</name>\n    <message>\n        <location filename=\"../statusCenter/popovers/tetheringsettingspopover.ui\" line=\"35\"/>\n        <source>Tethering Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/tetheringsettingspopover.ui\" line=\"63\"/>\n        <source>SSID</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/tetheringsettingspopover.ui\" line=\"73\"/>\n        <source>These settings will be used to set up a Wi-Fi network that other devices can connect to when tethering is enabled.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/tetheringsettingspopover.ui\" line=\"96\"/>\n        <source>Network Key</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/tetheringsettingspopover.cpp\" line=\"64\"/>\n        <source>Network key needs to be at least 8 characters long</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>UnlockModemPopover</name>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.ui\" line=\"190\"/>\n        <source>Enter the SIM PIN</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.ui\" line=\"356\"/>\n        <source>SIM PUK</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.ui\" line=\"363\"/>\n        <source>You&apos;ll also need to provide a new SIM PIN to set once the SIM is unlocked.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.ui\" line=\"379\"/>\n        <source>SIM PUK REQUIRED</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.ui\" line=\"425\"/>\n        <source>Unlock SIM Card</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.ui\" line=\"456\"/>\n        <source>New SIM PIN</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.ui\" line=\"466\"/>\n        <source>Confirm SIM PIN</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.cpp\" line=\"48\"/>\n        <source>Don&apos;t guess the PUK!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.cpp\" line=\"49\"/>\n        <source>Once you exhaust your attempts, the SIM card will be blocked forever.\n\nYou&apos;ll need to contact your carrier for a new SIM card.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.cpp\" line=\"68\"/>\n        <source>If you enter the incorrect PIN again, your SIM card will be PUK locked, and you&apos;ll need to contact your carrier.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.cpp\" line=\"70\"/>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.cpp\" line=\"75\"/>\n        <source>You have %n remaining tries</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n        </translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.cpp\" line=\"73\"/>\n        <source>This is your final chance to get the PUK right before you&apos;ll need to obtain a new SIM card from your carrier.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.cpp\" line=\"78\"/>\n        <source>Contact your carrier to obtain the &lt;b&gt;SIM PUK&lt;/b&gt;, and enter it below to unlock %1.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>WifiConnectionEditorPane</name>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/wificonnectioneditorpane.ui\" line=\"35\"/>\n        <location filename=\"../statusCenter/connectionEditor/wificonnectioneditorpane.cpp\" line=\"47\"/>\n        <source>Wi-Fi</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/wificonnectioneditorpane.ui\" line=\"59\"/>\n        <source>Mode</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/wificonnectioneditorpane.ui\" line=\"66\"/>\n        <source>SSID</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/wificonnectioneditorpane.ui\" line=\"77\"/>\n        <source>Infrastructure</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/wificonnectioneditorpane.ui\" line=\"82\"/>\n        <source>Ad-Hoc</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/wificonnectioneditorpane.ui\" line=\"87\"/>\n        <source>Access Point</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>WifiDevicePane</name>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"106\"/>\n        <source>STATUS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"124\"/>\n        <source>This Device</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"268\"/>\n        <source>ACTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"277\"/>\n        <source>Select Network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"284\"/>\n        <source>Disconnect</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"348\"/>\n        <source>TETHERING</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"355\"/>\n        <source>Network Key</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"375\"/>\n        <source>Use Tethering to share your internet connection with other devices over Wi-Fi.\n\n**While Tethering is active, you won&apos;t be able to connect to the Internet with Wi-Fi, so you&apos;ll need to make sure you have an alternate way to connect to the Internet.**</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"398\"/>\n        <source>Enable Tethering</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"414\"/>\n        <source>SSID</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"440\"/>\n        <source>Set Tethering Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"489\"/>\n        <source>Wi-Fi is off</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"512\"/>\n        <source>Switch Wi-Fi on to connect to a wireless network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"522\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"669\"/>\n        <source>Switch Wi-Fi On</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"568\"/>\n        <source>Wi-Fi is disabled</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"591\"/>\n        <source>Use the Wi-Fi switch to enable Wi-Fi and connect to a network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"636\"/>\n        <source>You&apos;re in flight mode</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"659\"/>\n        <source>Switch Wi-Fi on to connect to a wireless network. Flight mode won&apos;t be disabled.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"88\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"131\"/>\n        <source>Tethering</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"91\"/>\n        <source>Disable Tethering</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"118\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"143\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"153\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"202\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"203\"/>\n        <source>Wi-Fi</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"119\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"230\"/>\n        <source>Disconnected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"132\"/>\n        <source>Active</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"138\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"144\"/>\n        <source>Connected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"154\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"239\"/>\n        <source>Failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"164\"/>\n        <source>Connection Failure</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"166\"/>\n        <source>Connecting to %1 failed because %2.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"170\"/>\n        <source>the network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"273\"/>\n        <source>0 Devices</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"282\"/>\n        <source>Unknown</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"452\"/>\n        <source>Couldn&apos;t configure tethering</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"478\"/>\n        <source>Couldn&apos;t switch off tethering</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>WiredChunkUpdater</name>\n    <message>\n        <location filename=\"../chunk/wiredchunkupdater.cpp\" line=\"25\"/>\n        <source>Wired</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>WiredDevicePane</name>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.ui\" line=\"35\"/>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"64\"/>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"83\"/>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"90\"/>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"103\"/>\n        <source>Wired</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.ui\" line=\"84\"/>\n        <source>STATUS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.ui\" line=\"102\"/>\n        <source>This Device</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.ui\" line=\"246\"/>\n        <source>ACTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.ui\" line=\"255\"/>\n        <source>Connect</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.ui\" line=\"262\"/>\n        <source>Disconnect</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"84\"/>\n        <source>Disconnected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"95\"/>\n        <source>Connected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"104\"/>\n        <source>Failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"122\"/>\n        <source>Router</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"144\"/>\n        <source>Unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"148\"/>\n        <source>Connect an Ethernet cable.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"150\"/>\n        <source>This network is unavailable because %2.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"177\"/>\n        <source>Connection Failure</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"179\"/>\n        <source>Connecting to the network failed because %2.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>WiredOnboardingSetup</name>\n    <message>\n        <location filename=\"../onboarding/wiredonboardingsetup.ui\" line=\"57\"/>\n        <source>WIRED</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/wiredonboardingsetup.ui\" line=\"73\"/>\n        <source>Use Wired Connection</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/wiredonboardingsetup.cpp\" line=\"91\"/>\n        <source>Connect to the Internet using a wired network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/wiredonboardingsetup.cpp\" line=\"94\"/>\n        <source>To connect to the Internet using a wired network, connect the network cable.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>WirelessNetworkListDelegate</name>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"85\"/>\n        <source>Connected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"89\"/>\n        <source>In Range</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"97\"/>\n        <source>Out of range</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"107\"/>\n        <source>Not Secured</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"110\"/>\n        <source>Secured with Static WEP</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"113\"/>\n        <source>Secured with Dynamic WEP</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"116\"/>\n        <source>Secured with LEAP</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"119\"/>\n        <source>Secured with WPA-PSK</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"122\"/>\n        <source>Secured with WPA Enterprise</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"125\"/>\n        <source>Secured with WPA2-PSK</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"128\"/>\n        <source>Secured with WPA2 Enterprise</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"131\"/>\n        <source>Secured with WPA3</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>WirelessNetworkSelectionPopover</name>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"57\"/>\n        <source>Connect to a Wireless Network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"107\"/>\n        <source>KNOWN NETWORKS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"158\"/>\n        <source>NEW NETWORKS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"181\"/>\n        <source>New Manual Connection</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"297\"/>\n        <source>Enter the security key</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"421\"/>\n        <source>Network Security</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"454\"/>\n        <source>Select the EAP method. If you don&apos;t know what to select, contact your system administrator for the details.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"484\"/>\n        <source>TLS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"489\"/>\n        <source>LEAP</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"494\"/>\n        <source>PWD</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"499\"/>\n        <source>FAST</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"504\"/>\n        <source>TTLS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"509\"/>\n        <source>PEAP</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.cpp\" line=\"141\"/>\n        <source>Unknown Security</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.cpp\" line=\"142\"/>\n        <source>Not sure how to connect to this network. Use manual setup to connect to it.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.cpp\" line=\"217\"/>\n        <source>For network %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.cpp\" line=\"218\"/>\n        <source>Edit</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.cpp\" line=\"235\"/>\n        <source>Forget Network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.cpp\" line=\"316\"/>\n        <source>Wireless</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.cpp\" line=\"319\"/>\n        <source>Connect</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>WirelessOnboardingSetup</name>\n    <message>\n        <location filename=\"../onboarding/wirelessonboardingsetup.ui\" line=\"57\"/>\n        <source>WI-FI</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/wirelessonboardingsetup.ui\" line=\"64\"/>\n        <source>Connect to the Internet using a Wi-Fi network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/wirelessonboardingsetup.ui\" line=\"73\"/>\n        <source>Select Network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/NetworkPlugin/translations/de.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"de\" sourcelanguage=\"en_US\">\n<context>\n    <name>CellularPane</name>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.ui\" line=\"84\"/>\n        <source>STATUS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.ui\" line=\"102\"/>\n        <source>This Device</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.ui\" line=\"246\"/>\n        <source>ACTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.ui\" line=\"262\"/>\n        <source>Connect</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.ui\" line=\"269\"/>\n        <source>Disconnect</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.ui\" line=\"276\"/>\n        <source>Modem Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"105\"/>\n        <source>Disable Cellular</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"107\"/>\n        <source>Enable Cellular</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"129\"/>\n        <source>Disconnected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"135\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"397\"/>\n        <source>Cellular</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"140\"/>\n        <source>Connected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"149\"/>\n        <source>Failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"209\"/>\n        <source>No SIM Card</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"210\"/>\n        <source>Insert a SIM card to connect to cellular services.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"212\"/>\n        <source>No SIM</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"215\"/>\n        <source>Unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"218\"/>\n        <source>This network is unavailable because %2.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"249\"/>\n        <source>Connection Failure</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"251\"/>\n        <source>Connecting to the network failed because %2.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"326\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"339\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"346\"/>\n        <source>Enter SIM PIN</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"328\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"332\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"344\"/>\n        <source>SIM PIN Required</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"334\"/>\n        <source>A SIM PIN is required to connect to the cellular network.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"357\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"370\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"377\"/>\n        <source>Enter SIM PUK</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"359\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"363\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"375\"/>\n        <source>SIM PUK Required</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"365\"/>\n        <source>A SIM PUK is required to connect to the cellular network.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>Common</name>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"27\"/>\n        <source>the device is no longer managed by NetworkManager</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"29\"/>\n        <source>configuration of the device failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"31\"/>\n        <source>configuration of the device is unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"33\"/>\n        <source>configuration of the device expired</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"35\"/>\n        <source>required secrets were not provided</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"37\"/>\n        <source>the authentication supplicant disconnected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"39\"/>\n        <source>configuration of the authentication supplicant failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"41\"/>\n        <source>the authentication supplicant failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"43\"/>\n        <source>the authentication supplicant timed out</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"45\"/>\n        <source>the PPP network failed to start</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"47\"/>\n        <source>the PPP network was disconnected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"49\"/>\n        <source>the PPP network failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"51\"/>\n        <source>DHCP configuration failed to start</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"53\"/>\n        <source>DHCP configuration had an error</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"55\"/>\n        <source>DHCP configuration failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"67\"/>\n        <source>the modem is busy</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"69\"/>\n        <source>there is no dial tone on the modem</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"71\"/>\n        <source>no carrier is available on the modem</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"73\"/>\n        <source>dialling the number on the modem timed out</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"75\"/>\n        <source>dialling the number on the modem failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"77\"/>\n        <source>initialising the modem failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"79\"/>\n        <source>APN selection failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"81\"/>\n        <source>the modem is not searching</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"83\"/>\n        <source>the cell tower denied registration of the modem</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"85\"/>\n        <source>registration of the modem on the cell tower timed out</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"87\"/>\n        <source>registration of the modem on the cell tower failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"91\"/>\n        <source>the device firmware is missing</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"93\"/>\n        <source>the device was removed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"95\"/>\n        <source>the device is sleeping</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"97\"/>\n        <source>the connection was removed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"99\"/>\n        <source>you requested the action</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"107\"/>\n        <source>the modem was not found</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"109\"/>\n        <source>Bluetooth is not available</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"111\"/>\n        <source>the SIM card is not inserted</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"113\"/>\n        <source>the SIM PIN is required</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"115\"/>\n        <source>the SIM PUK is required</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"118\"/>\n        <source>the SIM PUK is exhausted</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"126\"/>\n        <source>ModemManager is not operational on this device</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"128\"/>\n        <source>the wireless network wasn&apos;t found</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"152\"/>\n        <source>an unknown error occurred</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"198\"/>\n        <source>Cellular</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>ConnectionSelectionPopover</name>\n    <message>\n        <location filename=\"../statusCenter/popovers/connectionselectionpopover.ui\" line=\"35\"/>\n        <source>Select Connection Profile</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/connectionselectionpopover.ui\" line=\"42\"/>\n        <source>Select a connection profile to use</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>DevicePane</name>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/devicepane.ui\" line=\"83\"/>\n        <source>STATUS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/devicepane.ui\" line=\"90\"/>\n        <source>theDesk doesn&apos;t support this network interface, so you won&apos;t be able to configure it fully here.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/devicepane.ui\" line=\"144\"/>\n        <source>ACTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/devicepane.ui\" line=\"153\"/>\n        <source>Disconnect</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>GenericChunkUpdater</name>\n    <message>\n        <location filename=\"../chunk/genericchunkupdater.cpp\" line=\"24\"/>\n        <source>Connected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>IPv4ConnectionEditorPane</name>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"35\"/>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.cpp\" line=\"69\"/>\n        <source>IPv4</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"99\"/>\n        <source>DHCP</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"104\"/>\n        <source>DHCP with manual DNS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"109\"/>\n        <source>Manual</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"114\"/>\n        <source>Shared</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"119\"/>\n        <source>Disabled</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"127\"/>\n        <source>Configuration Method</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"143\"/>\n        <source>Require IPv4</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"208\"/>\n        <source>IP Address</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"215\"/>\n        <source>Default Gateway</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"222\"/>\n        <source>Subnet Length</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"235\"/>\n        <source>ADDRESSES</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"255\"/>\n        <source>Set the IP address that this device will be assigned.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"345\"/>\n        <source>DNS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"352\"/>\n        <source>1.1.1.1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"359\"/>\n        <source>Configure the DNS servers that will be used to resolve domain names.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.cpp\" line=\"217\"/>\n        <source>For DNS server %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.cpp\" line=\"218\"/>\n        <source>Remove</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>NetworkChunk</name>\n    <message>\n        <location filename=\"../chunk/networkchunk.cpp\" line=\"64\"/>\n        <source>Network Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../chunk/networkchunk.cpp\" line=\"103\"/>\n        <source>Disconnected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../chunk/networkchunk.cpp\" line=\"137\"/>\n        <source>Login Required</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../chunk/networkchunk.cpp\" line=\"140\"/>\n        <source>Can&apos;t get to the Internet</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>NetworkConnectionEditor</name>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"90\"/>\n        <source>SETTINGS MODIFIED</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"125\"/>\n        <source>Revert</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"136\"/>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"224\"/>\n        <source>Save</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"195\"/>\n        <source>DONE?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"260\"/>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"303\"/>\n        <source>General</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"327\"/>\n        <source>Connection Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.cpp\" line=\"203\"/>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.cpp\" line=\"231\"/>\n        <source>Couldn&apos;t save settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>NetworkStatusCenterLeftPane</name>\n    <message>\n        <location filename=\"../statusCenter/networkstatuscenterleftpane.ui\" line=\"35\"/>\n        <source>Network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>NetworkStatusCenterPane</name>\n    <message>\n        <location filename=\"../statusCenter/networkstatuscenterpane.ui\" line=\"100\"/>\n        <source>NetworkManager is not operational</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/networkstatuscenterpane.ui\" line=\"110\"/>\n        <source>Contact your system administrator</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/networkstatuscenterpane.cpp\" line=\"159\"/>\n        <source>Network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>OnboardingNetwork</name>\n    <message>\n        <location filename=\"../onboarding/onboardingnetwork.ui\" line=\"35\"/>\n        <location filename=\"../onboarding/onboardingnetwork.cpp\" line=\"96\"/>\n        <source>Network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingnetwork.ui\" line=\"42\"/>\n        <source>Connect to the Internet to get updates and install new software.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingnetwork.ui\" line=\"194\"/>\n        <source>You&apos;re connected!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingnetwork.ui\" line=\"204\"/>\n        <source>Disconnect and connect to a different network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingnetwork.ui\" line=\"275\"/>\n        <source>You can always set up the network connection later.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingnetwork.cpp\" line=\"73\"/>\n        <source>Continue without Internet</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingnetwork.cpp\" line=\"79\"/>\n        <location filename=\"../onboarding/onboardingnetwork.cpp\" line=\"85\"/>\n        <source>Next</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SecurityEapPeap</name>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"35\"/>\n        <source>PEAP</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"42\"/>\n        <source>Enter the settings for this network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"82\"/>\n        <source>Phase-2 Authentication</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"89\"/>\n        <source>Anonymous Identity</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"99\"/>\n        <source>PEAP version</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"106\"/>\n        <source>Username</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"113\"/>\n        <source>Password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"120\"/>\n        <source>CA Certificate</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"127\"/>\n        <source>Browse...</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"135\"/>\n        <source>MSCHAPv2</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"140\"/>\n        <source>MD5</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"145\"/>\n        <source>GTC</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"171\"/>\n        <source>Automatic</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"187\"/>\n        <source>Version 0</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"200\"/>\n        <source>Version 1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"244\"/>\n        <source>Connect</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.cpp\" line=\"107\"/>\n        <source>Certificates (*.pem, *.cer)</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SecurityEapUnsupported</name>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeapunsupported.ui\" line=\"35\"/>\n        <location filename=\"../statusCenter/eap/securityeapunsupported.ui\" line=\"77\"/>\n        <source>Unsupported Security Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeapunsupported.ui\" line=\"87\"/>\n        <source>Sorry, theDesk doesn&apos;t support those security settings at the moment. You can try using the terminal to configure this network.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SimSettingsPopover</name>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"57\"/>\n        <source>Modem Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"88\"/>\n        <source>SIM PIN</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"98\"/>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"114\"/>\n        <source>Enable SIM PIN</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"105\"/>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"120\"/>\n        <source>Disable SIM PIN</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"112\"/>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"164\"/>\n        <source>Change SIM PIN</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"128\"/>\n        <source>CALLS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"138\"/>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"769\"/>\n        <source>Call Waiting</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"188\"/>\n        <source>IMSI</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"195\"/>\n        <source>IMEI</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"208\"/>\n        <source>MODEM INFORMATION</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"215\"/>\n        <source>Carrier</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"340\"/>\n        <source>Enter the new SIM PIN</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"537\"/>\n        <source>Enter the current SIM PIN</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"806\"/>\n        <source>Enable Call Waiting</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"813\"/>\n        <source>Call Waiting allows you to receive calls while another call is currently active.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"58\"/>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"59\"/>\n        <source>No SIM card</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"142\"/>\n        <source>You have %n remaining tries</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n        </translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"203\"/>\n        <source>Error</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"204\"/>\n        <source>Couldn&apos;t get current Call Waiting status from carrier</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SwitchManager</name>\n    <message>\n        <location filename=\"../switchmanager.cpp\" line=\"63\"/>\n        <location filename=\"../switchmanager.cpp\" line=\"72\"/>\n        <location filename=\"../switchmanager.cpp\" line=\"122\"/>\n        <source>Flight Mode</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../switchmanager.cpp\" line=\"67\"/>\n        <source>Switch off Flight Mode</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../switchmanager.cpp\" line=\"78\"/>\n        <location filename=\"../switchmanager.cpp\" line=\"123\"/>\n        <source>Wi-Fi</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../switchmanager.cpp\" line=\"88\"/>\n        <location filename=\"../switchmanager.cpp\" line=\"124\"/>\n        <source>Cellular</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>TetheringSettingsPopover</name>\n    <message>\n        <location filename=\"../statusCenter/popovers/tetheringsettingspopover.ui\" line=\"35\"/>\n        <source>Tethering Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/tetheringsettingspopover.ui\" line=\"63\"/>\n        <source>SSID</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/tetheringsettingspopover.ui\" line=\"73\"/>\n        <source>These settings will be used to set up a Wi-Fi network that other devices can connect to when tethering is enabled.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/tetheringsettingspopover.ui\" line=\"96\"/>\n        <source>Network Key</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/tetheringsettingspopover.cpp\" line=\"64\"/>\n        <source>Network key needs to be at least 8 characters long</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>UnlockModemPopover</name>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.ui\" line=\"190\"/>\n        <source>Enter the SIM PIN</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.ui\" line=\"356\"/>\n        <source>SIM PUK</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.ui\" line=\"363\"/>\n        <source>You&apos;ll also need to provide a new SIM PIN to set once the SIM is unlocked.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.ui\" line=\"379\"/>\n        <source>SIM PUK REQUIRED</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.ui\" line=\"425\"/>\n        <source>Unlock SIM Card</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.ui\" line=\"456\"/>\n        <source>New SIM PIN</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.ui\" line=\"466\"/>\n        <source>Confirm SIM PIN</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.cpp\" line=\"48\"/>\n        <source>Don&apos;t guess the PUK!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.cpp\" line=\"49\"/>\n        <source>Once you exhaust your attempts, the SIM card will be blocked forever.\n\nYou&apos;ll need to contact your carrier for a new SIM card.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.cpp\" line=\"68\"/>\n        <source>If you enter the incorrect PIN again, your SIM card will be PUK locked, and you&apos;ll need to contact your carrier.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.cpp\" line=\"70\"/>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.cpp\" line=\"75\"/>\n        <source>You have %n remaining tries</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n        </translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.cpp\" line=\"73\"/>\n        <source>This is your final chance to get the PUK right before you&apos;ll need to obtain a new SIM card from your carrier.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.cpp\" line=\"78\"/>\n        <source>Contact your carrier to obtain the &lt;b&gt;SIM PUK&lt;/b&gt;, and enter it below to unlock %1.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>WifiConnectionEditorPane</name>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/wificonnectioneditorpane.ui\" line=\"35\"/>\n        <location filename=\"../statusCenter/connectionEditor/wificonnectioneditorpane.cpp\" line=\"47\"/>\n        <source>Wi-Fi</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/wificonnectioneditorpane.ui\" line=\"59\"/>\n        <source>Mode</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/wificonnectioneditorpane.ui\" line=\"66\"/>\n        <source>SSID</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/wificonnectioneditorpane.ui\" line=\"77\"/>\n        <source>Infrastructure</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/wificonnectioneditorpane.ui\" line=\"82\"/>\n        <source>Ad-Hoc</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/wificonnectioneditorpane.ui\" line=\"87\"/>\n        <source>Access Point</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>WifiDevicePane</name>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"106\"/>\n        <source>STATUS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"124\"/>\n        <source>This Device</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"268\"/>\n        <source>ACTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"277\"/>\n        <source>Select Network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"284\"/>\n        <source>Disconnect</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"348\"/>\n        <source>TETHERING</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"355\"/>\n        <source>Network Key</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"375\"/>\n        <source>Use Tethering to share your internet connection with other devices over Wi-Fi.\n\n**While Tethering is active, you won&apos;t be able to connect to the Internet with Wi-Fi, so you&apos;ll need to make sure you have an alternate way to connect to the Internet.**</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"398\"/>\n        <source>Enable Tethering</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"414\"/>\n        <source>SSID</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"440\"/>\n        <source>Set Tethering Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"489\"/>\n        <source>Wi-Fi is off</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"512\"/>\n        <source>Switch Wi-Fi on to connect to a wireless network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"522\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"669\"/>\n        <source>Switch Wi-Fi On</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"568\"/>\n        <source>Wi-Fi is disabled</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"591\"/>\n        <source>Use the Wi-Fi switch to enable Wi-Fi and connect to a network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"636\"/>\n        <source>You&apos;re in flight mode</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"659\"/>\n        <source>Switch Wi-Fi on to connect to a wireless network. Flight mode won&apos;t be disabled.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"88\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"131\"/>\n        <source>Tethering</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"91\"/>\n        <source>Disable Tethering</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"118\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"143\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"153\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"202\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"203\"/>\n        <source>Wi-Fi</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"119\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"230\"/>\n        <source>Disconnected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"132\"/>\n        <source>Active</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"138\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"144\"/>\n        <source>Connected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"154\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"239\"/>\n        <source>Failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"164\"/>\n        <source>Connection Failure</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"166\"/>\n        <source>Connecting to %1 failed because %2.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"170\"/>\n        <source>the network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"273\"/>\n        <source>0 Devices</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"282\"/>\n        <source>Unknown</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"452\"/>\n        <source>Couldn&apos;t configure tethering</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"478\"/>\n        <source>Couldn&apos;t switch off tethering</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>WiredChunkUpdater</name>\n    <message>\n        <location filename=\"../chunk/wiredchunkupdater.cpp\" line=\"25\"/>\n        <source>Wired</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>WiredDevicePane</name>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.ui\" line=\"35\"/>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"64\"/>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"83\"/>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"90\"/>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"103\"/>\n        <source>Wired</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.ui\" line=\"84\"/>\n        <source>STATUS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.ui\" line=\"102\"/>\n        <source>This Device</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.ui\" line=\"246\"/>\n        <source>ACTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.ui\" line=\"255\"/>\n        <source>Connect</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.ui\" line=\"262\"/>\n        <source>Disconnect</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"84\"/>\n        <source>Disconnected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"95\"/>\n        <source>Connected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"104\"/>\n        <source>Failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"122\"/>\n        <source>Router</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"144\"/>\n        <source>Unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"148\"/>\n        <source>Connect an Ethernet cable.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"150\"/>\n        <source>This network is unavailable because %2.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"177\"/>\n        <source>Connection Failure</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"179\"/>\n        <source>Connecting to the network failed because %2.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>WiredOnboardingSetup</name>\n    <message>\n        <location filename=\"../onboarding/wiredonboardingsetup.ui\" line=\"57\"/>\n        <source>WIRED</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/wiredonboardingsetup.ui\" line=\"73\"/>\n        <source>Use Wired Connection</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/wiredonboardingsetup.cpp\" line=\"91\"/>\n        <source>Connect to the Internet using a wired network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/wiredonboardingsetup.cpp\" line=\"94\"/>\n        <source>To connect to the Internet using a wired network, connect the network cable.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>WirelessNetworkListDelegate</name>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"85\"/>\n        <source>Connected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"89\"/>\n        <source>In Range</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"97\"/>\n        <source>Out of range</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"107\"/>\n        <source>Not Secured</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"110\"/>\n        <source>Secured with Static WEP</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"113\"/>\n        <source>Secured with Dynamic WEP</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"116\"/>\n        <source>Secured with LEAP</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"119\"/>\n        <source>Secured with WPA-PSK</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"122\"/>\n        <source>Secured with WPA Enterprise</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"125\"/>\n        <source>Secured with WPA2-PSK</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"128\"/>\n        <source>Secured with WPA2 Enterprise</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"131\"/>\n        <source>Secured with WPA3</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>WirelessNetworkSelectionPopover</name>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"57\"/>\n        <source>Connect to a Wireless Network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"107\"/>\n        <source>KNOWN NETWORKS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"158\"/>\n        <source>NEW NETWORKS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"181\"/>\n        <source>New Manual Connection</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"297\"/>\n        <source>Enter the security key</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"421\"/>\n        <source>Network Security</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"454\"/>\n        <source>Select the EAP method. If you don&apos;t know what to select, contact your system administrator for the details.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"484\"/>\n        <source>TLS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"489\"/>\n        <source>LEAP</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"494\"/>\n        <source>PWD</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"499\"/>\n        <source>FAST</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"504\"/>\n        <source>TTLS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"509\"/>\n        <source>PEAP</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.cpp\" line=\"141\"/>\n        <source>Unknown Security</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.cpp\" line=\"142\"/>\n        <source>Not sure how to connect to this network. Use manual setup to connect to it.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.cpp\" line=\"217\"/>\n        <source>For network %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.cpp\" line=\"218\"/>\n        <source>Edit</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.cpp\" line=\"235\"/>\n        <source>Forget Network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.cpp\" line=\"316\"/>\n        <source>Wireless</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.cpp\" line=\"319\"/>\n        <source>Connect</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>WirelessOnboardingSetup</name>\n    <message>\n        <location filename=\"../onboarding/wirelessonboardingsetup.ui\" line=\"57\"/>\n        <source>WI-FI</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/wirelessonboardingsetup.ui\" line=\"64\"/>\n        <source>Connect to the Internet using a Wi-Fi network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/wirelessonboardingsetup.ui\" line=\"73\"/>\n        <source>Select Network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/NetworkPlugin/translations/en_GB.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"en_GB\" sourcelanguage=\"en_US\">\n<context>\n    <name>CellularPane</name>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.ui\" line=\"84\"/>\n        <source>STATUS</source>\n        <translation>STATUS</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.ui\" line=\"102\"/>\n        <source>This Device</source>\n        <translation>This Device</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.ui\" line=\"246\"/>\n        <source>ACTIONS</source>\n        <translation>ACTIONS</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.ui\" line=\"262\"/>\n        <source>Connect</source>\n        <translation>Connect</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.ui\" line=\"269\"/>\n        <source>Disconnect</source>\n        <translation>Disconnect</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"135\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"397\"/>\n        <source>Cellular</source>\n        <translation>Cellular</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"129\"/>\n        <source>Disconnected</source>\n        <translation>Disconnected</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"140\"/>\n        <source>Connected</source>\n        <translation>Connected</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"149\"/>\n        <source>Failed</source>\n        <translation>Failed</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"215\"/>\n        <source>Unavailable</source>\n        <translation>Unavailable</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"218\"/>\n        <source>This network is unavailable because %2.</source>\n        <translation>This network is unavailable because %2.</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"249\"/>\n        <source>Connection Failure</source>\n        <translation>Connection Failure</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"251\"/>\n        <source>Connecting to the network failed because %2.</source>\n        <translation>Connecting to the network failed because %2.</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"326\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"339\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"346\"/>\n        <source>Enter SIM PIN</source>\n        <translation>Enter SIM PIN</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"328\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"332\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"344\"/>\n        <source>SIM PIN Required</source>\n        <translation>SIM PIN Required</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"357\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"370\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"377\"/>\n        <source>Enter SIM PUK</source>\n        <translation>Enter SIM PUK</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"359\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"363\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"375\"/>\n        <source>SIM PUK Required</source>\n        <translation>SIM PUK Required</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"334\"/>\n        <source>A SIM PIN is required to connect to the cellular network.</source>\n        <translation>A SIM PIN is required to connect to the cellular network.</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"365\"/>\n        <source>A SIM PUK is required to connect to the cellular network.</source>\n        <translation>A SIM PUK is required to connect to the cellular network.</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.ui\" line=\"276\"/>\n        <source>Modem Settings</source>\n        <translation>Router Settings</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"105\"/>\n        <source>Disable Cellular</source>\n        <translation>Disable Cellular</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"107\"/>\n        <source>Enable Cellular</source>\n        <translation>Enable Cellular</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"209\"/>\n        <source>No SIM Card</source>\n        <translation>No SIM Card</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"210\"/>\n        <source>Insert a SIM card to connect to cellular services.</source>\n        <translation>Insert a SIM card to connect to cellular services.</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"212\"/>\n        <source>No SIM</source>\n        <translation>No SIM</translation>\n    </message>\n</context>\n<context>\n    <name>Common</name>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"152\"/>\n        <source>an unknown error occurred</source>\n        <translation>an unknown error occurred</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"27\"/>\n        <source>the device is no longer managed by NetworkManager</source>\n        <translation>the device is no longer managed by NetworkManager</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"29\"/>\n        <source>configuration of the device failed</source>\n        <translation>configuration of the device failed</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"31\"/>\n        <source>configuration of the device is unavailable</source>\n        <translation>configuration of the device is unavailable</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"33\"/>\n        <source>configuration of the device expired</source>\n        <translation>configuration of the device expired</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"35\"/>\n        <source>required secrets were not provided</source>\n        <translation>required secrets were not provided</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"37\"/>\n        <source>the authentication supplicant disconnected</source>\n        <translation>the authentication supplicant disconnected</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"39\"/>\n        <source>configuration of the authentication supplicant failed</source>\n        <translation>configuration of the authentication supplicant failed</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"41\"/>\n        <source>the authentication supplicant failed</source>\n        <translation>the authentication supplicant failed</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"43\"/>\n        <source>the authentication supplicant timed out</source>\n        <translation>the authentication supplicant timed out</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"45\"/>\n        <source>the PPP network failed to start</source>\n        <translation>the PPP network failed to start</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"47\"/>\n        <source>the PPP network was disconnected</source>\n        <translation>the PPP network was disconnected</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"49\"/>\n        <source>the PPP network failed</source>\n        <translation>the PPP network failed</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"51\"/>\n        <source>DHCP configuration failed to start</source>\n        <translation>DHCP configuration failed to start</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"53\"/>\n        <source>DHCP configuration had an error</source>\n        <translation>DHCP configuration had an error</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"55\"/>\n        <source>DHCP configuration failed</source>\n        <translation>DHCP configuration failed</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"67\"/>\n        <source>the modem is busy</source>\n        <translation>the router is busy</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"69\"/>\n        <source>there is no dial tone on the modem</source>\n        <translation>there is no dial tone on the modem</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"71\"/>\n        <source>no carrier is available on the modem</source>\n        <translation>no carrier is available on the router</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"73\"/>\n        <source>dialling the number on the modem timed out</source>\n        <translation>dialling the number on the router timed out</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"75\"/>\n        <source>dialling the number on the modem failed</source>\n        <translation>dialling the number on the router failed</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"77\"/>\n        <source>initialising the modem failed</source>\n        <translation>initialising the router failed</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"79\"/>\n        <source>APN selection failed</source>\n        <translation>APN selection failed</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"81\"/>\n        <source>the modem is not searching</source>\n        <translation>the router is not searching</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"83\"/>\n        <source>the cell tower denied registration of the modem</source>\n        <translation>the cell tower denied registration of the router</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"85\"/>\n        <source>registration of the modem on the cell tower timed out</source>\n        <translation>registration of the router on the cell tower timed out</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"87\"/>\n        <source>registration of the modem on the cell tower failed</source>\n        <translation>registration of the router on the cell tower failed</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"91\"/>\n        <source>the device firmware is missing</source>\n        <translation>the device firmware is missing</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"93\"/>\n        <source>the device was removed</source>\n        <translation>the device was removed</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"95\"/>\n        <source>the device is sleeping</source>\n        <translation>the device is sleeping</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"97\"/>\n        <source>the connection was removed</source>\n        <translation>the connection was removed</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"99\"/>\n        <source>you requested the action</source>\n        <translation>you requested the action</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"107\"/>\n        <source>the modem was not found</source>\n        <translation>the router was not found</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"109\"/>\n        <source>Bluetooth is not available</source>\n        <translation>Bluetooth is not available</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"111\"/>\n        <source>the SIM card is not inserted</source>\n        <translation>the SIM card is not inserted</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"113\"/>\n        <source>the SIM PIN is required</source>\n        <translation>the SIM PIN is required</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"115\"/>\n        <source>the SIM PUK is required</source>\n        <translation>the SIM PUK is required</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"118\"/>\n        <source>the SIM PUK is exhausted</source>\n        <translation>the SIM PUK is exhausted</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"126\"/>\n        <source>ModemManager is not operational on this device</source>\n        <translation>ModemManager is not operational on this device</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"128\"/>\n        <source>the wireless network wasn&apos;t found</source>\n        <translation>the wireless network wasn&apos;t found</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"198\"/>\n        <source>Cellular</source>\n        <translation>Cellular</translation>\n    </message>\n</context>\n<context>\n    <name>ConnectionSelectionPopover</name>\n    <message>\n        <location filename=\"../statusCenter/popovers/connectionselectionpopover.ui\" line=\"35\"/>\n        <source>Select Connection Profile</source>\n        <translation>Select Connection Profile</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/connectionselectionpopover.ui\" line=\"42\"/>\n        <source>Select a connection profile to use</source>\n        <translation>Select a connection profile to use</translation>\n    </message>\n</context>\n<context>\n    <name>DevicePane</name>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/devicepane.ui\" line=\"144\"/>\n        <source>ACTIONS</source>\n        <translation>ACTIONS</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/devicepane.ui\" line=\"153\"/>\n        <source>Disconnect</source>\n        <translation>Disconnect</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/devicepane.ui\" line=\"83\"/>\n        <source>STATUS</source>\n        <translation>STATUS</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/devicepane.ui\" line=\"90\"/>\n        <source>theDesk doesn&apos;t support this network interface, so you won&apos;t be able to configure it fully here.</source>\n        <translation>theDesk doesn&apos;t support this network interface, so you won&apos;t be able to configure it fully here.</translation>\n    </message>\n</context>\n<context>\n    <name>GenericChunkUpdater</name>\n    <message>\n        <location filename=\"../chunk/genericchunkupdater.cpp\" line=\"24\"/>\n        <source>Connected</source>\n        <translation>Connected</translation>\n    </message>\n</context>\n<context>\n    <name>IPv4ConnectionEditorPane</name>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"35\"/>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.cpp\" line=\"69\"/>\n        <source>IPv4</source>\n        <translation>IPv4</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"99\"/>\n        <source>DHCP</source>\n        <translation>DHCP</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"104\"/>\n        <source>DHCP with manual DNS</source>\n        <translation>DHCP with manual DNS</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"109\"/>\n        <source>Manual</source>\n        <translation>Manual</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"114\"/>\n        <source>Shared</source>\n        <translation>Shared</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"119\"/>\n        <source>Disabled</source>\n        <translation>Disabled</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"127\"/>\n        <source>Configuration Method</source>\n        <translation>Configuration Method</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"143\"/>\n        <source>Require IPv4</source>\n        <translation>Require IPv4</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"208\"/>\n        <source>IP Address</source>\n        <translation>IP Address</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"215\"/>\n        <source>Default Gateway</source>\n        <translation>Default Gateway</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"222\"/>\n        <source>Subnet Length</source>\n        <translation>Subnet Length</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"235\"/>\n        <source>ADDRESSES</source>\n        <translation>ADDRESSES</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"352\"/>\n        <source>1.1.1.1</source>\n        <translation>1.1.1.1</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"345\"/>\n        <source>DNS</source>\n        <translation>DNS</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"255\"/>\n        <source>Set the IP address that this device will be assigned.</source>\n        <translation>Set the IP address that this device will be assigned.</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"359\"/>\n        <source>Configure the DNS servers that will be used to resolve domain names.</source>\n        <translation>Configure the DNS servers that will be used to resolve domain names.</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.cpp\" line=\"217\"/>\n        <source>For DNS server %1</source>\n        <translation>For DNS server %1</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.cpp\" line=\"218\"/>\n        <source>Remove</source>\n        <translation>Remove</translation>\n    </message>\n</context>\n<context>\n    <name>NetworkChunk</name>\n    <message>\n        <location filename=\"../chunk/networkchunk.cpp\" line=\"103\"/>\n        <source>Disconnected</source>\n        <translation>Disconnected</translation>\n    </message>\n    <message>\n        <location filename=\"../chunk/networkchunk.cpp\" line=\"137\"/>\n        <source>Login Required</source>\n        <translation>Login Required</translation>\n    </message>\n    <message>\n        <location filename=\"../chunk/networkchunk.cpp\" line=\"140\"/>\n        <source>Can&apos;t get to the Internet</source>\n        <translation>Can&apos;t get to the Internet</translation>\n    </message>\n    <message>\n        <location filename=\"../chunk/networkchunk.cpp\" line=\"64\"/>\n        <source>Network Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>NetworkConnectionEditor</name>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"260\"/>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"303\"/>\n        <source>General</source>\n        <translation>General</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"327\"/>\n        <source>Connection Name</source>\n        <translation>Connection Name</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"195\"/>\n        <source>DONE?</source>\n        <translation>DONE?</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"136\"/>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"224\"/>\n        <source>Save</source>\n        <translation>Save</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.cpp\" line=\"203\"/>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.cpp\" line=\"231\"/>\n        <source>Couldn&apos;t save settings</source>\n        <translation>Couldn&apos;t save preferences</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"90\"/>\n        <source>SETTINGS MODIFIED</source>\n        <translation>PREFERENCES MODIFIED</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"125\"/>\n        <source>Revert</source>\n        <translation>Revert</translation>\n    </message>\n</context>\n<context>\n    <name>NetworkPluginCommon</name>\n    <message>\n        <source>the device is no longer managed by NetworkManager</source>\n        <translation type=\"obsolete\">the device is no longer managed by NetworkManager</translation>\n    </message>\n    <message>\n        <source>configuration of the device failed</source>\n        <translation type=\"obsolete\">configuration of the device failed</translation>\n    </message>\n    <message>\n        <source>configuration of the device is unavailable</source>\n        <translation type=\"obsolete\">configuration of the device is unavailable</translation>\n    </message>\n    <message>\n        <source>configuration of the device expired</source>\n        <translation type=\"obsolete\">configuration of the device expired</translation>\n    </message>\n    <message>\n        <source>required secrets were not provided</source>\n        <translation type=\"obsolete\">required secrets were not provided</translation>\n    </message>\n    <message>\n        <source>the authentication supplicant disconnected</source>\n        <translation type=\"obsolete\">the authentication supplicant disconnected</translation>\n    </message>\n    <message>\n        <source>configuration of the authentication supplicant failed</source>\n        <translation type=\"obsolete\">configuration of the authentication supplicant failed</translation>\n    </message>\n    <message>\n        <source>the authentication supplicant failed</source>\n        <translation type=\"obsolete\">the authentication supplicant failed</translation>\n    </message>\n    <message>\n        <source>the authentication supplicant timed out</source>\n        <translation type=\"obsolete\">the authentication supplicant timed out</translation>\n    </message>\n    <message>\n        <source>the PPP network failed to start</source>\n        <translation type=\"obsolete\">the PPP network failed to start</translation>\n    </message>\n    <message>\n        <source>the PPP network was disconnected</source>\n        <translation type=\"obsolete\">the PPP network was disconnected</translation>\n    </message>\n    <message>\n        <source>the PPP network failed</source>\n        <translation type=\"obsolete\">the PPP network failed</translation>\n    </message>\n    <message>\n        <source>DHCP configuration failed to start</source>\n        <translation type=\"obsolete\">DHCP configuration failed to start</translation>\n    </message>\n    <message>\n        <source>DHCP configuration had an error</source>\n        <translation type=\"obsolete\">DHCP configuration had an error</translation>\n    </message>\n    <message>\n        <source>DHCP configuration failed</source>\n        <translation type=\"obsolete\">DHCP configuration failed</translation>\n    </message>\n    <message>\n        <source>the modem is busy</source>\n        <translation type=\"obsolete\">the router is busy</translation>\n    </message>\n    <message>\n        <source>there is no dial tone on the modem</source>\n        <translation type=\"obsolete\">there is no dial tone on the modem</translation>\n    </message>\n    <message>\n        <source>no carrier is available on the modem</source>\n        <translation type=\"obsolete\">no carrier is available on the router</translation>\n    </message>\n    <message>\n        <source>dialling the number on the modem timed out</source>\n        <translation type=\"obsolete\">dialling the number on the router timed out</translation>\n    </message>\n    <message>\n        <source>dialling the number on the modem failed</source>\n        <translation type=\"obsolete\">dialling the number on the router failed</translation>\n    </message>\n    <message>\n        <source>initialising the modem failed</source>\n        <translation type=\"obsolete\">initialising the router failed</translation>\n    </message>\n    <message>\n        <source>APN selection failed</source>\n        <translation type=\"obsolete\">APN selection failed</translation>\n    </message>\n    <message>\n        <source>the modem is not searching</source>\n        <translation type=\"obsolete\">the router is not searching</translation>\n    </message>\n    <message>\n        <source>the cell tower denied registration of the modem</source>\n        <translation type=\"obsolete\">the cell tower denied registration of the router</translation>\n    </message>\n    <message>\n        <source>registration of the modem on the cell tower timed out</source>\n        <translation type=\"obsolete\">registration of the router on the cell tower timed out</translation>\n    </message>\n    <message>\n        <source>registration of the modem on the cell tower failed</source>\n        <translation type=\"obsolete\">registration of the router on the cell tower failed</translation>\n    </message>\n    <message>\n        <source>the device firmware is missing</source>\n        <translation type=\"obsolete\">the device firmware is missing</translation>\n    </message>\n    <message>\n        <source>the device was removed</source>\n        <translation type=\"obsolete\">the device was removed</translation>\n    </message>\n    <message>\n        <source>the device is sleeping</source>\n        <translation type=\"obsolete\">the device is sleeping</translation>\n    </message>\n    <message>\n        <source>the connection was removed</source>\n        <translation type=\"obsolete\">the connection was removed</translation>\n    </message>\n    <message>\n        <source>you requested the action</source>\n        <translation type=\"obsolete\">you requested the action</translation>\n    </message>\n    <message>\n        <source>the modem was not found</source>\n        <translation type=\"obsolete\">the router was not found</translation>\n    </message>\n    <message>\n        <source>Bluetooth is not available</source>\n        <translation type=\"obsolete\">Bluetooth is not available</translation>\n    </message>\n    <message>\n        <source>the SIM card is not inserted</source>\n        <translation type=\"obsolete\">the SIM card is not inserted</translation>\n    </message>\n    <message>\n        <source>the SIM PIN is required</source>\n        <translation type=\"obsolete\">the SIM PIN is required</translation>\n    </message>\n    <message>\n        <source>the SIM PUK is required</source>\n        <translation type=\"obsolete\">the SIM PUK is required</translation>\n    </message>\n    <message>\n        <source>the SIM PUK is exhausted</source>\n        <translation type=\"obsolete\">the SIM PUK is exhausted</translation>\n    </message>\n    <message>\n        <source>ModemManager is not operational on this device</source>\n        <translation type=\"obsolete\">ModemManager is not operational on this device</translation>\n    </message>\n    <message>\n        <source>the wireless network wasn&apos;t found</source>\n        <translation type=\"obsolete\">the wireless network wasn&apos;t found</translation>\n    </message>\n    <message>\n        <source>an unknown error occurred</source>\n        <translation type=\"obsolete\">an unknown error occurred</translation>\n    </message>\n    <message>\n        <source>Cellular</source>\n        <translation type=\"obsolete\">Cellular</translation>\n    </message>\n</context>\n<context>\n    <name>NetworkStatusCenterLeftPane</name>\n    <message>\n        <location filename=\"../statusCenter/networkstatuscenterleftpane.ui\" line=\"35\"/>\n        <source>Network</source>\n        <translation>Network</translation>\n    </message>\n</context>\n<context>\n    <name>NetworkStatusCenterPane</name>\n    <message>\n        <location filename=\"../statusCenter/networkstatuscenterpane.cpp\" line=\"159\"/>\n        <source>Network</source>\n        <translation>Network</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/networkstatuscenterpane.ui\" line=\"100\"/>\n        <source>NetworkManager is not operational</source>\n        <translation>NetworkManager is not operational</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/networkstatuscenterpane.ui\" line=\"110\"/>\n        <source>Contact your system administrator</source>\n        <translation>Contact your system administrator</translation>\n    </message>\n</context>\n<context>\n    <name>OnboardingNetwork</name>\n    <message>\n        <location filename=\"../onboarding/onboardingnetwork.ui\" line=\"35\"/>\n        <location filename=\"../onboarding/onboardingnetwork.cpp\" line=\"96\"/>\n        <source>Network</source>\n        <translation type=\"unfinished\">Network</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingnetwork.ui\" line=\"42\"/>\n        <source>Connect to the Internet to get updates and install new software.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingnetwork.cpp\" line=\"79\"/>\n        <location filename=\"../onboarding/onboardingnetwork.cpp\" line=\"85\"/>\n        <source>Next</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingnetwork.ui\" line=\"194\"/>\n        <source>You&apos;re connected!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingnetwork.ui\" line=\"204\"/>\n        <source>Disconnect and connect to a different network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingnetwork.cpp\" line=\"73\"/>\n        <source>Continue without Internet</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingnetwork.ui\" line=\"275\"/>\n        <source>You can always set up the network connection later.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SecurityEapPeap</name>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"35\"/>\n        <source>PEAP</source>\n        <translation>PEAP</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"42\"/>\n        <source>Enter the settings for this network</source>\n        <translation>Enter the preferences for this network</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"120\"/>\n        <source>CA Certificate</source>\n        <translation>CA Certificate</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"89\"/>\n        <source>Anonymous Identity</source>\n        <translation>Anonymous Identity</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"82\"/>\n        <source>Phase-2 Authentication</source>\n        <translation>Phase-2 Authentication</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"135\"/>\n        <source>MSCHAPv2</source>\n        <translation>MSCHAPv2</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"140\"/>\n        <source>MD5</source>\n        <translation>MD5</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"145\"/>\n        <source>GTC</source>\n        <translation>GTC</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"106\"/>\n        <source>Username</source>\n        <translation>Username</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"113\"/>\n        <source>Password</source>\n        <translation>Password</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"244\"/>\n        <source>Connect</source>\n        <translation>Connect</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"99\"/>\n        <source>PEAP version</source>\n        <translation>PEAP version</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"171\"/>\n        <source>Automatic</source>\n        <translation>Automatic</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"187\"/>\n        <source>Version 0</source>\n        <translation>Version 0</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"200\"/>\n        <source>Version 1</source>\n        <translation>Version 1</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"127\"/>\n        <source>Browse...</source>\n        <translation>Browse...</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.cpp\" line=\"107\"/>\n        <source>Certificates (*.pem, *.cer)</source>\n        <translation>Certificates (*.pem, *.cer)</translation>\n    </message>\n</context>\n<context>\n    <name>SecurityEapUnsupported</name>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeapunsupported.ui\" line=\"35\"/>\n        <location filename=\"../statusCenter/eap/securityeapunsupported.ui\" line=\"77\"/>\n        <source>Unsupported Security Settings</source>\n        <translation>Unsupported Security Preferences</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeapunsupported.ui\" line=\"87\"/>\n        <source>Sorry, theDesk doesn&apos;t support those security settings at the moment. You can try using the terminal to configure this network.</source>\n        <translation>Sorry, theDesk doesn&apos;t support those security preferences at the moment. You can try using the terminal to configure this network.</translation>\n    </message>\n</context>\n<context>\n    <name>SimSettingsPopover</name>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"98\"/>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"114\"/>\n        <source>Enable SIM PIN</source>\n        <translation>Enable SIM PIN</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"537\"/>\n        <source>Enter the current SIM PIN</source>\n        <translation>Enter the current SIM PIN</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"105\"/>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"120\"/>\n        <source>Disable SIM PIN</source>\n        <translation>Disable SIM PIN</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"112\"/>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"164\"/>\n        <source>Change SIM PIN</source>\n        <translation>Change SIM PIN</translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"142\"/>\n        <source>You have %n remaining tries</source>\n        <translation>\n            <numerusform>You have %n remaining try</numerusform>\n            <numerusform>You have %n remaining tries</numerusform>\n        </translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"340\"/>\n        <source>Enter the new SIM PIN</source>\n        <translation>Enter the new SIM PIN</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"57\"/>\n        <source>Modem Settings</source>\n        <translation>Router Preferences</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"88\"/>\n        <source>SIM PIN</source>\n        <translation>SIM PIN</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"188\"/>\n        <source>IMSI</source>\n        <translation>IMSI</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"195\"/>\n        <source>IMEI</source>\n        <translation>IMEI</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"208\"/>\n        <source>MODEM INFORMATION</source>\n        <translation>MODEM INFORMATION</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"215\"/>\n        <source>Carrier</source>\n        <translation>Carrier</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"58\"/>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"59\"/>\n        <source>No SIM card</source>\n        <translation>No SIM card</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"128\"/>\n        <source>CALLS</source>\n        <translation>CALLS</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"138\"/>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"769\"/>\n        <source>Call Waiting</source>\n        <translation>Call Waiting</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"806\"/>\n        <source>Enable Call Waiting</source>\n        <translation>Enable Call Waiting</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"813\"/>\n        <source>Call Waiting allows you to receive calls while another call is currently active.</source>\n        <translation>Call Waiting allows you to receive calls while another call is currently active.</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"203\"/>\n        <source>Error</source>\n        <translation>Error</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"204\"/>\n        <source>Couldn&apos;t get current Call Waiting status from carrier</source>\n        <translation>Couldn&apos;t get current Call Waiting status from carrier</translation>\n    </message>\n</context>\n<context>\n    <name>SwitchManager</name>\n    <message>\n        <location filename=\"../switchmanager.cpp\" line=\"63\"/>\n        <location filename=\"../switchmanager.cpp\" line=\"72\"/>\n        <location filename=\"../switchmanager.cpp\" line=\"122\"/>\n        <source>Flight Mode</source>\n        <translation>Aeroplane Mode</translation>\n    </message>\n    <message>\n        <location filename=\"../switchmanager.cpp\" line=\"78\"/>\n        <location filename=\"../switchmanager.cpp\" line=\"123\"/>\n        <source>Wi-Fi</source>\n        <translation>Wi-Fi</translation>\n    </message>\n    <message>\n        <location filename=\"../switchmanager.cpp\" line=\"88\"/>\n        <location filename=\"../switchmanager.cpp\" line=\"124\"/>\n        <source>Cellular</source>\n        <translation>Cellular</translation>\n    </message>\n    <message>\n        <location filename=\"../switchmanager.cpp\" line=\"67\"/>\n        <source>Switch off Flight Mode</source>\n        <translation>Switch off Flight Mode</translation>\n    </message>\n</context>\n<context>\n    <name>TetheringSettingsPopover</name>\n    <message>\n        <location filename=\"../statusCenter/popovers/tetheringsettingspopover.ui\" line=\"35\"/>\n        <source>Tethering Settings</source>\n        <translation>Tethering Preferences</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/tetheringsettingspopover.ui\" line=\"63\"/>\n        <source>SSID</source>\n        <translation>SSID</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/tetheringsettingspopover.ui\" line=\"96\"/>\n        <source>Network Key</source>\n        <translation>Network Key</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/tetheringsettingspopover.ui\" line=\"73\"/>\n        <source>These settings will be used to set up a Wi-Fi network that other devices can connect to when tethering is enabled.</source>\n        <translation>These preferences will be used to set up a Wi-Fi network that other devices can connect to when tethering is enabled.</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/tetheringsettingspopover.cpp\" line=\"64\"/>\n        <source>Network key needs to be at least 8 characters long</source>\n        <translation>Network key needs to be at least 8 characters long</translation>\n    </message>\n</context>\n<context>\n    <name>UnlockModemPopover</name>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.ui\" line=\"190\"/>\n        <source>Enter the SIM PIN</source>\n        <translation>Enter the SIM PIN</translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.cpp\" line=\"70\"/>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.cpp\" line=\"75\"/>\n        <source>You have %n remaining tries</source>\n        <translation>\n            <numerusform>You have %n remaining try</numerusform>\n            <numerusform>You have %n remaining tries</numerusform>\n        </translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.ui\" line=\"379\"/>\n        <source>SIM PUK REQUIRED</source>\n        <translation>SIM PUK REQUIRED</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.ui\" line=\"466\"/>\n        <source>Confirm SIM PIN</source>\n        <translation>Confirm SIM PIN</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.ui\" line=\"356\"/>\n        <source>SIM PUK</source>\n        <translation>SIM PUK</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.ui\" line=\"456\"/>\n        <source>New SIM PIN</source>\n        <translation>New SIM PIN</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.ui\" line=\"363\"/>\n        <source>You&apos;ll also need to provide a new SIM PIN to set once the SIM is unlocked.</source>\n        <translation>You&apos;ll also need to provide a new SIM PIN to set once the SIM is unlocked.</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.ui\" line=\"425\"/>\n        <source>Unlock SIM Card</source>\n        <translation>Unlock SIM Card</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.cpp\" line=\"48\"/>\n        <source>Don&apos;t guess the PUK!</source>\n        <translation>Don&apos;t guess the PUK!</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.cpp\" line=\"49\"/>\n        <source>Once you exhaust your attempts, the SIM card will be blocked forever.\n\nYou&apos;ll need to contact your carrier for a new SIM card.</source>\n        <translation>Once you exhaust your attempts, the SIM card will be blocked forever.\n\nYou&apos;ll need to contact your carrier for a new SIM card.</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.cpp\" line=\"78\"/>\n        <source>Contact your carrier to obtain the &lt;b&gt;SIM PUK&lt;/b&gt;, and enter it below to unlock %1.</source>\n        <translation>Contact your carrier to obtain the &lt;b&gt;SIM PUK&lt;/b&gt;, and enter it below to unlock %1.</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.cpp\" line=\"68\"/>\n        <source>If you enter the incorrect PIN again, your SIM card will be PUK locked, and you&apos;ll need to contact your carrier.</source>\n        <translation>If you enter the incorrect PIN again, your SIM card will be PUK locked, and you&apos;ll need to contact your carrier.</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.cpp\" line=\"73\"/>\n        <source>This is your final chance to get the PUK right before you&apos;ll need to obtain a new SIM card from your carrier.</source>\n        <translation>This is your final chance to get the PUK right before you&apos;ll need to obtain a new SIM card from your carrier.</translation>\n    </message>\n</context>\n<context>\n    <name>WifiConnectionEditorPane</name>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/wificonnectioneditorpane.ui\" line=\"35\"/>\n        <location filename=\"../statusCenter/connectionEditor/wificonnectioneditorpane.cpp\" line=\"47\"/>\n        <source>Wi-Fi</source>\n        <translation>Wi-Fi</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/wificonnectioneditorpane.ui\" line=\"66\"/>\n        <source>SSID</source>\n        <translation>SSID</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/wificonnectioneditorpane.ui\" line=\"59\"/>\n        <source>Mode</source>\n        <translation>Mode</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/wificonnectioneditorpane.ui\" line=\"77\"/>\n        <source>Infrastructure</source>\n        <translation>Infrastructure</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/wificonnectioneditorpane.ui\" line=\"82\"/>\n        <source>Ad-Hoc</source>\n        <translation>Ad-Hoc</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/wificonnectioneditorpane.ui\" line=\"87\"/>\n        <source>Access Point</source>\n        <translation>Access Point</translation>\n    </message>\n</context>\n<context>\n    <name>WifiDevicePane</name>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"106\"/>\n        <source>STATUS</source>\n        <translation>STATUS</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"268\"/>\n        <source>ACTIONS</source>\n        <translation>ACTIONS</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"284\"/>\n        <source>Disconnect</source>\n        <translation>Disconnect</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"118\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"143\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"153\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"202\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"203\"/>\n        <source>Wi-Fi</source>\n        <translation>Wi-Fi</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"124\"/>\n        <source>This Device</source>\n        <translation>This Device</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"119\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"230\"/>\n        <source>Disconnected</source>\n        <translation>Disconnected</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"154\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"239\"/>\n        <source>Failed</source>\n        <translation>Failed</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"282\"/>\n        <source>Unknown</source>\n        <translation>Unknown</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"273\"/>\n        <source>0 Devices</source>\n        <translation>0 Devices</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"138\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"144\"/>\n        <source>Connected</source>\n        <translation>Connected</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"277\"/>\n        <source>Select Network</source>\n        <translation>Select Network</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"164\"/>\n        <source>Connection Failure</source>\n        <translation>Connection Failure</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"166\"/>\n        <source>Connecting to %1 failed because %2.</source>\n        <translation>Connecting to %1 failed because %2.</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"170\"/>\n        <source>the network</source>\n        <translation>the network</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"414\"/>\n        <source>SSID</source>\n        <translation>SSID</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"355\"/>\n        <source>Network Key</source>\n        <translation>Network Key</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"398\"/>\n        <source>Enable Tethering</source>\n        <translation>Enable Tethering</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"348\"/>\n        <source>TETHERING</source>\n        <translation>TETHERING</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"440\"/>\n        <source>Set Tethering Settings</source>\n        <translation>Set Tethering Preferences</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"452\"/>\n        <source>Couldn&apos;t configure tethering</source>\n        <translation>Couldn&apos;t configure tethering</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"88\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"131\"/>\n        <source>Tethering</source>\n        <translation>Tethering</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"132\"/>\n        <source>Active</source>\n        <translation>Active</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"375\"/>\n        <source>Use Tethering to share your internet connection with other devices over Wi-Fi.\n\n**While Tethering is active, you won&apos;t be able to connect to the Internet with Wi-Fi, so you&apos;ll need to make sure you have an alternate way to connect to the Internet.**</source>\n        <translation>Use Tethering to share your internet connection with other devices over Wi-Fi.\n\n**While Tethering is active, you won&apos;t be able to connect to the Internet with Wi-Fi, so you&apos;ll need to make sure you have an alternate way to connect to the Internet.**</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"478\"/>\n        <source>Couldn&apos;t switch off tethering</source>\n        <translation>Couldn&apos;t switch off tethering</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"489\"/>\n        <source>Wi-Fi is off</source>\n        <translation>Wi-Fi is off</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"522\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"669\"/>\n        <source>Switch Wi-Fi On</source>\n        <translation>Switch Wi-Fi On</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"568\"/>\n        <source>Wi-Fi is disabled</source>\n        <translation>Wi-Fi is disabled</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"512\"/>\n        <source>Switch Wi-Fi on to connect to a wireless network</source>\n        <translation>Switch Wi-Fi on to connect to a wireless network</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"591\"/>\n        <source>Use the Wi-Fi switch to enable Wi-Fi and connect to a network</source>\n        <translation>Use the Wi-Fi switch to enable Wi-Fi and connect to a network</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"636\"/>\n        <source>You&apos;re in flight mode</source>\n        <translation>You&apos;re in aeroplane mode</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"659\"/>\n        <source>Switch Wi-Fi on to connect to a wireless network. Flight mode won&apos;t be disabled.</source>\n        <translation>Switch Wi-Fi on to connect to a wireless network. Aeroplane mode won&apos;t be disabled.</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"91\"/>\n        <source>Disable Tethering</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>WiredChunkUpdater</name>\n    <message>\n        <location filename=\"../chunk/wiredchunkupdater.cpp\" line=\"25\"/>\n        <source>Wired</source>\n        <translation>Wired</translation>\n    </message>\n</context>\n<context>\n    <name>WiredDevicePane</name>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.ui\" line=\"84\"/>\n        <source>STATUS</source>\n        <translation>STATUS</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.ui\" line=\"102\"/>\n        <source>This Device</source>\n        <translation>This Device</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.ui\" line=\"246\"/>\n        <source>ACTIONS</source>\n        <translation>ACTIONS</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.ui\" line=\"255\"/>\n        <source>Connect</source>\n        <translation>Connect</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.ui\" line=\"262\"/>\n        <source>Disconnect</source>\n        <translation>Disconnect</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.ui\" line=\"35\"/>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"64\"/>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"83\"/>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"90\"/>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"103\"/>\n        <source>Wired</source>\n        <translation>Wired</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"84\"/>\n        <source>Disconnected</source>\n        <translation>Disconnected</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"95\"/>\n        <source>Connected</source>\n        <translation>Connected</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"104\"/>\n        <source>Failed</source>\n        <translation>Failed</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"177\"/>\n        <source>Connection Failure</source>\n        <translation>Connection Failure</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"179\"/>\n        <source>Connecting to the network failed because %2.</source>\n        <translation>Connecting to the network failed because %2.</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"122\"/>\n        <source>Router</source>\n        <translation>Router</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"144\"/>\n        <source>Unavailable</source>\n        <translation>Unavailable</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"148\"/>\n        <source>Connect an Ethernet cable.</source>\n        <translation>Connect an Ethernet cable.</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"150\"/>\n        <source>This network is unavailable because %2.</source>\n        <translation>This network is unavailable because %2.</translation>\n    </message>\n</context>\n<context>\n    <name>WiredOnboardingSetup</name>\n    <message>\n        <location filename=\"../onboarding/wiredonboardingsetup.ui\" line=\"57\"/>\n        <source>WIRED</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/wiredonboardingsetup.ui\" line=\"73\"/>\n        <source>Use Wired Connection</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/wiredonboardingsetup.cpp\" line=\"94\"/>\n        <source>To connect to the Internet using a wired network, connect the network cable.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/wiredonboardingsetup.cpp\" line=\"91\"/>\n        <source>Connect to the Internet using a wired network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>WirelessNetworkListDelegate</name>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"89\"/>\n        <source>In Range</source>\n        <translation>In Range</translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"97\"/>\n        <source>Out of range</source>\n        <translation>Out of range</translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"107\"/>\n        <source>Not Secured</source>\n        <translation>Not Secured</translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"110\"/>\n        <source>Secured with Static WEP</source>\n        <translation>Secured with Static WEP</translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"113\"/>\n        <source>Secured with Dynamic WEP</source>\n        <translation>Secured with Dynamic WEP</translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"116\"/>\n        <source>Secured with LEAP</source>\n        <translation>Secured with LEAP</translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"119\"/>\n        <source>Secured with WPA-PSK</source>\n        <translation>Secured with WPA-PSK</translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"122\"/>\n        <source>Secured with WPA Enterprise</source>\n        <translation>Secured with WPA Enterprise</translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"125\"/>\n        <source>Secured with WPA2-PSK</source>\n        <translation>Secured with WPA2-PSK</translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"128\"/>\n        <source>Secured with WPA2 Enterprise</source>\n        <translation>Secured with WPA2 Enterprise</translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"85\"/>\n        <source>Connected</source>\n        <translation>Connected</translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"131\"/>\n        <source>Secured with WPA3</source>\n        <translation>Secured with WPA3</translation>\n    </message>\n</context>\n<context>\n    <name>WirelessNetworkSelectionPopover</name>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"57\"/>\n        <source>Connect to a Wireless Network</source>\n        <translation>Connect to a Wireless Network</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"107\"/>\n        <source>KNOWN NETWORKS</source>\n        <translation>KNOWN NETWORKS</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"158\"/>\n        <source>NEW NETWORKS</source>\n        <translation>NEW NETWORKS</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"181\"/>\n        <source>New Manual Connection</source>\n        <translation>New Manual Connection</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.cpp\" line=\"217\"/>\n        <source>For network %1</source>\n        <translation>For network %1</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.cpp\" line=\"235\"/>\n        <source>Forget Network</source>\n        <translation>Forget Network</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"421\"/>\n        <source>Network Security</source>\n        <translation>Network Security</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.cpp\" line=\"141\"/>\n        <source>Unknown Security</source>\n        <translation>Unknown Security</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.cpp\" line=\"142\"/>\n        <source>Not sure how to connect to this network. Use manual setup to connect to it.</source>\n        <translation>Not sure how to connect to this network. Use manual setup to connect to it.</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"297\"/>\n        <source>Enter the security key</source>\n        <translation>Enter the security key</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"454\"/>\n        <source>Select the EAP method. If you don&apos;t know what to select, contact your system administrator for the details.</source>\n        <translation>Select the EAP method. If you don&apos;t know what to select, contact your system administrator for the details.</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"484\"/>\n        <source>TLS</source>\n        <translation>TLS</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"489\"/>\n        <source>LEAP</source>\n        <translation>LEAP</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"494\"/>\n        <source>PWD</source>\n        <translation>PWD</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"499\"/>\n        <source>FAST</source>\n        <translation>FAST</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"504\"/>\n        <source>TTLS</source>\n        <translation>TTLS</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"509\"/>\n        <source>PEAP</source>\n        <translation>PEAP</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.cpp\" line=\"316\"/>\n        <source>Wireless</source>\n        <translation>Wireless</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.cpp\" line=\"218\"/>\n        <source>Edit</source>\n        <translation>Edit</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.cpp\" line=\"319\"/>\n        <source>Connect</source>\n        <translation>Connect</translation>\n    </message>\n</context>\n<context>\n    <name>WirelessOnboardingSetup</name>\n    <message>\n        <location filename=\"../onboarding/wirelessonboardingsetup.ui\" line=\"57\"/>\n        <source>WI-FI</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/wirelessonboardingsetup.ui\" line=\"64\"/>\n        <source>Connect to the Internet using a Wi-Fi network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/wirelessonboardingsetup.ui\" line=\"73\"/>\n        <source>Select Network</source>\n        <translation type=\"unfinished\">Select Network</translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/NetworkPlugin/translations/en_US.qm",
    "content": "<d\u0018!\u001c`"
  },
  {
    "path": "plugins/NetworkPlugin/translations/en_US.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" sourcelanguage=\"en_US\">\n<context>\n    <name>CellularPane</name>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.ui\" line=\"84\"/>\n        <source>STATUS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.ui\" line=\"102\"/>\n        <source>This Device</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.ui\" line=\"246\"/>\n        <source>ACTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.ui\" line=\"262\"/>\n        <source>Connect</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.ui\" line=\"269\"/>\n        <source>Disconnect</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.ui\" line=\"276\"/>\n        <source>Modem Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"105\"/>\n        <source>Disable Cellular</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"107\"/>\n        <source>Enable Cellular</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"129\"/>\n        <source>Disconnected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"135\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"397\"/>\n        <source>Cellular</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"140\"/>\n        <source>Connected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"149\"/>\n        <source>Failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"209\"/>\n        <source>No SIM Card</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"210\"/>\n        <source>Insert a SIM card to connect to cellular services.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"212\"/>\n        <source>No SIM</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"215\"/>\n        <source>Unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"218\"/>\n        <source>This network is unavailable because %2.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"249\"/>\n        <source>Connection Failure</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"251\"/>\n        <source>Connecting to the network failed because %2.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"326\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"339\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"346\"/>\n        <source>Enter SIM PIN</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"328\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"332\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"344\"/>\n        <source>SIM PIN Required</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"334\"/>\n        <source>A SIM PIN is required to connect to the cellular network.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"357\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"370\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"377\"/>\n        <source>Enter SIM PUK</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"359\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"363\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"375\"/>\n        <source>SIM PUK Required</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"365\"/>\n        <source>A SIM PUK is required to connect to the cellular network.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>Common</name>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"27\"/>\n        <source>the device is no longer managed by NetworkManager</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"29\"/>\n        <source>configuration of the device failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"31\"/>\n        <source>configuration of the device is unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"33\"/>\n        <source>configuration of the device expired</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"35\"/>\n        <source>required secrets were not provided</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"37\"/>\n        <source>the authentication supplicant disconnected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"39\"/>\n        <source>configuration of the authentication supplicant failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"41\"/>\n        <source>the authentication supplicant failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"43\"/>\n        <source>the authentication supplicant timed out</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"45\"/>\n        <source>the PPP network failed to start</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"47\"/>\n        <source>the PPP network was disconnected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"49\"/>\n        <source>the PPP network failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"51\"/>\n        <source>DHCP configuration failed to start</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"53\"/>\n        <source>DHCP configuration had an error</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"55\"/>\n        <source>DHCP configuration failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"67\"/>\n        <source>the modem is busy</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"69\"/>\n        <source>there is no dial tone on the modem</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"71\"/>\n        <source>no carrier is available on the modem</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"73\"/>\n        <source>dialling the number on the modem timed out</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"75\"/>\n        <source>dialling the number on the modem failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"77\"/>\n        <source>initialising the modem failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"79\"/>\n        <source>APN selection failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"81\"/>\n        <source>the modem is not searching</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"83\"/>\n        <source>the cell tower denied registration of the modem</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"85\"/>\n        <source>registration of the modem on the cell tower timed out</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"87\"/>\n        <source>registration of the modem on the cell tower failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"91\"/>\n        <source>the device firmware is missing</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"93\"/>\n        <source>the device was removed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"95\"/>\n        <source>the device is sleeping</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"97\"/>\n        <source>the connection was removed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"99\"/>\n        <source>you requested the action</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"107\"/>\n        <source>the modem was not found</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"109\"/>\n        <source>Bluetooth is not available</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"111\"/>\n        <source>the SIM card is not inserted</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"113\"/>\n        <source>the SIM PIN is required</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"115\"/>\n        <source>the SIM PUK is required</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"118\"/>\n        <source>the SIM PUK is exhausted</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"126\"/>\n        <source>ModemManager is not operational on this device</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"128\"/>\n        <source>the wireless network wasn&apos;t found</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"152\"/>\n        <source>an unknown error occurred</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"198\"/>\n        <source>Cellular</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>ConnectionSelectionPopover</name>\n    <message>\n        <location filename=\"../statusCenter/popovers/connectionselectionpopover.ui\" line=\"35\"/>\n        <source>Select Connection Profile</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/connectionselectionpopover.ui\" line=\"42\"/>\n        <source>Select a connection profile to use</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>DevicePane</name>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/devicepane.ui\" line=\"83\"/>\n        <source>STATUS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/devicepane.ui\" line=\"90\"/>\n        <source>theDesk doesn&apos;t support this network interface, so you won&apos;t be able to configure it fully here.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/devicepane.ui\" line=\"144\"/>\n        <source>ACTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/devicepane.ui\" line=\"153\"/>\n        <source>Disconnect</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>GenericChunkUpdater</name>\n    <message>\n        <location filename=\"../chunk/genericchunkupdater.cpp\" line=\"24\"/>\n        <source>Connected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>IPv4ConnectionEditorPane</name>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"35\"/>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.cpp\" line=\"69\"/>\n        <source>IPv4</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"99\"/>\n        <source>DHCP</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"104\"/>\n        <source>DHCP with manual DNS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"109\"/>\n        <source>Manual</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"114\"/>\n        <source>Shared</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"119\"/>\n        <source>Disabled</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"127\"/>\n        <source>Configuration Method</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"143\"/>\n        <source>Require IPv4</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"208\"/>\n        <source>IP Address</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"215\"/>\n        <source>Default Gateway</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"222\"/>\n        <source>Subnet Length</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"235\"/>\n        <source>ADDRESSES</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"255\"/>\n        <source>Set the IP address that this device will be assigned.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"345\"/>\n        <source>DNS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"352\"/>\n        <source>1.1.1.1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"359\"/>\n        <source>Configure the DNS servers that will be used to resolve domain names.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.cpp\" line=\"217\"/>\n        <source>For DNS server %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.cpp\" line=\"218\"/>\n        <source>Remove</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>NetworkChunk</name>\n    <message>\n        <location filename=\"../chunk/networkchunk.cpp\" line=\"64\"/>\n        <source>Network Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../chunk/networkchunk.cpp\" line=\"103\"/>\n        <source>Disconnected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../chunk/networkchunk.cpp\" line=\"137\"/>\n        <source>Login Required</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../chunk/networkchunk.cpp\" line=\"140\"/>\n        <source>Can&apos;t get to the Internet</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>NetworkConnectionEditor</name>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"90\"/>\n        <source>SETTINGS MODIFIED</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"125\"/>\n        <source>Revert</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"136\"/>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"224\"/>\n        <source>Save</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"195\"/>\n        <source>DONE?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"260\"/>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"303\"/>\n        <source>General</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"327\"/>\n        <source>Connection Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.cpp\" line=\"203\"/>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.cpp\" line=\"231\"/>\n        <source>Couldn&apos;t save settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>NetworkStatusCenterLeftPane</name>\n    <message>\n        <location filename=\"../statusCenter/networkstatuscenterleftpane.ui\" line=\"35\"/>\n        <source>Network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>NetworkStatusCenterPane</name>\n    <message>\n        <location filename=\"../statusCenter/networkstatuscenterpane.ui\" line=\"100\"/>\n        <source>NetworkManager is not operational</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/networkstatuscenterpane.ui\" line=\"110\"/>\n        <source>Contact your system administrator</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/networkstatuscenterpane.cpp\" line=\"159\"/>\n        <source>Network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>OnboardingNetwork</name>\n    <message>\n        <location filename=\"../onboarding/onboardingnetwork.ui\" line=\"35\"/>\n        <location filename=\"../onboarding/onboardingnetwork.cpp\" line=\"96\"/>\n        <source>Network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingnetwork.ui\" line=\"42\"/>\n        <source>Connect to the Internet to get updates and install new software.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingnetwork.ui\" line=\"194\"/>\n        <source>You&apos;re connected!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingnetwork.ui\" line=\"204\"/>\n        <source>Disconnect and connect to a different network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingnetwork.ui\" line=\"275\"/>\n        <source>You can always set up the network connection later.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingnetwork.cpp\" line=\"73\"/>\n        <source>Continue without Internet</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingnetwork.cpp\" line=\"79\"/>\n        <location filename=\"../onboarding/onboardingnetwork.cpp\" line=\"85\"/>\n        <source>Next</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SecurityEapPeap</name>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"35\"/>\n        <source>PEAP</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"42\"/>\n        <source>Enter the settings for this network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"82\"/>\n        <source>Phase-2 Authentication</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"89\"/>\n        <source>Anonymous Identity</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"99\"/>\n        <source>PEAP version</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"106\"/>\n        <source>Username</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"113\"/>\n        <source>Password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"120\"/>\n        <source>CA Certificate</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"127\"/>\n        <source>Browse...</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"135\"/>\n        <source>MSCHAPv2</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"140\"/>\n        <source>MD5</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"145\"/>\n        <source>GTC</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"171\"/>\n        <source>Automatic</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"187\"/>\n        <source>Version 0</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"200\"/>\n        <source>Version 1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"244\"/>\n        <source>Connect</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.cpp\" line=\"107\"/>\n        <source>Certificates (*.pem, *.cer)</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SecurityEapUnsupported</name>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeapunsupported.ui\" line=\"35\"/>\n        <location filename=\"../statusCenter/eap/securityeapunsupported.ui\" line=\"77\"/>\n        <source>Unsupported Security Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeapunsupported.ui\" line=\"87\"/>\n        <source>Sorry, theDesk doesn&apos;t support those security settings at the moment. You can try using the terminal to configure this network.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SimSettingsPopover</name>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"57\"/>\n        <source>Modem Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"88\"/>\n        <source>SIM PIN</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"98\"/>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"114\"/>\n        <source>Enable SIM PIN</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"105\"/>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"120\"/>\n        <source>Disable SIM PIN</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"112\"/>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"164\"/>\n        <source>Change SIM PIN</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"128\"/>\n        <source>CALLS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"138\"/>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"769\"/>\n        <source>Call Waiting</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"188\"/>\n        <source>IMSI</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"195\"/>\n        <source>IMEI</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"208\"/>\n        <source>MODEM INFORMATION</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"215\"/>\n        <source>Carrier</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"340\"/>\n        <source>Enter the new SIM PIN</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"537\"/>\n        <source>Enter the current SIM PIN</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"806\"/>\n        <source>Enable Call Waiting</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"813\"/>\n        <source>Call Waiting allows you to receive calls while another call is currently active.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"58\"/>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"59\"/>\n        <source>No SIM card</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"142\"/>\n        <source>You have %n remaining tries</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n        </translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"203\"/>\n        <source>Error</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"204\"/>\n        <source>Couldn&apos;t get current Call Waiting status from carrier</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SwitchManager</name>\n    <message>\n        <location filename=\"../switchmanager.cpp\" line=\"63\"/>\n        <location filename=\"../switchmanager.cpp\" line=\"72\"/>\n        <location filename=\"../switchmanager.cpp\" line=\"122\"/>\n        <source>Flight Mode</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../switchmanager.cpp\" line=\"67\"/>\n        <source>Switch off Flight Mode</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../switchmanager.cpp\" line=\"78\"/>\n        <location filename=\"../switchmanager.cpp\" line=\"123\"/>\n        <source>Wi-Fi</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../switchmanager.cpp\" line=\"88\"/>\n        <location filename=\"../switchmanager.cpp\" line=\"124\"/>\n        <source>Cellular</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>TetheringSettingsPopover</name>\n    <message>\n        <location filename=\"../statusCenter/popovers/tetheringsettingspopover.ui\" line=\"35\"/>\n        <source>Tethering Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/tetheringsettingspopover.ui\" line=\"63\"/>\n        <source>SSID</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/tetheringsettingspopover.ui\" line=\"73\"/>\n        <source>These settings will be used to set up a Wi-Fi network that other devices can connect to when tethering is enabled.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/tetheringsettingspopover.ui\" line=\"96\"/>\n        <source>Network Key</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/tetheringsettingspopover.cpp\" line=\"64\"/>\n        <source>Network key needs to be at least 8 characters long</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>UnlockModemPopover</name>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.ui\" line=\"190\"/>\n        <source>Enter the SIM PIN</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.ui\" line=\"356\"/>\n        <source>SIM PUK</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.ui\" line=\"363\"/>\n        <source>You&apos;ll also need to provide a new SIM PIN to set once the SIM is unlocked.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.ui\" line=\"379\"/>\n        <source>SIM PUK REQUIRED</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.ui\" line=\"425\"/>\n        <source>Unlock SIM Card</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.ui\" line=\"456\"/>\n        <source>New SIM PIN</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.ui\" line=\"466\"/>\n        <source>Confirm SIM PIN</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.cpp\" line=\"48\"/>\n        <source>Don&apos;t guess the PUK!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.cpp\" line=\"49\"/>\n        <source>Once you exhaust your attempts, the SIM card will be blocked forever.\n\nYou&apos;ll need to contact your carrier for a new SIM card.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.cpp\" line=\"68\"/>\n        <source>If you enter the incorrect PIN again, your SIM card will be PUK locked, and you&apos;ll need to contact your carrier.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.cpp\" line=\"70\"/>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.cpp\" line=\"75\"/>\n        <source>You have %n remaining tries</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n        </translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.cpp\" line=\"73\"/>\n        <source>This is your final chance to get the PUK right before you&apos;ll need to obtain a new SIM card from your carrier.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.cpp\" line=\"78\"/>\n        <source>Contact your carrier to obtain the &lt;b&gt;SIM PUK&lt;/b&gt;, and enter it below to unlock %1.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>WifiConnectionEditorPane</name>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/wificonnectioneditorpane.ui\" line=\"35\"/>\n        <location filename=\"../statusCenter/connectionEditor/wificonnectioneditorpane.cpp\" line=\"47\"/>\n        <source>Wi-Fi</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/wificonnectioneditorpane.ui\" line=\"59\"/>\n        <source>Mode</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/wificonnectioneditorpane.ui\" line=\"66\"/>\n        <source>SSID</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/wificonnectioneditorpane.ui\" line=\"77\"/>\n        <source>Infrastructure</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/wificonnectioneditorpane.ui\" line=\"82\"/>\n        <source>Ad-Hoc</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/wificonnectioneditorpane.ui\" line=\"87\"/>\n        <source>Access Point</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>WifiDevicePane</name>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"106\"/>\n        <source>STATUS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"124\"/>\n        <source>This Device</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"268\"/>\n        <source>ACTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"277\"/>\n        <source>Select Network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"284\"/>\n        <source>Disconnect</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"348\"/>\n        <source>TETHERING</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"355\"/>\n        <source>Network Key</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"375\"/>\n        <source>Use Tethering to share your internet connection with other devices over Wi-Fi.\n\n**While Tethering is active, you won&apos;t be able to connect to the Internet with Wi-Fi, so you&apos;ll need to make sure you have an alternate way to connect to the Internet.**</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"398\"/>\n        <source>Enable Tethering</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"414\"/>\n        <source>SSID</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"440\"/>\n        <source>Set Tethering Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"489\"/>\n        <source>Wi-Fi is off</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"512\"/>\n        <source>Switch Wi-Fi on to connect to a wireless network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"522\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"669\"/>\n        <source>Switch Wi-Fi On</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"568\"/>\n        <source>Wi-Fi is disabled</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"591\"/>\n        <source>Use the Wi-Fi switch to enable Wi-Fi and connect to a network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"636\"/>\n        <source>You&apos;re in flight mode</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"659\"/>\n        <source>Switch Wi-Fi on to connect to a wireless network. Flight mode won&apos;t be disabled.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"88\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"131\"/>\n        <source>Tethering</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"91\"/>\n        <source>Disable Tethering</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"118\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"143\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"153\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"202\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"203\"/>\n        <source>Wi-Fi</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"119\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"230\"/>\n        <source>Disconnected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"132\"/>\n        <source>Active</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"138\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"144\"/>\n        <source>Connected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"154\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"239\"/>\n        <source>Failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"164\"/>\n        <source>Connection Failure</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"166\"/>\n        <source>Connecting to %1 failed because %2.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"170\"/>\n        <source>the network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"273\"/>\n        <source>0 Devices</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"282\"/>\n        <source>Unknown</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"452\"/>\n        <source>Couldn&apos;t configure tethering</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"478\"/>\n        <source>Couldn&apos;t switch off tethering</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>WiredChunkUpdater</name>\n    <message>\n        <location filename=\"../chunk/wiredchunkupdater.cpp\" line=\"25\"/>\n        <source>Wired</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>WiredDevicePane</name>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.ui\" line=\"35\"/>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"64\"/>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"83\"/>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"90\"/>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"103\"/>\n        <source>Wired</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.ui\" line=\"84\"/>\n        <source>STATUS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.ui\" line=\"102\"/>\n        <source>This Device</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.ui\" line=\"246\"/>\n        <source>ACTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.ui\" line=\"255\"/>\n        <source>Connect</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.ui\" line=\"262\"/>\n        <source>Disconnect</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"84\"/>\n        <source>Disconnected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"95\"/>\n        <source>Connected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"104\"/>\n        <source>Failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"122\"/>\n        <source>Router</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"144\"/>\n        <source>Unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"148\"/>\n        <source>Connect an Ethernet cable.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"150\"/>\n        <source>This network is unavailable because %2.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"177\"/>\n        <source>Connection Failure</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"179\"/>\n        <source>Connecting to the network failed because %2.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>WiredOnboardingSetup</name>\n    <message>\n        <location filename=\"../onboarding/wiredonboardingsetup.ui\" line=\"57\"/>\n        <source>WIRED</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/wiredonboardingsetup.ui\" line=\"73\"/>\n        <source>Use Wired Connection</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/wiredonboardingsetup.cpp\" line=\"91\"/>\n        <source>Connect to the Internet using a wired network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/wiredonboardingsetup.cpp\" line=\"94\"/>\n        <source>To connect to the Internet using a wired network, connect the network cable.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>WirelessNetworkListDelegate</name>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"85\"/>\n        <source>Connected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"89\"/>\n        <source>In Range</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"97\"/>\n        <source>Out of range</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"107\"/>\n        <source>Not Secured</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"110\"/>\n        <source>Secured with Static WEP</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"113\"/>\n        <source>Secured with Dynamic WEP</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"116\"/>\n        <source>Secured with LEAP</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"119\"/>\n        <source>Secured with WPA-PSK</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"122\"/>\n        <source>Secured with WPA Enterprise</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"125\"/>\n        <source>Secured with WPA2-PSK</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"128\"/>\n        <source>Secured with WPA2 Enterprise</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"131\"/>\n        <source>Secured with WPA3</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>WirelessNetworkSelectionPopover</name>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"57\"/>\n        <source>Connect to a Wireless Network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"107\"/>\n        <source>KNOWN NETWORKS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"158\"/>\n        <source>NEW NETWORKS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"181\"/>\n        <source>New Manual Connection</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"297\"/>\n        <source>Enter the security key</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"421\"/>\n        <source>Network Security</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"454\"/>\n        <source>Select the EAP method. If you don&apos;t know what to select, contact your system administrator for the details.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"484\"/>\n        <source>TLS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"489\"/>\n        <source>LEAP</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"494\"/>\n        <source>PWD</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"499\"/>\n        <source>FAST</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"504\"/>\n        <source>TTLS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"509\"/>\n        <source>PEAP</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.cpp\" line=\"141\"/>\n        <source>Unknown Security</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.cpp\" line=\"142\"/>\n        <source>Not sure how to connect to this network. Use manual setup to connect to it.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.cpp\" line=\"217\"/>\n        <source>For network %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.cpp\" line=\"218\"/>\n        <source>Edit</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.cpp\" line=\"235\"/>\n        <source>Forget Network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.cpp\" line=\"316\"/>\n        <source>Wireless</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.cpp\" line=\"319\"/>\n        <source>Connect</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>WirelessOnboardingSetup</name>\n    <message>\n        <location filename=\"../onboarding/wirelessonboardingsetup.ui\" line=\"57\"/>\n        <source>WI-FI</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/wirelessonboardingsetup.ui\" line=\"64\"/>\n        <source>Connect to the Internet using a Wi-Fi network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/wirelessonboardingsetup.ui\" line=\"73\"/>\n        <source>Select Network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/NetworkPlugin/translations/es.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"es\" sourcelanguage=\"en_US\">\n<context>\n    <name>CellularPane</name>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.ui\" line=\"84\"/>\n        <source>STATUS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.ui\" line=\"102\"/>\n        <source>This Device</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.ui\" line=\"246\"/>\n        <source>ACTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.ui\" line=\"262\"/>\n        <source>Connect</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.ui\" line=\"269\"/>\n        <source>Disconnect</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.ui\" line=\"276\"/>\n        <source>Modem Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"105\"/>\n        <source>Disable Cellular</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"107\"/>\n        <source>Enable Cellular</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"129\"/>\n        <source>Disconnected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"135\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"397\"/>\n        <source>Cellular</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"140\"/>\n        <source>Connected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"149\"/>\n        <source>Failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"209\"/>\n        <source>No SIM Card</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"210\"/>\n        <source>Insert a SIM card to connect to cellular services.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"212\"/>\n        <source>No SIM</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"215\"/>\n        <source>Unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"218\"/>\n        <source>This network is unavailable because %2.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"249\"/>\n        <source>Connection Failure</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"251\"/>\n        <source>Connecting to the network failed because %2.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"326\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"339\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"346\"/>\n        <source>Enter SIM PIN</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"328\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"332\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"344\"/>\n        <source>SIM PIN Required</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"334\"/>\n        <source>A SIM PIN is required to connect to the cellular network.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"357\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"370\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"377\"/>\n        <source>Enter SIM PUK</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"359\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"363\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"375\"/>\n        <source>SIM PUK Required</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"365\"/>\n        <source>A SIM PUK is required to connect to the cellular network.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>Common</name>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"27\"/>\n        <source>the device is no longer managed by NetworkManager</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"29\"/>\n        <source>configuration of the device failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"31\"/>\n        <source>configuration of the device is unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"33\"/>\n        <source>configuration of the device expired</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"35\"/>\n        <source>required secrets were not provided</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"37\"/>\n        <source>the authentication supplicant disconnected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"39\"/>\n        <source>configuration of the authentication supplicant failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"41\"/>\n        <source>the authentication supplicant failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"43\"/>\n        <source>the authentication supplicant timed out</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"45\"/>\n        <source>the PPP network failed to start</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"47\"/>\n        <source>the PPP network was disconnected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"49\"/>\n        <source>the PPP network failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"51\"/>\n        <source>DHCP configuration failed to start</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"53\"/>\n        <source>DHCP configuration had an error</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"55\"/>\n        <source>DHCP configuration failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"67\"/>\n        <source>the modem is busy</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"69\"/>\n        <source>there is no dial tone on the modem</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"71\"/>\n        <source>no carrier is available on the modem</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"73\"/>\n        <source>dialling the number on the modem timed out</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"75\"/>\n        <source>dialling the number on the modem failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"77\"/>\n        <source>initialising the modem failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"79\"/>\n        <source>APN selection failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"81\"/>\n        <source>the modem is not searching</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"83\"/>\n        <source>the cell tower denied registration of the modem</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"85\"/>\n        <source>registration of the modem on the cell tower timed out</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"87\"/>\n        <source>registration of the modem on the cell tower failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"91\"/>\n        <source>the device firmware is missing</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"93\"/>\n        <source>the device was removed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"95\"/>\n        <source>the device is sleeping</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"97\"/>\n        <source>the connection was removed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"99\"/>\n        <source>you requested the action</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"107\"/>\n        <source>the modem was not found</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"109\"/>\n        <source>Bluetooth is not available</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"111\"/>\n        <source>the SIM card is not inserted</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"113\"/>\n        <source>the SIM PIN is required</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"115\"/>\n        <source>the SIM PUK is required</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"118\"/>\n        <source>the SIM PUK is exhausted</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"126\"/>\n        <source>ModemManager is not operational on this device</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"128\"/>\n        <source>the wireless network wasn&apos;t found</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"152\"/>\n        <source>an unknown error occurred</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"198\"/>\n        <source>Cellular</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>ConnectionSelectionPopover</name>\n    <message>\n        <location filename=\"../statusCenter/popovers/connectionselectionpopover.ui\" line=\"35\"/>\n        <source>Select Connection Profile</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/connectionselectionpopover.ui\" line=\"42\"/>\n        <source>Select a connection profile to use</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>DevicePane</name>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/devicepane.ui\" line=\"83\"/>\n        <source>STATUS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/devicepane.ui\" line=\"90\"/>\n        <source>theDesk doesn&apos;t support this network interface, so you won&apos;t be able to configure it fully here.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/devicepane.ui\" line=\"144\"/>\n        <source>ACTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/devicepane.ui\" line=\"153\"/>\n        <source>Disconnect</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>GenericChunkUpdater</name>\n    <message>\n        <location filename=\"../chunk/genericchunkupdater.cpp\" line=\"24\"/>\n        <source>Connected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>IPv4ConnectionEditorPane</name>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"35\"/>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.cpp\" line=\"69\"/>\n        <source>IPv4</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"99\"/>\n        <source>DHCP</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"104\"/>\n        <source>DHCP with manual DNS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"109\"/>\n        <source>Manual</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"114\"/>\n        <source>Shared</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"119\"/>\n        <source>Disabled</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"127\"/>\n        <source>Configuration Method</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"143\"/>\n        <source>Require IPv4</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"208\"/>\n        <source>IP Address</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"215\"/>\n        <source>Default Gateway</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"222\"/>\n        <source>Subnet Length</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"235\"/>\n        <source>ADDRESSES</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"255\"/>\n        <source>Set the IP address that this device will be assigned.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"345\"/>\n        <source>DNS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"352\"/>\n        <source>1.1.1.1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"359\"/>\n        <source>Configure the DNS servers that will be used to resolve domain names.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.cpp\" line=\"217\"/>\n        <source>For DNS server %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.cpp\" line=\"218\"/>\n        <source>Remove</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>NetworkChunk</name>\n    <message>\n        <location filename=\"../chunk/networkchunk.cpp\" line=\"64\"/>\n        <source>Network Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../chunk/networkchunk.cpp\" line=\"103\"/>\n        <source>Disconnected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../chunk/networkchunk.cpp\" line=\"137\"/>\n        <source>Login Required</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../chunk/networkchunk.cpp\" line=\"140\"/>\n        <source>Can&apos;t get to the Internet</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>NetworkConnectionEditor</name>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"90\"/>\n        <source>SETTINGS MODIFIED</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"125\"/>\n        <source>Revert</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"136\"/>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"224\"/>\n        <source>Save</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"195\"/>\n        <source>DONE?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"260\"/>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"303\"/>\n        <source>General</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"327\"/>\n        <source>Connection Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.cpp\" line=\"203\"/>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.cpp\" line=\"231\"/>\n        <source>Couldn&apos;t save settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>NetworkStatusCenterLeftPane</name>\n    <message>\n        <location filename=\"../statusCenter/networkstatuscenterleftpane.ui\" line=\"35\"/>\n        <source>Network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>NetworkStatusCenterPane</name>\n    <message>\n        <location filename=\"../statusCenter/networkstatuscenterpane.ui\" line=\"100\"/>\n        <source>NetworkManager is not operational</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/networkstatuscenterpane.ui\" line=\"110\"/>\n        <source>Contact your system administrator</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/networkstatuscenterpane.cpp\" line=\"159\"/>\n        <source>Network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>OnboardingNetwork</name>\n    <message>\n        <location filename=\"../onboarding/onboardingnetwork.ui\" line=\"35\"/>\n        <location filename=\"../onboarding/onboardingnetwork.cpp\" line=\"96\"/>\n        <source>Network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingnetwork.ui\" line=\"42\"/>\n        <source>Connect to the Internet to get updates and install new software.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingnetwork.ui\" line=\"194\"/>\n        <source>You&apos;re connected!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingnetwork.ui\" line=\"204\"/>\n        <source>Disconnect and connect to a different network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingnetwork.ui\" line=\"275\"/>\n        <source>You can always set up the network connection later.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingnetwork.cpp\" line=\"73\"/>\n        <source>Continue without Internet</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingnetwork.cpp\" line=\"79\"/>\n        <location filename=\"../onboarding/onboardingnetwork.cpp\" line=\"85\"/>\n        <source>Next</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SecurityEapPeap</name>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"35\"/>\n        <source>PEAP</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"42\"/>\n        <source>Enter the settings for this network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"82\"/>\n        <source>Phase-2 Authentication</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"89\"/>\n        <source>Anonymous Identity</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"99\"/>\n        <source>PEAP version</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"106\"/>\n        <source>Username</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"113\"/>\n        <source>Password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"120\"/>\n        <source>CA Certificate</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"127\"/>\n        <source>Browse...</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"135\"/>\n        <source>MSCHAPv2</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"140\"/>\n        <source>MD5</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"145\"/>\n        <source>GTC</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"171\"/>\n        <source>Automatic</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"187\"/>\n        <source>Version 0</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"200\"/>\n        <source>Version 1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"244\"/>\n        <source>Connect</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.cpp\" line=\"107\"/>\n        <source>Certificates (*.pem, *.cer)</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SecurityEapUnsupported</name>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeapunsupported.ui\" line=\"35\"/>\n        <location filename=\"../statusCenter/eap/securityeapunsupported.ui\" line=\"77\"/>\n        <source>Unsupported Security Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeapunsupported.ui\" line=\"87\"/>\n        <source>Sorry, theDesk doesn&apos;t support those security settings at the moment. You can try using the terminal to configure this network.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SimSettingsPopover</name>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"57\"/>\n        <source>Modem Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"88\"/>\n        <source>SIM PIN</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"98\"/>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"114\"/>\n        <source>Enable SIM PIN</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"105\"/>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"120\"/>\n        <source>Disable SIM PIN</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"112\"/>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"164\"/>\n        <source>Change SIM PIN</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"128\"/>\n        <source>CALLS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"138\"/>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"769\"/>\n        <source>Call Waiting</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"188\"/>\n        <source>IMSI</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"195\"/>\n        <source>IMEI</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"208\"/>\n        <source>MODEM INFORMATION</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"215\"/>\n        <source>Carrier</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"340\"/>\n        <source>Enter the new SIM PIN</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"537\"/>\n        <source>Enter the current SIM PIN</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"806\"/>\n        <source>Enable Call Waiting</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"813\"/>\n        <source>Call Waiting allows you to receive calls while another call is currently active.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"58\"/>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"59\"/>\n        <source>No SIM card</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"142\"/>\n        <source>You have %n remaining tries</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n        </translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"203\"/>\n        <source>Error</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"204\"/>\n        <source>Couldn&apos;t get current Call Waiting status from carrier</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SwitchManager</name>\n    <message>\n        <location filename=\"../switchmanager.cpp\" line=\"63\"/>\n        <location filename=\"../switchmanager.cpp\" line=\"72\"/>\n        <location filename=\"../switchmanager.cpp\" line=\"122\"/>\n        <source>Flight Mode</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../switchmanager.cpp\" line=\"67\"/>\n        <source>Switch off Flight Mode</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../switchmanager.cpp\" line=\"78\"/>\n        <location filename=\"../switchmanager.cpp\" line=\"123\"/>\n        <source>Wi-Fi</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../switchmanager.cpp\" line=\"88\"/>\n        <location filename=\"../switchmanager.cpp\" line=\"124\"/>\n        <source>Cellular</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>TetheringSettingsPopover</name>\n    <message>\n        <location filename=\"../statusCenter/popovers/tetheringsettingspopover.ui\" line=\"35\"/>\n        <source>Tethering Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/tetheringsettingspopover.ui\" line=\"63\"/>\n        <source>SSID</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/tetheringsettingspopover.ui\" line=\"73\"/>\n        <source>These settings will be used to set up a Wi-Fi network that other devices can connect to when tethering is enabled.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/tetheringsettingspopover.ui\" line=\"96\"/>\n        <source>Network Key</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/tetheringsettingspopover.cpp\" line=\"64\"/>\n        <source>Network key needs to be at least 8 characters long</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>UnlockModemPopover</name>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.ui\" line=\"190\"/>\n        <source>Enter the SIM PIN</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.ui\" line=\"356\"/>\n        <source>SIM PUK</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.ui\" line=\"363\"/>\n        <source>You&apos;ll also need to provide a new SIM PIN to set once the SIM is unlocked.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.ui\" line=\"379\"/>\n        <source>SIM PUK REQUIRED</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.ui\" line=\"425\"/>\n        <source>Unlock SIM Card</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.ui\" line=\"456\"/>\n        <source>New SIM PIN</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.ui\" line=\"466\"/>\n        <source>Confirm SIM PIN</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.cpp\" line=\"48\"/>\n        <source>Don&apos;t guess the PUK!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.cpp\" line=\"49\"/>\n        <source>Once you exhaust your attempts, the SIM card will be blocked forever.\n\nYou&apos;ll need to contact your carrier for a new SIM card.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.cpp\" line=\"68\"/>\n        <source>If you enter the incorrect PIN again, your SIM card will be PUK locked, and you&apos;ll need to contact your carrier.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.cpp\" line=\"70\"/>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.cpp\" line=\"75\"/>\n        <source>You have %n remaining tries</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n        </translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.cpp\" line=\"73\"/>\n        <source>This is your final chance to get the PUK right before you&apos;ll need to obtain a new SIM card from your carrier.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.cpp\" line=\"78\"/>\n        <source>Contact your carrier to obtain the &lt;b&gt;SIM PUK&lt;/b&gt;, and enter it below to unlock %1.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>WifiConnectionEditorPane</name>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/wificonnectioneditorpane.ui\" line=\"35\"/>\n        <location filename=\"../statusCenter/connectionEditor/wificonnectioneditorpane.cpp\" line=\"47\"/>\n        <source>Wi-Fi</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/wificonnectioneditorpane.ui\" line=\"59\"/>\n        <source>Mode</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/wificonnectioneditorpane.ui\" line=\"66\"/>\n        <source>SSID</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/wificonnectioneditorpane.ui\" line=\"77\"/>\n        <source>Infrastructure</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/wificonnectioneditorpane.ui\" line=\"82\"/>\n        <source>Ad-Hoc</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/wificonnectioneditorpane.ui\" line=\"87\"/>\n        <source>Access Point</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>WifiDevicePane</name>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"106\"/>\n        <source>STATUS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"124\"/>\n        <source>This Device</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"268\"/>\n        <source>ACTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"277\"/>\n        <source>Select Network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"284\"/>\n        <source>Disconnect</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"348\"/>\n        <source>TETHERING</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"355\"/>\n        <source>Network Key</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"375\"/>\n        <source>Use Tethering to share your internet connection with other devices over Wi-Fi.\n\n**While Tethering is active, you won&apos;t be able to connect to the Internet with Wi-Fi, so you&apos;ll need to make sure you have an alternate way to connect to the Internet.**</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"398\"/>\n        <source>Enable Tethering</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"414\"/>\n        <source>SSID</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"440\"/>\n        <source>Set Tethering Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"489\"/>\n        <source>Wi-Fi is off</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"512\"/>\n        <source>Switch Wi-Fi on to connect to a wireless network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"522\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"669\"/>\n        <source>Switch Wi-Fi On</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"568\"/>\n        <source>Wi-Fi is disabled</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"591\"/>\n        <source>Use the Wi-Fi switch to enable Wi-Fi and connect to a network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"636\"/>\n        <source>You&apos;re in flight mode</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"659\"/>\n        <source>Switch Wi-Fi on to connect to a wireless network. Flight mode won&apos;t be disabled.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"88\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"131\"/>\n        <source>Tethering</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"91\"/>\n        <source>Disable Tethering</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"118\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"143\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"153\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"202\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"203\"/>\n        <source>Wi-Fi</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"119\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"230\"/>\n        <source>Disconnected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"132\"/>\n        <source>Active</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"138\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"144\"/>\n        <source>Connected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"154\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"239\"/>\n        <source>Failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"164\"/>\n        <source>Connection Failure</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"166\"/>\n        <source>Connecting to %1 failed because %2.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"170\"/>\n        <source>the network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"273\"/>\n        <source>0 Devices</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"282\"/>\n        <source>Unknown</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"452\"/>\n        <source>Couldn&apos;t configure tethering</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"478\"/>\n        <source>Couldn&apos;t switch off tethering</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>WiredChunkUpdater</name>\n    <message>\n        <location filename=\"../chunk/wiredchunkupdater.cpp\" line=\"25\"/>\n        <source>Wired</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>WiredDevicePane</name>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.ui\" line=\"35\"/>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"64\"/>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"83\"/>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"90\"/>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"103\"/>\n        <source>Wired</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.ui\" line=\"84\"/>\n        <source>STATUS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.ui\" line=\"102\"/>\n        <source>This Device</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.ui\" line=\"246\"/>\n        <source>ACTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.ui\" line=\"255\"/>\n        <source>Connect</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.ui\" line=\"262\"/>\n        <source>Disconnect</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"84\"/>\n        <source>Disconnected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"95\"/>\n        <source>Connected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"104\"/>\n        <source>Failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"122\"/>\n        <source>Router</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"144\"/>\n        <source>Unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"148\"/>\n        <source>Connect an Ethernet cable.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"150\"/>\n        <source>This network is unavailable because %2.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"177\"/>\n        <source>Connection Failure</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"179\"/>\n        <source>Connecting to the network failed because %2.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>WiredOnboardingSetup</name>\n    <message>\n        <location filename=\"../onboarding/wiredonboardingsetup.ui\" line=\"57\"/>\n        <source>WIRED</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/wiredonboardingsetup.ui\" line=\"73\"/>\n        <source>Use Wired Connection</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/wiredonboardingsetup.cpp\" line=\"91\"/>\n        <source>Connect to the Internet using a wired network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/wiredonboardingsetup.cpp\" line=\"94\"/>\n        <source>To connect to the Internet using a wired network, connect the network cable.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>WirelessNetworkListDelegate</name>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"85\"/>\n        <source>Connected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"89\"/>\n        <source>In Range</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"97\"/>\n        <source>Out of range</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"107\"/>\n        <source>Not Secured</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"110\"/>\n        <source>Secured with Static WEP</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"113\"/>\n        <source>Secured with Dynamic WEP</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"116\"/>\n        <source>Secured with LEAP</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"119\"/>\n        <source>Secured with WPA-PSK</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"122\"/>\n        <source>Secured with WPA Enterprise</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"125\"/>\n        <source>Secured with WPA2-PSK</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"128\"/>\n        <source>Secured with WPA2 Enterprise</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"131\"/>\n        <source>Secured with WPA3</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>WirelessNetworkSelectionPopover</name>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"57\"/>\n        <source>Connect to a Wireless Network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"107\"/>\n        <source>KNOWN NETWORKS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"158\"/>\n        <source>NEW NETWORKS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"181\"/>\n        <source>New Manual Connection</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"297\"/>\n        <source>Enter the security key</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"421\"/>\n        <source>Network Security</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"454\"/>\n        <source>Select the EAP method. If you don&apos;t know what to select, contact your system administrator for the details.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"484\"/>\n        <source>TLS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"489\"/>\n        <source>LEAP</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"494\"/>\n        <source>PWD</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"499\"/>\n        <source>FAST</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"504\"/>\n        <source>TTLS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"509\"/>\n        <source>PEAP</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.cpp\" line=\"141\"/>\n        <source>Unknown Security</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.cpp\" line=\"142\"/>\n        <source>Not sure how to connect to this network. Use manual setup to connect to it.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.cpp\" line=\"217\"/>\n        <source>For network %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.cpp\" line=\"218\"/>\n        <source>Edit</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.cpp\" line=\"235\"/>\n        <source>Forget Network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.cpp\" line=\"316\"/>\n        <source>Wireless</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.cpp\" line=\"319\"/>\n        <source>Connect</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>WirelessOnboardingSetup</name>\n    <message>\n        <location filename=\"../onboarding/wirelessonboardingsetup.ui\" line=\"57\"/>\n        <source>WI-FI</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/wirelessonboardingsetup.ui\" line=\"64\"/>\n        <source>Connect to the Internet using a Wi-Fi network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/wirelessonboardingsetup.ui\" line=\"73\"/>\n        <source>Select Network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/NetworkPlugin/translations/es_VE.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"es_VE\" sourcelanguage=\"en_US\">\n<context>\n    <name>CellularPane</name>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.ui\" line=\"84\"/>\n        <source>STATUS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.ui\" line=\"102\"/>\n        <source>This Device</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.ui\" line=\"246\"/>\n        <source>ACTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.ui\" line=\"262\"/>\n        <source>Connect</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.ui\" line=\"269\"/>\n        <source>Disconnect</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.ui\" line=\"276\"/>\n        <source>Modem Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"105\"/>\n        <source>Disable Cellular</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"107\"/>\n        <source>Enable Cellular</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"129\"/>\n        <source>Disconnected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"135\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"397\"/>\n        <source>Cellular</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"140\"/>\n        <source>Connected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"149\"/>\n        <source>Failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"209\"/>\n        <source>No SIM Card</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"210\"/>\n        <source>Insert a SIM card to connect to cellular services.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"212\"/>\n        <source>No SIM</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"215\"/>\n        <source>Unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"218\"/>\n        <source>This network is unavailable because %2.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"249\"/>\n        <source>Connection Failure</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"251\"/>\n        <source>Connecting to the network failed because %2.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"326\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"339\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"346\"/>\n        <source>Enter SIM PIN</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"328\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"332\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"344\"/>\n        <source>SIM PIN Required</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"334\"/>\n        <source>A SIM PIN is required to connect to the cellular network.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"357\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"370\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"377\"/>\n        <source>Enter SIM PUK</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"359\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"363\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"375\"/>\n        <source>SIM PUK Required</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"365\"/>\n        <source>A SIM PUK is required to connect to the cellular network.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>Common</name>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"27\"/>\n        <source>the device is no longer managed by NetworkManager</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"29\"/>\n        <source>configuration of the device failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"31\"/>\n        <source>configuration of the device is unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"33\"/>\n        <source>configuration of the device expired</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"35\"/>\n        <source>required secrets were not provided</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"37\"/>\n        <source>the authentication supplicant disconnected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"39\"/>\n        <source>configuration of the authentication supplicant failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"41\"/>\n        <source>the authentication supplicant failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"43\"/>\n        <source>the authentication supplicant timed out</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"45\"/>\n        <source>the PPP network failed to start</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"47\"/>\n        <source>the PPP network was disconnected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"49\"/>\n        <source>the PPP network failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"51\"/>\n        <source>DHCP configuration failed to start</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"53\"/>\n        <source>DHCP configuration had an error</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"55\"/>\n        <source>DHCP configuration failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"67\"/>\n        <source>the modem is busy</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"69\"/>\n        <source>there is no dial tone on the modem</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"71\"/>\n        <source>no carrier is available on the modem</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"73\"/>\n        <source>dialling the number on the modem timed out</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"75\"/>\n        <source>dialling the number on the modem failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"77\"/>\n        <source>initialising the modem failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"79\"/>\n        <source>APN selection failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"81\"/>\n        <source>the modem is not searching</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"83\"/>\n        <source>the cell tower denied registration of the modem</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"85\"/>\n        <source>registration of the modem on the cell tower timed out</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"87\"/>\n        <source>registration of the modem on the cell tower failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"91\"/>\n        <source>the device firmware is missing</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"93\"/>\n        <source>the device was removed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"95\"/>\n        <source>the device is sleeping</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"97\"/>\n        <source>the connection was removed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"99\"/>\n        <source>you requested the action</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"107\"/>\n        <source>the modem was not found</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"109\"/>\n        <source>Bluetooth is not available</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"111\"/>\n        <source>the SIM card is not inserted</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"113\"/>\n        <source>the SIM PIN is required</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"115\"/>\n        <source>the SIM PUK is required</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"118\"/>\n        <source>the SIM PUK is exhausted</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"126\"/>\n        <source>ModemManager is not operational on this device</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"128\"/>\n        <source>the wireless network wasn&apos;t found</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"152\"/>\n        <source>an unknown error occurred</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"198\"/>\n        <source>Cellular</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>ConnectionSelectionPopover</name>\n    <message>\n        <location filename=\"../statusCenter/popovers/connectionselectionpopover.ui\" line=\"35\"/>\n        <source>Select Connection Profile</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/connectionselectionpopover.ui\" line=\"42\"/>\n        <source>Select a connection profile to use</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>DevicePane</name>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/devicepane.ui\" line=\"83\"/>\n        <source>STATUS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/devicepane.ui\" line=\"90\"/>\n        <source>theDesk doesn&apos;t support this network interface, so you won&apos;t be able to configure it fully here.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/devicepane.ui\" line=\"144\"/>\n        <source>ACTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/devicepane.ui\" line=\"153\"/>\n        <source>Disconnect</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>GenericChunkUpdater</name>\n    <message>\n        <location filename=\"../chunk/genericchunkupdater.cpp\" line=\"24\"/>\n        <source>Connected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>IPv4ConnectionEditorPane</name>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"35\"/>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.cpp\" line=\"69\"/>\n        <source>IPv4</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"99\"/>\n        <source>DHCP</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"104\"/>\n        <source>DHCP with manual DNS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"109\"/>\n        <source>Manual</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"114\"/>\n        <source>Shared</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"119\"/>\n        <source>Disabled</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"127\"/>\n        <source>Configuration Method</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"143\"/>\n        <source>Require IPv4</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"208\"/>\n        <source>IP Address</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"215\"/>\n        <source>Default Gateway</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"222\"/>\n        <source>Subnet Length</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"235\"/>\n        <source>ADDRESSES</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"255\"/>\n        <source>Set the IP address that this device will be assigned.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"345\"/>\n        <source>DNS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"352\"/>\n        <source>1.1.1.1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"359\"/>\n        <source>Configure the DNS servers that will be used to resolve domain names.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.cpp\" line=\"217\"/>\n        <source>For DNS server %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.cpp\" line=\"218\"/>\n        <source>Remove</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>NetworkChunk</name>\n    <message>\n        <location filename=\"../chunk/networkchunk.cpp\" line=\"64\"/>\n        <source>Network Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../chunk/networkchunk.cpp\" line=\"103\"/>\n        <source>Disconnected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../chunk/networkchunk.cpp\" line=\"137\"/>\n        <source>Login Required</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../chunk/networkchunk.cpp\" line=\"140\"/>\n        <source>Can&apos;t get to the Internet</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>NetworkConnectionEditor</name>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"90\"/>\n        <source>SETTINGS MODIFIED</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"125\"/>\n        <source>Revert</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"136\"/>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"224\"/>\n        <source>Save</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"195\"/>\n        <source>DONE?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"260\"/>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"303\"/>\n        <source>General</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"327\"/>\n        <source>Connection Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.cpp\" line=\"203\"/>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.cpp\" line=\"231\"/>\n        <source>Couldn&apos;t save settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>NetworkStatusCenterLeftPane</name>\n    <message>\n        <location filename=\"../statusCenter/networkstatuscenterleftpane.ui\" line=\"35\"/>\n        <source>Network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>NetworkStatusCenterPane</name>\n    <message>\n        <location filename=\"../statusCenter/networkstatuscenterpane.ui\" line=\"100\"/>\n        <source>NetworkManager is not operational</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/networkstatuscenterpane.ui\" line=\"110\"/>\n        <source>Contact your system administrator</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/networkstatuscenterpane.cpp\" line=\"159\"/>\n        <source>Network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>OnboardingNetwork</name>\n    <message>\n        <location filename=\"../onboarding/onboardingnetwork.ui\" line=\"35\"/>\n        <location filename=\"../onboarding/onboardingnetwork.cpp\" line=\"96\"/>\n        <source>Network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingnetwork.ui\" line=\"42\"/>\n        <source>Connect to the Internet to get updates and install new software.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingnetwork.ui\" line=\"194\"/>\n        <source>You&apos;re connected!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingnetwork.ui\" line=\"204\"/>\n        <source>Disconnect and connect to a different network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingnetwork.ui\" line=\"275\"/>\n        <source>You can always set up the network connection later.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingnetwork.cpp\" line=\"73\"/>\n        <source>Continue without Internet</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingnetwork.cpp\" line=\"79\"/>\n        <location filename=\"../onboarding/onboardingnetwork.cpp\" line=\"85\"/>\n        <source>Next</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SecurityEapPeap</name>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"35\"/>\n        <source>PEAP</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"42\"/>\n        <source>Enter the settings for this network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"82\"/>\n        <source>Phase-2 Authentication</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"89\"/>\n        <source>Anonymous Identity</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"99\"/>\n        <source>PEAP version</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"106\"/>\n        <source>Username</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"113\"/>\n        <source>Password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"120\"/>\n        <source>CA Certificate</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"127\"/>\n        <source>Browse...</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"135\"/>\n        <source>MSCHAPv2</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"140\"/>\n        <source>MD5</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"145\"/>\n        <source>GTC</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"171\"/>\n        <source>Automatic</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"187\"/>\n        <source>Version 0</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"200\"/>\n        <source>Version 1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"244\"/>\n        <source>Connect</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.cpp\" line=\"107\"/>\n        <source>Certificates (*.pem, *.cer)</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SecurityEapUnsupported</name>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeapunsupported.ui\" line=\"35\"/>\n        <location filename=\"../statusCenter/eap/securityeapunsupported.ui\" line=\"77\"/>\n        <source>Unsupported Security Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeapunsupported.ui\" line=\"87\"/>\n        <source>Sorry, theDesk doesn&apos;t support those security settings at the moment. You can try using the terminal to configure this network.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SimSettingsPopover</name>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"57\"/>\n        <source>Modem Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"88\"/>\n        <source>SIM PIN</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"98\"/>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"114\"/>\n        <source>Enable SIM PIN</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"105\"/>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"120\"/>\n        <source>Disable SIM PIN</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"112\"/>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"164\"/>\n        <source>Change SIM PIN</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"128\"/>\n        <source>CALLS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"138\"/>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"769\"/>\n        <source>Call Waiting</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"188\"/>\n        <source>IMSI</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"195\"/>\n        <source>IMEI</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"208\"/>\n        <source>MODEM INFORMATION</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"215\"/>\n        <source>Carrier</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"340\"/>\n        <source>Enter the new SIM PIN</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"537\"/>\n        <source>Enter the current SIM PIN</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"806\"/>\n        <source>Enable Call Waiting</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"813\"/>\n        <source>Call Waiting allows you to receive calls while another call is currently active.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"58\"/>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"59\"/>\n        <source>No SIM card</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"142\"/>\n        <source>You have %n remaining tries</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n        </translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"203\"/>\n        <source>Error</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"204\"/>\n        <source>Couldn&apos;t get current Call Waiting status from carrier</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SwitchManager</name>\n    <message>\n        <location filename=\"../switchmanager.cpp\" line=\"63\"/>\n        <location filename=\"../switchmanager.cpp\" line=\"72\"/>\n        <location filename=\"../switchmanager.cpp\" line=\"122\"/>\n        <source>Flight Mode</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../switchmanager.cpp\" line=\"67\"/>\n        <source>Switch off Flight Mode</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../switchmanager.cpp\" line=\"78\"/>\n        <location filename=\"../switchmanager.cpp\" line=\"123\"/>\n        <source>Wi-Fi</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../switchmanager.cpp\" line=\"88\"/>\n        <location filename=\"../switchmanager.cpp\" line=\"124\"/>\n        <source>Cellular</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>TetheringSettingsPopover</name>\n    <message>\n        <location filename=\"../statusCenter/popovers/tetheringsettingspopover.ui\" line=\"35\"/>\n        <source>Tethering Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/tetheringsettingspopover.ui\" line=\"63\"/>\n        <source>SSID</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/tetheringsettingspopover.ui\" line=\"73\"/>\n        <source>These settings will be used to set up a Wi-Fi network that other devices can connect to when tethering is enabled.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/tetheringsettingspopover.ui\" line=\"96\"/>\n        <source>Network Key</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/tetheringsettingspopover.cpp\" line=\"64\"/>\n        <source>Network key needs to be at least 8 characters long</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>UnlockModemPopover</name>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.ui\" line=\"190\"/>\n        <source>Enter the SIM PIN</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.ui\" line=\"356\"/>\n        <source>SIM PUK</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.ui\" line=\"363\"/>\n        <source>You&apos;ll also need to provide a new SIM PIN to set once the SIM is unlocked.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.ui\" line=\"379\"/>\n        <source>SIM PUK REQUIRED</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.ui\" line=\"425\"/>\n        <source>Unlock SIM Card</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.ui\" line=\"456\"/>\n        <source>New SIM PIN</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.ui\" line=\"466\"/>\n        <source>Confirm SIM PIN</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.cpp\" line=\"48\"/>\n        <source>Don&apos;t guess the PUK!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.cpp\" line=\"49\"/>\n        <source>Once you exhaust your attempts, the SIM card will be blocked forever.\n\nYou&apos;ll need to contact your carrier for a new SIM card.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.cpp\" line=\"68\"/>\n        <source>If you enter the incorrect PIN again, your SIM card will be PUK locked, and you&apos;ll need to contact your carrier.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.cpp\" line=\"70\"/>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.cpp\" line=\"75\"/>\n        <source>You have %n remaining tries</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n        </translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.cpp\" line=\"73\"/>\n        <source>This is your final chance to get the PUK right before you&apos;ll need to obtain a new SIM card from your carrier.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.cpp\" line=\"78\"/>\n        <source>Contact your carrier to obtain the &lt;b&gt;SIM PUK&lt;/b&gt;, and enter it below to unlock %1.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>WifiConnectionEditorPane</name>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/wificonnectioneditorpane.ui\" line=\"35\"/>\n        <location filename=\"../statusCenter/connectionEditor/wificonnectioneditorpane.cpp\" line=\"47\"/>\n        <source>Wi-Fi</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/wificonnectioneditorpane.ui\" line=\"59\"/>\n        <source>Mode</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/wificonnectioneditorpane.ui\" line=\"66\"/>\n        <source>SSID</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/wificonnectioneditorpane.ui\" line=\"77\"/>\n        <source>Infrastructure</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/wificonnectioneditorpane.ui\" line=\"82\"/>\n        <source>Ad-Hoc</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/wificonnectioneditorpane.ui\" line=\"87\"/>\n        <source>Access Point</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>WifiDevicePane</name>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"106\"/>\n        <source>STATUS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"124\"/>\n        <source>This Device</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"268\"/>\n        <source>ACTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"277\"/>\n        <source>Select Network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"284\"/>\n        <source>Disconnect</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"348\"/>\n        <source>TETHERING</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"355\"/>\n        <source>Network Key</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"375\"/>\n        <source>Use Tethering to share your internet connection with other devices over Wi-Fi.\n\n**While Tethering is active, you won&apos;t be able to connect to the Internet with Wi-Fi, so you&apos;ll need to make sure you have an alternate way to connect to the Internet.**</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"398\"/>\n        <source>Enable Tethering</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"414\"/>\n        <source>SSID</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"440\"/>\n        <source>Set Tethering Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"489\"/>\n        <source>Wi-Fi is off</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"512\"/>\n        <source>Switch Wi-Fi on to connect to a wireless network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"522\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"669\"/>\n        <source>Switch Wi-Fi On</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"568\"/>\n        <source>Wi-Fi is disabled</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"591\"/>\n        <source>Use the Wi-Fi switch to enable Wi-Fi and connect to a network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"636\"/>\n        <source>You&apos;re in flight mode</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"659\"/>\n        <source>Switch Wi-Fi on to connect to a wireless network. Flight mode won&apos;t be disabled.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"88\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"131\"/>\n        <source>Tethering</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"91\"/>\n        <source>Disable Tethering</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"118\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"143\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"153\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"202\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"203\"/>\n        <source>Wi-Fi</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"119\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"230\"/>\n        <source>Disconnected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"132\"/>\n        <source>Active</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"138\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"144\"/>\n        <source>Connected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"154\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"239\"/>\n        <source>Failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"164\"/>\n        <source>Connection Failure</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"166\"/>\n        <source>Connecting to %1 failed because %2.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"170\"/>\n        <source>the network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"273\"/>\n        <source>0 Devices</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"282\"/>\n        <source>Unknown</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"452\"/>\n        <source>Couldn&apos;t configure tethering</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"478\"/>\n        <source>Couldn&apos;t switch off tethering</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>WiredChunkUpdater</name>\n    <message>\n        <location filename=\"../chunk/wiredchunkupdater.cpp\" line=\"25\"/>\n        <source>Wired</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>WiredDevicePane</name>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.ui\" line=\"35\"/>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"64\"/>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"83\"/>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"90\"/>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"103\"/>\n        <source>Wired</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.ui\" line=\"84\"/>\n        <source>STATUS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.ui\" line=\"102\"/>\n        <source>This Device</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.ui\" line=\"246\"/>\n        <source>ACTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.ui\" line=\"255\"/>\n        <source>Connect</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.ui\" line=\"262\"/>\n        <source>Disconnect</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"84\"/>\n        <source>Disconnected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"95\"/>\n        <source>Connected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"104\"/>\n        <source>Failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"122\"/>\n        <source>Router</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"144\"/>\n        <source>Unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"148\"/>\n        <source>Connect an Ethernet cable.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"150\"/>\n        <source>This network is unavailable because %2.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"177\"/>\n        <source>Connection Failure</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"179\"/>\n        <source>Connecting to the network failed because %2.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>WiredOnboardingSetup</name>\n    <message>\n        <location filename=\"../onboarding/wiredonboardingsetup.ui\" line=\"57\"/>\n        <source>WIRED</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/wiredonboardingsetup.ui\" line=\"73\"/>\n        <source>Use Wired Connection</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/wiredonboardingsetup.cpp\" line=\"91\"/>\n        <source>Connect to the Internet using a wired network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/wiredonboardingsetup.cpp\" line=\"94\"/>\n        <source>To connect to the Internet using a wired network, connect the network cable.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>WirelessNetworkListDelegate</name>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"85\"/>\n        <source>Connected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"89\"/>\n        <source>In Range</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"97\"/>\n        <source>Out of range</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"107\"/>\n        <source>Not Secured</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"110\"/>\n        <source>Secured with Static WEP</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"113\"/>\n        <source>Secured with Dynamic WEP</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"116\"/>\n        <source>Secured with LEAP</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"119\"/>\n        <source>Secured with WPA-PSK</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"122\"/>\n        <source>Secured with WPA Enterprise</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"125\"/>\n        <source>Secured with WPA2-PSK</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"128\"/>\n        <source>Secured with WPA2 Enterprise</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"131\"/>\n        <source>Secured with WPA3</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>WirelessNetworkSelectionPopover</name>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"57\"/>\n        <source>Connect to a Wireless Network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"107\"/>\n        <source>KNOWN NETWORKS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"158\"/>\n        <source>NEW NETWORKS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"181\"/>\n        <source>New Manual Connection</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"297\"/>\n        <source>Enter the security key</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"421\"/>\n        <source>Network Security</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"454\"/>\n        <source>Select the EAP method. If you don&apos;t know what to select, contact your system administrator for the details.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"484\"/>\n        <source>TLS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"489\"/>\n        <source>LEAP</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"494\"/>\n        <source>PWD</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"499\"/>\n        <source>FAST</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"504\"/>\n        <source>TTLS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"509\"/>\n        <source>PEAP</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.cpp\" line=\"141\"/>\n        <source>Unknown Security</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.cpp\" line=\"142\"/>\n        <source>Not sure how to connect to this network. Use manual setup to connect to it.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.cpp\" line=\"217\"/>\n        <source>For network %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.cpp\" line=\"218\"/>\n        <source>Edit</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.cpp\" line=\"235\"/>\n        <source>Forget Network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.cpp\" line=\"316\"/>\n        <source>Wireless</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.cpp\" line=\"319\"/>\n        <source>Connect</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>WirelessOnboardingSetup</name>\n    <message>\n        <location filename=\"../onboarding/wirelessonboardingsetup.ui\" line=\"57\"/>\n        <source>WI-FI</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/wirelessonboardingsetup.ui\" line=\"64\"/>\n        <source>Connect to the Internet using a Wi-Fi network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/wirelessonboardingsetup.ui\" line=\"73\"/>\n        <source>Select Network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/NetworkPlugin/translations/id.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"id\" sourcelanguage=\"en_US\">\n<context>\n    <name>CellularPane</name>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.ui\" line=\"84\"/>\n        <source>STATUS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.ui\" line=\"102\"/>\n        <source>This Device</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.ui\" line=\"246\"/>\n        <source>ACTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.ui\" line=\"262\"/>\n        <source>Connect</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.ui\" line=\"269\"/>\n        <source>Disconnect</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.ui\" line=\"276\"/>\n        <source>Modem Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"105\"/>\n        <source>Disable Cellular</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"107\"/>\n        <source>Enable Cellular</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"129\"/>\n        <source>Disconnected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"135\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"397\"/>\n        <source>Cellular</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"140\"/>\n        <source>Connected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"149\"/>\n        <source>Failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"209\"/>\n        <source>No SIM Card</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"210\"/>\n        <source>Insert a SIM card to connect to cellular services.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"212\"/>\n        <source>No SIM</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"215\"/>\n        <source>Unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"218\"/>\n        <source>This network is unavailable because %2.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"249\"/>\n        <source>Connection Failure</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"251\"/>\n        <source>Connecting to the network failed because %2.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"326\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"339\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"346\"/>\n        <source>Enter SIM PIN</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"328\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"332\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"344\"/>\n        <source>SIM PIN Required</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"334\"/>\n        <source>A SIM PIN is required to connect to the cellular network.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"357\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"370\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"377\"/>\n        <source>Enter SIM PUK</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"359\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"363\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"375\"/>\n        <source>SIM PUK Required</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"365\"/>\n        <source>A SIM PUK is required to connect to the cellular network.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>Common</name>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"27\"/>\n        <source>the device is no longer managed by NetworkManager</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"29\"/>\n        <source>configuration of the device failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"31\"/>\n        <source>configuration of the device is unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"33\"/>\n        <source>configuration of the device expired</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"35\"/>\n        <source>required secrets were not provided</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"37\"/>\n        <source>the authentication supplicant disconnected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"39\"/>\n        <source>configuration of the authentication supplicant failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"41\"/>\n        <source>the authentication supplicant failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"43\"/>\n        <source>the authentication supplicant timed out</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"45\"/>\n        <source>the PPP network failed to start</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"47\"/>\n        <source>the PPP network was disconnected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"49\"/>\n        <source>the PPP network failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"51\"/>\n        <source>DHCP configuration failed to start</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"53\"/>\n        <source>DHCP configuration had an error</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"55\"/>\n        <source>DHCP configuration failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"67\"/>\n        <source>the modem is busy</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"69\"/>\n        <source>there is no dial tone on the modem</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"71\"/>\n        <source>no carrier is available on the modem</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"73\"/>\n        <source>dialling the number on the modem timed out</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"75\"/>\n        <source>dialling the number on the modem failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"77\"/>\n        <source>initialising the modem failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"79\"/>\n        <source>APN selection failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"81\"/>\n        <source>the modem is not searching</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"83\"/>\n        <source>the cell tower denied registration of the modem</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"85\"/>\n        <source>registration of the modem on the cell tower timed out</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"87\"/>\n        <source>registration of the modem on the cell tower failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"91\"/>\n        <source>the device firmware is missing</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"93\"/>\n        <source>the device was removed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"95\"/>\n        <source>the device is sleeping</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"97\"/>\n        <source>the connection was removed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"99\"/>\n        <source>you requested the action</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"107\"/>\n        <source>the modem was not found</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"109\"/>\n        <source>Bluetooth is not available</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"111\"/>\n        <source>the SIM card is not inserted</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"113\"/>\n        <source>the SIM PIN is required</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"115\"/>\n        <source>the SIM PUK is required</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"118\"/>\n        <source>the SIM PUK is exhausted</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"126\"/>\n        <source>ModemManager is not operational on this device</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"128\"/>\n        <source>the wireless network wasn&apos;t found</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"152\"/>\n        <source>an unknown error occurred</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"198\"/>\n        <source>Cellular</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>ConnectionSelectionPopover</name>\n    <message>\n        <location filename=\"../statusCenter/popovers/connectionselectionpopover.ui\" line=\"35\"/>\n        <source>Select Connection Profile</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/connectionselectionpopover.ui\" line=\"42\"/>\n        <source>Select a connection profile to use</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>DevicePane</name>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/devicepane.ui\" line=\"83\"/>\n        <source>STATUS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/devicepane.ui\" line=\"90\"/>\n        <source>theDesk doesn&apos;t support this network interface, so you won&apos;t be able to configure it fully here.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/devicepane.ui\" line=\"144\"/>\n        <source>ACTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/devicepane.ui\" line=\"153\"/>\n        <source>Disconnect</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>GenericChunkUpdater</name>\n    <message>\n        <location filename=\"../chunk/genericchunkupdater.cpp\" line=\"24\"/>\n        <source>Connected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>IPv4ConnectionEditorPane</name>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"35\"/>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.cpp\" line=\"69\"/>\n        <source>IPv4</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"99\"/>\n        <source>DHCP</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"104\"/>\n        <source>DHCP with manual DNS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"109\"/>\n        <source>Manual</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"114\"/>\n        <source>Shared</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"119\"/>\n        <source>Disabled</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"127\"/>\n        <source>Configuration Method</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"143\"/>\n        <source>Require IPv4</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"208\"/>\n        <source>IP Address</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"215\"/>\n        <source>Default Gateway</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"222\"/>\n        <source>Subnet Length</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"235\"/>\n        <source>ADDRESSES</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"255\"/>\n        <source>Set the IP address that this device will be assigned.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"345\"/>\n        <source>DNS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"352\"/>\n        <source>1.1.1.1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"359\"/>\n        <source>Configure the DNS servers that will be used to resolve domain names.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.cpp\" line=\"217\"/>\n        <source>For DNS server %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.cpp\" line=\"218\"/>\n        <source>Remove</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>NetworkChunk</name>\n    <message>\n        <location filename=\"../chunk/networkchunk.cpp\" line=\"64\"/>\n        <source>Network Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../chunk/networkchunk.cpp\" line=\"103\"/>\n        <source>Disconnected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../chunk/networkchunk.cpp\" line=\"137\"/>\n        <source>Login Required</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../chunk/networkchunk.cpp\" line=\"140\"/>\n        <source>Can&apos;t get to the Internet</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>NetworkConnectionEditor</name>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"90\"/>\n        <source>SETTINGS MODIFIED</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"125\"/>\n        <source>Revert</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"136\"/>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"224\"/>\n        <source>Save</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"195\"/>\n        <source>DONE?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"260\"/>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"303\"/>\n        <source>General</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"327\"/>\n        <source>Connection Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.cpp\" line=\"203\"/>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.cpp\" line=\"231\"/>\n        <source>Couldn&apos;t save settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>NetworkStatusCenterLeftPane</name>\n    <message>\n        <location filename=\"../statusCenter/networkstatuscenterleftpane.ui\" line=\"35\"/>\n        <source>Network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>NetworkStatusCenterPane</name>\n    <message>\n        <location filename=\"../statusCenter/networkstatuscenterpane.ui\" line=\"100\"/>\n        <source>NetworkManager is not operational</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/networkstatuscenterpane.ui\" line=\"110\"/>\n        <source>Contact your system administrator</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/networkstatuscenterpane.cpp\" line=\"159\"/>\n        <source>Network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>OnboardingNetwork</name>\n    <message>\n        <location filename=\"../onboarding/onboardingnetwork.ui\" line=\"35\"/>\n        <location filename=\"../onboarding/onboardingnetwork.cpp\" line=\"96\"/>\n        <source>Network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingnetwork.ui\" line=\"42\"/>\n        <source>Connect to the Internet to get updates and install new software.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingnetwork.ui\" line=\"194\"/>\n        <source>You&apos;re connected!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingnetwork.ui\" line=\"204\"/>\n        <source>Disconnect and connect to a different network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingnetwork.ui\" line=\"275\"/>\n        <source>You can always set up the network connection later.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingnetwork.cpp\" line=\"73\"/>\n        <source>Continue without Internet</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingnetwork.cpp\" line=\"79\"/>\n        <location filename=\"../onboarding/onboardingnetwork.cpp\" line=\"85\"/>\n        <source>Next</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SecurityEapPeap</name>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"35\"/>\n        <source>PEAP</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"42\"/>\n        <source>Enter the settings for this network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"82\"/>\n        <source>Phase-2 Authentication</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"89\"/>\n        <source>Anonymous Identity</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"99\"/>\n        <source>PEAP version</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"106\"/>\n        <source>Username</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"113\"/>\n        <source>Password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"120\"/>\n        <source>CA Certificate</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"127\"/>\n        <source>Browse...</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"135\"/>\n        <source>MSCHAPv2</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"140\"/>\n        <source>MD5</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"145\"/>\n        <source>GTC</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"171\"/>\n        <source>Automatic</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"187\"/>\n        <source>Version 0</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"200\"/>\n        <source>Version 1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"244\"/>\n        <source>Connect</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.cpp\" line=\"107\"/>\n        <source>Certificates (*.pem, *.cer)</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SecurityEapUnsupported</name>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeapunsupported.ui\" line=\"35\"/>\n        <location filename=\"../statusCenter/eap/securityeapunsupported.ui\" line=\"77\"/>\n        <source>Unsupported Security Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeapunsupported.ui\" line=\"87\"/>\n        <source>Sorry, theDesk doesn&apos;t support those security settings at the moment. You can try using the terminal to configure this network.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SimSettingsPopover</name>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"57\"/>\n        <source>Modem Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"88\"/>\n        <source>SIM PIN</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"98\"/>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"114\"/>\n        <source>Enable SIM PIN</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"105\"/>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"120\"/>\n        <source>Disable SIM PIN</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"112\"/>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"164\"/>\n        <source>Change SIM PIN</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"128\"/>\n        <source>CALLS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"138\"/>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"769\"/>\n        <source>Call Waiting</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"188\"/>\n        <source>IMSI</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"195\"/>\n        <source>IMEI</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"208\"/>\n        <source>MODEM INFORMATION</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"215\"/>\n        <source>Carrier</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"340\"/>\n        <source>Enter the new SIM PIN</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"537\"/>\n        <source>Enter the current SIM PIN</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"806\"/>\n        <source>Enable Call Waiting</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"813\"/>\n        <source>Call Waiting allows you to receive calls while another call is currently active.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"58\"/>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"59\"/>\n        <source>No SIM card</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"142\"/>\n        <source>You have %n remaining tries</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n        </translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"203\"/>\n        <source>Error</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"204\"/>\n        <source>Couldn&apos;t get current Call Waiting status from carrier</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SwitchManager</name>\n    <message>\n        <location filename=\"../switchmanager.cpp\" line=\"63\"/>\n        <location filename=\"../switchmanager.cpp\" line=\"72\"/>\n        <location filename=\"../switchmanager.cpp\" line=\"122\"/>\n        <source>Flight Mode</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../switchmanager.cpp\" line=\"67\"/>\n        <source>Switch off Flight Mode</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../switchmanager.cpp\" line=\"78\"/>\n        <location filename=\"../switchmanager.cpp\" line=\"123\"/>\n        <source>Wi-Fi</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../switchmanager.cpp\" line=\"88\"/>\n        <location filename=\"../switchmanager.cpp\" line=\"124\"/>\n        <source>Cellular</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>TetheringSettingsPopover</name>\n    <message>\n        <location filename=\"../statusCenter/popovers/tetheringsettingspopover.ui\" line=\"35\"/>\n        <source>Tethering Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/tetheringsettingspopover.ui\" line=\"63\"/>\n        <source>SSID</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/tetheringsettingspopover.ui\" line=\"73\"/>\n        <source>These settings will be used to set up a Wi-Fi network that other devices can connect to when tethering is enabled.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/tetheringsettingspopover.ui\" line=\"96\"/>\n        <source>Network Key</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/tetheringsettingspopover.cpp\" line=\"64\"/>\n        <source>Network key needs to be at least 8 characters long</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>UnlockModemPopover</name>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.ui\" line=\"190\"/>\n        <source>Enter the SIM PIN</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.ui\" line=\"356\"/>\n        <source>SIM PUK</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.ui\" line=\"363\"/>\n        <source>You&apos;ll also need to provide a new SIM PIN to set once the SIM is unlocked.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.ui\" line=\"379\"/>\n        <source>SIM PUK REQUIRED</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.ui\" line=\"425\"/>\n        <source>Unlock SIM Card</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.ui\" line=\"456\"/>\n        <source>New SIM PIN</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.ui\" line=\"466\"/>\n        <source>Confirm SIM PIN</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.cpp\" line=\"48\"/>\n        <source>Don&apos;t guess the PUK!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.cpp\" line=\"49\"/>\n        <source>Once you exhaust your attempts, the SIM card will be blocked forever.\n\nYou&apos;ll need to contact your carrier for a new SIM card.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.cpp\" line=\"68\"/>\n        <source>If you enter the incorrect PIN again, your SIM card will be PUK locked, and you&apos;ll need to contact your carrier.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.cpp\" line=\"70\"/>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.cpp\" line=\"75\"/>\n        <source>You have %n remaining tries</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n        </translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.cpp\" line=\"73\"/>\n        <source>This is your final chance to get the PUK right before you&apos;ll need to obtain a new SIM card from your carrier.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.cpp\" line=\"78\"/>\n        <source>Contact your carrier to obtain the &lt;b&gt;SIM PUK&lt;/b&gt;, and enter it below to unlock %1.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>WifiConnectionEditorPane</name>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/wificonnectioneditorpane.ui\" line=\"35\"/>\n        <location filename=\"../statusCenter/connectionEditor/wificonnectioneditorpane.cpp\" line=\"47\"/>\n        <source>Wi-Fi</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/wificonnectioneditorpane.ui\" line=\"59\"/>\n        <source>Mode</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/wificonnectioneditorpane.ui\" line=\"66\"/>\n        <source>SSID</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/wificonnectioneditorpane.ui\" line=\"77\"/>\n        <source>Infrastructure</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/wificonnectioneditorpane.ui\" line=\"82\"/>\n        <source>Ad-Hoc</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/wificonnectioneditorpane.ui\" line=\"87\"/>\n        <source>Access Point</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>WifiDevicePane</name>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"106\"/>\n        <source>STATUS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"124\"/>\n        <source>This Device</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"268\"/>\n        <source>ACTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"277\"/>\n        <source>Select Network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"284\"/>\n        <source>Disconnect</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"348\"/>\n        <source>TETHERING</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"355\"/>\n        <source>Network Key</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"375\"/>\n        <source>Use Tethering to share your internet connection with other devices over Wi-Fi.\n\n**While Tethering is active, you won&apos;t be able to connect to the Internet with Wi-Fi, so you&apos;ll need to make sure you have an alternate way to connect to the Internet.**</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"398\"/>\n        <source>Enable Tethering</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"414\"/>\n        <source>SSID</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"440\"/>\n        <source>Set Tethering Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"489\"/>\n        <source>Wi-Fi is off</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"512\"/>\n        <source>Switch Wi-Fi on to connect to a wireless network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"522\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"669\"/>\n        <source>Switch Wi-Fi On</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"568\"/>\n        <source>Wi-Fi is disabled</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"591\"/>\n        <source>Use the Wi-Fi switch to enable Wi-Fi and connect to a network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"636\"/>\n        <source>You&apos;re in flight mode</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"659\"/>\n        <source>Switch Wi-Fi on to connect to a wireless network. Flight mode won&apos;t be disabled.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"88\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"131\"/>\n        <source>Tethering</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"91\"/>\n        <source>Disable Tethering</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"118\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"143\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"153\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"202\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"203\"/>\n        <source>Wi-Fi</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"119\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"230\"/>\n        <source>Disconnected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"132\"/>\n        <source>Active</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"138\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"144\"/>\n        <source>Connected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"154\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"239\"/>\n        <source>Failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"164\"/>\n        <source>Connection Failure</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"166\"/>\n        <source>Connecting to %1 failed because %2.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"170\"/>\n        <source>the network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"273\"/>\n        <source>0 Devices</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"282\"/>\n        <source>Unknown</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"452\"/>\n        <source>Couldn&apos;t configure tethering</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"478\"/>\n        <source>Couldn&apos;t switch off tethering</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>WiredChunkUpdater</name>\n    <message>\n        <location filename=\"../chunk/wiredchunkupdater.cpp\" line=\"25\"/>\n        <source>Wired</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>WiredDevicePane</name>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.ui\" line=\"35\"/>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"64\"/>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"83\"/>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"90\"/>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"103\"/>\n        <source>Wired</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.ui\" line=\"84\"/>\n        <source>STATUS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.ui\" line=\"102\"/>\n        <source>This Device</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.ui\" line=\"246\"/>\n        <source>ACTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.ui\" line=\"255\"/>\n        <source>Connect</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.ui\" line=\"262\"/>\n        <source>Disconnect</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"84\"/>\n        <source>Disconnected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"95\"/>\n        <source>Connected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"104\"/>\n        <source>Failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"122\"/>\n        <source>Router</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"144\"/>\n        <source>Unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"148\"/>\n        <source>Connect an Ethernet cable.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"150\"/>\n        <source>This network is unavailable because %2.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"177\"/>\n        <source>Connection Failure</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"179\"/>\n        <source>Connecting to the network failed because %2.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>WiredOnboardingSetup</name>\n    <message>\n        <location filename=\"../onboarding/wiredonboardingsetup.ui\" line=\"57\"/>\n        <source>WIRED</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/wiredonboardingsetup.ui\" line=\"73\"/>\n        <source>Use Wired Connection</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/wiredonboardingsetup.cpp\" line=\"91\"/>\n        <source>Connect to the Internet using a wired network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/wiredonboardingsetup.cpp\" line=\"94\"/>\n        <source>To connect to the Internet using a wired network, connect the network cable.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>WirelessNetworkListDelegate</name>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"85\"/>\n        <source>Connected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"89\"/>\n        <source>In Range</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"97\"/>\n        <source>Out of range</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"107\"/>\n        <source>Not Secured</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"110\"/>\n        <source>Secured with Static WEP</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"113\"/>\n        <source>Secured with Dynamic WEP</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"116\"/>\n        <source>Secured with LEAP</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"119\"/>\n        <source>Secured with WPA-PSK</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"122\"/>\n        <source>Secured with WPA Enterprise</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"125\"/>\n        <source>Secured with WPA2-PSK</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"128\"/>\n        <source>Secured with WPA2 Enterprise</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"131\"/>\n        <source>Secured with WPA3</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>WirelessNetworkSelectionPopover</name>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"57\"/>\n        <source>Connect to a Wireless Network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"107\"/>\n        <source>KNOWN NETWORKS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"158\"/>\n        <source>NEW NETWORKS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"181\"/>\n        <source>New Manual Connection</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"297\"/>\n        <source>Enter the security key</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"421\"/>\n        <source>Network Security</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"454\"/>\n        <source>Select the EAP method. If you don&apos;t know what to select, contact your system administrator for the details.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"484\"/>\n        <source>TLS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"489\"/>\n        <source>LEAP</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"494\"/>\n        <source>PWD</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"499\"/>\n        <source>FAST</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"504\"/>\n        <source>TTLS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"509\"/>\n        <source>PEAP</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.cpp\" line=\"141\"/>\n        <source>Unknown Security</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.cpp\" line=\"142\"/>\n        <source>Not sure how to connect to this network. Use manual setup to connect to it.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.cpp\" line=\"217\"/>\n        <source>For network %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.cpp\" line=\"218\"/>\n        <source>Edit</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.cpp\" line=\"235\"/>\n        <source>Forget Network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.cpp\" line=\"316\"/>\n        <source>Wireless</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.cpp\" line=\"319\"/>\n        <source>Connect</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>WirelessOnboardingSetup</name>\n    <message>\n        <location filename=\"../onboarding/wirelessonboardingsetup.ui\" line=\"57\"/>\n        <source>WI-FI</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/wirelessonboardingsetup.ui\" line=\"64\"/>\n        <source>Connect to the Internet using a Wi-Fi network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/wirelessonboardingsetup.ui\" line=\"73\"/>\n        <source>Select Network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/NetworkPlugin/translations/nl.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"nl\" sourcelanguage=\"en_US\">\n<context>\n    <name>CellularPane</name>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.ui\" line=\"84\"/>\n        <source>STATUS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.ui\" line=\"102\"/>\n        <source>This Device</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.ui\" line=\"246\"/>\n        <source>ACTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.ui\" line=\"262\"/>\n        <source>Connect</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.ui\" line=\"269\"/>\n        <source>Disconnect</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.ui\" line=\"276\"/>\n        <source>Modem Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"105\"/>\n        <source>Disable Cellular</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"107\"/>\n        <source>Enable Cellular</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"129\"/>\n        <source>Disconnected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"135\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"397\"/>\n        <source>Cellular</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"140\"/>\n        <source>Connected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"149\"/>\n        <source>Failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"209\"/>\n        <source>No SIM Card</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"210\"/>\n        <source>Insert a SIM card to connect to cellular services.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"212\"/>\n        <source>No SIM</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"215\"/>\n        <source>Unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"218\"/>\n        <source>This network is unavailable because %2.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"249\"/>\n        <source>Connection Failure</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"251\"/>\n        <source>Connecting to the network failed because %2.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"326\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"339\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"346\"/>\n        <source>Enter SIM PIN</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"328\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"332\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"344\"/>\n        <source>SIM PIN Required</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"334\"/>\n        <source>A SIM PIN is required to connect to the cellular network.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"357\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"370\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"377\"/>\n        <source>Enter SIM PUK</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"359\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"363\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"375\"/>\n        <source>SIM PUK Required</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"365\"/>\n        <source>A SIM PUK is required to connect to the cellular network.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>Common</name>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"27\"/>\n        <source>the device is no longer managed by NetworkManager</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"29\"/>\n        <source>configuration of the device failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"31\"/>\n        <source>configuration of the device is unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"33\"/>\n        <source>configuration of the device expired</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"35\"/>\n        <source>required secrets were not provided</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"37\"/>\n        <source>the authentication supplicant disconnected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"39\"/>\n        <source>configuration of the authentication supplicant failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"41\"/>\n        <source>the authentication supplicant failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"43\"/>\n        <source>the authentication supplicant timed out</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"45\"/>\n        <source>the PPP network failed to start</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"47\"/>\n        <source>the PPP network was disconnected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"49\"/>\n        <source>the PPP network failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"51\"/>\n        <source>DHCP configuration failed to start</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"53\"/>\n        <source>DHCP configuration had an error</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"55\"/>\n        <source>DHCP configuration failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"67\"/>\n        <source>the modem is busy</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"69\"/>\n        <source>there is no dial tone on the modem</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"71\"/>\n        <source>no carrier is available on the modem</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"73\"/>\n        <source>dialling the number on the modem timed out</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"75\"/>\n        <source>dialling the number on the modem failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"77\"/>\n        <source>initialising the modem failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"79\"/>\n        <source>APN selection failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"81\"/>\n        <source>the modem is not searching</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"83\"/>\n        <source>the cell tower denied registration of the modem</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"85\"/>\n        <source>registration of the modem on the cell tower timed out</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"87\"/>\n        <source>registration of the modem on the cell tower failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"91\"/>\n        <source>the device firmware is missing</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"93\"/>\n        <source>the device was removed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"95\"/>\n        <source>the device is sleeping</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"97\"/>\n        <source>the connection was removed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"99\"/>\n        <source>you requested the action</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"107\"/>\n        <source>the modem was not found</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"109\"/>\n        <source>Bluetooth is not available</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"111\"/>\n        <source>the SIM card is not inserted</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"113\"/>\n        <source>the SIM PIN is required</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"115\"/>\n        <source>the SIM PUK is required</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"118\"/>\n        <source>the SIM PUK is exhausted</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"126\"/>\n        <source>ModemManager is not operational on this device</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"128\"/>\n        <source>the wireless network wasn&apos;t found</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"152\"/>\n        <source>an unknown error occurred</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"198\"/>\n        <source>Cellular</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>ConnectionSelectionPopover</name>\n    <message>\n        <location filename=\"../statusCenter/popovers/connectionselectionpopover.ui\" line=\"35\"/>\n        <source>Select Connection Profile</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/connectionselectionpopover.ui\" line=\"42\"/>\n        <source>Select a connection profile to use</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>DevicePane</name>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/devicepane.ui\" line=\"83\"/>\n        <source>STATUS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/devicepane.ui\" line=\"90\"/>\n        <source>theDesk doesn&apos;t support this network interface, so you won&apos;t be able to configure it fully here.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/devicepane.ui\" line=\"144\"/>\n        <source>ACTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/devicepane.ui\" line=\"153\"/>\n        <source>Disconnect</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>GenericChunkUpdater</name>\n    <message>\n        <location filename=\"../chunk/genericchunkupdater.cpp\" line=\"24\"/>\n        <source>Connected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>IPv4ConnectionEditorPane</name>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"35\"/>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.cpp\" line=\"69\"/>\n        <source>IPv4</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"99\"/>\n        <source>DHCP</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"104\"/>\n        <source>DHCP with manual DNS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"109\"/>\n        <source>Manual</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"114\"/>\n        <source>Shared</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"119\"/>\n        <source>Disabled</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"127\"/>\n        <source>Configuration Method</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"143\"/>\n        <source>Require IPv4</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"208\"/>\n        <source>IP Address</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"215\"/>\n        <source>Default Gateway</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"222\"/>\n        <source>Subnet Length</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"235\"/>\n        <source>ADDRESSES</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"255\"/>\n        <source>Set the IP address that this device will be assigned.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"345\"/>\n        <source>DNS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"352\"/>\n        <source>1.1.1.1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"359\"/>\n        <source>Configure the DNS servers that will be used to resolve domain names.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.cpp\" line=\"217\"/>\n        <source>For DNS server %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.cpp\" line=\"218\"/>\n        <source>Remove</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>NetworkChunk</name>\n    <message>\n        <location filename=\"../chunk/networkchunk.cpp\" line=\"64\"/>\n        <source>Network Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../chunk/networkchunk.cpp\" line=\"103\"/>\n        <source>Disconnected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../chunk/networkchunk.cpp\" line=\"137\"/>\n        <source>Login Required</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../chunk/networkchunk.cpp\" line=\"140\"/>\n        <source>Can&apos;t get to the Internet</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>NetworkConnectionEditor</name>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"90\"/>\n        <source>SETTINGS MODIFIED</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"125\"/>\n        <source>Revert</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"136\"/>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"224\"/>\n        <source>Save</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"195\"/>\n        <source>DONE?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"260\"/>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"303\"/>\n        <source>General</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"327\"/>\n        <source>Connection Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.cpp\" line=\"203\"/>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.cpp\" line=\"231\"/>\n        <source>Couldn&apos;t save settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>NetworkStatusCenterLeftPane</name>\n    <message>\n        <location filename=\"../statusCenter/networkstatuscenterleftpane.ui\" line=\"35\"/>\n        <source>Network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>NetworkStatusCenterPane</name>\n    <message>\n        <location filename=\"../statusCenter/networkstatuscenterpane.ui\" line=\"100\"/>\n        <source>NetworkManager is not operational</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/networkstatuscenterpane.ui\" line=\"110\"/>\n        <source>Contact your system administrator</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/networkstatuscenterpane.cpp\" line=\"159\"/>\n        <source>Network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>OnboardingNetwork</name>\n    <message>\n        <location filename=\"../onboarding/onboardingnetwork.ui\" line=\"35\"/>\n        <location filename=\"../onboarding/onboardingnetwork.cpp\" line=\"96\"/>\n        <source>Network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingnetwork.ui\" line=\"42\"/>\n        <source>Connect to the Internet to get updates and install new software.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingnetwork.ui\" line=\"194\"/>\n        <source>You&apos;re connected!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingnetwork.ui\" line=\"204\"/>\n        <source>Disconnect and connect to a different network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingnetwork.ui\" line=\"275\"/>\n        <source>You can always set up the network connection later.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingnetwork.cpp\" line=\"73\"/>\n        <source>Continue without Internet</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingnetwork.cpp\" line=\"79\"/>\n        <location filename=\"../onboarding/onboardingnetwork.cpp\" line=\"85\"/>\n        <source>Next</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SecurityEapPeap</name>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"35\"/>\n        <source>PEAP</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"42\"/>\n        <source>Enter the settings for this network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"82\"/>\n        <source>Phase-2 Authentication</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"89\"/>\n        <source>Anonymous Identity</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"99\"/>\n        <source>PEAP version</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"106\"/>\n        <source>Username</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"113\"/>\n        <source>Password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"120\"/>\n        <source>CA Certificate</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"127\"/>\n        <source>Browse...</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"135\"/>\n        <source>MSCHAPv2</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"140\"/>\n        <source>MD5</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"145\"/>\n        <source>GTC</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"171\"/>\n        <source>Automatic</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"187\"/>\n        <source>Version 0</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"200\"/>\n        <source>Version 1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"244\"/>\n        <source>Connect</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.cpp\" line=\"107\"/>\n        <source>Certificates (*.pem, *.cer)</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SecurityEapUnsupported</name>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeapunsupported.ui\" line=\"35\"/>\n        <location filename=\"../statusCenter/eap/securityeapunsupported.ui\" line=\"77\"/>\n        <source>Unsupported Security Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeapunsupported.ui\" line=\"87\"/>\n        <source>Sorry, theDesk doesn&apos;t support those security settings at the moment. You can try using the terminal to configure this network.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SimSettingsPopover</name>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"57\"/>\n        <source>Modem Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"88\"/>\n        <source>SIM PIN</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"98\"/>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"114\"/>\n        <source>Enable SIM PIN</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"105\"/>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"120\"/>\n        <source>Disable SIM PIN</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"112\"/>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"164\"/>\n        <source>Change SIM PIN</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"128\"/>\n        <source>CALLS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"138\"/>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"769\"/>\n        <source>Call Waiting</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"188\"/>\n        <source>IMSI</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"195\"/>\n        <source>IMEI</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"208\"/>\n        <source>MODEM INFORMATION</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"215\"/>\n        <source>Carrier</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"340\"/>\n        <source>Enter the new SIM PIN</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"537\"/>\n        <source>Enter the current SIM PIN</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"806\"/>\n        <source>Enable Call Waiting</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"813\"/>\n        <source>Call Waiting allows you to receive calls while another call is currently active.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"58\"/>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"59\"/>\n        <source>No SIM card</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"142\"/>\n        <source>You have %n remaining tries</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n        </translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"203\"/>\n        <source>Error</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"204\"/>\n        <source>Couldn&apos;t get current Call Waiting status from carrier</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SwitchManager</name>\n    <message>\n        <location filename=\"../switchmanager.cpp\" line=\"63\"/>\n        <location filename=\"../switchmanager.cpp\" line=\"72\"/>\n        <location filename=\"../switchmanager.cpp\" line=\"122\"/>\n        <source>Flight Mode</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../switchmanager.cpp\" line=\"67\"/>\n        <source>Switch off Flight Mode</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../switchmanager.cpp\" line=\"78\"/>\n        <location filename=\"../switchmanager.cpp\" line=\"123\"/>\n        <source>Wi-Fi</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../switchmanager.cpp\" line=\"88\"/>\n        <location filename=\"../switchmanager.cpp\" line=\"124\"/>\n        <source>Cellular</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>TetheringSettingsPopover</name>\n    <message>\n        <location filename=\"../statusCenter/popovers/tetheringsettingspopover.ui\" line=\"35\"/>\n        <source>Tethering Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/tetheringsettingspopover.ui\" line=\"63\"/>\n        <source>SSID</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/tetheringsettingspopover.ui\" line=\"73\"/>\n        <source>These settings will be used to set up a Wi-Fi network that other devices can connect to when tethering is enabled.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/tetheringsettingspopover.ui\" line=\"96\"/>\n        <source>Network Key</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/tetheringsettingspopover.cpp\" line=\"64\"/>\n        <source>Network key needs to be at least 8 characters long</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>UnlockModemPopover</name>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.ui\" line=\"190\"/>\n        <source>Enter the SIM PIN</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.ui\" line=\"356\"/>\n        <source>SIM PUK</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.ui\" line=\"363\"/>\n        <source>You&apos;ll also need to provide a new SIM PIN to set once the SIM is unlocked.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.ui\" line=\"379\"/>\n        <source>SIM PUK REQUIRED</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.ui\" line=\"425\"/>\n        <source>Unlock SIM Card</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.ui\" line=\"456\"/>\n        <source>New SIM PIN</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.ui\" line=\"466\"/>\n        <source>Confirm SIM PIN</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.cpp\" line=\"48\"/>\n        <source>Don&apos;t guess the PUK!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.cpp\" line=\"49\"/>\n        <source>Once you exhaust your attempts, the SIM card will be blocked forever.\n\nYou&apos;ll need to contact your carrier for a new SIM card.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.cpp\" line=\"68\"/>\n        <source>If you enter the incorrect PIN again, your SIM card will be PUK locked, and you&apos;ll need to contact your carrier.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.cpp\" line=\"70\"/>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.cpp\" line=\"75\"/>\n        <source>You have %n remaining tries</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n        </translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.cpp\" line=\"73\"/>\n        <source>This is your final chance to get the PUK right before you&apos;ll need to obtain a new SIM card from your carrier.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.cpp\" line=\"78\"/>\n        <source>Contact your carrier to obtain the &lt;b&gt;SIM PUK&lt;/b&gt;, and enter it below to unlock %1.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>WifiConnectionEditorPane</name>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/wificonnectioneditorpane.ui\" line=\"35\"/>\n        <location filename=\"../statusCenter/connectionEditor/wificonnectioneditorpane.cpp\" line=\"47\"/>\n        <source>Wi-Fi</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/wificonnectioneditorpane.ui\" line=\"59\"/>\n        <source>Mode</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/wificonnectioneditorpane.ui\" line=\"66\"/>\n        <source>SSID</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/wificonnectioneditorpane.ui\" line=\"77\"/>\n        <source>Infrastructure</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/wificonnectioneditorpane.ui\" line=\"82\"/>\n        <source>Ad-Hoc</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/wificonnectioneditorpane.ui\" line=\"87\"/>\n        <source>Access Point</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>WifiDevicePane</name>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"106\"/>\n        <source>STATUS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"124\"/>\n        <source>This Device</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"268\"/>\n        <source>ACTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"277\"/>\n        <source>Select Network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"284\"/>\n        <source>Disconnect</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"348\"/>\n        <source>TETHERING</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"355\"/>\n        <source>Network Key</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"375\"/>\n        <source>Use Tethering to share your internet connection with other devices over Wi-Fi.\n\n**While Tethering is active, you won&apos;t be able to connect to the Internet with Wi-Fi, so you&apos;ll need to make sure you have an alternate way to connect to the Internet.**</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"398\"/>\n        <source>Enable Tethering</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"414\"/>\n        <source>SSID</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"440\"/>\n        <source>Set Tethering Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"489\"/>\n        <source>Wi-Fi is off</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"512\"/>\n        <source>Switch Wi-Fi on to connect to a wireless network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"522\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"669\"/>\n        <source>Switch Wi-Fi On</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"568\"/>\n        <source>Wi-Fi is disabled</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"591\"/>\n        <source>Use the Wi-Fi switch to enable Wi-Fi and connect to a network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"636\"/>\n        <source>You&apos;re in flight mode</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"659\"/>\n        <source>Switch Wi-Fi on to connect to a wireless network. Flight mode won&apos;t be disabled.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"88\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"131\"/>\n        <source>Tethering</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"91\"/>\n        <source>Disable Tethering</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"118\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"143\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"153\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"202\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"203\"/>\n        <source>Wi-Fi</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"119\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"230\"/>\n        <source>Disconnected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"132\"/>\n        <source>Active</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"138\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"144\"/>\n        <source>Connected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"154\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"239\"/>\n        <source>Failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"164\"/>\n        <source>Connection Failure</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"166\"/>\n        <source>Connecting to %1 failed because %2.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"170\"/>\n        <source>the network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"273\"/>\n        <source>0 Devices</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"282\"/>\n        <source>Unknown</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"452\"/>\n        <source>Couldn&apos;t configure tethering</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"478\"/>\n        <source>Couldn&apos;t switch off tethering</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>WiredChunkUpdater</name>\n    <message>\n        <location filename=\"../chunk/wiredchunkupdater.cpp\" line=\"25\"/>\n        <source>Wired</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>WiredDevicePane</name>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.ui\" line=\"35\"/>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"64\"/>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"83\"/>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"90\"/>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"103\"/>\n        <source>Wired</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.ui\" line=\"84\"/>\n        <source>STATUS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.ui\" line=\"102\"/>\n        <source>This Device</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.ui\" line=\"246\"/>\n        <source>ACTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.ui\" line=\"255\"/>\n        <source>Connect</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.ui\" line=\"262\"/>\n        <source>Disconnect</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"84\"/>\n        <source>Disconnected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"95\"/>\n        <source>Connected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"104\"/>\n        <source>Failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"122\"/>\n        <source>Router</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"144\"/>\n        <source>Unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"148\"/>\n        <source>Connect an Ethernet cable.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"150\"/>\n        <source>This network is unavailable because %2.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"177\"/>\n        <source>Connection Failure</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"179\"/>\n        <source>Connecting to the network failed because %2.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>WiredOnboardingSetup</name>\n    <message>\n        <location filename=\"../onboarding/wiredonboardingsetup.ui\" line=\"57\"/>\n        <source>WIRED</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/wiredonboardingsetup.ui\" line=\"73\"/>\n        <source>Use Wired Connection</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/wiredonboardingsetup.cpp\" line=\"91\"/>\n        <source>Connect to the Internet using a wired network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/wiredonboardingsetup.cpp\" line=\"94\"/>\n        <source>To connect to the Internet using a wired network, connect the network cable.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>WirelessNetworkListDelegate</name>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"85\"/>\n        <source>Connected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"89\"/>\n        <source>In Range</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"97\"/>\n        <source>Out of range</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"107\"/>\n        <source>Not Secured</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"110\"/>\n        <source>Secured with Static WEP</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"113\"/>\n        <source>Secured with Dynamic WEP</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"116\"/>\n        <source>Secured with LEAP</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"119\"/>\n        <source>Secured with WPA-PSK</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"122\"/>\n        <source>Secured with WPA Enterprise</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"125\"/>\n        <source>Secured with WPA2-PSK</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"128\"/>\n        <source>Secured with WPA2 Enterprise</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"131\"/>\n        <source>Secured with WPA3</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>WirelessNetworkSelectionPopover</name>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"57\"/>\n        <source>Connect to a Wireless Network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"107\"/>\n        <source>KNOWN NETWORKS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"158\"/>\n        <source>NEW NETWORKS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"181\"/>\n        <source>New Manual Connection</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"297\"/>\n        <source>Enter the security key</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"421\"/>\n        <source>Network Security</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"454\"/>\n        <source>Select the EAP method. If you don&apos;t know what to select, contact your system administrator for the details.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"484\"/>\n        <source>TLS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"489\"/>\n        <source>LEAP</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"494\"/>\n        <source>PWD</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"499\"/>\n        <source>FAST</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"504\"/>\n        <source>TTLS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"509\"/>\n        <source>PEAP</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.cpp\" line=\"141\"/>\n        <source>Unknown Security</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.cpp\" line=\"142\"/>\n        <source>Not sure how to connect to this network. Use manual setup to connect to it.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.cpp\" line=\"217\"/>\n        <source>For network %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.cpp\" line=\"218\"/>\n        <source>Edit</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.cpp\" line=\"235\"/>\n        <source>Forget Network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.cpp\" line=\"316\"/>\n        <source>Wireless</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.cpp\" line=\"319\"/>\n        <source>Connect</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>WirelessOnboardingSetup</name>\n    <message>\n        <location filename=\"../onboarding/wirelessonboardingsetup.ui\" line=\"57\"/>\n        <source>WI-FI</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/wirelessonboardingsetup.ui\" line=\"64\"/>\n        <source>Connect to the Internet using a Wi-Fi network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/wirelessonboardingsetup.ui\" line=\"73\"/>\n        <source>Select Network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/NetworkPlugin/translations/pt_BR.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"pt_BR\" sourcelanguage=\"en_US\">\n<context>\n    <name>CellularPane</name>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.ui\" line=\"84\"/>\n        <source>STATUS</source>\n        <translation>STATUS</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.ui\" line=\"102\"/>\n        <source>This Device</source>\n        <translation>Este dispositivo</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.ui\" line=\"246\"/>\n        <source>ACTIONS</source>\n        <translation>AÇÕES</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.ui\" line=\"262\"/>\n        <source>Connect</source>\n        <translation>Conectar</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.ui\" line=\"269\"/>\n        <source>Disconnect</source>\n        <translation>Desconectar</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.ui\" line=\"276\"/>\n        <source>Modem Settings</source>\n        <translation>Configurações do modem</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"105\"/>\n        <source>Disable Cellular</source>\n        <translation>Desativar dados móveis</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"107\"/>\n        <source>Enable Cellular</source>\n        <translation>Ativar dados móveis</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"129\"/>\n        <source>Disconnected</source>\n        <translation>Desconectado</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"135\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"397\"/>\n        <source>Cellular</source>\n        <translation>Dados móveis</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"140\"/>\n        <source>Connected</source>\n        <translation>Conectado</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"149\"/>\n        <source>Failed</source>\n        <translation>Falha</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"209\"/>\n        <source>No SIM Card</source>\n        <translation>Nenhum cartão SIM</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"210\"/>\n        <source>Insert a SIM card to connect to cellular services.</source>\n        <translation>Insira um cartão SIM para conectar aos dados móveis.</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"212\"/>\n        <source>No SIM</source>\n        <translation>Nenhum cartão SIM</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"215\"/>\n        <source>Unavailable</source>\n        <translation>Indisponível</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"218\"/>\n        <source>This network is unavailable because %2.</source>\n        <translation>Essa rede está indisponível porque %2.</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"249\"/>\n        <source>Connection Failure</source>\n        <translation>Falha na conexão</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"251\"/>\n        <source>Connecting to the network failed because %2.</source>\n        <translation>A conexão com a rede falhou porque %2.</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"326\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"339\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"346\"/>\n        <source>Enter SIM PIN</source>\n        <translation>Insira o PIN do SIM</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"328\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"332\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"344\"/>\n        <source>SIM PIN Required</source>\n        <translation>PIN do SIM obrigatório</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"334\"/>\n        <source>A SIM PIN is required to connect to the cellular network.</source>\n        <translation>O PIN do SIM é obrigatório para conectar com os dados móveis.</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"357\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"370\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"377\"/>\n        <source>Enter SIM PUK</source>\n        <translation>Insira PUK do SIM</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"359\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"363\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"375\"/>\n        <source>SIM PUK Required</source>\n        <translation>PUK do SIM obrigatório</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"365\"/>\n        <source>A SIM PUK is required to connect to the cellular network.</source>\n        <translation>O PUK do SIM é obrigatório para conectar aos dados móveis.</translation>\n    </message>\n</context>\n<context>\n    <name>Common</name>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"27\"/>\n        <source>the device is no longer managed by NetworkManager</source>\n        <translation>o dispositivo não é mais gerido pelo NetworkManager</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"29\"/>\n        <source>configuration of the device failed</source>\n        <translation>a configuração do dispositivo falhou</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"31\"/>\n        <source>configuration of the device is unavailable</source>\n        <translation>a configuração do dispositivo está indisponível</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"33\"/>\n        <source>configuration of the device expired</source>\n        <translation>a configuração do dispositivo expirou</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"35\"/>\n        <source>required secrets were not provided</source>\n        <translation>dados secretos obrigatórios não foram fornecidos</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"37\"/>\n        <source>the authentication supplicant disconnected</source>\n        <translation>o requerente da autenticação desconectou</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"39\"/>\n        <source>configuration of the authentication supplicant failed</source>\n        <translation>a configuração do requerente da autenticação falhou</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"41\"/>\n        <source>the authentication supplicant failed</source>\n        <translation>o requerente da autenticação falhou</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"43\"/>\n        <source>the authentication supplicant timed out</source>\n        <translation>o requerente da autenticação expirou</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"45\"/>\n        <source>the PPP network failed to start</source>\n        <translation>a rede PPP não pode começar</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"47\"/>\n        <source>the PPP network was disconnected</source>\n        <translation>a rede PPP foi desconectada</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"49\"/>\n        <source>the PPP network failed</source>\n        <translation>a rede PPP falhou</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"51\"/>\n        <source>DHCP configuration failed to start</source>\n        <translation>configuração DHCP não pôde iniciar</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"53\"/>\n        <source>DHCP configuration had an error</source>\n        <translation>a configuração DHCP teve um erro</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"55\"/>\n        <source>DHCP configuration failed</source>\n        <translation>a configuração DHCP falhou</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"67\"/>\n        <source>the modem is busy</source>\n        <translation>o modem está ocupado</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"69\"/>\n        <source>there is no dial tone on the modem</source>\n        <translation>não há tom de discagem no modem</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"71\"/>\n        <source>no carrier is available on the modem</source>\n        <translation>não há operadora disponível no modem</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"73\"/>\n        <source>dialling the number on the modem timed out</source>\n        <translation>a discagem do número no modem não se efetuou a tempo</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"75\"/>\n        <source>dialling the number on the modem failed</source>\n        <translation>a discagem do número no modem falhou</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"77\"/>\n        <source>initialising the modem failed</source>\n        <translation>a inicialização do modem falhou</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"79\"/>\n        <source>APN selection failed</source>\n        <translation>a seleção de APN falhou</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"81\"/>\n        <source>the modem is not searching</source>\n        <translation>o modem não está procurando</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"83\"/>\n        <source>the cell tower denied registration of the modem</source>\n        <translation>a torre celular negou o registro do modem</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"85\"/>\n        <source>registration of the modem on the cell tower timed out</source>\n        <translation>o registro do modem na torre celular não se efetuou a tempo</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"87\"/>\n        <source>registration of the modem on the cell tower failed</source>\n        <translation>o registro do modem na torre celular falhou</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"91\"/>\n        <source>the device firmware is missing</source>\n        <translation>o firmware do dispositivo não está presente</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"93\"/>\n        <source>the device was removed</source>\n        <translation>o dispositivo foi removido</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"95\"/>\n        <source>the device is sleeping</source>\n        <translation>o dispositivo está dormindo</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"97\"/>\n        <source>the connection was removed</source>\n        <translation>a conexão foi removida</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"99\"/>\n        <source>you requested the action</source>\n        <translation>você requiriu a ação</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"107\"/>\n        <source>the modem was not found</source>\n        <translation>o modem não foi achado</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"109\"/>\n        <source>Bluetooth is not available</source>\n        <translation>O Bluetooth não está disponível</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"111\"/>\n        <source>the SIM card is not inserted</source>\n        <translation>o cartão SIM não foi inserido</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"113\"/>\n        <source>the SIM PIN is required</source>\n        <translation>o PIN do SIM é necessário</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"115\"/>\n        <source>the SIM PUK is required</source>\n        <translation>o PUK do SIM é necessário</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"118\"/>\n        <source>the SIM PUK is exhausted</source>\n        <translation>o PUK do SIM está exausto</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"126\"/>\n        <source>ModemManager is not operational on this device</source>\n        <translation>ModemManager não opera neste dispositivo</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"128\"/>\n        <source>the wireless network wasn&apos;t found</source>\n        <translation>a rede sem fio não foi encontrada</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"152\"/>\n        <source>an unknown error occurred</source>\n        <translation>ocorreu um erro desconhecido</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"198\"/>\n        <source>Cellular</source>\n        <translation>Dados móveis</translation>\n    </message>\n</context>\n<context>\n    <name>ConnectionSelectionPopover</name>\n    <message>\n        <location filename=\"../statusCenter/popovers/connectionselectionpopover.ui\" line=\"35\"/>\n        <source>Select Connection Profile</source>\n        <translation>Selecione o perfil da conexão</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/connectionselectionpopover.ui\" line=\"42\"/>\n        <source>Select a connection profile to use</source>\n        <translation>Selecione um perfil de conexão</translation>\n    </message>\n</context>\n<context>\n    <name>DevicePane</name>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/devicepane.ui\" line=\"83\"/>\n        <source>STATUS</source>\n        <translation>STATUS</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/devicepane.ui\" line=\"90\"/>\n        <source>theDesk doesn&apos;t support this network interface, so you won&apos;t be able to configure it fully here.</source>\n        <translation>theDesk não suporta esta interface de rede e, por isso, não poderá configurá-lo completamente aqui.</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/devicepane.ui\" line=\"144\"/>\n        <source>ACTIONS</source>\n        <translation>AÇÕES</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/devicepane.ui\" line=\"153\"/>\n        <source>Disconnect</source>\n        <translation>Desconectar</translation>\n    </message>\n</context>\n<context>\n    <name>GenericChunkUpdater</name>\n    <message>\n        <location filename=\"../chunk/genericchunkupdater.cpp\" line=\"24\"/>\n        <source>Connected</source>\n        <translation>Conectado</translation>\n    </message>\n</context>\n<context>\n    <name>IPv4ConnectionEditorPane</name>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"35\"/>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.cpp\" line=\"69\"/>\n        <source>IPv4</source>\n        <translation>IPv4</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"99\"/>\n        <source>DHCP</source>\n        <translation>DHCP</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"104\"/>\n        <source>DHCP with manual DNS</source>\n        <translation>DHCP com DNS manual</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"109\"/>\n        <source>Manual</source>\n        <translation>Manual</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"114\"/>\n        <source>Shared</source>\n        <translation>Compartilhado</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"119\"/>\n        <source>Disabled</source>\n        <translation>Desativado</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"127\"/>\n        <source>Configuration Method</source>\n        <translation>Método de configuração</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"143\"/>\n        <source>Require IPv4</source>\n        <translation>Exigir IPv4</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"208\"/>\n        <source>IP Address</source>\n        <translation>Endereço IP</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"215\"/>\n        <source>Default Gateway</source>\n        <translation>Gateway padrão</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"222\"/>\n        <source>Subnet Length</source>\n        <translation>Comprimento da sub-rede</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"235\"/>\n        <source>ADDRESSES</source>\n        <translation>ENDEREÇOS</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"255\"/>\n        <source>Set the IP address that this device will be assigned.</source>\n        <translation>Defina os endereços IP que serão assinalados a este dispositivo.</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"345\"/>\n        <source>DNS</source>\n        <translation>DNS</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"352\"/>\n        <source>1.1.1.1</source>\n        <translation>1.1.1.1</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"359\"/>\n        <source>Configure the DNS servers that will be used to resolve domain names.</source>\n        <translation>Configure os servidores DNS que serão utilizados para resolver domínios.</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.cpp\" line=\"217\"/>\n        <source>For DNS server %1</source>\n        <translation>Para o servidor DNS %1</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.cpp\" line=\"218\"/>\n        <source>Remove</source>\n        <translation>Remover</translation>\n    </message>\n</context>\n<context>\n    <name>NetworkChunk</name>\n    <message>\n        <location filename=\"../chunk/networkchunk.cpp\" line=\"64\"/>\n        <source>Network Settings</source>\n        <translation>Configurações de rede</translation>\n    </message>\n    <message>\n        <location filename=\"../chunk/networkchunk.cpp\" line=\"103\"/>\n        <source>Disconnected</source>\n        <translation>Desconectado</translation>\n    </message>\n    <message>\n        <location filename=\"../chunk/networkchunk.cpp\" line=\"137\"/>\n        <source>Login Required</source>\n        <translation>Login exigido</translation>\n    </message>\n    <message>\n        <location filename=\"../chunk/networkchunk.cpp\" line=\"140\"/>\n        <source>Can&apos;t get to the Internet</source>\n        <translation>Não foi possível o acesso à Internet</translation>\n    </message>\n</context>\n<context>\n    <name>NetworkConnectionEditor</name>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"90\"/>\n        <source>SETTINGS MODIFIED</source>\n        <translation>CONFIGURAÇÕES MODIFICADAS</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"125\"/>\n        <source>Revert</source>\n        <translation>Reverter</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"136\"/>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"224\"/>\n        <source>Save</source>\n        <translation>Salvar</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"195\"/>\n        <source>DONE?</source>\n        <translation>PRONTO?</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"260\"/>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"303\"/>\n        <source>General</source>\n        <translation>Geral</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"327\"/>\n        <source>Connection Name</source>\n        <translation>Nome da conexão</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.cpp\" line=\"203\"/>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.cpp\" line=\"231\"/>\n        <source>Couldn&apos;t save settings</source>\n        <translation>Não foi possível salvar as configurações</translation>\n    </message>\n</context>\n<context>\n    <name>NetworkPluginCommon</name>\n    <message>\n        <source>the device is no longer managed by NetworkManager</source>\n        <translation type=\"obsolete\">o dispositivo não é mais gerido pelo NetworkManager</translation>\n    </message>\n    <message>\n        <source>configuration of the device failed</source>\n        <translation type=\"obsolete\">a configuração do dispositivo falhou</translation>\n    </message>\n    <message>\n        <source>configuration of the device is unavailable</source>\n        <translation type=\"obsolete\">a configuração do dispositivo está indisponível</translation>\n    </message>\n    <message>\n        <source>configuration of the device expired</source>\n        <translation type=\"obsolete\">a configuração do dispositivo expirou</translation>\n    </message>\n    <message>\n        <source>required secrets were not provided</source>\n        <translation type=\"obsolete\">dados secretos obrigatórios não foram fornecidos</translation>\n    </message>\n    <message>\n        <source>the authentication supplicant disconnected</source>\n        <translation type=\"obsolete\">o requerente da autenticação desconectou</translation>\n    </message>\n    <message>\n        <source>configuration of the authentication supplicant failed</source>\n        <translation type=\"obsolete\">a configuração do requerente da autenticação falhou</translation>\n    </message>\n    <message>\n        <source>the authentication supplicant failed</source>\n        <translation type=\"obsolete\">o requerente da autenticação falhou</translation>\n    </message>\n    <message>\n        <source>the authentication supplicant timed out</source>\n        <translation type=\"obsolete\">o requerente da autenticação expirou</translation>\n    </message>\n    <message>\n        <source>the PPP network failed to start</source>\n        <translation type=\"obsolete\">a rede PPP não pode começar</translation>\n    </message>\n    <message>\n        <source>the PPP network was disconnected</source>\n        <translation type=\"obsolete\">a rede PPP foi desconectada</translation>\n    </message>\n    <message>\n        <source>the PPP network failed</source>\n        <translation type=\"obsolete\">a rede PPP falhou</translation>\n    </message>\n    <message>\n        <source>DHCP configuration failed to start</source>\n        <translation type=\"obsolete\">configuração DHCP não pôde iniciar</translation>\n    </message>\n    <message>\n        <source>DHCP configuration had an error</source>\n        <translation type=\"obsolete\">a configuração DHCP teve um erro</translation>\n    </message>\n    <message>\n        <source>DHCP configuration failed</source>\n        <translation type=\"obsolete\">a configuração DHCP falhou</translation>\n    </message>\n    <message>\n        <source>the modem is busy</source>\n        <translation type=\"obsolete\">o modem está ocupado</translation>\n    </message>\n    <message>\n        <source>there is no dial tone on the modem</source>\n        <translation type=\"obsolete\">não há tom de discagem no modem</translation>\n    </message>\n    <message>\n        <source>no carrier is available on the modem</source>\n        <translation type=\"obsolete\">não há operadora disponível no modem</translation>\n    </message>\n    <message>\n        <source>dialling the number on the modem timed out</source>\n        <translation type=\"obsolete\">a discagem do número no modem não se efetuou a tempo</translation>\n    </message>\n    <message>\n        <source>dialling the number on the modem failed</source>\n        <translation type=\"obsolete\">a discagem do número no modem falhou</translation>\n    </message>\n    <message>\n        <source>initialising the modem failed</source>\n        <translation type=\"obsolete\">a inicialização do modem falhou</translation>\n    </message>\n    <message>\n        <source>APN selection failed</source>\n        <translation type=\"obsolete\">a seleção de APN falhou</translation>\n    </message>\n    <message>\n        <source>the modem is not searching</source>\n        <translation type=\"obsolete\">o modem não está procurando</translation>\n    </message>\n    <message>\n        <source>the cell tower denied registration of the modem</source>\n        <translation type=\"obsolete\">a torre celular negou o registro do modem</translation>\n    </message>\n    <message>\n        <source>registration of the modem on the cell tower timed out</source>\n        <translation type=\"obsolete\">o registro do modem na torre celular não se efetuou a tempo</translation>\n    </message>\n    <message>\n        <source>registration of the modem on the cell tower failed</source>\n        <translation type=\"obsolete\">o registro do modem na torre celular falhou</translation>\n    </message>\n    <message>\n        <source>the device firmware is missing</source>\n        <translation type=\"obsolete\">o firmware do dispositivo não está presente</translation>\n    </message>\n    <message>\n        <source>the device was removed</source>\n        <translation type=\"obsolete\">o dispositivo foi removido</translation>\n    </message>\n    <message>\n        <source>the device is sleeping</source>\n        <translation type=\"obsolete\">o dispositivo está dormindo</translation>\n    </message>\n    <message>\n        <source>the connection was removed</source>\n        <translation type=\"obsolete\">a conexão foi removida</translation>\n    </message>\n    <message>\n        <source>you requested the action</source>\n        <translation type=\"obsolete\">você requiriu a ação</translation>\n    </message>\n    <message>\n        <source>the modem was not found</source>\n        <translation type=\"obsolete\">o modem não foi achado</translation>\n    </message>\n    <message>\n        <source>Bluetooth is not available</source>\n        <translation type=\"obsolete\">O Bluetooth não está disponível</translation>\n    </message>\n    <message>\n        <source>the SIM card is not inserted</source>\n        <translation type=\"obsolete\">o cartão SIM não foi inserido</translation>\n    </message>\n    <message>\n        <source>the SIM PIN is required</source>\n        <translation type=\"obsolete\">o PIN do SIM é necessário</translation>\n    </message>\n    <message>\n        <source>the SIM PUK is required</source>\n        <translation type=\"obsolete\">o PUK do SIM é necessário</translation>\n    </message>\n    <message>\n        <source>the SIM PUK is exhausted</source>\n        <translation type=\"obsolete\">o PUK do SIM está exausto</translation>\n    </message>\n    <message>\n        <source>ModemManager is not operational on this device</source>\n        <translation type=\"obsolete\">ModemManager não opera neste dispositivo</translation>\n    </message>\n    <message>\n        <source>the wireless network wasn&apos;t found</source>\n        <translation type=\"obsolete\">a rede sem fio não foi encontrada</translation>\n    </message>\n    <message>\n        <source>an unknown error occurred</source>\n        <translation type=\"obsolete\">ocorreu um erro desconhecido</translation>\n    </message>\n    <message>\n        <source>Cellular</source>\n        <translation type=\"obsolete\">Dados móveis</translation>\n    </message>\n</context>\n<context>\n    <name>NetworkStatusCenterLeftPane</name>\n    <message>\n        <location filename=\"../statusCenter/networkstatuscenterleftpane.ui\" line=\"35\"/>\n        <source>Network</source>\n        <translation>Rede</translation>\n    </message>\n</context>\n<context>\n    <name>NetworkStatusCenterPane</name>\n    <message>\n        <location filename=\"../statusCenter/networkstatuscenterpane.ui\" line=\"100\"/>\n        <source>NetworkManager is not operational</source>\n        <translation>NetworkManager não está operando</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/networkstatuscenterpane.ui\" line=\"110\"/>\n        <source>Contact your system administrator</source>\n        <translation>Entre em contato seu administrador de sistema</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/networkstatuscenterpane.cpp\" line=\"159\"/>\n        <source>Network</source>\n        <translation>Rede</translation>\n    </message>\n</context>\n<context>\n    <name>OnboardingNetwork</name>\n    <message>\n        <location filename=\"../onboarding/onboardingnetwork.ui\" line=\"35\"/>\n        <location filename=\"../onboarding/onboardingnetwork.cpp\" line=\"96\"/>\n        <source>Network</source>\n        <translation>Rede</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingnetwork.ui\" line=\"42\"/>\n        <source>Connect to the Internet to get updates and install new software.</source>\n        <translation>Conecte-se à Internet para obter atualizações e instalar novo software.</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingnetwork.ui\" line=\"194\"/>\n        <source>You&apos;re connected!</source>\n        <translation>Você está conectado!</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingnetwork.ui\" line=\"204\"/>\n        <source>Disconnect and connect to a different network</source>\n        <translation>Desconectar e conectar a uma outra rede</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingnetwork.ui\" line=\"275\"/>\n        <source>You can always set up the network connection later.</source>\n        <translation>Você pode configurar a conexão de rede depois.</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingnetwork.cpp\" line=\"73\"/>\n        <source>Continue without Internet</source>\n        <translation>Continuar sem acesso à Internet</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingnetwork.cpp\" line=\"79\"/>\n        <location filename=\"../onboarding/onboardingnetwork.cpp\" line=\"85\"/>\n        <source>Next</source>\n        <translation>Próximo</translation>\n    </message>\n</context>\n<context>\n    <name>SecurityEapPeap</name>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"35\"/>\n        <source>PEAP</source>\n        <translation>PEAP</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"42\"/>\n        <source>Enter the settings for this network</source>\n        <translation>Insira as configurações para esta rede</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"82\"/>\n        <source>Phase-2 Authentication</source>\n        <translation>Autenticação de fase 2 (Phase-2 Authentication)</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"89\"/>\n        <source>Anonymous Identity</source>\n        <translation>Identidade anônima</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"99\"/>\n        <source>PEAP version</source>\n        <translation>Versão PEAP</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"106\"/>\n        <source>Username</source>\n        <translation>Nome de usuário</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"113\"/>\n        <source>Password</source>\n        <translation>Senha</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"120\"/>\n        <source>CA Certificate</source>\n        <translation>Certificado CA</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"127\"/>\n        <source>Browse...</source>\n        <translation>Procurar...</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"135\"/>\n        <source>MSCHAPv2</source>\n        <translation>MSCHAPv2</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"140\"/>\n        <source>MD5</source>\n        <translation>MD5</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"145\"/>\n        <source>GTC</source>\n        <translation>GTC</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"171\"/>\n        <source>Automatic</source>\n        <translation>Automático</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"187\"/>\n        <source>Version 0</source>\n        <translation>Versão 0</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"200\"/>\n        <source>Version 1</source>\n        <translation>Versão 1</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"244\"/>\n        <source>Connect</source>\n        <translation>Conectar</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.cpp\" line=\"107\"/>\n        <source>Certificates (*.pem, *.cer)</source>\n        <translation>Certificados (*.pem, *.cer)</translation>\n    </message>\n</context>\n<context>\n    <name>SecurityEapUnsupported</name>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeapunsupported.ui\" line=\"35\"/>\n        <location filename=\"../statusCenter/eap/securityeapunsupported.ui\" line=\"77\"/>\n        <source>Unsupported Security Settings</source>\n        <translation>Configurações de segurança sem suporte</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeapunsupported.ui\" line=\"87\"/>\n        <source>Sorry, theDesk doesn&apos;t support those security settings at the moment. You can try using the terminal to configure this network.</source>\n        <translation>Desculpe, mas, por enquanto, theDesk não tem suporte para essas configurações de segurança. Você pode usar o terminal para configurar essa rede.</translation>\n    </message>\n</context>\n<context>\n    <name>SimSettingsPopover</name>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"57\"/>\n        <source>Modem Settings</source>\n        <translation>Configurações do modem</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"88\"/>\n        <source>SIM PIN</source>\n        <translation>PIN do SIM</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"98\"/>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"114\"/>\n        <source>Enable SIM PIN</source>\n        <translation>Ativar PIN do SIM</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"105\"/>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"120\"/>\n        <source>Disable SIM PIN</source>\n        <translation>Desativar PIN do SIM</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"112\"/>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"164\"/>\n        <source>Change SIM PIN</source>\n        <translation>Mudar PIN do SIM</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"128\"/>\n        <source>CALLS</source>\n        <translation>CHAMADAS</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"138\"/>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"769\"/>\n        <source>Call Waiting</source>\n        <translation>Chamada em espera</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"188\"/>\n        <source>IMSI</source>\n        <translation>IMSI</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"195\"/>\n        <source>IMEI</source>\n        <translation>IMEI</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"208\"/>\n        <source>MODEM INFORMATION</source>\n        <translation>INFORMAÇÃO DO MODEM</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"215\"/>\n        <source>Carrier</source>\n        <translation>Operadora</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"340\"/>\n        <source>Enter the new SIM PIN</source>\n        <translation>Insira o novo PIN do SIM</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"537\"/>\n        <source>Enter the current SIM PIN</source>\n        <translation>Insira o PIN do SIM atual</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"806\"/>\n        <source>Enable Call Waiting</source>\n        <translation>Ativar chamada em espera</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"813\"/>\n        <source>Call Waiting allows you to receive calls while another call is currently active.</source>\n        <translation>&quot;Chamada em espera&quot; permite receber chamadas enquanto outra está ativa.</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"58\"/>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"59\"/>\n        <source>No SIM card</source>\n        <translation>Sem cartão SIM</translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"142\"/>\n        <source>You have %n remaining tries</source>\n        <translation>\n            <numerusform>Você tem %1 tentativa restante</numerusform>\n            <numerusform>Você tem %1 tentativas restantes</numerusform>\n        </translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"203\"/>\n        <source>Error</source>\n        <translation>Erro</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"204\"/>\n        <source>Couldn&apos;t get current Call Waiting status from carrier</source>\n        <translation>Não pode receber estado de chamada em espera da operadora</translation>\n    </message>\n</context>\n<context>\n    <name>SwitchManager</name>\n    <message>\n        <location filename=\"../switchmanager.cpp\" line=\"63\"/>\n        <location filename=\"../switchmanager.cpp\" line=\"72\"/>\n        <location filename=\"../switchmanager.cpp\" line=\"122\"/>\n        <source>Flight Mode</source>\n        <translation>Modo avião</translation>\n    </message>\n    <message>\n        <location filename=\"../switchmanager.cpp\" line=\"67\"/>\n        <source>Switch off Flight Mode</source>\n        <translation>Desligar o modo avião</translation>\n    </message>\n    <message>\n        <location filename=\"../switchmanager.cpp\" line=\"78\"/>\n        <location filename=\"../switchmanager.cpp\" line=\"123\"/>\n        <source>Wi-Fi</source>\n        <translation>Wi-Fi</translation>\n    </message>\n    <message>\n        <location filename=\"../switchmanager.cpp\" line=\"88\"/>\n        <location filename=\"../switchmanager.cpp\" line=\"124\"/>\n        <source>Cellular</source>\n        <translation>Dados móveis</translation>\n    </message>\n</context>\n<context>\n    <name>TetheringSettingsPopover</name>\n    <message>\n        <location filename=\"../statusCenter/popovers/tetheringsettingspopover.ui\" line=\"35\"/>\n        <source>Tethering Settings</source>\n        <translation>Configurações de tethering</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/tetheringsettingspopover.ui\" line=\"63\"/>\n        <source>SSID</source>\n        <translation>SSID</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/tetheringsettingspopover.ui\" line=\"73\"/>\n        <source>These settings will be used to set up a Wi-Fi network that other devices can connect to when tethering is enabled.</source>\n        <translation>Essas configurações serão utilizadas para configurar uma rede Wi-Fi, a qual outros dispositivos podem se conectar quando o tethering está ativado.</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/tetheringsettingspopover.ui\" line=\"96\"/>\n        <source>Network Key</source>\n        <translation>Chave de rede</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/tetheringsettingspopover.cpp\" line=\"64\"/>\n        <source>Network key needs to be at least 8 characters long</source>\n        <translation>A chave de rede precisa ter pelo menos 8 caracteres</translation>\n    </message>\n</context>\n<context>\n    <name>UnlockModemPopover</name>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.ui\" line=\"190\"/>\n        <source>Enter the SIM PIN</source>\n        <translation>Insira o PIN do SIM</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.ui\" line=\"356\"/>\n        <source>SIM PUK</source>\n        <translation>PUK do SIM</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.ui\" line=\"363\"/>\n        <source>You&apos;ll also need to provide a new SIM PIN to set once the SIM is unlocked.</source>\n        <translation>Você também precisará de um novo PIN do SIM para definir depois que o SIM for desbloqueado.</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.ui\" line=\"379\"/>\n        <source>SIM PUK REQUIRED</source>\n        <translation>PUK DO SIM EXIGIDO</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.ui\" line=\"425\"/>\n        <source>Unlock SIM Card</source>\n        <translation>Desbloquear cartão SIM</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.ui\" line=\"456\"/>\n        <source>New SIM PIN</source>\n        <translation>Novo PIN do SIM</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.ui\" line=\"466\"/>\n        <source>Confirm SIM PIN</source>\n        <translation>Confirmar PIN do SIM</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.cpp\" line=\"48\"/>\n        <source>Don&apos;t guess the PUK!</source>\n        <translation>Não tente adivinhar o PUK!</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.cpp\" line=\"49\"/>\n        <source>Once you exhaust your attempts, the SIM card will be blocked forever.\n\nYou&apos;ll need to contact your carrier for a new SIM card.</source>\n        <translation>Após usar todas suas tentativas, esse cartão SIM será bloqueado para sempre.\n\nVocê precisará entrar em contato com sua operadora para um novo cartão SIM.</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.cpp\" line=\"68\"/>\n        <source>If you enter the incorrect PIN again, your SIM card will be PUK locked, and you&apos;ll need to contact your carrier.</source>\n        <translation>Se inserir o PIN incorreto novamente, o seu cartão SIM será bloqueado pelo PUK, e você precisará entrar em contato com a sua operadora.</translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.cpp\" line=\"70\"/>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.cpp\" line=\"75\"/>\n        <source>You have %n remaining tries</source>\n        <translation>\n            <numerusform>Você tem %1 tentativa restante</numerusform>\n            <numerusform>Você tem %1 tentativas restantes</numerusform>\n        </translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.cpp\" line=\"73\"/>\n        <source>This is your final chance to get the PUK right before you&apos;ll need to obtain a new SIM card from your carrier.</source>\n        <translation>Essa é a ultima oportunidade que você tem para inserir o PUK correto. Caso errar, você precisará contatar sua operadora para obter um novo cartão SIM.</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.cpp\" line=\"78\"/>\n        <source>Contact your carrier to obtain the &lt;b&gt;SIM PUK&lt;/b&gt;, and enter it below to unlock %1.</source>\n        <translation>Entre em contato com sua operadora para obter o &lt;b&gt;PUK do cartão SIM&lt;/b&gt; e insira-o abaixo para desbloquear %1.</translation>\n    </message>\n</context>\n<context>\n    <name>WifiConnectionEditorPane</name>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/wificonnectioneditorpane.ui\" line=\"35\"/>\n        <location filename=\"../statusCenter/connectionEditor/wificonnectioneditorpane.cpp\" line=\"47\"/>\n        <source>Wi-Fi</source>\n        <translation>Wi-Fi</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/wificonnectioneditorpane.ui\" line=\"59\"/>\n        <source>Mode</source>\n        <translation>Modo</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/wificonnectioneditorpane.ui\" line=\"66\"/>\n        <source>SSID</source>\n        <translation>SSID</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/wificonnectioneditorpane.ui\" line=\"77\"/>\n        <source>Infrastructure</source>\n        <translation>Infraestrutura</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/wificonnectioneditorpane.ui\" line=\"82\"/>\n        <source>Ad-Hoc</source>\n        <translation>Ad-Hoc</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/wificonnectioneditorpane.ui\" line=\"87\"/>\n        <source>Access Point</source>\n        <translation>Ponto de acesso</translation>\n    </message>\n</context>\n<context>\n    <name>WifiDevicePane</name>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"106\"/>\n        <source>STATUS</source>\n        <translation>STATUS</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"124\"/>\n        <source>This Device</source>\n        <translation>Este dispositivo</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"268\"/>\n        <source>ACTIONS</source>\n        <translation>AÇÕES</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"277\"/>\n        <source>Select Network</source>\n        <translation>Selecione a rede</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"284\"/>\n        <source>Disconnect</source>\n        <translation>Desconectar</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"348\"/>\n        <source>TETHERING</source>\n        <translation>TETHERING</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"355\"/>\n        <source>Network Key</source>\n        <translation>Chave de rede</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"375\"/>\n        <source>Use Tethering to share your internet connection with other devices over Wi-Fi.\n\n**While Tethering is active, you won&apos;t be able to connect to the Internet with Wi-Fi, so you&apos;ll need to make sure you have an alternate way to connect to the Internet.**</source>\n        <translation>Use o tethering para compartilhar sua conexão à Internet com outros dispositivos via Wi-Fi.\n\n**Enquanto o tethering está ativo, você não poderá se conectar à Internet via Wi-Fi, então certifique-se que você tem um outro modo de se conectar à Internet.**</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"398\"/>\n        <source>Enable Tethering</source>\n        <translation>Ativar tethering</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"414\"/>\n        <source>SSID</source>\n        <translation>SSID</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"440\"/>\n        <source>Set Tethering Settings</source>\n        <translation>Definir configurações de tethering</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"489\"/>\n        <source>Wi-Fi is off</source>\n        <translation>Wi-Fi está desligado</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"512\"/>\n        <source>Switch Wi-Fi on to connect to a wireless network</source>\n        <translation>Ligue o Wi-Fi para conectar a uma rede sem fio</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"522\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"669\"/>\n        <source>Switch Wi-Fi On</source>\n        <translation>Ligar Wi-Fi</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"568\"/>\n        <source>Wi-Fi is disabled</source>\n        <translation>Wi-Fi está desativado</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"591\"/>\n        <source>Use the Wi-Fi switch to enable Wi-Fi and connect to a network</source>\n        <translation>Use o interruptor de Wi-Fi e conecte a uma rede</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"636\"/>\n        <source>You&apos;re in flight mode</source>\n        <translation>Você está em modo avião</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"659\"/>\n        <source>Switch Wi-Fi on to connect to a wireless network. Flight mode won&apos;t be disabled.</source>\n        <translation>Ligue o Wi-Fi para conectar a uma rede sem fio. O modo avião não será desativado.</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"88\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"131\"/>\n        <source>Tethering</source>\n        <translation>Tethering</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"91\"/>\n        <source>Disable Tethering</source>\n        <translation>Desativar tethering</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"118\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"143\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"153\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"202\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"203\"/>\n        <source>Wi-Fi</source>\n        <translation>Wi-Fi</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"119\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"230\"/>\n        <source>Disconnected</source>\n        <translation>Desconectado</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"132\"/>\n        <source>Active</source>\n        <translation>Ativo</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"138\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"144\"/>\n        <source>Connected</source>\n        <translation>Conectado</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"154\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"239\"/>\n        <source>Failed</source>\n        <translation>Falha</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"164\"/>\n        <source>Connection Failure</source>\n        <translation>Falha na conexão</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"166\"/>\n        <source>Connecting to %1 failed because %2.</source>\n        <translation>A conexão com %1 falhou porque %2.</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"170\"/>\n        <source>the network</source>\n        <translation>a rede</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"273\"/>\n        <source>0 Devices</source>\n        <translation>0 dispositivos</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"282\"/>\n        <source>Unknown</source>\n        <translation>Desconhecido</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"452\"/>\n        <source>Couldn&apos;t configure tethering</source>\n        <translation>Não foi possível configurar tethering</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"478\"/>\n        <source>Couldn&apos;t switch off tethering</source>\n        <translation>Não foi possível desligar tethering</translation>\n    </message>\n</context>\n<context>\n    <name>WiredChunkUpdater</name>\n    <message>\n        <location filename=\"../chunk/wiredchunkupdater.cpp\" line=\"25\"/>\n        <source>Wired</source>\n        <translation>A fio</translation>\n    </message>\n</context>\n<context>\n    <name>WiredDevicePane</name>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.ui\" line=\"35\"/>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"64\"/>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"83\"/>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"90\"/>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"103\"/>\n        <source>Wired</source>\n        <translation>A fio</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.ui\" line=\"84\"/>\n        <source>STATUS</source>\n        <translation>STATUS</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.ui\" line=\"102\"/>\n        <source>This Device</source>\n        <translation>Este dispositivo</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.ui\" line=\"246\"/>\n        <source>ACTIONS</source>\n        <translation>AÇÕES</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.ui\" line=\"255\"/>\n        <source>Connect</source>\n        <translation>Conectar</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.ui\" line=\"262\"/>\n        <source>Disconnect</source>\n        <translation>Desconectar</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"84\"/>\n        <source>Disconnected</source>\n        <translation>Desconectado</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"95\"/>\n        <source>Connected</source>\n        <translation>Conectado</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"104\"/>\n        <source>Failed</source>\n        <translation>Falha</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"122\"/>\n        <source>Router</source>\n        <translation>Roteador</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"144\"/>\n        <source>Unavailable</source>\n        <translation>Indisponível</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"148\"/>\n        <source>Connect an Ethernet cable.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"150\"/>\n        <source>This network is unavailable because %2.</source>\n        <translation type=\"unfinished\">Essa rede está indisponível porque %2.</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"177\"/>\n        <source>Connection Failure</source>\n        <translation type=\"unfinished\">Falha na conexão</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"179\"/>\n        <source>Connecting to the network failed because %2.</source>\n        <translation type=\"unfinished\">A conexão com a rede falhou porque %2.</translation>\n    </message>\n</context>\n<context>\n    <name>WiredOnboardingSetup</name>\n    <message>\n        <location filename=\"../onboarding/wiredonboardingsetup.ui\" line=\"57\"/>\n        <source>WIRED</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/wiredonboardingsetup.ui\" line=\"73\"/>\n        <source>Use Wired Connection</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/wiredonboardingsetup.cpp\" line=\"91\"/>\n        <source>Connect to the Internet using a wired network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/wiredonboardingsetup.cpp\" line=\"94\"/>\n        <source>To connect to the Internet using a wired network, connect the network cable.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>WirelessNetworkListDelegate</name>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"85\"/>\n        <source>Connected</source>\n        <translation type=\"unfinished\">Conectado</translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"89\"/>\n        <source>In Range</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"97\"/>\n        <source>Out of range</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"107\"/>\n        <source>Not Secured</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"110\"/>\n        <source>Secured with Static WEP</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"113\"/>\n        <source>Secured with Dynamic WEP</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"116\"/>\n        <source>Secured with LEAP</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"119\"/>\n        <source>Secured with WPA-PSK</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"122\"/>\n        <source>Secured with WPA Enterprise</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"125\"/>\n        <source>Secured with WPA2-PSK</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"128\"/>\n        <source>Secured with WPA2 Enterprise</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"131\"/>\n        <source>Secured with WPA3</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>WirelessNetworkSelectionPopover</name>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"57\"/>\n        <source>Connect to a Wireless Network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"107\"/>\n        <source>KNOWN NETWORKS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"158\"/>\n        <source>NEW NETWORKS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"181\"/>\n        <source>New Manual Connection</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"297\"/>\n        <source>Enter the security key</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"421\"/>\n        <source>Network Security</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"454\"/>\n        <source>Select the EAP method. If you don&apos;t know what to select, contact your system administrator for the details.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"484\"/>\n        <source>TLS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"489\"/>\n        <source>LEAP</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"494\"/>\n        <source>PWD</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"499\"/>\n        <source>FAST</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"504\"/>\n        <source>TTLS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"509\"/>\n        <source>PEAP</source>\n        <translation type=\"unfinished\">PEAP</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.cpp\" line=\"141\"/>\n        <source>Unknown Security</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.cpp\" line=\"142\"/>\n        <source>Not sure how to connect to this network. Use manual setup to connect to it.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.cpp\" line=\"217\"/>\n        <source>For network %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.cpp\" line=\"218\"/>\n        <source>Edit</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.cpp\" line=\"235\"/>\n        <source>Forget Network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.cpp\" line=\"316\"/>\n        <source>Wireless</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.cpp\" line=\"319\"/>\n        <source>Connect</source>\n        <translation type=\"unfinished\">Conectar</translation>\n    </message>\n</context>\n<context>\n    <name>WirelessOnboardingSetup</name>\n    <message>\n        <location filename=\"../onboarding/wirelessonboardingsetup.ui\" line=\"57\"/>\n        <source>WI-FI</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/wirelessonboardingsetup.ui\" line=\"64\"/>\n        <source>Connect to the Internet using a Wi-Fi network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/wirelessonboardingsetup.ui\" line=\"73\"/>\n        <source>Select Network</source>\n        <translation type=\"unfinished\">Selecione a rede</translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/NetworkPlugin/translations/ro.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"ro\" sourcelanguage=\"en_US\">\n<context>\n    <name>CellularPane</name>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.ui\" line=\"84\"/>\n        <source>STATUS</source>\n        <translation>STARE</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.ui\" line=\"102\"/>\n        <source>This Device</source>\n        <translation>Acest dispozitiv</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.ui\" line=\"246\"/>\n        <source>ACTIONS</source>\n        <translation>ACȚIUNI</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.ui\" line=\"262\"/>\n        <source>Connect</source>\n        <translation>Conectează</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.ui\" line=\"269\"/>\n        <source>Disconnect</source>\n        <translation>Deconectează</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.ui\" line=\"276\"/>\n        <source>Modem Settings</source>\n        <translation>Setări modem</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"105\"/>\n        <source>Disable Cellular</source>\n        <translation>Dezactivează datele mobile</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"107\"/>\n        <source>Enable Cellular</source>\n        <translation>Activează datele mobile</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"129\"/>\n        <source>Disconnected</source>\n        <translation>Deconectat</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"135\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"397\"/>\n        <source>Cellular</source>\n        <translation>Date mobile</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"140\"/>\n        <source>Connected</source>\n        <translation>Conectat</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"149\"/>\n        <source>Failed</source>\n        <translation>Eșuat</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"209\"/>\n        <source>No SIM Card</source>\n        <translation>Fără cartelă SIM</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"210\"/>\n        <source>Insert a SIM card to connect to cellular services.</source>\n        <translation>Introduceți o cartelă SIM pentru a vă conecta la date mobile.</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"212\"/>\n        <source>No SIM</source>\n        <translation>Fără SIM</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"215\"/>\n        <source>Unavailable</source>\n        <translation>Indisponibil</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"218\"/>\n        <source>This network is unavailable because %2.</source>\n        <translation>Această rețea este indisponibilă deoarece %2.</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"249\"/>\n        <source>Connection Failure</source>\n        <translation>Eroare la conectare</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"251\"/>\n        <source>Connecting to the network failed because %2.</source>\n        <translation>Nu s-a putut conecta la rețea, deoarece %2.</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"326\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"339\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"346\"/>\n        <source>Enter SIM PIN</source>\n        <translation>Indroduceți PIN-ul pentru cartela SIM</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"328\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"332\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"344\"/>\n        <source>SIM PIN Required</source>\n        <translation>Este necesar PIN-ul pentru cartela SIM</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"334\"/>\n        <source>A SIM PIN is required to connect to the cellular network.</source>\n        <translation>Este necesar PIN-ul cartelei pentru conectarea la rețeaua celulară.</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"357\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"370\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"377\"/>\n        <source>Enter SIM PUK</source>\n        <translation>Introduceți codul PUK al cartelei SIM</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"359\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"363\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"375\"/>\n        <source>SIM PUK Required</source>\n        <translation>Este necesar PUK-ul pentru cartela SIM</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"365\"/>\n        <source>A SIM PUK is required to connect to the cellular network.</source>\n        <translation>Codul PUK al cartelei SIM este necesar pentru conectarea la rețeaua celulară.</translation>\n    </message>\n</context>\n<context>\n    <name>Common</name>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"27\"/>\n        <source>the device is no longer managed by NetworkManager</source>\n        <translation>dispozitivul nu mai este gestionat de NetworkManager</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"29\"/>\n        <source>configuration of the device failed</source>\n        <translation>configurarea acestui dispozitiv a eșuat</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"31\"/>\n        <source>configuration of the device is unavailable</source>\n        <translation>setările dispozitivului nu sunt disponibile</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"33\"/>\n        <source>configuration of the device expired</source>\n        <translation>setările dispozitivului au expirat</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"35\"/>\n        <source>required secrets were not provided</source>\n        <translation>secretele necesare nu au fost furnizate</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"37\"/>\n        <source>the authentication supplicant disconnected</source>\n        <translation>solicitantul de autentificare s-a deconectat</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"39\"/>\n        <source>configuration of the authentication supplicant failed</source>\n        <translation>configurarea solicitantului de autentificare a eșuat</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"41\"/>\n        <source>the authentication supplicant failed</source>\n        <translation>solicitantul de autentificare a eșuat</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"43\"/>\n        <source>the authentication supplicant timed out</source>\n        <translation>solicitantul de autentificare nu a răspuns la timp</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"45\"/>\n        <source>the PPP network failed to start</source>\n        <translation>rețeaua PPP nu a putut porni</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"47\"/>\n        <source>the PPP network was disconnected</source>\n        <translation>rețeaua PPP a fost deconectată</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"49\"/>\n        <source>the PPP network failed</source>\n        <translation>rețeaua PPP a eșuat</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"51\"/>\n        <source>DHCP configuration failed to start</source>\n        <translation>configurația DHCP nu a putut porni</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"53\"/>\n        <source>DHCP configuration had an error</source>\n        <translation>a survenit o eroare la configurația DHCP</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"55\"/>\n        <source>DHCP configuration failed</source>\n        <translation>configurarea DHCP a eșuat</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"67\"/>\n        <source>the modem is busy</source>\n        <translation>modem-ul este ocupat</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"69\"/>\n        <source>there is no dial tone on the modem</source>\n        <translation>nu există un ton de apel pe modem</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"71\"/>\n        <source>no carrier is available on the modem</source>\n        <translation>nu există un operator pe modem</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"73\"/>\n        <source>dialling the number on the modem timed out</source>\n        <translation>apelarea numărului de pe modem nu a primit un răspuns la timp</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"75\"/>\n        <source>dialling the number on the modem failed</source>\n        <translation>apelarea numărului de pe modem a eșuat</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"77\"/>\n        <source>initialising the modem failed</source>\n        <translation>nu s-a putut inițializa modem-ul</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"79\"/>\n        <source>APN selection failed</source>\n        <translation>selecția unui APN a eșuat</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"81\"/>\n        <source>the modem is not searching</source>\n        <translation>modemul nu este în modul de căutare</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"83\"/>\n        <source>the cell tower denied registration of the modem</source>\n        <translation>turnul de telefonie mobilă a refuzat înregistrarea modemului</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"85\"/>\n        <source>registration of the modem on the cell tower timed out</source>\n        <translation>înregistrarea modemului la turnul de telefonie mobilă nu s-a terminat la timp</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"87\"/>\n        <source>registration of the modem on the cell tower failed</source>\n        <translation>înregistrarea modemului pe turnul de telefonie mobilă a eșuat</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"91\"/>\n        <source>the device firmware is missing</source>\n        <translation>firmware-ul dispozitivului lipsește</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"93\"/>\n        <source>the device was removed</source>\n        <translation>dispozitivul a fost scos</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"95\"/>\n        <source>the device is sleeping</source>\n        <translation>dispozitivul este în adormire</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"97\"/>\n        <source>the connection was removed</source>\n        <translation>conexiunea a fost înlăturată</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"99\"/>\n        <source>you requested the action</source>\n        <translation>ați solicitat anularea</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"107\"/>\n        <source>the modem was not found</source>\n        <translation>modemul nu a fost găsit</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"109\"/>\n        <source>Bluetooth is not available</source>\n        <translation>Bluetooth nu este disponibil</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"111\"/>\n        <source>the SIM card is not inserted</source>\n        <translation>cartela SIM nu este inserată</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"113\"/>\n        <source>the SIM PIN is required</source>\n        <translation>PIN-ul de la SIM este necesar</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"115\"/>\n        <source>the SIM PUK is required</source>\n        <translation>PUK-ul de la SIM este necesar</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"118\"/>\n        <source>the SIM PUK is exhausted</source>\n        <translation>PUK-ul cartelei a fost folosit de prea multe ori</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"126\"/>\n        <source>ModemManager is not operational on this device</source>\n        <translation>ModemManager nu este funcțional pe acest dispozitiv</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"128\"/>\n        <source>the wireless network wasn&apos;t found</source>\n        <translation>rețeaua wireless nu a fost găsită</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"152\"/>\n        <source>an unknown error occurred</source>\n        <translation>a survenit o eroare necunoscută</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"198\"/>\n        <source>Cellular</source>\n        <translation>Date mobile</translation>\n    </message>\n</context>\n<context>\n    <name>ConnectionSelectionPopover</name>\n    <message>\n        <location filename=\"../statusCenter/popovers/connectionselectionpopover.ui\" line=\"35\"/>\n        <source>Select Connection Profile</source>\n        <translation>Selectați profilul de conexiune</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/connectionselectionpopover.ui\" line=\"42\"/>\n        <source>Select a connection profile to use</source>\n        <translation>Selectați profilul de conexiune pe care doriți să-l folosiți</translation>\n    </message>\n</context>\n<context>\n    <name>DevicePane</name>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/devicepane.ui\" line=\"83\"/>\n        <source>STATUS</source>\n        <translation>STARE</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/devicepane.ui\" line=\"90\"/>\n        <source>theDesk doesn&apos;t support this network interface, so you won&apos;t be able to configure it fully here.</source>\n        <translation>Această interfață de rețea nu poate fi configurată în totalitate aici, deoarece nu este suportată de theDesk.</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/devicepane.ui\" line=\"144\"/>\n        <source>ACTIONS</source>\n        <translation>ACȚIUNI</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/devicepane.ui\" line=\"153\"/>\n        <source>Disconnect</source>\n        <translation>Deconectare</translation>\n    </message>\n</context>\n<context>\n    <name>GenericChunkUpdater</name>\n    <message>\n        <location filename=\"../chunk/genericchunkupdater.cpp\" line=\"24\"/>\n        <source>Connected</source>\n        <translation>Conectat</translation>\n    </message>\n</context>\n<context>\n    <name>IPv4ConnectionEditorPane</name>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"35\"/>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.cpp\" line=\"69\"/>\n        <source>IPv4</source>\n        <translation>IPv4</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"99\"/>\n        <source>DHCP</source>\n        <translation>DHCP</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"104\"/>\n        <source>DHCP with manual DNS</source>\n        <translation>DHCP cu DNS manual</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"109\"/>\n        <source>Manual</source>\n        <translation>Manual</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"114\"/>\n        <source>Shared</source>\n        <translation>Partajat</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"119\"/>\n        <source>Disabled</source>\n        <translation>Dezactivat</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"127\"/>\n        <source>Configuration Method</source>\n        <translation>Metodă de configurare</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"143\"/>\n        <source>Require IPv4</source>\n        <translation>Necesită IPv4</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"208\"/>\n        <source>IP Address</source>\n        <translation>Adresa IP</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"215\"/>\n        <source>Default Gateway</source>\n        <translation>Gateway-ul implicit</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"222\"/>\n        <source>Subnet Length</source>\n        <translation>Lungimea de subnet</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"235\"/>\n        <source>ADDRESSES</source>\n        <translation>ADRESE</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"255\"/>\n        <source>Set the IP address that this device will be assigned.</source>\n        <translation>Setați adresa IP care va fi atribuită acestui dispozitiv.</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"345\"/>\n        <source>DNS</source>\n        <translation>DNS</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"352\"/>\n        <source>1.1.1.1</source>\n        <translation>1.1.1.1</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"359\"/>\n        <source>Configure the DNS servers that will be used to resolve domain names.</source>\n        <translation>Configurați serverele DNS care vor fi folosite să proceseze numele de domeniu.</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.cpp\" line=\"217\"/>\n        <source>For DNS server %1</source>\n        <translation>Pentru serverul DNS %1</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.cpp\" line=\"218\"/>\n        <source>Remove</source>\n        <translation>Elimină</translation>\n    </message>\n</context>\n<context>\n    <name>NetworkChunk</name>\n    <message>\n        <location filename=\"../chunk/networkchunk.cpp\" line=\"64\"/>\n        <source>Network Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../chunk/networkchunk.cpp\" line=\"103\"/>\n        <source>Disconnected</source>\n        <translation>Deconectat</translation>\n    </message>\n    <message>\n        <location filename=\"../chunk/networkchunk.cpp\" line=\"137\"/>\n        <source>Login Required</source>\n        <translation>Autentificare necesară</translation>\n    </message>\n    <message>\n        <location filename=\"../chunk/networkchunk.cpp\" line=\"140\"/>\n        <source>Can&apos;t get to the Internet</source>\n        <translation>Nu se poate conecta la internet</translation>\n    </message>\n</context>\n<context>\n    <name>NetworkConnectionEditor</name>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"90\"/>\n        <source>SETTINGS MODIFIED</source>\n        <translation>SETĂRI MODIFICATE</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"125\"/>\n        <source>Revert</source>\n        <translation>Restabilește</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"136\"/>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"224\"/>\n        <source>Save</source>\n        <translation>Salvează</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"195\"/>\n        <source>DONE?</source>\n        <translation>GATA?</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"260\"/>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"303\"/>\n        <source>General</source>\n        <translation>General</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"327\"/>\n        <source>Connection Name</source>\n        <translation>Numele conexiunii</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.cpp\" line=\"203\"/>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.cpp\" line=\"231\"/>\n        <source>Couldn&apos;t save settings</source>\n        <translation>Nu au putut fi salvate setările</translation>\n    </message>\n</context>\n<context>\n    <name>NetworkPluginCommon</name>\n    <message>\n        <source>the device is no longer managed by NetworkManager</source>\n        <translation type=\"obsolete\">dispozitivul nu mai este gestionat de NetworkManager</translation>\n    </message>\n    <message>\n        <source>configuration of the device failed</source>\n        <translation type=\"obsolete\">configurarea acestui dispozitiv a eșuat</translation>\n    </message>\n    <message>\n        <source>configuration of the device is unavailable</source>\n        <translation type=\"obsolete\">setările dispozitivului nu sunt disponibile</translation>\n    </message>\n    <message>\n        <source>configuration of the device expired</source>\n        <translation type=\"obsolete\">setările dispozitivului au expirat</translation>\n    </message>\n    <message>\n        <source>required secrets were not provided</source>\n        <translation type=\"obsolete\">secretele necesare nu au fost furnizate</translation>\n    </message>\n    <message>\n        <source>the authentication supplicant disconnected</source>\n        <translation type=\"obsolete\">solicitantul de autentificare s-a deconectat</translation>\n    </message>\n    <message>\n        <source>configuration of the authentication supplicant failed</source>\n        <translation type=\"obsolete\">configurarea solicitantului de autentificare a eșuat</translation>\n    </message>\n    <message>\n        <source>the authentication supplicant failed</source>\n        <translation type=\"obsolete\">solicitantul de autentificare a eșuat</translation>\n    </message>\n    <message>\n        <source>the authentication supplicant timed out</source>\n        <translation type=\"obsolete\">solicitantul de autentificare nu a răspuns la timp</translation>\n    </message>\n    <message>\n        <source>the PPP network failed to start</source>\n        <translation type=\"obsolete\">rețeaua PPP nu a putut porni</translation>\n    </message>\n    <message>\n        <source>the PPP network was disconnected</source>\n        <translation type=\"obsolete\">rețeaua PPP a fost deconectată</translation>\n    </message>\n    <message>\n        <source>the PPP network failed</source>\n        <translation type=\"obsolete\">rețeaua PPP a eșuat</translation>\n    </message>\n    <message>\n        <source>DHCP configuration failed to start</source>\n        <translation type=\"obsolete\">configurația DHCP nu a putut porni</translation>\n    </message>\n    <message>\n        <source>DHCP configuration had an error</source>\n        <translation type=\"obsolete\">a survenit o eroare la configurația DHCP</translation>\n    </message>\n    <message>\n        <source>DHCP configuration failed</source>\n        <translation type=\"obsolete\">configurarea DHCP a eșuat</translation>\n    </message>\n    <message>\n        <source>the modem is busy</source>\n        <translation type=\"obsolete\">modem-ul este ocupat</translation>\n    </message>\n    <message>\n        <source>there is no dial tone on the modem</source>\n        <translation type=\"obsolete\">nu există un ton de apel pe modem</translation>\n    </message>\n    <message>\n        <source>no carrier is available on the modem</source>\n        <translation type=\"obsolete\">nu există un operator pe modem</translation>\n    </message>\n    <message>\n        <source>dialling the number on the modem timed out</source>\n        <translation type=\"obsolete\">apelarea numărului de pe modem nu a primit un răspuns la timp</translation>\n    </message>\n    <message>\n        <source>dialling the number on the modem failed</source>\n        <translation type=\"obsolete\">apelarea numărului de pe modem a eșuat</translation>\n    </message>\n    <message>\n        <source>initialising the modem failed</source>\n        <translation type=\"obsolete\">nu s-a putut inițializa modem-ul</translation>\n    </message>\n    <message>\n        <source>APN selection failed</source>\n        <translation type=\"obsolete\">selecția unui APN a eșuat</translation>\n    </message>\n    <message>\n        <source>the modem is not searching</source>\n        <translation type=\"obsolete\">modemul nu este în modul de căutare</translation>\n    </message>\n    <message>\n        <source>the cell tower denied registration of the modem</source>\n        <translation type=\"obsolete\">turnul de telefonie mobilă a refuzat înregistrarea modemului</translation>\n    </message>\n    <message>\n        <source>registration of the modem on the cell tower timed out</source>\n        <translation type=\"obsolete\">înregistrarea modemului la turnul de telefonie mobilă nu s-a terminat la timp</translation>\n    </message>\n    <message>\n        <source>registration of the modem on the cell tower failed</source>\n        <translation type=\"obsolete\">înregistrarea modemului pe turnul de telefonie mobilă a eșuat</translation>\n    </message>\n    <message>\n        <source>the device firmware is missing</source>\n        <translation type=\"obsolete\">firmware-ul dispozitivului lipsește</translation>\n    </message>\n    <message>\n        <source>the device was removed</source>\n        <translation type=\"obsolete\">dispozitivul a fost scos</translation>\n    </message>\n    <message>\n        <source>the device is sleeping</source>\n        <translation type=\"obsolete\">dispozitivul este în adormire</translation>\n    </message>\n    <message>\n        <source>the connection was removed</source>\n        <translation type=\"obsolete\">conexiunea a fost înlăturată</translation>\n    </message>\n    <message>\n        <source>you requested the action</source>\n        <translation type=\"obsolete\">ați solicitat anularea</translation>\n    </message>\n    <message>\n        <source>the modem was not found</source>\n        <translation type=\"obsolete\">modemul nu a fost găsit</translation>\n    </message>\n    <message>\n        <source>Bluetooth is not available</source>\n        <translation type=\"obsolete\">Bluetooth nu este disponibil</translation>\n    </message>\n    <message>\n        <source>the SIM card is not inserted</source>\n        <translation type=\"obsolete\">cartela SIM nu este inserată</translation>\n    </message>\n    <message>\n        <source>the SIM PIN is required</source>\n        <translation type=\"obsolete\">PIN-ul de la SIM este necesar</translation>\n    </message>\n    <message>\n        <source>the SIM PUK is required</source>\n        <translation type=\"obsolete\">PUK-ul de la SIM este necesar</translation>\n    </message>\n    <message>\n        <source>the SIM PUK is exhausted</source>\n        <translation type=\"obsolete\">PUK-ul cartelei a fost folosit de prea multe ori</translation>\n    </message>\n    <message>\n        <source>ModemManager is not operational on this device</source>\n        <translation type=\"obsolete\">ModemManager nu este funcțional pe acest dispozitiv</translation>\n    </message>\n    <message>\n        <source>the wireless network wasn&apos;t found</source>\n        <translation type=\"obsolete\">rețeaua wireless nu a fost găsită</translation>\n    </message>\n    <message>\n        <source>an unknown error occurred</source>\n        <translation type=\"obsolete\">a survenit o eroare necunoscută</translation>\n    </message>\n    <message>\n        <source>Cellular</source>\n        <translation type=\"obsolete\">Date mobile</translation>\n    </message>\n</context>\n<context>\n    <name>NetworkStatusCenterLeftPane</name>\n    <message>\n        <location filename=\"../statusCenter/networkstatuscenterleftpane.ui\" line=\"35\"/>\n        <source>Network</source>\n        <translation>Rețea</translation>\n    </message>\n</context>\n<context>\n    <name>NetworkStatusCenterPane</name>\n    <message>\n        <location filename=\"../statusCenter/networkstatuscenterpane.ui\" line=\"100\"/>\n        <source>NetworkManager is not operational</source>\n        <translation>Serviciul NetworkManager nu este operațional</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/networkstatuscenterpane.ui\" line=\"110\"/>\n        <source>Contact your system administrator</source>\n        <translation>Contactați-vă administratorul de sistem</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/networkstatuscenterpane.cpp\" line=\"159\"/>\n        <source>Network</source>\n        <translation>Rețea</translation>\n    </message>\n</context>\n<context>\n    <name>OnboardingNetwork</name>\n    <message>\n        <location filename=\"../onboarding/onboardingnetwork.ui\" line=\"35\"/>\n        <location filename=\"../onboarding/onboardingnetwork.cpp\" line=\"96\"/>\n        <source>Network</source>\n        <translation type=\"unfinished\">Rețea</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingnetwork.ui\" line=\"42\"/>\n        <source>Connect to the Internet to get updates and install new software.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingnetwork.ui\" line=\"194\"/>\n        <source>You&apos;re connected!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingnetwork.ui\" line=\"204\"/>\n        <source>Disconnect and connect to a different network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingnetwork.ui\" line=\"275\"/>\n        <source>You can always set up the network connection later.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingnetwork.cpp\" line=\"73\"/>\n        <source>Continue without Internet</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingnetwork.cpp\" line=\"79\"/>\n        <location filename=\"../onboarding/onboardingnetwork.cpp\" line=\"85\"/>\n        <source>Next</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SecurityEapPeap</name>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"35\"/>\n        <source>PEAP</source>\n        <translation>PEAP</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"42\"/>\n        <source>Enter the settings for this network</source>\n        <translation>Completați setările pentru această rețea</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"82\"/>\n        <source>Phase-2 Authentication</source>\n        <translation>Autentificare Phase-2</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"89\"/>\n        <source>Anonymous Identity</source>\n        <translation>Identitate anonimă</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"99\"/>\n        <source>PEAP version</source>\n        <translation>Versiunea PEAP</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"106\"/>\n        <source>Username</source>\n        <translation>Nume de utilizator</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"113\"/>\n        <source>Password</source>\n        <translation>Parolă</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"120\"/>\n        <source>CA Certificate</source>\n        <translation>Certificat CA</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"127\"/>\n        <source>Browse...</source>\n        <translation>Răsfoiește...</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"135\"/>\n        <source>MSCHAPv2</source>\n        <translation>MSCHAPv2</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"140\"/>\n        <source>MD5</source>\n        <translation>MD5</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"145\"/>\n        <source>GTC</source>\n        <translation>GTC</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"171\"/>\n        <source>Automatic</source>\n        <translation>Automat</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"187\"/>\n        <source>Version 0</source>\n        <translation>Versiunea 0</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"200\"/>\n        <source>Version 1</source>\n        <translation>Versiunea 1</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"244\"/>\n        <source>Connect</source>\n        <translation>Conectare</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.cpp\" line=\"107\"/>\n        <source>Certificates (*.pem, *.cer)</source>\n        <translation>Certificate (*.pem,*.cer)</translation>\n    </message>\n</context>\n<context>\n    <name>SecurityEapUnsupported</name>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeapunsupported.ui\" line=\"35\"/>\n        <location filename=\"../statusCenter/eap/securityeapunsupported.ui\" line=\"77\"/>\n        <source>Unsupported Security Settings</source>\n        <translation>Setări de securitate nesuportate</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeapunsupported.ui\" line=\"87\"/>\n        <source>Sorry, theDesk doesn&apos;t support those security settings at the moment. You can try using the terminal to configure this network.</source>\n        <translation>Ne pare rău, theDesk nu suportă acele setări de securitate la acest moment. Puteți folosi terminalul pentru a configura această rețea.</translation>\n    </message>\n</context>\n<context>\n    <name>SimSettingsPopover</name>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"57\"/>\n        <source>Modem Settings</source>\n        <translation>Setări modem</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"88\"/>\n        <source>SIM PIN</source>\n        <translation>PIN cartelă</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"98\"/>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"114\"/>\n        <source>Enable SIM PIN</source>\n        <translation>Activează PIN pentru cartelă</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"105\"/>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"120\"/>\n        <source>Disable SIM PIN</source>\n        <translation>Dezactivează PIN pentru cartelă</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"112\"/>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"164\"/>\n        <source>Change SIM PIN</source>\n        <translation>Schimbă PIN-ul cartelei</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"128\"/>\n        <source>CALLS</source>\n        <translation>APELURI</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"138\"/>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"769\"/>\n        <source>Call Waiting</source>\n        <translation>Apel în așteptare</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"188\"/>\n        <source>IMSI</source>\n        <translation>IMSI</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"195\"/>\n        <source>IMEI</source>\n        <translation>IMEI</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"208\"/>\n        <source>MODEM INFORMATION</source>\n        <translation>INFORMAȚII DESPRE MODEM</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"215\"/>\n        <source>Carrier</source>\n        <translation>Operator</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"340\"/>\n        <source>Enter the new SIM PIN</source>\n        <translation>Introduceți noul PIN pentru SIM</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"537\"/>\n        <source>Enter the current SIM PIN</source>\n        <translation>Introduceți PIN-ul cartelei curent</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"806\"/>\n        <source>Enable Call Waiting</source>\n        <translation>Activează apeluri în așteptare</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"813\"/>\n        <source>Call Waiting allows you to receive calls while another call is currently active.</source>\n        <translation>Apeluri în așteptare vă permite să primiți apeluri în timp ce un alt apel este activ.</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"58\"/>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"59\"/>\n        <source>No SIM card</source>\n        <translation>Fără cartelă SIM</translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"142\"/>\n        <source>You have %n remaining tries</source>\n        <translation>\n            <numerusform>Mai aveți o încercare</numerusform>\n            <numerusform>Mai aveți %n încercări</numerusform>\n            <numerusform>Mai aveți %n încercări</numerusform>\n        </translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"203\"/>\n        <source>Error</source>\n        <translation>Eroare</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"204\"/>\n        <source>Couldn&apos;t get current Call Waiting status from carrier</source>\n        <translation>Nu s-a putut obține starea funcției apeluri în așteptare de la operator</translation>\n    </message>\n</context>\n<context>\n    <name>SwitchManager</name>\n    <message>\n        <location filename=\"../switchmanager.cpp\" line=\"63\"/>\n        <location filename=\"../switchmanager.cpp\" line=\"72\"/>\n        <location filename=\"../switchmanager.cpp\" line=\"122\"/>\n        <source>Flight Mode</source>\n        <translation>Mod avion</translation>\n    </message>\n    <message>\n        <location filename=\"../switchmanager.cpp\" line=\"67\"/>\n        <source>Switch off Flight Mode</source>\n        <translation>Oprește modul avion</translation>\n    </message>\n    <message>\n        <location filename=\"../switchmanager.cpp\" line=\"78\"/>\n        <location filename=\"../switchmanager.cpp\" line=\"123\"/>\n        <source>Wi-Fi</source>\n        <translation>Wi-Fi</translation>\n    </message>\n    <message>\n        <location filename=\"../switchmanager.cpp\" line=\"88\"/>\n        <location filename=\"../switchmanager.cpp\" line=\"124\"/>\n        <source>Cellular</source>\n        <translation>Date mobile</translation>\n    </message>\n</context>\n<context>\n    <name>TetheringSettingsPopover</name>\n    <message>\n        <location filename=\"../statusCenter/popovers/tetheringsettingspopover.ui\" line=\"35\"/>\n        <source>Tethering Settings</source>\n        <translation>Setări pentru Tethering</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/tetheringsettingspopover.ui\" line=\"63\"/>\n        <source>SSID</source>\n        <translation>SSID</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/tetheringsettingspopover.ui\" line=\"73\"/>\n        <source>These settings will be used to set up a Wi-Fi network that other devices can connect to when tethering is enabled.</source>\n        <translation>Aceste setări vor fi folosite pentru a configura o rețea Wi-Fi la care alte dispozitive se pot conecta cât timp tethering-ul este activat.</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/tetheringsettingspopover.ui\" line=\"96\"/>\n        <source>Network Key</source>\n        <translation>Cheie de rețea</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/tetheringsettingspopover.cpp\" line=\"64\"/>\n        <source>Network key needs to be at least 8 characters long</source>\n        <translation>Cheia de rețea trebuie să aibă minim 8 caractere</translation>\n    </message>\n</context>\n<context>\n    <name>UnlockModemPopover</name>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.ui\" line=\"190\"/>\n        <source>Enter the SIM PIN</source>\n        <translation>Introduceți PIN-ul de la SIM</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.ui\" line=\"356\"/>\n        <source>SIM PUK</source>\n        <translation>PUK de la cartela SIM</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.ui\" line=\"363\"/>\n        <source>You&apos;ll also need to provide a new SIM PIN to set once the SIM is unlocked.</source>\n        <translation>Va trebui să furnizați un nou pin pentru SIM atunci când SIM-ul va fi deblocat.</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.ui\" line=\"379\"/>\n        <source>SIM PUK REQUIRED</source>\n        <translation>PUK-ul este necesar</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.ui\" line=\"425\"/>\n        <source>Unlock SIM Card</source>\n        <translation>Deblochează cartela SIM</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.ui\" line=\"456\"/>\n        <source>New SIM PIN</source>\n        <translation>PIN nou</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.ui\" line=\"466\"/>\n        <source>Confirm SIM PIN</source>\n        <translation>Confirmă PIN-ul</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.cpp\" line=\"48\"/>\n        <source>Don&apos;t guess the PUK!</source>\n        <translation>Nu ghici codul PUK!</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.cpp\" line=\"49\"/>\n        <source>Once you exhaust your attempts, the SIM card will be blocked forever.\n\nYou&apos;ll need to contact your carrier for a new SIM card.</source>\n        <translation>După ce se vor termina încercările, cartela SIM va fi blocată pe viață\n\nVa trebui să luați legătura cu operatorul de telefonie mobilă pentru o nouă cartelă SIM.</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.cpp\" line=\"68\"/>\n        <source>If you enter the incorrect PIN again, your SIM card will be PUK locked, and you&apos;ll need to contact your carrier.</source>\n        <translation>Dacă mi introduceți PIN-ul greșit încă o dată, cartela dumneavoastră SIM va fi blocată PUK și va trebui să vă contactați operatorul de telefonie mobilă.</translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.cpp\" line=\"70\"/>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.cpp\" line=\"75\"/>\n        <source>You have %n remaining tries</source>\n        <translation>\n            <numerusform>Mai aveți o încercare</numerusform>\n            <numerusform>Mai aveți %n încercări</numerusform>\n            <numerusform>Mai aveți %n încercări</numerusform>\n        </translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.cpp\" line=\"73\"/>\n        <source>This is your final chance to get the PUK right before you&apos;ll need to obtain a new SIM card from your carrier.</source>\n        <translation>Aceasta este ultima șansă de a introduce codul PUK corect înainte de a obține un nou SIM de la operatorul dvs.</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.cpp\" line=\"78\"/>\n        <source>Contact your carrier to obtain the &lt;b&gt;SIM PUK&lt;/b&gt;, and enter it below to unlock %1.</source>\n        <translation>Contactați-vă operatorul pentru a obține &lt;b&gt;CODUL PUK&lt;/b&gt;, apoi introduceți-l mai jos pentru a debloca %1.</translation>\n    </message>\n</context>\n<context>\n    <name>WifiConnectionEditorPane</name>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/wificonnectioneditorpane.ui\" line=\"35\"/>\n        <location filename=\"../statusCenter/connectionEditor/wificonnectioneditorpane.cpp\" line=\"47\"/>\n        <source>Wi-Fi</source>\n        <translation>Wi-Fi</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/wificonnectioneditorpane.ui\" line=\"59\"/>\n        <source>Mode</source>\n        <translation>Mod</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/wificonnectioneditorpane.ui\" line=\"66\"/>\n        <source>SSID</source>\n        <translation>SSID</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/wificonnectioneditorpane.ui\" line=\"77\"/>\n        <source>Infrastructure</source>\n        <translation>Infrastructură</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/wificonnectioneditorpane.ui\" line=\"82\"/>\n        <source>Ad-Hoc</source>\n        <translation>Ad-Hoc</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/wificonnectioneditorpane.ui\" line=\"87\"/>\n        <source>Access Point</source>\n        <translation>Punct de acces</translation>\n    </message>\n</context>\n<context>\n    <name>WifiDevicePane</name>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"106\"/>\n        <source>STATUS</source>\n        <translation>STARE</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"124\"/>\n        <source>This Device</source>\n        <translation>Acest dispozitiv</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"268\"/>\n        <source>ACTIONS</source>\n        <translation>ACȚIUNI</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"277\"/>\n        <source>Select Network</source>\n        <translation>Selectați rețeaua</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"284\"/>\n        <source>Disconnect</source>\n        <translation>Deconectare</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"348\"/>\n        <source>TETHERING</source>\n        <translation>TETHERING</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"355\"/>\n        <source>Network Key</source>\n        <translation>Cheie de rețea</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"375\"/>\n        <source>Use Tethering to share your internet connection with other devices over Wi-Fi.\n\n**While Tethering is active, you won&apos;t be able to connect to the Internet with Wi-Fi, so you&apos;ll need to make sure you have an alternate way to connect to the Internet.**</source>\n        <translation>Folosiți tethering pentru a vă partaja conexiunea cu alte dispozitive prin Wi-Fi\n\n**Cât timp tethering-ul este activ, nu vă veți putea conecta la internet prin Wi-Fi, deci fiți sigur că aveți o variantă alternativă pentru a vă conecta la internet.**</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"398\"/>\n        <source>Enable Tethering</source>\n        <translation>Activați tethering</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"414\"/>\n        <source>SSID</source>\n        <translation>SSID</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"440\"/>\n        <source>Set Tethering Settings</source>\n        <translation>Configurați tethering</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"489\"/>\n        <source>Wi-Fi is off</source>\n        <translation>Wi-Fi-ul este oprit</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"512\"/>\n        <source>Switch Wi-Fi on to connect to a wireless network</source>\n        <translation>Porniți Wi-Fi-ul pentru a vă conecta la o rețea fără fir</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"522\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"669\"/>\n        <source>Switch Wi-Fi On</source>\n        <translation>Activați Wi-Fi</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"568\"/>\n        <source>Wi-Fi is disabled</source>\n        <translation>Wi-Fi-ul este dezactivat</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"591\"/>\n        <source>Use the Wi-Fi switch to enable Wi-Fi and connect to a network</source>\n        <translation>Folosiți acest buton pentru a activa Wi-Fi și pentru a vă conecta la o rețea</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"636\"/>\n        <source>You&apos;re in flight mode</source>\n        <translation>Sunteți pe mod avion</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"659\"/>\n        <source>Switch Wi-Fi on to connect to a wireless network. Flight mode won&apos;t be disabled.</source>\n        <translation>Activați Wi-Fi pentru a vă conecta la o rețea wireless. Modul avion nu va fi dezactivat.</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"88\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"131\"/>\n        <source>Tethering</source>\n        <translation>Tethering</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"91\"/>\n        <source>Disable Tethering</source>\n        <translation>Dezactivați tethering</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"118\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"143\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"153\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"202\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"203\"/>\n        <source>Wi-Fi</source>\n        <translation>Wi-Fi</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"119\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"230\"/>\n        <source>Disconnected</source>\n        <translation>Deconectat</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"132\"/>\n        <source>Active</source>\n        <translation>Activ</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"138\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"144\"/>\n        <source>Connected</source>\n        <translation>Conectat</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"154\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"239\"/>\n        <source>Failed</source>\n        <translation>Eșuat</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"164\"/>\n        <source>Connection Failure</source>\n        <translation>Eroare la conexiune</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"166\"/>\n        <source>Connecting to %1 failed because %2.</source>\n        <translation>Conectarea la rețeaua %1 a eșuat, deoarece %2.</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"170\"/>\n        <source>the network</source>\n        <translation>rețeaua</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"273\"/>\n        <source>0 Devices</source>\n        <translation>0 dispozitive</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"282\"/>\n        <source>Unknown</source>\n        <translation>Necunoscut</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"452\"/>\n        <source>Couldn&apos;t configure tethering</source>\n        <translation>Nu s-a putut configura tethering-ul</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"478\"/>\n        <source>Couldn&apos;t switch off tethering</source>\n        <translation>Nu s-a putut opri tethering-ul</translation>\n    </message>\n</context>\n<context>\n    <name>WiredChunkUpdater</name>\n    <message>\n        <location filename=\"../chunk/wiredchunkupdater.cpp\" line=\"25\"/>\n        <source>Wired</source>\n        <translation>Pe fir</translation>\n    </message>\n</context>\n<context>\n    <name>WiredDevicePane</name>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.ui\" line=\"35\"/>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"64\"/>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"83\"/>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"90\"/>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"103\"/>\n        <source>Wired</source>\n        <translation>Pe fir</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.ui\" line=\"84\"/>\n        <source>STATUS</source>\n        <translation>STARE</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.ui\" line=\"102\"/>\n        <source>This Device</source>\n        <translation>Acest dispozitiv</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.ui\" line=\"246\"/>\n        <source>ACTIONS</source>\n        <translation>ACȚIUNI</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.ui\" line=\"255\"/>\n        <source>Connect</source>\n        <translation>Conectare</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.ui\" line=\"262\"/>\n        <source>Disconnect</source>\n        <translation>Deconectare</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"84\"/>\n        <source>Disconnected</source>\n        <translation>Deconectat</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"95\"/>\n        <source>Connected</source>\n        <translation>Conectat</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"104\"/>\n        <source>Failed</source>\n        <translation>Eșuat</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"122\"/>\n        <source>Router</source>\n        <translation>Ruter</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"144\"/>\n        <source>Unavailable</source>\n        <translation>Indisponibil</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"148\"/>\n        <source>Connect an Ethernet cable.</source>\n        <translation>Conectați un cablu Ethernet.</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"150\"/>\n        <source>This network is unavailable because %2.</source>\n        <translation>Rețeaua este indisponibilă, deoarece %2.</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"177\"/>\n        <source>Connection Failure</source>\n        <translation>Eroare de conexiune</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"179\"/>\n        <source>Connecting to the network failed because %2.</source>\n        <translation>Conectarea la rețea a eșuat, deoarece %2.</translation>\n    </message>\n</context>\n<context>\n    <name>WiredOnboardingSetup</name>\n    <message>\n        <location filename=\"../onboarding/wiredonboardingsetup.ui\" line=\"57\"/>\n        <source>WIRED</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/wiredonboardingsetup.ui\" line=\"73\"/>\n        <source>Use Wired Connection</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/wiredonboardingsetup.cpp\" line=\"91\"/>\n        <source>Connect to the Internet using a wired network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/wiredonboardingsetup.cpp\" line=\"94\"/>\n        <source>To connect to the Internet using a wired network, connect the network cable.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>WirelessNetworkListDelegate</name>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"85\"/>\n        <source>Connected</source>\n        <translation>Conectat</translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"89\"/>\n        <source>In Range</source>\n        <translation>În aria de acoperire</translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"97\"/>\n        <source>Out of range</source>\n        <translation>În afara ariei de acoperire</translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"107\"/>\n        <source>Not Secured</source>\n        <translation>Nesecurizat</translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"110\"/>\n        <source>Secured with Static WEP</source>\n        <translation>Securizat cu WEP static</translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"113\"/>\n        <source>Secured with Dynamic WEP</source>\n        <translation>Securizat cu WEP dinamic</translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"116\"/>\n        <source>Secured with LEAP</source>\n        <translation>Securizat cu LEAP</translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"119\"/>\n        <source>Secured with WPA-PSK</source>\n        <translation>Securizat cu WPA-PSK</translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"122\"/>\n        <source>Secured with WPA Enterprise</source>\n        <translation>Securizat cu WPA-Enterprise</translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"125\"/>\n        <source>Secured with WPA2-PSK</source>\n        <translation>Securizat cu WPA2-PSK</translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"128\"/>\n        <source>Secured with WPA2 Enterprise</source>\n        <translation>Securizat cu WPA2-Enterprise</translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"131\"/>\n        <source>Secured with WPA3</source>\n        <translation>Securizat cu WPA3</translation>\n    </message>\n</context>\n<context>\n    <name>WirelessNetworkSelectionPopover</name>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"57\"/>\n        <source>Connect to a Wireless Network</source>\n        <translation>Conectați-vă la o rețea wireless</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"107\"/>\n        <source>KNOWN NETWORKS</source>\n        <translation>REȚELE CUNOSCUTE</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"158\"/>\n        <source>NEW NETWORKS</source>\n        <translation>REȚELE NOI</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"181\"/>\n        <source>New Manual Connection</source>\n        <translation>Crează o conexiune manual</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"297\"/>\n        <source>Enter the security key</source>\n        <translation>Introduceți cheia de securitate</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"421\"/>\n        <source>Network Security</source>\n        <translation>Securitatea rețelei</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"454\"/>\n        <source>Select the EAP method. If you don&apos;t know what to select, contact your system administrator for the details.</source>\n        <translation>Selectați metoda EAP. Dacă nu știți ce să selectați, contactați-vă administratorul de sistem pentru mai multe detalii.</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"484\"/>\n        <source>TLS</source>\n        <translation>TLS</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"489\"/>\n        <source>LEAP</source>\n        <translation>LEAP</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"494\"/>\n        <source>PWD</source>\n        <translation>PWD</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"499\"/>\n        <source>FAST</source>\n        <translation>FAST</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"504\"/>\n        <source>TTLS</source>\n        <translation>TTLS</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"509\"/>\n        <source>PEAP</source>\n        <translation>PEAP</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.cpp\" line=\"141\"/>\n        <source>Unknown Security</source>\n        <translation>Securitate necunoscută</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.cpp\" line=\"142\"/>\n        <source>Not sure how to connect to this network. Use manual setup to connect to it.</source>\n        <translation>Nu suntem siguri cum să ne conectăm la această rețea. Folosiți configurarea manuală pentru a vă conecta.</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.cpp\" line=\"217\"/>\n        <source>For network %1</source>\n        <translation>Pentru rețeaua %1</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.cpp\" line=\"218\"/>\n        <source>Edit</source>\n        <translation>Editare</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.cpp\" line=\"235\"/>\n        <source>Forget Network</source>\n        <translation>Uită rețeaua</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.cpp\" line=\"316\"/>\n        <source>Wireless</source>\n        <translation>Fără fir</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.cpp\" line=\"319\"/>\n        <source>Connect</source>\n        <translation>Conectare</translation>\n    </message>\n</context>\n<context>\n    <name>WirelessOnboardingSetup</name>\n    <message>\n        <location filename=\"../onboarding/wirelessonboardingsetup.ui\" line=\"57\"/>\n        <source>WI-FI</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/wirelessonboardingsetup.ui\" line=\"64\"/>\n        <source>Connect to the Internet using a Wi-Fi network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/wirelessonboardingsetup.ui\" line=\"73\"/>\n        <source>Select Network</source>\n        <translation type=\"unfinished\">Selectați rețeaua</translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/NetworkPlugin/translations/sv.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"sv\" sourcelanguage=\"en_US\">\n<context>\n    <name>CellularPane</name>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.ui\" line=\"84\"/>\n        <source>STATUS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.ui\" line=\"102\"/>\n        <source>This Device</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.ui\" line=\"246\"/>\n        <source>ACTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.ui\" line=\"262\"/>\n        <source>Connect</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.ui\" line=\"269\"/>\n        <source>Disconnect</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.ui\" line=\"276\"/>\n        <source>Modem Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"105\"/>\n        <source>Disable Cellular</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"107\"/>\n        <source>Enable Cellular</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"129\"/>\n        <source>Disconnected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"135\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"397\"/>\n        <source>Cellular</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"140\"/>\n        <source>Connected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"149\"/>\n        <source>Failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"209\"/>\n        <source>No SIM Card</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"210\"/>\n        <source>Insert a SIM card to connect to cellular services.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"212\"/>\n        <source>No SIM</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"215\"/>\n        <source>Unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"218\"/>\n        <source>This network is unavailable because %2.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"249\"/>\n        <source>Connection Failure</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"251\"/>\n        <source>Connecting to the network failed because %2.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"326\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"339\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"346\"/>\n        <source>Enter SIM PIN</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"328\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"332\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"344\"/>\n        <source>SIM PIN Required</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"334\"/>\n        <source>A SIM PIN is required to connect to the cellular network.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"357\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"370\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"377\"/>\n        <source>Enter SIM PUK</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"359\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"363\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"375\"/>\n        <source>SIM PUK Required</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"365\"/>\n        <source>A SIM PUK is required to connect to the cellular network.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>Common</name>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"27\"/>\n        <source>the device is no longer managed by NetworkManager</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"29\"/>\n        <source>configuration of the device failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"31\"/>\n        <source>configuration of the device is unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"33\"/>\n        <source>configuration of the device expired</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"35\"/>\n        <source>required secrets were not provided</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"37\"/>\n        <source>the authentication supplicant disconnected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"39\"/>\n        <source>configuration of the authentication supplicant failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"41\"/>\n        <source>the authentication supplicant failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"43\"/>\n        <source>the authentication supplicant timed out</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"45\"/>\n        <source>the PPP network failed to start</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"47\"/>\n        <source>the PPP network was disconnected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"49\"/>\n        <source>the PPP network failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"51\"/>\n        <source>DHCP configuration failed to start</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"53\"/>\n        <source>DHCP configuration had an error</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"55\"/>\n        <source>DHCP configuration failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"67\"/>\n        <source>the modem is busy</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"69\"/>\n        <source>there is no dial tone on the modem</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"71\"/>\n        <source>no carrier is available on the modem</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"73\"/>\n        <source>dialling the number on the modem timed out</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"75\"/>\n        <source>dialling the number on the modem failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"77\"/>\n        <source>initialising the modem failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"79\"/>\n        <source>APN selection failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"81\"/>\n        <source>the modem is not searching</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"83\"/>\n        <source>the cell tower denied registration of the modem</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"85\"/>\n        <source>registration of the modem on the cell tower timed out</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"87\"/>\n        <source>registration of the modem on the cell tower failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"91\"/>\n        <source>the device firmware is missing</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"93\"/>\n        <source>the device was removed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"95\"/>\n        <source>the device is sleeping</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"97\"/>\n        <source>the connection was removed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"99\"/>\n        <source>you requested the action</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"107\"/>\n        <source>the modem was not found</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"109\"/>\n        <source>Bluetooth is not available</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"111\"/>\n        <source>the SIM card is not inserted</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"113\"/>\n        <source>the SIM PIN is required</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"115\"/>\n        <source>the SIM PUK is required</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"118\"/>\n        <source>the SIM PUK is exhausted</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"126\"/>\n        <source>ModemManager is not operational on this device</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"128\"/>\n        <source>the wireless network wasn&apos;t found</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"152\"/>\n        <source>an unknown error occurred</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"198\"/>\n        <source>Cellular</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>ConnectionSelectionPopover</name>\n    <message>\n        <location filename=\"../statusCenter/popovers/connectionselectionpopover.ui\" line=\"35\"/>\n        <source>Select Connection Profile</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/connectionselectionpopover.ui\" line=\"42\"/>\n        <source>Select a connection profile to use</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>DevicePane</name>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/devicepane.ui\" line=\"83\"/>\n        <source>STATUS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/devicepane.ui\" line=\"90\"/>\n        <source>theDesk doesn&apos;t support this network interface, so you won&apos;t be able to configure it fully here.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/devicepane.ui\" line=\"144\"/>\n        <source>ACTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/devicepane.ui\" line=\"153\"/>\n        <source>Disconnect</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>GenericChunkUpdater</name>\n    <message>\n        <location filename=\"../chunk/genericchunkupdater.cpp\" line=\"24\"/>\n        <source>Connected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>IPv4ConnectionEditorPane</name>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"35\"/>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.cpp\" line=\"69\"/>\n        <source>IPv4</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"99\"/>\n        <source>DHCP</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"104\"/>\n        <source>DHCP with manual DNS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"109\"/>\n        <source>Manual</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"114\"/>\n        <source>Shared</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"119\"/>\n        <source>Disabled</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"127\"/>\n        <source>Configuration Method</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"143\"/>\n        <source>Require IPv4</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"208\"/>\n        <source>IP Address</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"215\"/>\n        <source>Default Gateway</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"222\"/>\n        <source>Subnet Length</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"235\"/>\n        <source>ADDRESSES</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"255\"/>\n        <source>Set the IP address that this device will be assigned.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"345\"/>\n        <source>DNS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"352\"/>\n        <source>1.1.1.1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"359\"/>\n        <source>Configure the DNS servers that will be used to resolve domain names.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.cpp\" line=\"217\"/>\n        <source>For DNS server %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.cpp\" line=\"218\"/>\n        <source>Remove</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>NetworkChunk</name>\n    <message>\n        <location filename=\"../chunk/networkchunk.cpp\" line=\"64\"/>\n        <source>Network Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../chunk/networkchunk.cpp\" line=\"103\"/>\n        <source>Disconnected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../chunk/networkchunk.cpp\" line=\"137\"/>\n        <source>Login Required</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../chunk/networkchunk.cpp\" line=\"140\"/>\n        <source>Can&apos;t get to the Internet</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>NetworkConnectionEditor</name>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"90\"/>\n        <source>SETTINGS MODIFIED</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"125\"/>\n        <source>Revert</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"136\"/>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"224\"/>\n        <source>Save</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"195\"/>\n        <source>DONE?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"260\"/>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"303\"/>\n        <source>General</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"327\"/>\n        <source>Connection Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.cpp\" line=\"203\"/>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.cpp\" line=\"231\"/>\n        <source>Couldn&apos;t save settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>NetworkStatusCenterLeftPane</name>\n    <message>\n        <location filename=\"../statusCenter/networkstatuscenterleftpane.ui\" line=\"35\"/>\n        <source>Network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>NetworkStatusCenterPane</name>\n    <message>\n        <location filename=\"../statusCenter/networkstatuscenterpane.ui\" line=\"100\"/>\n        <source>NetworkManager is not operational</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/networkstatuscenterpane.ui\" line=\"110\"/>\n        <source>Contact your system administrator</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/networkstatuscenterpane.cpp\" line=\"159\"/>\n        <source>Network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>OnboardingNetwork</name>\n    <message>\n        <location filename=\"../onboarding/onboardingnetwork.ui\" line=\"35\"/>\n        <location filename=\"../onboarding/onboardingnetwork.cpp\" line=\"96\"/>\n        <source>Network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingnetwork.ui\" line=\"42\"/>\n        <source>Connect to the Internet to get updates and install new software.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingnetwork.ui\" line=\"194\"/>\n        <source>You&apos;re connected!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingnetwork.ui\" line=\"204\"/>\n        <source>Disconnect and connect to a different network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingnetwork.ui\" line=\"275\"/>\n        <source>You can always set up the network connection later.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingnetwork.cpp\" line=\"73\"/>\n        <source>Continue without Internet</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingnetwork.cpp\" line=\"79\"/>\n        <location filename=\"../onboarding/onboardingnetwork.cpp\" line=\"85\"/>\n        <source>Next</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SecurityEapPeap</name>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"35\"/>\n        <source>PEAP</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"42\"/>\n        <source>Enter the settings for this network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"82\"/>\n        <source>Phase-2 Authentication</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"89\"/>\n        <source>Anonymous Identity</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"99\"/>\n        <source>PEAP version</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"106\"/>\n        <source>Username</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"113\"/>\n        <source>Password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"120\"/>\n        <source>CA Certificate</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"127\"/>\n        <source>Browse...</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"135\"/>\n        <source>MSCHAPv2</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"140\"/>\n        <source>MD5</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"145\"/>\n        <source>GTC</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"171\"/>\n        <source>Automatic</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"187\"/>\n        <source>Version 0</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"200\"/>\n        <source>Version 1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"244\"/>\n        <source>Connect</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.cpp\" line=\"107\"/>\n        <source>Certificates (*.pem, *.cer)</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SecurityEapUnsupported</name>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeapunsupported.ui\" line=\"35\"/>\n        <location filename=\"../statusCenter/eap/securityeapunsupported.ui\" line=\"77\"/>\n        <source>Unsupported Security Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeapunsupported.ui\" line=\"87\"/>\n        <source>Sorry, theDesk doesn&apos;t support those security settings at the moment. You can try using the terminal to configure this network.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SimSettingsPopover</name>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"57\"/>\n        <source>Modem Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"88\"/>\n        <source>SIM PIN</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"98\"/>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"114\"/>\n        <source>Enable SIM PIN</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"105\"/>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"120\"/>\n        <source>Disable SIM PIN</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"112\"/>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"164\"/>\n        <source>Change SIM PIN</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"128\"/>\n        <source>CALLS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"138\"/>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"769\"/>\n        <source>Call Waiting</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"188\"/>\n        <source>IMSI</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"195\"/>\n        <source>IMEI</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"208\"/>\n        <source>MODEM INFORMATION</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"215\"/>\n        <source>Carrier</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"340\"/>\n        <source>Enter the new SIM PIN</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"537\"/>\n        <source>Enter the current SIM PIN</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"806\"/>\n        <source>Enable Call Waiting</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"813\"/>\n        <source>Call Waiting allows you to receive calls while another call is currently active.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"58\"/>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"59\"/>\n        <source>No SIM card</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"142\"/>\n        <source>You have %n remaining tries</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n        </translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"203\"/>\n        <source>Error</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"204\"/>\n        <source>Couldn&apos;t get current Call Waiting status from carrier</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SwitchManager</name>\n    <message>\n        <location filename=\"../switchmanager.cpp\" line=\"63\"/>\n        <location filename=\"../switchmanager.cpp\" line=\"72\"/>\n        <location filename=\"../switchmanager.cpp\" line=\"122\"/>\n        <source>Flight Mode</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../switchmanager.cpp\" line=\"67\"/>\n        <source>Switch off Flight Mode</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../switchmanager.cpp\" line=\"78\"/>\n        <location filename=\"../switchmanager.cpp\" line=\"123\"/>\n        <source>Wi-Fi</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../switchmanager.cpp\" line=\"88\"/>\n        <location filename=\"../switchmanager.cpp\" line=\"124\"/>\n        <source>Cellular</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>TetheringSettingsPopover</name>\n    <message>\n        <location filename=\"../statusCenter/popovers/tetheringsettingspopover.ui\" line=\"35\"/>\n        <source>Tethering Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/tetheringsettingspopover.ui\" line=\"63\"/>\n        <source>SSID</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/tetheringsettingspopover.ui\" line=\"73\"/>\n        <source>These settings will be used to set up a Wi-Fi network that other devices can connect to when tethering is enabled.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/tetheringsettingspopover.ui\" line=\"96\"/>\n        <source>Network Key</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/tetheringsettingspopover.cpp\" line=\"64\"/>\n        <source>Network key needs to be at least 8 characters long</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>UnlockModemPopover</name>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.ui\" line=\"190\"/>\n        <source>Enter the SIM PIN</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.ui\" line=\"356\"/>\n        <source>SIM PUK</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.ui\" line=\"363\"/>\n        <source>You&apos;ll also need to provide a new SIM PIN to set once the SIM is unlocked.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.ui\" line=\"379\"/>\n        <source>SIM PUK REQUIRED</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.ui\" line=\"425\"/>\n        <source>Unlock SIM Card</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.ui\" line=\"456\"/>\n        <source>New SIM PIN</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.ui\" line=\"466\"/>\n        <source>Confirm SIM PIN</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.cpp\" line=\"48\"/>\n        <source>Don&apos;t guess the PUK!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.cpp\" line=\"49\"/>\n        <source>Once you exhaust your attempts, the SIM card will be blocked forever.\n\nYou&apos;ll need to contact your carrier for a new SIM card.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.cpp\" line=\"68\"/>\n        <source>If you enter the incorrect PIN again, your SIM card will be PUK locked, and you&apos;ll need to contact your carrier.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.cpp\" line=\"70\"/>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.cpp\" line=\"75\"/>\n        <source>You have %n remaining tries</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n        </translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.cpp\" line=\"73\"/>\n        <source>This is your final chance to get the PUK right before you&apos;ll need to obtain a new SIM card from your carrier.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.cpp\" line=\"78\"/>\n        <source>Contact your carrier to obtain the &lt;b&gt;SIM PUK&lt;/b&gt;, and enter it below to unlock %1.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>WifiConnectionEditorPane</name>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/wificonnectioneditorpane.ui\" line=\"35\"/>\n        <location filename=\"../statusCenter/connectionEditor/wificonnectioneditorpane.cpp\" line=\"47\"/>\n        <source>Wi-Fi</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/wificonnectioneditorpane.ui\" line=\"59\"/>\n        <source>Mode</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/wificonnectioneditorpane.ui\" line=\"66\"/>\n        <source>SSID</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/wificonnectioneditorpane.ui\" line=\"77\"/>\n        <source>Infrastructure</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/wificonnectioneditorpane.ui\" line=\"82\"/>\n        <source>Ad-Hoc</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/wificonnectioneditorpane.ui\" line=\"87\"/>\n        <source>Access Point</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>WifiDevicePane</name>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"106\"/>\n        <source>STATUS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"124\"/>\n        <source>This Device</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"268\"/>\n        <source>ACTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"277\"/>\n        <source>Select Network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"284\"/>\n        <source>Disconnect</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"348\"/>\n        <source>TETHERING</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"355\"/>\n        <source>Network Key</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"375\"/>\n        <source>Use Tethering to share your internet connection with other devices over Wi-Fi.\n\n**While Tethering is active, you won&apos;t be able to connect to the Internet with Wi-Fi, so you&apos;ll need to make sure you have an alternate way to connect to the Internet.**</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"398\"/>\n        <source>Enable Tethering</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"414\"/>\n        <source>SSID</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"440\"/>\n        <source>Set Tethering Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"489\"/>\n        <source>Wi-Fi is off</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"512\"/>\n        <source>Switch Wi-Fi on to connect to a wireless network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"522\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"669\"/>\n        <source>Switch Wi-Fi On</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"568\"/>\n        <source>Wi-Fi is disabled</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"591\"/>\n        <source>Use the Wi-Fi switch to enable Wi-Fi and connect to a network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"636\"/>\n        <source>You&apos;re in flight mode</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"659\"/>\n        <source>Switch Wi-Fi on to connect to a wireless network. Flight mode won&apos;t be disabled.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"88\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"131\"/>\n        <source>Tethering</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"91\"/>\n        <source>Disable Tethering</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"118\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"143\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"153\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"202\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"203\"/>\n        <source>Wi-Fi</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"119\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"230\"/>\n        <source>Disconnected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"132\"/>\n        <source>Active</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"138\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"144\"/>\n        <source>Connected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"154\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"239\"/>\n        <source>Failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"164\"/>\n        <source>Connection Failure</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"166\"/>\n        <source>Connecting to %1 failed because %2.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"170\"/>\n        <source>the network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"273\"/>\n        <source>0 Devices</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"282\"/>\n        <source>Unknown</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"452\"/>\n        <source>Couldn&apos;t configure tethering</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"478\"/>\n        <source>Couldn&apos;t switch off tethering</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>WiredChunkUpdater</name>\n    <message>\n        <location filename=\"../chunk/wiredchunkupdater.cpp\" line=\"25\"/>\n        <source>Wired</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>WiredDevicePane</name>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.ui\" line=\"35\"/>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"64\"/>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"83\"/>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"90\"/>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"103\"/>\n        <source>Wired</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.ui\" line=\"84\"/>\n        <source>STATUS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.ui\" line=\"102\"/>\n        <source>This Device</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.ui\" line=\"246\"/>\n        <source>ACTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.ui\" line=\"255\"/>\n        <source>Connect</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.ui\" line=\"262\"/>\n        <source>Disconnect</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"84\"/>\n        <source>Disconnected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"95\"/>\n        <source>Connected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"104\"/>\n        <source>Failed</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"122\"/>\n        <source>Router</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"144\"/>\n        <source>Unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"148\"/>\n        <source>Connect an Ethernet cable.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"150\"/>\n        <source>This network is unavailable because %2.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"177\"/>\n        <source>Connection Failure</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"179\"/>\n        <source>Connecting to the network failed because %2.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>WiredOnboardingSetup</name>\n    <message>\n        <location filename=\"../onboarding/wiredonboardingsetup.ui\" line=\"57\"/>\n        <source>WIRED</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/wiredonboardingsetup.ui\" line=\"73\"/>\n        <source>Use Wired Connection</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/wiredonboardingsetup.cpp\" line=\"91\"/>\n        <source>Connect to the Internet using a wired network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/wiredonboardingsetup.cpp\" line=\"94\"/>\n        <source>To connect to the Internet using a wired network, connect the network cable.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>WirelessNetworkListDelegate</name>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"85\"/>\n        <source>Connected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"89\"/>\n        <source>In Range</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"97\"/>\n        <source>Out of range</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"107\"/>\n        <source>Not Secured</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"110\"/>\n        <source>Secured with Static WEP</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"113\"/>\n        <source>Secured with Dynamic WEP</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"116\"/>\n        <source>Secured with LEAP</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"119\"/>\n        <source>Secured with WPA-PSK</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"122\"/>\n        <source>Secured with WPA Enterprise</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"125\"/>\n        <source>Secured with WPA2-PSK</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"128\"/>\n        <source>Secured with WPA2 Enterprise</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"131\"/>\n        <source>Secured with WPA3</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>WirelessNetworkSelectionPopover</name>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"57\"/>\n        <source>Connect to a Wireless Network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"107\"/>\n        <source>KNOWN NETWORKS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"158\"/>\n        <source>NEW NETWORKS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"181\"/>\n        <source>New Manual Connection</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"297\"/>\n        <source>Enter the security key</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"421\"/>\n        <source>Network Security</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"454\"/>\n        <source>Select the EAP method. If you don&apos;t know what to select, contact your system administrator for the details.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"484\"/>\n        <source>TLS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"489\"/>\n        <source>LEAP</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"494\"/>\n        <source>PWD</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"499\"/>\n        <source>FAST</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"504\"/>\n        <source>TTLS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"509\"/>\n        <source>PEAP</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.cpp\" line=\"141\"/>\n        <source>Unknown Security</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.cpp\" line=\"142\"/>\n        <source>Not sure how to connect to this network. Use manual setup to connect to it.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.cpp\" line=\"217\"/>\n        <source>For network %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.cpp\" line=\"218\"/>\n        <source>Edit</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.cpp\" line=\"235\"/>\n        <source>Forget Network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.cpp\" line=\"316\"/>\n        <source>Wireless</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.cpp\" line=\"319\"/>\n        <source>Connect</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>WirelessOnboardingSetup</name>\n    <message>\n        <location filename=\"../onboarding/wirelessonboardingsetup.ui\" line=\"57\"/>\n        <source>WI-FI</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/wirelessonboardingsetup.ui\" line=\"64\"/>\n        <source>Connect to the Internet using a Wi-Fi network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/wirelessonboardingsetup.ui\" line=\"73\"/>\n        <source>Select Network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/NetworkPlugin/translations/tr_TR.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"tr_TR\" sourcelanguage=\"en_US\">\n<context>\n    <name>CellularPane</name>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.ui\" line=\"84\"/>\n        <source>STATUS</source>\n        <translation>DURUM</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.ui\" line=\"102\"/>\n        <source>This Device</source>\n        <translation>Bu Cihaz</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.ui\" line=\"246\"/>\n        <source>ACTIONS</source>\n        <translation>HAREKETLER</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.ui\" line=\"262\"/>\n        <source>Connect</source>\n        <translation>Bağlan</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.ui\" line=\"269\"/>\n        <source>Disconnect</source>\n        <translation>Bağlantıyı kes</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"135\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"397\"/>\n        <source>Cellular</source>\n        <translation>Hücresel</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"129\"/>\n        <source>Disconnected</source>\n        <translation>Bağlantı kesildi</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"140\"/>\n        <source>Connected</source>\n        <translation>Bağlandı</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"149\"/>\n        <source>Failed</source>\n        <translation>Yanlış oldu</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"215\"/>\n        <source>Unavailable</source>\n        <translation>Kullanım dışı</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"218\"/>\n        <source>This network is unavailable because %2.</source>\n        <translation>Bu ağ kullanılamıyor çünkü %2.</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"249\"/>\n        <source>Connection Failure</source>\n        <translation>Bağlantı hatası</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"251\"/>\n        <source>Connecting to the network failed because %2.</source>\n        <translation>Ağa bağlanma başarısız oldu çünkü %2.</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"326\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"339\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"346\"/>\n        <source>Enter SIM PIN</source>\n        <translation>SIM PIN kodunu girin</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"328\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"332\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"344\"/>\n        <source>SIM PIN Required</source>\n        <translation>SIM PIN Gerekli</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"357\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"370\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"377\"/>\n        <source>Enter SIM PUK</source>\n        <translation>SIM PUK&apos;unu girin</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"359\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"363\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"375\"/>\n        <source>SIM PUK Required</source>\n        <translation>SIM PUK Gerekli</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"334\"/>\n        <source>A SIM PIN is required to connect to the cellular network.</source>\n        <translation>Hücresel ağa bağlanmak için bir SIM PIN kodu gerekir.</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"365\"/>\n        <source>A SIM PUK is required to connect to the cellular network.</source>\n        <translation>Hücresel ağa bağlanmak için bir SIM PUK gereklidir.</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.ui\" line=\"276\"/>\n        <source>Modem Settings</source>\n        <translation>Modem Ayarları</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"105\"/>\n        <source>Disable Cellular</source>\n        <translation>Hücresel Bağlantıyı Devre Dışı Bırak</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"107\"/>\n        <source>Enable Cellular</source>\n        <translation>Hücresel&apos;i etkinleştir</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"209\"/>\n        <source>No SIM Card</source>\n        <translation>SIM Kart Yok</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"210\"/>\n        <source>Insert a SIM card to connect to cellular services.</source>\n        <translation>Hücresel hizmetlere bağlanmak için bir SIM kart takın.</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"212\"/>\n        <source>No SIM</source>\n        <translation>SIM yok</translation>\n    </message>\n</context>\n<context>\n    <name>Common</name>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"152\"/>\n        <source>an unknown error occurred</source>\n        <translation>bilinmeyen bir hata oluştu</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"27\"/>\n        <source>the device is no longer managed by NetworkManager</source>\n        <translation>cihaz artık NetworkManager tarafından yönetilmiyor</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"29\"/>\n        <source>configuration of the device failed</source>\n        <translation>cihazın konfigürasyonu başarısız oldu</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"31\"/>\n        <source>configuration of the device is unavailable</source>\n        <translation>cihazın konfigürasyonu mevcut değil</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"33\"/>\n        <source>configuration of the device expired</source>\n        <translation>cihazın konfigürasyonunun süresi doldu</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"35\"/>\n        <source>required secrets were not provided</source>\n        <translation>gerekli sırlar sağlanmadı</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"37\"/>\n        <source>the authentication supplicant disconnected</source>\n        <translation>kimlik doğrulama istemcisinin bağlantısı kesildi</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"39\"/>\n        <source>configuration of the authentication supplicant failed</source>\n        <translation>kimlik doğrulama istemcisinin yapılandırması başarısız oldu</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"41\"/>\n        <source>the authentication supplicant failed</source>\n        <translation>kimlik doğrulama isteği başarısız oldu</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"43\"/>\n        <source>the authentication supplicant timed out</source>\n        <translation>kimlik doğrulama isteği zaman aşımına uğradı</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"45\"/>\n        <source>the PPP network failed to start</source>\n        <translation>PPP ağı başlatılamadı</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"47\"/>\n        <source>the PPP network was disconnected</source>\n        <translation>PPP ağının bağlantısı kesildi</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"49\"/>\n        <source>the PPP network failed</source>\n        <translation>PPP ağı başarısız oldu</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"51\"/>\n        <source>DHCP configuration failed to start</source>\n        <translation>DHCP yapılandırması başlatılamadı</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"53\"/>\n        <source>DHCP configuration had an error</source>\n        <translation>DHCP yapılandırmasında bir hata vardı</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"55\"/>\n        <source>DHCP configuration failed</source>\n        <translation>DHCP yapılandırması başarısız oldu</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"67\"/>\n        <source>the modem is busy</source>\n        <translation>modem meşgul</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"69\"/>\n        <source>there is no dial tone on the modem</source>\n        <translation>modemde çevir sesi yok</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"71\"/>\n        <source>no carrier is available on the modem</source>\n        <translation>modemde taşıyıcı yok</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"73\"/>\n        <source>dialling the number on the modem timed out</source>\n        <translation>modemdeki numaranın çevrilmesi zaman aşımına uğradı</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"75\"/>\n        <source>dialling the number on the modem failed</source>\n        <translation>modemdeki numarayı çevirme başarısız oldu</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"77\"/>\n        <source>initialising the modem failed</source>\n        <translation>modemi başlatmak başarısız oldu</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"79\"/>\n        <source>APN selection failed</source>\n        <translation>APN seçimi başarısız oldu</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"81\"/>\n        <source>the modem is not searching</source>\n        <translation>modem aramıyor</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"83\"/>\n        <source>the cell tower denied registration of the modem</source>\n        <translation>baz istasyonu modemin kaydını reddetti</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"85\"/>\n        <source>registration of the modem on the cell tower timed out</source>\n        <translation>modemin baz istasyonuna kaydı zaman aşımına uğradı</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"87\"/>\n        <source>registration of the modem on the cell tower failed</source>\n        <translation>modemin baz istasyonuna kaydı başarısız oldu</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"91\"/>\n        <source>the device firmware is missing</source>\n        <translation>cihaz donanım yazılımı eksik</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"93\"/>\n        <source>the device was removed</source>\n        <translation>cihaz kaldırıldı</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"95\"/>\n        <source>the device is sleeping</source>\n        <translation>cihaz uyuyor</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"97\"/>\n        <source>the connection was removed</source>\n        <translation>bağlantı kaldırıldı</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"99\"/>\n        <source>you requested the action</source>\n        <translation>eylemi sen istedin</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"107\"/>\n        <source>the modem was not found</source>\n        <translation>modem bulunamadı</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"109\"/>\n        <source>Bluetooth is not available</source>\n        <translation>Bluetooth kullanılamıyor</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"111\"/>\n        <source>the SIM card is not inserted</source>\n        <translation>SIM kart takılı değil</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"113\"/>\n        <source>the SIM PIN is required</source>\n        <translation>SIM PIN kodu gerekli</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"115\"/>\n        <source>the SIM PUK is required</source>\n        <translation>SIM PUK gereklidir</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"118\"/>\n        <source>the SIM PUK is exhausted</source>\n        <translation>SIM PUK tükendi</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"126\"/>\n        <source>ModemManager is not operational on this device</source>\n        <translation>ModemManager bu cihazda çalışmıyor</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"128\"/>\n        <source>the wireless network wasn&apos;t found</source>\n        <translation>kablosuz ağ bulunamadı</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"198\"/>\n        <source>Cellular</source>\n        <translation>Hücresel</translation>\n    </message>\n</context>\n<context>\n    <name>ConnectionSelectionPopover</name>\n    <message>\n        <location filename=\"../statusCenter/popovers/connectionselectionpopover.ui\" line=\"35\"/>\n        <source>Select Connection Profile</source>\n        <translation>Bağlantı Profilini Seçin</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/connectionselectionpopover.ui\" line=\"42\"/>\n        <source>Select a connection profile to use</source>\n        <translation>Kullanmak için bir bağlantı profili seçin</translation>\n    </message>\n</context>\n<context>\n    <name>DevicePane</name>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/devicepane.ui\" line=\"144\"/>\n        <source>ACTIONS</source>\n        <translation>HAREKETLER</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/devicepane.ui\" line=\"153\"/>\n        <source>Disconnect</source>\n        <translation>Bağlantıyı kes</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/devicepane.ui\" line=\"83\"/>\n        <source>STATUS</source>\n        <translation>DURUM</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/devicepane.ui\" line=\"90\"/>\n        <source>theDesk doesn&apos;t support this network interface, so you won&apos;t be able to configure it fully here.</source>\n        <translation>theDesk bu ağ arayüzünü desteklemez, bu nedenle burada tam olarak yapılandıramazsınız.</translation>\n    </message>\n</context>\n<context>\n    <name>GenericChunkUpdater</name>\n    <message>\n        <location filename=\"../chunk/genericchunkupdater.cpp\" line=\"24\"/>\n        <source>Connected</source>\n        <translation>Bağlandı</translation>\n    </message>\n</context>\n<context>\n    <name>IPv4ConnectionEditorPane</name>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"35\"/>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.cpp\" line=\"69\"/>\n        <source>IPv4</source>\n        <translation>IPv4</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"99\"/>\n        <source>DHCP</source>\n        <translation>DHCP</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"104\"/>\n        <source>DHCP with manual DNS</source>\n        <translation>Manuel DNS ile DHCP</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"109\"/>\n        <source>Manual</source>\n        <translation>Manuel</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"114\"/>\n        <source>Shared</source>\n        <translation>Paylaşılan</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"119\"/>\n        <source>Disabled</source>\n        <translation>Sakat</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"127\"/>\n        <source>Configuration Method</source>\n        <translation>Yapılandırma Yöntemi</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"143\"/>\n        <source>Require IPv4</source>\n        <translation>IPv4 gerektir</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"208\"/>\n        <source>IP Address</source>\n        <translation>IP adresi</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"215\"/>\n        <source>Default Gateway</source>\n        <translation>Varsayılan giriş</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"222\"/>\n        <source>Subnet Length</source>\n        <translation>Alt Ağ Uzunluğu</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"235\"/>\n        <source>ADDRESSES</source>\n        <translation>ADRESLER</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"352\"/>\n        <source>1.1.1.1</source>\n        <translation>1.1.1.1</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"345\"/>\n        <source>DNS</source>\n        <translation>DNS</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"255\"/>\n        <source>Set the IP address that this device will be assigned.</source>\n        <translation>Bu cihazın atanacağı IP adresini ayarlayın.</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"359\"/>\n        <source>Configure the DNS servers that will be used to resolve domain names.</source>\n        <translation>Etki alanı adlarını çözümlemek için kullanılacak DNS sunucularını yapılandırın.</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.cpp\" line=\"217\"/>\n        <source>For DNS server %1</source>\n        <translation>DNS sunucusu %1 için</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.cpp\" line=\"218\"/>\n        <source>Remove</source>\n        <translation>Sil</translation>\n    </message>\n</context>\n<context>\n    <name>NetworkChunk</name>\n    <message>\n        <location filename=\"../chunk/networkchunk.cpp\" line=\"103\"/>\n        <source>Disconnected</source>\n        <translation>Bağlantı kesildi</translation>\n    </message>\n    <message>\n        <location filename=\"../chunk/networkchunk.cpp\" line=\"137\"/>\n        <source>Login Required</source>\n        <translation>Oturum açmak gereklidir</translation>\n    </message>\n    <message>\n        <location filename=\"../chunk/networkchunk.cpp\" line=\"140\"/>\n        <source>Can&apos;t get to the Internet</source>\n        <translation>İnternete ulaşamıyor</translation>\n    </message>\n    <message>\n        <location filename=\"../chunk/networkchunk.cpp\" line=\"64\"/>\n        <source>Network Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>NetworkConnectionEditor</name>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"260\"/>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"303\"/>\n        <source>General</source>\n        <translation>Genel</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"327\"/>\n        <source>Connection Name</source>\n        <translation>Bağlantı adı</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"195\"/>\n        <source>DONE?</source>\n        <translation>BİTİRDİN Mİ?</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"136\"/>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"224\"/>\n        <source>Save</source>\n        <translation>Kaydet</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.cpp\" line=\"203\"/>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.cpp\" line=\"231\"/>\n        <source>Couldn&apos;t save settings</source>\n        <translation>Ayarlar kaydedilemedi</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"90\"/>\n        <source>SETTINGS MODIFIED</source>\n        <translation>DEĞİŞTİRİLEN AYARLAR</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"125\"/>\n        <source>Revert</source>\n        <translation>Geri döndür</translation>\n    </message>\n</context>\n<context>\n    <name>NetworkPluginCommon</name>\n    <message>\n        <source>the device is no longer managed by NetworkManager</source>\n        <translation type=\"obsolete\">cihaz artık NetworkManager tarafından yönetilmiyor</translation>\n    </message>\n    <message>\n        <source>configuration of the device failed</source>\n        <translation type=\"obsolete\">cihazın konfigürasyonu başarısız oldu</translation>\n    </message>\n    <message>\n        <source>configuration of the device is unavailable</source>\n        <translation type=\"obsolete\">cihazın konfigürasyonu mevcut değil</translation>\n    </message>\n    <message>\n        <source>configuration of the device expired</source>\n        <translation type=\"obsolete\">cihazın konfigürasyonunun süresi doldu</translation>\n    </message>\n    <message>\n        <source>required secrets were not provided</source>\n        <translation type=\"obsolete\">gerekli sırlar sağlanmadı</translation>\n    </message>\n    <message>\n        <source>the authentication supplicant disconnected</source>\n        <translation type=\"obsolete\">kimlik doğrulama istemcisinin bağlantısı kesildi</translation>\n    </message>\n    <message>\n        <source>configuration of the authentication supplicant failed</source>\n        <translation type=\"obsolete\">kimlik doğrulama istemcisinin yapılandırması başarısız oldu</translation>\n    </message>\n    <message>\n        <source>the authentication supplicant failed</source>\n        <translation type=\"obsolete\">kimlik doğrulama isteği başarısız oldu</translation>\n    </message>\n    <message>\n        <source>the authentication supplicant timed out</source>\n        <translation type=\"obsolete\">kimlik doğrulama isteği zaman aşımına uğradı</translation>\n    </message>\n    <message>\n        <source>the PPP network failed to start</source>\n        <translation type=\"obsolete\">PPP ağı başlatılamadı</translation>\n    </message>\n    <message>\n        <source>the PPP network was disconnected</source>\n        <translation type=\"obsolete\">PPP ağının bağlantısı kesildi</translation>\n    </message>\n    <message>\n        <source>the PPP network failed</source>\n        <translation type=\"obsolete\">PPP ağı başarısız oldu</translation>\n    </message>\n    <message>\n        <source>DHCP configuration failed to start</source>\n        <translation type=\"obsolete\">DHCP yapılandırması başlatılamadı</translation>\n    </message>\n    <message>\n        <source>DHCP configuration had an error</source>\n        <translation type=\"obsolete\">DHCP yapılandırmasında bir hata vardı</translation>\n    </message>\n    <message>\n        <source>DHCP configuration failed</source>\n        <translation type=\"obsolete\">DHCP yapılandırması başarısız oldu</translation>\n    </message>\n    <message>\n        <source>the modem is busy</source>\n        <translation type=\"obsolete\">modem meşgul</translation>\n    </message>\n    <message>\n        <source>there is no dial tone on the modem</source>\n        <translation type=\"obsolete\">modemde çevir sesi yok</translation>\n    </message>\n    <message>\n        <source>no carrier is available on the modem</source>\n        <translation type=\"obsolete\">modemde taşıyıcı yok</translation>\n    </message>\n    <message>\n        <source>dialling the number on the modem timed out</source>\n        <translation type=\"obsolete\">modemdeki numaranın çevrilmesi zaman aşımına uğradı</translation>\n    </message>\n    <message>\n        <source>dialling the number on the modem failed</source>\n        <translation type=\"obsolete\">modemdeki numarayı çevirme başarısız oldu</translation>\n    </message>\n    <message>\n        <source>initialising the modem failed</source>\n        <translation type=\"obsolete\">modemi başlatmak başarısız oldu</translation>\n    </message>\n    <message>\n        <source>APN selection failed</source>\n        <translation type=\"obsolete\">APN seçimi başarısız oldu</translation>\n    </message>\n    <message>\n        <source>the modem is not searching</source>\n        <translation type=\"obsolete\">modem aramıyor</translation>\n    </message>\n    <message>\n        <source>the cell tower denied registration of the modem</source>\n        <translation type=\"obsolete\">baz istasyonu modemin kaydını reddetti</translation>\n    </message>\n    <message>\n        <source>registration of the modem on the cell tower timed out</source>\n        <translation type=\"obsolete\">modemin baz istasyonuna kaydı zaman aşımına uğradı</translation>\n    </message>\n    <message>\n        <source>registration of the modem on the cell tower failed</source>\n        <translation type=\"obsolete\">modemin baz istasyonuna kaydı başarısız oldu</translation>\n    </message>\n    <message>\n        <source>the device firmware is missing</source>\n        <translation type=\"obsolete\">cihaz donanım yazılımı eksik</translation>\n    </message>\n    <message>\n        <source>the device was removed</source>\n        <translation type=\"obsolete\">cihaz kaldırıldı</translation>\n    </message>\n    <message>\n        <source>the device is sleeping</source>\n        <translation type=\"obsolete\">cihaz uyuyor</translation>\n    </message>\n    <message>\n        <source>the connection was removed</source>\n        <translation type=\"obsolete\">bağlantı kaldırıldı</translation>\n    </message>\n    <message>\n        <source>you requested the action</source>\n        <translation type=\"obsolete\">eylemi sen istedin</translation>\n    </message>\n    <message>\n        <source>the modem was not found</source>\n        <translation type=\"obsolete\">modem bulunamadı</translation>\n    </message>\n    <message>\n        <source>Bluetooth is not available</source>\n        <translation type=\"obsolete\">Bluetooth kullanılamıyor</translation>\n    </message>\n    <message>\n        <source>the SIM card is not inserted</source>\n        <translation type=\"obsolete\">SIM kart takılı değil</translation>\n    </message>\n    <message>\n        <source>the SIM PIN is required</source>\n        <translation type=\"obsolete\">SIM PIN kodu gerekli</translation>\n    </message>\n    <message>\n        <source>the SIM PUK is required</source>\n        <translation type=\"obsolete\">SIM PUK gereklidir</translation>\n    </message>\n    <message>\n        <source>the SIM PUK is exhausted</source>\n        <translation type=\"obsolete\">SIM PUK tükendi</translation>\n    </message>\n    <message>\n        <source>ModemManager is not operational on this device</source>\n        <translation type=\"obsolete\">ModemManager bu cihazda çalışmıyor</translation>\n    </message>\n    <message>\n        <source>the wireless network wasn&apos;t found</source>\n        <translation type=\"obsolete\">kablosuz ağ bulunamadı</translation>\n    </message>\n    <message>\n        <source>an unknown error occurred</source>\n        <translation type=\"obsolete\">bilinmeyen bir hata oluştu</translation>\n    </message>\n    <message>\n        <source>Cellular</source>\n        <translation type=\"obsolete\">Hücresel</translation>\n    </message>\n</context>\n<context>\n    <name>NetworkStatusCenterLeftPane</name>\n    <message>\n        <location filename=\"../statusCenter/networkstatuscenterleftpane.ui\" line=\"35\"/>\n        <source>Network</source>\n        <translation>Ağ</translation>\n    </message>\n</context>\n<context>\n    <name>NetworkStatusCenterPane</name>\n    <message>\n        <location filename=\"../statusCenter/networkstatuscenterpane.cpp\" line=\"159\"/>\n        <source>Network</source>\n        <translation>Ağ</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/networkstatuscenterpane.ui\" line=\"100\"/>\n        <source>NetworkManager is not operational</source>\n        <translation>NetworkManager çalışmıyor</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/networkstatuscenterpane.ui\" line=\"110\"/>\n        <source>Contact your system administrator</source>\n        <translation>Sistem yöneticinizle iletişime geçin</translation>\n    </message>\n</context>\n<context>\n    <name>OnboardingNetwork</name>\n    <message>\n        <location filename=\"../onboarding/onboardingnetwork.ui\" line=\"35\"/>\n        <location filename=\"../onboarding/onboardingnetwork.cpp\" line=\"96\"/>\n        <source>Network</source>\n        <translation type=\"unfinished\">Ağ</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingnetwork.ui\" line=\"42\"/>\n        <source>Connect to the Internet to get updates and install new software.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingnetwork.cpp\" line=\"79\"/>\n        <location filename=\"../onboarding/onboardingnetwork.cpp\" line=\"85\"/>\n        <source>Next</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingnetwork.ui\" line=\"194\"/>\n        <source>You&apos;re connected!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingnetwork.ui\" line=\"204\"/>\n        <source>Disconnect and connect to a different network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingnetwork.cpp\" line=\"73\"/>\n        <source>Continue without Internet</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingnetwork.ui\" line=\"275\"/>\n        <source>You can always set up the network connection later.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SecurityEapPeap</name>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"35\"/>\n        <source>PEAP</source>\n        <translation>PEAP</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"42\"/>\n        <source>Enter the settings for this network</source>\n        <translation>Bu ağ için ayarları girin</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"120\"/>\n        <source>CA Certificate</source>\n        <translation>CA Sertifikası</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"89\"/>\n        <source>Anonymous Identity</source>\n        <translation>Anonim Kimlik</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"82\"/>\n        <source>Phase-2 Authentication</source>\n        <translation>2. Aşama Kimlik Doğrulaması</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"135\"/>\n        <source>MSCHAPv2</source>\n        <translation>MSCHAPv2</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"140\"/>\n        <source>MD5</source>\n        <translation>MD5</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"145\"/>\n        <source>GTC</source>\n        <translation>GTC</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"106\"/>\n        <source>Username</source>\n        <translation>Kullanıcı adı</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"113\"/>\n        <source>Password</source>\n        <translation>Şifre</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"244\"/>\n        <source>Connect</source>\n        <translation>Bağlan</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"99\"/>\n        <source>PEAP version</source>\n        <translation>PEAP versiyonu</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"171\"/>\n        <source>Automatic</source>\n        <translation>Otomatik</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"187\"/>\n        <source>Version 0</source>\n        <translation>Sürüm 0</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"200\"/>\n        <source>Version 1</source>\n        <translation>Versiyon 1</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"127\"/>\n        <source>Browse...</source>\n        <translation>Araştır...</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.cpp\" line=\"107\"/>\n        <source>Certificates (*.pem, *.cer)</source>\n        <translation>Sertifikalar (*.pem, *.cer)</translation>\n    </message>\n</context>\n<context>\n    <name>SecurityEapUnsupported</name>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeapunsupported.ui\" line=\"35\"/>\n        <location filename=\"../statusCenter/eap/securityeapunsupported.ui\" line=\"77\"/>\n        <source>Unsupported Security Settings</source>\n        <translation>Desteklenmeyen Güvenlik Ayarları</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeapunsupported.ui\" line=\"87\"/>\n        <source>Sorry, theDesk doesn&apos;t support those security settings at the moment. You can try using the terminal to configure this network.</source>\n        <translation>Üzgünüz, theDesk şu anda bu güvenlik ayarlarını desteklemiyor. Bu ağı yapılandırmak için theTerminal kullanmayı deneyebilirsiniz.</translation>\n    </message>\n</context>\n<context>\n    <name>SimSettingsPopover</name>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"98\"/>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"114\"/>\n        <source>Enable SIM PIN</source>\n        <translation>SIM PIN&apos;ini etkinleştir</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"537\"/>\n        <source>Enter the current SIM PIN</source>\n        <translation>Mevcut SIM PIN kodunu girin</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"105\"/>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"120\"/>\n        <source>Disable SIM PIN</source>\n        <translation>SIM PIN&apos;ini devre dışı bırak</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"112\"/>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"164\"/>\n        <source>Change SIM PIN</source>\n        <translation>SIM PIN kodunu değiştir</translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"142\"/>\n        <source>You have %n remaining tries</source>\n        <translation>\n            <numerusform>%n deneme hakkınız kaldı</numerusform>\n        </translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"340\"/>\n        <source>Enter the new SIM PIN</source>\n        <translation>Yeni SIM PIN kodunu girin</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"57\"/>\n        <source>Modem Settings</source>\n        <translation>Modem Ayarları</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"88\"/>\n        <source>SIM PIN</source>\n        <translation>SIM PIN</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"188\"/>\n        <source>IMSI</source>\n        <translation>IMSI</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"195\"/>\n        <source>IMEI</source>\n        <translation>IMEI</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"208\"/>\n        <source>MODEM INFORMATION</source>\n        <translation>MODEM BİLGİLERİ</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"215\"/>\n        <source>Carrier</source>\n        <translation>Taşımacı</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"58\"/>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"59\"/>\n        <source>No SIM card</source>\n        <translation>SIM Kart Yok</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"128\"/>\n        <source>CALLS</source>\n        <translation>ARAMALAR</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"138\"/>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"769\"/>\n        <source>Call Waiting</source>\n        <translation>Görüşme beklemede</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"806\"/>\n        <source>Enable Call Waiting</source>\n        <translation>Çağrı Bekletmeyi Etkinleştir</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"813\"/>\n        <source>Call Waiting allows you to receive calls while another call is currently active.</source>\n        <translation>Çağrı Bekletme, o anda başka bir çağrı etkinken çağrı almanıza olanak tanır.</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"203\"/>\n        <source>Error</source>\n        <translation>Hata</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"204\"/>\n        <source>Couldn&apos;t get current Call Waiting status from carrier</source>\n        <translation>Operatörden mevcut Çağrı Bekletme durumu alınamadı</translation>\n    </message>\n</context>\n<context>\n    <name>SwitchManager</name>\n    <message>\n        <location filename=\"../switchmanager.cpp\" line=\"63\"/>\n        <location filename=\"../switchmanager.cpp\" line=\"72\"/>\n        <location filename=\"../switchmanager.cpp\" line=\"122\"/>\n        <source>Flight Mode</source>\n        <translation>Uçuş modu</translation>\n    </message>\n    <message>\n        <location filename=\"../switchmanager.cpp\" line=\"78\"/>\n        <location filename=\"../switchmanager.cpp\" line=\"123\"/>\n        <source>Wi-Fi</source>\n        <translation>Wi-Fi</translation>\n    </message>\n    <message>\n        <location filename=\"../switchmanager.cpp\" line=\"88\"/>\n        <location filename=\"../switchmanager.cpp\" line=\"124\"/>\n        <source>Cellular</source>\n        <translation>Hücresel</translation>\n    </message>\n    <message>\n        <location filename=\"../switchmanager.cpp\" line=\"67\"/>\n        <source>Switch off Flight Mode</source>\n        <translation>Uçuş modunu kapatın</translation>\n    </message>\n</context>\n<context>\n    <name>TetheringSettingsPopover</name>\n    <message>\n        <location filename=\"../statusCenter/popovers/tetheringsettingspopover.ui\" line=\"35\"/>\n        <source>Tethering Settings</source>\n        <translation>Bağlama Ayarları</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/tetheringsettingspopover.ui\" line=\"63\"/>\n        <source>SSID</source>\n        <translation>SSID</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/tetheringsettingspopover.ui\" line=\"96\"/>\n        <source>Network Key</source>\n        <translation>Ağ Şifre</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/tetheringsettingspopover.ui\" line=\"73\"/>\n        <source>These settings will be used to set up a Wi-Fi network that other devices can connect to when tethering is enabled.</source>\n        <translation>Bu ayarlar, bağlama etkinleştirildiğinde diğer cihazların bağlanabileceği bir Wi-Fi ağı kurmak için kullanılacaktır.</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/tetheringsettingspopover.cpp\" line=\"64\"/>\n        <source>Network key needs to be at least 8 characters long</source>\n        <translation>Ağ şifresi en az 8 karakter uzunluğunda olmalıdır</translation>\n    </message>\n</context>\n<context>\n    <name>UnlockModemPopover</name>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.ui\" line=\"190\"/>\n        <source>Enter the SIM PIN</source>\n        <translation>SIM PIN kodunu girin</translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.cpp\" line=\"70\"/>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.cpp\" line=\"75\"/>\n        <source>You have %n remaining tries</source>\n        <translation>\n            <numerusform>%n deneme hakkınız kaldı</numerusform>\n        </translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.ui\" line=\"379\"/>\n        <source>SIM PUK REQUIRED</source>\n        <translation>SIM PUK GEREKLİ</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.ui\" line=\"466\"/>\n        <source>Confirm SIM PIN</source>\n        <translation>SIM PIN&apos;ini onaylayın</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.ui\" line=\"356\"/>\n        <source>SIM PUK</source>\n        <translation>SIM PUK</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.ui\" line=\"456\"/>\n        <source>New SIM PIN</source>\n        <translation>Yeni SIM PIN kodu</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.ui\" line=\"363\"/>\n        <source>You&apos;ll also need to provide a new SIM PIN to set once the SIM is unlocked.</source>\n        <translation>Ayrıca, SIM kilidi açıldığında ayarlamak için yeni bir SIM PIN kodu sağlamanız gerekir.</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.ui\" line=\"425\"/>\n        <source>Unlock SIM Card</source>\n        <translation>SIM Kartın Kilidini Açın</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.cpp\" line=\"48\"/>\n        <source>Don&apos;t guess the PUK!</source>\n        <translation>PUK&apos;u tahmin etmeyin!</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.cpp\" line=\"49\"/>\n        <source>Once you exhaust your attempts, the SIM card will be blocked forever.\n\nYou&apos;ll need to contact your carrier for a new SIM card.</source>\n        <translation>Denemelerinizi tükettiğinizde, SIM kart sonsuza kadar bloke olacaktır.\n\nYeni bir SIM kart için operatörünüze başvurmanız gerekecek.</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.cpp\" line=\"78\"/>\n        <source>Contact your carrier to obtain the &lt;b&gt;SIM PUK&lt;/b&gt;, and enter it below to unlock %1.</source>\n        <translation>&lt;b&gt;SIM PUK&lt;/b&gt; almak için operatörünüze başvurun ve %1&apos;in kilidini açmak için aşağıya girin.</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.cpp\" line=\"68\"/>\n        <source>If you enter the incorrect PIN again, your SIM card will be PUK locked, and you&apos;ll need to contact your carrier.</source>\n        <translation>Yanlış PIN kodunu tekrar girerseniz, SIM kartınız PUK ile kilitlenir ve operatörünüze başvurmanız gerekir.</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.cpp\" line=\"73\"/>\n        <source>This is your final chance to get the PUK right before you&apos;ll need to obtain a new SIM card from your carrier.</source>\n        <translation>Bu, operatörünüzden yeni bir SIM kart almanız gerekmeden önce PUK&apos;U almak için son şansınız.</translation>\n    </message>\n</context>\n<context>\n    <name>WifiConnectionEditorPane</name>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/wificonnectioneditorpane.ui\" line=\"35\"/>\n        <location filename=\"../statusCenter/connectionEditor/wificonnectioneditorpane.cpp\" line=\"47\"/>\n        <source>Wi-Fi</source>\n        <translation>Wi-Fi</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/wificonnectioneditorpane.ui\" line=\"66\"/>\n        <source>SSID</source>\n        <translation>SSID</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/wificonnectioneditorpane.ui\" line=\"59\"/>\n        <source>Mode</source>\n        <translation>Mod</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/wificonnectioneditorpane.ui\" line=\"77\"/>\n        <source>Infrastructure</source>\n        <translation>Altyapı</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/wificonnectioneditorpane.ui\" line=\"82\"/>\n        <source>Ad-Hoc</source>\n        <translation>Özel</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/wificonnectioneditorpane.ui\" line=\"87\"/>\n        <source>Access Point</source>\n        <translation>Yönlendirici</translation>\n    </message>\n</context>\n<context>\n    <name>WifiDevicePane</name>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"106\"/>\n        <source>STATUS</source>\n        <translation>DURUM</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"268\"/>\n        <source>ACTIONS</source>\n        <translation>HAREKETLER</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"284\"/>\n        <source>Disconnect</source>\n        <translation>Bağlantıyı kes</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"118\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"143\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"153\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"202\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"203\"/>\n        <source>Wi-Fi</source>\n        <translation>Wi-Fi</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"124\"/>\n        <source>This Device</source>\n        <translation>Bu Cihaz</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"119\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"230\"/>\n        <source>Disconnected</source>\n        <translation>Bağlantı kesildi</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"154\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"239\"/>\n        <source>Failed</source>\n        <translation>Yanlış oldu</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"282\"/>\n        <source>Unknown</source>\n        <translation>Bilinmeyen</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"273\"/>\n        <source>0 Devices</source>\n        <translation>0 Cihazler</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"138\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"144\"/>\n        <source>Connected</source>\n        <translation>Bağlandı</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"277\"/>\n        <source>Select Network</source>\n        <translation>Ağ Seçin</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"164\"/>\n        <source>Connection Failure</source>\n        <translation>Bağlantı Hatası</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"166\"/>\n        <source>Connecting to %1 failed because %2.</source>\n        <translation>%1 bağlantısı başarısız oldu çünkü %2.</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"170\"/>\n        <source>the network</source>\n        <translation>ağ</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"414\"/>\n        <source>SSID</source>\n        <translation>SSID</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"355\"/>\n        <source>Network Key</source>\n        <translation>Ağ Çözüm</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"398\"/>\n        <source>Enable Tethering</source>\n        <translation>Tethering&apos;i Etkinleştir</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"348\"/>\n        <source>TETHERING</source>\n        <translation>TETHERING</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"440\"/>\n        <source>Set Tethering Settings</source>\n        <translation>İnternet Bağlantısı Ayarlarını Yapın</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"452\"/>\n        <source>Couldn&apos;t configure tethering</source>\n        <translation>Tethering yapılandırılamadı</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"88\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"131\"/>\n        <source>Tethering</source>\n        <translation>İnternet paylaşımı</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"132\"/>\n        <source>Active</source>\n        <translation>Aktif</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"375\"/>\n        <source>Use Tethering to share your internet connection with other devices over Wi-Fi.\n\n**While Tethering is active, you won&apos;t be able to connect to the Internet with Wi-Fi, so you&apos;ll need to make sure you have an alternate way to connect to the Internet.**</source>\n        <translation>İnternet bağlantınızı Wi-Fi üzerinden diğer cihazlarla paylaşmak için Tethering&apos;i kullanın.\n\n ** Tethering etkinken, Wi-Fi ile İnternet&apos;e bağlanamayacaksınız, bu nedenle İnternet&apos;e bağlanmak için alternatif bir yolunuz olduğundan emin olmanız gerekir. **</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"478\"/>\n        <source>Couldn&apos;t switch off tethering</source>\n        <translation>İnternet paylaşımı kapatılamadı</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"489\"/>\n        <source>Wi-Fi is off</source>\n        <translation>Wi-Fi kapalı</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"522\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"669\"/>\n        <source>Switch Wi-Fi On</source>\n        <translation>Wi-Fi&apos;yi Aç</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"568\"/>\n        <source>Wi-Fi is disabled</source>\n        <translation>Wi-Fi devre dışı bırakılır</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"512\"/>\n        <source>Switch Wi-Fi on to connect to a wireless network</source>\n        <translation>Kablosuz ağa bağlanmak için Wi-Fi&apos;yi açın</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"591\"/>\n        <source>Use the Wi-Fi switch to enable Wi-Fi and connect to a network</source>\n        <translation>Wi-Fi&apos;yi etkinleştirmek ve bir ağa bağlanmak için Wi-Fi anahtarını kullanın</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"636\"/>\n        <source>You&apos;re in flight mode</source>\n        <translation>Uçuş modundasın</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"659\"/>\n        <source>Switch Wi-Fi on to connect to a wireless network. Flight mode won&apos;t be disabled.</source>\n        <translation>Bir kablosuz ağa bağlanmak için Wi-Fi&apos;yi açın. Uçuş modu devre dışı bırakılmayacak.</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"91\"/>\n        <source>Disable Tethering</source>\n        <translation>Tethering&apos;i Devre Dışı Bırak</translation>\n    </message>\n</context>\n<context>\n    <name>WiredChunkUpdater</name>\n    <message>\n        <location filename=\"../chunk/wiredchunkupdater.cpp\" line=\"25\"/>\n        <source>Wired</source>\n        <translation>Kablolu</translation>\n    </message>\n</context>\n<context>\n    <name>WiredDevicePane</name>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.ui\" line=\"84\"/>\n        <source>STATUS</source>\n        <translation>DURUM</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.ui\" line=\"102\"/>\n        <source>This Device</source>\n        <translation>Bu Cihaz</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.ui\" line=\"246\"/>\n        <source>ACTIONS</source>\n        <translation>HAREKETLER</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.ui\" line=\"255\"/>\n        <source>Connect</source>\n        <translation>Bağlan</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.ui\" line=\"262\"/>\n        <source>Disconnect</source>\n        <translation>Bağlantıyı kes</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.ui\" line=\"35\"/>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"64\"/>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"83\"/>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"90\"/>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"103\"/>\n        <source>Wired</source>\n        <translation>Kablolu</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"84\"/>\n        <source>Disconnected</source>\n        <translation>Bağlantı kesildi</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"95\"/>\n        <source>Connected</source>\n        <translation>Bağlandı</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"104\"/>\n        <source>Failed</source>\n        <translation>Yanlış oldu</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"177\"/>\n        <source>Connection Failure</source>\n        <translation>Bağlantı Hatası</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"179\"/>\n        <source>Connecting to the network failed because %2.</source>\n        <translation>Ağa bağlanma başarısız oldu çünkü %2.</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"122\"/>\n        <source>Router</source>\n        <translation>Yönlendirici</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"144\"/>\n        <source>Unavailable</source>\n        <translation>Kullanım dışı</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"148\"/>\n        <source>Connect an Ethernet cable.</source>\n        <translation>Bir Ethernet kablosu bağlayın.</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"150\"/>\n        <source>This network is unavailable because %2.</source>\n        <translation>Bu ağ kullanılamıyor çünkü %2.</translation>\n    </message>\n</context>\n<context>\n    <name>WiredOnboardingSetup</name>\n    <message>\n        <location filename=\"../onboarding/wiredonboardingsetup.ui\" line=\"57\"/>\n        <source>WIRED</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/wiredonboardingsetup.ui\" line=\"73\"/>\n        <source>Use Wired Connection</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/wiredonboardingsetup.cpp\" line=\"94\"/>\n        <source>To connect to the Internet using a wired network, connect the network cable.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/wiredonboardingsetup.cpp\" line=\"91\"/>\n        <source>Connect to the Internet using a wired network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>WirelessNetworkListDelegate</name>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"89\"/>\n        <source>In Range</source>\n        <translation>Aralıkta</translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"97\"/>\n        <source>Out of range</source>\n        <translation>Menzil dışında</translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"107\"/>\n        <source>Not Secured</source>\n        <translation>Güvenli Değil</translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"110\"/>\n        <source>Secured with Static WEP</source>\n        <translation>Statik WEP ile güvenlik altına alındı</translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"113\"/>\n        <source>Secured with Dynamic WEP</source>\n        <translation>Dinamik WEP ile güvenlik altına alındı</translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"116\"/>\n        <source>Secured with LEAP</source>\n        <translation>LEAP ile güvenlik altına alındı</translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"119\"/>\n        <source>Secured with WPA-PSK</source>\n        <translation>WPA-PSK ile güvenlik altına alındı</translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"122\"/>\n        <source>Secured with WPA Enterprise</source>\n        <translation>WPA Enterprise ile güvenlik altına alındı</translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"125\"/>\n        <source>Secured with WPA2-PSK</source>\n        <translation>WPA2-PSK ile güvenlik altına alındı</translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"128\"/>\n        <source>Secured with WPA2 Enterprise</source>\n        <translation>WPA2 Enterprise ile güvenlik altına alındı</translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"85\"/>\n        <source>Connected</source>\n        <translation>Bağlandı</translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"131\"/>\n        <source>Secured with WPA3</source>\n        <translation>WPA3 ile güvenlik altına alındı</translation>\n    </message>\n</context>\n<context>\n    <name>WirelessNetworkSelectionPopover</name>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"57\"/>\n        <source>Connect to a Wireless Network</source>\n        <translation>Bir Kablosuz Ağa Bağlanın</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"107\"/>\n        <source>KNOWN NETWORKS</source>\n        <translation>BİLİNEN AĞLAR</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"158\"/>\n        <source>NEW NETWORKS</source>\n        <translation>YENİ AĞLAR</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"181\"/>\n        <source>New Manual Connection</source>\n        <translation>Yeni Manuel Bağlantı</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.cpp\" line=\"217\"/>\n        <source>For network %1</source>\n        <translation>Ağ 1% için</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.cpp\" line=\"235\"/>\n        <source>Forget Network</source>\n        <translation>Ağı Unut</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"421\"/>\n        <source>Network Security</source>\n        <translation>Ağ güvenliği</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.cpp\" line=\"141\"/>\n        <source>Unknown Security</source>\n        <translation>Bilinmeyen Güvenlik</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.cpp\" line=\"142\"/>\n        <source>Not sure how to connect to this network. Use manual setup to connect to it.</source>\n        <translation>Bu ağa nasıl bağlanacağınızdan emin değilim. Bağlanmak için manuel kurulumu kullanın.</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"297\"/>\n        <source>Enter the security key</source>\n        <translation>Güvenlik anahtarını girin</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"454\"/>\n        <source>Select the EAP method. If you don&apos;t know what to select, contact your system administrator for the details.</source>\n        <translation>EAP yöntemini seçin. Neyi seçeceğinizi bilmiyorsanız, ayrıntılar için sistem yöneticinize başvurun.</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"484\"/>\n        <source>TLS</source>\n        <translation>TLS</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"489\"/>\n        <source>LEAP</source>\n        <translation>LEAP</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"494\"/>\n        <source>PWD</source>\n        <translation>PWD</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"499\"/>\n        <source>FAST</source>\n        <translation>HIZLI</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"504\"/>\n        <source>TTLS</source>\n        <translation>TTLS</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"509\"/>\n        <source>PEAP</source>\n        <translation>PEAP</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.cpp\" line=\"316\"/>\n        <source>Wireless</source>\n        <translation>Kablosuz</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.cpp\" line=\"218\"/>\n        <source>Edit</source>\n        <translation>Düzenle</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.cpp\" line=\"319\"/>\n        <source>Connect</source>\n        <translation>Bağlan</translation>\n    </message>\n</context>\n<context>\n    <name>WirelessOnboardingSetup</name>\n    <message>\n        <location filename=\"../onboarding/wirelessonboardingsetup.ui\" line=\"57\"/>\n        <source>WI-FI</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/wirelessonboardingsetup.ui\" line=\"64\"/>\n        <source>Connect to the Internet using a Wi-Fi network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/wirelessonboardingsetup.ui\" line=\"73\"/>\n        <source>Select Network</source>\n        <translation type=\"unfinished\">Ağ Seçin</translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/NetworkPlugin/translations/vi.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"vi\" sourcelanguage=\"en_US\">\n<context>\n    <name>CellularPane</name>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.ui\" line=\"84\"/>\n        <source>STATUS</source>\n        <translation>TRẠNG THÁI</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.ui\" line=\"102\"/>\n        <source>This Device</source>\n        <translation>Thiết bị này</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.ui\" line=\"246\"/>\n        <source>ACTIONS</source>\n        <translation>HOẠT ĐỘNG</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.ui\" line=\"262\"/>\n        <source>Connect</source>\n        <translation>Kết nối</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.ui\" line=\"269\"/>\n        <source>Disconnect</source>\n        <translation>Ngắt kết nối</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.ui\" line=\"276\"/>\n        <source>Modem Settings</source>\n        <translation>Cài đặt modem</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"105\"/>\n        <source>Disable Cellular</source>\n        <translation>Tắt mạng di động</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"107\"/>\n        <source>Enable Cellular</source>\n        <translation>Bật mạng di động</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"129\"/>\n        <source>Disconnected</source>\n        <translation>Không kết nối</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"135\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"397\"/>\n        <source>Cellular</source>\n        <translation>Mạng di động</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"140\"/>\n        <source>Connected</source>\n        <translation>Đã kết nối</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"149\"/>\n        <source>Failed</source>\n        <translation>Đã thất bại</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"209\"/>\n        <source>No SIM Card</source>\n        <translation>Không có thẻ SIM</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"210\"/>\n        <source>Insert a SIM card to connect to cellular services.</source>\n        <translation>Cài một thẻ SIM để kết nối với dịch vụ di động.</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"212\"/>\n        <source>No SIM</source>\n        <translation>Không có SIM</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"215\"/>\n        <source>Unavailable</source>\n        <translation>Không có sẵn</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"218\"/>\n        <source>This network is unavailable because %2.</source>\n        <translation>Mạng này không có sẵn tại vì %2.</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"249\"/>\n        <source>Connection Failure</source>\n        <translation>Kết nối thất bại</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"251\"/>\n        <source>Connecting to the network failed because %2.</source>\n        <translation>Kết nối với mạng thất bại tại vì %2.</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"326\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"339\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"346\"/>\n        <source>Enter SIM PIN</source>\n        <translation>Điền vào SIM PIN</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"328\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"332\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"344\"/>\n        <source>SIM PIN Required</source>\n        <translation>Cần SIM PIN</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"334\"/>\n        <source>A SIM PIN is required to connect to the cellular network.</source>\n        <translation>Cần mã PIN cho thẻ SIM để kết nối với mạng di động.</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"357\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"370\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"377\"/>\n        <source>Enter SIM PUK</source>\n        <translation>Điền vào SIM PUK</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"359\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"363\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"375\"/>\n        <source>SIM PUK Required</source>\n        <translation>Cần SIM PUK</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"365\"/>\n        <source>A SIM PUK is required to connect to the cellular network.</source>\n        <translation>Cần mã PUK cho thẻ SIM để kết nối với mạng di động.</translation>\n    </message>\n</context>\n<context>\n    <name>Common</name>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"27\"/>\n        <source>the device is no longer managed by NetworkManager</source>\n        <translation>thiết bị này không có quản lý với NetworkManager nũa</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"29\"/>\n        <source>configuration of the device failed</source>\n        <translation>cấu hình thiết bị không thành công</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"31\"/>\n        <source>configuration of the device is unavailable</source>\n        <translation>cấu hình thiết bị không có sẵn</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"33\"/>\n        <source>configuration of the device expired</source>\n        <translation>cấu hình thiết bị hết hạn</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"35\"/>\n        <source>required secrets were not provided</source>\n        <translation>những bí mật không được cung cấp</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"37\"/>\n        <source>the authentication supplicant disconnected</source>\n        <translation>trình xác thực bị ngắt kết nối</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"39\"/>\n        <source>configuration of the authentication supplicant failed</source>\n        <translation>cấu hình trình xác thực không thành công</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"41\"/>\n        <source>the authentication supplicant failed</source>\n        <translation>trình xác thực không thành công</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"43\"/>\n        <source>the authentication supplicant timed out</source>\n        <translation>trình xác thực hết giờ</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"45\"/>\n        <source>the PPP network failed to start</source>\n        <translation>mạng PPP không khởi chạy được</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"47\"/>\n        <source>the PPP network was disconnected</source>\n        <translation>mạng PPP bị ngắt kết nối</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"49\"/>\n        <source>the PPP network failed</source>\n        <translation>mạng PPP không thành công</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"51\"/>\n        <source>DHCP configuration failed to start</source>\n        <translation>cấu hình DHCP không thể bắt đầu</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"53\"/>\n        <source>DHCP configuration had an error</source>\n        <translation>cấu hình DHCP xảy ra lỗi</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"55\"/>\n        <source>DHCP configuration failed</source>\n        <translation>cấu hình DHCP không thành công</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"67\"/>\n        <source>the modem is busy</source>\n        <translation>modem đang bận</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"69\"/>\n        <source>there is no dial tone on the modem</source>\n        <translation>không có âm quay số trên modem</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"71\"/>\n        <source>no carrier is available on the modem</source>\n        <translation>không có âm cung cấp trên modem</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"73\"/>\n        <source>dialling the number on the modem timed out</source>\n        <translation>quay số trên modem mất quá nhiều thời gian</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"75\"/>\n        <source>dialling the number on the modem failed</source>\n        <translation>quay số trên modem không thành công</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"77\"/>\n        <source>initialising the modem failed</source>\n        <translation>khởi tạo modem không thành công</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"79\"/>\n        <source>APN selection failed</source>\n        <translation>hoạt động chọn APN không thành công</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"81\"/>\n        <source>the modem is not searching</source>\n        <translation>modem không tìm kiếm</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"83\"/>\n        <source>the cell tower denied registration of the modem</source>\n        <translation>tháp di động từ chối chi tiết đăng ký của modem</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"85\"/>\n        <source>registration of the modem on the cell tower timed out</source>\n        <translation>hoạt động đăng ký modem trên tháp di động mất quá nhiều thời gian</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"87\"/>\n        <source>registration of the modem on the cell tower failed</source>\n        <translation>hoạt động đăng ký modem trên tháp di động không thành công</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"91\"/>\n        <source>the device firmware is missing</source>\n        <translation>thiếu phần sụn thiết bị</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"93\"/>\n        <source>the device was removed</source>\n        <translation>thiết bị bị tháo ra</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"95\"/>\n        <source>the device is sleeping</source>\n        <translation>thiết bị đang ngủ</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"97\"/>\n        <source>the connection was removed</source>\n        <translation>kết nối bị xóa</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"99\"/>\n        <source>you requested the action</source>\n        <translation>bạn yêu cầu hoạt động này</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"107\"/>\n        <source>the modem was not found</source>\n        <translation>không thể tìm kiếm modem</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"109\"/>\n        <source>Bluetooth is not available</source>\n        <translation>Bluetooth không có sẵn</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"111\"/>\n        <source>the SIM card is not inserted</source>\n        <translation>không có thẻ SIM</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"113\"/>\n        <source>the SIM PIN is required</source>\n        <translation>thiếu mã PIN của SIM</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"115\"/>\n        <source>the SIM PUK is required</source>\n        <translation>thiếu mã PUK của SIM</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"118\"/>\n        <source>the SIM PUK is exhausted</source>\n        <translation>mã PUK của SIM đã hết</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"126\"/>\n        <source>ModemManager is not operational on this device</source>\n        <translation>ModemManager không hoạt động trên thiết bị này</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"128\"/>\n        <source>the wireless network wasn&apos;t found</source>\n        <translation>mạng Wi-Fi không tìm được</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"152\"/>\n        <source>an unknown error occurred</source>\n        <translation>một lỗi không xác định đã xảy ra</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"198\"/>\n        <source>Cellular</source>\n        <translation>Mạng di động</translation>\n    </message>\n</context>\n<context>\n    <name>ConnectionSelectionPopover</name>\n    <message>\n        <location filename=\"../statusCenter/popovers/connectionselectionpopover.ui\" line=\"35\"/>\n        <source>Select Connection Profile</source>\n        <translation>Chọn hồ sơ kết nối</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/connectionselectionpopover.ui\" line=\"42\"/>\n        <source>Select a connection profile to use</source>\n        <translation>Chọn một hồ sơ kết nối để sử dụng</translation>\n    </message>\n</context>\n<context>\n    <name>DevicePane</name>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/devicepane.ui\" line=\"83\"/>\n        <source>STATUS</source>\n        <translation>TRẠNG THÁI</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/devicepane.ui\" line=\"90\"/>\n        <source>theDesk doesn&apos;t support this network interface, so you won&apos;t be able to configure it fully here.</source>\n        <translation>theDesk không hỗ trợ giao diện mạng này, vì vậy bạn sẽ không thể cấu hình nó đầy đủ ở đây.</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/devicepane.ui\" line=\"144\"/>\n        <source>ACTIONS</source>\n        <translation>HOẠT ĐỘNG</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/devicepane.ui\" line=\"153\"/>\n        <source>Disconnect</source>\n        <translation>Ngắt kết nối</translation>\n    </message>\n</context>\n<context>\n    <name>GenericChunkUpdater</name>\n    <message>\n        <location filename=\"../chunk/genericchunkupdater.cpp\" line=\"24\"/>\n        <source>Connected</source>\n        <translation>Đã kết nối</translation>\n    </message>\n</context>\n<context>\n    <name>IPv4ConnectionEditorPane</name>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"35\"/>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.cpp\" line=\"69\"/>\n        <source>IPv4</source>\n        <translation>IPv4</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"99\"/>\n        <source>DHCP</source>\n        <translation>DHCP</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"104\"/>\n        <source>DHCP with manual DNS</source>\n        <translation>DHCP với DNS thủ công</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"109\"/>\n        <source>Manual</source>\n        <translation>Thủ công</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"114\"/>\n        <source>Shared</source>\n        <translation>Bị chia sẻ</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"119\"/>\n        <source>Disabled</source>\n        <translation>Vô hiệu</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"127\"/>\n        <source>Configuration Method</source>\n        <translation>Phương thức cấu hình</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"143\"/>\n        <source>Require IPv4</source>\n        <translation>Yêu cầu IPv4</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"208\"/>\n        <source>IP Address</source>\n        <translation>Địa chỉ IP</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"215\"/>\n        <source>Default Gateway</source>\n        <translation>Máy cổng mặc định</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"222\"/>\n        <source>Subnet Length</source>\n        <translation>Chiều dài mạng con</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"235\"/>\n        <source>ADDRESSES</source>\n        <translation>ĐỊA CHỈ</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"255\"/>\n        <source>Set the IP address that this device will be assigned.</source>\n        <translation>Đặt địa chỉ IP thiết bị này sẽ bị cung cáp với.</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"345\"/>\n        <source>DNS</source>\n        <translation>DNS</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"352\"/>\n        <source>1.1.1.1</source>\n        <translation>1.1.1.1</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"359\"/>\n        <source>Configure the DNS servers that will be used to resolve domain names.</source>\n        <translation>Cấu hình máy chủ DNS sử dụng để phân giải tên miền.</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.cpp\" line=\"217\"/>\n        <source>For DNS server %1</source>\n        <translation>Cho máy chủ DNS %1</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.cpp\" line=\"218\"/>\n        <source>Remove</source>\n        <translation>Xóa</translation>\n    </message>\n</context>\n<context>\n    <name>NetworkChunk</name>\n    <message>\n        <location filename=\"../chunk/networkchunk.cpp\" line=\"64\"/>\n        <source>Network Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../chunk/networkchunk.cpp\" line=\"103\"/>\n        <source>Disconnected</source>\n        <translation>Đã ngắt kết nối</translation>\n    </message>\n    <message>\n        <location filename=\"../chunk/networkchunk.cpp\" line=\"137\"/>\n        <source>Login Required</source>\n        <translation>Cần đăng nhập</translation>\n    </message>\n    <message>\n        <location filename=\"../chunk/networkchunk.cpp\" line=\"140\"/>\n        <source>Can&apos;t get to the Internet</source>\n        <translation>Không thể truy cập Internet</translation>\n    </message>\n</context>\n<context>\n    <name>NetworkConnectionEditor</name>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"90\"/>\n        <source>SETTINGS MODIFIED</source>\n        <translation>CÀI ĐẶT BỊ THAY ĐỔI</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"125\"/>\n        <source>Revert</source>\n        <translation>Khôi phục lại</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"136\"/>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"224\"/>\n        <source>Save</source>\n        <translation>Lưu</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"195\"/>\n        <source>DONE?</source>\n        <translation>XONG CHƯA?</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"260\"/>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"303\"/>\n        <source>General</source>\n        <translation>Chung</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"327\"/>\n        <source>Connection Name</source>\n        <translation>Tên kết nối</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.cpp\" line=\"203\"/>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.cpp\" line=\"231\"/>\n        <source>Couldn&apos;t save settings</source>\n        <translation>Không thể lưu cài đặt</translation>\n    </message>\n</context>\n<context>\n    <name>NetworkPluginCommon</name>\n    <message>\n        <source>the device is no longer managed by NetworkManager</source>\n        <translation type=\"obsolete\">thiết bị này không có quản lý với NetworkManager nũa</translation>\n    </message>\n    <message>\n        <source>configuration of the device failed</source>\n        <translation type=\"obsolete\">cấu hình thiết bị không thành công</translation>\n    </message>\n    <message>\n        <source>configuration of the device is unavailable</source>\n        <translation type=\"obsolete\">cấu hình thiết bị không có sẵn</translation>\n    </message>\n    <message>\n        <source>configuration of the device expired</source>\n        <translation type=\"obsolete\">cấu hình thiết bị hết hạn</translation>\n    </message>\n    <message>\n        <source>required secrets were not provided</source>\n        <translation type=\"obsolete\">những bí mật không được cung cấp</translation>\n    </message>\n    <message>\n        <source>the authentication supplicant disconnected</source>\n        <translation type=\"obsolete\">trình xác thực bị ngắt kết nối</translation>\n    </message>\n    <message>\n        <source>configuration of the authentication supplicant failed</source>\n        <translation type=\"obsolete\">cấu hình trình xác thực không thành công</translation>\n    </message>\n    <message>\n        <source>the authentication supplicant failed</source>\n        <translation type=\"obsolete\">trình xác thực không thành công</translation>\n    </message>\n    <message>\n        <source>the authentication supplicant timed out</source>\n        <translation type=\"obsolete\">trình xác thực hết giờ</translation>\n    </message>\n    <message>\n        <source>the PPP network failed to start</source>\n        <translation type=\"obsolete\">mạng PPP không khởi chạy được</translation>\n    </message>\n    <message>\n        <source>the PPP network was disconnected</source>\n        <translation type=\"obsolete\">mạng PPP bị ngắt kết nối</translation>\n    </message>\n    <message>\n        <source>the PPP network failed</source>\n        <translation type=\"obsolete\">mạng PPP không thành công</translation>\n    </message>\n    <message>\n        <source>DHCP configuration failed to start</source>\n        <translation type=\"obsolete\">cấu hình DHCP không thể bắt đầu</translation>\n    </message>\n    <message>\n        <source>DHCP configuration had an error</source>\n        <translation type=\"obsolete\">cấu hình DHCP xảy ra lỗi</translation>\n    </message>\n    <message>\n        <source>DHCP configuration failed</source>\n        <translation type=\"obsolete\">cấu hình DHCP không thành công</translation>\n    </message>\n    <message>\n        <source>the modem is busy</source>\n        <translation type=\"obsolete\">modem đang bận</translation>\n    </message>\n    <message>\n        <source>there is no dial tone on the modem</source>\n        <translation type=\"obsolete\">không có âm quay số trên modem</translation>\n    </message>\n    <message>\n        <source>no carrier is available on the modem</source>\n        <translation type=\"obsolete\">không có âm cung cấp trên modem</translation>\n    </message>\n    <message>\n        <source>dialling the number on the modem timed out</source>\n        <translation type=\"obsolete\">quay số trên modem mất quá nhiều thời gian</translation>\n    </message>\n    <message>\n        <source>dialling the number on the modem failed</source>\n        <translation type=\"obsolete\">quay số trên modem không thành công</translation>\n    </message>\n    <message>\n        <source>initialising the modem failed</source>\n        <translation type=\"obsolete\">khởi tạo modem không thành công</translation>\n    </message>\n    <message>\n        <source>APN selection failed</source>\n        <translation type=\"obsolete\">hoạt động chọn APN không thành công</translation>\n    </message>\n    <message>\n        <source>the modem is not searching</source>\n        <translation type=\"obsolete\">modem không tìm kiếm</translation>\n    </message>\n    <message>\n        <source>the cell tower denied registration of the modem</source>\n        <translation type=\"obsolete\">tháp di động từ chối chi tiết đăng ký của modem</translation>\n    </message>\n    <message>\n        <source>registration of the modem on the cell tower timed out</source>\n        <translation type=\"obsolete\">hoạt động đăng ký modem trên tháp di động mất quá nhiều thời gian</translation>\n    </message>\n    <message>\n        <source>registration of the modem on the cell tower failed</source>\n        <translation type=\"obsolete\">hoạt động đăng ký modem trên tháp di động không thành công</translation>\n    </message>\n    <message>\n        <source>the device firmware is missing</source>\n        <translation type=\"obsolete\">thiếu phần sụn thiết bị</translation>\n    </message>\n    <message>\n        <source>the device was removed</source>\n        <translation type=\"obsolete\">thiết bị bị tháo ra</translation>\n    </message>\n    <message>\n        <source>the device is sleeping</source>\n        <translation type=\"obsolete\">thiết bị đang ngủ</translation>\n    </message>\n    <message>\n        <source>the connection was removed</source>\n        <translation type=\"obsolete\">kết nối bị xóa</translation>\n    </message>\n    <message>\n        <source>you requested the action</source>\n        <translation type=\"obsolete\">bạn yêu cầu hoạt động này</translation>\n    </message>\n    <message>\n        <source>the modem was not found</source>\n        <translation type=\"obsolete\">không thể tìm kiếm modem</translation>\n    </message>\n    <message>\n        <source>Bluetooth is not available</source>\n        <translation type=\"obsolete\">Bluetooth không có sẵn</translation>\n    </message>\n    <message>\n        <source>the SIM card is not inserted</source>\n        <translation type=\"obsolete\">không có thẻ SIM</translation>\n    </message>\n    <message>\n        <source>the SIM PIN is required</source>\n        <translation type=\"obsolete\">thiếu mã PIN của SIM</translation>\n    </message>\n    <message>\n        <source>the SIM PUK is required</source>\n        <translation type=\"obsolete\">thiếu mã PUK của SIM</translation>\n    </message>\n    <message>\n        <source>the SIM PUK is exhausted</source>\n        <translation type=\"obsolete\">mã PUK của SIM đã hết</translation>\n    </message>\n    <message>\n        <source>ModemManager is not operational on this device</source>\n        <translation type=\"obsolete\">ModemManager không hoạt động trên thiết bị này</translation>\n    </message>\n    <message>\n        <source>the wireless network wasn&apos;t found</source>\n        <translation type=\"obsolete\">mạng Wi-Fi không tìm được</translation>\n    </message>\n    <message>\n        <source>an unknown error occurred</source>\n        <translation type=\"obsolete\">một lỗi không xác định đã xảy ra</translation>\n    </message>\n    <message>\n        <source>Cellular</source>\n        <translation type=\"obsolete\">Mạng di động</translation>\n    </message>\n</context>\n<context>\n    <name>NetworkStatusCenterLeftPane</name>\n    <message>\n        <location filename=\"../statusCenter/networkstatuscenterleftpane.ui\" line=\"35\"/>\n        <source>Network</source>\n        <translation>Mạng</translation>\n    </message>\n</context>\n<context>\n    <name>NetworkStatusCenterPane</name>\n    <message>\n        <location filename=\"../statusCenter/networkstatuscenterpane.ui\" line=\"100\"/>\n        <source>NetworkManager is not operational</source>\n        <translation>NetworkManager không có hoạt động</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/networkstatuscenterpane.ui\" line=\"110\"/>\n        <source>Contact your system administrator</source>\n        <translation>Vui lòng liên hệ với quản trị hệ thống của bạn</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/networkstatuscenterpane.cpp\" line=\"159\"/>\n        <source>Network</source>\n        <translation>Mạng</translation>\n    </message>\n</context>\n<context>\n    <name>OnboardingNetwork</name>\n    <message>\n        <location filename=\"../onboarding/onboardingnetwork.ui\" line=\"35\"/>\n        <location filename=\"../onboarding/onboardingnetwork.cpp\" line=\"96\"/>\n        <source>Network</source>\n        <translation>Mạng</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingnetwork.ui\" line=\"42\"/>\n        <source>Connect to the Internet to get updates and install new software.</source>\n        <translation>Kết nối với Internet để nhận các cập nhật và cài đặt phần mềm mới.</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingnetwork.ui\" line=\"194\"/>\n        <source>You&apos;re connected!</source>\n        <translation>Bạn đã kết nối!</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingnetwork.ui\" line=\"204\"/>\n        <source>Disconnect and connect to a different network</source>\n        <translation>Ngắt kết nối và kết nối với mạng khác</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingnetwork.ui\" line=\"275\"/>\n        <source>You can always set up the network connection later.</source>\n        <translation>Bạn có thể thiết lập cài đặt kết nối sau.</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingnetwork.cpp\" line=\"73\"/>\n        <source>Continue without Internet</source>\n        <translation>Tiếp tục mà không có Internet</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingnetwork.cpp\" line=\"79\"/>\n        <location filename=\"../onboarding/onboardingnetwork.cpp\" line=\"85\"/>\n        <source>Next</source>\n        <translation>Tiếp</translation>\n    </message>\n</context>\n<context>\n    <name>SecurityEapPeap</name>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"35\"/>\n        <source>PEAP</source>\n        <translation>PEAP</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"42\"/>\n        <source>Enter the settings for this network</source>\n        <translation>Điền vào cài đặt cho mạng này</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"82\"/>\n        <source>Phase-2 Authentication</source>\n        <translation>Xác thực buớc 2</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"89\"/>\n        <source>Anonymous Identity</source>\n        <translation>Thực thể vô danh</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"99\"/>\n        <source>PEAP version</source>\n        <translation>Phiên bản PEAP</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"106\"/>\n        <source>Username</source>\n        <translation>Tên tài khoản</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"113\"/>\n        <source>Password</source>\n        <translation>Mật khẩu</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"120\"/>\n        <source>CA Certificate</source>\n        <translation>Chứng nhận CA</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"127\"/>\n        <source>Browse...</source>\n        <translation>Duyệt...</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"135\"/>\n        <source>MSCHAPv2</source>\n        <translation>MSCHAPv2</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"140\"/>\n        <source>MD5</source>\n        <translation>MD5</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"145\"/>\n        <source>GTC</source>\n        <translation>GTC</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"171\"/>\n        <source>Automatic</source>\n        <translation>Tự động</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"187\"/>\n        <source>Version 0</source>\n        <translation>Phiên bản 0</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"200\"/>\n        <source>Version 1</source>\n        <translation>Phiên bản 1</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"244\"/>\n        <source>Connect</source>\n        <translation>Kết nối</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.cpp\" line=\"107\"/>\n        <source>Certificates (*.pem, *.cer)</source>\n        <translation>Chứng nhận (*.pem, *.cer)</translation>\n    </message>\n</context>\n<context>\n    <name>SecurityEapUnsupported</name>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeapunsupported.ui\" line=\"35\"/>\n        <location filename=\"../statusCenter/eap/securityeapunsupported.ui\" line=\"77\"/>\n        <source>Unsupported Security Settings</source>\n        <translation>Không hỗ trợ cài đặt bảo mật</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeapunsupported.ui\" line=\"87\"/>\n        <source>Sorry, theDesk doesn&apos;t support those security settings at the moment. You can try using the terminal to configure this network.</source>\n        <translation>Rất tiếc, theDesk không có hỗ trợ cài đặt bảo mật đó ngay bây giờ. Bạn nên sử dụng thiết bị đầu cuối để cấu hình mạng này.</translation>\n    </message>\n</context>\n<context>\n    <name>SimSettingsPopover</name>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"57\"/>\n        <source>Modem Settings</source>\n        <translation>Cài đặt modem</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"88\"/>\n        <source>SIM PIN</source>\n        <translation>SIM PIN</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"98\"/>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"114\"/>\n        <source>Enable SIM PIN</source>\n        <translation>Bật SIM PIN</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"105\"/>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"120\"/>\n        <source>Disable SIM PIN</source>\n        <translation>Tắt SIM PIN</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"112\"/>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"164\"/>\n        <source>Change SIM PIN</source>\n        <translation>Thay đổi SIM PIN</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"128\"/>\n        <source>CALLS</source>\n        <translation>CUỘC GỌI</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"138\"/>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"769\"/>\n        <source>Call Waiting</source>\n        <translation>Chờ cuộc gọi</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"188\"/>\n        <source>IMSI</source>\n        <translation>IMSI</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"195\"/>\n        <source>IMEI</source>\n        <translation>IMEI</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"208\"/>\n        <source>MODEM INFORMATION</source>\n        <translation>THÔNG TIN VỀ MODEM</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"215\"/>\n        <source>Carrier</source>\n        <translation>Nhà cung cấp mạng</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"340\"/>\n        <source>Enter the new SIM PIN</source>\n        <translation>Điền vào SIM PIN mới</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"537\"/>\n        <source>Enter the current SIM PIN</source>\n        <translation>Điền vào SIM PIN hiện tại</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"806\"/>\n        <source>Enable Call Waiting</source>\n        <translation>Bật chờ cuộc gọi</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"813\"/>\n        <source>Call Waiting allows you to receive calls while another call is currently active.</source>\n        <translation>Chờ cuộc gọi cho bạn nhận cuộc gọi trong khi một cuộc gọi khác hiện đang diễn ra.</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"58\"/>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"59\"/>\n        <source>No SIM card</source>\n        <translation>Không có thẻ SIM</translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"142\"/>\n        <source>You have %n remaining tries</source>\n        <translation>\n            <numerusform>Bạn còn %n lần thử</numerusform>\n        </translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"203\"/>\n        <source>Error</source>\n        <translation>Lỗi</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"204\"/>\n        <source>Couldn&apos;t get current Call Waiting status from carrier</source>\n        <translation>Không thể nhận trạng thái chờ cuộc gọi từ nhà cung cấp mạng</translation>\n    </message>\n</context>\n<context>\n    <name>SwitchManager</name>\n    <message>\n        <location filename=\"../switchmanager.cpp\" line=\"63\"/>\n        <location filename=\"../switchmanager.cpp\" line=\"72\"/>\n        <location filename=\"../switchmanager.cpp\" line=\"122\"/>\n        <source>Flight Mode</source>\n        <translation>Chế độ máy bay</translation>\n    </message>\n    <message>\n        <location filename=\"../switchmanager.cpp\" line=\"67\"/>\n        <source>Switch off Flight Mode</source>\n        <translation>Tắt chế độ máy bay</translation>\n    </message>\n    <message>\n        <location filename=\"../switchmanager.cpp\" line=\"78\"/>\n        <location filename=\"../switchmanager.cpp\" line=\"123\"/>\n        <source>Wi-Fi</source>\n        <translation>Wi-Fi</translation>\n    </message>\n    <message>\n        <location filename=\"../switchmanager.cpp\" line=\"88\"/>\n        <location filename=\"../switchmanager.cpp\" line=\"124\"/>\n        <source>Cellular</source>\n        <translation>Mạng di động</translation>\n    </message>\n</context>\n<context>\n    <name>TetheringSettingsPopover</name>\n    <message>\n        <location filename=\"../statusCenter/popovers/tetheringsettingspopover.ui\" line=\"35\"/>\n        <source>Tethering Settings</source>\n        <translation>Cài đặt điểm phát sóng</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/tetheringsettingspopover.ui\" line=\"63\"/>\n        <source>SSID</source>\n        <translation>SSID</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/tetheringsettingspopover.ui\" line=\"73\"/>\n        <source>These settings will be used to set up a Wi-Fi network that other devices can connect to when tethering is enabled.</source>\n        <translation>Cài đặt này sẽ bị dùng để thiết lập một mạng Wi-Fi cho thiết bị khác kết nối với khi điểm phát sóng bị bật.</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/tetheringsettingspopover.ui\" line=\"96\"/>\n        <source>Network Key</source>\n        <translation>Mật khẩu mạng</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/tetheringsettingspopover.cpp\" line=\"64\"/>\n        <source>Network key needs to be at least 8 characters long</source>\n        <translation>Mật khẩu mạng cần phải ít nhất 8 ký tự</translation>\n    </message>\n</context>\n<context>\n    <name>UnlockModemPopover</name>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.ui\" line=\"190\"/>\n        <source>Enter the SIM PIN</source>\n        <translation>Điền vào mã PIN của SIM</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.ui\" line=\"356\"/>\n        <source>SIM PUK</source>\n        <translation>SIM PUK</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.ui\" line=\"363\"/>\n        <source>You&apos;ll also need to provide a new SIM PIN to set once the SIM is unlocked.</source>\n        <translation>Bạn cũng cần cung cấp một mã PIN mới để đặt sau khi thẻ SIM bị mở khóa.</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.ui\" line=\"379\"/>\n        <source>SIM PUK REQUIRED</source>\n        <translation>YÊU CẦU SIM PUK</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.ui\" line=\"425\"/>\n        <source>Unlock SIM Card</source>\n        <translation>Mở khóa thẻ SIM</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.ui\" line=\"456\"/>\n        <source>New SIM PIN</source>\n        <translation>Mã PIN mới</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.ui\" line=\"466\"/>\n        <source>Confirm SIM PIN</source>\n        <translation>Xác nhận mã PIN mới</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.cpp\" line=\"48\"/>\n        <source>Don&apos;t guess the PUK!</source>\n        <translation>Đừng có đoán mã PUK!</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.cpp\" line=\"49\"/>\n        <source>Once you exhaust your attempts, the SIM card will be blocked forever.\n\nYou&apos;ll need to contact your carrier for a new SIM card.</source>\n        <translation>Sau khi bạn hết lần thử, thẻ SIM này sẽ bị khóa mãi mãi.\n\nBạn sẽ cần liên hệ với nhà cung cấp mạng để yêu cầu thẻ SIM mới.</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.cpp\" line=\"68\"/>\n        <source>If you enter the incorrect PIN again, your SIM card will be PUK locked, and you&apos;ll need to contact your carrier.</source>\n        <translation>Nếu bạn điền mã PIN sai một lần nữa, thẻ SIM sẽ bị khóa với mã PUK, và bạn cần liên hệ với nhà cung cấp mạng.</translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.cpp\" line=\"70\"/>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.cpp\" line=\"75\"/>\n        <source>You have %n remaining tries</source>\n        <translation>\n            <numerusform>Bạn còn %n lần thử</numerusform>\n        </translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.cpp\" line=\"73\"/>\n        <source>This is your final chance to get the PUK right before you&apos;ll need to obtain a new SIM card from your carrier.</source>\n        <translation>Đây là cơ hội cuối cùng cho bạn điền mã PUK đúng trước khi bạn cần nhận thẻ SIM mới từ nhà cung cấp dịch vụ của bạn.</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.cpp\" line=\"78\"/>\n        <source>Contact your carrier to obtain the &lt;b&gt;SIM PUK&lt;/b&gt;, and enter it below to unlock %1.</source>\n        <translation>Liên hệ với nhà cung cấp mạng của bạn để nhận &lt;b&gt;mã PUK của thẻ SIM&lt;/b&gt;, sau đó điền nó vào để mở khóa %1.</translation>\n    </message>\n</context>\n<context>\n    <name>WifiConnectionEditorPane</name>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/wificonnectioneditorpane.ui\" line=\"35\"/>\n        <location filename=\"../statusCenter/connectionEditor/wificonnectioneditorpane.cpp\" line=\"47\"/>\n        <source>Wi-Fi</source>\n        <translation>Wi-Fi</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/wificonnectioneditorpane.ui\" line=\"59\"/>\n        <source>Mode</source>\n        <translation>Chế độ</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/wificonnectioneditorpane.ui\" line=\"66\"/>\n        <source>SSID</source>\n        <translation>SSID</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/wificonnectioneditorpane.ui\" line=\"77\"/>\n        <source>Infrastructure</source>\n        <translation>Hạ tầng</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/wificonnectioneditorpane.ui\" line=\"82\"/>\n        <source>Ad-Hoc</source>\n        <translation>Ad-Hob</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/wificonnectioneditorpane.ui\" line=\"87\"/>\n        <source>Access Point</source>\n        <translation>Điểm truy cập</translation>\n    </message>\n</context>\n<context>\n    <name>WifiDevicePane</name>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"106\"/>\n        <source>STATUS</source>\n        <translation>TRẠNG THÁI</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"124\"/>\n        <source>This Device</source>\n        <translation>Thiết bị này</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"268\"/>\n        <source>ACTIONS</source>\n        <translation>HOẠT ĐỘNG</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"277\"/>\n        <source>Select Network</source>\n        <translation>Chọn mạng</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"284\"/>\n        <source>Disconnect</source>\n        <translation>Ngắt kết nối</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"348\"/>\n        <source>TETHERING</source>\n        <translation>ĐIỂM PHÁT SÓNG</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"355\"/>\n        <source>Network Key</source>\n        <translation>Mật khẩu mạng</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"375\"/>\n        <source>Use Tethering to share your internet connection with other devices over Wi-Fi.\n\n**While Tethering is active, you won&apos;t be able to connect to the Internet with Wi-Fi, so you&apos;ll need to make sure you have an alternate way to connect to the Internet.**</source>\n        <translation>Sử dụng điểm phát sóng để chia sẻ kết nối Internet của bạn qua Wi-Fi.\n\n**Khi điểm phát sóng bị bật, bạn không thể kết nối với Internet bằng Wi-Fi, vì vậy bạn cần đảm bảo rằng bạn có cách thay thế để kết nối với Internet.**</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"398\"/>\n        <source>Enable Tethering</source>\n        <translation>Bật điểm phát sóng</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"414\"/>\n        <source>SSID</source>\n        <translation>SSID</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"440\"/>\n        <source>Set Tethering Settings</source>\n        <translation>Cài đặt điểm phát sóng</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"489\"/>\n        <source>Wi-Fi is off</source>\n        <translation>Wi-Fi đang tắt</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"512\"/>\n        <source>Switch Wi-Fi on to connect to a wireless network</source>\n        <translation>Bật Wi-Fi để kết nối với mạng không dây</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"522\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"669\"/>\n        <source>Switch Wi-Fi On</source>\n        <translation>Bật Wi-Fi</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"568\"/>\n        <source>Wi-Fi is disabled</source>\n        <translation>Wi-Fi bị vô hiệu</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"591\"/>\n        <source>Use the Wi-Fi switch to enable Wi-Fi and connect to a network</source>\n        <translation>Sử dụng nút Wi-Fi để bật Wi-Fi và kết nối với một mạng</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"636\"/>\n        <source>You&apos;re in flight mode</source>\n        <translation>Bạn đang ở chế độ máy bay</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"659\"/>\n        <source>Switch Wi-Fi on to connect to a wireless network. Flight mode won&apos;t be disabled.</source>\n        <translation>Bật Wi-Fi để kết nối với mạng không dây. Chế độ máy bay sẽ không bị tắt.</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"88\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"131\"/>\n        <source>Tethering</source>\n        <translation>Điểm phát sóng</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"91\"/>\n        <source>Disable Tethering</source>\n        <translation>Tắt điểm phát sóng</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"118\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"143\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"153\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"202\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"203\"/>\n        <source>Wi-Fi</source>\n        <translation>Wi-Fi</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"119\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"230\"/>\n        <source>Disconnected</source>\n        <translation>Đã ngắt kết nối</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"132\"/>\n        <source>Active</source>\n        <translation>Đang hoạt động</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"138\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"144\"/>\n        <source>Connected</source>\n        <translation>Đã kết nối</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"154\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"239\"/>\n        <source>Failed</source>\n        <translation>Thất bại</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"164\"/>\n        <source>Connection Failure</source>\n        <translation>Kết nối không thành công</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"166\"/>\n        <source>Connecting to %1 failed because %2.</source>\n        <translation>Kết nối với %1 không thành công tại vì %2.</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"170\"/>\n        <source>the network</source>\n        <translation>mạng</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"273\"/>\n        <source>0 Devices</source>\n        <translation>0 thiết bị</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"282\"/>\n        <source>Unknown</source>\n        <translation>Không xác định</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"452\"/>\n        <source>Couldn&apos;t configure tethering</source>\n        <translation>Không thể cấu hình điểm phát sóng</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"478\"/>\n        <source>Couldn&apos;t switch off tethering</source>\n        <translation>Không thể tắt điểm phát sóng</translation>\n    </message>\n</context>\n<context>\n    <name>WiredChunkUpdater</name>\n    <message>\n        <location filename=\"../chunk/wiredchunkupdater.cpp\" line=\"25\"/>\n        <source>Wired</source>\n        <translation>Mạng dây</translation>\n    </message>\n</context>\n<context>\n    <name>WiredDevicePane</name>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.ui\" line=\"35\"/>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"64\"/>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"83\"/>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"90\"/>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"103\"/>\n        <source>Wired</source>\n        <translation>Mạng dây</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.ui\" line=\"84\"/>\n        <source>STATUS</source>\n        <translation>TRẠNG THÁI</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.ui\" line=\"102\"/>\n        <source>This Device</source>\n        <translation>Thiết bị này</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.ui\" line=\"246\"/>\n        <source>ACTIONS</source>\n        <translation>HOẠT ĐỘNG</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.ui\" line=\"255\"/>\n        <source>Connect</source>\n        <translation>Kết nối</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.ui\" line=\"262\"/>\n        <source>Disconnect</source>\n        <translation>Ngắt kết nối</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"84\"/>\n        <source>Disconnected</source>\n        <translation>Không kết nối</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"95\"/>\n        <source>Connected</source>\n        <translation>Đã kết nối</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"104\"/>\n        <source>Failed</source>\n        <translation>Thất bại</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"122\"/>\n        <source>Router</source>\n        <translation>Bộ định tuyến</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"144\"/>\n        <source>Unavailable</source>\n        <translation>Không có sẵn</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"148\"/>\n        <source>Connect an Ethernet cable.</source>\n        <translation>Cắm dây Ethernet vào.</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"150\"/>\n        <source>This network is unavailable because %2.</source>\n        <translation>Mạng này không có sẵn tại vì %2.</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"177\"/>\n        <source>Connection Failure</source>\n        <translation>Kết nối không thành công</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"179\"/>\n        <source>Connecting to the network failed because %2.</source>\n        <translation>Kết nối với mạng không thành công tại vì %2.</translation>\n    </message>\n</context>\n<context>\n    <name>WiredOnboardingSetup</name>\n    <message>\n        <location filename=\"../onboarding/wiredonboardingsetup.ui\" line=\"57\"/>\n        <source>WIRED</source>\n        <translation>MẠNG DÂY</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/wiredonboardingsetup.ui\" line=\"73\"/>\n        <source>Use Wired Connection</source>\n        <translation>Sử dụng mạng dây</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/wiredonboardingsetup.cpp\" line=\"91\"/>\n        <source>Connect to the Internet using a wired network</source>\n        <translation>Kết nối với Internet sử dụng mạng dây</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/wiredonboardingsetup.cpp\" line=\"94\"/>\n        <source>To connect to the Internet using a wired network, connect the network cable.</source>\n        <translation>Để kết nối với Internet sử dụng mạng dây, hãy cắm dây mạng vào.</translation>\n    </message>\n</context>\n<context>\n    <name>WirelessNetworkListDelegate</name>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"85\"/>\n        <source>Connected</source>\n        <translation>Đã kết nối</translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"89\"/>\n        <source>In Range</source>\n        <translation>Trong phạm vi</translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"97\"/>\n        <source>Out of range</source>\n        <translation>Ngoài phạm vi</translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"107\"/>\n        <source>Not Secured</source>\n        <translation>Không bảo mật</translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"110\"/>\n        <source>Secured with Static WEP</source>\n        <translation>Bảo mật với WEP tĩnh</translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"113\"/>\n        <source>Secured with Dynamic WEP</source>\n        <translation>Bảo mật với WEP động</translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"116\"/>\n        <source>Secured with LEAP</source>\n        <translation>Bảo mật với LEAP</translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"119\"/>\n        <source>Secured with WPA-PSK</source>\n        <translation>Bảo mật với WPA-PSK</translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"122\"/>\n        <source>Secured with WPA Enterprise</source>\n        <translation>Bảo mật với WPA Doanh nghiệp</translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"125\"/>\n        <source>Secured with WPA2-PSK</source>\n        <translation>Bảo mật với WPA2-PSK</translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"128\"/>\n        <source>Secured with WPA2 Enterprise</source>\n        <translation>Bảo mật với WPA2 Doanh nghiệp</translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"131\"/>\n        <source>Secured with WPA3</source>\n        <translation>Bảo mật với WPA3</translation>\n    </message>\n</context>\n<context>\n    <name>WirelessNetworkSelectionPopover</name>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"57\"/>\n        <source>Connect to a Wireless Network</source>\n        <translation>Kết nối với mạng không dây</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"107\"/>\n        <source>KNOWN NETWORKS</source>\n        <translation>MẠNG ĐÁ NHỚ</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"158\"/>\n        <source>NEW NETWORKS</source>\n        <translation>MẠNG MỚI</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"181\"/>\n        <source>New Manual Connection</source>\n        <translation>Kết nối thủ công mới</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"297\"/>\n        <source>Enter the security key</source>\n        <translation>Điền vào mật khẩu mạng</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"421\"/>\n        <source>Network Security</source>\n        <translation>Bảo mật mạng</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"454\"/>\n        <source>Select the EAP method. If you don&apos;t know what to select, contact your system administrator for the details.</source>\n        <translation>Chọn phương pháp EAP. Nếu bạn không biết phải chọn mục nào, hãy liên hệ với quản trị hệ thống của bạn.</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"484\"/>\n        <source>TLS</source>\n        <translation>TLS</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"489\"/>\n        <source>LEAP</source>\n        <translation>LEAP</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"494\"/>\n        <source>PWD</source>\n        <translation>PWD</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"499\"/>\n        <source>FAST</source>\n        <translation>FAST</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"504\"/>\n        <source>TTLS</source>\n        <translation>TTLS</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"509\"/>\n        <source>PEAP</source>\n        <translation>PEAP</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.cpp\" line=\"141\"/>\n        <source>Unknown Security</source>\n        <translation>Bảo mật không xác định</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.cpp\" line=\"142\"/>\n        <source>Not sure how to connect to this network. Use manual setup to connect to it.</source>\n        <translation>Chúng tôi không có biết cách kết nối với mạng này. Vui lòng sử dụng cấu hình thủ công để kết nối.</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.cpp\" line=\"217\"/>\n        <source>For network %1</source>\n        <translation>Cho mạng %1</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.cpp\" line=\"218\"/>\n        <source>Edit</source>\n        <translation>Sửa</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.cpp\" line=\"235\"/>\n        <source>Forget Network</source>\n        <translation>Quên mạng</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.cpp\" line=\"316\"/>\n        <source>Wireless</source>\n        <translation>Mạng không dây</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.cpp\" line=\"319\"/>\n        <source>Connect</source>\n        <translation>Kết nối</translation>\n    </message>\n</context>\n<context>\n    <name>WirelessOnboardingSetup</name>\n    <message>\n        <location filename=\"../onboarding/wirelessonboardingsetup.ui\" line=\"57\"/>\n        <source>WI-FI</source>\n        <translation>WI-FI</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/wirelessonboardingsetup.ui\" line=\"64\"/>\n        <source>Connect to the Internet using a Wi-Fi network</source>\n        <translation>Kết nối với Internet sử dụng mạng Wi-Fi</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/wirelessonboardingsetup.ui\" line=\"73\"/>\n        <source>Select Network</source>\n        <translation>Chọn mạng</translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/NetworkPlugin/translations/vi_VN.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"vi_VN\">\n<context>\n    <name>CellularPane</name>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.ui\" line=\"84\"/>\n        <source>STATUS</source>\n        <translation>TRẠNG THÁI</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.ui\" line=\"102\"/>\n        <source>This Device</source>\n        <translation>Thiết bị này</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.ui\" line=\"246\"/>\n        <source>ACTIONS</source>\n        <translation>HOẠT ĐỘNG</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.ui\" line=\"262\"/>\n        <source>Connect</source>\n        <translation>Kết nối</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.ui\" line=\"269\"/>\n        <source>Disconnect</source>\n        <translation>Ngắt kết nối</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.ui\" line=\"276\"/>\n        <source>Modem Settings</source>\n        <translation>Cài đặt modem</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"105\"/>\n        <source>Disable Cellular</source>\n        <translation>Tất mạng di động</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"107\"/>\n        <source>Enable Cellular</source>\n        <translation>Bật mạng di động</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"129\"/>\n        <source>Disconnected</source>\n        <translation>Đã ngắt kết nối</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"135\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"397\"/>\n        <source>Cellular</source>\n        <translation>Mạng di động</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"140\"/>\n        <source>Connected</source>\n        <translation>Đã kết nối</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"149\"/>\n        <source>Failed</source>\n        <translation>Thất bại</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"209\"/>\n        <source>No SIM Card</source>\n        <translation>Không có thẻ SIM</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"210\"/>\n        <source>Insert a SIM card to connect to cellular services.</source>\n        <translation>Chèn thẻ SIM để kết nối với dịch vụ di động.</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"212\"/>\n        <source>No SIM</source>\n        <translation>Không có thẻ SIM</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"215\"/>\n        <source>Unavailable</source>\n        <translation>Không có sẵn</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"218\"/>\n        <source>This network is unavailable because %2.</source>\n        <translation>Mạng này không có sẵn tại vì %2.</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"249\"/>\n        <source>Connection Failure</source>\n        <translation>Lỗi kết nối</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"251\"/>\n        <source>Connecting to the network failed because %2.</source>\n        <translation>Không có thể kết nối với mạng này tại vì %2.</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"326\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"339\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"346\"/>\n        <source>Enter SIM PIN</source>\n        <translation>Điền vào mã PIN cho thẻ SIM</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"328\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"332\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"344\"/>\n        <source>SIM PIN Required</source>\n        <translation>Cần mã PIN</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"334\"/>\n        <source>A SIM PIN is required to connect to the cellular network.</source>\n        <translation>Cần mã PIN cho thẻ SIM để kết nối với mạng di động</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"357\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"370\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"377\"/>\n        <source>Enter SIM PUK</source>\n        <translation>Điền vào mã PUK cho thẻ SIM</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"359\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"363\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"375\"/>\n        <source>SIM PUK Required</source>\n        <translation>Cần mã PUK</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"365\"/>\n        <source>A SIM PUK is required to connect to the cellular network.</source>\n        <translation>Cần mã PUK cho thẻ SIM để kết nối với mạng di động.</translation>\n    </message>\n</context>\n<context>\n    <name>Common</name>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"27\"/>\n        <source>the device is no longer managed by NetworkManager</source>\n        <translation>thiết bị này không có quẩn lý bởi NetworkManager nữa</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"29\"/>\n        <source>configuration of the device failed</source>\n        <translation>cấu hình thiết bị không có thành công</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"31\"/>\n        <source>configuration of the device is unavailable</source>\n        <translation>cấu hình thiết bị không có sẵn</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"33\"/>\n        <source>configuration of the device expired</source>\n        <translation>cấu hình cho thiết bị hết hạn</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"35\"/>\n        <source>required secrets were not provided</source>\n        <translation>bí mật cần thiết không được cung cấp</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"37\"/>\n        <source>the authentication supplicant disconnected</source>\n        <translation>thẻ thay thế xác thực bị ngắt kết nối</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"39\"/>\n        <source>configuration of the authentication supplicant failed</source>\n        <translation></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"41\"/>\n        <source>the authentication supplicant failed</source>\n        <translation></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"43\"/>\n        <source>the authentication supplicant timed out</source>\n        <translation></translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"45\"/>\n        <source>the PPP network failed to start</source>\n        <translation>mạng PPP không thể khởi động</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"47\"/>\n        <source>the PPP network was disconnected</source>\n        <translation>mạng PPP bị ngắt kết nối</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"49\"/>\n        <source>the PPP network failed</source>\n        <translation>mạng PPP không có thành công</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"51\"/>\n        <source>DHCP configuration failed to start</source>\n        <translation>cấu hình DHCP không thể khởi động</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"53\"/>\n        <source>DHCP configuration had an error</source>\n        <translation>cấu hình DHCP đã xảy ra lỗi</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"55\"/>\n        <source>DHCP configuration failed</source>\n        <translation>cấu hình DHCP không có thành công</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"67\"/>\n        <source>the modem is busy</source>\n        <translation>modem đang bận</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"69\"/>\n        <source>there is no dial tone on the modem</source>\n        <translation>không có âm quay số trên modem</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"71\"/>\n        <source>no carrier is available on the modem</source>\n        <translation>không có nhà mạng nào sẵn trên modem</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"73\"/>\n        <source>dialling the number on the modem timed out</source>\n        <translation>quay số trên modem bị hết giờ</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"75\"/>\n        <source>dialling the number on the modem failed</source>\n        <translation>quay số trên modem không có thành công</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"77\"/>\n        <source>initialising the modem failed</source>\n        <translation>khởi tạo modem không có thành công</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"79\"/>\n        <source>APN selection failed</source>\n        <translation>hoạt động lựa chọn APN không thành công</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"81\"/>\n        <source>the modem is not searching</source>\n        <translation>modem không có tìm kiếm</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"83\"/>\n        <source>the cell tower denied registration of the modem</source>\n        <translation>tháp di động từ chối đăng ký modem</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"85\"/>\n        <source>registration of the modem on the cell tower timed out</source>\n        <translation>hoạt động đang ký modem trên tháp di động bị hết giờ</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"87\"/>\n        <source>registration of the modem on the cell tower failed</source>\n        <translation>hoạt động đang ký modem trên tháp di động không có thành công</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"91\"/>\n        <source>the device firmware is missing</source>\n        <translation>đang mất phần mềm thiết bị</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"93\"/>\n        <source>the device was removed</source>\n        <translation>thiết bị bị tháo</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"95\"/>\n        <source>the device is sleeping</source>\n        <translation>thiết bị đang ngủ</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"97\"/>\n        <source>the connection was removed</source>\n        <translation>cấu hình kết nối bị xóa</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"99\"/>\n        <source>you requested the action</source>\n        <translation>bạn yêu cầu hoạt động</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"107\"/>\n        <source>the modem was not found</source>\n        <translation>không có tìm thấy modem</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"109\"/>\n        <source>Bluetooth is not available</source>\n        <translation>Bluetooth không có sẵn</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"111\"/>\n        <source>the SIM card is not inserted</source>\n        <translation>thẻ SIM không được lắp vào</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"113\"/>\n        <source>the SIM PIN is required</source>\n        <translation>mã PIN của thẻ SIM chưa được điền vào</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"115\"/>\n        <source>the SIM PUK is required</source>\n        <translation>mã PUK của thẻ SIM chưa được điền vào</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"118\"/>\n        <source>the SIM PUK is exhausted</source>\n        <translation>hết lần thử để điền vào mã PUK của thẻ SIM</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"126\"/>\n        <source>ModemManager is not operational on this device</source>\n        <translation>ModemManager không hoạt động trên thiết bị này</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"128\"/>\n        <source>the wireless network wasn&apos;t found</source>\n        <translation>không tìm thấy được điểm truy cập</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"152\"/>\n        <source>an unknown error occurred</source>\n        <translation>một lỗi không xác định đã bị xảy ra</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"198\"/>\n        <source>Cellular</source>\n        <translation>Mạng di động</translation>\n    </message>\n</context>\n<context>\n    <name>ConnectionSelectionPopover</name>\n    <message>\n        <location filename=\"../statusCenter/popovers/connectionselectionpopover.ui\" line=\"35\"/>\n        <source>Select Connection Profile</source>\n        <translation>Chọn hồ sơ kết nối</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/connectionselectionpopover.ui\" line=\"42\"/>\n        <source>Select a connection profile to use</source>\n        <translation>Chọn một hồ sơ kết nối để sử dụng</translation>\n    </message>\n</context>\n<context>\n    <name>DevicePane</name>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/devicepane.ui\" line=\"83\"/>\n        <source>STATUS</source>\n        <translation>TRẠNG THÁI</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/devicepane.ui\" line=\"90\"/>\n        <source>theDesk doesn&apos;t support this network interface, so you won&apos;t be able to configure it fully here.</source>\n        <translation>theDesk không có hỗ trợ thiết bị này, vì vậy bạn không có thể cấu hình hoàn toàn tại đây được.</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/devicepane.ui\" line=\"144\"/>\n        <source>ACTIONS</source>\n        <translation>HOẠT ĐỘNG</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/devicepane.ui\" line=\"153\"/>\n        <source>Disconnect</source>\n        <translation>Ngắt kết nối</translation>\n    </message>\n</context>\n<context>\n    <name>GenericChunkUpdater</name>\n    <message>\n        <location filename=\"../chunk/genericchunkupdater.cpp\" line=\"24\"/>\n        <source>Connected</source>\n        <translation>Đã kết nối</translation>\n    </message>\n</context>\n<context>\n    <name>IPv4ConnectionEditorPane</name>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"35\"/>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.cpp\" line=\"69\"/>\n        <source>IPv4</source>\n        <translation>IPv4</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"99\"/>\n        <source>DHCP</source>\n        <translation>DHCP</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"104\"/>\n        <source>DHCP with manual DNS</source>\n        <translation>DHCP với DNS thủ công</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"109\"/>\n        <source>Manual</source>\n        <translation>Thủ công</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"114\"/>\n        <source>Shared</source>\n        <translation>Bị chia sẻ</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"119\"/>\n        <source>Disabled</source>\n        <translation>Vô hiệu</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"127\"/>\n        <source>Configuration Method</source>\n        <translation>Phương pháp cấu hình</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"143\"/>\n        <source>Require IPv4</source>\n        <translation>Yêu cầu IPv4</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"208\"/>\n        <source>IP Address</source>\n        <translation>Địa chỉ IP</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"215\"/>\n        <source>Default Gateway</source>\n        <translation>Định tuyến mặc định</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"222\"/>\n        <source>Subnet Length</source>\n        <translation>Độ dài mạng con</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"235\"/>\n        <source>ADDRESSES</source>\n        <translation>ĐỊA CHỈ</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"255\"/>\n        <source>Set the IP address that this device will be assigned.</source>\n        <translation>Đặt địa chỉ IP để giao phó</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"345\"/>\n        <source>DNS</source>\n        <translation>DNS</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"352\"/>\n        <source>1.1.1.1</source>\n        <translation>1.1.1.1</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"359\"/>\n        <source>Configure the DNS servers that will be used to resolve domain names.</source>\n        <translation>Cấu hình máy chủ DNS sự dụng để giải quyết truy vấn</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.cpp\" line=\"217\"/>\n        <source>For DNS server %1</source>\n        <translation>Cho máy chủ DNS %1</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.cpp\" line=\"218\"/>\n        <source>Remove</source>\n        <translation>Xóa</translation>\n    </message>\n</context>\n<context>\n    <name>NetworkChunk</name>\n    <message>\n        <location filename=\"../chunk/networkchunk.cpp\" line=\"64\"/>\n        <source>Network Settings</source>\n        <translation>Cài đặt mạng</translation>\n    </message>\n    <message>\n        <location filename=\"../chunk/networkchunk.cpp\" line=\"103\"/>\n        <source>Disconnected</source>\n        <translation>Bị ngắt kết nối</translation>\n    </message>\n    <message>\n        <location filename=\"../chunk/networkchunk.cpp\" line=\"137\"/>\n        <source>Login Required</source>\n        <translation>Cần đăng nhập</translation>\n    </message>\n    <message>\n        <location filename=\"../chunk/networkchunk.cpp\" line=\"140\"/>\n        <source>Can&apos;t get to the Internet</source>\n        <translation>Không thể truy cập internet</translation>\n    </message>\n</context>\n<context>\n    <name>NetworkConnectionEditor</name>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"90\"/>\n        <source>SETTINGS MODIFIED</source>\n        <translation>CÀI ĐẶT BỊ THAY ĐỔI</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"125\"/>\n        <source>Revert</source>\n        <translation>Hoàn lại</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"136\"/>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"224\"/>\n        <source>Save</source>\n        <translation>Lưu</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"195\"/>\n        <source>DONE?</source>\n        <translation>XONG CHƯA?</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"260\"/>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"303\"/>\n        <source>General</source>\n        <translation>Chung</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"327\"/>\n        <source>Connection Name</source>\n        <translation>Tên kết nối</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.cpp\" line=\"203\"/>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.cpp\" line=\"231\"/>\n        <source>Couldn&apos;t save settings</source>\n        <translation>Không thể lưu các cài đặt</translation>\n    </message>\n</context>\n<context>\n    <name>NetworkStatusCenterLeftPane</name>\n    <message>\n        <location filename=\"../statusCenter/networkstatuscenterleftpane.ui\" line=\"35\"/>\n        <source>Network</source>\n        <translation>Mạng</translation>\n    </message>\n</context>\n<context>\n    <name>NetworkStatusCenterPane</name>\n    <message>\n        <location filename=\"../statusCenter/networkstatuscenterpane.ui\" line=\"100\"/>\n        <source>NetworkManager is not operational</source>\n        <translation>NetworkManager không có hoạt động</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/networkstatuscenterpane.ui\" line=\"110\"/>\n        <source>Contact your system administrator</source>\n        <translation>Vùi lòng liên hệ với quản trị hệ thống</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/networkstatuscenterpane.cpp\" line=\"159\"/>\n        <source>Network</source>\n        <translation>Mạng</translation>\n    </message>\n</context>\n<context>\n    <name>OnboardingNetwork</name>\n    <message>\n        <location filename=\"../onboarding/onboardingnetwork.ui\" line=\"35\"/>\n        <location filename=\"../onboarding/onboardingnetwork.cpp\" line=\"96\"/>\n        <source>Network</source>\n        <translation>Mạng</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingnetwork.ui\" line=\"42\"/>\n        <source>Connect to the Internet to get updates and install new software.</source>\n        <translation>Kết nối với Internet để truy cập các cập nhật và cài đặt phần mềm mới.</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingnetwork.ui\" line=\"194\"/>\n        <source>You&apos;re connected!</source>\n        <translation>Bạn đã kết nối!</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingnetwork.ui\" line=\"204\"/>\n        <source>Disconnect and connect to a different network</source>\n        <translation>Ngắt kết nối và kết nối với mạng khác</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingnetwork.ui\" line=\"275\"/>\n        <source>You can always set up the network connection later.</source>\n        <translation>Bạn cũng có thể thiết lập kết nối mạng sau.</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingnetwork.cpp\" line=\"73\"/>\n        <source>Continue without Internet</source>\n        <translation>Tiếp tục không có Internet</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingnetwork.cpp\" line=\"79\"/>\n        <location filename=\"../onboarding/onboardingnetwork.cpp\" line=\"85\"/>\n        <source>Next</source>\n        <translation>Tiếp tục</translation>\n    </message>\n</context>\n<context>\n    <name>SecurityEapPeap</name>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"35\"/>\n        <source>PEAP</source>\n        <translation>PEAP</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"42\"/>\n        <source>Enter the settings for this network</source>\n        <translation>Điền vào cài đặt cho mạng này</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"82\"/>\n        <source>Phase-2 Authentication</source>\n        <translation>Xác thực bước hai</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"89\"/>\n        <source>Anonymous Identity</source>\n        <translation>Thực thể nặc danh</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"99\"/>\n        <source>PEAP version</source>\n        <translation>Phiên bản PEAP</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"106\"/>\n        <source>Username</source>\n        <translation>Tên người dùng</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"113\"/>\n        <source>Password</source>\n        <translation>Mặt khẩu</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"120\"/>\n        <source>CA Certificate</source>\n        <translation>Chúng nhận CA</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"127\"/>\n        <source>Browse...</source>\n        <translation>Duyệt...</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"135\"/>\n        <source>MSCHAPv2</source>\n        <translation>MSCHAPv2</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"140\"/>\n        <source>MD5</source>\n        <translation>MD5</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"145\"/>\n        <source>GTC</source>\n        <translation>GTC</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"171\"/>\n        <source>Automatic</source>\n        <translation>Tự động</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"187\"/>\n        <source>Version 0</source>\n        <translation>Phiên bản 0</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"200\"/>\n        <source>Version 1</source>\n        <translation>Phiên bản 1</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"244\"/>\n        <source>Connect</source>\n        <translation>Kết nối</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.cpp\" line=\"107\"/>\n        <source>Certificates (*.pem, *.cer)</source>\n        <translation>Chúng nhận (*.pem, *.cer)</translation>\n    </message>\n</context>\n<context>\n    <name>SecurityEapUnsupported</name>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeapunsupported.ui\" line=\"35\"/>\n        <location filename=\"../statusCenter/eap/securityeapunsupported.ui\" line=\"77\"/>\n        <source>Unsupported Security Settings</source>\n        <translation>Cài đặt bảo mật không được hỗ trợ</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeapunsupported.ui\" line=\"87\"/>\n        <source>Sorry, theDesk doesn&apos;t support those security settings at the moment. You can try using the terminal to configure this network.</source>\n        <translation>Rất tiếc, theDesk không có hỗ trợ cài đặt bảo mật bây giờ. Bạn có thể thử sử dụng đầu cuối để kết nối với mạng này.</translation>\n    </message>\n</context>\n<context>\n    <name>SimSettingsPopover</name>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"57\"/>\n        <source>Modem Settings</source>\n        <translation>Cài đặt modem</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"88\"/>\n        <source>SIM PIN</source>\n        <translation>Mã PIN của thẻ SIM</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"98\"/>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"114\"/>\n        <source>Enable SIM PIN</source>\n        <translation>Bật mã PIN</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"105\"/>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"120\"/>\n        <source>Disable SIM PIN</source>\n        <translation>Tất mã PIN</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"112\"/>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"164\"/>\n        <source>Change SIM PIN</source>\n        <translation>Đổi mã PIN</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"128\"/>\n        <source>CALLS</source>\n        <translation>CUỘC GỌI</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"138\"/>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"769\"/>\n        <source>Call Waiting</source>\n        <translation>Chờ cuộc gọi</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"188\"/>\n        <source>IMSI</source>\n        <translation>IMSI</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"195\"/>\n        <source>IMEI</source>\n        <translation>IMEI</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"208\"/>\n        <source>MODEM INFORMATION</source>\n        <translation>THÔNG TIN MODEM</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"215\"/>\n        <source>Carrier</source>\n        <translation>Nhà cung cấp dịch vụ</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"340\"/>\n        <source>Enter the new SIM PIN</source>\n        <translation>Điền vào mã PIN mới</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"537\"/>\n        <source>Enter the current SIM PIN</source>\n        <translation>Điền vào mã PIN hiện tại</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"806\"/>\n        <source>Enable Call Waiting</source>\n        <translation>Bật chờ cuộc gọi</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"813\"/>\n        <source>Call Waiting allows you to receive calls while another call is currently active.</source>\n        <translation>Chờ cuộc gọi cho phép bạn nhận cuộc gọi đến khi một cuộc gọi khác hiện đang hoạt động.</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"58\"/>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"59\"/>\n        <source>No SIM card</source>\n        <translation>Không có thể SIM</translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"142\"/>\n        <source>You have %n remaining tries</source>\n        <translation>\n            <numerusform>Bạn còn %n lần thử lại</numerusform>\n        </translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"203\"/>\n        <source>Error</source>\n        <translation>Lỗi</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"204\"/>\n        <source>Couldn&apos;t get current Call Waiting status from carrier</source>\n        <translation>Không thể nhận trạng thái chờ cuộc gọi từ nhà cung cấp dịch vụ</translation>\n    </message>\n</context>\n<context>\n    <name>SwitchManager</name>\n    <message>\n        <location filename=\"../switchmanager.cpp\" line=\"63\"/>\n        <location filename=\"../switchmanager.cpp\" line=\"72\"/>\n        <location filename=\"../switchmanager.cpp\" line=\"122\"/>\n        <source>Flight Mode</source>\n        <translation>Chế độ trên máy bay</translation>\n    </message>\n    <message>\n        <location filename=\"../switchmanager.cpp\" line=\"67\"/>\n        <source>Switch off Flight Mode</source>\n        <translation>Tất chế độ trên máy bay</translation>\n    </message>\n    <message>\n        <location filename=\"../switchmanager.cpp\" line=\"78\"/>\n        <location filename=\"../switchmanager.cpp\" line=\"123\"/>\n        <source>Wi-Fi</source>\n        <translation>Wi-Fi</translation>\n    </message>\n    <message>\n        <location filename=\"../switchmanager.cpp\" line=\"88\"/>\n        <location filename=\"../switchmanager.cpp\" line=\"124\"/>\n        <source>Cellular</source>\n        <translation>Mạng di động</translation>\n    </message>\n</context>\n<context>\n    <name>TetheringSettingsPopover</name>\n    <message>\n        <location filename=\"../statusCenter/popovers/tetheringsettingspopover.ui\" line=\"35\"/>\n        <source>Tethering Settings</source>\n        <translation>Cài đặt chia sẻ kết nối</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/tetheringsettingspopover.ui\" line=\"63\"/>\n        <source>SSID</source>\n        <translation>SSID</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/tetheringsettingspopover.ui\" line=\"73\"/>\n        <source>These settings will be used to set up a Wi-Fi network that other devices can connect to when tethering is enabled.</source>\n        <translation>Cài đặt này sẽ bị dùng để thiết lập mạng Wi-Fi có thể kết nối bởi thiết bị khác khi chia sẻ mạng đang bật.</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/tetheringsettingspopover.ui\" line=\"96\"/>\n        <source>Network Key</source>\n        <translation>Mặt khẩu mạng</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/tetheringsettingspopover.cpp\" line=\"64\"/>\n        <source>Network key needs to be at least 8 characters long</source>\n        <translation>Độ dài mặt khẩu mạng phải ít nhất 8 ký tự</translation>\n    </message>\n</context>\n<context>\n    <name>UnlockModemPopover</name>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.ui\" line=\"190\"/>\n        <source>Enter the SIM PIN</source>\n        <translation>Điền vào mã PIN của thẻ SIM</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.ui\" line=\"356\"/>\n        <source>SIM PUK</source>\n        <translation>Mã PUK của thẻ SIM</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.ui\" line=\"363\"/>\n        <source>You&apos;ll also need to provide a new SIM PIN to set once the SIM is unlocked.</source>\n        <translation>Bạn cúng cần cung cấp một mã PIN mới để đặt sau khi thể SIM bị mở khóa.</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.ui\" line=\"379\"/>\n        <source>SIM PUK REQUIRED</source>\n        <translation>CẦN MÃ PUK CỦA THẺ SIM</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.ui\" line=\"425\"/>\n        <source>Unlock SIM Card</source>\n        <translation>Mở khóa thẻ SIM</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.ui\" line=\"456\"/>\n        <source>New SIM PIN</source>\n        <translation>Mã PIN mới</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.ui\" line=\"466\"/>\n        <source>Confirm SIM PIN</source>\n        <translation>Xác nhận mã PIN</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.cpp\" line=\"48\"/>\n        <source>Don&apos;t guess the PUK!</source>\n        <translation>Đừng có đoán mã PUK!</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.cpp\" line=\"49\"/>\n        <source>Once you exhaust your attempts, the SIM card will be blocked forever.\n\nYou&apos;ll need to contact your carrier for a new SIM card.</source>\n        <translation>Sau khi bạn hết lần thử lại, thể SIM này sẽ bị chặn mãi mãi.\n\nBạn sẽ cần liên hệ với nhà cung cấp dịch vụ của bạn và yêu cầu một thế SIM mới.</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.cpp\" line=\"68\"/>\n        <source>If you enter the incorrect PIN again, your SIM card will be PUK locked, and you&apos;ll need to contact your carrier.</source>\n        <translation>Nếu bạn điền vào mã PIN sai một lần nữa, thể SIM của bạn sẽ bị chặn, và bạn sẽ cần liên hệ với nhà cung cấp dịch vụ của bạn.</translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.cpp\" line=\"70\"/>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.cpp\" line=\"75\"/>\n        <source>You have %n remaining tries</source>\n        <translation>\n            <numerusform>Bạn còn %n lần thử lại</numerusform>\n        </translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.cpp\" line=\"73\"/>\n        <source>This is your final chance to get the PUK right before you&apos;ll need to obtain a new SIM card from your carrier.</source>\n        <translation>Đây là cơ hội cuối cùng của bạn để nhập mã PUK đúng trước khi bạn sẽ cần nhận một thẻ SIM mới.</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.cpp\" line=\"78\"/>\n        <source>Contact your carrier to obtain the &lt;b&gt;SIM PUK&lt;/b&gt;, and enter it below to unlock %1.</source>\n        <translation>Liên hệ với nhà cung cấp dịch vụ của bạn và nhận &lt;b&gt;mã PUK của thẻ SIM&lt;/b&gt;, rồi điền nó dưới đây để mở khóa %1.</translation>\n    </message>\n</context>\n<context>\n    <name>WifiConnectionEditorPane</name>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/wificonnectioneditorpane.ui\" line=\"35\"/>\n        <location filename=\"../statusCenter/connectionEditor/wificonnectioneditorpane.cpp\" line=\"47\"/>\n        <source>Wi-Fi</source>\n        <translation>Wi-Fi</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/wificonnectioneditorpane.ui\" line=\"59\"/>\n        <source>Mode</source>\n        <translation>Chế độ</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/wificonnectioneditorpane.ui\" line=\"66\"/>\n        <source>SSID</source>\n        <translation>SSID</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/wificonnectioneditorpane.ui\" line=\"77\"/>\n        <source>Infrastructure</source>\n        <translation>Hạ tầng</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/wificonnectioneditorpane.ui\" line=\"82\"/>\n        <source>Ad-Hoc</source>\n        <translation>Ad-Hoc</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/wificonnectioneditorpane.ui\" line=\"87\"/>\n        <source>Access Point</source>\n        <translation>Điểm truy cập</translation>\n    </message>\n</context>\n<context>\n    <name>WifiDevicePane</name>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"106\"/>\n        <source>STATUS</source>\n        <translation>TRẠNG THÁI</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"124\"/>\n        <source>This Device</source>\n        <translation>Thiết bị này</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"268\"/>\n        <source>ACTIONS</source>\n        <translation>HOẠT ĐỘNG</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"277\"/>\n        <source>Select Network</source>\n        <translation>Chọn mạng</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"284\"/>\n        <source>Disconnect</source>\n        <translation>Ngắt kết nối</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"348\"/>\n        <source>TETHERING</source>\n        <translation>CHIA SẺ KẾT NỐI</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"355\"/>\n        <source>Network Key</source>\n        <translation>Mặt khẩu mạng</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"375\"/>\n        <source>Use Tethering to share your internet connection with other devices over Wi-Fi.\n\n**While Tethering is active, you won&apos;t be able to connect to the Internet with Wi-Fi, so you&apos;ll need to make sure you have an alternate way to connect to the Internet.**</source>\n        <translation>Sử dụng chia sẻ kết nối để chia sẻ kết nối của bạn với thiết bị khác bằng Wi-Fi.\n\n**Khi chia sẻ kết nối bị bật, bạn không thể kết nối với Internet bằng Wi-Fi, vì vậy bạn cần bảo đảm bạn có một phương pháp kết nối Internet khác.**</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"398\"/>\n        <source>Enable Tethering</source>\n        <translation>Bật chia sẻ kết nối</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"414\"/>\n        <source>SSID</source>\n        <translation>SSID</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"440\"/>\n        <source>Set Tethering Settings</source>\n        <translation>Cài đặt chia sẻ kết nối</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"489\"/>\n        <source>Wi-Fi is off</source>\n        <translation>Wi-Fi bị tắt</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"512\"/>\n        <source>Switch Wi-Fi on to connect to a wireless network</source>\n        <translation>Bật Wi-Fi để kết nối với mạng không dây</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"522\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"669\"/>\n        <source>Switch Wi-Fi On</source>\n        <translation>Bật Wi-Fi</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"568\"/>\n        <source>Wi-Fi is disabled</source>\n        <translation>Wi-Fi bị vô hiệu</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"591\"/>\n        <source>Use the Wi-Fi switch to enable Wi-Fi and connect to a network</source>\n        <translation>Sử dụng công tắc Wi-Fi để bật Wi-Fi và kết nối với mạng</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"636\"/>\n        <source>You&apos;re in flight mode</source>\n        <translation>Bằng đang ở chế độ trên máy bay</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"659\"/>\n        <source>Switch Wi-Fi on to connect to a wireless network. Flight mode won&apos;t be disabled.</source>\n        <translation>Bật Wi-Fi để kết nối với mạng không dây. Chế độ trên máy bay sẽ không có bị tắt.</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"88\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"131\"/>\n        <source>Tethering</source>\n        <translation>Chia sẻ kết nối</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"91\"/>\n        <source>Disable Tethering</source>\n        <translation>Tất chia sẻ kết nối</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"118\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"143\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"153\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"202\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"203\"/>\n        <source>Wi-Fi</source>\n        <translation>Wi-Fi</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"119\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"230\"/>\n        <source>Disconnected</source>\n        <translation>Bị ngắt kết nối</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"132\"/>\n        <source>Active</source>\n        <translation>Đang hoạt động</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"138\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"144\"/>\n        <source>Connected</source>\n        <translation>Đã kết nối</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"154\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"239\"/>\n        <source>Failed</source>\n        <translation>Thất bại</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"164\"/>\n        <source>Connection Failure</source>\n        <translation>Kết nối thất bại</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"166\"/>\n        <source>Connecting to %1 failed because %2.</source>\n        <translation>Kết nối với %1 không có thành công tại vì %2.</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"170\"/>\n        <source>the network</source>\n        <translation>mạng </translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"273\"/>\n        <source>0 Devices</source>\n        <translation>0 thiết bị</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"282\"/>\n        <source>Unknown</source>\n        <translation>Không xác định</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"452\"/>\n        <source>Couldn&apos;t configure tethering</source>\n        <translation>Không thể cấu hình chia sẻ kết nối</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"478\"/>\n        <source>Couldn&apos;t switch off tethering</source>\n        <translation>Không thể tắt chia sẻ kết nối</translation>\n    </message>\n</context>\n<context>\n    <name>WiredChunkUpdater</name>\n    <message>\n        <location filename=\"../chunk/wiredchunkupdater.cpp\" line=\"25\"/>\n        <source>Wired</source>\n        <translation>Mạng dây</translation>\n    </message>\n</context>\n<context>\n    <name>WiredDevicePane</name>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.ui\" line=\"35\"/>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"64\"/>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"83\"/>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"90\"/>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"103\"/>\n        <source>Wired</source>\n        <translation>Mạng dây</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.ui\" line=\"84\"/>\n        <source>STATUS</source>\n        <translation>TRẠNG THÁI</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.ui\" line=\"102\"/>\n        <source>This Device</source>\n        <translation>Thiết bị này</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.ui\" line=\"246\"/>\n        <source>ACTIONS</source>\n        <translation>HOẠT ĐỘNG</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.ui\" line=\"255\"/>\n        <source>Connect</source>\n        <translation>Kết nối</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.ui\" line=\"262\"/>\n        <source>Disconnect</source>\n        <translation>Ngắt kết nối</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"84\"/>\n        <source>Disconnected</source>\n        <translation>Đã ngắt kết nối</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"95\"/>\n        <source>Connected</source>\n        <translation>Đã kết nối</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"104\"/>\n        <source>Failed</source>\n        <translation>Thất bại</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"122\"/>\n        <source>Router</source>\n        <translation>Bộ định tuyến</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"144\"/>\n        <source>Unavailable</source>\n        <translation>Không có sẵn</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"148\"/>\n        <source>Connect an Ethernet cable.</source>\n        <translation>Vùi lòng cắm dây Ethernet.</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"150\"/>\n        <source>This network is unavailable because %2.</source>\n        <translation>Mạng này không có sẵn tại vì %2.</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"177\"/>\n        <source>Connection Failure</source>\n        <translation>Kết nối thất bại</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"179\"/>\n        <source>Connecting to the network failed because %2.</source>\n        <translation>Kết nối với mạng không có thành công tại vì %2.</translation>\n    </message>\n</context>\n<context>\n    <name>WiredOnboardingSetup</name>\n    <message>\n        <location filename=\"../onboarding/wiredonboardingsetup.ui\" line=\"57\"/>\n        <source>WIRED</source>\n        <translation>MẠNG DÂY</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/wiredonboardingsetup.ui\" line=\"73\"/>\n        <source>Use Wired Connection</source>\n        <translation>Sử dụng mạng dây</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/wiredonboardingsetup.cpp\" line=\"91\"/>\n        <source>Connect to the Internet using a wired network</source>\n        <translation>Kết nối với Internet dùng mạng dây</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/wiredonboardingsetup.cpp\" line=\"94\"/>\n        <source>To connect to the Internet using a wired network, connect the network cable.</source>\n        <translation>Để kết nối với Internet dùng mạng dây, hãy cắm dây mạng vào.</translation>\n    </message>\n</context>\n<context>\n    <name>WirelessNetworkListDelegate</name>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"85\"/>\n        <source>Connected</source>\n        <translation>Đã kết nối</translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"89\"/>\n        <source>In Range</source>\n        <translation>Trong phạm vi</translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"97\"/>\n        <source>Out of range</source>\n        <translation>Ngoài phạm vi</translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"107\"/>\n        <source>Not Secured</source>\n        <translation>Không có bảo đảm</translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"110\"/>\n        <source>Secured with Static WEP</source>\n        <translation>Bảo đảm với WEP tĩnh</translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"113\"/>\n        <source>Secured with Dynamic WEP</source>\n        <translation>Bảo đảm với WEP động</translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"116\"/>\n        <source>Secured with LEAP</source>\n        <translation>Bảo đảm với LEAP</translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"119\"/>\n        <source>Secured with WPA-PSK</source>\n        <translation>Bảo đảm với WPA-PSK</translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"122\"/>\n        <source>Secured with WPA Enterprise</source>\n        <translation>Bảo đảm với WPA Doanh nghiệp</translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"125\"/>\n        <source>Secured with WPA2-PSK</source>\n        <translation>Bảo đảm với WPA2-PSK</translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"128\"/>\n        <source>Secured with WPA2 Enterprise</source>\n        <translation>Bảo đảm với WPA2 Doanh nghiệp</translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"131\"/>\n        <source>Secured with WPA3</source>\n        <translation>Bảo đảm với WPA3</translation>\n    </message>\n</context>\n<context>\n    <name>WirelessNetworkSelectionPopover</name>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"57\"/>\n        <source>Connect to a Wireless Network</source>\n        <translation>Kết nối với mạng không dây</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"107\"/>\n        <source>KNOWN NETWORKS</source>\n        <translation>MẠNG ĐÃ BIẾT</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"158\"/>\n        <source>NEW NETWORKS</source>\n        <translation>MẠNG MỚI</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"181\"/>\n        <source>New Manual Connection</source>\n        <translation>Kết nối thu công mới</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"297\"/>\n        <source>Enter the security key</source>\n        <translation>Điền vào mặt khẩu</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"421\"/>\n        <source>Network Security</source>\n        <translation>Bảo đảm mạng</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"454\"/>\n        <source>Select the EAP method. If you don&apos;t know what to select, contact your system administrator for the details.</source>\n        <translation>Chon phương pháp EAP. Nếu bạn không có biết chọn tùy chọn nào, vùi lòng liên hệ với quản trị viên của bạn cho chi tiết.</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"484\"/>\n        <source>TLS</source>\n        <translation>TLS</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"489\"/>\n        <source>LEAP</source>\n        <translation>LEAP</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"494\"/>\n        <source>PWD</source>\n        <translation>PWD</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"499\"/>\n        <source>FAST</source>\n        <translation>FAST</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"504\"/>\n        <source>TTLS</source>\n        <translation>TTLS</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"509\"/>\n        <source>PEAP</source>\n        <translation>PEAP</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.cpp\" line=\"141\"/>\n        <source>Unknown Security</source>\n        <translation>Bảo mật không xác định</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.cpp\" line=\"142\"/>\n        <source>Not sure how to connect to this network. Use manual setup to connect to it.</source>\n        <translation>Không có biết tuy chọn kết nối mạng này. Vùi lòng sử dụng kết nối thu công để kết nối.</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.cpp\" line=\"217\"/>\n        <source>For network %1</source>\n        <translation>Cho mạng %1</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.cpp\" line=\"218\"/>\n        <source>Edit</source>\n        <translation>Sửa</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.cpp\" line=\"235\"/>\n        <source>Forget Network</source>\n        <translation>Quên</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.cpp\" line=\"316\"/>\n        <source>Wireless</source>\n        <translation>Mạng không dây</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.cpp\" line=\"319\"/>\n        <source>Connect</source>\n        <translation>Kết nối</translation>\n    </message>\n</context>\n<context>\n    <name>WirelessOnboardingSetup</name>\n    <message>\n        <location filename=\"../onboarding/wirelessonboardingsetup.ui\" line=\"57\"/>\n        <source>WI-FI</source>\n        <translation>Wi-Fi</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/wirelessonboardingsetup.ui\" line=\"64\"/>\n        <source>Connect to the Internet using a Wi-Fi network</source>\n        <translation>Kết nối với mạng dùng mạng Wi-Fi</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/wirelessonboardingsetup.ui\" line=\"73\"/>\n        <source>Select Network</source>\n        <translation>Chọn mạng</translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/NetworkPlugin/translations/zh_CN.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"zh_CN\" sourcelanguage=\"en_US\">\n<context>\n    <name>CellularPane</name>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.ui\" line=\"84\"/>\n        <source>STATUS</source>\n        <translation type=\"unfinished\">状态</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.ui\" line=\"102\"/>\n        <source>This Device</source>\n        <translation type=\"unfinished\">此设备</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.ui\" line=\"246\"/>\n        <source>ACTIONS</source>\n        <translation type=\"unfinished\">行动</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.ui\" line=\"262\"/>\n        <source>Connect</source>\n        <translation type=\"unfinished\">连接</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.ui\" line=\"269\"/>\n        <source>Disconnect</source>\n        <translation type=\"unfinished\">断开</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"135\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"397\"/>\n        <source>Cellular</source>\n        <translation type=\"unfinished\">蜂窝</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"129\"/>\n        <source>Disconnected</source>\n        <translation type=\"unfinished\">断开</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"140\"/>\n        <source>Connected</source>\n        <translation type=\"unfinished\">连接的</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"149\"/>\n        <source>Failed</source>\n        <translation type=\"unfinished\">失败</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"215\"/>\n        <source>Unavailable</source>\n        <translation type=\"unfinished\">不可用</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"218\"/>\n        <source>This network is unavailable because %2.</source>\n        <translation type=\"unfinished\">由于％2，该网络不可用。</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"249\"/>\n        <source>Connection Failure</source>\n        <translation type=\"unfinished\">连接失败</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"251\"/>\n        <source>Connecting to the network failed because %2.</source>\n        <translation type=\"unfinished\">由于％2，连接到网络失败。</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"326\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"339\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"346\"/>\n        <source>Enter SIM PIN</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"328\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"332\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"344\"/>\n        <source>SIM PIN Required</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"357\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"370\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"377\"/>\n        <source>Enter SIM PUK</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"359\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"363\"/>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"375\"/>\n        <source>SIM PUK Required</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"334\"/>\n        <source>A SIM PIN is required to connect to the cellular network.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"365\"/>\n        <source>A SIM PUK is required to connect to the cellular network.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.ui\" line=\"276\"/>\n        <source>Modem Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"105\"/>\n        <source>Disable Cellular</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"107\"/>\n        <source>Enable Cellular</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"209\"/>\n        <source>No SIM Card</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"210\"/>\n        <source>Insert a SIM card to connect to cellular services.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/cellularpane.cpp\" line=\"212\"/>\n        <source>No SIM</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>Common</name>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"152\"/>\n        <source>an unknown error occurred</source>\n        <translation>出现未知错误</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"27\"/>\n        <source>the device is no longer managed by NetworkManager</source>\n        <translation>设备不再由NetworkManager管理</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"29\"/>\n        <source>configuration of the device failed</source>\n        <translation>设备配置失败</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"31\"/>\n        <source>configuration of the device is unavailable</source>\n        <translation>设备的配置不可用</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"33\"/>\n        <source>configuration of the device expired</source>\n        <translation>设备配置已过期</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"35\"/>\n        <source>required secrets were not provided</source>\n        <translation>没有提供所需的密码</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"37\"/>\n        <source>the authentication supplicant disconnected</source>\n        <translation>身份验证请求者已断开连接</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"39\"/>\n        <source>configuration of the authentication supplicant failed</source>\n        <translation>身份验证请求者配置失败</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"41\"/>\n        <source>the authentication supplicant failed</source>\n        <translation>认证请求者失败</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"43\"/>\n        <source>the authentication supplicant timed out</source>\n        <translation>身份验证请求方超时</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"45\"/>\n        <source>the PPP network failed to start</source>\n        <translation>PPP网络无法启动</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"47\"/>\n        <source>the PPP network was disconnected</source>\n        <translation>PPP网络已断开连接</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"49\"/>\n        <source>the PPP network failed</source>\n        <translation>PPP网络失败</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"51\"/>\n        <source>DHCP configuration failed to start</source>\n        <translation>DHCP配置无法启动</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"53\"/>\n        <source>DHCP configuration had an error</source>\n        <translation>DHCP配置出错</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"55\"/>\n        <source>DHCP configuration failed</source>\n        <translation>DHCP配置失败</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"67\"/>\n        <source>the modem is busy</source>\n        <translation>调制解调器忙</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"69\"/>\n        <source>there is no dial tone on the modem</source>\n        <translation>调制解调器上没有拨号音</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"71\"/>\n        <source>no carrier is available on the modem</source>\n        <translation>调制解调器上没有可用的运营商</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"73\"/>\n        <source>dialling the number on the modem timed out</source>\n        <translation>拨打调制解调器上的号码超时</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"75\"/>\n        <source>dialling the number on the modem failed</source>\n        <translation>在调制解调器上拨号失败</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"77\"/>\n        <source>initialising the modem failed</source>\n        <translation>初始化调制解调器失败</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"79\"/>\n        <source>APN selection failed</source>\n        <translation>APN选择失败</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"81\"/>\n        <source>the modem is not searching</source>\n        <translation>调制解调器没有搜索</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"83\"/>\n        <source>the cell tower denied registration of the modem</source>\n        <translation>基站拒绝注册调制解调器</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"85\"/>\n        <source>registration of the modem on the cell tower timed out</source>\n        <translation>调制解调器在手机信号塔上的注册超时</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"87\"/>\n        <source>registration of the modem on the cell tower failed</source>\n        <translation>调制解调器在手机信号塔上的注册失败</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"91\"/>\n        <source>the device firmware is missing</source>\n        <translation>设备固件丢失</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"93\"/>\n        <source>the device was removed</source>\n        <translation>设备已删除</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"95\"/>\n        <source>the device is sleeping</source>\n        <translation>设备正在休眠</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"97\"/>\n        <source>the connection was removed</source>\n        <translation>连接已删除</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"99\"/>\n        <source>you requested the action</source>\n        <translation>您要求采取行动</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"107\"/>\n        <source>the modem was not found</source>\n        <translation>找不到调制解调器</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"109\"/>\n        <source>Bluetooth is not available</source>\n        <translation>蓝牙不可用</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"111\"/>\n        <source>the SIM card is not inserted</source>\n        <translation>未插入SIM卡</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"113\"/>\n        <source>the SIM PIN is required</source>\n        <translation>需要SIM卡PIN码</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"115\"/>\n        <source>the SIM PUK is required</source>\n        <translation>需要SIM PUK</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"118\"/>\n        <source>the SIM PUK is exhausted</source>\n        <translation>SIM PUK已耗尽</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"126\"/>\n        <source>ModemManager is not operational on this device</source>\n        <translation>ModemManager在此设备上无法运行</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"128\"/>\n        <source>the wireless network wasn&apos;t found</source>\n        <translation>找不到无线网络</translation>\n    </message>\n    <message>\n        <location filename=\"../networkplugincommon.cpp\" line=\"198\"/>\n        <source>Cellular</source>\n        <translation type=\"unfinished\">蜂窝</translation>\n    </message>\n</context>\n<context>\n    <name>ConnectionSelectionPopover</name>\n    <message>\n        <location filename=\"../statusCenter/popovers/connectionselectionpopover.ui\" line=\"35\"/>\n        <source>Select Connection Profile</source>\n        <translation>选择连接配置文件</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/connectionselectionpopover.ui\" line=\"42\"/>\n        <source>Select a connection profile to use</source>\n        <translation>选择要使用的连接配置文件</translation>\n    </message>\n</context>\n<context>\n    <name>DevicePane</name>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/devicepane.ui\" line=\"144\"/>\n        <source>ACTIONS</source>\n        <translation>行动</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/devicepane.ui\" line=\"153\"/>\n        <source>Disconnect</source>\n        <translation>断开</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/devicepane.ui\" line=\"83\"/>\n        <source>STATUS</source>\n        <translation>状态</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/devicepane.ui\" line=\"90\"/>\n        <source>theDesk doesn&apos;t support this network interface, so you won&apos;t be able to configure it fully here.</source>\n        <translation>theDesk不支持此网络接口，因此您将无法在此处完全配置它。</translation>\n    </message>\n</context>\n<context>\n    <name>GenericChunkUpdater</name>\n    <message>\n        <location filename=\"../chunk/genericchunkupdater.cpp\" line=\"24\"/>\n        <source>Connected</source>\n        <translation>连接的</translation>\n    </message>\n</context>\n<context>\n    <name>IPv4ConnectionEditorPane</name>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"35\"/>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.cpp\" line=\"69\"/>\n        <source>IPv4</source>\n        <translation>IPv4</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"99\"/>\n        <source>DHCP</source>\n        <translation>DHCP</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"104\"/>\n        <source>DHCP with manual DNS</source>\n        <translation>具有手动DNS的DHCP</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"109\"/>\n        <source>Manual</source>\n        <translation>手册</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"114\"/>\n        <source>Shared</source>\n        <translation>共享</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"119\"/>\n        <source>Disabled</source>\n        <translation>关闭</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"127\"/>\n        <source>Configuration Method</source>\n        <translation>配置方式</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"143\"/>\n        <source>Require IPv4</source>\n        <translation>需要IPv4</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"208\"/>\n        <source>IP Address</source>\n        <translation>IP地址</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"215\"/>\n        <source>Default Gateway</source>\n        <translation>默认网关</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"222\"/>\n        <source>Subnet Length</source>\n        <translation>子网长度</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"235\"/>\n        <source>ADDRESSES</source>\n        <translation>地址</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"352\"/>\n        <source>1.1.1.1</source>\n        <translation>1.1.1.1</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"345\"/>\n        <source>DNS</source>\n        <translation>域名解析</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"255\"/>\n        <source>Set the IP address that this device will be assigned.</source>\n        <translation>设置此设备将分配的IP地址。</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.ui\" line=\"359\"/>\n        <source>Configure the DNS servers that will be used to resolve domain names.</source>\n        <translation>配置将用于解析域名的DNS服务器。</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.cpp\" line=\"217\"/>\n        <source>For DNS server %1</source>\n        <translation>对于DNS服务器％1</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/ipv4connectioneditorpane.cpp\" line=\"218\"/>\n        <source>Remove</source>\n        <translation>移除</translation>\n    </message>\n</context>\n<context>\n    <name>NetworkChunk</name>\n    <message>\n        <location filename=\"../chunk/networkchunk.cpp\" line=\"103\"/>\n        <source>Disconnected</source>\n        <translation>断开</translation>\n    </message>\n    <message>\n        <location filename=\"../chunk/networkchunk.cpp\" line=\"137\"/>\n        <source>Login Required</source>\n        <translation>需要登录</translation>\n    </message>\n    <message>\n        <location filename=\"../chunk/networkchunk.cpp\" line=\"140\"/>\n        <source>Can&apos;t get to the Internet</source>\n        <translation>无法连接到互联网</translation>\n    </message>\n    <message>\n        <location filename=\"../chunk/networkchunk.cpp\" line=\"64\"/>\n        <source>Network Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>NetworkConnectionEditor</name>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"260\"/>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"303\"/>\n        <source>General</source>\n        <translation>总</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"327\"/>\n        <source>Connection Name</source>\n        <translation>连接名称</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"195\"/>\n        <source>DONE?</source>\n        <translation>结束？</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"136\"/>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"224\"/>\n        <source>Save</source>\n        <translation>保存</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.cpp\" line=\"203\"/>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.cpp\" line=\"231\"/>\n        <source>Couldn&apos;t save settings</source>\n        <translation>无法保存设置</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"90\"/>\n        <source>SETTINGS MODIFIED</source>\n        <translation>设置已更改</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/networkconnectioneditor.ui\" line=\"125\"/>\n        <source>Revert</source>\n        <translation>还原</translation>\n    </message>\n</context>\n<context>\n    <name>NetworkPluginCommon</name>\n    <message>\n        <source>the device is no longer managed by NetworkManager</source>\n        <translation type=\"obsolete\">设备不再由NetworkManager管理</translation>\n    </message>\n    <message>\n        <source>configuration of the device failed</source>\n        <translation type=\"obsolete\">设备配置失败</translation>\n    </message>\n    <message>\n        <source>configuration of the device is unavailable</source>\n        <translation type=\"obsolete\">设备的配置不可用</translation>\n    </message>\n    <message>\n        <source>configuration of the device expired</source>\n        <translation type=\"obsolete\">设备配置已过期</translation>\n    </message>\n    <message>\n        <source>required secrets were not provided</source>\n        <translation type=\"obsolete\">没有提供所需的密码</translation>\n    </message>\n    <message>\n        <source>the authentication supplicant disconnected</source>\n        <translation type=\"obsolete\">身份验证请求者已断开连接</translation>\n    </message>\n    <message>\n        <source>configuration of the authentication supplicant failed</source>\n        <translation type=\"obsolete\">身份验证请求者配置失败</translation>\n    </message>\n    <message>\n        <source>the authentication supplicant failed</source>\n        <translation type=\"obsolete\">认证请求者失败</translation>\n    </message>\n    <message>\n        <source>the authentication supplicant timed out</source>\n        <translation type=\"obsolete\">身份验证请求方超时</translation>\n    </message>\n    <message>\n        <source>the PPP network failed to start</source>\n        <translation type=\"obsolete\">PPP网络无法启动</translation>\n    </message>\n    <message>\n        <source>the PPP network was disconnected</source>\n        <translation type=\"obsolete\">PPP网络已断开连接</translation>\n    </message>\n    <message>\n        <source>the PPP network failed</source>\n        <translation type=\"obsolete\">PPP网络失败</translation>\n    </message>\n    <message>\n        <source>DHCP configuration failed to start</source>\n        <translation type=\"obsolete\">DHCP配置无法启动</translation>\n    </message>\n    <message>\n        <source>DHCP configuration had an error</source>\n        <translation type=\"obsolete\">DHCP配置出错</translation>\n    </message>\n    <message>\n        <source>DHCP configuration failed</source>\n        <translation type=\"obsolete\">DHCP配置失败</translation>\n    </message>\n    <message>\n        <source>the modem is busy</source>\n        <translation type=\"obsolete\">调制解调器忙</translation>\n    </message>\n    <message>\n        <source>there is no dial tone on the modem</source>\n        <translation type=\"obsolete\">调制解调器上没有拨号音</translation>\n    </message>\n    <message>\n        <source>no carrier is available on the modem</source>\n        <translation type=\"obsolete\">调制解调器上没有可用的运营商</translation>\n    </message>\n    <message>\n        <source>dialling the number on the modem timed out</source>\n        <translation type=\"obsolete\">拨打调制解调器上的号码超时</translation>\n    </message>\n    <message>\n        <source>dialling the number on the modem failed</source>\n        <translation type=\"obsolete\">在调制解调器上拨号失败</translation>\n    </message>\n    <message>\n        <source>initialising the modem failed</source>\n        <translation type=\"obsolete\">初始化调制解调器失败</translation>\n    </message>\n    <message>\n        <source>APN selection failed</source>\n        <translation type=\"obsolete\">APN选择失败</translation>\n    </message>\n    <message>\n        <source>the modem is not searching</source>\n        <translation type=\"obsolete\">调制解调器没有搜索</translation>\n    </message>\n    <message>\n        <source>the cell tower denied registration of the modem</source>\n        <translation type=\"obsolete\">基站拒绝注册调制解调器</translation>\n    </message>\n    <message>\n        <source>registration of the modem on the cell tower timed out</source>\n        <translation type=\"obsolete\">调制解调器在手机信号塔上的注册超时</translation>\n    </message>\n    <message>\n        <source>registration of the modem on the cell tower failed</source>\n        <translation type=\"obsolete\">调制解调器在手机信号塔上的注册失败</translation>\n    </message>\n    <message>\n        <source>the device firmware is missing</source>\n        <translation type=\"obsolete\">设备固件丢失</translation>\n    </message>\n    <message>\n        <source>the device was removed</source>\n        <translation type=\"obsolete\">设备已删除</translation>\n    </message>\n    <message>\n        <source>the device is sleeping</source>\n        <translation type=\"obsolete\">设备正在休眠</translation>\n    </message>\n    <message>\n        <source>the connection was removed</source>\n        <translation type=\"obsolete\">连接已删除</translation>\n    </message>\n    <message>\n        <source>you requested the action</source>\n        <translation type=\"obsolete\">您要求采取行动</translation>\n    </message>\n    <message>\n        <source>the modem was not found</source>\n        <translation type=\"obsolete\">找不到调制解调器</translation>\n    </message>\n    <message>\n        <source>Bluetooth is not available</source>\n        <translation type=\"obsolete\">蓝牙不可用</translation>\n    </message>\n    <message>\n        <source>the SIM card is not inserted</source>\n        <translation type=\"obsolete\">未插入SIM卡</translation>\n    </message>\n    <message>\n        <source>the SIM PIN is required</source>\n        <translation type=\"obsolete\">需要SIM卡PIN码</translation>\n    </message>\n    <message>\n        <source>the SIM PUK is required</source>\n        <translation type=\"obsolete\">需要SIM PUK</translation>\n    </message>\n    <message>\n        <source>the SIM PUK is exhausted</source>\n        <translation type=\"obsolete\">SIM PUK已耗尽</translation>\n    </message>\n    <message>\n        <source>ModemManager is not operational on this device</source>\n        <translation type=\"obsolete\">ModemManager在此设备上无法运行</translation>\n    </message>\n    <message>\n        <source>the wireless network wasn&apos;t found</source>\n        <translation type=\"obsolete\">找不到无线网络</translation>\n    </message>\n    <message>\n        <source>an unknown error occurred</source>\n        <translation type=\"obsolete\">出现未知错误</translation>\n    </message>\n    <message>\n        <source>Cellular</source>\n        <translation type=\"obsolete\">蜂窝</translation>\n    </message>\n</context>\n<context>\n    <name>NetworkStatusCenterLeftPane</name>\n    <message>\n        <location filename=\"../statusCenter/networkstatuscenterleftpane.ui\" line=\"35\"/>\n        <source>Network</source>\n        <translation>网络</translation>\n    </message>\n</context>\n<context>\n    <name>NetworkStatusCenterPane</name>\n    <message>\n        <location filename=\"../statusCenter/networkstatuscenterpane.cpp\" line=\"159\"/>\n        <source>Network</source>\n        <translation>网络</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/networkstatuscenterpane.ui\" line=\"100\"/>\n        <source>NetworkManager is not operational</source>\n        <translation>NetworkManager无法运行</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/networkstatuscenterpane.ui\" line=\"110\"/>\n        <source>Contact your system administrator</source>\n        <translation>与系统管理员联系</translation>\n    </message>\n</context>\n<context>\n    <name>OnboardingNetwork</name>\n    <message>\n        <location filename=\"../onboarding/onboardingnetwork.ui\" line=\"35\"/>\n        <location filename=\"../onboarding/onboardingnetwork.cpp\" line=\"96\"/>\n        <source>Network</source>\n        <translation type=\"unfinished\">网络</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingnetwork.ui\" line=\"42\"/>\n        <source>Connect to the Internet to get updates and install new software.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingnetwork.cpp\" line=\"79\"/>\n        <location filename=\"../onboarding/onboardingnetwork.cpp\" line=\"85\"/>\n        <source>Next</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingnetwork.ui\" line=\"194\"/>\n        <source>You&apos;re connected!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingnetwork.ui\" line=\"204\"/>\n        <source>Disconnect and connect to a different network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingnetwork.cpp\" line=\"73\"/>\n        <source>Continue without Internet</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingnetwork.ui\" line=\"275\"/>\n        <source>You can always set up the network connection later.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SecurityEapPeap</name>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"35\"/>\n        <source>PEAP</source>\n        <translation>PEAP</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"42\"/>\n        <source>Enter the settings for this network</source>\n        <translation>输入此网络的设置</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"120\"/>\n        <source>CA Certificate</source>\n        <translation>CA证书</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"89\"/>\n        <source>Anonymous Identity</source>\n        <translation>匿名身份</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"82\"/>\n        <source>Phase-2 Authentication</source>\n        <translation>第二阶段认证</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"135\"/>\n        <source>MSCHAPv2</source>\n        <translation>MSCHAPv2</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"140\"/>\n        <source>MD5</source>\n        <translation>MD5</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"145\"/>\n        <source>GTC</source>\n        <translation>GTC</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"106\"/>\n        <source>Username</source>\n        <translation>用户名</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"113\"/>\n        <source>Password</source>\n        <translation>密码</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"244\"/>\n        <source>Connect</source>\n        <translation>连接</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"99\"/>\n        <source>PEAP version</source>\n        <translation>PEAP版本</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"171\"/>\n        <source>Automatic</source>\n        <translation>自动</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"187\"/>\n        <source>Version 0</source>\n        <translation>版本 0</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"200\"/>\n        <source>Version 1</source>\n        <translation>版本 1</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.ui\" line=\"127\"/>\n        <source>Browse...</source>\n        <translation>浏览。。。</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeappeap.cpp\" line=\"107\"/>\n        <source>Certificates (*.pem, *.cer)</source>\n        <translation>证书（* .pem，*。cer）</translation>\n    </message>\n</context>\n<context>\n    <name>SecurityEapUnsupported</name>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeapunsupported.ui\" line=\"35\"/>\n        <location filename=\"../statusCenter/eap/securityeapunsupported.ui\" line=\"77\"/>\n        <source>Unsupported Security Settings</source>\n        <translation>不支持的安全设置</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/eap/securityeapunsupported.ui\" line=\"87\"/>\n        <source>Sorry, theDesk doesn&apos;t support those security settings at the moment. You can try using the terminal to configure this network.</source>\n        <translation>抱歉，theDesk目前不支持这些安全设置。 您可以尝试使用终端配置此网络。</translation>\n    </message>\n</context>\n<context>\n    <name>SimSettingsPopover</name>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"98\"/>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"114\"/>\n        <source>Enable SIM PIN</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"537\"/>\n        <source>Enter the current SIM PIN</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"105\"/>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"120\"/>\n        <source>Disable SIM PIN</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"112\"/>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"164\"/>\n        <source>Change SIM PIN</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"142\"/>\n        <source>You have %n remaining tries</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n        </translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"340\"/>\n        <source>Enter the new SIM PIN</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"57\"/>\n        <source>Modem Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"88\"/>\n        <source>SIM PIN</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"188\"/>\n        <source>IMSI</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"195\"/>\n        <source>IMEI</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"208\"/>\n        <source>MODEM INFORMATION</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"215\"/>\n        <source>Carrier</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"58\"/>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"59\"/>\n        <source>No SIM card</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"128\"/>\n        <source>CALLS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"138\"/>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"769\"/>\n        <source>Call Waiting</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"806\"/>\n        <source>Enable Call Waiting</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.ui\" line=\"813\"/>\n        <source>Call Waiting allows you to receive calls while another call is currently active.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"203\"/>\n        <source>Error</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/simsettingspopover.cpp\" line=\"204\"/>\n        <source>Couldn&apos;t get current Call Waiting status from carrier</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SwitchManager</name>\n    <message>\n        <location filename=\"../switchmanager.cpp\" line=\"63\"/>\n        <location filename=\"../switchmanager.cpp\" line=\"72\"/>\n        <location filename=\"../switchmanager.cpp\" line=\"122\"/>\n        <source>Flight Mode</source>\n        <translation>飞行模式</translation>\n    </message>\n    <message>\n        <location filename=\"../switchmanager.cpp\" line=\"78\"/>\n        <location filename=\"../switchmanager.cpp\" line=\"123\"/>\n        <source>Wi-Fi</source>\n        <translation>Wi-Fi</translation>\n    </message>\n    <message>\n        <location filename=\"../switchmanager.cpp\" line=\"88\"/>\n        <location filename=\"../switchmanager.cpp\" line=\"124\"/>\n        <source>Cellular</source>\n        <translation>蜂窝</translation>\n    </message>\n    <message>\n        <location filename=\"../switchmanager.cpp\" line=\"67\"/>\n        <source>Switch off Flight Mode</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>TetheringSettingsPopover</name>\n    <message>\n        <location filename=\"../statusCenter/popovers/tetheringsettingspopover.ui\" line=\"35\"/>\n        <source>Tethering Settings</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/tetheringsettingspopover.ui\" line=\"63\"/>\n        <source>SSID</source>\n        <translation type=\"unfinished\">SSID</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/tetheringsettingspopover.ui\" line=\"96\"/>\n        <source>Network Key</source>\n        <translation type=\"unfinished\">网络密钥</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/tetheringsettingspopover.ui\" line=\"73\"/>\n        <source>These settings will be used to set up a Wi-Fi network that other devices can connect to when tethering is enabled.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/tetheringsettingspopover.cpp\" line=\"64\"/>\n        <source>Network key needs to be at least 8 characters long</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>UnlockModemPopover</name>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.ui\" line=\"190\"/>\n        <source>Enter the SIM PIN</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.cpp\" line=\"70\"/>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.cpp\" line=\"75\"/>\n        <source>You have %n remaining tries</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n        </translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.ui\" line=\"379\"/>\n        <source>SIM PUK REQUIRED</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.ui\" line=\"466\"/>\n        <source>Confirm SIM PIN</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.ui\" line=\"356\"/>\n        <source>SIM PUK</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.ui\" line=\"456\"/>\n        <source>New SIM PIN</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.ui\" line=\"363\"/>\n        <source>You&apos;ll also need to provide a new SIM PIN to set once the SIM is unlocked.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.ui\" line=\"425\"/>\n        <source>Unlock SIM Card</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.cpp\" line=\"48\"/>\n        <source>Don&apos;t guess the PUK!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.cpp\" line=\"49\"/>\n        <source>Once you exhaust your attempts, the SIM card will be blocked forever.\n\nYou&apos;ll need to contact your carrier for a new SIM card.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.cpp\" line=\"78\"/>\n        <source>Contact your carrier to obtain the &lt;b&gt;SIM PUK&lt;/b&gt;, and enter it below to unlock %1.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.cpp\" line=\"68\"/>\n        <source>If you enter the incorrect PIN again, your SIM card will be PUK locked, and you&apos;ll need to contact your carrier.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/unlockmodempopover.cpp\" line=\"73\"/>\n        <source>This is your final chance to get the PUK right before you&apos;ll need to obtain a new SIM card from your carrier.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>WifiConnectionEditorPane</name>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/wificonnectioneditorpane.ui\" line=\"35\"/>\n        <location filename=\"../statusCenter/connectionEditor/wificonnectioneditorpane.cpp\" line=\"47\"/>\n        <source>Wi-Fi</source>\n        <translation>Wi-Fi</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/wificonnectioneditorpane.ui\" line=\"66\"/>\n        <source>SSID</source>\n        <translation>SSID</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/wificonnectioneditorpane.ui\" line=\"59\"/>\n        <source>Mode</source>\n        <translation>模式</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/wificonnectioneditorpane.ui\" line=\"77\"/>\n        <source>Infrastructure</source>\n        <translation>基础设施</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/wificonnectioneditorpane.ui\" line=\"82\"/>\n        <source>Ad-Hoc</source>\n        <translation>Ad-Hoc</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/connectionEditor/wificonnectioneditorpane.ui\" line=\"87\"/>\n        <source>Access Point</source>\n        <translation>切入点</translation>\n    </message>\n</context>\n<context>\n    <name>WifiDevicePane</name>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"106\"/>\n        <source>STATUS</source>\n        <translation>状态</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"268\"/>\n        <source>ACTIONS</source>\n        <translation>行动</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"284\"/>\n        <source>Disconnect</source>\n        <translation>断开</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"118\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"143\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"153\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"202\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"203\"/>\n        <source>Wi-Fi</source>\n        <translation>Wi-Fi</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"124\"/>\n        <source>This Device</source>\n        <translation>此设备</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"119\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"230\"/>\n        <source>Disconnected</source>\n        <translation>断开</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"154\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"239\"/>\n        <source>Failed</source>\n        <translation>失败</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"282\"/>\n        <source>Unknown</source>\n        <translation>未知</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"273\"/>\n        <source>0 Devices</source>\n        <translation>0 设备</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"138\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"144\"/>\n        <source>Connected</source>\n        <translation>连接的</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"277\"/>\n        <source>Select Network</source>\n        <translation>选择网络</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"164\"/>\n        <source>Connection Failure</source>\n        <translation>连接失败</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"166\"/>\n        <source>Connecting to %1 failed because %2.</source>\n        <translation>由于％2连接到％1失败。</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"170\"/>\n        <source>the network</source>\n        <translation>网络</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"414\"/>\n        <source>SSID</source>\n        <translation>SSID</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"355\"/>\n        <source>Network Key</source>\n        <translation>网络密钥</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"398\"/>\n        <source>Enable Tethering</source>\n        <translation>启用网络共享</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"348\"/>\n        <source>TETHERING</source>\n        <translation>共享</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"440\"/>\n        <source>Set Tethering Settings</source>\n        <translation>设置网络共享</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"452\"/>\n        <source>Couldn&apos;t configure tethering</source>\n        <translation>无法配置网络共享</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"88\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"131\"/>\n        <source>Tethering</source>\n        <translation>共享</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"132\"/>\n        <source>Active</source>\n        <translation>活跃</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"375\"/>\n        <source>Use Tethering to share your internet connection with other devices over Wi-Fi.\n\n**While Tethering is active, you won&apos;t be able to connect to the Internet with Wi-Fi, so you&apos;ll need to make sure you have an alternate way to connect to the Internet.**</source>\n        <translation>使用网络共享可通过Wi-Fi与其他设备共享互联网连接。\n\n**虽然启用了网络共享，但您将无法使用Wi-Fi连接到Internet，因此，您需要确保您有另一种连接到Internet的方式。**</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"478\"/>\n        <source>Couldn&apos;t switch off tethering</source>\n        <translation>无法关闭网络共享</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"489\"/>\n        <source>Wi-Fi is off</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"522\"/>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"669\"/>\n        <source>Switch Wi-Fi On</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"568\"/>\n        <source>Wi-Fi is disabled</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"512\"/>\n        <source>Switch Wi-Fi on to connect to a wireless network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"591\"/>\n        <source>Use the Wi-Fi switch to enable Wi-Fi and connect to a network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"636\"/>\n        <source>You&apos;re in flight mode</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.ui\" line=\"659\"/>\n        <source>Switch Wi-Fi on to connect to a wireless network. Flight mode won&apos;t be disabled.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wifidevicepane.cpp\" line=\"91\"/>\n        <source>Disable Tethering</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>WiredChunkUpdater</name>\n    <message>\n        <location filename=\"../chunk/wiredchunkupdater.cpp\" line=\"25\"/>\n        <source>Wired</source>\n        <translation>有线</translation>\n    </message>\n</context>\n<context>\n    <name>WiredDevicePane</name>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.ui\" line=\"84\"/>\n        <source>STATUS</source>\n        <translation>状态</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.ui\" line=\"102\"/>\n        <source>This Device</source>\n        <translation>此设备</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.ui\" line=\"246\"/>\n        <source>ACTIONS</source>\n        <translation>行动</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.ui\" line=\"255\"/>\n        <source>Connect</source>\n        <translation>连接</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.ui\" line=\"262\"/>\n        <source>Disconnect</source>\n        <translation>断开</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.ui\" line=\"35\"/>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"64\"/>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"83\"/>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"90\"/>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"103\"/>\n        <source>Wired</source>\n        <translation>有线</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"84\"/>\n        <source>Disconnected</source>\n        <translation>断开</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"95\"/>\n        <source>Connected</source>\n        <translation>连接的</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"104\"/>\n        <source>Failed</source>\n        <translation>失败</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"177\"/>\n        <source>Connection Failure</source>\n        <translation>连接失败</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"179\"/>\n        <source>Connecting to the network failed because %2.</source>\n        <translation>由于％2，连接到网络失败。</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"122\"/>\n        <source>Router</source>\n        <translation>路由器</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"144\"/>\n        <source>Unavailable</source>\n        <translation>不可用</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"148\"/>\n        <source>Connect an Ethernet cable.</source>\n        <translation>连接以太网电缆。</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/devicePanes/wireddevicepane.cpp\" line=\"150\"/>\n        <source>This network is unavailable because %2.</source>\n        <translation>由于％2，该网络不可用。</translation>\n    </message>\n</context>\n<context>\n    <name>WiredOnboardingSetup</name>\n    <message>\n        <location filename=\"../onboarding/wiredonboardingsetup.ui\" line=\"57\"/>\n        <source>WIRED</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/wiredonboardingsetup.ui\" line=\"73\"/>\n        <source>Use Wired Connection</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/wiredonboardingsetup.cpp\" line=\"94\"/>\n        <source>To connect to the Internet using a wired network, connect the network cable.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/wiredonboardingsetup.cpp\" line=\"91\"/>\n        <source>Connect to the Internet using a wired network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>WirelessNetworkListDelegate</name>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"89\"/>\n        <source>In Range</source>\n        <translation>在范围内</translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"97\"/>\n        <source>Out of range</source>\n        <translation>超出范围</translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"107\"/>\n        <source>Not Secured</source>\n        <translation>不安全</translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"110\"/>\n        <source>Secured with Static WEP</source>\n        <translation>通过静态WEP进行保护</translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"113\"/>\n        <source>Secured with Dynamic WEP</source>\n        <translation>通过动态WEP进行保护</translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"116\"/>\n        <source>Secured with LEAP</source>\n        <translation>用LEAP保护</translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"119\"/>\n        <source>Secured with WPA-PSK</source>\n        <translation>使用WPA-PSK进行保护</translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"122\"/>\n        <source>Secured with WPA Enterprise</source>\n        <translation>由WPA Enterprise保护</translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"125\"/>\n        <source>Secured with WPA2-PSK</source>\n        <translation>使用WPA2-PSK进行保护</translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"128\"/>\n        <source>Secured with WPA2 Enterprise</source>\n        <translation>使用WPA2 Enterprise保护</translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"85\"/>\n        <source>Connected</source>\n        <translation>连接的</translation>\n    </message>\n    <message>\n        <location filename=\"../models/wirelessnetworklistdelegate.cpp\" line=\"131\"/>\n        <source>Secured with WPA3</source>\n        <translation>用WPA3保护</translation>\n    </message>\n</context>\n<context>\n    <name>WirelessNetworkSelectionPopover</name>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"57\"/>\n        <source>Connect to a Wireless Network</source>\n        <translation>连接到无线网络</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"107\"/>\n        <source>KNOWN NETWORKS</source>\n        <translation>已知网络</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"158\"/>\n        <source>NEW NETWORKS</source>\n        <translation>新网络</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"181\"/>\n        <source>New Manual Connection</source>\n        <translation>新的手动连接</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.cpp\" line=\"217\"/>\n        <source>For network %1</source>\n        <translation>对于网络％1</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.cpp\" line=\"235\"/>\n        <source>Forget Network</source>\n        <translation>忘记网络</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"421\"/>\n        <source>Network Security</source>\n        <translation>网络安全</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.cpp\" line=\"141\"/>\n        <source>Unknown Security</source>\n        <translation>未知的安全性</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.cpp\" line=\"142\"/>\n        <source>Not sure how to connect to this network. Use manual setup to connect to it.</source>\n        <translation>不确定如何连接到该网络。 使用手动设置进行连接。</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"297\"/>\n        <source>Enter the security key</source>\n        <translation>输入安全密钥</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"454\"/>\n        <source>Select the EAP method. If you don&apos;t know what to select, contact your system administrator for the details.</source>\n        <translation>选择EAP方法。 如果您不知道要选择什么，请与系统管理员联系以获取详细信息。</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"484\"/>\n        <source>TLS</source>\n        <translation>TLS</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"489\"/>\n        <source>LEAP</source>\n        <translation>LEAP</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"494\"/>\n        <source>PWD</source>\n        <translation>PWD</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"499\"/>\n        <source>FAST</source>\n        <translation>快速</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"504\"/>\n        <source>TTLS</source>\n        <translation>TTLS</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.ui\" line=\"509\"/>\n        <source>PEAP</source>\n        <translation>PEAP</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.cpp\" line=\"316\"/>\n        <source>Wireless</source>\n        <translation>无线</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.cpp\" line=\"218\"/>\n        <source>Edit</source>\n        <translation>编辑</translation>\n    </message>\n    <message>\n        <location filename=\"../statusCenter/popovers/wirelessnetworkselectionpopover.cpp\" line=\"319\"/>\n        <source>Connect</source>\n        <translation>连接</translation>\n    </message>\n</context>\n<context>\n    <name>WirelessOnboardingSetup</name>\n    <message>\n        <location filename=\"../onboarding/wirelessonboardingsetup.ui\" line=\"57\"/>\n        <source>WI-FI</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/wirelessonboardingsetup.ui\" line=\"64\"/>\n        <source>Connect to the Internet using a Wi-Fi network</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/wirelessonboardingsetup.ui\" line=\"73\"/>\n        <source>Select Network</source>\n        <translation type=\"unfinished\">选择网络</translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/NotificationsPlugin/CMakeLists.txt",
    "content": "cmake_minimum_required(VERSION 3.24.0)\n\nfind_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets DBus)\nfind_package(libcontemporary)\n\nset(SOURCES\n    chunks/mprischunk.cpp\n    dbus/notifications_adaptor.cpp\n    dbus/notificationsinterface.cpp\n    drawer/hudwidget.cpp\n    drawer/notificationsdrawer.cpp\n    drawer/notificationsdrawerwidget.cpp\n    notification.cpp\n    notificationtracker.cpp\n    plugin.cpp\n    statuscenter/notificationappgroup.cpp\n    statuscenter/notificationsstatuscenterpane.cpp\n    statuscenter/notificationwidget.cpp\n\n    chunks/mprischunk.ui\n    drawer/hudwidget.ui\n    drawer/notificationsdrawer.ui\n    drawer/notificationsdrawerwidget.ui\n    statuscenter/notificationappgroup.ui\n    statuscenter/notificationsstatuscenterpane.ui\n    statuscenter/notificationwidget.ui\n\n    statuscenter/jobwidget.cpp statuscenter/jobwidget.ui\n)\n\nset(HEADERS\n    chunks/mprischunk.h\n    dbus/notifications_adaptor.h\n    dbus/notificationsinterface.h\n    drawer/hudwidget.h\n    drawer/notificationsdrawer.h\n    drawer/notificationsdrawerwidget.h\n    notification.h\n    notificationtracker.h\n    plugin.h\n    statuscenter/notificationappgroup.h\n    statuscenter/notificationsstatuscenterpane.h\n    statuscenter/notificationwidget.h\n    statuscenter/jobwidget.h\n)\n\nset(PLUGIN_NAME notifications)\nadd_plugin_td(${PLUGIN_NAME})\ntarget_sources(plugin-${PLUGIN_NAME} PRIVATE ${SOURCES} ${HEADERS})\ncntp_defaults_file(${PLUGIN_NAME}\n    DEFAULTS_FILE thedesk-notifications.conf)\n\ntarget_link_libraries(plugin-${PLUGIN_NAME} Qt::Widgets Qt::Multimedia libcontemporary libthedesk)\n"
  },
  {
    "path": "plugins/NotificationsPlugin/NotificationsPlugin.pro",
    "content": "QT += widgets\n\nTEMPLATE = lib\nDEFINES += NOTIFICATIONSPLUGIN_LIBRARY\n\n# Include the-libs build tools\ninclude(/usr/share/the-libs/pri/gentranslations.pri)\n\nCONFIG += c++11\n\n# The following define makes your compiler emit warnings if you use\n# any Qt feature that has been marked deprecated (the exact warnings\n# depend on your compiler). Please consult the documentation of the\n# deprecated API in order to know how to port your code away from it.\nDEFINES += QT_DEPRECATED_WARNINGS\n\n# You can also make your code fail to compile if it uses deprecated APIs.\n# In order to do so, uncomment the following line.\n# You can also select to disable deprecated APIs only up to a certain version of Qt.\n#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0\n\nSOURCES += \\\n    chunks/mprischunk.cpp \\\n    dbus/notifications_adaptor.cpp \\\n    dbus/notificationsinterface.cpp \\\n    drawer/hudwidget.cpp \\\n    drawer/notificationsdrawer.cpp \\\n    drawer/notificationsdrawerwidget.cpp \\\n    notification.cpp \\\n    notificationtracker.cpp \\\n    plugin.cpp \\\n    statuscenter/notificationappgroup.cpp \\\n    statuscenter/notificationsstatuscenterpane.cpp \\\n    statuscenter/notificationwidget.cpp\n\nHEADERS += \\\n    chunks/mprischunk.h \\\n    dbus/notifications_adaptor.h \\\n    dbus/notificationsinterface.h \\\n    drawer/hudwidget.h \\\n    drawer/notificationsdrawer.h \\\n    drawer/notificationsdrawerwidget.h \\\n    notification.h \\\n    notificationtracker.h \\\n    plugin.h \\\n    statuscenter/notificationappgroup.h \\\n    statuscenter/notificationsstatuscenterpane.h \\\n    statuscenter/notificationwidget.h\n\nunix {\n    translations.files = translations/*.qm\n    translations.path = /usr/share/thedesk/NotificationsPlugin/translations\n\n    defaults.files = defaults.conf\n    defaults.path = /etc/theSuite/theDesk/NotificationsPlugin/\n\n    INSTALLS += translations defaults\n\n    INSTALLS += translations\n}\n\ninclude(../plugins.pri)\n\nDISTFILES += \\\n    Plugin.json \\\n    defaults.conf\n\nFORMS += \\\n    chunks/mprischunk.ui \\\n    drawer/hudwidget.ui \\\n    drawer/notificationsdrawer.ui \\\n    drawer/notificationsdrawerwidget.ui \\\n    statuscenter/notificationappgroup.ui \\\n    statuscenter/notificationsstatuscenterpane.ui \\\n    statuscenter/notificationwidget.ui\n"
  },
  {
    "path": "plugins/NotificationsPlugin/Plugin.json",
    "content": "{\n    \"name\": \"Notifications\",\n    \"icon\": \"preferences-system-notifications\",\n    \"uuid\": \"dc34359b-43fe-4bb9-bbf1-0c0ff1501bff\",\n    \"vi\": {\n        \"name\": \"Thông báo\"\n    }\n}\n"
  },
  {
    "path": "plugins/NotificationsPlugin/chunks/mprischunk.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"mprischunk.h\"\n#include \"ui_mprischunk.h\"\n\n#include <Applications/application.h>\n#include <QActionGroup>\n#include <QMenu>\n#include <barmanager.h>\n#include <libcontemporary_global.h>\n#include <mpris/mprisengine.h>\n#include <mpris/mprisplayer.h>\n#include <statemanager.h>\n\nstruct MprisChunkPrivate {\n        MprisPlayerPtr currentPlayer;\n        QString currentPlayerService;\n        ApplicationPointer currentPlayerApplication;\n\n        QMenu* playersMenu;\n        QActionGroup* playersGroup;\n        QMap<QString, QAction*> playerActions;\n\n        BarManager::BarLockPtr barLocker;\n};\n\nMprisChunk::MprisChunk() :\n    Chunk(),\n    ui(new Ui::MprisChunk) {\n    ui->setupUi(this);\n\n    d = new MprisChunkPrivate();\n    d->playersGroup = new QActionGroup(this);\n\n    d->playersMenu = new QMenu(this);\n    d->playersMenu->addSection(tr(\"Media Players\"));\n    connect(d->playersMenu, &QMenu::aboutToShow, this, [=] {\n        d->barLocker = StateManager::barManager()->acquireLock();\n    });\n    connect(d->playersMenu, &QMenu::aboutToHide, this, [=] {\n        d->barLocker->unlock();\n    });\n    ui->playersButton->setMenu(d->playersMenu);\n    ui->playersButton->setVisible(MprisEngine::players().count() > 1);\n\n    connect(MprisEngine::instance(), &MprisEngine::newPlayer, this, [=](QString service, MprisPlayerPtr player) {\n        Q_UNUSED(player)\n        setupPlayer(service);\n\n        if (d->currentPlayer == nullptr) setCurrentPlayer(service);\n    });\n    connect(MprisEngine::instance(), &MprisEngine::playerGone, this, [=](QString service) {\n        QAction* action = d->playerActions.take(service);\n        d->playersMenu->removeAction(action);\n        action->deleteLater();\n        ui->playersButton->setVisible(MprisEngine::players().count() > 1);\n\n        if (d->currentPlayerService == service) {\n            // Find another player\n            if (!MprisEngine::players().isEmpty()) {\n                setCurrentPlayer(MprisEngine::players().first()->service());\n            } else {\n                setCurrentPlayer(\"\");\n            }\n        }\n    });\n\n    if (!MprisEngine::players().isEmpty()) {\n        for (MprisPlayerPtr player : MprisEngine::players()) {\n            setupPlayer(player->service());\n        }\n        setCurrentPlayer(MprisEngine::players().first()->service());\n    } else {\n        setCurrentPlayer(\"\");\n    }\n\n    connect(StateManager::barManager(), &BarManager::barHeightTransitioning, this, [=](qreal percentage) {\n        if (qFuzzyCompare(percentage, 1)) {\n            ui->buttonWidget->setFixedWidth(QWIDGETSIZE_MAX);\n            ui->playersButton->setFixedWidth(QWIDGETSIZE_MAX);\n            ui->stateIcon->setFixedWidth(0);\n        } else if (qFuzzyIsNull(percentage)) {\n            ui->buttonWidget->setFixedWidth(0);\n            ui->playersButton->setFixedWidth(0);\n            ui->stateIcon->setFixedWidth(QWIDGETSIZE_MAX);\n        } else {\n            ui->buttonWidget->setFixedWidth(static_cast<int>(ui->buttonWidget->sizeHint().width() * percentage));\n            ui->playersButton->setFixedWidth(static_cast<int>(ui->playersButton->sizeHint().width() * percentage));\n            ui->stateIcon->setFixedWidth(static_cast<int>(ui->stateIcon->sizeHint().width() * (1 - percentage)));\n        }\n    });\n\n    ui->stateIcon->setFixedWidth(0);\n    ui->stateIcon->setPixmap(QIcon::fromTheme(\"media-playback-start\").pixmap(SC_DPI_T(QSize(16, 16), QSize)));\n\n    // Ensure that the player controls are always LTR\n    //    if (this->layoutDirection() == Qt::RightToLeft) {\n    ui->playerControlsWidget->setLayoutDirection(Qt::LeftToRight);\n    //        ui->playerControlsLayout->setDirection(QBoxLayout::RightToLeft);\n    //    }\n}\n\nMprisChunk::~MprisChunk() {\n    if (StateManager::barManager()->isChunkRegistered(this)) StateManager::barManager()->removeChunk(this);\n    delete d;\n    delete ui;\n}\n\nvoid MprisChunk::setupPlayer(QString service) {\n    MprisPlayerPtr player = MprisEngine::instance()->playerForInterface(service);\n    QAction* action = new QAction();\n    action->setText(player->identity());\n    action->setCheckable(true);\n    connect(action, &QAction::triggered, this, [=] {\n        setCurrentPlayer(service);\n    });\n    d->playerActions.insert(service, action);\n    d->playersGroup->addAction(action);\n    d->playersMenu->addAction(action);\n    ui->playersButton->setVisible(MprisEngine::players().count() > 1);\n}\n\nvoid MprisChunk::setCurrentPlayer(QString player) {\n    d->currentPlayer->disconnect(this);\n    d->currentPlayerService = player;\n    if (player == \"\") {\n        d->currentPlayer = nullptr;\n        d->currentPlayerApplication = nullptr;\n        if (StateManager::barManager()->isChunkRegistered(this)) StateManager::barManager()->removeChunk(this);\n    } else {\n        d->currentPlayer = MprisEngine::playerForInterface(player);\n\n        connect(d->currentPlayer.data(), &MprisPlayerInterface::desktopEntryChanged, this, &MprisChunk::updateApplication);\n        connect(d->currentPlayer.data(), &MprisPlayerInterface::metadataChanged, this, &MprisChunk::updateMetadata);\n        connect(d->currentPlayer.data(), &MprisPlayerInterface::playbackStatusChanged, this, &MprisChunk::updateState);\n\n        updateApplication();\n        updateMetadata();\n        updateState();\n\n        if (!StateManager::barManager()->isChunkRegistered(this)) StateManager::barManager()->addChunk(this);\n        d->playerActions.value(player)->setChecked(true);\n    }\n}\n\nvoid MprisChunk::updateMetadata() {\n    MetadataMap meta = d->currentPlayer->metadata();\n    QStringList parts;\n\n    if (meta.contains(\"xesam:title\")) parts.append(meta.value(\"xesam:title\").toString());\n    if (meta.contains(\"xesam:artist\")) parts.append(QLocale().createSeparatedList(meta.value(\"xesam:artist\").toStringList()));\n\n    if (parts.isEmpty()) {\n        if (d->currentPlayerApplication) {\n            parts.append(d->currentPlayerApplication->getProperty(\"Name\").toString());\n        } else {\n            parts.append(d->currentPlayer->identity());\n        }\n    }\n    ui->metadataLabel->setText(parts.join(\" · \"));\n}\n\nvoid MprisChunk::updateApplication() {\n    if (d->currentPlayer) {\n        d->currentPlayerApplication = ApplicationPointer(new Application(d->currentPlayer->desktopEntry()));\n    } else {\n        d->currentPlayerApplication = nullptr;\n    }\n}\n\nvoid MprisChunk::updateState() {\n    switch (d->currentPlayer->playbackStatus()) {\n        case MprisPlayerInterface::Playing:\n            ui->stateIcon->setPixmap(QIcon::fromTheme(\"media-playback-start\").pixmap(SC_DPI_T(QSize(16, 16), QSize)));\n            ui->playPauseButton->setIcon(QIcon::fromTheme(\"media-playback-pause\"));\n            break;\n        case MprisPlayerInterface::Paused:\n            ui->stateIcon->setPixmap(QIcon::fromTheme(\"media-playback-pause\").pixmap(SC_DPI_T(QSize(16, 16), QSize)));\n            ui->playPauseButton->setIcon(QIcon::fromTheme(\"media-playback-start\"));\n            break;\n        case MprisPlayerInterface::Stopped:\n            ui->stateIcon->setPixmap(QIcon::fromTheme(\"media-playback-stop\").pixmap(SC_DPI_T(QSize(16, 16), QSize)));\n            ui->playPauseButton->setIcon(QIcon::fromTheme(\"media-playback-start\"));\n            break;\n    }\n}\n\nQString MprisChunk::name() {\n    return \"mpris\";\n}\n\nint MprisChunk::expandedHeight() {\n    return this->sizeHint().height();\n}\n\nint MprisChunk::statusBarHeight() {\n    return ui->metadataLabel->sizeHint().height();\n}\n\nvoid MprisChunk::on_playPauseButton_clicked() {\n    if (d->currentPlayer) d->currentPlayer->playPause();\n}\n\nvoid MprisChunk::on_backButton_clicked() {\n    if (d->currentPlayer) d->currentPlayer->previous();\n}\n\nvoid MprisChunk::on_forwardButton_clicked() {\n    if (d->currentPlayer) d->currentPlayer->next();\n}\n"
  },
  {
    "path": "plugins/NotificationsPlugin/chunks/mprischunk.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef MPRISCHUNK_H\n#define MPRISCHUNK_H\n\n#include <chunk.h>\n\nnamespace Ui {\n    class MprisChunk;\n}\n\nstruct MprisChunkPrivate;\nclass MprisChunk : public Chunk {\n        Q_OBJECT\n\n    public:\n        explicit MprisChunk();\n        ~MprisChunk();\n\n    private:\n        Ui::MprisChunk* ui;\n        MprisChunkPrivate* d;\n\n        void setupPlayer(QString service);\n        void setCurrentPlayer(QString player);\n        void updateMetadata();\n        void updateApplication();\n        void updateState();\n\n        // Chunk interface\n    public:\n        QString name();\n        int expandedHeight();\n        int statusBarHeight();\n    private slots:\n        void on_playPauseButton_clicked();\n        void on_backButton_clicked();\n        void on_forwardButton_clicked();\n};\n\n#endif // MPRISCHUNK_H\n"
  },
  {
    "path": "plugins/NotificationsPlugin/chunks/mprischunk.ui",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ui version=\"4.0\">\n <class>MprisChunk</class>\n <widget class=\"QWidget\" name=\"MprisChunk\">\n  <property name=\"geometry\">\n   <rect>\n    <x>0</x>\n    <y>0</y>\n    <width>400</width>\n    <height>41</height>\n   </rect>\n  </property>\n  <property name=\"windowTitle\">\n   <string notr=\"true\">Form</string>\n  </property>\n  <layout class=\"QHBoxLayout\" name=\"horizontalLayout\">\n   <property name=\"spacing\">\n    <number>0</number>\n   </property>\n   <property name=\"leftMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"topMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"rightMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"bottomMargin\">\n    <number>0</number>\n   </property>\n   <item>\n    <widget class=\"QLabel\" name=\"stateIcon\">\n     <property name=\"text\">\n      <string notr=\"true\">TextLabel</string>\n     </property>\n    </widget>\n   </item>\n   <item>\n    <widget class=\"QToolButton\" name=\"playersButton\">\n     <property name=\"sizePolicy\">\n      <sizepolicy hsizetype=\"Preferred\" vsizetype=\"Preferred\">\n       <horstretch>0</horstretch>\n       <verstretch>0</verstretch>\n      </sizepolicy>\n     </property>\n     <property name=\"text\">\n      <string/>\n     </property>\n     <property name=\"icon\">\n      <iconset theme=\"arrow-down\">\n       <normaloff>.</normaloff>.</iconset>\n     </property>\n     <property name=\"popupMode\">\n      <enum>QToolButton::InstantPopup</enum>\n     </property>\n    </widget>\n   </item>\n   <item>\n    <layout class=\"QHBoxLayout\" name=\"horizontalLayout_3\">\n     <property name=\"leftMargin\">\n      <number>6</number>\n     </property>\n     <property name=\"rightMargin\">\n      <number>6</number>\n     </property>\n     <item>\n      <widget class=\"QLabel\" name=\"metadataLabel\">\n       <property name=\"text\">\n        <string notr=\"true\">TextLabel</string>\n       </property>\n      </widget>\n     </item>\n    </layout>\n   </item>\n   <item>\n    <widget class=\"QWidget\" name=\"buttonWidget\" native=\"true\">\n     <layout class=\"QHBoxLayout\" name=\"horizontalLayout_2\">\n      <property name=\"spacing\">\n       <number>0</number>\n      </property>\n      <property name=\"leftMargin\">\n       <number>0</number>\n      </property>\n      <property name=\"topMargin\">\n       <number>0</number>\n      </property>\n      <property name=\"rightMargin\">\n       <number>0</number>\n      </property>\n      <property name=\"bottomMargin\">\n       <number>0</number>\n      </property>\n      <item>\n       <widget class=\"QWidget\" name=\"playerControlsWidget\" native=\"true\">\n        <layout class=\"QHBoxLayout\" name=\"playerControlsLayout\">\n         <property name=\"spacing\">\n          <number>0</number>\n         </property>\n         <property name=\"leftMargin\">\n          <number>0</number>\n         </property>\n         <property name=\"topMargin\">\n          <number>0</number>\n         </property>\n         <property name=\"rightMargin\">\n          <number>0</number>\n         </property>\n         <property name=\"bottomMargin\">\n          <number>0</number>\n         </property>\n         <item>\n          <widget class=\"QToolButton\" name=\"backButton\">\n           <property name=\"sizePolicy\">\n            <sizepolicy hsizetype=\"Preferred\" vsizetype=\"Preferred\">\n             <horstretch>0</horstretch>\n             <verstretch>0</verstretch>\n            </sizepolicy>\n           </property>\n           <property name=\"text\">\n            <string/>\n           </property>\n           <property name=\"icon\">\n            <iconset theme=\"media-skip-backward\">\n             <normaloff>.</normaloff>.</iconset>\n           </property>\n          </widget>\n         </item>\n         <item>\n          <widget class=\"QToolButton\" name=\"playPauseButton\">\n           <property name=\"sizePolicy\">\n            <sizepolicy hsizetype=\"Preferred\" vsizetype=\"Preferred\">\n             <horstretch>0</horstretch>\n             <verstretch>0</verstretch>\n            </sizepolicy>\n           </property>\n           <property name=\"text\">\n            <string/>\n           </property>\n           <property name=\"icon\">\n            <iconset theme=\"media-playback-start\">\n             <normaloff>.</normaloff>.</iconset>\n           </property>\n          </widget>\n         </item>\n         <item>\n          <widget class=\"QToolButton\" name=\"forwardButton\">\n           <property name=\"sizePolicy\">\n            <sizepolicy hsizetype=\"Preferred\" vsizetype=\"Preferred\">\n             <horstretch>0</horstretch>\n             <verstretch>0</verstretch>\n            </sizepolicy>\n           </property>\n           <property name=\"text\">\n            <string/>\n           </property>\n           <property name=\"icon\">\n            <iconset theme=\"media-skip-forward\">\n             <normaloff>.</normaloff>.</iconset>\n           </property>\n          </widget>\n         </item>\n        </layout>\n       </widget>\n      </item>\n     </layout>\n    </widget>\n   </item>\n  </layout>\n </widget>\n <resources/>\n <connections/>\n</ui>\n"
  },
  {
    "path": "plugins/NotificationsPlugin/dbus/notifications_adaptor.cpp",
    "content": "/*\n * This file was generated by qdbusxml2cpp version 0.8\n * Command line was: qdbusxml2cpp -i notifications_adaptor.h -a :notifications_adaptor.cpp ../../../theDesk/plugins/NotificationsPlugin/dbus/org.freedesktop.Notifications.xml\n *\n * qdbusxml2cpp is Copyright (C) 2020 The Qt Company Ltd.\n *\n * This is an auto-generated file.\n * Do not edit! All changes made to it will be lost.\n */\n\n#include \"notifications_adaptor.h\"\n#include <QtCore/QMetaObject>\n#include <QtCore/QByteArray>\n#include <QtCore/QList>\n#include <QtCore/QMap>\n#include <QtCore/QString>\n#include <QtCore/QStringList>\n#include <QtCore/QVariant>\n#include \"notificationsinterface.h\"\n\n/*\n * Implementation of adaptor class NotificationsAdaptor\n */\n\nNotificationsAdaptor::NotificationsAdaptor(QObject* parent)\n    : QDBusAbstractAdaptor(parent) {\n    // constructor\n    setAutoRelaySignals(true);\n}\n\nNotificationsAdaptor::~NotificationsAdaptor() {\n    // destructor\n}\n\nvoid NotificationsAdaptor::CloseNotification(uint id) {\n    // handle method call org.freedesktop.Notifications.CloseNotification\n    QMetaObject::invokeMethod(parent(), \"CloseNotification\", Q_ARG(uint, id));\n}\n\nQStringList NotificationsAdaptor::GetCapabilities() {\n    // handle method call org.freedesktop.Notifications.GetCapabilities\n    QStringList out0;\n    QMetaObject::invokeMethod(parent(), \"GetCapabilities\", Q_RETURN_ARG(QStringList, out0));\n    return out0;\n}\n\nQString NotificationsAdaptor::GetServerInformation(QString& vendor, QString& version, QString& specVersion) {\n    // handle method call org.freedesktop.Notifications.GetServerInformation\n    return static_cast<NotificationsInterface*>(parent())->GetServerInformation(vendor, version, specVersion);\n}\n\nuint NotificationsAdaptor::Notify(const QString& appName, uint replacesId, const QString& appIcon, const QString& summary, const QString& body, const QStringList& actions, const QVariantMap& hints, int expireTimeout) {\n    // handle method call org.freedesktop.Notifications.Notify\n    uint out0;\n    QMetaObject::invokeMethod(parent(), \"Notify\", Q_RETURN_ARG(uint, out0), Q_ARG(QString, appName), Q_ARG(uint, replacesId), Q_ARG(QString, appIcon), Q_ARG(QString, summary), Q_ARG(QString, body), Q_ARG(QStringList, actions), Q_ARG(QVariantMap, hints), Q_ARG(int, expireTimeout));\n    return out0;\n}\n\n"
  },
  {
    "path": "plugins/NotificationsPlugin/dbus/notifications_adaptor.h",
    "content": "/*\n * This file was generated by qdbusxml2cpp version 0.8\n * Command line was: qdbusxml2cpp -a notifications_adaptor.h: ../../../theDesk/plugins/NotificationsPlugin/dbus/org.freedesktop.Notifications.xml\n *\n * qdbusxml2cpp is Copyright (C) 2020 The Qt Company Ltd.\n *\n * This is an auto-generated file.\n * This file may have been hand-edited. Look for HAND-EDIT comments\n * before re-generating it.\n */\n\n#ifndef NOTIFICATIONS_ADAPTOR_H\n#define NOTIFICATIONS_ADAPTOR_H\n\n#include <QtCore/QObject>\n#include <QtDBus/QtDBus>\nQT_BEGIN_NAMESPACE\nclass QByteArray;\ntemplate<class T> class QList;\ntemplate<class Key, class Value> class QMap;\nclass QString;\nclass QVariant;\nQT_END_NAMESPACE\n\n/*\n * Adaptor class for interface org.freedesktop.Notifications\n */\nclass NotificationsAdaptor : public QDBusAbstractAdaptor {\n        Q_OBJECT\n        Q_CLASSINFO(\"D-Bus Interface\", \"org.freedesktop.Notifications\")\n        Q_CLASSINFO(\"D-Bus Introspection\", \"\"\n                                           \"  <interface name=\\\"org.freedesktop.Notifications\\\">\\n\"\n                                           \"    <signal name=\\\"NotificationClosed\\\">\\n\"\n                                           \"      <arg direction=\\\"out\\\" type=\\\"u\\\" name=\\\"id\\\"/>\\n\"\n                                           \"      <arg direction=\\\"out\\\" type=\\\"u\\\" name=\\\"reason\\\"/>\\n\"\n                                           \"    </signal>\\n\"\n                                           \"    <signal name=\\\"ActionInvoked\\\">\\n\"\n                                           \"      <arg direction=\\\"out\\\" type=\\\"u\\\" name=\\\"id\\\"/>\\n\"\n                                           \"      <arg direction=\\\"out\\\" type=\\\"s\\\" name=\\\"actionKey\\\"/>\\n\"\n                                           \"    </signal>\\n\"\n                                           \"    <method name=\\\"GetCapabilities\\\">\\n\"\n                                           \"      <arg direction=\\\"out\\\" type=\\\"as\\\"/>\\n\"\n                                           \"    </method>\\n\"\n                                           \"    <method name=\\\"Notify\\\">\\n\"\n                                           \"      <arg direction=\\\"out\\\" type=\\\"u\\\"/>\\n\"\n                                           \"      <arg direction=\\\"in\\\" type=\\\"s\\\" name=\\\"appName\\\"/>\\n\"\n                                           \"      <arg direction=\\\"in\\\" type=\\\"u\\\" name=\\\"replacesId\\\"/>\\n\"\n                                           \"      <arg direction=\\\"in\\\" type=\\\"s\\\" name=\\\"appIcon\\\"/>\\n\"\n                                           \"      <arg direction=\\\"in\\\" type=\\\"s\\\" name=\\\"summary\\\"/>\\n\"\n                                           \"      <arg direction=\\\"in\\\" type=\\\"s\\\" name=\\\"body\\\"/>\\n\"\n                                           \"      <arg direction=\\\"in\\\" type=\\\"as\\\" name=\\\"actions\\\"/>\\n\"\n                                           \"      <arg direction=\\\"in\\\" type=\\\"a{sv}\\\" name=\\\"hints\\\"/>\\n\"\n                                           \"      <annotation value=\\\"QVariantMap\\\" name=\\\"org.qtproject.QtDBus.QtTypeName.In6\\\"/>\\n\"\n                                           \"      <arg direction=\\\"in\\\" type=\\\"i\\\" name=\\\"expireTimeout\\\"/>\\n\"\n                                           \"    </method>\\n\"\n                                           \"    <method name=\\\"CloseNotification\\\">\\n\"\n                                           \"      <arg direction=\\\"in\\\" type=\\\"u\\\" name=\\\"id\\\"/>\\n\"\n                                           \"    </method>\\n\"\n                                           \"    <method name=\\\"GetServerInformation\\\">\\n\"\n                                           \"      <arg direction=\\\"out\\\" type=\\\"s\\\"/>\\n\"\n                                           \"      <arg direction=\\\"out\\\" type=\\\"s\\\" name=\\\"vendor\\\"/>\\n\"\n                                           \"      <arg direction=\\\"out\\\" type=\\\"s\\\" name=\\\"version\\\"/>\\n\"\n                                           \"      <arg direction=\\\"out\\\" type=\\\"s\\\" name=\\\"specVersion\\\"/>\\n\"\n                                           \"    </method>\\n\"\n                                           \"  </interface>\\n\"\n                                           \"\")\n    public:\n        NotificationsAdaptor(QObject* parent);\n        virtual ~NotificationsAdaptor();\n\n    public:         // PROPERTIES\n    public Q_SLOTS: // METHODS\n        void CloseNotification(uint id);\n        QStringList GetCapabilities();\n        QString GetServerInformation(QString& vendor, QString& version, QString& specVersion);\n        uint Notify(const QString& appName, uint replacesId, const QString& appIcon, const QString& summary, const QString& body, const QStringList& actions, const QVariantMap& hints, int expireTimeout);\n    Q_SIGNALS: // SIGNALS\n        void ActionInvoked(uint id, const QString& actionKey);\n        void NotificationClosed(uint id, uint reason);\n};\n\n#endif\n"
  },
  {
    "path": "plugins/NotificationsPlugin/dbus/notificationsinterface.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"notificationsinterface.h\"\n\n#include <QDBusConnection>\n#include \"notification.h\"\n#include \"notificationtracker.h\"\n#include \"notifications_adaptor.h\"\n\nstruct NotificationsInterfacePrivate {\n    NotificationTracker* tracker;\n};\n\nNotificationsInterface::NotificationsInterface(NotificationTracker* tracker, QObject* parent) : QObject(parent) {\n    new NotificationsAdaptor(this);\n    QDBusConnection::sessionBus().registerService(\"org.freedesktop.Notifications\");\n    QDBusConnection::sessionBus().registerObject(\"/org/freedesktop/Notifications\", this);\n\n    d = new NotificationsInterfacePrivate();\n    d->tracker = tracker;\n    connect(tracker, &NotificationTracker::destroyed, this, &NotificationsInterface::deleteLater);\n}\n\nNotificationsInterface::~NotificationsInterface() {\n    delete d;\n    QDBusConnection::sessionBus().unregisterObject(\"/org/freedesktop/Notifications\");\n    QDBusConnection::sessionBus().unregisterService(\"org.freedesktop.Notifications\");\n}\n\nQStringList NotificationsInterface::GetCapabilities() {\n    return {\"body\", \"actions\", \"action-icons\", \"body-markup\"};\n}\n\nquint32 NotificationsInterface::Notify(QString appName, quint32 replacesId, QString appIcon, QString summary, QString body, QStringList actions, QVariantMap hints, qint32 expireTimeout) {\n    NotificationPtr notification = d->tracker->get(replacesId);\n    if (!notification) {\n        notification = d->tracker->createNotification();\n        connect(notification.data(), &Notification::dismissed, this, [ = ](Notification::NotificationCloseReason closeReason) {\n            emit NotificationClosed(notification->id(), closeReason);\n        });\n        connect(notification.data(), &Notification::actionInvoked, this, [ = ](Notification::Action action) {\n            emit ActionInvoked(notification->id(), action.identifier);\n        });\n    }\n\n    notification->setBody(body);\n    notification->setSummary(summary);\n    notification->setTimeout(expireTimeout);\n\n    if (actions.count() % 2 == 0) {\n        QList<Notification::Action> actionList;\n        for (int i = 0; i < actions.count(); i += 2) {\n            Notification::Action action;\n            action.identifier = actions.at(i);\n            action.text = actions.at(i + 1);\n            if (hints.value(\"action-icons\", false).toBool()) action.icon = QIcon::fromTheme(action.identifier);\n            actionList.append(action);\n        }\n        notification->setActions(actionList);\n    }\n\n    if (hints.contains(\"desktop-entry\") && Application::allApplications().contains(hints.value(\"desktop-entry\").toString())) {\n        notification->setApplication(ApplicationPointer(new Application(hints.value(\"desktop-entry\").toString())));\n    } else {\n        notification->setApplication(ApplicationPointer(new Application({\n            {\"Icon\", \"generic-app\"},\n            {\"Name\", appName}\n        })));\n    }\n\n    if (hints.contains(\"urgency\")) {\n        notification->setUrgency(static_cast<Notification::Urgency>(hints.value(\"urgency\").toInt()));\n    }\n\n    return notification->id();\n}\n\nvoid NotificationsInterface::CloseNotification(quint32 id) {\n    NotificationPtr notification = d->tracker->get(id);\n    if (notification) {\n        notification->dismiss(Notification::NotificationClosedByDBus);\n    }\n}\n\nQString NotificationsInterface::GetServerInformation(QString& vendor, QString& version, QString& specVersion) {\n    vendor = \"theSuite\";\n    version = \"1.0\";\n    specVersion = \"1.2\";\n    return \"theDesk\";\n}\n"
  },
  {
    "path": "plugins/NotificationsPlugin/dbus/notificationsinterface.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef NOTIFICATIONSINTERFACE_H\n#define NOTIFICATIONSINTERFACE_H\n\n#include <QObject>\n#include <QVariantMap>\n\nclass NotificationTracker;\nstruct NotificationsInterfacePrivate;\nclass NotificationsInterface : public QObject {\n        Q_OBJECT\n        Q_CLASSINFO(\"D-Bus Interface\", \"org.freedesktop.Notifications\")\n\n    public:\n        explicit NotificationsInterface(NotificationTracker* tracker, QObject* parent = nullptr);\n        ~NotificationsInterface();\n\n    public Q_SLOTS:\n        Q_SCRIPTABLE QStringList GetCapabilities();\n        Q_SCRIPTABLE quint32 Notify(QString appName, quint32 replacesId, QString appIcon, QString summary, QString body, QStringList actions, QVariantMap hints, qint32 expireTimeout);\n        Q_SCRIPTABLE void CloseNotification(quint32 id);\n        Q_SCRIPTABLE QString GetServerInformation(QString& vendor, QString& version, QString& specVersion);\n\n    signals:\n        Q_SCRIPTABLE void NotificationClosed(quint32 id, quint32 reason);\n        Q_SCRIPTABLE void ActionInvoked(quint32 id, QString actionKey);\n\n    private:\n        NotificationsInterfacePrivate* d;\n};\n\n#endif // NOTIFICATIONSINTERFACE_H\n"
  },
  {
    "path": "plugins/NotificationsPlugin/dbus/org.freedesktop.Notifications.xml",
    "content": "<!DOCTYPE node PUBLIC \"-//freedesktop//DTD D-BUS Object Introspection 1.0//EN\" \"http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd\">\n<node>\n  <interface name=\"org.freedesktop.Notifications\">\n    <signal name=\"NotificationClosed\">\n      <arg name=\"id\" type=\"u\" direction=\"out\"/>\n      <arg name=\"reason\" type=\"u\" direction=\"out\"/>\n    </signal>\n    <signal name=\"ActionInvoked\">\n      <arg name=\"id\" type=\"u\" direction=\"out\"/>\n      <arg name=\"actionKey\" type=\"s\" direction=\"out\"/>\n    </signal>\n    <method name=\"GetCapabilities\">\n      <arg type=\"as\" direction=\"out\"/>\n    </method>\n    <method name=\"Notify\">\n      <arg type=\"u\" direction=\"out\"/>\n      <arg name=\"appName\" type=\"s\" direction=\"in\"/>\n      <arg name=\"replacesId\" type=\"u\" direction=\"in\"/>\n      <arg name=\"appIcon\" type=\"s\" direction=\"in\"/>\n      <arg name=\"summary\" type=\"s\" direction=\"in\"/>\n      <arg name=\"body\" type=\"s\" direction=\"in\"/>\n      <arg name=\"actions\" type=\"as\" direction=\"in\"/>\n      <arg name=\"hints\" type=\"a{sv}\" direction=\"in\"/>\n      <annotation name=\"org.qtproject.QtDBus.QtTypeName.In6\" value=\"QVariantMap\"/>\n      <arg name=\"expireTimeout\" type=\"i\" direction=\"in\"/>\n    </method>\n    <method name=\"CloseNotification\">\n      <arg name=\"id\" type=\"u\" direction=\"in\"/>\n    </method>\n    <method name=\"GetServerInformation\">\n      <arg type=\"s\" direction=\"out\"/>\n      <arg name=\"vendor\" type=\"s\" direction=\"out\"/>\n      <arg name=\"version\" type=\"s\" direction=\"out\"/>\n      <arg name=\"specVersion\" type=\"s\" direction=\"out\"/>\n    </method>\n  </interface>\n</node>\n"
  },
  {
    "path": "plugins/NotificationsPlugin/drawer/hudwidget.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"hudwidget.h\"\n#include \"ui_hudwidget.h\"\n\n#include <statemanager.h>\n#include <hudmanager.h>\n#include <QIcon>\n#include <QGraphicsOpacityEffect>\n#include <tvariantanimation.h>\n#include <QTimer>\n#include <QPainter>\n\nstruct HudWidgetPrivate {\n    QTimer* hideTimer;\n    bool shouldShow = false;\n\n    int state = 0;\n    double value = 0;\n    QColor color;\n};\n\nHudWidget::HudWidget(QWidget* parent) :\n    QWidget(parent),\n    ui(new Ui::HudWidget) {\n    ui->setupUi(this);\n    d = new HudWidgetPrivate();\n\n    this->setFixedHeight(0);\n\n    d->hideTimer = new QTimer(this);\n    d->hideTimer->setInterval(3000);\n    d->hideTimer->setSingleShot(true);\n    connect(d->hideTimer, &QTimer::timeout, this, &HudWidget::animateHide);\n\n    connect(StateManager::hudManager(), &HudManager::requestHud, this, [ = ](QVariantMap params) {\n        QPixmap icon = QIcon::fromTheme(params.value(\"icon\", \"\").toString()).pixmap(SC_DPI_T(QSize(32, 32), QSize));\n        QString title = params.value(\"title\", \"\").toString().toUpper();\n        QString text = params.value(\"text\", \"\").toString();\n        double value = params.value(\"value\", 0).toDouble();\n        int timeout = params.value(\"timeout\", 3000).toInt();\n        QColor color = params.value(\"color\", QColor(Qt::white)).value<QColor>();\n\n        ui->iconValueIcon->setPixmap(icon);\n        ui->iconTextIcon->setPixmap(icon);\n        ui->iconValueTitle->setText(title);\n        ui->iconTextTitle->setText(title);\n        ui->iconTextText->setText(text);\n        ui->iconValueValue->setText(QLocale().toString(value * 100, 'f', 0) + \"%\");\n\n        d->hideTimer->setInterval(timeout);\n\n        color.setAlpha(50);\n        d->color = color;\n\n        //Decide on the layout to use\n        if (params.contains(\"icon\") && params.contains(\"title\") && params.contains(\"text\")) {\n            //Use the icon/text HUD\n            ui->stackedWidget->setCurrentWidget(ui->iconTextPage);\n            d->value = value;\n            ui->iconTextPage->update();\n        } else if (params.contains(\"icon\") && params.contains(\"title\") && params.contains(\"value\")) {\n            //Use the icon/value HUD\n            ui->stackedWidget->setCurrentWidget(ui->iconValuePage);\n            d->value = value;\n            ui->iconValuePage->update();\n        }\n\n        this->animateShow();\n    }, Qt::QueuedConnection);\n    connect(StateManager::hudManager(), &HudManager::requestHideHud, this, [ = ] {\n        //Immediately hide the HUD\n        this->animateHide();\n    });\n\n    ui->iconValuePage->installEventFilter(this);\n    ui->iconTextPage->installEventFilter(this);\n}\n\nHudWidget::~HudWidget() {\n    delete d;\n    delete ui;\n}\n\nbool HudWidget::shouldShow() {\n    return d->shouldShow;\n}\n\nvoid HudWidget::resizeEvent(QResizeEvent* event) {\n    ui->stackedWidget->setFixedWidth(this->width() - SC_DPI(18));\n    ui->stackedWidget->setFixedHeight(ui->stackedWidget->sizeHint().height());\n    ui->stackedWidget->move(SC_DPI(9), this->height() - ui->stackedWidget->height());\n}\n\nbool HudWidget::eventFilter(QObject* watched, QEvent* event) {\n    if (event->type() == QEvent::Paint && (watched == ui->iconValuePage || watched == ui->iconTextPage)) {\n        QWidget* w = static_cast<QWidget*>(watched);\n        QPainter painter(w);\n        painter.setBrush(d->color);\n        painter.setPen(Qt::transparent);\n\n        double val = d->value;\n        while (val > 1) {\n            painter.drawRect(0, 0, w->width(), w->height());\n            val -= 1;\n        }\n\n        painter.drawRect(0, 0, static_cast<int>(w->width() * val), w->height());\n        return true;\n    }\n    return false;\n}\n\nvoid HudWidget::animateShow() {\n    //Make sure we're idle\n    if (d->state != 0) {\n        if (d->state == 2) {\n            d->hideTimer->stop();\n            d->hideTimer->start();\n        }\n        return;\n    }\n    d->state = 1;\n\n    d->hideTimer->stop();\n\n    d->shouldShow = true;\n    emit shouldShowChanged();\n\n    tVariantAnimation* anim = new tVariantAnimation(this);\n    anim->setStartValue(0);\n    anim->setEndValue(ui->stackedWidget->height() + SC_DPI(9));\n    anim->setEasingCurve(QEasingCurve::OutCubic);\n    anim->setDuration(250);\n    connect(anim, &tVariantAnimation::valueChanged, this, [ = ](QVariant value) {\n        this->setFixedHeight(value.toInt());\n        emit shouldShowChanged();\n    });\n    connect(anim, &tVariantAnimation::finished, this, [ = ] {\n        anim->deleteLater();\n        d->hideTimer->start();\n        d->state = 2;\n    });\n    anim->start();\n}\n\nvoid HudWidget::animateHide() {\n    if (d->state != 2) return; //Make sure we're showing\n    d->state = 3;\n\n    d->hideTimer->stop();\n\n    tVariantAnimation* anim = new tVariantAnimation(this);\n    anim->setStartValue(this->height());\n    anim->setEndValue(0);\n    anim->setEasingCurve(QEasingCurve::OutCubic);\n    anim->setDuration(250);\n    connect(anim, &tVariantAnimation::valueChanged, this, [ = ](QVariant value) {\n        this->setFixedHeight(value.toInt());\n        emit shouldShowChanged();\n    });\n    connect(anim, &tVariantAnimation::finished, this, [ = ] {\n        anim->deleteLater();\n\n        d->state = 0;\n        d->shouldShow = false;\n        emit shouldShowChanged();\n    });\n    anim->start();\n}\n"
  },
  {
    "path": "plugins/NotificationsPlugin/drawer/hudwidget.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef HUDWIDGET_H\n#define HUDWIDGET_H\n\n#include <QWidget>\n\nnamespace Ui {\n    class HudWidget;\n}\n\nstruct HudWidgetPrivate;\nclass HudWidget : public QWidget {\n        Q_OBJECT\n\n    public:\n        explicit HudWidget(QWidget* parent = nullptr);\n        ~HudWidget();\n\n        bool shouldShow();\n\n    signals:\n        void shouldShowChanged();\n\n    private:\n        Ui::HudWidget* ui;\n        HudWidgetPrivate* d;\n\n        void resizeEvent(QResizeEvent* event);\n        bool eventFilter(QObject* watched, QEvent* event);\n\n        void animateShow();\n        void animateHide();\n};\n\n#endif // HUDWIDGET_H\n"
  },
  {
    "path": "plugins/NotificationsPlugin/drawer/hudwidget.ui",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ui version=\"4.0\">\n <class>HudWidget</class>\n <widget class=\"QWidget\" name=\"HudWidget\">\n  <property name=\"geometry\">\n   <rect>\n    <x>0</x>\n    <y>0</y>\n    <width>400</width>\n    <height>58</height>\n   </rect>\n  </property>\n  <property name=\"windowTitle\">\n   <string notr=\"true\">Form</string>\n  </property>\n  <widget class=\"QStackedWidget\" name=\"stackedWidget\">\n   <property name=\"geometry\">\n    <rect>\n     <x>9</x>\n     <y>9</y>\n     <width>381</width>\n     <height>41</height>\n    </rect>\n   </property>\n   <property name=\"font\">\n    <font/>\n   </property>\n   <property name=\"autoFillBackground\">\n    <bool>true</bool>\n   </property>\n   <property name=\"frameShape\">\n    <enum>QFrame::StyledPanel</enum>\n   </property>\n   <property name=\"currentIndex\">\n    <number>0</number>\n   </property>\n   <widget class=\"QWidget\" name=\"iconValuePage\">\n    <layout class=\"QHBoxLayout\" name=\"horizontalLayout\">\n     <item>\n      <widget class=\"QLabel\" name=\"iconValueIcon\">\n       <property name=\"text\">\n        <string notr=\"true\">Icon</string>\n       </property>\n      </widget>\n     </item>\n     <item>\n      <widget class=\"QLabel\" name=\"iconValueTitle\">\n       <property name=\"sizePolicy\">\n        <sizepolicy hsizetype=\"Expanding\" vsizetype=\"Preferred\">\n         <horstretch>0</horstretch>\n         <verstretch>0</verstretch>\n        </sizepolicy>\n       </property>\n       <property name=\"font\">\n        <font>\n\n         <bold>true</bold>\n        </font>\n       </property>\n       <property name=\"text\">\n        <string notr=\"true\">VOLUME</string>\n       </property>\n      </widget>\n     </item>\n     <item>\n      <widget class=\"QLabel\" name=\"iconValueValue\">\n       <property name=\"text\">\n        <string notr=\"true\">50%</string>\n       </property>\n      </widget>\n     </item>\n    </layout>\n   </widget>\n   <widget class=\"QWidget\" name=\"iconTextPage\">\n    <layout class=\"QHBoxLayout\" name=\"horizontalLayout_2\">\n     <item>\n      <widget class=\"QLabel\" name=\"iconTextIcon\">\n       <property name=\"text\">\n        <string notr=\"true\">Icon</string>\n       </property>\n      </widget>\n     </item>\n     <item>\n      <widget class=\"QLabel\" name=\"iconTextTitle\">\n       <property name=\"font\">\n        <font>\n\n         <bold>true</bold>\n        </font>\n       </property>\n       <property name=\"text\">\n        <string notr=\"true\">VOLUME</string>\n       </property>\n      </widget>\n     </item>\n     <item>\n      <widget class=\"QLabel\" name=\"iconTextText\">\n       <property name=\"sizePolicy\">\n        <sizepolicy hsizetype=\"Expanding\" vsizetype=\"Preferred\">\n         <horstretch>0</horstretch>\n         <verstretch>0</verstretch>\n        </sizepolicy>\n       </property>\n       <property name=\"text\">\n        <string notr=\"true\">Text</string>\n       </property>\n       <property name=\"wordWrap\">\n        <bool>true</bool>\n       </property>\n      </widget>\n     </item>\n    </layout>\n   </widget>\n  </widget>\n </widget>\n <resources/>\n <connections/>\n</ui>\n"
  },
  {
    "path": "plugins/NotificationsPlugin/drawer/notificationsdrawer.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"notificationsdrawer.h\"\n#include \"ui_notificationsdrawer.h\"\n\n#include \"notificationsdrawerwidget.h\"\n#include \"notificationtracker.h\"\n#include <QScreen>\n#include <QWindow>\n#include <Wm/desktopwm.h>\n#include <barmanager.h>\n#include <gatewaymanager.h>\n#include <libcontemporary_global.h>\n#include <quietmodemanager.h>\n#include <statemanager.h>\n\nstruct NotificationsDrawerPrivate {\n        NotificationTracker* tracker;\n        QList<NotificationsDrawerWidget*> widgets;\n\n        QScreen* oldPrimaryScreen = nullptr;\n};\n\nNotificationsDrawer::NotificationsDrawer(NotificationTracker* tracker) :\n    QDialog(nullptr),\n    ui(new Ui::NotificationsDrawer) {\n    ui->setupUi(this);\n\n    d = new NotificationsDrawerPrivate();\n    d->tracker = tracker;\n    connect(tracker, &NotificationTracker::destroyed, this, &NotificationsDrawer::deleteLater);\n    connect(tracker, &NotificationTracker::newNotification, this, &NotificationsDrawer::showNotification);\n\n    this->setAttribute(Qt::WA_TranslucentBackground);\n    this->setAttribute(Qt::WA_ShowWithoutActivating);\n    this->setWindowFlag(Qt::FramelessWindowHint);\n    this->setWindowFlag(Qt::WindowStaysOnTopHint);\n    DesktopWm::setSystemWindow(this, DesktopWm::SystemWindowTypeNotification);\n\n    connect(StateManager::barManager(), &BarManager::barHeightChanged, this, &NotificationsDrawer::updateGeometry);\n    connect(StateManager::gatewayManager(), &GatewayManager::gatewayWidthChanged, this, &NotificationsDrawer::updateGeometry);\n    connect(ui->hudWidget, &HudWidget::shouldShowChanged, this, &NotificationsDrawer::updateGeometry);\n\n    connect(qApp, &QApplication::primaryScreenChanged, this, &NotificationsDrawer::updateGeometry);\n    updateGeometry();\n}\n\nNotificationsDrawer::~NotificationsDrawer() {\n    delete ui;\n}\n\nvoid NotificationsDrawer::setFixedHeight(int height) {\n    QDialog::setFixedHeight(height);\n\n    // Work around a Qt bug that causes the native window not to be updated on Wayland for some reason\n    this->windowHandle()->setGeometry(this->geometry());\n}\n\nvoid NotificationsDrawer::setFixedWidth(int width) {\n    QWidget::setFixedWidth(width);\n\n    // Work around a Qt bug that causes the native window not to be updated on Wayland for some reason\n    this->windowHandle()->setGeometry(this->geometry());\n}\n\nbool NotificationsDrawer::eventFilter(QObject* watched, QEvent* event) {\n    if (event->type() == QEvent::LayoutRequest) {\n        this->updateGeometry();\n    }\n    return false;\n}\n\nvoid NotificationsDrawer::updateGeometry() {\n    QScreen* primaryScreen = qApp->primaryScreen();\n    if (d->oldPrimaryScreen != primaryScreen && d->oldPrimaryScreen) {\n        disconnect(d->oldPrimaryScreen, &QScreen::geometryChanged, this, &NotificationsDrawer::updateGeometry);\n    }\n\n    if (!d->oldPrimaryScreen) {\n        connect(primaryScreen, &QScreen::geometryChanged, this, &NotificationsDrawer::updateGeometry);\n    }\n    d->oldPrimaryScreen = primaryScreen;\n\n    this->setFixedWidth(400);\n    this->setFixedHeight(this->sizeHint().height());\n\n    QRect geometry;\n    geometry.setSize(this->size());\n    if (this->layoutDirection() == Qt::RightToLeft) {\n        geometry.moveTopRight(primaryScreen->geometry().topRight() + QPoint(-StateManager::gatewayManager()->gatewayWidth(), StateManager::barManager()->barHeight()));\n    } else {\n        geometry.moveTopLeft(primaryScreen->geometry().topLeft() + QPoint(StateManager::gatewayManager()->gatewayWidth(), StateManager::barManager()->barHeight()));\n    }\n\n    if (geometry.bottom() > primaryScreen->geometry().bottom()) geometry.moveBottom(primaryScreen->geometry().bottom());\n\n    this->move(geometry.topLeft());\n\n    if (d->widgets.count() == 0 && !ui->hudWidget->shouldShow()) {\n        this->hide();\n    } else {\n        this->show();\n    }\n}\n\nvoid NotificationsDrawer::showNotification(NotificationPtr notification) {\n    switch (StateManager::quietModeManager()->currentMode()) {\n        case QuietModeManagerTd::CriticalOnly:\n            if (notification->urgency() != Notification::Critical) return;\n            break;\n        case QuietModeManagerTd::NoNotifications:\n        case QuietModeManagerTd::Mute:\n            return;\n        default:\n            break;\n    }\n\n    NotificationsDrawerWidget* w = new NotificationsDrawerWidget(notification, d->tracker, this);\n    w->installEventFilter(this);\n    d->widgets.append(w);\n    ui->notificationsLayout->addWidget(w);\n\n    this->updateGeometry();\n\n    connect(w, &NotificationsDrawerWidget::dismiss, this, [=] {\n        d->widgets.removeOne(w);\n        ui->notificationsLayout->removeWidget(w);\n        w->deleteLater();\n\n        this->updateGeometry();\n    });\n\n    w->show();\n    this->updateGeometry();\n}\n"
  },
  {
    "path": "plugins/NotificationsPlugin/drawer/notificationsdrawer.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef NOTIFICATIONSDRAWER_H\n#define NOTIFICATIONSDRAWER_H\n\n#include \"notification.h\"\n#include <QDialog>\n\nnamespace Ui {\n    class NotificationsDrawer;\n}\n\nclass NotificationTracker;\nstruct NotificationsDrawerPrivate;\nclass NotificationsDrawer : public QDialog {\n        Q_OBJECT\n\n    public:\n        explicit NotificationsDrawer(NotificationTracker* tracker);\n        ~NotificationsDrawer();\n\n        void setFixedHeight(int height);\n        void setFixedWidth(int width);\n\n    private:\n        Ui::NotificationsDrawer* ui;\n        NotificationsDrawerPrivate* d;\n\n        bool eventFilter(QObject* watched, QEvent* event);\n\n        void updateGeometry();\n        void showNotification(NotificationPtr notification);\n};\n\n#endif // NOTIFICATIONSDRAWER_H\n"
  },
  {
    "path": "plugins/NotificationsPlugin/drawer/notificationsdrawer.ui",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ui version=\"4.0\">\n <class>NotificationsDrawer</class>\n <widget class=\"QDialog\" name=\"NotificationsDrawer\">\n  <property name=\"geometry\">\n   <rect>\n    <x>0</x>\n    <y>0</y>\n    <width>400</width>\n    <height>17</height>\n   </rect>\n  </property>\n  <property name=\"windowTitle\">\n   <string notr=\"true\">Dialog</string>\n  </property>\n  <layout class=\"QVBoxLayout\" name=\"verticalLayout\">\n   <property name=\"spacing\">\n    <number>0</number>\n   </property>\n   <property name=\"leftMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"topMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"rightMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"bottomMargin\">\n    <number>0</number>\n   </property>\n   <item>\n    <widget class=\"HudWidget\" name=\"hudWidget\" native=\"true\"/>\n   </item>\n   <item>\n    <layout class=\"QVBoxLayout\" name=\"notificationsLayout\">\n     <property name=\"spacing\">\n      <number>0</number>\n     </property>\n    </layout>\n   </item>\n   <item>\n    <spacer name=\"verticalSpacer\">\n     <property name=\"orientation\">\n      <enum>Qt::Vertical</enum>\n     </property>\n     <property name=\"sizeHint\" stdset=\"0\">\n      <size>\n       <width>20</width>\n       <height>5</height>\n      </size>\n     </property>\n    </spacer>\n   </item>\n  </layout>\n </widget>\n <customwidgets>\n  <customwidget>\n   <class>HudWidget</class>\n   <extends>QWidget</extends>\n   <header>drawer/hudwidget.h</header>\n   <container>1</container>\n  </customwidget>\n </customwidgets>\n <resources/>\n <connections/>\n</ui>\n"
  },
  {
    "path": "plugins/NotificationsPlugin/drawer/notificationsdrawerwidget.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"notificationsdrawerwidget.h\"\n#include \"ui_notificationsdrawerwidget.h\"\n\n#include <tvariantanimation.h>\n#include <QIcon>\n#include <QGraphicsOpacityEffect>\n#include <QPushButton>\n#include \"notificationtracker.h\"\n#include \"notification.h\"\n\nstruct NotificationsDrawerWidgetPrivate {\n    NotificationTracker* tracker;\n    tVariantAnimation* timeout;\n    tVariantAnimation* actionsWidgetHeight;\n    NotificationPtr n;\n\n    QList<QPushButton*> actions;\n\n    QGraphicsOpacityEffect* effect;\n    bool shouldTimeoutRun = false;\n};\n\nNotificationsDrawerWidget::NotificationsDrawerWidget(NotificationPtr notification, NotificationTracker* tracker, QWidget* parent) :\n    QWidget(parent),\n    ui(new Ui::NotificationsDrawerWidget) {\n    ui->setupUi(this);\n\n    d = new NotificationsDrawerWidgetPrivate();\n    d->n = notification;\n    d->tracker = tracker;\n\n    ui->summaryLabel->setText(notification->summary());\n    ui->bodyLabel->setText(notification->body());\n    connect(notification, &Notification::summaryChanged, ui->summaryLabel, &QLabel::setText);\n    connect(notification, &Notification::bodyChanged, ui->bodyLabel, &QLabel::setText);\n\n    connect(notification, &Notification::dismissed, this, &NotificationsDrawerWidget::animateDismiss);\n\n    d->timeout = new tVariantAnimation(this);\n    d->timeout->setStartValue(1.0);\n    d->timeout->setEndValue(0.0);\n    d->timeout->setEasingCurve(QEasingCurve::Linear);\n    d->timeout->setForceAnimation(true);\n    if (notification->timeout() == 0) {\n        d->timeout->setDuration(-1);\n    } else {\n        d->timeout->setDuration(notification->timeout());\n    }\n    connect(d->timeout, &tVariantAnimation::finished, this, &NotificationsDrawerWidget::animateDismiss);\n    connect(d->tracker, &NotificationTracker::pauseTimeouts, this, [ = ] {\n        d->timeout->pause();\n    });\n    connect(d->tracker, &NotificationTracker::resumeTimeouts, this, [ = ] {\n        if (d->shouldTimeoutRun && d->n->timeout() != 0) {\n            d->timeout->start();\n        }\n    });\n\n    connect(notification, &Notification::timeoutChanged, this, [ = ](qint32 timeout) {\n        if (timeout == 0) {\n            d->timeout->setDuration(-1);\n        } else {\n            d->timeout->setDuration(timeout);\n        }\n    });\n\n    ui->appIconLabel->setPixmap(QIcon::fromTheme(notification->application()->getProperty(\"Icon\").toString()).pixmap(SC_DPI_T(QSize(16, 16), QSize)));\n    ui->appNameLabel->setText(notification->application()->getProperty(\"Name\").toString());\n    connect(notification, &Notification::applicationChanged, this, [ = ] {\n        ui->appIconLabel->setPixmap(QIcon::fromTheme(notification->application()->getProperty(\"Icon\").toString()).pixmap(SC_DPI_T(QSize(16, 16), QSize)));\n        ui->appNameLabel->setText(notification->application()->getProperty(\"Name\").toString());\n    });\n\n    ui->actionsWidget->setFixedHeight(0);\n    connect(notification, &Notification::actionsChanged, this, &NotificationsDrawerWidget::setupActions);\n    setupActions();\n\n    d->actionsWidgetHeight = new tVariantAnimation(this);\n    d->actionsWidgetHeight->setDuration(250);\n    d->actionsWidgetHeight->setEasingCurve(QEasingCurve::OutCubic);\n    connect(d->actionsWidgetHeight, &tVariantAnimation::valueChanged, this, [ = ](QVariant value) {\n        ui->actionsWidget->setFixedHeight(value.toInt());\n        ui->mainFrame->setFixedHeight(ui->mainFrame->sizeHint().height());\n        this->updateGeometry();\n    });\n    connect(d->actionsWidgetHeight, &tVariantAnimation::finished, this, [ = ] {\n        ui->mainFrame->setFixedHeight(ui->mainFrame->sizeHint().height());\n        this->updateGeometry();\n    });\n\n    ui->buttonBox->setParent(ui->mainFrame);\n    ui->buttonBox->move(this->layoutDirection() == Qt::RightToLeft ? 0 : ui->mainFrame->width() - ui->buttonBox->width(), 0);\n    ui->buttonBox->setVisible(false);\n\n    ui->mainFrame->installEventFilter(this);\n\n    d->effect = new QGraphicsOpacityEffect(this);\n    d->effect->setEnabled(false);\n    this->setGraphicsEffect(d->effect);\n}\n\nNotificationsDrawerWidget::~NotificationsDrawerWidget() {\n    delete ui;\n    delete d;\n}\n\nvoid NotificationsDrawerWidget::show() {\n    QWidget::show();\n\n    tVariantAnimation* anim = new tVariantAnimation(this);\n    anim->setStartValue(this->layoutDirection() == Qt::RightToLeft ? ui->mainFrame->width() : -ui->mainFrame->width());\n    anim->setEndValue(SC_DPI(9));\n    anim->setEasingCurve(QEasingCurve::OutCubic);\n    anim->setDuration(250);\n    connect(anim, &tVariantAnimation::valueChanged, this, [ = ](QVariant value) {\n        ui->mainFrame->move(value.toInt(), SC_DPI(9));\n    });\n    connect(anim, &tVariantAnimation::finished, this, [ = ] {\n        d->shouldTimeoutRun = true;\n        if (d->n->timeout() != 0) {\n            d->timeout->start();\n        }\n    });\n    anim->start();\n}\n\nvoid NotificationsDrawerWidget::animateDismiss() {\n    d->shouldTimeoutRun = false;\n\n    tVariantAnimation* opacityAnim = new tVariantAnimation(this);\n    opacityAnim->setStartValue(1.0);\n    opacityAnim->setEndValue(0.0);\n    opacityAnim->setEasingCurve(QEasingCurve::OutCubic);\n    opacityAnim->setDuration(250);\n    connect(opacityAnim, &tVariantAnimation::valueChanged, this, [ = ](QVariant value) {\n        d->effect->setOpacity(value.toDouble());\n    });\n    connect(opacityAnim, &tVariantAnimation::finished, this, [ = ] {\n        opacityAnim->deleteLater();\n\n        tVariantAnimation* anim = new tVariantAnimation(this);\n        anim->setStartValue(this->height());\n        anim->setEndValue(0);\n        anim->setEasingCurve(QEasingCurve::OutCubic);\n        anim->setDuration(250);\n        connect(anim, &tVariantAnimation::valueChanged, this, [ = ](QVariant value) {\n            this->setFixedHeight(value.toInt());\n        });\n        connect(anim, &tVariantAnimation::finished, this, [ = ] {\n            anim->deleteLater();\n            emit dismiss();\n        });\n        anim->start();\n    });\n    d->effect->setEnabled(true);\n    opacityAnim->start();\n}\n\nQSize NotificationsDrawerWidget::sizeHint() const {\n    QSize sizeHint = QWidget::sizeHint();\n    sizeHint.setHeight(ui->mainFrame->sizeHint().height() + SC_DPI(9));\n    return sizeHint;\n}\n\nvoid NotificationsDrawerWidget::resizeEvent(QResizeEvent* event) {\n    ui->mainFrame->setFixedWidth(this->width() - SC_DPI(18));\n    ui->mainFrame->setFixedHeight(ui->mainFrame->sizeHint().height());\n    ui->buttonBox->move(this->layoutDirection() == Qt::RightToLeft ? 0 : ui->mainFrame->width() - ui->buttonBox->width(), 0);\n}\n\nbool NotificationsDrawerWidget::eventFilter(QObject* watched, QEvent* event) {\n    if (watched == ui->mainFrame) {\n        switch (event->type()) {\n            case QEvent::Enter:\n                showButtons();\n                break;\n            case QEvent::Leave:\n                hideButtons();\n                break;\n            default:\n                break;\n        }\n    }\n    return false;\n}\n\nvoid NotificationsDrawerWidget::setupActions() {\n    for (QPushButton* button : d->actions) {\n        ui->actionsLayout->removeWidget(button);\n        button->deleteLater();\n    }\n    d->actions.clear();\n\n    for (Notification::Action action : d->n->actions()) {\n        QPushButton* button = new QPushButton();\n        button->setText(action.text);\n        button->setIcon(action.icon);\n        connect(button, &QPushButton::clicked, this, [ = ] {\n            emit d->n->actionInvoked(action);\n            this->animateDismiss();\n        });\n        ui->actionsLayout->addWidget(button);\n        d->actions.append(button);\n    }\n}\n\nvoid NotificationsDrawerWidget::showButtons() {\n    d->tracker->pauseTimeouts();\n    ui->buttonBox->setVisible(true);\n\n    d->actionsWidgetHeight->stop();\n    d->actionsWidgetHeight->setStartValue(ui->actionsWidget->height());\n    d->actionsWidgetHeight->setEndValue(ui->actionsWidget->sizeHint().height());\n    d->actionsWidgetHeight->start();\n}\n\nvoid NotificationsDrawerWidget::hideButtons() {\n    d->tracker->resumeTimeouts();\n    ui->buttonBox->setVisible(false);\n\n    d->actionsWidgetHeight->stop();\n    d->actionsWidgetHeight->setStartValue(ui->actionsWidget->height());\n    d->actionsWidgetHeight->setEndValue(0);\n    d->actionsWidgetHeight->start();\n}\n\nvoid NotificationsDrawerWidget::on_closeButton_clicked() {\n    d->n->dismiss(Notification::NotificationUserDismissed);\n}\n\nvoid NotificationsDrawerWidget::on_dismissButton_clicked() {\n    this->animateDismiss();\n}\n"
  },
  {
    "path": "plugins/NotificationsPlugin/drawer/notificationsdrawerwidget.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef NOTIFICATIONSDRAWERWIDGET_H\n#define NOTIFICATIONSDRAWERWIDGET_H\n\n#include <QWidget>\n\nnamespace Ui {\n    class NotificationsDrawerWidget;\n}\n\nclass Notification;\ntypedef QPointer<Notification> NotificationPtr;\n\nstruct NotificationsDrawerWidgetPrivate;\nclass NotificationTracker;\nclass NotificationsDrawerWidget : public QWidget {\n        Q_OBJECT\n\n    public:\n        explicit NotificationsDrawerWidget(NotificationPtr notification, NotificationTracker* tracker, QWidget* parent = nullptr);\n        ~NotificationsDrawerWidget();\n\n        void show();\n        void animateDismiss();\n\n        QSize sizeHint() const;\n\n    signals:\n        void dismiss();\n\n    private slots:\n        void on_closeButton_clicked();\n\n        void on_dismissButton_clicked();\n\n    private:\n        Ui::NotificationsDrawerWidget* ui;\n        NotificationsDrawerWidgetPrivate* d;\n\n        void resizeEvent(QResizeEvent* event);\n        bool eventFilter(QObject* watched, QEvent* event);\n\n        void setupActions();\n\n        void showButtons();\n        void hideButtons();\n};\n\n#endif // NOTIFICATIONSDRAWERWIDGET_H\n"
  },
  {
    "path": "plugins/NotificationsPlugin/drawer/notificationsdrawerwidget.ui",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ui version=\"4.0\">\n <class>NotificationsDrawerWidget</class>\n <widget class=\"QWidget\" name=\"NotificationsDrawerWidget\">\n  <property name=\"geometry\">\n   <rect>\n    <x>0</x>\n    <y>0</y>\n    <width>551</width>\n    <height>173</height>\n   </rect>\n  </property>\n  <property name=\"windowTitle\">\n   <string notr=\"true\">Form</string>\n  </property>\n  <widget class=\"QFrame\" name=\"mainFrame\">\n   <property name=\"geometry\">\n    <rect>\n     <x>0</x>\n     <y>0</y>\n     <width>331</width>\n     <height>111</height>\n    </rect>\n   </property>\n   <property name=\"autoFillBackground\">\n    <bool>true</bool>\n   </property>\n   <property name=\"frameShape\">\n    <enum>QFrame::StyledPanel</enum>\n   </property>\n   <property name=\"frameShadow\">\n    <enum>QFrame::Raised</enum>\n   </property>\n   <layout class=\"QVBoxLayout\" name=\"verticalLayout_2\">\n    <property name=\"spacing\">\n     <number>0</number>\n    </property>\n    <property name=\"leftMargin\">\n     <number>0</number>\n    </property>\n    <property name=\"topMargin\">\n     <number>0</number>\n    </property>\n    <property name=\"rightMargin\">\n     <number>0</number>\n    </property>\n    <property name=\"bottomMargin\">\n     <number>0</number>\n    </property>\n    <item>\n     <widget class=\"QWidget\" name=\"widget\" native=\"true\">\n      <layout class=\"QVBoxLayout\" name=\"verticalLayout\">\n       <item>\n        <layout class=\"QHBoxLayout\" name=\"horizontalLayout\">\n         <item>\n          <widget class=\"QLabel\" name=\"appIconLabel\">\n           <property name=\"text\">\n            <string notr=\"true\">Icon</string>\n           </property>\n          </widget>\n         </item>\n         <item>\n          <widget class=\"QLabel\" name=\"appNameLabel\">\n           <property name=\"font\">\n            <font>\n             <pointsize>8</pointsize>\n            </font>\n           </property>\n           <property name=\"text\">\n            <string notr=\"true\">App Name</string>\n           </property>\n          </widget>\n         </item>\n         <item>\n          <spacer name=\"horizontalSpacer\">\n           <property name=\"orientation\">\n            <enum>Qt::Horizontal</enum>\n           </property>\n           <property name=\"sizeHint\" stdset=\"0\">\n            <size>\n             <width>40</width>\n             <height>20</height>\n            </size>\n           </property>\n          </spacer>\n         </item>\n        </layout>\n       </item>\n       <item>\n        <widget class=\"QLabel\" name=\"summaryLabel\">\n         <property name=\"font\">\n          <font>\n           <bold>true</bold>\n          </font>\n         </property>\n         <property name=\"text\">\n          <string notr=\"true\">Summary</string>\n         </property>\n        </widget>\n       </item>\n       <item>\n        <widget class=\"QLabel\" name=\"bodyLabel\">\n         <property name=\"text\">\n          <string notr=\"true\">Body</string>\n         </property>\n         <property name=\"wordWrap\">\n          <bool>true</bool>\n         </property>\n        </widget>\n       </item>\n      </layout>\n     </widget>\n    </item>\n    <item>\n     <widget class=\"QWidget\" name=\"actionsWidget\" native=\"true\">\n      <layout class=\"QHBoxLayout\" name=\"actionsLayout\">\n       <property name=\"spacing\">\n        <number>0</number>\n       </property>\n       <property name=\"leftMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"topMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"rightMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"bottomMargin\">\n        <number>0</number>\n       </property>\n      </layout>\n     </widget>\n    </item>\n   </layout>\n  </widget>\n  <widget class=\"QWidget\" name=\"buttonBox\" native=\"true\">\n   <property name=\"geometry\">\n    <rect>\n     <x>481</x>\n     <y>0</y>\n     <width>71</width>\n     <height>42</height>\n    </rect>\n   </property>\n   <layout class=\"QHBoxLayout\" name=\"horizontalLayout_2\">\n    <property name=\"spacing\">\n     <number>0</number>\n    </property>\n    <property name=\"leftMargin\">\n     <number>0</number>\n    </property>\n    <property name=\"topMargin\">\n     <number>0</number>\n    </property>\n    <property name=\"rightMargin\">\n     <number>0</number>\n    </property>\n    <property name=\"bottomMargin\">\n     <number>0</number>\n    </property>\n    <item>\n     <widget class=\"QToolButton\" name=\"dismissButton\">\n      <property name=\"text\">\n       <string/>\n      </property>\n      <property name=\"icon\">\n       <iconset theme=\"arrow-up\">\n        <normaloff>.</normaloff>.</iconset>\n      </property>\n      <property name=\"autoRaise\">\n       <bool>true</bool>\n      </property>\n     </widget>\n    </item>\n    <item>\n     <widget class=\"QToolButton\" name=\"closeButton\">\n      <property name=\"text\">\n       <string/>\n      </property>\n      <property name=\"icon\">\n       <iconset theme=\"dialog-close\">\n        <normaloff>.</normaloff>.</iconset>\n      </property>\n      <property name=\"autoRaise\">\n       <bool>true</bool>\n      </property>\n     </widget>\n    </item>\n   </layout>\n  </widget>\n </widget>\n <resources/>\n <connections/>\n</ui>\n"
  },
  {
    "path": "plugins/NotificationsPlugin/notification.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"notification.h\"\n\n#include <Applications/application.h>\n\nstruct NotificationPrivate {\n    quint32 id;\n    qint32 timeout;\n\n    QString summary;\n    QString body;\n    Notification::Urgency urgency = Notification::Normal;\n\n    QList<Notification::Action> actions;\n\n    ApplicationPointer application;\n    bool isActive = true;\n};\n\nNotification::Notification(quint32 id) {\n    d = new NotificationPrivate();\n    d->id = id;\n}\n\nNotification::~Notification() {\n    delete d;\n}\n\nquint32 Notification::id() {\n    return d->id;\n}\n\nvoid Notification::setSummary(QString summary) {\n    d->summary = summary;\n    emit summaryChanged(summary);\n}\n\nQString Notification::summary() {\n    return d->summary;\n}\n\nvoid Notification::setBody(QString body) {\n    d->body = body;\n    emit bodyChanged(body);\n}\n\nQString Notification::body() {\n    return d->body;\n}\n\nvoid Notification::setTimeout(qint32 timeout) {\n    if (timeout == -1) timeout = 5000;\n\n    d->timeout = timeout;\n    emit timeoutChanged(timeout);\n}\n\nqint32 Notification::timeout() {\n    return d->timeout;\n}\n\nvoid Notification::setApplication(ApplicationPointer application) {\n    d->application = application;\n    emit applicationChanged(application);\n}\n\nApplicationPointer Notification::application() {\n    return d->application;\n}\n\nvoid Notification::setActions(QList<Notification::Action> actions) {\n    d->actions = actions;\n    emit actionsChanged(actions);\n}\n\nQList<Notification::Action> Notification::actions() {\n    return d->actions;\n}\n\nvoid Notification::setUrgency(Notification::Urgency urgency) {\n    d->urgency = urgency;\n}\n\nNotification::Urgency Notification::urgency() {\n    return d->urgency;\n}\n\nvoid Notification::dismiss(Notification::NotificationCloseReason reason) {\n    if (!d->isActive) return;\n    d->isActive = false;\n    emit dismissed(reason);\n}\n"
  },
  {
    "path": "plugins/NotificationsPlugin/notification.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef NOTIFICATION_H\n#define NOTIFICATION_H\n\n#include <QObject>\n#include <QPointer>\n#include <QIcon>\n#include <Applications/application.h>\n\nclass NotificationTracker;\nstruct NotificationPrivate;\nclass Notification : public QObject {\n        Q_OBJECT\n    public:\n        enum NotificationCloseReason : quint32 {\n            NotificationExpired = 1,\n            NotificationUserDismissed = 2,\n            NotificationClosedByDBus = 3,\n            NotificationCloseReasonUndefined = 4\n        };\n\n        enum Urgency {\n            Low = 0,\n            Normal = 1,\n            Critical = 2\n        };\n\n        struct Action {\n            QString text;\n            QString identifier;\n            QIcon icon;\n        };\n\n        ~Notification();\n\n        quint32 id();\n\n        void setSummary(QString summary);\n        QString summary();\n\n        void setBody(QString body);\n        QString body();\n\n        void setTimeout(qint32 timeout);\n        qint32 timeout();\n\n        void setApplication(ApplicationPointer application);\n        ApplicationPointer application();\n\n        void setActions(QList<Action> actions);\n        QList<Action> actions();\n\n        void setUrgency(Urgency urgency);\n        Urgency urgency();\n\n        void dismiss(NotificationCloseReason reason);\n\n    signals:\n        void summaryChanged(QString summary);\n        void bodyChanged(QString body);\n        void timeoutChanged(qint32 timeout);\n        void applicationChanged(ApplicationPointer application);\n        void actionsChanged(QList<Action> actions);\n        void dismissed(NotificationCloseReason reason);\n        void actionInvoked(Action action);\n\n    protected:\n        friend NotificationTracker;\n        explicit Notification(quint32 id);\n\n    private:\n        NotificationPrivate* d;\n};\n\ntypedef QPointer<Notification> NotificationPtr;\n\n#endif // NOTIFICATION_H\n"
  },
  {
    "path": "plugins/NotificationsPlugin/notificationtracker.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"notificationtracker.h\"\n\n#include <QPointer>\n#include <QMap>\n#include <QTimer>\n#include \"notification.h\"\n\nstruct NotificationTrackerPrivate {\n    quint32 lastNotification = 1;\n    QMap<quint32, NotificationPtr> notifications;\n};\n\nNotificationTracker::NotificationTracker(QObject* parent) : QObject(parent) {\n    d = new NotificationTrackerPrivate();\n}\n\nNotificationTracker::~NotificationTracker() {\n    delete d;\n}\n\nNotificationPtr NotificationTracker::createNotification() {\n    quint32 notificationId = d->lastNotification;\n    NotificationPtr n(new Notification(notificationId));\n    connect(n.data(), &Notification::dismissed, this, [ = ] {\n        d->notifications.remove(notificationId);\n    });\n    d->notifications.insert(notificationId, n);\n    d->lastNotification++;\n\n    QTimer::singleShot(0, this, std::bind(&NotificationTracker::newNotification, this, n));\n\n    return n;\n}\n\nNotificationPtr NotificationTracker::get(quint32 id) {\n    if (id == 0) return nullptr;\n    return d->notifications.value(id);\n}\n"
  },
  {
    "path": "plugins/NotificationsPlugin/notificationtracker.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef NOTIFICATIONTRACKER_H\n#define NOTIFICATIONTRACKER_H\n\n#include <QObject>\n#include <QPointer>\n\nclass Notification;\ntypedef QPointer<Notification> NotificationPtr;\n\nstruct NotificationTrackerPrivate;\nclass NotificationTracker : public QObject {\n        Q_OBJECT\n    public:\n        explicit NotificationTracker(QObject* parent = nullptr);\n        ~NotificationTracker();\n\n        NotificationPtr createNotification();\n        NotificationPtr get(quint32 id);\n\n    signals:\n        void newNotification(NotificationPtr notification);\n\n        void pauseTimeouts();\n        void resumeTimeouts();\n\n    private:\n        NotificationTrackerPrivate* d;\n};\n\n#endif // NOTIFICATIONTRACKER_H\n"
  },
  {
    "path": "plugins/NotificationsPlugin/plugin.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"plugin.h\"\n\n#include \"chunks/mprischunk.h\"\n#include \"dbus/notificationsinterface.h\"\n#include \"drawer/notificationsdrawer.h\"\n#include \"notificationtracker.h\"\n#include \"statuscenter/notificationsstatuscenterpane.h\"\n#include <QApplication>\n#include <QDebug>\n#include <QDir>\n#include <QIcon>\n#include <SystemJob/systemjobcontroller.h>\n#include <barmanager.h>\n#include <icontextchunk.h>\n#include <localemanager.h>\n#include <statemanager.h>\n#include <statuscentermanager.h>\n#include <tapplication.h>\n#include <tsettings.h>\n\nstruct PluginPrivate {\n        NotificationTracker* tracker;\n        NotificationsInterface* interface;\n        NotificationsDrawer* drawer;\n        NotificationsStatusCenterPane* statusCenter;\n        SystemJobController* jobController;\n        MprisChunk* mprisChunk;\n};\n\nPlugin::Plugin() {\n    d = new PluginPrivate();\n}\n\nPlugin::~Plugin() {\n    delete d;\n}\n\nvoid Plugin::activate() {\n    tApplication::addPluginTranslator(CNTP_TARGET_NAME);\n\n    tSettings::registerDefaults(QDir::cleanPath(qApp->applicationDirPath() + \"/../plugins/NotificationsPlugin/thedesk-notifications.conf\"));\n    tSettings::registerDefaults(\"/usr/share/defaults/thedesk-notifications.conf\");\n\n    d->tracker = new NotificationTracker();\n    d->interface = new NotificationsInterface(d->tracker);\n    d->drawer = new NotificationsDrawer(d->tracker);\n    d->jobController = new SystemJobController(QDBusConnection::sessionBus());\n    d->statusCenter = new NotificationsStatusCenterPane(d->tracker, d->jobController);\n    StateManager::statusCenterManager()->addPane(d->statusCenter, StatusCenterManager::Informational);\n\n    d->mprisChunk = new MprisChunk();\n}\n\nvoid Plugin::deactivate() {\n    StateManager::statusCenterManager()->removePane(d->statusCenter);\n\n    d->tracker->deleteLater();\n    d->statusCenter->deleteLater();\n    d->mprisChunk->deleteLater();\n    d->jobController->deleteLater();\n\n    // Everything else will delete itself once the tracker is gone\n\n    tApplication::removePluginTranslator(CNTP_TARGET_NAME);\n}\n"
  },
  {
    "path": "plugins/NotificationsPlugin/plugin.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef PLUGIN_H\n#define PLUGIN_H\n\n#include \"plugins/plugininterface.h\"\n\nstruct PluginPrivate;\nclass Plugin : public QObject, public PluginInterface {\n        Q_OBJECT\n        Q_PLUGIN_METADATA(IID PluginInterface_iid FILE \"Plugin.json\")\n        Q_INTERFACES(PluginInterface)\n\n    public:\n        Plugin();\n        ~Plugin();\n\n    private:\n        PluginPrivate* d;\n\n        // PluginInterface interface\n    public:\n        void activate();\n        void deactivate();\n};\n\n#endif // PLUGIN_H\n"
  },
  {
    "path": "plugins/NotificationsPlugin/statuscenter/jobwidget.cpp",
    "content": "#include \"jobwidget.h\"\n#include \"ui_jobwidget.h\"\n\nstruct JobWidgetPrivate {\n        bool loadingData = true;\n        SystemJobPtr job;\n};\n\nJobWidget::JobWidget(SystemJobPtr job, QWidget* parent) :\n    QWidget(parent),\n    ui(new Ui::JobWidget) {\n    ui->setupUi(this);\n\n    d = new JobWidgetPrivate();\n    d->job = job;\n\n    connect(job.data(), &SystemJob::titleChanged, ui->summaryLabel, &QLabel::setText);\n    connect(job.data(), &SystemJob::statusChanged, ui->bodyLabel, &QLabel::setText);\n    connect(job.data(), &SystemJob::totalProgressChanged, this, [this](quint64 totalProgress) {\n        ui->progressBar->setMaximum(totalProgress);\n    });\n    connect(job.data(), &SystemJob::progressChanged, ui->progressBar, &QProgressBar::setValue);\n\n    connect(job.data(), &SystemJob::stateChanged, this, &JobWidget::updateState);\n    connect(job.data(), &SystemJob::validChanged, this, [this](bool valid) {\n        if (!valid && !d->loadingData) this->deleteLater();\n    });\n\n    loadData();\n}\n\nJobWidget::~JobWidget() {\n    delete ui;\n    delete d;\n}\n\nvoid JobWidget::setIsLast(bool isLast) {\n    ui->line->setVisible(!isLast);\n}\n\nQCoro::Task<> JobWidget::loadData() {\n    d->loadingData = true;\n    ui->summaryLabel->setText(co_await d->job->title());\n    ui->bodyLabel->setText(co_await d->job->status());\n    ui->progressBar->setMaximum(co_await d->job->totalProgress());\n    ui->progressBar->setValue(co_await d->job->progress());\n\n    updateState(co_await d->job->state());\n    if (!d->job->valid()) this->deleteLater();\n    d->loadingData = false;\n}\n\nvoid JobWidget::updateState(QString state) {\n    if (state == QStringLiteral(\"Processing\")) {\n    } else if (state == QStringLiteral(\"Finished\")) {\n        this->deleteLater();\n    } else if (state == QStringLiteral(\"Failed\")) {\n        this->deleteLater();\n    } else if (state == QStringLiteral(\"RequiresAttention\")) {\n    }\n}\n"
  },
  {
    "path": "plugins/NotificationsPlugin/statuscenter/jobwidget.h",
    "content": "#ifndef JOBWIDGET_H\n#define JOBWIDGET_H\n\n#include <QWidget>\n#include <SystemJob/systemjob.h>\n\nnamespace Ui {\n    class JobWidget;\n}\n\nstruct JobWidgetPrivate;\nclass JobWidget : public QWidget {\n        Q_OBJECT\n\n    public:\n        explicit JobWidget(SystemJobPtr job, QWidget* parent = nullptr);\n        ~JobWidget();\n\n        void setIsLast(bool isLast);\n\n    private:\n        Ui::JobWidget* ui;\n        JobWidgetPrivate* d;\n\n        QCoro::Task<> loadData();\n        void updateState(QString state);\n};\n\n#endif // JOBWIDGET_H\n"
  },
  {
    "path": "plugins/NotificationsPlugin/statuscenter/jobwidget.ui",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ui version=\"4.0\">\n <class>JobWidget</class>\n <widget class=\"QWidget\" name=\"JobWidget\">\n  <property name=\"geometry\">\n   <rect>\n    <x>0</x>\n    <y>0</y>\n    <width>400</width>\n    <height>90</height>\n   </rect>\n  </property>\n  <property name=\"windowTitle\">\n   <string>Form</string>\n  </property>\n  <layout class=\"QVBoxLayout\" name=\"verticalLayout_2\">\n   <property name=\"spacing\">\n    <number>0</number>\n   </property>\n   <property name=\"leftMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"topMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"rightMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"bottomMargin\">\n    <number>0</number>\n   </property>\n   <item>\n    <layout class=\"QVBoxLayout\" name=\"verticalLayout\">\n     <property name=\"spacing\">\n      <number>6</number>\n     </property>\n     <property name=\"leftMargin\">\n      <number>9</number>\n     </property>\n     <property name=\"topMargin\">\n      <number>9</number>\n     </property>\n     <property name=\"rightMargin\">\n      <number>9</number>\n     </property>\n     <property name=\"bottomMargin\">\n      <number>9</number>\n     </property>\n     <item>\n      <widget class=\"QLabel\" name=\"summaryLabel\">\n       <property name=\"font\">\n        <font>\n         <bold>true</bold>\n        </font>\n       </property>\n       <property name=\"text\">\n        <string notr=\"true\">Summary</string>\n       </property>\n      </widget>\n     </item>\n     <item>\n      <widget class=\"QLabel\" name=\"bodyLabel\">\n       <property name=\"text\">\n        <string notr=\"true\">Body</string>\n       </property>\n       <property name=\"wordWrap\">\n        <bool>true</bool>\n       </property>\n      </widget>\n     </item>\n     <item>\n      <widget class=\"QProgressBar\" name=\"progressBar\">\n       <property name=\"value\">\n        <number>24</number>\n       </property>\n      </widget>\n     </item>\n    </layout>\n   </item>\n   <item>\n    <widget class=\"Line\" name=\"line\">\n     <property name=\"maximumSize\">\n      <size>\n       <width>16777215</width>\n       <height>1</height>\n      </size>\n     </property>\n     <property name=\"orientation\">\n      <enum>Qt::Horizontal</enum>\n     </property>\n    </widget>\n   </item>\n  </layout>\n </widget>\n <resources/>\n <connections/>\n</ui>\n"
  },
  {
    "path": "plugins/NotificationsPlugin/statuscenter/notificationappgroup.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"notificationappgroup.h\"\n#include \"ui_notificationappgroup.h\"\n\n#include <QIcon>\n#include <QLabel>\n#include <tvariantanimation.h>\n\n#include \"jobwidget.h\"\n#include \"notificationwidget.h\"\n\nstruct NotificationAppGroupPrivate {\n        ApplicationPointer application;\n        QMap<NotificationPtr, NotificationWidget*> widgets;\n        QList<NotificationWidget*> ordering;\n        QList<JobWidget*> jobOrdering;\n};\n\nNotificationAppGroup::NotificationAppGroup(ApplicationPointer application, QWidget* parent) :\n    QWidget(parent),\n    ui(new Ui::NotificationAppGroup) {\n    ui->setupUi(this);\n\n    d = new NotificationAppGroupPrivate();\n    d->application = application;\n\n    if (d->application) {\n        ui->iconLabel->setPixmap(QIcon::fromTheme(application->getProperty(\"Icon\").toString()).pixmap(QSize(16, 16)));\n        ui->appNameLabel->setText(application->getProperty(\"Name\").toString());\n    } else {\n        ui->iconLabel->setPixmap(QIcon::fromTheme(\"generic-app\").pixmap(QSize(16, 16)));\n        ui->appNameLabel->setText(tr(\"Uncategorised\"));\n    }\n}\n\nNotificationAppGroup::~NotificationAppGroup() {\n    delete d;\n    delete ui;\n}\n\nvoid NotificationAppGroup::pushNotification(NotificationPtr notification) {\n    NotificationWidget* w = new NotificationWidget(notification);\n    connect(\n        w, &NotificationWidget::destroyed, this, [=] {\n            d->widgets.remove(notification);\n            d->ordering.removeOne(w);\n            this->dismissOrReorder();\n        },\n        Qt::QueuedConnection);\n    ui->notificationsLayout->insertWidget(0, w);\n    d->widgets.insert(notification, w);\n    d->ordering.insert(0, w);\n\n    setOrdering();\n}\n\nvoid NotificationAppGroup::pushJob(SystemJobPtr job) {\n    auto w = new JobWidget(job);\n    connect(w, &JobWidget::destroyed, this, [this, w] {\n        d->jobOrdering.removeOne(w);\n        this->dismissOrReorder();\n    });\n    ui->jobsLayout->insertWidget(0, w);\n    d->jobOrdering.insert(0, w);\n    setOrdering();\n}\n\nvoid NotificationAppGroup::dismissAll() {\n    for (NotificationPtr notification : d->widgets.keys()) {\n        notification->dismiss(Notification::NotificationUserDismissed);\n    }\n}\n\nvoid NotificationAppGroup::setOrdering() {\n    ui->dismissAllButton->setVisible(!d->ordering.isEmpty());\n\n    for (JobWidget* w : d->jobOrdering) {\n        w->setIsLast(false);\n    }\n    if (d->ordering.isEmpty()) d->jobOrdering.constLast()->setIsLast(true);\n\n    for (NotificationWidget* w : d->ordering) {\n        w->setIsLast(false);\n    }\n    if (!d->ordering.isEmpty()) d->ordering.last()->setIsLast(true);\n}\n\nvoid NotificationAppGroup::dismissOrReorder() {\n    if (d->ordering.isEmpty() && d->jobOrdering.isEmpty()) {\n        this->deleteLater();\n    } else {\n        setOrdering();\n    }\n}\n\nvoid NotificationAppGroup::on_dismissAllButton_clicked() {\n    dismissAll();\n}\n"
  },
  {
    "path": "plugins/NotificationsPlugin/statuscenter/notificationappgroup.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef NOTIFICATIONAPPGROUP_H\n#define NOTIFICATIONAPPGROUP_H\n\n#include \"notification.h\"\n#include <Applications/application.h>\n#include <QWidget>\n#include <SystemJob/systemjob.h>\n\nnamespace Ui {\n    class NotificationAppGroup;\n}\n\nstruct NotificationAppGroupPrivate;\nclass NotificationAppGroup : public QWidget {\n        Q_OBJECT\n\n    public:\n        explicit NotificationAppGroup(ApplicationPointer application, QWidget* parent = nullptr);\n        ~NotificationAppGroup();\n\n        void pushNotification(NotificationPtr notification);\n        void pushJob(SystemJobPtr job);\n        void dismissAll();\n\n    private slots:\n        void on_dismissAllButton_clicked();\n\n    private:\n        Ui::NotificationAppGroup* ui;\n        NotificationAppGroupPrivate* d;\n\n        void setOrdering();\n        void dismissOrReorder();\n};\n\n#endif // NOTIFICATIONAPPGROUP_H\n"
  },
  {
    "path": "plugins/NotificationsPlugin/statuscenter/notificationappgroup.ui",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ui version=\"4.0\">\n <class>NotificationAppGroup</class>\n <widget class=\"QWidget\" name=\"NotificationAppGroup\">\n  <property name=\"geometry\">\n   <rect>\n    <x>0</x>\n    <y>0</y>\n    <width>533</width>\n    <height>339</height>\n   </rect>\n  </property>\n  <property name=\"windowTitle\">\n   <string notr=\"true\">Form</string>\n  </property>\n  <layout class=\"QVBoxLayout\" name=\"verticalLayout\">\n   <property name=\"spacing\">\n    <number>0</number>\n   </property>\n   <property name=\"leftMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"topMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"rightMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"bottomMargin\">\n    <number>0</number>\n   </property>\n   <item>\n    <layout class=\"QHBoxLayout\" name=\"horizontalLayout\">\n     <property name=\"spacing\">\n      <number>0</number>\n     </property>\n     <property name=\"leftMargin\">\n      <number>0</number>\n     </property>\n     <property name=\"topMargin\">\n      <number>0</number>\n     </property>\n     <property name=\"rightMargin\">\n      <number>0</number>\n     </property>\n     <property name=\"bottomMargin\">\n      <number>0</number>\n     </property>\n     <item>\n      <layout class=\"QHBoxLayout\" name=\"horizontalLayout_2\">\n       <property name=\"spacing\">\n        <number>6</number>\n       </property>\n       <property name=\"leftMargin\">\n        <number>9</number>\n       </property>\n       <property name=\"topMargin\">\n        <number>9</number>\n       </property>\n       <property name=\"bottomMargin\">\n        <number>9</number>\n       </property>\n       <item>\n        <widget class=\"QLabel\" name=\"iconLabel\">\n         <property name=\"text\">\n          <string notr=\"true\">TextLabel</string>\n         </property>\n        </widget>\n       </item>\n       <item>\n        <widget class=\"QLabel\" name=\"appNameLabel\">\n         <property name=\"sizePolicy\">\n          <sizepolicy hsizetype=\"Expanding\" vsizetype=\"Preferred\">\n           <horstretch>0</horstretch>\n           <verstretch>0</verstretch>\n          </sizepolicy>\n         </property>\n         <property name=\"text\">\n          <string notr=\"true\">TextLabel</string>\n         </property>\n        </widget>\n       </item>\n      </layout>\n     </item>\n     <item>\n      <widget class=\"QToolButton\" name=\"dismissAllButton\">\n       <property name=\"text\">\n        <string/>\n       </property>\n       <property name=\"icon\">\n        <iconset theme=\"dialog-close\">\n         <normaloff>.</normaloff>.</iconset>\n       </property>\n      </widget>\n     </item>\n    </layout>\n   </item>\n   <item>\n    <widget class=\"QFrame\" name=\"frame\">\n     <property name=\"frameShape\">\n      <enum>QFrame::StyledPanel</enum>\n     </property>\n     <property name=\"frameShadow\">\n      <enum>QFrame::Raised</enum>\n     </property>\n     <layout class=\"QVBoxLayout\" name=\"verticalLayout_3\">\n      <property name=\"spacing\">\n       <number>0</number>\n      </property>\n      <property name=\"leftMargin\">\n       <number>0</number>\n      </property>\n      <property name=\"topMargin\">\n       <number>0</number>\n      </property>\n      <property name=\"rightMargin\">\n       <number>0</number>\n      </property>\n      <property name=\"bottomMargin\">\n       <number>0</number>\n      </property>\n      <item>\n       <layout class=\"QVBoxLayout\" name=\"jobsLayout\">\n        <property name=\"spacing\">\n         <number>0</number>\n        </property>\n        <property name=\"leftMargin\">\n         <number>0</number>\n        </property>\n        <property name=\"topMargin\">\n         <number>0</number>\n        </property>\n        <property name=\"rightMargin\">\n         <number>0</number>\n        </property>\n        <property name=\"bottomMargin\">\n         <number>0</number>\n        </property>\n       </layout>\n      </item>\n      <item>\n       <layout class=\"QVBoxLayout\" name=\"notificationsLayout\">\n        <property name=\"spacing\">\n         <number>0</number>\n        </property>\n        <property name=\"leftMargin\">\n         <number>0</number>\n        </property>\n        <property name=\"topMargin\">\n         <number>0</number>\n        </property>\n        <property name=\"rightMargin\">\n         <number>0</number>\n        </property>\n        <property name=\"bottomMargin\">\n         <number>0</number>\n        </property>\n       </layout>\n      </item>\n     </layout>\n    </widget>\n   </item>\n  </layout>\n </widget>\n <resources/>\n <connections/>\n</ui>\n"
  },
  {
    "path": "plugins/NotificationsPlugin/statuscenter/notificationsstatuscenterpane.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"notificationsstatuscenterpane.h\"\n#include \"ui_notificationsstatuscenterpane.h\"\n\n#include \"notification.h\"\n#include \"notificationappgroup.h\"\n#include \"notificationtracker.h\"\n\n#include <quietmodemanager.h>\n#include <statemanager.h>\n#include <statuscentermanager.h>\n\n#include <SystemJob/systemjobcontroller.h>\n\n#include <QPushButton>\n\nstruct NotificationsStatusCenterPanePrivate {\n        NotificationTracker* tracker;\n        SystemJobController* jobController;\n        QMap<QString, NotificationAppGroup*> groups;\n};\n\nNotificationsStatusCenterPane::NotificationsStatusCenterPane(NotificationTracker* tracker, SystemJobController* jobController) :\n    StatusCenterPane(),\n    ui(new Ui::NotificationsStatusCenterPane) {\n    ui->setupUi(this);\n\n    d = new NotificationsStatusCenterPanePrivate();\n    d->tracker = tracker;\n    d->jobController = jobController;\n\n    ui->titleLabel->setBackButtonIsMenu(true);\n    ui->titleLabel->setBackButtonShown(StateManager::instance()->statusCenterManager()->isHamburgerMenuRequired());\n    connect(StateManager::instance()->statusCenterManager(), &StatusCenterManager::isHamburgerMenuRequiredChanged, ui->titleLabel, &tTitleLabel::setBackButtonShown);\n\n    const int contentWidth = StateManager::instance()->statusCenterManager()->preferredContentWidth();\n    ui->notificationsWidget->setFixedWidth(contentWidth);\n    ui->quietModeWidget->setFixedWidth(contentWidth);\n\n    connect(d->tracker, &NotificationTracker::newNotification, this, [=](NotificationPtr notification) {\n        auto application = notification->application();\n        QString desktopEntry;\n        if (application) {\n            desktopEntry = application->desktopEntry();\n        }\n\n        auto group = appGroupForDesktopEntry(desktopEntry, application);\n        group->pushNotification(notification);\n\n        ui->stackedWidget->setCurrentWidget(ui->notificationsPage);\n    });\n\n    connect(d->jobController, &SystemJobController::newJob, this, &NotificationsStatusCenterPane::registerJob);\n    for (const auto& job : d->jobController->jobs()) {\n        registerJob(job);\n    }\n\n    ui->stackedWidget->setCurrentAnimation(tStackedWidget::Fade);\n    ui->notificationSplash->setPixmap(QIcon::fromTheme(\"notifications\").pixmap(QSize(128, 128)));\n\n    for (QuietModeManagerTd::QuietMode mode : StateManager::quietModeManager()->availableQuietModes()) {\n        QuietModeManagerTd::QuietMode m = mode;\n        QPushButton* button = new QPushButton(this);\n        button->setText(StateManager::quietModeManager()->name(m));\n        button->setIcon(QIcon::fromTheme(StateManager::quietModeManager()->icon(m)));\n        button->setCheckable(true);\n        button->setAutoExclusive(true);\n        button->setChecked(StateManager::quietModeManager()->currentMode() == m);\n        connect(button, &QPushButton::toggled, this, [=](bool checked) {\n            if (checked) {\n                StateManager::quietModeManager()->setQuietMode(m);\n            }\n        });\n        connect(StateManager::quietModeManager(), &QuietModeManagerTd::quietModeChanged, this, [=](QuietModeManagerTd::QuietMode newMode, QuietModeManagerTd::QuietMode oldMode) {\n            Q_UNUSED(oldMode);\n            button->setChecked(newMode == m);\n        });\n        ui->quietModesLayout->addWidget(button);\n    }\n}\n\nNotificationsStatusCenterPane::~NotificationsStatusCenterPane() {\n    delete d;\n    delete ui;\n}\n\nvoid NotificationsStatusCenterPane::on_titleLabel_backButtonClicked() {\n    StateManager::statusCenterManager()->showStatusCenterHamburgerMenu();\n}\n\nNotificationAppGroup* NotificationsStatusCenterPane::appGroupForDesktopEntry(QString desktopEntry, ApplicationPointer application) {\n    if (d->groups.contains(desktopEntry)) {\n        return d->groups.value(desktopEntry);\n    } else {\n        auto group = new NotificationAppGroup(application, this);\n        connect(\n            group, &NotificationAppGroup::destroyed, this, [=] {\n                ui->notificationsLayout->removeWidget(group);\n                d->groups.remove(desktopEntry);\n\n                if (d->groups.isEmpty()) ui->stackedWidget->setCurrentWidget(ui->noNotificationsPage);\n            },\n            Qt::QueuedConnection);\n        ui->notificationsLayout->insertWidget(0, group);\n        d->groups.insert(desktopEntry, group);\n\n        return group;\n    }\n}\n\nvoid NotificationsStatusCenterPane::registerJob(SystemJobPtr job) {\n    auto desktopEntry = d->jobController->desktopEntryForService(job->service());\n    auto app = ApplicationPointer(new Application(desktopEntry));\n\n    auto group = appGroupForDesktopEntry(desktopEntry, app);\n    group->pushJob(job);\n\n    ui->stackedWidget->setCurrentWidget(ui->notificationsPage);\n}\n\nQString NotificationsStatusCenterPane::name() {\n    return \"NotificationsPane\";\n}\n\nQString NotificationsStatusCenterPane::displayName() {\n    return tr(\"Notifications\");\n}\n\nQIcon NotificationsStatusCenterPane::icon() {\n    return QIcon::fromTheme(\"thedesk-notifications\");\n}\n\nQWidget* NotificationsStatusCenterPane::leftPane() {\n    return nullptr;\n}\n\nvoid NotificationsStatusCenterPane::changeEvent(QEvent* event) {\n    if (event->type() == QEvent::LanguageChange) {\n        ui->retranslateUi(this);\n        emit displayNameChanged();\n    }\n}\n"
  },
  {
    "path": "plugins/NotificationsPlugin/statuscenter/notificationsstatuscenterpane.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef NOTIFICATIONSSTATUSCENTERPANE_H\n#define NOTIFICATIONSSTATUSCENTERPANE_H\n\n#include <Applications/application.h>\n#include <SystemJob/systemjob.h>\n#include <statuscenterpane.h>\n\nnamespace Ui {\n    class NotificationsStatusCenterPane;\n}\n\nclass NotificationAppGroup;\nclass SystemJobController;\nclass NotificationTracker;\nstruct NotificationsStatusCenterPanePrivate;\nclass NotificationsStatusCenterPane : public StatusCenterPane {\n        Q_OBJECT\n\n    public:\n        explicit NotificationsStatusCenterPane(NotificationTracker* tracker, SystemJobController* jobController);\n        ~NotificationsStatusCenterPane();\n\n    private slots:\n        void on_titleLabel_backButtonClicked();\n\n    private:\n        Ui::NotificationsStatusCenterPane* ui;\n\n        NotificationsStatusCenterPanePrivate* d;\n\n        NotificationAppGroup* appGroupForDesktopEntry(QString desktopEntry, ApplicationPointer application);\n        void registerJob(SystemJobPtr job);\n\n        // StatusCenterPane interface\n    public:\n        QString name();\n        QString displayName();\n        QIcon icon();\n        QWidget* leftPane();\n\n        // QWidget interface\n    protected:\n        void changeEvent(QEvent* event);\n};\n\n#endif // NOTIFICATIONSSTATUSCENTERPANE_H\n"
  },
  {
    "path": "plugins/NotificationsPlugin/statuscenter/notificationsstatuscenterpane.ui",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ui version=\"4.0\">\n <class>NotificationsStatusCenterPane</class>\n <widget class=\"QWidget\" name=\"NotificationsStatusCenterPane\">\n  <property name=\"geometry\">\n   <rect>\n    <x>0</x>\n    <y>0</y>\n    <width>572</width>\n    <height>429</height>\n   </rect>\n  </property>\n  <property name=\"windowTitle\">\n   <string notr=\"true\">Form</string>\n  </property>\n  <layout class=\"QVBoxLayout\" name=\"verticalLayout\">\n   <property name=\"spacing\">\n    <number>0</number>\n   </property>\n   <property name=\"leftMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"topMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"rightMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"bottomMargin\">\n    <number>0</number>\n   </property>\n   <item>\n    <widget class=\"tTitleLabel\" name=\"titleLabel\">\n     <property name=\"text\">\n      <string>Notifications</string>\n     </property>\n    </widget>\n   </item>\n   <item alignment=\"Qt::AlignHCenter\">\n    <widget class=\"QWidget\" name=\"quietModeWidget\" native=\"true\">\n     <layout class=\"QVBoxLayout\" name=\"verticalLayout_6\">\n      <item>\n       <widget class=\"QLabel\" name=\"label_3\">\n        <property name=\"font\">\n         <font>\n          <weight>75</weight>\n          <bold>true</bold>\n         </font>\n        </property>\n        <property name=\"text\">\n         <string>QUIET MODE</string>\n        </property>\n       </widget>\n      </item>\n      <item>\n       <layout class=\"QHBoxLayout\" name=\"horizontalLayout\">\n        <property name=\"spacing\">\n         <number>0</number>\n        </property>\n        <item>\n         <layout class=\"QHBoxLayout\" name=\"quietModesLayout\">\n          <property name=\"spacing\">\n           <number>0</number>\n          </property>\n         </layout>\n        </item>\n        <item>\n         <spacer name=\"horizontalSpacer\">\n          <property name=\"orientation\">\n           <enum>Qt::Horizontal</enum>\n          </property>\n          <property name=\"sizeHint\" stdset=\"0\">\n           <size>\n            <width>40</width>\n            <height>20</height>\n           </size>\n          </property>\n         </spacer>\n        </item>\n       </layout>\n      </item>\n     </layout>\n    </widget>\n   </item>\n   <item>\n    <widget class=\"tStackedWidget\" name=\"stackedWidget\">\n     <property name=\"currentIndex\">\n      <number>0</number>\n     </property>\n     <widget class=\"QWidget\" name=\"noNotificationsPage\">\n      <layout class=\"QVBoxLayout\" name=\"verticalLayout_5\">\n       <item>\n        <spacer name=\"verticalSpacer_2\">\n         <property name=\"orientation\">\n          <enum>Qt::Vertical</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>20</width>\n           <height>117</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n       <item>\n        <widget class=\"QLabel\" name=\"label\">\n         <property name=\"font\">\n          <font>\n           <pointsize>20</pointsize>\n          </font>\n         </property>\n         <property name=\"text\">\n          <string>Is it Friday yet?</string>\n         </property>\n         <property name=\"alignment\">\n          <set>Qt::AlignCenter</set>\n         </property>\n        </widget>\n       </item>\n       <item>\n        <widget class=\"QLabel\" name=\"notificationSplash\">\n         <property name=\"enabled\">\n          <bool>false</bool>\n         </property>\n         <property name=\"text\">\n          <string notr=\"true\">TextLabel</string>\n         </property>\n         <property name=\"alignment\">\n          <set>Qt::AlignCenter</set>\n         </property>\n        </widget>\n       </item>\n       <item>\n        <widget class=\"QLabel\" name=\"label_2\">\n         <property name=\"text\">\n          <string>You've caught up with your notifications!</string>\n         </property>\n         <property name=\"alignment\">\n          <set>Qt::AlignCenter</set>\n         </property>\n        </widget>\n       </item>\n       <item>\n        <spacer name=\"verticalSpacer_3\">\n         <property name=\"orientation\">\n          <enum>Qt::Vertical</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>20</width>\n           <height>117</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n      </layout>\n     </widget>\n     <widget class=\"QWidget\" name=\"notificationsPage\">\n      <layout class=\"QVBoxLayout\" name=\"verticalLayout_3\">\n       <property name=\"spacing\">\n        <number>0</number>\n       </property>\n       <property name=\"leftMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"topMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"rightMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"bottomMargin\">\n        <number>0</number>\n       </property>\n       <item>\n        <widget class=\"QScrollArea\" name=\"scrollArea\">\n         <property name=\"frameShape\">\n          <enum>QFrame::NoFrame</enum>\n         </property>\n         <property name=\"widgetResizable\">\n          <bool>true</bool>\n         </property>\n         <widget class=\"QWidget\" name=\"scrollAreaWidgetContents\">\n          <property name=\"geometry\">\n           <rect>\n            <x>0</x>\n            <y>0</y>\n            <width>100</width>\n            <height>30</height>\n           </rect>\n          </property>\n          <layout class=\"QVBoxLayout\" name=\"verticalLayout_2\">\n           <property name=\"spacing\">\n            <number>0</number>\n           </property>\n           <property name=\"leftMargin\">\n            <number>0</number>\n           </property>\n           <property name=\"topMargin\">\n            <number>0</number>\n           </property>\n           <property name=\"rightMargin\">\n            <number>0</number>\n           </property>\n           <property name=\"bottomMargin\">\n            <number>0</number>\n           </property>\n           <item>\n            <widget class=\"Line\" name=\"line\">\n             <property name=\"maximumSize\">\n              <size>\n               <width>16777215</width>\n               <height>1</height>\n              </size>\n             </property>\n             <property name=\"orientation\">\n              <enum>Qt::Horizontal</enum>\n             </property>\n            </widget>\n           </item>\n           <item alignment=\"Qt::AlignHCenter\">\n            <widget class=\"QWidget\" name=\"notificationsWidget\" native=\"true\">\n             <layout class=\"QVBoxLayout\" name=\"verticalLayout_4\">\n              <property name=\"spacing\">\n               <number>0</number>\n              </property>\n              <property name=\"leftMargin\">\n               <number>0</number>\n              </property>\n              <property name=\"topMargin\">\n               <number>0</number>\n              </property>\n              <property name=\"rightMargin\">\n               <number>0</number>\n              </property>\n              <property name=\"bottomMargin\">\n               <number>0</number>\n              </property>\n              <item>\n               <layout class=\"QVBoxLayout\" name=\"notificationsLayout\">\n                <property name=\"spacing\">\n                 <number>6</number>\n                </property>\n               </layout>\n              </item>\n             </layout>\n            </widget>\n           </item>\n           <item>\n            <spacer name=\"verticalSpacer\">\n             <property name=\"orientation\">\n              <enum>Qt::Vertical</enum>\n             </property>\n             <property name=\"sizeHint\" stdset=\"0\">\n              <size>\n               <width>20</width>\n               <height>40</height>\n              </size>\n             </property>\n            </spacer>\n           </item>\n          </layout>\n         </widget>\n        </widget>\n       </item>\n      </layout>\n     </widget>\n    </widget>\n   </item>\n  </layout>\n </widget>\n <customwidgets>\n  <customwidget>\n   <class>tTitleLabel</class>\n   <extends>QLabel</extends>\n   <header location=\"global\">ttitlelabel.h</header>\n   <slots>\n    <signal>backButtonClicked()</signal>\n   </slots>\n  </customwidget>\n  <customwidget>\n   <class>tStackedWidget</class>\n   <extends>QStackedWidget</extends>\n   <header location=\"global\">tstackedwidget.h</header>\n   <container>1</container>\n   <slots>\n    <signal>switchingFrame(int)</signal>\n   </slots>\n  </customwidget>\n </customwidgets>\n <resources/>\n <connections/>\n</ui>\n"
  },
  {
    "path": "plugins/NotificationsPlugin/statuscenter/notificationwidget.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"notificationwidget.h\"\n#include \"ui_notificationwidget.h\"\n\n#include <QToolButton>\n\nstruct NotificationWidgetPrivate {\n    NotificationPtr notification;\n    QToolButton* dismissButton;\n};\n\nNotificationWidget::NotificationWidget(NotificationPtr notification, QWidget* parent) :\n    QWidget(parent),\n    ui(new Ui::NotificationWidget) {\n    ui->setupUi(this);\n\n    d = new NotificationWidgetPrivate();\n    d->notification = notification;\n\n    connect(notification, &Notification::dismissed, this, &NotificationWidget::deleteLater);\n    connect(notification, &Notification::summaryChanged, this, [ = ](QString summary) {\n        ui->summaryLabel->setText(summary);\n    });\n    connect(notification, &Notification::bodyChanged, this, [ = ](QString body) {\n        ui->bodyLabel->setText(body);\n    });\n    ui->summaryLabel->setText(notification->summary());\n    ui->bodyLabel->setText(notification->body());\n\n    d->dismissButton = new QToolButton(this);\n    d->dismissButton->setIcon(QIcon::fromTheme(\"window-close\"));\n    d->dismissButton->setFixedSize(d->dismissButton->sizeHint());\n    connect(d->dismissButton, &QToolButton::clicked, this, [ = ] {\n        notification->dismiss(Notification::NotificationUserDismissed);\n    });\n    d->dismissButton->hide();\n}\n\nNotificationWidget::~NotificationWidget() {\n    delete d;\n    delete ui;\n}\n\nvoid NotificationWidget::setIsLast(bool isLast) {\n    ui->line->setVisible(!isLast);\n}\n\nvoid NotificationWidget::resizeEvent(QResizeEvent* event) {\n    d->dismissButton->move(this->width() - d->dismissButton->width(), 0);\n}\n\nvoid NotificationWidget::enterEvent(QEvent* event) {\n    d->dismissButton->show();\n}\n\nvoid NotificationWidget::leaveEvent(QEvent* event) {\n    d->dismissButton->hide();\n}\n"
  },
  {
    "path": "plugins/NotificationsPlugin/statuscenter/notificationwidget.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef NOTIFICATIONWIDGET_H\n#define NOTIFICATIONWIDGET_H\n\n#include <QWidget>\n#include \"notification.h\"\n\nnamespace Ui {\n    class NotificationWidget;\n}\n\nstruct NotificationWidgetPrivate;\nclass NotificationWidget : public QWidget {\n        Q_OBJECT\n\n    public:\n        explicit NotificationWidget(NotificationPtr notification, QWidget* parent = nullptr);\n        ~NotificationWidget();\n\n        void setIsLast(bool isLast);\n\n    private:\n        Ui::NotificationWidget* ui;\n        NotificationWidgetPrivate* d;\n\n        void resizeEvent(QResizeEvent* event);\n        void enterEvent(QEvent* event);\n        void leaveEvent(QEvent* event);\n};\n\n#endif // NOTIFICATIONWIDGET_H\n"
  },
  {
    "path": "plugins/NotificationsPlugin/statuscenter/notificationwidget.ui",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ui version=\"4.0\">\n <class>NotificationWidget</class>\n <widget class=\"QWidget\" name=\"NotificationWidget\">\n  <property name=\"geometry\">\n   <rect>\n    <x>0</x>\n    <y>0</y>\n    <width>400</width>\n    <height>59</height>\n   </rect>\n  </property>\n  <property name=\"windowTitle\">\n   <string notr=\"true\">Form</string>\n  </property>\n  <layout class=\"QVBoxLayout\" name=\"verticalLayout_2\">\n   <property name=\"spacing\">\n    <number>0</number>\n   </property>\n   <property name=\"leftMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"topMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"rightMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"bottomMargin\">\n    <number>0</number>\n   </property>\n   <item>\n    <layout class=\"QVBoxLayout\" name=\"verticalLayout\">\n     <property name=\"leftMargin\">\n      <number>9</number>\n     </property>\n     <property name=\"topMargin\">\n      <number>9</number>\n     </property>\n     <property name=\"rightMargin\">\n      <number>9</number>\n     </property>\n     <property name=\"bottomMargin\">\n      <number>9</number>\n     </property>\n     <item>\n      <widget class=\"QLabel\" name=\"summaryLabel\">\n       <property name=\"font\">\n        <font>\n         <weight>75</weight>\n         <bold>true</bold>\n        </font>\n       </property>\n       <property name=\"text\">\n        <string notr=\"true\">Summary</string>\n       </property>\n      </widget>\n     </item>\n     <item>\n      <widget class=\"QLabel\" name=\"bodyLabel\">\n       <property name=\"text\">\n        <string notr=\"true\">Body</string>\n       </property>\n       <property name=\"wordWrap\">\n        <bool>true</bool>\n       </property>\n      </widget>\n     </item>\n    </layout>\n   </item>\n   <item>\n    <widget class=\"Line\" name=\"line\">\n     <property name=\"maximumSize\">\n      <size>\n       <width>16777215</width>\n       <height>1</height>\n      </size>\n     </property>\n     <property name=\"orientation\">\n      <enum>Qt::Horizontal</enum>\n     </property>\n    </widget>\n   </item>\n  </layout>\n </widget>\n <resources/>\n <connections/>\n</ui>\n"
  },
  {
    "path": "plugins/NotificationsPlugin/thedesk-notifications.conf",
    "content": ""
  },
  {
    "path": "plugins/NotificationsPlugin/translations/ar_SA.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"ar_SA\" sourcelanguage=\"en_US\">\n<context>\n    <name>JobWidget</name>\n    <message>\n        <location filename=\"../statuscenter/jobwidget.ui\" line=\"14\"/>\n        <source>Form</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>MprisChunk</name>\n    <message>\n        <location filename=\"../chunks/mprischunk.cpp\" line=\"53\"/>\n        <source>Media Players</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>NotificationAppGroup</name>\n    <message>\n        <location filename=\"../statuscenter/notificationappgroup.cpp\" line=\"50\"/>\n        <source>Uncategorised</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>NotificationsStatusCenterPane</name>\n    <message>\n        <location filename=\"../statuscenter/notificationsstatuscenterpane.ui\" line=\"35\"/>\n        <location filename=\"../statuscenter/notificationsstatuscenterpane.cpp\" line=\"144\"/>\n        <source>Notifications</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statuscenter/notificationsstatuscenterpane.ui\" line=\"51\"/>\n        <source>QUIET MODE</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statuscenter/notificationsstatuscenterpane.ui\" line=\"113\"/>\n        <source>Is it Friday yet?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statuscenter/notificationsstatuscenterpane.ui\" line=\"136\"/>\n        <source>You&apos;ve caught up with your notifications!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/NotificationsPlugin/translations/au_AU.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"au_AU\" sourcelanguage=\"en_US\">\n<context>\n    <name>JobWidget</name>\n    <message>\n        <location filename=\"../statuscenter/jobwidget.ui\" line=\"14\"/>\n        <source>Form</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>MprisChunk</name>\n    <message>\n        <location filename=\"../chunks/mprischunk.cpp\" line=\"53\"/>\n        <source>Media Players</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>NotificationAppGroup</name>\n    <message>\n        <location filename=\"../statuscenter/notificationappgroup.cpp\" line=\"50\"/>\n        <source>Uncategorised</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>NotificationsStatusCenterPane</name>\n    <message>\n        <location filename=\"../statuscenter/notificationsstatuscenterpane.ui\" line=\"35\"/>\n        <location filename=\"../statuscenter/notificationsstatuscenterpane.cpp\" line=\"144\"/>\n        <source>Notifications</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statuscenter/notificationsstatuscenterpane.ui\" line=\"51\"/>\n        <source>QUIET MODE</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statuscenter/notificationsstatuscenterpane.ui\" line=\"113\"/>\n        <source>Is it Friday yet?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statuscenter/notificationsstatuscenterpane.ui\" line=\"136\"/>\n        <source>You&apos;ve caught up with your notifications!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/NotificationsPlugin/translations/cy.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"cy\" sourcelanguage=\"en_US\">\n<context>\n    <name>JobWidget</name>\n    <message>\n        <location filename=\"../statuscenter/jobwidget.ui\" line=\"14\"/>\n        <source>Form</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>MprisChunk</name>\n    <message>\n        <location filename=\"../chunks/mprischunk.cpp\" line=\"53\"/>\n        <source>Media Players</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>NotificationAppGroup</name>\n    <message>\n        <location filename=\"../statuscenter/notificationappgroup.cpp\" line=\"50\"/>\n        <source>Uncategorised</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>NotificationsStatusCenterPane</name>\n    <message>\n        <location filename=\"../statuscenter/notificationsstatuscenterpane.ui\" line=\"35\"/>\n        <location filename=\"../statuscenter/notificationsstatuscenterpane.cpp\" line=\"144\"/>\n        <source>Notifications</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statuscenter/notificationsstatuscenterpane.ui\" line=\"51\"/>\n        <source>QUIET MODE</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statuscenter/notificationsstatuscenterpane.ui\" line=\"113\"/>\n        <source>Is it Friday yet?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statuscenter/notificationsstatuscenterpane.ui\" line=\"136\"/>\n        <source>You&apos;ve caught up with your notifications!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/NotificationsPlugin/translations/da.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"da\" sourcelanguage=\"en_US\">\n<context>\n    <name>JobWidget</name>\n    <message>\n        <location filename=\"../statuscenter/jobwidget.ui\" line=\"14\"/>\n        <source>Form</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>MprisChunk</name>\n    <message>\n        <location filename=\"../chunks/mprischunk.cpp\" line=\"53\"/>\n        <source>Media Players</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>NotificationAppGroup</name>\n    <message>\n        <location filename=\"../statuscenter/notificationappgroup.cpp\" line=\"50\"/>\n        <source>Uncategorised</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>NotificationsStatusCenterPane</name>\n    <message>\n        <location filename=\"../statuscenter/notificationsstatuscenterpane.ui\" line=\"35\"/>\n        <location filename=\"../statuscenter/notificationsstatuscenterpane.cpp\" line=\"144\"/>\n        <source>Notifications</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statuscenter/notificationsstatuscenterpane.ui\" line=\"51\"/>\n        <source>QUIET MODE</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statuscenter/notificationsstatuscenterpane.ui\" line=\"113\"/>\n        <source>Is it Friday yet?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statuscenter/notificationsstatuscenterpane.ui\" line=\"136\"/>\n        <source>You&apos;ve caught up with your notifications!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/NotificationsPlugin/translations/de.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"de\" sourcelanguage=\"en_US\">\n<context>\n    <name>JobWidget</name>\n    <message>\n        <location filename=\"../statuscenter/jobwidget.ui\" line=\"14\"/>\n        <source>Form</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>MprisChunk</name>\n    <message>\n        <location filename=\"../chunks/mprischunk.cpp\" line=\"53\"/>\n        <source>Media Players</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>NotificationAppGroup</name>\n    <message>\n        <location filename=\"../statuscenter/notificationappgroup.cpp\" line=\"50\"/>\n        <source>Uncategorised</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>NotificationsStatusCenterPane</name>\n    <message>\n        <location filename=\"../statuscenter/notificationsstatuscenterpane.ui\" line=\"35\"/>\n        <location filename=\"../statuscenter/notificationsstatuscenterpane.cpp\" line=\"144\"/>\n        <source>Notifications</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statuscenter/notificationsstatuscenterpane.ui\" line=\"51\"/>\n        <source>QUIET MODE</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statuscenter/notificationsstatuscenterpane.ui\" line=\"113\"/>\n        <source>Is it Friday yet?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statuscenter/notificationsstatuscenterpane.ui\" line=\"136\"/>\n        <source>You&apos;ve caught up with your notifications!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/NotificationsPlugin/translations/en_GB.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"en_GB\" sourcelanguage=\"en_US\">\n<context>\n    <name>JobWidget</name>\n    <message>\n        <location filename=\"../statuscenter/jobwidget.ui\" line=\"14\"/>\n        <source>Form</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>MprisChunk</name>\n    <message>\n        <location filename=\"../chunks/mprischunk.cpp\" line=\"53\"/>\n        <source>Media Players</source>\n        <translation>Media Players</translation>\n    </message>\n</context>\n<context>\n    <name>NotificationAppGroup</name>\n    <message>\n        <location filename=\"../statuscenter/notificationappgroup.cpp\" line=\"50\"/>\n        <source>Uncategorised</source>\n        <translation>Uncategorised</translation>\n    </message>\n</context>\n<context>\n    <name>NotificationsStatusCenterPane</name>\n    <message>\n        <location filename=\"../statuscenter/notificationsstatuscenterpane.ui\" line=\"35\"/>\n        <location filename=\"../statuscenter/notificationsstatuscenterpane.cpp\" line=\"144\"/>\n        <source>Notifications</source>\n        <translation>Notifications</translation>\n    </message>\n    <message>\n        <location filename=\"../statuscenter/notificationsstatuscenterpane.ui\" line=\"113\"/>\n        <source>Is it Friday yet?</source>\n        <translation>Is it Friday yet?</translation>\n    </message>\n    <message>\n        <location filename=\"../statuscenter/notificationsstatuscenterpane.ui\" line=\"136\"/>\n        <source>You&apos;ve caught up with your notifications!</source>\n        <translation>You&apos;ve caught up with your notifications!</translation>\n    </message>\n    <message>\n        <location filename=\"../statuscenter/notificationsstatuscenterpane.ui\" line=\"51\"/>\n        <source>QUIET MODE</source>\n        <translation>QUIET MODE</translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/NotificationsPlugin/translations/en_US.qm",
    "content": "<d\u0018!\u001c`"
  },
  {
    "path": "plugins/NotificationsPlugin/translations/en_US.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" sourcelanguage=\"en_US\">\n<context>\n    <name>JobWidget</name>\n    <message>\n        <location filename=\"../statuscenter/jobwidget.ui\" line=\"14\"/>\n        <source>Form</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>MprisChunk</name>\n    <message>\n        <location filename=\"../chunks/mprischunk.cpp\" line=\"53\"/>\n        <source>Media Players</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>NotificationAppGroup</name>\n    <message>\n        <location filename=\"../statuscenter/notificationappgroup.cpp\" line=\"50\"/>\n        <source>Uncategorised</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>NotificationsStatusCenterPane</name>\n    <message>\n        <location filename=\"../statuscenter/notificationsstatuscenterpane.ui\" line=\"35\"/>\n        <location filename=\"../statuscenter/notificationsstatuscenterpane.cpp\" line=\"144\"/>\n        <source>Notifications</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statuscenter/notificationsstatuscenterpane.ui\" line=\"51\"/>\n        <source>QUIET MODE</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statuscenter/notificationsstatuscenterpane.ui\" line=\"113\"/>\n        <source>Is it Friday yet?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statuscenter/notificationsstatuscenterpane.ui\" line=\"136\"/>\n        <source>You&apos;ve caught up with your notifications!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/NotificationsPlugin/translations/es.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"es\" sourcelanguage=\"en_US\">\n<context>\n    <name>JobWidget</name>\n    <message>\n        <location filename=\"../statuscenter/jobwidget.ui\" line=\"14\"/>\n        <source>Form</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>MprisChunk</name>\n    <message>\n        <location filename=\"../chunks/mprischunk.cpp\" line=\"53\"/>\n        <source>Media Players</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>NotificationAppGroup</name>\n    <message>\n        <location filename=\"../statuscenter/notificationappgroup.cpp\" line=\"50\"/>\n        <source>Uncategorised</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>NotificationsStatusCenterPane</name>\n    <message>\n        <location filename=\"../statuscenter/notificationsstatuscenterpane.ui\" line=\"35\"/>\n        <location filename=\"../statuscenter/notificationsstatuscenterpane.cpp\" line=\"144\"/>\n        <source>Notifications</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statuscenter/notificationsstatuscenterpane.ui\" line=\"51\"/>\n        <source>QUIET MODE</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statuscenter/notificationsstatuscenterpane.ui\" line=\"113\"/>\n        <source>Is it Friday yet?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statuscenter/notificationsstatuscenterpane.ui\" line=\"136\"/>\n        <source>You&apos;ve caught up with your notifications!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/NotificationsPlugin/translations/es_VE.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"es_VE\" sourcelanguage=\"en_US\">\n<context>\n    <name>JobWidget</name>\n    <message>\n        <location filename=\"../statuscenter/jobwidget.ui\" line=\"14\"/>\n        <source>Form</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>MprisChunk</name>\n    <message>\n        <location filename=\"../chunks/mprischunk.cpp\" line=\"53\"/>\n        <source>Media Players</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>NotificationAppGroup</name>\n    <message>\n        <location filename=\"../statuscenter/notificationappgroup.cpp\" line=\"50\"/>\n        <source>Uncategorised</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>NotificationsStatusCenterPane</name>\n    <message>\n        <location filename=\"../statuscenter/notificationsstatuscenterpane.ui\" line=\"35\"/>\n        <location filename=\"../statuscenter/notificationsstatuscenterpane.cpp\" line=\"144\"/>\n        <source>Notifications</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statuscenter/notificationsstatuscenterpane.ui\" line=\"51\"/>\n        <source>QUIET MODE</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statuscenter/notificationsstatuscenterpane.ui\" line=\"113\"/>\n        <source>Is it Friday yet?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statuscenter/notificationsstatuscenterpane.ui\" line=\"136\"/>\n        <source>You&apos;ve caught up with your notifications!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/NotificationsPlugin/translations/id.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"id\" sourcelanguage=\"en_US\">\n<context>\n    <name>JobWidget</name>\n    <message>\n        <location filename=\"../statuscenter/jobwidget.ui\" line=\"14\"/>\n        <source>Form</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>MprisChunk</name>\n    <message>\n        <location filename=\"../chunks/mprischunk.cpp\" line=\"53\"/>\n        <source>Media Players</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>NotificationAppGroup</name>\n    <message>\n        <location filename=\"../statuscenter/notificationappgroup.cpp\" line=\"50\"/>\n        <source>Uncategorised</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>NotificationsStatusCenterPane</name>\n    <message>\n        <location filename=\"../statuscenter/notificationsstatuscenterpane.ui\" line=\"35\"/>\n        <location filename=\"../statuscenter/notificationsstatuscenterpane.cpp\" line=\"144\"/>\n        <source>Notifications</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statuscenter/notificationsstatuscenterpane.ui\" line=\"51\"/>\n        <source>QUIET MODE</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statuscenter/notificationsstatuscenterpane.ui\" line=\"113\"/>\n        <source>Is it Friday yet?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statuscenter/notificationsstatuscenterpane.ui\" line=\"136\"/>\n        <source>You&apos;ve caught up with your notifications!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/NotificationsPlugin/translations/nl.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"nl\" sourcelanguage=\"en_US\">\n<context>\n    <name>JobWidget</name>\n    <message>\n        <location filename=\"../statuscenter/jobwidget.ui\" line=\"14\"/>\n        <source>Form</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>MprisChunk</name>\n    <message>\n        <location filename=\"../chunks/mprischunk.cpp\" line=\"53\"/>\n        <source>Media Players</source>\n        <translation>Mediaspelers</translation>\n    </message>\n</context>\n<context>\n    <name>NotificationAppGroup</name>\n    <message>\n        <location filename=\"../statuscenter/notificationappgroup.cpp\" line=\"50\"/>\n        <source>Uncategorised</source>\n        <translation>Ongecategoriseerd</translation>\n    </message>\n</context>\n<context>\n    <name>NotificationsStatusCenterPane</name>\n    <message>\n        <location filename=\"../statuscenter/notificationsstatuscenterpane.ui\" line=\"35\"/>\n        <location filename=\"../statuscenter/notificationsstatuscenterpane.cpp\" line=\"144\"/>\n        <source>Notifications</source>\n        <translation>Meldingen</translation>\n    </message>\n    <message>\n        <location filename=\"../statuscenter/notificationsstatuscenterpane.ui\" line=\"51\"/>\n        <source>QUIET MODE</source>\n        <translation>STILTEMODUS</translation>\n    </message>\n    <message>\n        <location filename=\"../statuscenter/notificationsstatuscenterpane.ui\" line=\"113\"/>\n        <source>Is it Friday yet?</source>\n        <translation>Is het al vrijdag?</translation>\n    </message>\n    <message>\n        <location filename=\"../statuscenter/notificationsstatuscenterpane.ui\" line=\"136\"/>\n        <source>You&apos;ve caught up with your notifications!</source>\n        <translation>Je hebt al je meldingen gezien!</translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/NotificationsPlugin/translations/pt_BR.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"pt_BR\" sourcelanguage=\"en_US\">\n<context>\n    <name>JobWidget</name>\n    <message>\n        <location filename=\"../statuscenter/jobwidget.ui\" line=\"14\"/>\n        <source>Form</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>MprisChunk</name>\n    <message>\n        <location filename=\"../chunks/mprischunk.cpp\" line=\"53\"/>\n        <source>Media Players</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>NotificationAppGroup</name>\n    <message>\n        <location filename=\"../statuscenter/notificationappgroup.cpp\" line=\"50\"/>\n        <source>Uncategorised</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>NotificationsStatusCenterPane</name>\n    <message>\n        <location filename=\"../statuscenter/notificationsstatuscenterpane.ui\" line=\"35\"/>\n        <location filename=\"../statuscenter/notificationsstatuscenterpane.cpp\" line=\"144\"/>\n        <source>Notifications</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statuscenter/notificationsstatuscenterpane.ui\" line=\"51\"/>\n        <source>QUIET MODE</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statuscenter/notificationsstatuscenterpane.ui\" line=\"113\"/>\n        <source>Is it Friday yet?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statuscenter/notificationsstatuscenterpane.ui\" line=\"136\"/>\n        <source>You&apos;ve caught up with your notifications!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/NotificationsPlugin/translations/ro_RO.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"ro_RO\" sourcelanguage=\"en_US\">\n<context>\n    <name>JobWidget</name>\n    <message>\n        <location filename=\"../statuscenter/jobwidget.ui\" line=\"14\"/>\n        <source>Form</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>MprisChunk</name>\n    <message>\n        <location filename=\"../chunks/mprischunk.cpp\" line=\"53\"/>\n        <source>Media Players</source>\n        <translation>Playere media</translation>\n    </message>\n</context>\n<context>\n    <name>NotificationAppGroup</name>\n    <message>\n        <location filename=\"../statuscenter/notificationappgroup.cpp\" line=\"50\"/>\n        <source>Uncategorised</source>\n        <translation>Necategorisite</translation>\n    </message>\n</context>\n<context>\n    <name>NotificationsStatusCenterPane</name>\n    <message>\n        <location filename=\"../statuscenter/notificationsstatuscenterpane.ui\" line=\"35\"/>\n        <location filename=\"../statuscenter/notificationsstatuscenterpane.cpp\" line=\"144\"/>\n        <source>Notifications</source>\n        <translation>Notificări</translation>\n    </message>\n    <message>\n        <location filename=\"../statuscenter/notificationsstatuscenterpane.ui\" line=\"113\"/>\n        <source>Is it Friday yet?</source>\n        <translation>Este vineri azi?</translation>\n    </message>\n    <message>\n        <location filename=\"../statuscenter/notificationsstatuscenterpane.ui\" line=\"136\"/>\n        <source>You&apos;ve caught up with your notifications!</source>\n        <translation>Ați citit toate notificările!</translation>\n    </message>\n    <message>\n        <location filename=\"../statuscenter/notificationsstatuscenterpane.ui\" line=\"51\"/>\n        <source>QUIET MODE</source>\n        <translation>MOD SILENȚIOS</translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/NotificationsPlugin/translations/sv.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"sv\" sourcelanguage=\"en_US\">\n<context>\n    <name>JobWidget</name>\n    <message>\n        <location filename=\"../statuscenter/jobwidget.ui\" line=\"14\"/>\n        <source>Form</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>MprisChunk</name>\n    <message>\n        <location filename=\"../chunks/mprischunk.cpp\" line=\"53\"/>\n        <source>Media Players</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>NotificationAppGroup</name>\n    <message>\n        <location filename=\"../statuscenter/notificationappgroup.cpp\" line=\"50\"/>\n        <source>Uncategorised</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>NotificationsStatusCenterPane</name>\n    <message>\n        <location filename=\"../statuscenter/notificationsstatuscenterpane.ui\" line=\"35\"/>\n        <location filename=\"../statuscenter/notificationsstatuscenterpane.cpp\" line=\"144\"/>\n        <source>Notifications</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statuscenter/notificationsstatuscenterpane.ui\" line=\"51\"/>\n        <source>QUIET MODE</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statuscenter/notificationsstatuscenterpane.ui\" line=\"113\"/>\n        <source>Is it Friday yet?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../statuscenter/notificationsstatuscenterpane.ui\" line=\"136\"/>\n        <source>You&apos;ve caught up with your notifications!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/NotificationsPlugin/translations/tr_TR.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"tr_TR\" sourcelanguage=\"en_US\">\n<context>\n    <name>JobWidget</name>\n    <message>\n        <location filename=\"../statuscenter/jobwidget.ui\" line=\"14\"/>\n        <source>Form</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>MprisChunk</name>\n    <message>\n        <location filename=\"../chunks/mprischunk.cpp\" line=\"53\"/>\n        <source>Media Players</source>\n        <translation>Medya Oynatıcılar</translation>\n    </message>\n</context>\n<context>\n    <name>NotificationAppGroup</name>\n    <message>\n        <location filename=\"../statuscenter/notificationappgroup.cpp\" line=\"50\"/>\n        <source>Uncategorised</source>\n        <translation>Kategorize edilmemiş</translation>\n    </message>\n</context>\n<context>\n    <name>NotificationsStatusCenterPane</name>\n    <message>\n        <location filename=\"../statuscenter/notificationsstatuscenterpane.ui\" line=\"35\"/>\n        <location filename=\"../statuscenter/notificationsstatuscenterpane.cpp\" line=\"144\"/>\n        <source>Notifications</source>\n        <translation>Bildirimler</translation>\n    </message>\n    <message>\n        <location filename=\"../statuscenter/notificationsstatuscenterpane.ui\" line=\"113\"/>\n        <source>Is it Friday yet?</source>\n        <translation>Cuma oldu mu?</translation>\n    </message>\n    <message>\n        <location filename=\"../statuscenter/notificationsstatuscenterpane.ui\" line=\"136\"/>\n        <source>You&apos;ve caught up with your notifications!</source>\n        <translation>Bildirimlerinizi yakaladınız!</translation>\n    </message>\n    <message>\n        <location filename=\"../statuscenter/notificationsstatuscenterpane.ui\" line=\"51\"/>\n        <source>QUIET MODE</source>\n        <translation>SESSİZ MOD</translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/NotificationsPlugin/translations/vi.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"vi\" sourcelanguage=\"en_US\">\n<context>\n    <name>JobWidget</name>\n    <message>\n        <location filename=\"../statuscenter/jobwidget.ui\" line=\"14\"/>\n        <source>Form</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>MprisChunk</name>\n    <message>\n        <location filename=\"../chunks/mprischunk.cpp\" line=\"53\"/>\n        <source>Media Players</source>\n        <translation>Trình phát phương tiện</translation>\n    </message>\n</context>\n<context>\n    <name>NotificationAppGroup</name>\n    <message>\n        <location filename=\"../statuscenter/notificationappgroup.cpp\" line=\"50\"/>\n        <source>Uncategorised</source>\n        <translation>Không phân loại</translation>\n    </message>\n</context>\n<context>\n    <name>NotificationsStatusCenterPane</name>\n    <message>\n        <location filename=\"../statuscenter/notificationsstatuscenterpane.ui\" line=\"35\"/>\n        <location filename=\"../statuscenter/notificationsstatuscenterpane.cpp\" line=\"144\"/>\n        <source>Notifications</source>\n        <translation>Thông báo</translation>\n    </message>\n    <message>\n        <location filename=\"../statuscenter/notificationsstatuscenterpane.ui\" line=\"51\"/>\n        <source>QUIET MODE</source>\n        <translation>CHẾ ĐỘ IM</translation>\n    </message>\n    <message>\n        <location filename=\"../statuscenter/notificationsstatuscenterpane.ui\" line=\"113\"/>\n        <source>Is it Friday yet?</source>\n        <translation>Có phải thứ sáu chưa?</translation>\n    </message>\n    <message>\n        <location filename=\"../statuscenter/notificationsstatuscenterpane.ui\" line=\"136\"/>\n        <source>You&apos;ve caught up with your notifications!</source>\n        <translation>Bạn đã cập nhật về các thông báo!</translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/NotificationsPlugin/translations/vi_VN.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"vi_VN\">\n<context>\n    <name>JobWidget</name>\n    <message>\n        <location filename=\"../statuscenter/jobwidget.ui\" line=\"14\"/>\n        <source>Form</source>\n        <translation></translation>\n    </message>\n</context>\n<context>\n    <name>MprisChunk</name>\n    <message>\n        <location filename=\"../chunks/mprischunk.cpp\" line=\"53\"/>\n        <source>Media Players</source>\n        <translation>Bộ phát phường tiện</translation>\n    </message>\n</context>\n<context>\n    <name>NotificationAppGroup</name>\n    <message>\n        <location filename=\"../statuscenter/notificationappgroup.cpp\" line=\"50\"/>\n        <source>Uncategorised</source>\n        <translation>Chưa được phân loại</translation>\n    </message>\n</context>\n<context>\n    <name>NotificationsStatusCenterPane</name>\n    <message>\n        <location filename=\"../statuscenter/notificationsstatuscenterpane.ui\" line=\"35\"/>\n        <location filename=\"../statuscenter/notificationsstatuscenterpane.cpp\" line=\"144\"/>\n        <source>Notifications</source>\n        <translation>Thông báo</translation>\n    </message>\n    <message>\n        <location filename=\"../statuscenter/notificationsstatuscenterpane.ui\" line=\"51\"/>\n        <source>QUIET MODE</source>\n        <translation>CHẾ ĐỘ IM LẶNG</translation>\n    </message>\n    <message>\n        <location filename=\"../statuscenter/notificationsstatuscenterpane.ui\" line=\"113\"/>\n        <source>Is it Friday yet?</source>\n        <translation>Có phải thứ sáu chưa?</translation>\n    </message>\n    <message>\n        <location filename=\"../statuscenter/notificationsstatuscenterpane.ui\" line=\"136\"/>\n        <source>You&apos;ve caught up with your notifications!</source>\n        <translation>Bạn đã cập nhật thông báo của mình!</translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/NotificationsPlugin/translations/zh_CN.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"zh_CN\" sourcelanguage=\"en_US\">\n<context>\n    <name>JobWidget</name>\n    <message>\n        <location filename=\"../statuscenter/jobwidget.ui\" line=\"14\"/>\n        <source>Form</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>MprisChunk</name>\n    <message>\n        <location filename=\"../chunks/mprischunk.cpp\" line=\"53\"/>\n        <source>Media Players</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>NotificationAppGroup</name>\n    <message>\n        <location filename=\"../statuscenter/notificationappgroup.cpp\" line=\"50\"/>\n        <source>Uncategorised</source>\n        <translation>未分类的</translation>\n    </message>\n</context>\n<context>\n    <name>NotificationsStatusCenterPane</name>\n    <message>\n        <location filename=\"../statuscenter/notificationsstatuscenterpane.ui\" line=\"35\"/>\n        <location filename=\"../statuscenter/notificationsstatuscenterpane.cpp\" line=\"144\"/>\n        <source>Notifications</source>\n        <translation>通知</translation>\n    </message>\n    <message>\n        <location filename=\"../statuscenter/notificationsstatuscenterpane.ui\" line=\"113\"/>\n        <source>Is it Friday yet?</source>\n        <translation>今天是周五嘛？</translation>\n    </message>\n    <message>\n        <location filename=\"../statuscenter/notificationsstatuscenterpane.ui\" line=\"136\"/>\n        <source>You&apos;ve caught up with your notifications!</source>\n        <translation>通知已阅！</translation>\n    </message>\n    <message>\n        <location filename=\"../statuscenter/notificationsstatuscenterpane.ui\" line=\"51\"/>\n        <source>QUIET MODE</source>\n        <translation>安静模式</translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/OverviewPlugin/CMakeLists.txt",
    "content": "cmake_minimum_required(VERSION 3.24.0)\n\nfind_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets DBus)\nfind_package(libcontemporary)\n\nset(SOURCES\n    OverviewPane/overviewpane.cpp\n    OverviewPane/worldclock.cpp\n    clockchunk.cpp\n    plugin.cpp\n\n    OverviewPane/overviewpane.ui\n    OverviewPane/worldclock.ui\n    clockchunk.ui\n)\n\nset(HEADERS\n    OverviewPane/overviewpane.h\n    OverviewPane/worldclock.h\n    clockchunk.h\n    plugin.h\n)\n\nset(PLUGIN_NAME overview)\nadd_plugin_td(${PLUGIN_NAME})\ntarget_sources(plugin-${PLUGIN_NAME} PRIVATE ${SOURCES} ${HEADERS})\n\ntarget_link_libraries(plugin-${PLUGIN_NAME} Qt::Widgets Qt::Multimedia libcontemporary libthedesk)\n"
  },
  {
    "path": "plugins/OverviewPlugin/OverviewPane/overviewpane.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"overviewpane.h\"\n#include \"ui_overviewpane.h\"\n\n#include \"worldclock.h\"\n#include <QDBusInterface>\n#include <QIcon>\n#include <QPainter>\n#include <QProcess>\n#include <QTime>\n#include <QTimer>\n#include <QToolButton>\n#include <QVariantAnimation>\n#include <TimeDate/desktoptimedate.h>\n#include <Wm/desktopwm.h>\n#include <libcontemporary_global.h>\n#include <math.h>\n#include <statemanager.h>\n#include <statuscentermanager.h>\n#include <tsettings.h>\n\nstruct OverviewPanePrivate {\n        OverviewPanePrivate() :\n            worldClockSettings(\"theSuite\", \"the24\"){};\n\n        QToolButton* hamburgerButton;\n        QList<WorldClock*> worldClocks;\n\n        tSettings worldClockSettings;\n};\n\nOverviewPane::OverviewPane() :\n    StatusCenterPane(),\n    ui(new Ui::OverviewPane) {\n    ui->setupUi(this);\n\n    d = new OverviewPanePrivate();\n\n    d->hamburgerButton = new QToolButton(this);\n    d->hamburgerButton->setIcon(QIcon::fromTheme(\"application-menu\"));\n    d->hamburgerButton->move(0, 0);\n    d->hamburgerButton->setFixedSize(d->hamburgerButton->sizeHint());\n    d->hamburgerButton->setVisible(StateManager::statusCenterManager()->isHamburgerMenuRequired());\n    connect(StateManager::statusCenterManager(), &StatusCenterManager::isHamburgerMenuRequiredChanged, d->hamburgerButton, &QToolButton::setVisible);\n    connect(d->hamburgerButton, &QToolButton::clicked, StateManager::statusCenterManager(), &StatusCenterManager::showStatusCenterHamburgerMenu);\n\n    ui->dstIcon->setPixmap(QIcon::fromTheme(\"chronometer\").pixmap(SC_DPI_T(QSize(16, 16), QSize)));\n    ui->weatherIcon->setPixmap(QIcon::fromTheme(\"weather-clear\").pixmap(SC_DPI_T(QSize(16, 16), QSize)));\n    ui->dstPanel->setVisible(false);\n    ui->weatherPanel->setVisible(false);\n\n    QTimer* timer = new QTimer();\n    timer->setInterval(60000);\n    connect(timer, &QTimer::timeout, this, &OverviewPane::updateGreeting);\n    timer->start();\n    updateGreeting();\n\n    DesktopTimeDate::makeTimeLabel(ui->date, DesktopTimeDate::StandardDate);\n    DesktopTimeDate::makeTimeLabel(ui->time, DesktopTimeDate::Time);\n    DesktopTimeDate::makeTimeLabel(ui->timeAmPm, DesktopTimeDate::AmPm);\n\n    connect(DesktopTimeDate::timeUpdateTimer(), &QTimer::timeout, this, [=] {\n        for (WorldClock* wc : d->worldClocks) {\n            wc->updateClock();\n        }\n    });\n\n    const int contentWidth = StateManager::instance()->statusCenterManager()->preferredContentWidth();\n    ui->mainWidget->setFixedWidth(contentWidth);\n    ui->scrollAreaWidgetContents->installEventFilter(this);\n\n    connect(&d->worldClockSettings, &tSettings::settingChanged, this, [=](QString key, QVariant value) {\n        if (key == \"WorldClock/timezones\") {\n            updateWorldClocks();\n        }\n    });\n    updateWorldClocks();\n    updateDSTNotification();\n}\n\nOverviewPane::~OverviewPane() {\n    delete d;\n    delete ui;\n}\n\nvoid OverviewPane::updateGreeting() {\n    QString userDisplayName = DesktopWm::userDisplayName();\n\n    QTime now = QTime::currentTime();\n    if (now.hour() < 6) {\n        ui->greetingLabel->setText(tr(\"Hi %1!\").arg(userDisplayName));\n    } else if (now.hour() < 12) {\n        ui->greetingLabel->setText(tr(\"Good morning, %1!\").arg(userDisplayName));\n    } else if (now.hour() < 17) {\n        ui->greetingLabel->setText(tr(\"Good afternoon, %1!\").arg(userDisplayName));\n    } else {\n        ui->greetingLabel->setText(tr(\"Good evening, %1!\").arg(userDisplayName));\n    }\n}\n\nvoid OverviewPane::updateWorldClocks() {\n    for (WorldClock* wc : d->worldClocks) {\n        ui->worldClocksLayout->removeWidget(wc);\n        wc->deleteLater();\n    }\n\n    d->worldClocks.clear();\n\n    for (QString tz : d->worldClockSettings.delimitedList(\"WorldClock/timezones\").mid(0, 4)) {\n        WorldClock* wc = new WorldClock(QTimeZone(tz.toUtf8()));\n        ui->worldClocksLayout->addWidget(wc);\n        d->worldClocks.append(wc);\n    }\n}\n\nvoid OverviewPane::updateDSTNotification() {\n    QDBusInterface dateTimeInterface(\"org.freedesktop.timedate1\", \"/org/freedesktop/timedate1\", \"org.freedesktop.timedate1\", QDBusConnection::systemBus());\n    QString currentTimezone = dateTimeInterface.property(\"Timezone\").toString();\n\n    QString timezoneInfoPath = \"/usr/share/zoneinfo/\" + currentTimezone;\n    QProcess* timezoneProcess = new QProcess();\n    connect(timezoneProcess, QOverload<int, QProcess::ExitStatus>::of(&QProcess::finished), [=](int exitCode, QProcess::ExitStatus exitStatus) {\n        timezoneProcess->deleteLater();\n\n        struct Changeover {\n                QDateTime changeoverDate;\n                bool isDST;\n                int gmtOffset;\n        };\n\n        QList<Changeover> changeovers;\n\n        while (!timezoneProcess->atEnd()) {\n            QStringList parts = QString(timezoneProcess->readLine()).split(\" \", Qt::SkipEmptyParts);\n            if (parts.length() == 16) {\n                QStringList dateText;\n\n                const QStringList months = {\n                    \"Jan\",\n                    \"Feb\",\n                    \"Mar\",\n                    \"Apr\",\n                    \"May\",\n                    \"Jun\",\n                    \"Jul\",\n                    \"Aug\",\n                    \"Sep\",\n                    \"Oct\",\n                    \"Nov\",\n                    \"Dec\"};\n                dateText.append(parts.at(3));\n                dateText.append(QString::number(months.indexOf(parts.at(2)) + 1).rightJustified(2, '0'));\n                dateText.append(parts.at(5));\n                dateText.append(parts.at(4));\n\n                Changeover c;\n                QString dateConnectedText = dateText.join(\".\");\n\n                QDate date = QDate(parts.at(5).toInt(), months.indexOf(parts.at(2)) + 1, parts.at(3).toInt());\n                QTime time = QTime::fromString(parts.at(4), \"hh:mm:ss\");\n                c.changeoverDate = QDateTime(date, time, Qt::LocalTime);\n                c.changeoverDate.setTimeSpec(Qt::UTC);\n                c.isDST = parts.at(14).endsWith(\"1\");\n                c.gmtOffset = parts.at(15).mid(7).toInt();\n                changeovers.append(c);\n            }\n        }\n\n        bool showDaylightSavingsPanel = false;\n        Changeover changeover;\n        QDateTime current = QDateTime::currentDateTimeUtc();\n        QDateTime currentLocal = QDateTime::currentDateTime();\n\n        for (int i = 0; i < changeovers.count(); i++) {\n            Changeover c = changeovers.at(i);\n\n            int days = current.daysTo(c.changeoverDate);\n            if (days > 0 && days < 14) {\n                if ((currentLocal.isDaylightTime() && !c.isDST) || (!currentLocal.isDaylightTime() && c.isDST)) {\n                    showDaylightSavingsPanel = true;\n                    changeover = c;\n                }\n            }\n        }\n\n        if (showDaylightSavingsPanel) {\n            ui->dstPanel->setVisible(true);\n\n            if (currentLocal.isDaylightTime()) {\n                ui->dstLabel->setText(tr(\"Daylight Savings Time is ending on %1. The clock will automatically shift backwards by %n hour(s).\", nullptr, 1).arg(QLocale().toString(changeover.changeoverDate.toLocalTime().date())));\n            } else {\n                ui->dstLabel->setText(tr(\"Daylight Savings Time is starting on %1. The clock will automatically shift forwards by %n hour(s).\", nullptr, 1).arg(QLocale().toString(changeover.changeoverDate.toLocalTime().date())));\n            }\n        } else {\n            ui->dstPanel->setVisible(false);\n        }\n    });\n    timezoneProcess->start(\"zdump\", {\"-v\", currentTimezone});\n}\n\nvoid OverviewPane::changeEvent(QEvent* event) {\n    if (event->type() == QEvent::LanguageChange) {\n        ui->retranslateUi(this);\n        emit displayNameChanged();\n    }\n}\n\nbool OverviewPane::eventFilter(QObject* watched, QEvent* event) {\n    if (watched == ui->scrollAreaWidgetContents && event->type() == QEvent::Paint) {\n        QPainter p(ui->scrollAreaWidgetContents);\n        p.setRenderHint(QPainter::Antialiasing);\n\n        QColor newTextColor;\n\n        QColor top, bottom;\n        QTime now = QTime::currentTime();\n\n        /*if (currentCondition.isValid && currentCondition.properties.value(WeatherCondition::isCloudy, false).toBool()) {\n            top = QColor(150, 150, 150);\n            bottom = QColor(100, 100, 100);\n            newTextColor = QColor(Qt::black);\n        } else*/\n        if (now.hour() < 4 || now.hour() > 20) { // Assume night\n            top = QColor(0, 36, 85);\n            bottom = QColor(0, 17, 40);\n            newTextColor = QColor(Qt::white);\n        } else if (now.hour() > 8 && now.hour() < 16) { // Assume day\n            top = QColor(126, 195, 255);\n            bottom = QColor(64, 149, 185);\n            newTextColor = QColor(Qt::black);\n        } else { // Calculate interpolation\n            int interpolation;\n            // From 4-8 interpolate sunrise\n            if (now.hour() > 4 && now.hour() < 8) {\n                interpolation = now.msecsSinceStartOfDay() - 14400000; // 4 hours in milliseconds\n            } else {\n                interpolation = 14400000 - (now.msecsSinceStartOfDay() - 57600000); // 16 hours in milliseconds\n            }\n\n            QVariantAnimation a;\n            a.setDuration(14400000);\n            a.setCurrentTime(interpolation);\n            a.setStartValue(QColor(0, 36, 85));\n            a.setKeyValueAt(0.5, QColor(255, 140, 0));\n            a.setEndValue(QColor(126, 195, 255));\n            top = a.currentValue().value<QColor>();\n            a.setStartValue(QColor(0, 17, 40));\n            a.setKeyValueAt(0.5, QColor(167, 70, 25));\n            a.setEndValue(QColor(64, 149, 185));\n            bottom = a.currentValue().value<QColor>();\n\n            bool dark = ((top.red() + top.green() + top.blue()) / 3) < 127;\n            if (dark) {\n                newTextColor = QColor(Qt::white);\n            } else {\n                newTextColor = QColor(Qt::black);\n            }\n        }\n\n        QLinearGradient mainBackground;\n        mainBackground.setStart(0, 0);\n        mainBackground.setFinalStop(0, 500);\n        mainBackground.setColorAt(0, top);\n        mainBackground.setColorAt(1, bottom);\n\n        p.setBrush(mainBackground);\n        p.setPen(Qt::transparent);\n        p.drawRect(0, 0, ui->scrollAreaWidgetContents->width(), ui->scrollAreaWidgetContents->height());\n\n        // Draw background objects if neccessary\n        //     if (currentCondition.isValid) {\n        //         if (currentCondition.properties.value(WeatherCondition::isRainy, false).toBool()) drawRaindrops(&p);\n        //         if (currentCondition.properties.value(WeatherCondition::WindBeaufort, 0).toInt() >= 4) drawWind(&p);\n        //     }\n        //     drawObjects(&p);\n\n        // Draw celestial object if neccessary\n        int daySegmentPassed = -1;\n        bool isMoon = true;\n\n        if (now.hour() < 5 || (now.hour() == 5 && now.minute() <= 30)) {                                                                         // Draw moon\n            daySegmentPassed = now.msecsSinceStartOfDay() + 19800000;                                                                            // 5.5 hours in milliseconds\n        } else if (now.hour() > 18 || (now.hour() == 18 && now.minute() >= 30)) {                                                                // Draw moon\n            daySegmentPassed = now.msecsSinceStartOfDay() - 66600000;                                                                            // 18.5 hours in milliseconds\n        } else if ((now.hour() > 6 && now.hour() < 17) || (now.hour() == 6 && now.minute() >= 30) || (now.hour() == 17 && now.minute() <= 30)) { // Draw sun\n            daySegmentPassed = now.msecsSinceStartOfDay() - 23400000;                                                                            // 6.5 hours in milliseconds\n            isMoon = false;\n        }\n\n        if (isMoon) {\n            p.setBrush(QColor(127, 127, 127));\n        } else {\n            p.setBrush(QColor(255, 224, 130));\n        }\n        if (daySegmentPassed >= 0) {\n            double percentageThroughArc = daySegmentPassed / 39600000.0; // 11 hours in milliseconds\n\n            double sinArg = percentageThroughArc * M_PI;\n            double heightDisplacement = -sin(sinArg) + 1;\n\n            int top = static_cast<int>((heightDisplacement * 100) + 70);\n            int left = static_cast<int>((ui->scrollAreaWidgetContents->width() + 100) * percentageThroughArc - 50);\n\n            QPoint center(left, top);\n            if (isMoon) {\n                p.drawEllipse(center, 30, 30);\n            } else {\n                p.drawEllipse(center, 50, 50);\n            }\n        }\n\n        QPalette pal = ui->scrollAreaWidgetContents->palette();\n        pal.setColor(QPalette::WindowText, newTextColor);\n        ui->scrollAreaWidgetContents->setPalette(pal);\n    }\n    return false;\n}\n\nQString OverviewPane::name() {\n    return \"OverviewPane\";\n}\n\nQString OverviewPane::displayName() {\n    return tr(\"Overview\");\n}\n\nQIcon OverviewPane::icon() {\n    return QIcon::fromTheme(\"thedesk-overview\", QIcon::fromTheme(\"weather-clear\"));\n}\n\nQWidget* OverviewPane::leftPane() {\n    return nullptr;\n}\n"
  },
  {
    "path": "plugins/OverviewPlugin/OverviewPane/overviewpane.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef OVERVIEWPANE_H\n#define OVERVIEWPANE_H\n\n#include <statuscenterpane.h>\n\nnamespace Ui {\n    class OverviewPane;\n}\n\nstruct OverviewPanePrivate;\nclass OverviewPane : public StatusCenterPane {\n        Q_OBJECT\n\n    public:\n        explicit OverviewPane();\n        ~OverviewPane();\n\n    private:\n        Ui::OverviewPane* ui;\n        OverviewPanePrivate* d;\n\n        void updateGreeting();\n        void updateWorldClocks();\n        void updateDSTNotification();\n\n        void changeEvent(QEvent* event);\n        bool eventFilter(QObject* watched, QEvent* event);\n\n        // StatusCenterPane interface\n    public:\n        QString name();\n        QString displayName();\n        QIcon icon();\n        QWidget* leftPane();\n};\n\n#endif // OVERVIEWPANE_H\n"
  },
  {
    "path": "plugins/OverviewPlugin/OverviewPane/overviewpane.ui",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ui version=\"4.0\">\n <class>OverviewPane</class>\n <widget class=\"QWidget\" name=\"OverviewPane\">\n  <property name=\"geometry\">\n   <rect>\n    <x>0</x>\n    <y>0</y>\n    <width>669</width>\n    <height>448</height>\n   </rect>\n  </property>\n  <property name=\"windowTitle\">\n   <string notr=\"true\">Form</string>\n  </property>\n  <layout class=\"QHBoxLayout\" name=\"horizontalLayout_2\">\n   <property name=\"spacing\">\n    <number>0</number>\n   </property>\n   <property name=\"leftMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"topMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"rightMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"bottomMargin\">\n    <number>0</number>\n   </property>\n   <item>\n    <widget class=\"QScrollArea\" name=\"scrollArea\">\n     <property name=\"frameShape\">\n      <enum>QFrame::NoFrame</enum>\n     </property>\n     <property name=\"widgetResizable\">\n      <bool>true</bool>\n     </property>\n     <widget class=\"QWidget\" name=\"scrollAreaWidgetContents\">\n      <property name=\"geometry\">\n       <rect>\n        <x>0</x>\n        <y>-188</y>\n        <width>655</width>\n        <height>636</height>\n       </rect>\n      </property>\n      <property name=\"sizePolicy\">\n       <sizepolicy hsizetype=\"Expanding\" vsizetype=\"Preferred\">\n        <horstretch>0</horstretch>\n        <verstretch>0</verstretch>\n       </sizepolicy>\n      </property>\n      <layout class=\"QHBoxLayout\" name=\"horizontalLayout_3\">\n       <item>\n        <spacer name=\"horizontalSpacer_3\">\n         <property name=\"orientation\">\n          <enum>Qt::Horizontal</enum>\n         </property>\n         <property name=\"sizeType\">\n          <enum>QSizePolicy::Preferred</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>0</width>\n           <height>20</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n       <item>\n        <widget class=\"QWidget\" name=\"mainWidget\" native=\"true\">\n         <layout class=\"QVBoxLayout\" name=\"verticalLayout_7\">\n          <property name=\"leftMargin\">\n           <number>50</number>\n          </property>\n          <property name=\"topMargin\">\n           <number>50</number>\n          </property>\n          <property name=\"rightMargin\">\n           <number>50</number>\n          </property>\n          <property name=\"bottomMargin\">\n           <number>50</number>\n          </property>\n          <item>\n           <widget class=\"QLabel\" name=\"greetingLabel\">\n            <property name=\"font\">\n             <font>\n              <pointsize>20</pointsize>\n             </font>\n            </property>\n            <property name=\"text\">\n             <string notr=\"true\">Hi user!</string>\n            </property>\n           </widget>\n          </item>\n          <item>\n           <widget class=\"QLabel\" name=\"label\">\n            <property name=\"text\">\n             <string>Hope you're having a great day. Here's what we've got for you:</string>\n            </property>\n            <property name=\"wordWrap\">\n             <bool>true</bool>\n            </property>\n           </widget>\n          </item>\n          <item>\n           <spacer name=\"verticalSpacer_2\">\n            <property name=\"orientation\">\n             <enum>Qt::Vertical</enum>\n            </property>\n            <property name=\"sizeType\">\n             <enum>QSizePolicy::Fixed</enum>\n            </property>\n            <property name=\"sizeHint\" stdset=\"0\">\n             <size>\n              <width>20</width>\n              <height>40</height>\n             </size>\n            </property>\n           </spacer>\n          </item>\n          <item>\n           <widget class=\"QWidget\" name=\"widget_2\" native=\"true\">\n            <layout class=\"QHBoxLayout\" name=\"horizontalLayout_7\">\n             <property name=\"leftMargin\">\n              <number>0</number>\n             </property>\n             <property name=\"topMargin\">\n              <number>0</number>\n             </property>\n             <property name=\"rightMargin\">\n              <number>0</number>\n             </property>\n             <property name=\"bottomMargin\">\n              <number>0</number>\n             </property>\n             <item alignment=\"Qt::AlignTop\">\n              <widget class=\"QWidget\" name=\"verticalWidget\" native=\"true\">\n               <layout class=\"QVBoxLayout\" name=\"verticalLayout\">\n                <property name=\"leftMargin\">\n                 <number>0</number>\n                </property>\n                <property name=\"topMargin\">\n                 <number>0</number>\n                </property>\n                <property name=\"rightMargin\">\n                 <number>0</number>\n                </property>\n                <property name=\"bottomMargin\">\n                 <number>0</number>\n                </property>\n                <item>\n                 <layout class=\"QHBoxLayout\" name=\"horizontalLayout_6\">\n                  <property name=\"spacing\">\n                   <number>0</number>\n                  </property>\n                  <item>\n                   <widget class=\"QLabel\" name=\"time\">\n                    <property name=\"font\">\n                     <font>\n                      <pointsize>40</pointsize>\n                     </font>\n                    </property>\n                    <property name=\"text\">\n                     <string notr=\"true\">16:20:00</string>\n                    </property>\n                   </widget>\n                  </item>\n                  <item>\n                   <widget class=\"QLabel\" name=\"timeAmPm\">\n                    <property name=\"sizePolicy\">\n                     <sizepolicy hsizetype=\"Expanding\" vsizetype=\"Preferred\">\n                      <horstretch>0</horstretch>\n                      <verstretch>0</verstretch>\n                     </sizepolicy>\n                    </property>\n                    <property name=\"font\">\n                     <font>\n                      <pointsize>40</pointsize>\n                     </font>\n                    </property>\n                    <property name=\"text\">\n                     <string notr=\"true\">a</string>\n                    </property>\n                   </widget>\n                  </item>\n                 </layout>\n                </item>\n                <item>\n                 <widget class=\"QLabel\" name=\"date\">\n                  <property name=\"font\">\n                   <font>\n                    <pointsize>15</pointsize>\n                   </font>\n                  </property>\n                  <property name=\"text\">\n                   <string notr=\"true\">Sunday, 1 Janurary 1111</string>\n                  </property>\n                 </widget>\n                </item>\n                <item>\n                 <widget class=\"QWidget\" name=\"widget\" native=\"true\">\n                  <layout class=\"QVBoxLayout\" name=\"verticalLayout_6\">\n                   <property name=\"leftMargin\">\n                    <number>0</number>\n                   </property>\n                   <property name=\"topMargin\">\n                    <number>20</number>\n                   </property>\n                   <property name=\"rightMargin\">\n                    <number>0</number>\n                   </property>\n                   <property name=\"bottomMargin\">\n                    <number>0</number>\n                   </property>\n                   <item>\n                    <widget class=\"QFrame\" name=\"dstPanel\">\n                     <property name=\"frameShape\">\n                      <enum>QFrame::NoFrame</enum>\n                     </property>\n                     <property name=\"frameShadow\">\n                      <enum>QFrame::Raised</enum>\n                     </property>\n                     <layout class=\"QHBoxLayout\" name=\"horizontalLayout_4\">\n                      <property name=\"leftMargin\">\n                       <number>0</number>\n                      </property>\n                      <property name=\"topMargin\">\n                       <number>0</number>\n                      </property>\n                      <property name=\"rightMargin\">\n                       <number>9</number>\n                      </property>\n                      <property name=\"bottomMargin\">\n                       <number>0</number>\n                      </property>\n                      <item>\n                       <widget class=\"QLabel\" name=\"dstIcon\">\n                        <property name=\"text\">\n                         <string notr=\"true\">Icon</string>\n                        </property>\n                        <property name=\"alignment\">\n                         <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>\n                        </property>\n                       </widget>\n                      </item>\n                      <item>\n                       <widget class=\"QLabel\" name=\"dstLabel\">\n                        <property name=\"sizePolicy\">\n                         <sizepolicy hsizetype=\"Expanding\" vsizetype=\"Preferred\">\n                          <horstretch>0</horstretch>\n                          <verstretch>0</verstretch>\n                         </sizepolicy>\n                        </property>\n                        <property name=\"text\">\n                         <string notr=\"true\">On Tableday, 1 April 2018, Daylight Savings Time will end. The clock will automatically adjust backwards by 1 hour.</string>\n                        </property>\n                        <property name=\"wordWrap\">\n                         <bool>true</bool>\n                        </property>\n                       </widget>\n                      </item>\n                     </layout>\n                    </widget>\n                   </item>\n                   <item>\n                    <widget class=\"QWidget\" name=\"weatherPanel\" native=\"true\">\n                     <layout class=\"QHBoxLayout\" name=\"horizontalLayout_5\">\n                      <property name=\"leftMargin\">\n                       <number>0</number>\n                      </property>\n                      <property name=\"topMargin\">\n                       <number>0</number>\n                      </property>\n                      <property name=\"rightMargin\">\n                       <number>0</number>\n                      </property>\n                      <property name=\"bottomMargin\">\n                       <number>0</number>\n                      </property>\n                      <item>\n                       <widget class=\"QLabel\" name=\"weatherIcon\">\n                        <property name=\"text\">\n                         <string notr=\"true\">Icon</string>\n                        </property>\n                        <property name=\"alignment\">\n                         <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>\n                        </property>\n                       </widget>\n                      </item>\n                      <item>\n                       <widget class=\"QLabel\" name=\"weatherInfo\">\n                        <property name=\"sizePolicy\">\n                         <sizepolicy hsizetype=\"Expanding\" vsizetype=\"Preferred\">\n                          <horstretch>0</horstretch>\n                          <verstretch>0</verstretch>\n                         </sizepolicy>\n                        </property>\n                        <property name=\"text\">\n                         <string notr=\"true\">Weather Information</string>\n                        </property>\n                        <property name=\"wordWrap\">\n                         <bool>true</bool>\n                        </property>\n                       </widget>\n                      </item>\n                     </layout>\n                    </widget>\n                   </item>\n                  </layout>\n                 </widget>\n                </item>\n               </layout>\n              </widget>\n             </item>\n             <item alignment=\"Qt::AlignTop\">\n              <widget class=\"QWidget\" name=\"verticalWidget_2\" native=\"true\">\n               <layout class=\"QVBoxLayout\" name=\"worldClocksLayout\">\n                <property name=\"leftMargin\">\n                 <number>0</number>\n                </property>\n                <property name=\"topMargin\">\n                 <number>0</number>\n                </property>\n                <property name=\"rightMargin\">\n                 <number>0</number>\n                </property>\n                <property name=\"bottomMargin\">\n                 <number>0</number>\n                </property>\n               </layout>\n              </widget>\n             </item>\n            </layout>\n           </widget>\n          </item>\n          <item>\n           <spacer name=\"verticalSpacer_3\">\n            <property name=\"orientation\">\n             <enum>Qt::Vertical</enum>\n            </property>\n            <property name=\"sizeType\">\n             <enum>QSizePolicy::Fixed</enum>\n            </property>\n            <property name=\"sizeHint\" stdset=\"0\">\n             <size>\n              <width>20</width>\n              <height>40</height>\n             </size>\n            </property>\n           </spacer>\n          </item>\n          <item>\n           <layout class=\"QHBoxLayout\" name=\"horizontalLayout\">\n            <item>\n             <spacer name=\"horizontalSpacer\">\n              <property name=\"orientation\">\n               <enum>Qt::Horizontal</enum>\n              </property>\n              <property name=\"sizeHint\" stdset=\"0\">\n               <size>\n                <width>40</width>\n                <height>20</height>\n               </size>\n              </property>\n             </spacer>\n            </item>\n            <item>\n             <widget class=\"QFrame\" name=\"frame\">\n              <property name=\"frameShape\">\n               <enum>QFrame::StyledPanel</enum>\n              </property>\n              <property name=\"frameShadow\">\n               <enum>QFrame::Raised</enum>\n              </property>\n              <layout class=\"QVBoxLayout\" name=\"verticalLayout_5\">\n               <property name=\"leftMargin\">\n                <number>0</number>\n               </property>\n               <property name=\"topMargin\">\n                <number>0</number>\n               </property>\n               <property name=\"rightMargin\">\n                <number>0</number>\n               </property>\n               <property name=\"bottomMargin\">\n                <number>0</number>\n               </property>\n               <item>\n                <widget class=\"QCalendarWidget\" name=\"calendarWidget\">\n                 <property name=\"autoFillBackground\">\n                  <bool>false</bool>\n                 </property>\n                </widget>\n               </item>\n              </layout>\n             </widget>\n            </item>\n            <item>\n             <spacer name=\"horizontalSpacer_2\">\n              <property name=\"orientation\">\n               <enum>Qt::Horizontal</enum>\n              </property>\n              <property name=\"sizeHint\" stdset=\"0\">\n               <size>\n                <width>40</width>\n                <height>20</height>\n               </size>\n              </property>\n             </spacer>\n            </item>\n           </layout>\n          </item>\n          <item>\n           <spacer name=\"verticalSpacer\">\n            <property name=\"orientation\">\n             <enum>Qt::Vertical</enum>\n            </property>\n            <property name=\"sizeHint\" stdset=\"0\">\n             <size>\n              <width>20</width>\n              <height>0</height>\n             </size>\n            </property>\n           </spacer>\n          </item>\n         </layout>\n        </widget>\n       </item>\n       <item>\n        <spacer name=\"horizontalSpacer_4\">\n         <property name=\"orientation\">\n          <enum>Qt::Horizontal</enum>\n         </property>\n         <property name=\"sizeType\">\n          <enum>QSizePolicy::Preferred</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>0</width>\n           <height>20</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n      </layout>\n     </widget>\n    </widget>\n   </item>\n  </layout>\n </widget>\n <resources/>\n <connections/>\n</ui>\n"
  },
  {
    "path": "plugins/OverviewPlugin/OverviewPane/worldclock.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"worldclock.h\"\n#include \"ui_worldclock.h\"\n\n#include <QPainter>\n#include <QProcess>\n#include <TimeDate/desktoptimedate.h>\n\n#include <statemanager.h>\n#include <statuscentermanager.h>\n\nstruct WorldClockPrivate {\n    QTimeZone tz;\n    bool mouseDown = false;\n};\n\nWorldClock::WorldClock(QTimeZone tz, QWidget* parent) :\n    QWidget(parent),\n    ui(new Ui::WorldClock) {\n    ui->setupUi(this);\n\n    d = new WorldClockPrivate();\n    d->tz = tz;\n\n    QString city = QString(tz.id()).replace(\"_\", \" \");\n    if (city.contains(\"/\")) city = city.split(\"/\").at(1);\n    city = city.toUpper();\n\n    ui->tzLabel->setText(city);\n\n    this->setMouseTracking(true);\n\n    updateClock();\n}\n\nWorldClock::~WorldClock() {\n    delete d;\n    delete ui;\n}\n\nvoid WorldClock::updateClock() {\n    QString text;\n\n    QDateTime date = QDateTime::currentDateTimeUtc();\n    date = date.addSecs(d->tz.offsetFromUtc(date));\n    text = DesktopTimeDate::timeString(date, DesktopTimeDate::Time);\n\n    int dayDifference = QDateTime::currentDateTime().daysTo(date);\n    if (dayDifference < 0) {\n        text.append(QStringLiteral(\"-%1\").arg(dayDifference * -1));\n    } else if (dayDifference > 0) {\n        text.append(QStringLiteral(\"+%1\").arg(dayDifference));\n    }\n\n    ui->clockLabel->setText(text);\n\n}\n\n\nvoid WorldClock::mousePressEvent(QMouseEvent* event) {\n    d->mouseDown = true;\n    this->update();\n}\n\nvoid WorldClock::mouseReleaseEvent(QMouseEvent* event) {\n    d->mouseDown = false;\n    if (this->underMouse()) {\n        StateManager::statusCenterManager()->hide();\n        QProcess::startDetached(\"the24\", {});\n    }\n    this->update();\n}\n\nvoid WorldClock::enterEvent(QEvent* event) {\n    this->update();\n}\n\nvoid WorldClock::leaveEvent(QEvent* event) {\n    this->update();\n}\n\nvoid WorldClock::paintEvent(QPaintEvent* event) {\n    QPainter painter(this);\n    painter.setPen(Qt::transparent);\n    painter.setBrush(Qt::transparent);\n    if (d->mouseDown) {\n        painter.setBrush(QColor(0, 0, 0, 100));\n    } else if (this->underMouse()) {\n        painter.setBrush(QColor(255, 255, 255, 100));\n    }\n    painter.drawRect(0, 0, this->width(), this->height());\n}\n"
  },
  {
    "path": "plugins/OverviewPlugin/OverviewPane/worldclock.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef WORLDCLOCK_H\n#define WORLDCLOCK_H\n\n#include <QWidget>\n#include <QTimeZone>\n\nnamespace Ui {\n    class WorldClock;\n}\n\nstruct WorldClockPrivate;\nclass WorldClock : public QWidget {\n        Q_OBJECT\n\n    public:\n        explicit WorldClock(QTimeZone tz, QWidget* parent = nullptr);\n        ~WorldClock();\n\n        void updateClock();\n\n    private:\n        Ui::WorldClock* ui;\n        WorldClockPrivate* d;\n\n\n        // QWidget interface\n    protected:\n        void mousePressEvent(QMouseEvent* event);\n        void mouseReleaseEvent(QMouseEvent* event);\n        void enterEvent(QEvent* event);\n        void leaveEvent(QEvent* event);\n        void paintEvent(QPaintEvent* event);\n};\n\n#endif // WORLDCLOCK_H\n"
  },
  {
    "path": "plugins/OverviewPlugin/OverviewPane/worldclock.ui",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ui version=\"4.0\">\n <class>WorldClock</class>\n <widget class=\"QWidget\" name=\"WorldClock\">\n  <property name=\"geometry\">\n   <rect>\n    <x>0</x>\n    <y>0</y>\n    <width>186</width>\n    <height>58</height>\n   </rect>\n  </property>\n  <property name=\"windowTitle\">\n   <string notr=\"true\">Form</string>\n  </property>\n  <layout class=\"QVBoxLayout\" name=\"verticalLayout\">\n   <property name=\"spacing\">\n    <number>3</number>\n   </property>\n   <property name=\"topMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"bottomMargin\">\n    <number>0</number>\n   </property>\n   <item>\n    <widget class=\"QLabel\" name=\"tzLabel\">\n     <property name=\"font\">\n      <font>\n       <weight>75</weight>\n       <bold>true</bold>\n      </font>\n     </property>\n     <property name=\"text\">\n      <string notr=\"true\">TextLabel</string>\n     </property>\n     <property name=\"alignment\">\n      <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>\n     </property>\n    </widget>\n   </item>\n   <item>\n    <widget class=\"QLabel\" name=\"clockLabel\">\n     <property name=\"text\">\n      <string notr=\"true\">TextLabel</string>\n     </property>\n     <property name=\"alignment\">\n      <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>\n     </property>\n    </widget>\n   </item>\n  </layout>\n </widget>\n <resources/>\n <connections/>\n</ui>\n"
  },
  {
    "path": "plugins/OverviewPlugin/OverviewPlugin.pro",
    "content": "QT += widgets\n\nTEMPLATE = lib\nCONFIG += c++11\n\n# Include the-libs build tools\ninclude(/usr/share/the-libs/pri/gentranslations.pri)\n\n# The following define makes your compiler emit warnings if you use\n# any Qt feature that has been marked deprecated (the exact warnings\n# depend on your compiler). Please consult the documentation of the\n# deprecated API in order to know how to port your code away from it.\nDEFINES += QT_DEPRECATED_WARNINGS\n\n# You can also make your code fail to compile if it uses deprecated APIs.\n# In order to do so, uncomment the following line.\n# You can also select to disable deprecated APIs only up to a certain version of Qt.\n#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0\n\nSOURCES += \\\n    OverviewPane/overviewpane.cpp \\\n    OverviewPane/worldclock.cpp \\\n    clockchunk.cpp \\\n    plugin.cpp\n\nHEADERS += \\\n    OverviewPane/overviewpane.h \\\n    OverviewPane/worldclock.h \\\n    clockchunk.h \\\n    plugin.h\n\nunix {\n    translations.files = translations/*.qm\n    translations.path = /usr/share/thedesk/OverviewPlugin/translations\n\n    defaults.files = defaults.conf\n    defaults.path = /etc/theSuite/theDesk/OverviewPlugin/\n\n    INSTALLS += translations defaults\n\n    INSTALLS += translations\n}\n\ninclude(../plugins.pri)\n\nDISTFILES += \\\n    Plugin.json \\\n    defaults.conf\n\nFORMS += \\\n    OverviewPane/overviewpane.ui \\\n    OverviewPane/worldclock.ui \\\n    clockchunk.ui\n"
  },
  {
    "path": "plugins/OverviewPlugin/Plugin.json",
    "content": "{\n    \"name\": \"theDesk Overview\",\n    \"icon\": \"preferences-desktop-overview\",\n    \"uuid\": \"2ad5c596-3633-45fd-9f3a-89ae88bdd60c\",\n    \"vi\": {\n        \"name\": \"Tổng Quan theDesk\"\n    }\n}\n"
  },
  {
    "path": "plugins/OverviewPlugin/clockchunk.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"clockchunk.h\"\n#include \"ui_clockchunk.h\"\n\n#include <statemanager.h>\n#include <barmanager.h>\n#include <statuscentermanager.h>\n#include <TimeDate/desktoptimedate.h>\n\nClockChunk::ClockChunk() :\n    Chunk(),\n    ui(new Ui::ClockChunk) {\n    ui->setupUi(this);\n\n    DesktopTimeDate::makeTimeLabel(ui->time, DesktopTimeDate::Time);\n    DesktopTimeDate::makeTimeLabel(ui->ampmLabel, DesktopTimeDate::AmPm);\n    DesktopTimeDate::makeTimeLabel(ui->date, DesktopTimeDate::StandardDate);\n\n    connect(StateManager::barManager(), &BarManager::barHeightTransitioning, this, [ = ](qreal percentage) {\n        qreal pointSize = (15 - this->font().pointSizeF()) * percentage + this->font().pointSizeF();\n        QFont font = this->font();\n        font.setBold(true);\n        font.setPointSizeF(pointSize);\n\n        ui->time->setFont(font);\n        ui->ampmLabel->setFont(font);\n\n        int padding = 3 + 6 * percentage;\n        this->layout()->setContentsMargins(0, padding, 0, padding);\n\n        if (qFuzzyCompare(percentage, 1)) {\n            ui->date->setFixedWidth(QWIDGETSIZE_MAX);\n        } else {\n            ui->date->setFixedWidth(ui->date->sizeHint().width() * percentage);\n        }\n    });\n\n    connect(this, &ClockChunk::clicked, this, [ = ] {\n        StateManager::instance()->statusCenterManager()->show();\n    });\n}\n\nClockChunk::~ClockChunk() {\n    delete ui;\n}\n\n\nQString ClockChunk::name() {\n    return \"OverviewClock\";\n}\n\nint ClockChunk::expandedHeight() {\n    QFontMetrics metrics(QFont(this->font().family(), 15));\n    return metrics.height() + 18;\n}\n\nint ClockChunk::statusBarHeight() {\n    return this->fontMetrics().height() + 6;\n}\n"
  },
  {
    "path": "plugins/OverviewPlugin/clockchunk.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef CLOCKCHUNK_H\n#define CLOCKCHUNK_H\n\n#include <chunk.h>\n\nnamespace Ui {\n    class ClockChunk;\n}\n\nclass ClockChunk : public Chunk {\n        Q_OBJECT\n\n    public:\n        explicit ClockChunk();\n        ~ClockChunk();\n\n    private:\n        Ui::ClockChunk* ui;\n\n        // Chunk interface\n    public:\n        QString name();\n        int expandedHeight();\n        int statusBarHeight();\n};\n\n#endif // CLOCKCHUNK_H\n"
  },
  {
    "path": "plugins/OverviewPlugin/clockchunk.ui",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ui version=\"4.0\">\n <class>ClockChunk</class>\n <widget class=\"QWidget\" name=\"ClockChunk\">\n  <property name=\"geometry\">\n   <rect>\n    <x>0</x>\n    <y>0</y>\n    <width>261</width>\n    <height>44</height>\n   </rect>\n  </property>\n  <property name=\"windowTitle\">\n   <string notr=\"true\">Form</string>\n  </property>\n  <layout class=\"QHBoxLayout\" name=\"horizontalLayout\">\n   <property name=\"leftMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"rightMargin\">\n    <number>0</number>\n   </property>\n   <item>\n    <layout class=\"QHBoxLayout\" name=\"horizontalLayout_10\">\n     <property name=\"spacing\">\n      <number>0</number>\n     </property>\n     <item>\n      <widget class=\"QLabel\" name=\"time\">\n       <property name=\"sizePolicy\">\n        <sizepolicy hsizetype=\"Preferred\" vsizetype=\"Preferred\">\n         <horstretch>0</horstretch>\n         <verstretch>0</verstretch>\n        </sizepolicy>\n       </property>\n       <property name=\"font\">\n        <font>\n         <pointsize>15</pointsize>\n         <weight>75</weight>\n         <bold>true</bold>\n        </font>\n       </property>\n       <property name=\"text\">\n        <string notr=\"true\">&amp;16:20:00</string>\n       </property>\n      </widget>\n     </item>\n     <item>\n      <widget class=\"QLabel\" name=\"ampmLabel\">\n       <property name=\"sizePolicy\">\n        <sizepolicy hsizetype=\"Preferred\" vsizetype=\"Preferred\">\n         <horstretch>0</horstretch>\n         <verstretch>0</verstretch>\n        </sizepolicy>\n       </property>\n       <property name=\"font\">\n        <font>\n         <pointsize>15</pointsize>\n         <weight>75</weight>\n         <bold>true</bold>\n        </font>\n       </property>\n       <property name=\"text\">\n        <string notr=\"true\">a</string>\n       </property>\n      </widget>\n     </item>\n    </layout>\n   </item>\n   <item>\n    <widget class=\"QLabel\" name=\"date\">\n     <property name=\"sizePolicy\">\n      <sizepolicy hsizetype=\"Preferred\" vsizetype=\"Preferred\">\n       <horstretch>0</horstretch>\n       <verstretch>0</verstretch>\n      </sizepolicy>\n     </property>\n     <property name=\"font\">\n      <font>\n       <pointsize>10</pointsize>\n      </font>\n     </property>\n     <property name=\"text\">\n      <string notr=\"true\">Sunday 1st &amp;Jan 1111</string>\n     </property>\n    </widget>\n   </item>\n  </layout>\n </widget>\n <resources/>\n <connections/>\n</ui>\n"
  },
  {
    "path": "plugins/OverviewPlugin/plugin.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"plugin.h\"\n\n#include \"OverviewPane/overviewpane.h\"\n#include <QApplication>\n#include <QDebug>\n#include <QDir>\n#include <QIcon>\n#include <barmanager.h>\n#include <clockchunk.h>\n#include <icontextchunk.h>\n#include <localemanager.h>\n#include <statemanager.h>\n#include <statuscentermanager.h>\n#include <tapplication.h>\n#include <tsettings.h>\n\nstruct PluginPrivate {\n        ClockChunk* chunk;\n        OverviewPane* overviewPane;\n};\n\nPlugin::Plugin() {\n    d = new PluginPrivate();\n}\n\nPlugin::~Plugin() {\n    delete d;\n}\n\nvoid Plugin::activate() {\n    tApplication::addPluginTranslator(CNTP_TARGET_NAME);\n\n    tSettings::registerDefaults(\"theSuite\", \"the24\", \"/usr/share/defaults/the24.conf\");\n\n    d->chunk = new ClockChunk();\n    StateManager::barManager()->addChunk(d->chunk);\n\n    d->overviewPane = new OverviewPane();\n    StateManager::statusCenterManager()->addPane(d->overviewPane);\n}\n\nvoid Plugin::deactivate() {\n    StateManager::statusCenterManager()->removePane(d->overviewPane);\n    StateManager::barManager()->removeChunk(d->chunk);\n\n    d->overviewPane->deleteLater();\n    d->chunk->deleteLater();\n    tApplication::removePluginTranslator(CNTP_TARGET_NAME);\n}\n"
  },
  {
    "path": "plugins/OverviewPlugin/plugin.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef PLUGIN_H\n#define PLUGIN_H\n\n#include \"plugins/plugininterface.h\"\n\nstruct PluginPrivate;\nclass Plugin : public QObject,\n               public PluginInterface {\n        Q_OBJECT\n        Q_PLUGIN_METADATA(IID PluginInterface_iid FILE \"Plugin.json\")\n        Q_INTERFACES(PluginInterface)\n\n    public:\n        Plugin();\n        ~Plugin();\n\n    private:\n        PluginPrivate* d;\n\n        // PluginInterface interface\n    public:\n        void activate();\n        void deactivate();\n};\n\n#endif // PLUGIN_H\n"
  },
  {
    "path": "plugins/OverviewPlugin/translations/ar_SA.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"ar_SA\" sourcelanguage=\"en_US\">\n<context>\n    <name>OverviewPane</name>\n    <message>\n        <location filename=\"../OverviewPane/overviewpane.ui\" line=\"102\"/>\n        <source>Hope you&apos;re having a great day. Here&apos;s what we&apos;ve got for you:</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"109\"/>\n        <source>Hi %1!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"111\"/>\n        <source>Good morning, %1!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"113\"/>\n        <source>Good afternoon, %1!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"115\"/>\n        <source>Good evening, %1!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"208\"/>\n        <source>Daylight Savings Time is ending on %1. The clock will automatically shift backwards by %n hour(s).</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n        </translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"210\"/>\n        <source>Daylight Savings Time is starting on %1. The clock will automatically shift forwards by %n hour(s).</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n        </translation>\n    </message>\n    <message>\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"342\"/>\n        <source>Overview</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/OverviewPlugin/translations/au_AU.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"au_AU\" sourcelanguage=\"en_US\">\n<context>\n    <name>OverviewPane</name>\n    <message>\n        <location filename=\"../OverviewPane/overviewpane.ui\" line=\"102\"/>\n        <source>Hope you&apos;re having a great day. Here&apos;s what we&apos;ve got for you:</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"109\"/>\n        <source>Hi %1!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"111\"/>\n        <source>Good morning, %1!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"113\"/>\n        <source>Good afternoon, %1!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"115\"/>\n        <source>Good evening, %1!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"208\"/>\n        <source>Daylight Savings Time is ending on %1. The clock will automatically shift backwards by %n hour(s).</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n        </translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"210\"/>\n        <source>Daylight Savings Time is starting on %1. The clock will automatically shift forwards by %n hour(s).</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n        </translation>\n    </message>\n    <message>\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"342\"/>\n        <source>Overview</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/OverviewPlugin/translations/cy.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"cy\" sourcelanguage=\"en_US\">\n<context>\n    <name>OverviewPane</name>\n    <message>\n        <location filename=\"../OverviewPane/overviewpane.ui\" line=\"102\"/>\n        <source>Hope you&apos;re having a great day. Here&apos;s what we&apos;ve got for you:</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"109\"/>\n        <source>Hi %1!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"111\"/>\n        <source>Good morning, %1!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"113\"/>\n        <source>Good afternoon, %1!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"115\"/>\n        <source>Good evening, %1!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"208\"/>\n        <source>Daylight Savings Time is ending on %1. The clock will automatically shift backwards by %n hour(s).</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n        </translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"210\"/>\n        <source>Daylight Savings Time is starting on %1. The clock will automatically shift forwards by %n hour(s).</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n        </translation>\n    </message>\n    <message>\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"342\"/>\n        <source>Overview</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/OverviewPlugin/translations/da.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"da\" sourcelanguage=\"en_US\">\n<context>\n    <name>OverviewPane</name>\n    <message>\n        <location filename=\"../OverviewPane/overviewpane.ui\" line=\"102\"/>\n        <source>Hope you&apos;re having a great day. Here&apos;s what we&apos;ve got for you:</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"109\"/>\n        <source>Hi %1!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"111\"/>\n        <source>Good morning, %1!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"113\"/>\n        <source>Good afternoon, %1!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"115\"/>\n        <source>Good evening, %1!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"208\"/>\n        <source>Daylight Savings Time is ending on %1. The clock will automatically shift backwards by %n hour(s).</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n        </translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"210\"/>\n        <source>Daylight Savings Time is starting on %1. The clock will automatically shift forwards by %n hour(s).</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n        </translation>\n    </message>\n    <message>\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"342\"/>\n        <source>Overview</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/OverviewPlugin/translations/de.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"de\" sourcelanguage=\"en_US\">\n<context>\n    <name>OverviewPane</name>\n    <message>\n        <location filename=\"../OverviewPane/overviewpane.ui\" line=\"102\"/>\n        <source>Hope you&apos;re having a great day. Here&apos;s what we&apos;ve got for you:</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"109\"/>\n        <source>Hi %1!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"111\"/>\n        <source>Good morning, %1!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"113\"/>\n        <source>Good afternoon, %1!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"115\"/>\n        <source>Good evening, %1!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"208\"/>\n        <source>Daylight Savings Time is ending on %1. The clock will automatically shift backwards by %n hour(s).</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n        </translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"210\"/>\n        <source>Daylight Savings Time is starting on %1. The clock will automatically shift forwards by %n hour(s).</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n        </translation>\n    </message>\n    <message>\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"342\"/>\n        <source>Overview</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/OverviewPlugin/translations/en_GB.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"en_GB\" sourcelanguage=\"en_US\">\n<context>\n    <name>OverviewPane</name>\n    <message>\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"109\"/>\n        <source>Hi %1!</source>\n        <translation>Hi %1!</translation>\n    </message>\n    <message>\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"111\"/>\n        <source>Good morning, %1!</source>\n        <translation>Good morning, %1!</translation>\n    </message>\n    <message>\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"113\"/>\n        <source>Good afternoon, %1!</source>\n        <translation>Good afternoon, %1!</translation>\n    </message>\n    <message>\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"115\"/>\n        <source>Good evening, %1!</source>\n        <translation>Good evening, %1!</translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"208\"/>\n        <source>Daylight Savings Time is ending on %1. The clock will automatically shift backwards by %n hour(s).</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n        </translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"210\"/>\n        <source>Daylight Savings Time is starting on %1. The clock will automatically shift forwards by %n hour(s).</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n        </translation>\n    </message>\n    <message>\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"342\"/>\n        <source>Overview</source>\n        <translation>Overview</translation>\n    </message>\n    <message>\n        <location filename=\"../OverviewPane/overviewpane.ui\" line=\"102\"/>\n        <source>Hope you&apos;re having a great day. Here&apos;s what we&apos;ve got for you:</source>\n        <translation>Hope you&apos;re having a great day. Here&apos;s what we&apos;ve got for you:</translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/OverviewPlugin/translations/en_US.qm",
    "content": "<d\u0018!\u001c`"
  },
  {
    "path": "plugins/OverviewPlugin/translations/en_US.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" sourcelanguage=\"en_US\">\n<context>\n    <name>OverviewPane</name>\n    <message>\n        <location filename=\"../OverviewPane/overviewpane.ui\" line=\"102\"/>\n        <source>Hope you&apos;re having a great day. Here&apos;s what we&apos;ve got for you:</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"109\"/>\n        <source>Hi %1!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"111\"/>\n        <source>Good morning, %1!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"113\"/>\n        <source>Good afternoon, %1!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"115\"/>\n        <source>Good evening, %1!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"208\"/>\n        <source>Daylight Savings Time is ending on %1. The clock will automatically shift backwards by %n hour(s).</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n        </translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"210\"/>\n        <source>Daylight Savings Time is starting on %1. The clock will automatically shift forwards by %n hour(s).</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n        </translation>\n    </message>\n    <message>\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"342\"/>\n        <source>Overview</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/OverviewPlugin/translations/es.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"es\" sourcelanguage=\"en_US\">\n<context>\n    <name>OverviewPane</name>\n    <message>\n        <location filename=\"../OverviewPane/overviewpane.ui\" line=\"102\"/>\n        <source>Hope you&apos;re having a great day. Here&apos;s what we&apos;ve got for you:</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"109\"/>\n        <source>Hi %1!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"111\"/>\n        <source>Good morning, %1!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"113\"/>\n        <source>Good afternoon, %1!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"115\"/>\n        <source>Good evening, %1!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"208\"/>\n        <source>Daylight Savings Time is ending on %1. The clock will automatically shift backwards by %n hour(s).</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n        </translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"210\"/>\n        <source>Daylight Savings Time is starting on %1. The clock will automatically shift forwards by %n hour(s).</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n        </translation>\n    </message>\n    <message>\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"342\"/>\n        <source>Overview</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/OverviewPlugin/translations/es_VE.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"es_VE\" sourcelanguage=\"en_US\">\n<context>\n    <name>OverviewPane</name>\n    <message>\n        <location filename=\"../OverviewPane/overviewpane.ui\" line=\"102\"/>\n        <source>Hope you&apos;re having a great day. Here&apos;s what we&apos;ve got for you:</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"109\"/>\n        <source>Hi %1!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"111\"/>\n        <source>Good morning, %1!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"113\"/>\n        <source>Good afternoon, %1!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"115\"/>\n        <source>Good evening, %1!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"208\"/>\n        <source>Daylight Savings Time is ending on %1. The clock will automatically shift backwards by %n hour(s).</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n        </translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"210\"/>\n        <source>Daylight Savings Time is starting on %1. The clock will automatically shift forwards by %n hour(s).</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n        </translation>\n    </message>\n    <message>\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"342\"/>\n        <source>Overview</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/OverviewPlugin/translations/id.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"id\" sourcelanguage=\"en_US\">\n<context>\n    <name>OverviewPane</name>\n    <message>\n        <location filename=\"../OverviewPane/overviewpane.ui\" line=\"102\"/>\n        <source>Hope you&apos;re having a great day. Here&apos;s what we&apos;ve got for you:</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"109\"/>\n        <source>Hi %1!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"111\"/>\n        <source>Good morning, %1!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"113\"/>\n        <source>Good afternoon, %1!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"115\"/>\n        <source>Good evening, %1!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"208\"/>\n        <source>Daylight Savings Time is ending on %1. The clock will automatically shift backwards by %n hour(s).</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n        </translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"210\"/>\n        <source>Daylight Savings Time is starting on %1. The clock will automatically shift forwards by %n hour(s).</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n        </translation>\n    </message>\n    <message>\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"342\"/>\n        <source>Overview</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/OverviewPlugin/translations/nl.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"nl\" sourcelanguage=\"en_US\">\n<context>\n    <name>OverviewPane</name>\n    <message>\n        <location filename=\"../OverviewPane/overviewpane.ui\" line=\"102\"/>\n        <source>Hope you&apos;re having a great day. Here&apos;s what we&apos;ve got for you:</source>\n        <translation>Hopelijk heb je een geweldige dag. Dit hebben we voor je:</translation>\n    </message>\n    <message>\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"109\"/>\n        <source>Hi %1!</source>\n        <translation>Hoi %1!</translation>\n    </message>\n    <message>\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"111\"/>\n        <source>Good morning, %1!</source>\n        <translation>Goedemorgen, %1!</translation>\n    </message>\n    <message>\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"113\"/>\n        <source>Good afternoon, %1!</source>\n        <translation>Goedemiddag, %1!</translation>\n    </message>\n    <message>\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"115\"/>\n        <source>Good evening, %1!</source>\n        <translation>Goedenavond, %1!</translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"208\"/>\n        <source>Daylight Savings Time is ending on %1. The clock will automatically shift backwards by %n hour(s).</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n        </translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"210\"/>\n        <source>Daylight Savings Time is starting on %1. The clock will automatically shift forwards by %n hour(s).</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n        </translation>\n    </message>\n    <message>\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"342\"/>\n        <source>Overview</source>\n        <translation>Overzicht</translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/OverviewPlugin/translations/pt_BR.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"pt_BR\" sourcelanguage=\"en_US\">\n<context>\n    <name>OverviewPane</name>\n    <message>\n        <location filename=\"../OverviewPane/overviewpane.ui\" line=\"102\"/>\n        <source>Hope you&apos;re having a great day. Here&apos;s what we&apos;ve got for you:</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"109\"/>\n        <source>Hi %1!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"111\"/>\n        <source>Good morning, %1!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"113\"/>\n        <source>Good afternoon, %1!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"115\"/>\n        <source>Good evening, %1!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"208\"/>\n        <source>Daylight Savings Time is ending on %1. The clock will automatically shift backwards by %n hour(s).</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n        </translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"210\"/>\n        <source>Daylight Savings Time is starting on %1. The clock will automatically shift forwards by %n hour(s).</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n        </translation>\n    </message>\n    <message>\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"342\"/>\n        <source>Overview</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/OverviewPlugin/translations/ro_RO.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"ro_RO\" sourcelanguage=\"en_US\">\n<context>\n    <name>OverviewPane</name>\n    <message>\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"109\"/>\n        <source>Hi %1!</source>\n        <translation>Salut %1!</translation>\n    </message>\n    <message>\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"111\"/>\n        <source>Good morning, %1!</source>\n        <translation>Bună dimineața, %1!</translation>\n    </message>\n    <message>\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"113\"/>\n        <source>Good afternoon, %1!</source>\n        <translation>Bună ziua, %1!</translation>\n    </message>\n    <message>\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"115\"/>\n        <source>Good evening, %1!</source>\n        <translation>Bună seara, %1!</translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"208\"/>\n        <source>Daylight Savings Time is ending on %1. The clock will automatically shift backwards by %n hour(s).</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n        </translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"210\"/>\n        <source>Daylight Savings Time is starting on %1. The clock will automatically shift forwards by %n hour(s).</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n        </translation>\n    </message>\n    <message numerus=\"yes\">\n        <source>Daylight Savings Time is ending on %2. The clock will automatically shift backwards by %n hour(s).</source>\n        <translation type=\"vanished\">\n            <numerusform>Ora de vară se va încheia pe data de %2. Ceasul va fi dat cu o oră în urmă.</numerusform>\n            <numerusform>Ora de vară se va încheia pe data de %2. Ceasul va fi dat cu %n ore în urmă.</numerusform>\n            <numerusform>Ora de vară se va încheia pe data de %2. Ceasul va fi dat cu %n ore în urmă.</numerusform>\n        </translation>\n    </message>\n    <message numerus=\"yes\">\n        <source>Daylight Savings Time is starting on %2. The clock will automatically shift forwards by %n hour(s).</source>\n        <translation type=\"vanished\">\n            <numerusform>Ora de vară va începe pe data de %2. Ceasul va fi dat cu o oră în față.</numerusform>\n            <numerusform>Ora de vară va începe pe data de %2. Ceasul va fi dat cu %n ore în față.</numerusform>\n            <numerusform>Ora de vară va începe pe data de %2. Ceasul va fi dat cu %n ore în față.</numerusform>\n        </translation>\n    </message>\n    <message>\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"342\"/>\n        <source>Overview</source>\n        <translation>Privire de ansamblu</translation>\n    </message>\n    <message>\n        <location filename=\"../OverviewPane/overviewpane.ui\" line=\"102\"/>\n        <source>Hope you&apos;re having a great day. Here&apos;s what we&apos;ve got for you:</source>\n        <translation>Sperăm că vă simțiți minunat. Uitați ce avem pentru dumneavoastră:</translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/OverviewPlugin/translations/sk_SK.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"sk_SK\" sourcelanguage=\"en_US\">\n<context>\n    <name>OverviewPane</name>\n    <message>\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"109\"/>\n        <source>Hi %1!</source>\n        <translation>Ahoj% 1!</translation>\n    </message>\n    <message>\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"111\"/>\n        <source>Good morning, %1!</source>\n        <translation>Dobré ráno,% 1!</translation>\n    </message>\n    <message>\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"113\"/>\n        <source>Good afternoon, %1!</source>\n        <translation>Dobré popoludnie,% 1!</translation>\n    </message>\n    <message>\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"115\"/>\n        <source>Good evening, %1!</source>\n        <translation>Dobrý večer,% 1!</translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"208\"/>\n        <source>Daylight Savings Time is ending on %1. The clock will automatically shift backwards by %n hour(s).</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n        </translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"210\"/>\n        <source>Daylight Savings Time is starting on %1. The clock will automatically shift forwards by %n hour(s).</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n        </translation>\n    </message>\n    <message>\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"342\"/>\n        <source>Overview</source>\n        <translation>Prehľad</translation>\n    </message>\n    <message>\n        <location filename=\"../OverviewPane/overviewpane.ui\" line=\"102\"/>\n        <source>Hope you&apos;re having a great day. Here&apos;s what we&apos;ve got for you:</source>\n        <translation>Dúfam, že máš skvelý deň. Tu je to, čo pre vás máme:</translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/OverviewPlugin/translations/sv.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"sv\" sourcelanguage=\"en_US\">\n<context>\n    <name>OverviewPane</name>\n    <message>\n        <location filename=\"../OverviewPane/overviewpane.ui\" line=\"102\"/>\n        <source>Hope you&apos;re having a great day. Here&apos;s what we&apos;ve got for you:</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"109\"/>\n        <source>Hi %1!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"111\"/>\n        <source>Good morning, %1!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"113\"/>\n        <source>Good afternoon, %1!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"115\"/>\n        <source>Good evening, %1!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"208\"/>\n        <source>Daylight Savings Time is ending on %1. The clock will automatically shift backwards by %n hour(s).</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n        </translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"210\"/>\n        <source>Daylight Savings Time is starting on %1. The clock will automatically shift forwards by %n hour(s).</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n        </translation>\n    </message>\n    <message>\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"342\"/>\n        <source>Overview</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/OverviewPlugin/translations/tr_TR.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"tr_TR\" sourcelanguage=\"en_US\">\n<context>\n    <name>OverviewPane</name>\n    <message>\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"109\"/>\n        <source>Hi %1!</source>\n        <translation>Merhaba %1!</translation>\n    </message>\n    <message>\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"111\"/>\n        <source>Good morning, %1!</source>\n        <translation>Günaydın %1!</translation>\n    </message>\n    <message>\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"113\"/>\n        <source>Good afternoon, %1!</source>\n        <translation>İyi günler %1!</translation>\n    </message>\n    <message>\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"115\"/>\n        <source>Good evening, %1!</source>\n        <translation>İyi akşamlar %1!</translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"208\"/>\n        <source>Daylight Savings Time is ending on %1. The clock will automatically shift backwards by %n hour(s).</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n        </translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"210\"/>\n        <source>Daylight Savings Time is starting on %1. The clock will automatically shift forwards by %n hour(s).</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n        </translation>\n    </message>\n    <message>\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"342\"/>\n        <source>Overview</source>\n        <translation>Genel Bakış</translation>\n    </message>\n    <message>\n        <location filename=\"../OverviewPane/overviewpane.ui\" line=\"102\"/>\n        <source>Hope you&apos;re having a great day. Here&apos;s what we&apos;ve got for you:</source>\n        <translation>Umarım harika bir gün geçiriyorsundur. İşte sizin için hazırladıklarımız:</translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/OverviewPlugin/translations/vi_VN.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"vi_VN\">\n<context>\n    <name>OverviewPane</name>\n    <message>\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"109\"/>\n        <source>Hi %1!</source>\n        <translation>Chào %1!</translation>\n    </message>\n    <message>\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"111\"/>\n        <source>Good morning, %1!</source>\n        <translation>Chào buổi sáng, %1!</translation>\n    </message>\n    <message>\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"113\"/>\n        <source>Good afternoon, %1!</source>\n        <translation>Chào buổi chiều, %1!</translation>\n    </message>\n    <message>\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"115\"/>\n        <source>Good evening, %1!</source>\n        <translation>Chào buổi tối, %1!</translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"208\"/>\n        <source>Daylight Savings Time is ending on %1. The clock will automatically shift backwards by %n hour(s).</source>\n        <translation>\n            <numerusform>Giờ mùa hè sẽ kết thúc ngày %1. Đồng hồ sẽ tự động quay ngược %n giờ.</numerusform>\n        </translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"210\"/>\n        <source>Daylight Savings Time is starting on %1. The clock will automatically shift forwards by %n hour(s).</source>\n        <translation>\n            <numerusform>Giờ mùa hè sẽ bắt đầu ngày %1. Đồng hồ sẽ tự động tua đi %n giờ.</numerusform>\n        </translation>\n    </message>\n    <message numerus=\"yes\">\n        <source>Daylight Savings Time is ending on %2. The clock will automatically shift backwards by %n hour(s).</source>\n        <translation type=\"vanished\">\n            <numerusform>Giờ mùa hè sẽ kết thúc ngày %2. Đồng hồ sẽ tự động quay ngược %n giờ.</numerusform>\n        </translation>\n    </message>\n    <message numerus=\"yes\">\n        <source>Daylight Savings Time is starting on %2. The clock will automatically shift forwards by %n hour(s).</source>\n        <translation type=\"vanished\">\n            <numerusform>Giờ mùa hè sẽ bắt đầu ngày %2. Đồng hồ sẽ tự động tua đi %n giờ.</numerusform>\n        </translation>\n    </message>\n    <message>\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"342\"/>\n        <source>Overview</source>\n        <translation>Tổng quan</translation>\n    </message>\n    <message>\n        <location filename=\"../OverviewPane/overviewpane.ui\" line=\"102\"/>\n        <source>Hope you&apos;re having a great day. Here&apos;s what we&apos;ve got for you:</source>\n        <translation>Chúng tôi hy vọng ngày nay tuyệt vời. Chúng tôi có điều này cho bạn:</translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/OverviewPlugin/translations/zh_CN.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"zh_CN\" sourcelanguage=\"en_US\">\n<context>\n    <name>OverviewPane</name>\n    <message>\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"109\"/>\n        <source>Hi %1!</source>\n        <translation>你好 %1!</translation>\n    </message>\n    <message>\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"111\"/>\n        <source>Good morning, %1!</source>\n        <translation>早上好， %1!</translation>\n    </message>\n    <message>\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"113\"/>\n        <source>Good afternoon, %1!</source>\n        <translation>下午好， %1!</translation>\n    </message>\n    <message>\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"115\"/>\n        <source>Good evening, %1!</source>\n        <translation>晚上好， %1!</translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"208\"/>\n        <source>Daylight Savings Time is ending on %1. The clock will automatically shift backwards by %n hour(s).</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n        </translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"210\"/>\n        <source>Daylight Savings Time is starting on %1. The clock will automatically shift forwards by %n hour(s).</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n        </translation>\n    </message>\n    <message>\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"342\"/>\n        <source>Overview</source>\n        <translation>总览</translation>\n    </message>\n    <message>\n        <location filename=\"../OverviewPane/overviewpane.ui\" line=\"102\"/>\n        <source>Hope you&apos;re having a great day. Here&apos;s what we&apos;ve got for you:</source>\n        <translation>希望你有个很棒的一天。 这里是我为你收集的东西：</translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/OverviewPlugin/translations/zu_ZA.qm",
    "content": "<d\u0018!\u001c`"
  },
  {
    "path": "plugins/OverviewPlugin/translations/zu_ZA.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" sourcelanguage=\"en_US\">\n<context>\n    <name>OverviewPane</name>\n    <message>\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"109\"/>\n        <source>Hi %1!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"111\"/>\n        <source>Good morning, %1!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"113\"/>\n        <source>Good afternoon, %1!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"115\"/>\n        <source>Good evening, %1!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"208\"/>\n        <source>Daylight Savings Time is ending on %1. The clock will automatically shift backwards by %n hour(s).</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n        </translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"210\"/>\n        <source>Daylight Savings Time is starting on %1. The clock will automatically shift forwards by %n hour(s).</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n        </translation>\n    </message>\n    <message>\n        <location filename=\"../OverviewPane/overviewpane.cpp\" line=\"342\"/>\n        <source>Overview</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../OverviewPane/overviewpane.ui\" line=\"102\"/>\n        <source>Hope you&apos;re having a great day. Here&apos;s what we&apos;ve got for you:</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/PowerPlugin/CMakeLists.txt",
    "content": "cmake_minimum_required(VERSION 3.24.0)\n\nfind_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets)\nfind_package(libcontemporary)\n\nset(SOURCES\n    eventhandler.cpp\n    plugin.cpp\n    settings/powersettings.cpp\n    sleepmonitor.cpp\n\n    settings/powersettings.ui\n)\n\nset(HEADERS\n    eventhandler.h\n    plugin.h\n    settings/powersettings.h\n    sleepmonitor.h\n)\n\nset(PLUGIN_NAME power)\nadd_plugin_td(${PLUGIN_NAME})\ntarget_sources(plugin-${PLUGIN_NAME} PRIVATE ${SOURCES} ${HEADERS})\ncntp_defaults_file(${PLUGIN_NAME}\n    DEFAULTS_FILE thedesk-power.conf)\n\ntarget_link_libraries(plugin-${PLUGIN_NAME} Qt::Widgets libcontemporary libthedesk)\n"
  },
  {
    "path": "plugins/PowerPlugin/Plugin.json",
    "content": "{\n    \"name\": \"Power Management\",\n    \"icon\": \"preferences-system-power\",\n    \"uuid\": \"859a8d5e-21c3-4de6-9a77-8ff4131bdfe6\",\n    \"vi\": {\n        \"name\": \"Quản lý nguồn điện\"\n    }\n}\n"
  },
  {
    "path": "plugins/PowerPlugin/PowerPlugin.pro",
    "content": "QT += widgets\n\nTEMPLATE = lib\nDEFINES += POWERPLUGIN_LIBRARY\n\n# Include the-libs build tools\ninclude(/usr/share/the-libs/pri/gentranslations.pri)\n\nCONFIG += c++11\n\n# The following define makes your compiler emit warnings if you use\n# any Qt feature that has been marked deprecated (the exact warnings\n# depend on your compiler). Please consult the documentation of the\n# deprecated API in order to know how to port your code away from it.\nDEFINES += QT_DEPRECATED_WARNINGS\n\n# You can also make your code fail to compile if it uses deprecated APIs.\n# In order to do so, uncomment the following line.\n# You can also select to disable deprecated APIs only up to a certain version of Qt.\n#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0\n\nunix {\n    translations.files = translations/*.qm\n    translations.path = /usr/share/thedesk/PowerPlugin/translations\n\n    defaults.files = defaults.conf\n    defaults.path = /etc/theSuite/theDesk/PowerPlugin/\n\n    INSTALLS += translations defaults\n}\n\ninclude(../plugins.pri)\n\nHEADERS += \\\n    eventhandler.h \\\n    plugin.h \\\n    settings/powersettings.h \\\n    sleepmonitor.h\n\nSOURCES += \\\n    eventhandler.cpp \\\n    plugin.cpp \\\n    settings/powersettings.cpp \\\n    sleepmonitor.cpp\n\nDISTFILES += \\\n    Plugin.json \\\n    defaults.conf\n\nFORMS += \\\n    settings/powersettings.ui\n"
  },
  {
    "path": "plugins/PowerPlugin/eventhandler.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"eventhandler.h\"\n\n#include <QDBusConnection>\n#include <QDBusMessage>\n#include <QDBusPendingCallWatcher>\n#include <QDBusUnixFileDescriptor>\n#include <QDebug>\n#include <QKeySequence>\n\n#include <QTimer>\n\n#include <actionquickwidget.h>\n#include <barmanager.h>\n#include <hudmanager.h>\n#include <icontextchunk.h>\n#include <keygrab.h>\n#include <powermanager.h>\n#include <quickswitch.h>\n#include <statemanager.h>\n#include <statuscentermanager.h>\n\n#include <Wm/desktopwm.h>\n\n#include <UPower/desktopupower.h>\n#include <UPower/desktopupowerdevice.h>\n\n#include <tsettings.h>\n#include <tvariantanimation.h>\n\nstruct EventHandlerPrivate {\n        KeyGrab* powerKey;\n        KeyGrab* ctrlAltDelKey;\n        QDBusUnixFileDescriptor buttonInhibitor;\n\n        QuickSwitch* caffeinateSwitch;\n        IconTextChunk* caffeinateChunk;\n\n        DesktopUPower* upower;\n\n        tSettings settings;\n        quint64 oldIdleTimer = 0;\n\n        bool screenOffActionPerformed = false;\n        bool suspendActionPerformed = false;\n        tVariantAnimation* suspendNotificationAnimation = new tVariantAnimation();\n\n        const static QMap<QString, int> timeoutFactors;\n        const static QMap<QString, int> powerOffActions;\n};\n\nconst QMap<QString, int> EventHandlerPrivate::timeoutFactors = {\n    {\"sec\",   1000  },\n    {\"min\",   60000 },\n    {\"hr\",    360000},\n    {\"never\", 0     }\n};\n\nconst QMap<QString, int> EventHandlerPrivate::powerOffActions = {\n    {\"ask\",       PowerManager::All      },\n    {\"poweroff\",  PowerManager::PowerOff },\n    {\"reboot\",    PowerManager::Reboot   },\n    {\"suspend\",   PowerManager::Suspend  },\n    {\"hibernate\", PowerManager::Hibernate},\n    {\"ignore\",    -1                     }\n};\n\nEventHandler::EventHandler(QObject* parent) :\n    QObject(parent) {\n    d = new EventHandlerPrivate();\n    d->upower = new DesktopUPower();\n\n    QDBusMessage message = QDBusMessage::createMethodCall(\"org.freedesktop.login1\", \"/org/freedesktop/login1\", \"org.freedesktop.login1.Manager\", \"Inhibit\");\n    message.setArguments(QList<QVariant>() << \"handle-power-key:idle\"\n                                           << \"theDesk\"\n                                           << \"theDesk handles hardware power keys and idling\"\n                                           << \"block\");\n    QDBusPendingCallWatcher* watcher = new QDBusPendingCallWatcher(QDBusConnection::systemBus().asyncCall(message));\n    connect(watcher, &QDBusPendingCallWatcher::finished, this, [=] {\n        if (watcher->isError()) {\n            qWarning() << tr(\"Unable to inhibit logind power management\");\n        } else {\n            d->buttonInhibitor = watcher->reply().arguments().first().value<QDBusUnixFileDescriptor>();\n        }\n    });\n\n    d->powerKey = new KeyGrab(QKeySequence(Qt::Key_PowerOff));\n    connect(d->powerKey, &KeyGrab::activated, this, [=] {\n        int action = d->powerOffActions.value(d->settings.value(\"Power/actions.powerbutton\").toString(), -1);\n        if (action == -1) return;          // Ignore\n        if (action == PowerManager::All) { // Ask\n            StateManager::powerManager()->showPowerOffConfirmation();\n        } else {\n            StateManager::powerManager()->performPowerOperation(static_cast<PowerManager::PowerOperation>(action));\n        }\n    });\n    d->ctrlAltDelKey = new KeyGrab(QKeySequence(Qt::ControlModifier | Qt::AltModifier | Qt::Key_Delete));\n    connect(d->ctrlAltDelKey, &KeyGrab::activated, this, [=] {\n        StateManager::powerManager()->showPowerOffConfirmation();\n    });\n\n    d->caffeinateChunk = new IconTextChunk(\"caffeinate\");\n    d->caffeinateChunk->setIcon(QIcon::fromTheme(\"caffeinate\"));\n    d->caffeinateChunk->setText(tr(\"Caffeinated\"));\n\n    d->caffeinateSwitch = new QuickSwitch(\"PowerCaffeinate\");\n    d->caffeinateSwitch->setTitle(tr(\"Caffeinate\"));\n    connect(d->caffeinateSwitch, &QuickSwitch::toggled, this, [this](bool checked) {\n        if (checked && !d->caffeinateChunk->chunkRegistered()) {\n            StateManager::barManager()->addChunk(d->caffeinateChunk);\n        } else if (!checked && d->caffeinateChunk->chunkRegistered()) {\n            StateManager::barManager()->removeChunk(d->caffeinateChunk);\n        }\n    });\n    StateManager::statusCenterManager()->addSwitch(d->caffeinateSwitch);\n\n    ActionQuickWidget* caffeinateChunkQuickWidget = new ActionQuickWidget(d->caffeinateChunk);\n    caffeinateChunkQuickWidget->addAction(QIcon::fromTheme(\"caffeinate\"), tr(\"Decaffeinate\"), [this] {\n        d->caffeinateSwitch->setChecked(false);\n    });\n    d->caffeinateChunk->setQuickWidget(caffeinateChunkQuickWidget);\n\n    QTimer* timer = new QTimer(this);\n    timer->setInterval(1000);\n    connect(timer, &QTimer::timeout, this, &EventHandler::checkIdleTimer);\n    timer->start();\n\n    d->suspendNotificationAnimation = new tVariantAnimation(this);\n    d->suspendNotificationAnimation->setStartValue(1.0);\n    d->suspendNotificationAnimation->setEndValue(0.0);\n    d->suspendNotificationAnimation->setForceAnimation(true);\n    d->suspendNotificationAnimation->setDuration(15000);\n    connect(d->suspendNotificationAnimation, &tVariantAnimation::valueChanged, this, [=](QVariant value) {\n        StateManager::instance()->hudManager()->showHud({\n            {\"icon\",                                                                \"system-suspend\"},\n            {\"title\",                                                               tr(\"Suspend\")   },\n            {\"text\",                                                                tr(\"%n seconds\",  nullptr, (15000 - d->suspendNotificationAnimation->currentTime()) / 1000 + 1)},\n            {\"value\", value.toDouble()                },\n            {\"timeout\",                                                     15000                                                    }\n        });\n\n        // Immediately do an idle timer check if the idle timer has changed\n        if (DesktopWm::msecsIdle() < d->oldIdleTimer) checkIdleTimer();\n    });\n    connect(d->suspendNotificationAnimation, &tVariantAnimation::stateChanged, this, [=](tVariantAnimation::State newState, tVariantAnimation::State oldState) {\n        if (newState == tVariantAnimation::Stopped) {\n            StateManager::instance()->hudManager()->hideHud();\n        }\n    });\n    connect(d->suspendNotificationAnimation, &tVariantAnimation::finished, this, [=] {\n        // Suspend now\n        StateManager::powerManager()->performPowerOperation(PowerManager::Suspend);\n    });\n\n    connect(d->upower, QOverload<DesktopUPowerDevice*>::of(&DesktopUPower::deviceAdded), this, &EventHandler::trackDevice);\n    connect(d->upower, QOverload<DesktopUPowerDevice*>::of(&DesktopUPower::deviceRemoved), this, &EventHandler::removeDevice);\n    for (DesktopUPowerDevice* device : d->upower->devices()) {\n        trackDevice(device);\n    }\n}\n\nEventHandler::~EventHandler() {\n    d->upower->deleteLater();\n    d->powerKey->deleteLater();\n    d->ctrlAltDelKey->deleteLater();\n    delete d;\n}\n\nvoid EventHandler::checkIdleTimer() {\n    quint64 idleTimer = DesktopWm::msecsIdle();\n    if (idleTimer < d->oldIdleTimer) {\n        if (d->suspendNotificationAnimation->state() == tVariantAnimation::Running) {\n            d->suspendNotificationAnimation->stop();\n        }\n\n        // Reset all variables\n        d->screenOffActionPerformed = false;\n        d->suspendActionPerformed = false;\n    }\n    d->oldIdleTimer = idleTimer;\n\n    // Ensure that there are no full screen windows so we don't switch off the screen if someone is watching a video for instance\n    for (DesktopWmWindowPtr window : DesktopWm::openWindows()) {\n        if (window->isFullScreen()) return;\n    }\n\n    // Ensure caffeinate is not switched on\n    if (!d->caffeinateSwitch->isChecked()) {\n        if (!d->screenOffActionPerformed) {\n            // See if we need to turn the screen off\n            quint64 timeout = d->settings.value(\"Power/timeouts.screenoff.value\").toInt() * d->timeoutFactors.value(d->settings.value(\"Power/timeouts.screenoff.unit\").toString(), 0);\n            if (idleTimer > timeout && timeout != 0) {\n                // Turn the screen off now\n                StateManager::powerManager()->performPowerOperation(PowerManager::TurnOffScreen);\n                d->screenOffActionPerformed = true;\n            }\n        }\n\n        if (!d->suspendActionPerformed) {\n            // See if we need to suspend\n            quint64 timeout = d->settings.value(\"Power/timeouts.suspend.value\").toInt() * d->timeoutFactors.value(d->settings.value(\"Power/timeouts.suspend.unit\").toString(), 0);\n            if (idleTimer > timeout && timeout != 0) {\n                // Notify the user about the impending suspension and then suspend\n                d->suspendActionPerformed = true;\n                d->suspendNotificationAnimation->start();\n            }\n        }\n    }\n}\n\nvoid EventHandler::trackDevice(DesktopUPowerDevice* device) {\n    connect(device, &DesktopUPowerDevice::lowBatteryNotification, this, [=](QString description) {\n        StateManager::instance()->hudManager()->showHud({\n            {\"icon\",    device->iconName()          },\n            {\"title\",   tr(\"Battery\")               },\n            {\"text\",    description                 },\n            {\"value\",   device->percentage() / 100.0},\n            {\"timeout\", 10000                       },\n            {\"color\",   QColor(Qt::red)             }\n        });\n    });\n    connect(device, &DesktopUPowerDevice::chargingNotification, this, [=] {\n        StateManager::instance()->hudManager()->showHud({\n            {\"icon\",    device->iconName()          },\n            {\"title\",   tr(\"Battery\")               },\n            {\"text\",    tr(\"Charging\")              },\n            {\"value\",   device->percentage() / 100.0},\n            {\"timeout\", 10000                       },\n            {\"color\",   QColor(Qt::green)           }\n        });\n    });\n    connect(device, &DesktopUPowerDevice::fullNotification, this, [=] {\n        StateManager::instance()->hudManager()->showHud({\n            {\"icon\",    device->iconName()          },\n            {\"title\",   tr(\"Battery\")               },\n            {\"text\",    tr(\"Full\")                  },\n            {\"value\",   device->percentage() / 100.0},\n            {\"timeout\", 10000                       },\n            {\"color\",   QColor(Qt::green)           }\n        });\n    });\n    connect(device, &DesktopUPowerDevice::dischargingNotification, this, [=] {\n        StateManager::instance()->hudManager()->showHud({\n            {\"icon\",    device->iconName()          },\n            {\"title\",   tr(\"Battery\")               },\n            {\"text\",    tr(\"Discharging\")           },\n            {\"value\",   device->percentage() / 100.0},\n            {\"timeout\", 10000                       }\n        });\n    });\n}\n\nvoid EventHandler::removeDevice(DesktopUPowerDevice* device) {\n}\n"
  },
  {
    "path": "plugins/PowerPlugin/eventhandler.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef EVENTHANDLER_H\n#define EVENTHANDLER_H\n\n#include <QObject>\n\nclass DesktopUPowerDevice;\nstruct EventHandlerPrivate;\nclass EventHandler : public QObject {\n        Q_OBJECT\n    public:\n        explicit EventHandler(QObject* parent = nullptr);\n        ~EventHandler();\n\n    signals:\n\n    private:\n        EventHandlerPrivate* d;\n\n        void checkIdleTimer();\n        void trackDevice(DesktopUPowerDevice* device);\n        void removeDevice(DesktopUPowerDevice* device);\n};\n\n#endif // KEYBOARDHANDLER_H\n"
  },
  {
    "path": "plugins/PowerPlugin/plugin.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"plugin.h\"\n\n#include \"eventhandler.h\"\n#include \"settings/powersettings.h\"\n#include \"sleepmonitor.h\"\n#include <DesktopPowerProfiles/desktoppowerprofiles.h>\n#include <QApplication>\n#include <QDebug>\n#include <QDir>\n#include <QIcon>\n#include <UPower/desktopupower.h>\n#include <actionquickwidget.h>\n#include <barmanager.h>\n#include <icontextchunk.h>\n#include <localemanager.h>\n#include <quickswitch.h>\n#include <statemanager.h>\n#include <statuscentermanager.h>\n#include <tapplication.h>\n#include <tsettings.h>\n\nstruct PluginPrivate {\n        DesktopPowerProfiles* powerProfiles;\n\n        DesktopUPower* upower;\n        IconTextChunk* powerChunk;\n        EventHandler* logind;\n        PowerSettings* powerSettings;\n        QuickSwitch* powerStretchSwitch;\n        IconTextChunk* powerStretchChunk;\n\n        SleepMonitor* sleepMonitor;\n};\n\nPlugin::Plugin() {\n    d = new PluginPrivate();\n}\n\nPlugin::~Plugin() {\n    delete d;\n}\n\nvoid Plugin::activate() {\n    tApplication::addPluginTranslator(CNTP_TARGET_NAME);\n\n    tSettings::registerDefaults(QDir::cleanPath(qApp->applicationDirPath() + \"/../plugins/PowerPlugin/thedesk-power.conf\"));\n    tSettings::registerDefaults(\"/usr/share/defaults/thedesk-power.conf\");\n\n    d->powerProfiles = new DesktopPowerProfiles();\n\n    d->upower = new DesktopUPower(this);\n    d->powerChunk = new IconTextChunk(\"Power\");\n    connect(d->upower, &DesktopUPower::overallStateChanged, this, [=] {\n        d->powerChunk->setIcon(d->upower->overallStateIcon());\n        d->powerChunk->setText(d->upower->overallStateDescription());\n\n        if (d->upower->shouldShowOverallState() && !d->powerChunk->chunkRegistered()) {\n            // Register the chunk\n            StateManager::barManager()->addChunk(d->powerChunk);\n        } else if (!d->upower->shouldShowOverallState() && d->powerChunk->chunkRegistered()) {\n            // Deregister the chunk\n            StateManager::barManager()->removeChunk(d->powerChunk);\n        }\n    });\n    d->logind = new EventHandler();\n\n    d->powerSettings = new PowerSettings(d->powerProfiles);\n    StateManager::statusCenterManager()->addPane(d->powerSettings, StatusCenterManager::SystemSettings);\n\n    d->powerStretchSwitch = new QuickSwitch(\"PowerStretch\");\n    d->powerStretchSwitch->setTitle(tr(\"Power Stretch\"));\n    d->powerStretchSwitch->setChecked(d->powerProfiles->currentPowerProfile() == DesktopPowerProfiles::PowerStretch);\n    connect(d->powerStretchSwitch, &QuickSwitch::toggled, this, [=](bool powerStretch) {\n        if (powerStretch) {\n            d->powerProfiles->setCurrentPowerProfile(DesktopPowerProfiles::PowerStretch);\n        } else {\n            d->powerProfiles->setCurrentPowerProfile(DesktopPowerProfiles::Balanced);\n        }\n    });\n\n    d->powerStretchChunk = new IconTextChunk(\"PowerStretch\");\n    d->powerStretchChunk->setIcon(QIcon::fromTheme(\"battery-stretch\"));\n    d->powerStretchChunk->setText(tr(\"Power Stretch\"));\n    if (d->powerProfiles->currentPowerProfile() == DesktopPowerProfiles::PowerStretch) StateManager::barManager()->addChunk(d->powerStretchChunk);\n\n    ActionQuickWidget* quickWidget = new ActionQuickWidget(d->powerStretchChunk);\n    quickWidget->addAction(QIcon::fromTheme(\"battery-stretch\"), tr(\"Disable Power Stretch\"), [=] {\n        d->powerProfiles->setCurrentPowerProfile(DesktopPowerProfiles::Balanced);\n    });\n    d->powerStretchChunk->setQuickWidget(quickWidget);\n\n    connect(d->powerProfiles, &DesktopPowerProfiles::powerProfileChanged, this, [=] {\n        d->powerStretchSwitch->setChecked(d->powerProfiles->currentPowerProfile() == DesktopPowerProfiles::PowerStretch);\n        if (d->powerProfiles->currentPowerProfile() == DesktopPowerProfiles::PowerStretch && !d->powerStretchChunk->chunkRegistered()) {\n            // Register the chunk\n            StateManager::barManager()->addChunk(d->powerStretchChunk);\n        } else if (d->powerProfiles->currentPowerProfile() != DesktopPowerProfiles::PowerStretch && d->powerStretchChunk->chunkRegistered()) {\n            // Deregister the chunk\n            StateManager::barManager()->removeChunk(d->powerStretchChunk);\n        }\n    });\n    StateManager::statusCenterManager()->addSwitch(d->powerStretchSwitch);\n\n    d->sleepMonitor = new SleepMonitor();\n}\n\nvoid Plugin::deactivate() {\n    if (d->powerChunk->chunkRegistered()) {\n        // Deregister the chunk\n        StateManager::barManager()->removeChunk(d->powerChunk);\n    }\n    if (d->powerStretchChunk->chunkRegistered()) {\n        // Deregister the chunk\n        StateManager::barManager()->removeChunk(d->powerStretchChunk);\n    }\n\n    StateManager::statusCenterManager()->removeSwitch(d->powerStretchSwitch);\n    StateManager::statusCenterManager()->removePane(d->powerSettings);\n\n    d->powerStretchSwitch->deleteLater();\n    d->powerChunk->deleteLater();\n    d->powerStretchChunk->deleteLater();\n    d->upower->deleteLater();\n    d->logind->deleteLater();\n    d->powerSettings->deleteLater();\n    d->powerProfiles->deleteLater();\n    d->sleepMonitor->deleteLater();\n    tApplication::removePluginTranslator(CNTP_TARGET_NAME);\n}\n"
  },
  {
    "path": "plugins/PowerPlugin/plugin.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef PLUGIN_H\n#define PLUGIN_H\n\n#include \"plugins/plugininterface.h\"\n\nstruct PluginPrivate;\nclass Plugin : public QObject,\n               public PluginInterface {\n        Q_OBJECT\n        Q_PLUGIN_METADATA(IID PluginInterface_iid FILE \"Plugin.json\")\n        Q_INTERFACES(PluginInterface)\n\n    public:\n        Plugin();\n        ~Plugin();\n\n    private:\n        PluginPrivate* d;\n\n        // PluginInterface interface\n    public:\n        void activate();\n        void deactivate();\n};\n\n#endif // PLUGIN_H\n"
  },
  {
    "path": "plugins/PowerPlugin/settings/powersettings.cpp",
    "content": "#include \"powersettings.h\"\n#include \"ui_powersettings.h\"\n\n#include <DesktopPowerProfiles/desktoppowerprofiles.h>\n#include <QIcon>\n#include <statemanager.h>\n#include <statuscentermanager.h>\n#include <tsettings.h>\n\nstruct PowerSettingsPrivate {\n        tSettings settings;\n        DesktopPowerProfiles* profiles;\n\n        const static QStringList timeoutUnits;\n        const static QStringList powerActions;\n};\n\nconst QStringList PowerSettingsPrivate::timeoutUnits = {\n    \"sec\",\n    \"min\",\n    \"hr\",\n    \"never\"};\n\nconst QStringList PowerSettingsPrivate::powerActions = {\n    \"ask\",\n    \"poweroff\",\n    \"reboot\",\n    \"suspend\",\n    \"hibernate\",\n    \"ignore\"};\n\nPowerSettings::PowerSettings(DesktopPowerProfiles* powerProfiles) :\n    StatusCenterPane(),\n    ui(new Ui::PowerSettings) {\n    ui->setupUi(this);\n\n    d = new PowerSettingsPrivate();\n    d->profiles = powerProfiles;\n\n    ui->titleLabel->setBackButtonIsMenu(true);\n    ui->titleLabel->setBackButtonShown(StateManager::instance()->statusCenterManager()->isHamburgerMenuRequired());\n    connect(StateManager::instance()->statusCenterManager(), &StatusCenterManager::isHamburgerMenuRequiredChanged, ui->titleLabel, &tTitleLabel::setBackButtonShown);\n\n    const int contentWidth = StateManager::instance()->statusCenterManager()->preferredContentWidth();\n    ui->powerProfileWidget->setFixedWidth(contentWidth);\n    ui->timeoutsWidget->setFixedWidth(contentWidth);\n    ui->buttonsWidget->setFixedWidth(contentWidth);\n\n    connect(&d->settings, &tSettings::settingChanged, this, &PowerSettings::settingChanged);\n    for (QString setting : {\n             \"Power/timeouts.screenoff.value\",\n             \"Power/timeouts.screenoff.unit\",\n             \"Power/timeouts.suspend.value\",\n             \"Power/timeouts.suspend.unit\",\n             \"Power/actions.powerbutton\",\n             \"Power/suspend.lockScreen\"}) {\n        settingChanged(setting, d->settings.value(setting));\n    }\n\n    connect(d->profiles, &DesktopPowerProfiles::powerProfileChanged, this, &PowerSettings::updatePowerProfiles);\n    updatePowerProfiles();\n}\n\nPowerSettings::~PowerSettings() {\n    delete d;\n    delete ui;\n}\n\nQString PowerSettings::name() {\n    return \"PowerSettings\";\n}\n\nQString PowerSettings::displayName() {\n    return tr(\"Power\");\n}\n\nQIcon PowerSettings::icon() {\n    return QIcon::fromTheme(\"preferences-system-power\");\n}\n\nQWidget* PowerSettings::leftPane() {\n    return nullptr;\n}\n\nvoid PowerSettings::on_titleLabel_backButtonClicked() {\n    StateManager::instance()->statusCenterManager()->showStatusCenterHamburgerMenu();\n}\n\nvoid PowerSettings::on_screenOffSpin_valueChanged(int arg1) {\n    d->settings.setValue(\"Power/timeouts.screenoff.value\", arg1);\n}\n\nvoid PowerSettings::on_screenOffUnit_currentIndexChanged(int index) {\n    d->settings.setValue(\"Power/timeouts.screenoff.unit\", d->timeoutUnits.value(index));\n}\n\nvoid PowerSettings::settingChanged(QString key, QVariant value) {\n    if (key == \"Power/timeouts.screenoff.value\") {\n        ui->screenOffSpin->setValue(value.toInt());\n    } else if (key == \"Power/timeouts.screenoff.unit\") {\n        QString unit = value.toString();\n        ui->screenOffUnit->setCurrentIndex(d->timeoutUnits.indexOf(unit));\n        ui->screenOffSpin->setEnabled(unit != \"never\");\n    } else if (key == \"Power/timeouts.suspend.value\") {\n        ui->suspendSpin->setValue(value.toInt());\n    } else if (key == \"Power/timeouts.suspend.unit\") {\n        QString unit = value.toString();\n        ui->suspendUnit->setCurrentIndex(d->timeoutUnits.indexOf(unit));\n        ui->suspendSpin->setEnabled(unit != \"never\");\n    } else if (key == \"Power/actions.powerbutton\") {\n        ui->powerButtonActionBox->setCurrentIndex(d->powerActions.indexOf(value.toString()));\n    } else if (key == \"Power/suspend.lockScreen\") {\n        ui->lockScreenAfterSuspendSwitch->setChecked(value.toBool());\n    }\n}\n\nvoid PowerSettings::updatePowerProfiles() {\n    bool powerProfilesAvailable = d->profiles->powerProfilesAvailable();\n    ui->powerProfileWidget->setVisible(powerProfilesAvailable);\n    ui->powerProfileLine->setVisible(powerProfilesAvailable);\n\n    bool isPerformanceAvailable = d->profiles->isPerformanceAvailable();\n    ui->performanceProfileButton->setVisible(isPerformanceAvailable);\n    ui->performanceDescription->setVisible(isPerformanceAvailable);\n\n    switch (d->profiles->currentPowerProfile()) {\n        case DesktopPowerProfiles::PowerStretch:\n            ui->powerStretchProfileButton->setChecked(true);\n            break;\n        case DesktopPowerProfiles::Balanced:\n            ui->balancedProfileButton->setChecked(true);\n            break;\n        case DesktopPowerProfiles::Performance:\n            ui->performanceProfileButton->setChecked(true);\n            break;\n        case DesktopPowerProfiles::Unknown:\n            break;\n    }\n\n    if (!d->profiles->performanceInhibited().isEmpty()) {\n        ui->performanceInhibition->setTitle(tr(\"Performance mode unavailable\"));\n        ui->performanceInhibition->setText(performanceInhibitionReason(d->profiles->performanceInhibited()).arg(tr(\"unavailable\")));\n        ui->performanceInhibition->setState(tStatusFrame::Error);\n        ui->performanceProfileButton->setEnabled(false);\n        ui->performanceInhibition->setVisible(true);\n    } else if (!d->profiles->performanceDegraded().isEmpty()) {\n        ui->performanceInhibition->setTitle(tr(\"Performance mode temporarily unavailable\"));\n        ui->performanceInhibition->setText(performanceInhibitionReason(d->profiles->performanceDegraded()).arg(tr(\"temporarily unavailable\")));\n        ui->performanceInhibition->setState(tStatusFrame::Warning);\n        ui->performanceProfileButton->setEnabled(true);\n        ui->performanceInhibition->setVisible(true);\n    } else {\n        ui->performanceInhibition->setVisible(false);\n        ui->performanceProfileButton->setEnabled(true);\n    }\n}\n\nQString PowerSettings::performanceInhibitionReason(QString reason) {\n    if (reason == \"lap-detected\") return tr(\"Performance mode is %1 because the device is on your lap.\");\n    if (reason == \"high-operating-temperature\") return tr(\"Performance mode is %1 because your device is getting warm.\");\n    return tr(\"Performance mode is %1.\");\n}\n\nvoid PowerSettings::on_suspendSpin_valueChanged(int arg1) {\n    d->settings.setValue(\"Power/timeouts.suspend.value\", arg1);\n}\n\nvoid PowerSettings::on_suspendUnit_currentIndexChanged(int index) {\n    d->settings.setValue(\"Power/timeouts.suspend.unit\", d->timeoutUnits.value(index));\n}\n\nvoid PowerSettings::on_powerButtonActionBox_currentIndexChanged(int index) {\n    d->settings.setValue(\"Power/actions.powerbutton\", d->powerActions.value(index));\n}\n\nvoid PowerSettings::on_balancedProfileButton_toggled(bool checked) {\n    if (checked) d->profiles->setCurrentPowerProfile(DesktopPowerProfiles::Balanced);\n}\n\nvoid PowerSettings::on_powerStretchProfileButton_toggled(bool checked) {\n    if (checked) d->profiles->setCurrentPowerProfile(DesktopPowerProfiles::PowerStretch);\n}\n\nvoid PowerSettings::on_performanceProfileButton_toggled(bool checked) {\n    if (checked) d->profiles->setCurrentPowerProfile(DesktopPowerProfiles::Performance);\n}\n\nvoid PowerSettings::on_lockScreenAfterSuspendSwitch_toggled(bool checked) {\n    d->settings.setValue(\"Power/suspend.lockScreen\", checked);\n}\n\nvoid PowerSettings::changeEvent(QEvent* event) {\n    if (event->type() == QEvent::LanguageChange) {\n        ui->retranslateUi(this);\n        emit displayNameChanged();\n    }\n}\n"
  },
  {
    "path": "plugins/PowerPlugin/settings/powersettings.h",
    "content": "#ifndef POWERSETTINGS_H\n#define POWERSETTINGS_H\n\n#include <QWidget>\n\n#include <statuscenterpane.h>\n\nnamespace Ui {\n    class PowerSettings;\n}\n\nclass DesktopPowerProfiles;\nstruct PowerSettingsPrivate;\nclass PowerSettings : public StatusCenterPane {\n        Q_OBJECT\n\n    public:\n        explicit PowerSettings(DesktopPowerProfiles* powerProfiles);\n        ~PowerSettings();\n\n    private slots:\n        void on_titleLabel_backButtonClicked();\n        void on_screenOffSpin_valueChanged(int arg1);\n        void on_screenOffUnit_currentIndexChanged(int index);\n\n        void on_suspendSpin_valueChanged(int arg1);\n\n        void on_suspendUnit_currentIndexChanged(int index);\n\n        void on_powerButtonActionBox_currentIndexChanged(int index);\n\n        void on_balancedProfileButton_toggled(bool checked);\n\n        void on_powerStretchProfileButton_toggled(bool checked);\n\n        void on_performanceProfileButton_toggled(bool checked);\n\n        void on_lockScreenAfterSuspendSwitch_toggled(bool checked);\n\n    private:\n        Ui::PowerSettings* ui;\n        PowerSettingsPrivate* d;\n\n        void settingChanged(QString key, QVariant value);\n\n        void updatePowerProfiles();\n        QString performanceInhibitionReason(QString reason);\n\n        // StatusCenterPane interface\n    public:\n        QString name();\n        QString displayName();\n        QIcon icon();\n        QWidget* leftPane();\n\n        // QWidget interface\n    protected:\n        void changeEvent(QEvent* event);\n};\n\n#endif // POWERSETTINGS_H\n"
  },
  {
    "path": "plugins/PowerPlugin/settings/powersettings.ui",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ui version=\"4.0\">\n <class>PowerSettings</class>\n <widget class=\"QWidget\" name=\"PowerSettings\">\n  <property name=\"geometry\">\n   <rect>\n    <x>0</x>\n    <y>0</y>\n    <width>725</width>\n    <height>556</height>\n   </rect>\n  </property>\n  <property name=\"windowTitle\">\n   <string notr=\"true\">Form</string>\n  </property>\n  <layout class=\"QVBoxLayout\" name=\"verticalLayout\">\n   <property name=\"spacing\">\n    <number>0</number>\n   </property>\n   <property name=\"leftMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"topMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"rightMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"bottomMargin\">\n    <number>0</number>\n   </property>\n   <item>\n    <widget class=\"tTitleLabel\" name=\"titleLabel\">\n     <property name=\"text\">\n      <string>Power</string>\n     </property>\n    </widget>\n   </item>\n   <item>\n    <widget class=\"QScrollArea\" name=\"scrollArea\">\n     <property name=\"frameShape\">\n      <enum>QFrame::NoFrame</enum>\n     </property>\n     <property name=\"widgetResizable\">\n      <bool>true</bool>\n     </property>\n     <widget class=\"QWidget\" name=\"scrollAreaWidgetContents\">\n      <property name=\"geometry\">\n       <rect>\n        <x>0</x>\n        <y>0</y>\n        <width>725</width>\n        <height>539</height>\n       </rect>\n      </property>\n      <layout class=\"QVBoxLayout\" name=\"verticalLayout_2\">\n       <property name=\"spacing\">\n        <number>0</number>\n       </property>\n       <property name=\"leftMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"topMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"rightMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"bottomMargin\">\n        <number>0</number>\n       </property>\n       <item alignment=\"Qt::AlignHCenter\">\n        <widget class=\"QWidget\" name=\"powerProfileWidget\" native=\"true\">\n         <layout class=\"QVBoxLayout\" name=\"verticalLayout_3\">\n          <item>\n           <widget class=\"QLabel\" name=\"label_7\">\n            <property name=\"font\">\n             <font>\n              <bold>true</bold>\n             </font>\n            </property>\n            <property name=\"text\">\n             <string>POWER PROFILE</string>\n            </property>\n           </widget>\n          </item>\n          <item>\n           <widget class=\"QLabel\" name=\"label_8\">\n            <property name=\"text\">\n             <string>A power profile tweaks the way your system runs in order to prioritise performance or reduce power consumption.</string>\n            </property>\n            <property name=\"wordWrap\">\n             <bool>true</bool>\n            </property>\n           </widget>\n          </item>\n          <item>\n           <widget class=\"tStatusFrame\" name=\"performanceInhibition\"/>\n          </item>\n          <item>\n           <widget class=\"QRadioButton\" name=\"powerStretchProfileButton\">\n            <property name=\"text\">\n             <string>Power Stretch</string>\n            </property>\n            <attribute name=\"buttonGroup\">\n             <string notr=\"true\">powerProfilesGroup</string>\n            </attribute>\n           </widget>\n          </item>\n          <item>\n           <widget class=\"QLabel\" name=\"label_10\">\n            <property name=\"enabled\">\n             <bool>false</bool>\n            </property>\n            <property name=\"text\">\n             <string>Reduce the performance of your device to save on power</string>\n            </property>\n            <property name=\"wordWrap\">\n             <bool>true</bool>\n            </property>\n           </widget>\n          </item>\n          <item>\n           <widget class=\"QRadioButton\" name=\"balancedProfileButton\">\n            <property name=\"text\">\n             <string>Balanced</string>\n            </property>\n            <attribute name=\"buttonGroup\">\n             <string notr=\"true\">powerProfilesGroup</string>\n            </attribute>\n           </widget>\n          </item>\n          <item>\n           <widget class=\"QLabel\" name=\"label_9\">\n            <property name=\"enabled\">\n             <bool>false</bool>\n            </property>\n            <property name=\"text\">\n             <string>Performance and power consumption will be average</string>\n            </property>\n            <property name=\"wordWrap\">\n             <bool>true</bool>\n            </property>\n           </widget>\n          </item>\n          <item>\n           <widget class=\"QRadioButton\" name=\"performanceProfileButton\">\n            <property name=\"text\">\n             <string>Performance</string>\n            </property>\n            <attribute name=\"buttonGroup\">\n             <string notr=\"true\">powerProfilesGroup</string>\n            </attribute>\n           </widget>\n          </item>\n          <item>\n           <widget class=\"QLabel\" name=\"performanceDescription\">\n            <property name=\"enabled\">\n             <bool>false</bool>\n            </property>\n            <property name=\"text\">\n             <string>Performance will be increased at the cost of power consumption</string>\n            </property>\n            <property name=\"wordWrap\">\n             <bool>true</bool>\n            </property>\n           </widget>\n          </item>\n         </layout>\n        </widget>\n       </item>\n       <item>\n        <widget class=\"Line\" name=\"powerProfileLine\">\n         <property name=\"maximumSize\">\n          <size>\n           <width>16777215</width>\n           <height>1</height>\n          </size>\n         </property>\n         <property name=\"orientation\">\n          <enum>Qt::Horizontal</enum>\n         </property>\n        </widget>\n       </item>\n       <item alignment=\"Qt::AlignHCenter\">\n        <widget class=\"QWidget\" name=\"timeoutsWidget\" native=\"true\">\n         <layout class=\"QGridLayout\" name=\"gridLayout\">\n          <item row=\"0\" column=\"0\">\n           <widget class=\"QLabel\" name=\"label\">\n            <property name=\"font\">\n             <font>\n              <bold>true</bold>\n             </font>\n            </property>\n            <property name=\"text\">\n             <string>TIMEOUTS</string>\n            </property>\n           </widget>\n          </item>\n          <item row=\"2\" column=\"0\">\n           <widget class=\"QLabel\" name=\"label_3\">\n            <property name=\"sizePolicy\">\n             <sizepolicy hsizetype=\"Expanding\" vsizetype=\"Preferred\">\n              <horstretch>0</horstretch>\n              <verstretch>0</verstretch>\n             </sizepolicy>\n            </property>\n            <property name=\"text\">\n             <string>Switch off the screen after</string>\n            </property>\n           </widget>\n          </item>\n          <item row=\"2\" column=\"1\">\n           <widget class=\"QSpinBox\" name=\"screenOffSpin\">\n            <property name=\"minimum\">\n             <number>1</number>\n            </property>\n            <property name=\"maximum\">\n             <number>200</number>\n            </property>\n           </widget>\n          </item>\n          <item row=\"1\" column=\"0\" colspan=\"3\">\n           <widget class=\"QLabel\" name=\"label_2\">\n            <property name=\"text\">\n             <string>If you leave your device idle for a period of time, we can automatically turn off the screen or suspend it for you.</string>\n            </property>\n            <property name=\"wordWrap\">\n             <bool>true</bool>\n            </property>\n           </widget>\n          </item>\n          <item row=\"2\" column=\"2\">\n           <widget class=\"QComboBox\" name=\"screenOffUnit\">\n            <item>\n             <property name=\"text\">\n              <string>seconds</string>\n             </property>\n            </item>\n            <item>\n             <property name=\"text\">\n              <string>minutes</string>\n             </property>\n            </item>\n            <item>\n             <property name=\"text\">\n              <string>hours</string>\n             </property>\n            </item>\n            <item>\n             <property name=\"text\">\n              <string>never</string>\n             </property>\n            </item>\n           </widget>\n          </item>\n          <item row=\"3\" column=\"0\">\n           <widget class=\"QLabel\" name=\"label_4\">\n            <property name=\"text\">\n             <string>Suspend after</string>\n            </property>\n           </widget>\n          </item>\n          <item row=\"3\" column=\"1\">\n           <widget class=\"QSpinBox\" name=\"suspendSpin\">\n            <property name=\"minimum\">\n             <number>1</number>\n            </property>\n            <property name=\"maximum\">\n             <number>200</number>\n            </property>\n           </widget>\n          </item>\n          <item row=\"3\" column=\"2\">\n           <widget class=\"QComboBox\" name=\"suspendUnit\">\n            <item>\n             <property name=\"text\">\n              <string>seconds</string>\n             </property>\n            </item>\n            <item>\n             <property name=\"text\">\n              <string>minutes</string>\n             </property>\n            </item>\n            <item>\n             <property name=\"text\">\n              <string>hours</string>\n             </property>\n            </item>\n            <item>\n             <property name=\"text\">\n              <string>never</string>\n             </property>\n            </item>\n           </widget>\n          </item>\n         </layout>\n        </widget>\n       </item>\n       <item>\n        <widget class=\"Line\" name=\"line\">\n         <property name=\"maximumSize\">\n          <size>\n           <width>16777215</width>\n           <height>1</height>\n          </size>\n         </property>\n         <property name=\"orientation\">\n          <enum>Qt::Horizontal</enum>\n         </property>\n        </widget>\n       </item>\n       <item alignment=\"Qt::AlignHCenter\">\n        <widget class=\"QWidget\" name=\"buttonsWidget\" native=\"true\">\n         <layout class=\"QGridLayout\" name=\"gridLayout_2\">\n          <item row=\"1\" column=\"0\">\n           <widget class=\"QLabel\" name=\"label_6\">\n            <property name=\"sizePolicy\">\n             <sizepolicy hsizetype=\"Expanding\" vsizetype=\"Preferred\">\n              <horstretch>0</horstretch>\n              <verstretch>0</verstretch>\n             </sizepolicy>\n            </property>\n            <property name=\"text\">\n             <string>When pressing the Power button</string>\n            </property>\n           </widget>\n          </item>\n          <item row=\"0\" column=\"0\" colspan=\"2\">\n           <widget class=\"QLabel\" name=\"label_5\">\n            <property name=\"font\">\n             <font>\n              <bold>true</bold>\n             </font>\n            </property>\n            <property name=\"text\">\n             <string>BUTTONS</string>\n            </property>\n           </widget>\n          </item>\n          <item row=\"1\" column=\"1\">\n           <widget class=\"QComboBox\" name=\"powerButtonActionBox\">\n            <item>\n             <property name=\"text\">\n              <string>Ask</string>\n             </property>\n            </item>\n            <item>\n             <property name=\"text\">\n              <string>Power Off</string>\n             </property>\n            </item>\n            <item>\n             <property name=\"text\">\n              <string>Reboot</string>\n             </property>\n            </item>\n            <item>\n             <property name=\"text\">\n              <string>Suspend</string>\n             </property>\n            </item>\n            <item>\n             <property name=\"text\">\n              <string>Hibernate</string>\n             </property>\n            </item>\n            <item>\n             <property name=\"text\">\n              <string>Do Nothing</string>\n             </property>\n            </item>\n           </widget>\n          </item>\n          <item row=\"2\" column=\"0\">\n           <widget class=\"QLabel\" name=\"label_11\">\n            <property name=\"text\">\n             <string>After suspending, lock the screen</string>\n            </property>\n           </widget>\n          </item>\n          <item row=\"2\" column=\"1\" alignment=\"Qt::AlignRight\">\n           <widget class=\"tSwitch\" name=\"lockScreenAfterSuspendSwitch\">\n            <property name=\"text\">\n             <string notr=\"true\">LockScreenAfterSuspendSwitch</string>\n            </property>\n           </widget>\n          </item>\n         </layout>\n        </widget>\n       </item>\n       <item>\n        <spacer name=\"verticalSpacer\">\n         <property name=\"orientation\">\n          <enum>Qt::Vertical</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>20</width>\n           <height>0</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n      </layout>\n     </widget>\n    </widget>\n   </item>\n  </layout>\n </widget>\n <customwidgets>\n  <customwidget>\n   <class>tTitleLabel</class>\n   <extends>QLabel</extends>\n   <header location=\"global\">ttitlelabel.h</header>\n   <slots>\n    <signal>backButtonClicked()</signal>\n   </slots>\n  </customwidget>\n  <customwidget>\n   <class>tSwitch</class>\n   <extends>QPushButton</extends>\n   <header location=\"global\">tswitch.h</header>\n  </customwidget>\n  <customwidget>\n   <class>tStatusFrame</class>\n   <extends>QFrame</extends>\n   <header location=\"global\">tstatusframe.h</header>\n   <container>1</container>\n  </customwidget>\n </customwidgets>\n <resources/>\n <connections/>\n <buttongroups>\n  <buttongroup name=\"powerProfilesGroup\"/>\n </buttongroups>\n</ui>\n"
  },
  {
    "path": "plugins/PowerPlugin/sleepmonitor.cpp",
    "content": "#include \"sleepmonitor.h\"\n\n#include <tsettings.h>\n#include <QDBusConnection>\n\n#include <statemanager.h>\n#include <powermanager.h>\n\nstruct SleepMonitorPrivate {\n    tSettings settings;\n};\n\nSleepMonitor::SleepMonitor(QObject* parent) : QObject{parent} {\n    d = new SleepMonitorPrivate();\n\n    QDBusConnection::systemBus().connect(\"org.freedesktop.login1\", \"/org/freedesktop/login1\", \"org.freedesktop.login1.Manager\", \"PrepareForSleep\", this, SLOT(PrepareForSleep(bool)));\n}\n\nSleepMonitor::~SleepMonitor() {\n    delete d;\n}\n\nvoid SleepMonitor::PrepareForSleep(bool sleeping) {\n    if (sleeping) {\n        if (d->settings.value(\"Power/suspend.lockScreen\").toBool()) {\n            //Lock the screen now\n            StateManager::powerManager()->performPowerOperation(PowerManager::Lock);\n        }\n    }\n}\n"
  },
  {
    "path": "plugins/PowerPlugin/sleepmonitor.h",
    "content": "#ifndef SLEEPMONITOR_H\n#define SLEEPMONITOR_H\n\n#include <QObject>\n\nstruct SleepMonitorPrivate;\n\nclass SleepMonitor : public QObject {\n        Q_OBJECT\n    public:\n        explicit SleepMonitor(QObject* parent = nullptr);\n        ~SleepMonitor();\n\n    private slots:\n        void PrepareForSleep(bool sleeping);\n\n    signals:\n\n    private:\n        SleepMonitorPrivate* d;\n};\n\n#endif // SLEEPMONITOR_H\n"
  },
  {
    "path": "plugins/PowerPlugin/thedesk-power.conf",
    "content": "[Power]\ntimeouts.screenoff.value=5\ntimeouts.screenoff.unit=min\ntimeouts.suspend.value=15\ntimeouts.suspend.unit=min\nactions.powerbutton=ask\nsuspend.lockScreen=true\n"
  },
  {
    "path": "plugins/PowerPlugin/translations/ar_SA.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"ar_SA\" sourcelanguage=\"en_US\">\n<context>\n    <name>EventHandler</name>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"99\"/>\n        <source>Unable to inhibit logind power management</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"122\"/>\n        <source>Caffeinated</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"125\"/>\n        <source>Caffeinate</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"136\"/>\n        <source>Decaffeinate</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"154\"/>\n        <source>Suspend</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../eventhandler.cpp\" line=\"155\"/>\n        <source>%n seconds</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n        </translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"233\"/>\n        <location filename=\"../eventhandler.cpp\" line=\"243\"/>\n        <location filename=\"../eventhandler.cpp\" line=\"253\"/>\n        <location filename=\"../eventhandler.cpp\" line=\"263\"/>\n        <source>Battery</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"244\"/>\n        <source>Charging</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"254\"/>\n        <source>Full</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"264\"/>\n        <source>Discharging</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>Plugin</name>\n    <message>\n        <location filename=\"../plugin.cpp\" line=\"90\"/>\n        <location filename=\"../plugin.cpp\" line=\"102\"/>\n        <source>Power Stretch</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../plugin.cpp\" line=\"106\"/>\n        <source>Disable Power Stretch</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>PowerSettings</name>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"35\"/>\n        <location filename=\"../settings/powersettings.cpp\" line=\"74\"/>\n        <source>Power</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"83\"/>\n        <source>POWER PROFILE</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"126\"/>\n        <source>Balanced</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"103\"/>\n        <source>Power Stretch</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"116\"/>\n        <source>Reduce the performance of your device to save on power</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"149\"/>\n        <source>Performance</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"90\"/>\n        <source>A power profile tweaks the way your system runs in order to prioritise performance or reduce power consumption.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"139\"/>\n        <source>Performance and power consumption will be average</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"162\"/>\n        <source>Performance will be increased at the cost of power consumption</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"196\"/>\n        <source>TIMEOUTS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"209\"/>\n        <source>Switch off the screen after</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"226\"/>\n        <source>If you leave your device idle for a period of time, we can automatically turn off the screen or suspend it for you.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"237\"/>\n        <location filename=\"../settings/powersettings.ui\" line=\"278\"/>\n        <source>seconds</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"242\"/>\n        <location filename=\"../settings/powersettings.ui\" line=\"283\"/>\n        <source>minutes</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"247\"/>\n        <location filename=\"../settings/powersettings.ui\" line=\"288\"/>\n        <source>hours</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"252\"/>\n        <location filename=\"../settings/powersettings.ui\" line=\"293\"/>\n        <source>never</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"260\"/>\n        <source>Suspend after</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"326\"/>\n        <source>When pressing the Power button</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"346\"/>\n        <source>Ask</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"351\"/>\n        <source>Power Off</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"356\"/>\n        <source>Reboot</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"361\"/>\n        <source>Suspend</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"366\"/>\n        <source>Hibernate</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"371\"/>\n        <source>Do Nothing</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"379\"/>\n        <source>After suspending, lock the screen</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"338\"/>\n        <source>BUTTONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.cpp\" line=\"141\"/>\n        <source>Performance mode unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.cpp\" line=\"142\"/>\n        <source>unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.cpp\" line=\"147\"/>\n        <source>Performance mode temporarily unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.cpp\" line=\"148\"/>\n        <source>temporarily unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.cpp\" line=\"159\"/>\n        <source>Performance mode is %1 because the device is on your lap.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.cpp\" line=\"160\"/>\n        <source>Performance mode is %1 because your device is getting warm.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.cpp\" line=\"161\"/>\n        <source>Performance mode is %1.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/PowerPlugin/translations/au_AU.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"au_AU\" sourcelanguage=\"en_US\">\n<context>\n    <name>EventHandler</name>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"99\"/>\n        <source>Unable to inhibit logind power management</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"122\"/>\n        <source>Caffeinated</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"125\"/>\n        <source>Caffeinate</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"136\"/>\n        <source>Decaffeinate</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"154\"/>\n        <source>Suspend</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../eventhandler.cpp\" line=\"155\"/>\n        <source>%n seconds</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n        </translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"233\"/>\n        <location filename=\"../eventhandler.cpp\" line=\"243\"/>\n        <location filename=\"../eventhandler.cpp\" line=\"253\"/>\n        <location filename=\"../eventhandler.cpp\" line=\"263\"/>\n        <source>Battery</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"244\"/>\n        <source>Charging</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"254\"/>\n        <source>Full</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"264\"/>\n        <source>Discharging</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>Plugin</name>\n    <message>\n        <location filename=\"../plugin.cpp\" line=\"90\"/>\n        <location filename=\"../plugin.cpp\" line=\"102\"/>\n        <source>Power Stretch</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../plugin.cpp\" line=\"106\"/>\n        <source>Disable Power Stretch</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>PowerSettings</name>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"35\"/>\n        <location filename=\"../settings/powersettings.cpp\" line=\"74\"/>\n        <source>Power</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"83\"/>\n        <source>POWER PROFILE</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"126\"/>\n        <source>Balanced</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"103\"/>\n        <source>Power Stretch</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"116\"/>\n        <source>Reduce the performance of your device to save on power</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"149\"/>\n        <source>Performance</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"90\"/>\n        <source>A power profile tweaks the way your system runs in order to prioritise performance or reduce power consumption.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"139\"/>\n        <source>Performance and power consumption will be average</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"162\"/>\n        <source>Performance will be increased at the cost of power consumption</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"196\"/>\n        <source>TIMEOUTS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"209\"/>\n        <source>Switch off the screen after</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"226\"/>\n        <source>If you leave your device idle for a period of time, we can automatically turn off the screen or suspend it for you.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"237\"/>\n        <location filename=\"../settings/powersettings.ui\" line=\"278\"/>\n        <source>seconds</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"242\"/>\n        <location filename=\"../settings/powersettings.ui\" line=\"283\"/>\n        <source>minutes</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"247\"/>\n        <location filename=\"../settings/powersettings.ui\" line=\"288\"/>\n        <source>hours</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"252\"/>\n        <location filename=\"../settings/powersettings.ui\" line=\"293\"/>\n        <source>never</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"260\"/>\n        <source>Suspend after</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"326\"/>\n        <source>When pressing the Power button</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"346\"/>\n        <source>Ask</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"351\"/>\n        <source>Power Off</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"356\"/>\n        <source>Reboot</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"361\"/>\n        <source>Suspend</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"366\"/>\n        <source>Hibernate</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"371\"/>\n        <source>Do Nothing</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"379\"/>\n        <source>After suspending, lock the screen</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"338\"/>\n        <source>BUTTONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.cpp\" line=\"141\"/>\n        <source>Performance mode unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.cpp\" line=\"142\"/>\n        <source>unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.cpp\" line=\"147\"/>\n        <source>Performance mode temporarily unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.cpp\" line=\"148\"/>\n        <source>temporarily unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.cpp\" line=\"159\"/>\n        <source>Performance mode is %1 because the device is on your lap.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.cpp\" line=\"160\"/>\n        <source>Performance mode is %1 because your device is getting warm.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.cpp\" line=\"161\"/>\n        <source>Performance mode is %1.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/PowerPlugin/translations/cy.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"cy\" sourcelanguage=\"en_US\">\n<context>\n    <name>EventHandler</name>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"99\"/>\n        <source>Unable to inhibit logind power management</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"122\"/>\n        <source>Caffeinated</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"125\"/>\n        <source>Caffeinate</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"136\"/>\n        <source>Decaffeinate</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"154\"/>\n        <source>Suspend</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../eventhandler.cpp\" line=\"155\"/>\n        <source>%n seconds</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n        </translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"233\"/>\n        <location filename=\"../eventhandler.cpp\" line=\"243\"/>\n        <location filename=\"../eventhandler.cpp\" line=\"253\"/>\n        <location filename=\"../eventhandler.cpp\" line=\"263\"/>\n        <source>Battery</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"244\"/>\n        <source>Charging</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"254\"/>\n        <source>Full</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"264\"/>\n        <source>Discharging</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>Plugin</name>\n    <message>\n        <location filename=\"../plugin.cpp\" line=\"90\"/>\n        <location filename=\"../plugin.cpp\" line=\"102\"/>\n        <source>Power Stretch</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../plugin.cpp\" line=\"106\"/>\n        <source>Disable Power Stretch</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>PowerSettings</name>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"35\"/>\n        <location filename=\"../settings/powersettings.cpp\" line=\"74\"/>\n        <source>Power</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"83\"/>\n        <source>POWER PROFILE</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"126\"/>\n        <source>Balanced</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"103\"/>\n        <source>Power Stretch</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"116\"/>\n        <source>Reduce the performance of your device to save on power</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"149\"/>\n        <source>Performance</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"90\"/>\n        <source>A power profile tweaks the way your system runs in order to prioritise performance or reduce power consumption.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"139\"/>\n        <source>Performance and power consumption will be average</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"162\"/>\n        <source>Performance will be increased at the cost of power consumption</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"196\"/>\n        <source>TIMEOUTS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"209\"/>\n        <source>Switch off the screen after</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"226\"/>\n        <source>If you leave your device idle for a period of time, we can automatically turn off the screen or suspend it for you.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"237\"/>\n        <location filename=\"../settings/powersettings.ui\" line=\"278\"/>\n        <source>seconds</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"242\"/>\n        <location filename=\"../settings/powersettings.ui\" line=\"283\"/>\n        <source>minutes</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"247\"/>\n        <location filename=\"../settings/powersettings.ui\" line=\"288\"/>\n        <source>hours</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"252\"/>\n        <location filename=\"../settings/powersettings.ui\" line=\"293\"/>\n        <source>never</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"260\"/>\n        <source>Suspend after</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"326\"/>\n        <source>When pressing the Power button</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"346\"/>\n        <source>Ask</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"351\"/>\n        <source>Power Off</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"356\"/>\n        <source>Reboot</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"361\"/>\n        <source>Suspend</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"366\"/>\n        <source>Hibernate</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"371\"/>\n        <source>Do Nothing</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"379\"/>\n        <source>After suspending, lock the screen</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"338\"/>\n        <source>BUTTONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.cpp\" line=\"141\"/>\n        <source>Performance mode unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.cpp\" line=\"142\"/>\n        <source>unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.cpp\" line=\"147\"/>\n        <source>Performance mode temporarily unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.cpp\" line=\"148\"/>\n        <source>temporarily unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.cpp\" line=\"159\"/>\n        <source>Performance mode is %1 because the device is on your lap.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.cpp\" line=\"160\"/>\n        <source>Performance mode is %1 because your device is getting warm.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.cpp\" line=\"161\"/>\n        <source>Performance mode is %1.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/PowerPlugin/translations/da.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"da\" sourcelanguage=\"en_US\">\n<context>\n    <name>EventHandler</name>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"99\"/>\n        <source>Unable to inhibit logind power management</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"122\"/>\n        <source>Caffeinated</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"125\"/>\n        <source>Caffeinate</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"136\"/>\n        <source>Decaffeinate</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"154\"/>\n        <source>Suspend</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../eventhandler.cpp\" line=\"155\"/>\n        <source>%n seconds</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n        </translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"233\"/>\n        <location filename=\"../eventhandler.cpp\" line=\"243\"/>\n        <location filename=\"../eventhandler.cpp\" line=\"253\"/>\n        <location filename=\"../eventhandler.cpp\" line=\"263\"/>\n        <source>Battery</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"244\"/>\n        <source>Charging</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"254\"/>\n        <source>Full</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"264\"/>\n        <source>Discharging</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>Plugin</name>\n    <message>\n        <location filename=\"../plugin.cpp\" line=\"90\"/>\n        <location filename=\"../plugin.cpp\" line=\"102\"/>\n        <source>Power Stretch</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../plugin.cpp\" line=\"106\"/>\n        <source>Disable Power Stretch</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>PowerSettings</name>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"35\"/>\n        <location filename=\"../settings/powersettings.cpp\" line=\"74\"/>\n        <source>Power</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"83\"/>\n        <source>POWER PROFILE</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"126\"/>\n        <source>Balanced</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"103\"/>\n        <source>Power Stretch</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"116\"/>\n        <source>Reduce the performance of your device to save on power</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"149\"/>\n        <source>Performance</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"90\"/>\n        <source>A power profile tweaks the way your system runs in order to prioritise performance or reduce power consumption.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"139\"/>\n        <source>Performance and power consumption will be average</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"162\"/>\n        <source>Performance will be increased at the cost of power consumption</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"196\"/>\n        <source>TIMEOUTS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"209\"/>\n        <source>Switch off the screen after</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"226\"/>\n        <source>If you leave your device idle for a period of time, we can automatically turn off the screen or suspend it for you.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"237\"/>\n        <location filename=\"../settings/powersettings.ui\" line=\"278\"/>\n        <source>seconds</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"242\"/>\n        <location filename=\"../settings/powersettings.ui\" line=\"283\"/>\n        <source>minutes</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"247\"/>\n        <location filename=\"../settings/powersettings.ui\" line=\"288\"/>\n        <source>hours</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"252\"/>\n        <location filename=\"../settings/powersettings.ui\" line=\"293\"/>\n        <source>never</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"260\"/>\n        <source>Suspend after</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"326\"/>\n        <source>When pressing the Power button</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"346\"/>\n        <source>Ask</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"351\"/>\n        <source>Power Off</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"356\"/>\n        <source>Reboot</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"361\"/>\n        <source>Suspend</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"366\"/>\n        <source>Hibernate</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"371\"/>\n        <source>Do Nothing</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"379\"/>\n        <source>After suspending, lock the screen</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"338\"/>\n        <source>BUTTONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.cpp\" line=\"141\"/>\n        <source>Performance mode unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.cpp\" line=\"142\"/>\n        <source>unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.cpp\" line=\"147\"/>\n        <source>Performance mode temporarily unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.cpp\" line=\"148\"/>\n        <source>temporarily unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.cpp\" line=\"159\"/>\n        <source>Performance mode is %1 because the device is on your lap.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.cpp\" line=\"160\"/>\n        <source>Performance mode is %1 because your device is getting warm.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.cpp\" line=\"161\"/>\n        <source>Performance mode is %1.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/PowerPlugin/translations/de.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"de\" sourcelanguage=\"en_US\">\n<context>\n    <name>EventHandler</name>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"99\"/>\n        <source>Unable to inhibit logind power management</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"122\"/>\n        <source>Caffeinated</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"125\"/>\n        <source>Caffeinate</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"136\"/>\n        <source>Decaffeinate</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"154\"/>\n        <source>Suspend</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../eventhandler.cpp\" line=\"155\"/>\n        <source>%n seconds</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n        </translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"233\"/>\n        <location filename=\"../eventhandler.cpp\" line=\"243\"/>\n        <location filename=\"../eventhandler.cpp\" line=\"253\"/>\n        <location filename=\"../eventhandler.cpp\" line=\"263\"/>\n        <source>Battery</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"244\"/>\n        <source>Charging</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"254\"/>\n        <source>Full</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"264\"/>\n        <source>Discharging</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>Plugin</name>\n    <message>\n        <location filename=\"../plugin.cpp\" line=\"90\"/>\n        <location filename=\"../plugin.cpp\" line=\"102\"/>\n        <source>Power Stretch</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../plugin.cpp\" line=\"106\"/>\n        <source>Disable Power Stretch</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>PowerSettings</name>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"35\"/>\n        <location filename=\"../settings/powersettings.cpp\" line=\"74\"/>\n        <source>Power</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"83\"/>\n        <source>POWER PROFILE</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"126\"/>\n        <source>Balanced</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"103\"/>\n        <source>Power Stretch</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"116\"/>\n        <source>Reduce the performance of your device to save on power</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"149\"/>\n        <source>Performance</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"90\"/>\n        <source>A power profile tweaks the way your system runs in order to prioritise performance or reduce power consumption.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"139\"/>\n        <source>Performance and power consumption will be average</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"162\"/>\n        <source>Performance will be increased at the cost of power consumption</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"196\"/>\n        <source>TIMEOUTS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"209\"/>\n        <source>Switch off the screen after</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"226\"/>\n        <source>If you leave your device idle for a period of time, we can automatically turn off the screen or suspend it for you.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"237\"/>\n        <location filename=\"../settings/powersettings.ui\" line=\"278\"/>\n        <source>seconds</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"242\"/>\n        <location filename=\"../settings/powersettings.ui\" line=\"283\"/>\n        <source>minutes</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"247\"/>\n        <location filename=\"../settings/powersettings.ui\" line=\"288\"/>\n        <source>hours</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"252\"/>\n        <location filename=\"../settings/powersettings.ui\" line=\"293\"/>\n        <source>never</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"260\"/>\n        <source>Suspend after</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"326\"/>\n        <source>When pressing the Power button</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"346\"/>\n        <source>Ask</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"351\"/>\n        <source>Power Off</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"356\"/>\n        <source>Reboot</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"361\"/>\n        <source>Suspend</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"366\"/>\n        <source>Hibernate</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"371\"/>\n        <source>Do Nothing</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"379\"/>\n        <source>After suspending, lock the screen</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"338\"/>\n        <source>BUTTONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.cpp\" line=\"141\"/>\n        <source>Performance mode unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.cpp\" line=\"142\"/>\n        <source>unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.cpp\" line=\"147\"/>\n        <source>Performance mode temporarily unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.cpp\" line=\"148\"/>\n        <source>temporarily unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.cpp\" line=\"159\"/>\n        <source>Performance mode is %1 because the device is on your lap.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.cpp\" line=\"160\"/>\n        <source>Performance mode is %1 because your device is getting warm.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.cpp\" line=\"161\"/>\n        <source>Performance mode is %1.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/PowerPlugin/translations/en_GB.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"en_GB\" sourcelanguage=\"en_US\">\n<context>\n    <name>EventHandler</name>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"99\"/>\n        <source>Unable to inhibit logind power management</source>\n        <translation>Unable to inhibit logind power management</translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"122\"/>\n        <source>Caffeinated</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"125\"/>\n        <source>Caffeinate</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"136\"/>\n        <source>Decaffeinate</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"154\"/>\n        <source>Suspend</source>\n        <translation>Suspend</translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../eventhandler.cpp\" line=\"155\"/>\n        <source>%n seconds</source>\n        <translation>\n            <numerusform>%n second</numerusform>\n            <numerusform>%n seconds</numerusform>\n        </translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"233\"/>\n        <location filename=\"../eventhandler.cpp\" line=\"243\"/>\n        <location filename=\"../eventhandler.cpp\" line=\"253\"/>\n        <location filename=\"../eventhandler.cpp\" line=\"263\"/>\n        <source>Battery</source>\n        <translation>Battery</translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"244\"/>\n        <source>Charging</source>\n        <translation>Charging</translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"254\"/>\n        <source>Full</source>\n        <translation>Full</translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"264\"/>\n        <source>Discharging</source>\n        <translation>Discharging</translation>\n    </message>\n</context>\n<context>\n    <name>Plugin</name>\n    <message>\n        <location filename=\"../plugin.cpp\" line=\"90\"/>\n        <location filename=\"../plugin.cpp\" line=\"102\"/>\n        <source>Power Stretch</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../plugin.cpp\" line=\"106\"/>\n        <source>Disable Power Stretch</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>PowerSettings</name>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"35\"/>\n        <location filename=\"../settings/powersettings.cpp\" line=\"74\"/>\n        <source>Power</source>\n        <translation>Power</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"196\"/>\n        <source>TIMEOUTS</source>\n        <translation>TIMEOUTS</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"209\"/>\n        <source>Switch off the screen after</source>\n        <translation>Switch off the screen after</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"237\"/>\n        <location filename=\"../settings/powersettings.ui\" line=\"278\"/>\n        <source>seconds</source>\n        <translation>seconds</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"242\"/>\n        <location filename=\"../settings/powersettings.ui\" line=\"283\"/>\n        <source>minutes</source>\n        <translation>minutes</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"247\"/>\n        <location filename=\"../settings/powersettings.ui\" line=\"288\"/>\n        <source>hours</source>\n        <translation>hours</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"252\"/>\n        <location filename=\"../settings/powersettings.ui\" line=\"293\"/>\n        <source>never</source>\n        <translation>never</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"226\"/>\n        <source>If you leave your device idle for a period of time, we can automatically turn off the screen or suspend it for you.</source>\n        <translation>If you leave your device idle for a period of time, we can automatically turn off the screen or suspend it for you.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"260\"/>\n        <source>Suspend after</source>\n        <translation>Suspend after</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"326\"/>\n        <source>When pressing the Power button</source>\n        <translation>When pressing the Power button</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"346\"/>\n        <source>Ask</source>\n        <translation>Ask</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"351\"/>\n        <source>Power Off</source>\n        <translation>Power Off</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"356\"/>\n        <source>Reboot</source>\n        <translation>Reboot</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"361\"/>\n        <source>Suspend</source>\n        <translation>Suspend</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"366\"/>\n        <source>Hibernate</source>\n        <translation>Hibernate</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"371\"/>\n        <source>Do Nothing</source>\n        <translation>Do Nothing</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"338\"/>\n        <source>BUTTONS</source>\n        <translation>BUTTONS</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"83\"/>\n        <source>POWER PROFILE</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"126\"/>\n        <source>Balanced</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"103\"/>\n        <source>Power Stretch</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"116\"/>\n        <source>Reduce the performance of your device to save on power</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"149\"/>\n        <source>Performance</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.cpp\" line=\"141\"/>\n        <source>Performance mode unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.cpp\" line=\"142\"/>\n        <source>unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.cpp\" line=\"160\"/>\n        <source>Performance mode is %1 because your device is getting warm.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.cpp\" line=\"161\"/>\n        <source>Performance mode is %1.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.cpp\" line=\"159\"/>\n        <source>Performance mode is %1 because the device is on your lap.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.cpp\" line=\"147\"/>\n        <source>Performance mode temporarily unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.cpp\" line=\"148\"/>\n        <source>temporarily unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"90\"/>\n        <source>A power profile tweaks the way your system runs in order to prioritise performance or reduce power consumption.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"139\"/>\n        <source>Performance and power consumption will be average</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"162\"/>\n        <source>Performance will be increased at the cost of power consumption</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"379\"/>\n        <source>After suspending, lock the screen</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/PowerPlugin/translations/en_US.qm",
    "content": "<d\u0018!\u001c`"
  },
  {
    "path": "plugins/PowerPlugin/translations/en_US.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" sourcelanguage=\"en_US\">\n<context>\n    <name>EventHandler</name>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"99\"/>\n        <source>Unable to inhibit logind power management</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"122\"/>\n        <source>Caffeinated</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"125\"/>\n        <source>Caffeinate</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"136\"/>\n        <source>Decaffeinate</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"154\"/>\n        <source>Suspend</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../eventhandler.cpp\" line=\"155\"/>\n        <source>%n seconds</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n        </translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"233\"/>\n        <location filename=\"../eventhandler.cpp\" line=\"243\"/>\n        <location filename=\"../eventhandler.cpp\" line=\"253\"/>\n        <location filename=\"../eventhandler.cpp\" line=\"263\"/>\n        <source>Battery</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"244\"/>\n        <source>Charging</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"254\"/>\n        <source>Full</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"264\"/>\n        <source>Discharging</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>Plugin</name>\n    <message>\n        <location filename=\"../plugin.cpp\" line=\"90\"/>\n        <location filename=\"../plugin.cpp\" line=\"102\"/>\n        <source>Power Stretch</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../plugin.cpp\" line=\"106\"/>\n        <source>Disable Power Stretch</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>PowerSettings</name>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"35\"/>\n        <location filename=\"../settings/powersettings.cpp\" line=\"74\"/>\n        <source>Power</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"83\"/>\n        <source>POWER PROFILE</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"126\"/>\n        <source>Balanced</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"103\"/>\n        <source>Power Stretch</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"116\"/>\n        <source>Reduce the performance of your device to save on power</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"149\"/>\n        <source>Performance</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"90\"/>\n        <source>A power profile tweaks the way your system runs in order to prioritise performance or reduce power consumption.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"139\"/>\n        <source>Performance and power consumption will be average</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"162\"/>\n        <source>Performance will be increased at the cost of power consumption</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"196\"/>\n        <source>TIMEOUTS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"209\"/>\n        <source>Switch off the screen after</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"226\"/>\n        <source>If you leave your device idle for a period of time, we can automatically turn off the screen or suspend it for you.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"237\"/>\n        <location filename=\"../settings/powersettings.ui\" line=\"278\"/>\n        <source>seconds</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"242\"/>\n        <location filename=\"../settings/powersettings.ui\" line=\"283\"/>\n        <source>minutes</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"247\"/>\n        <location filename=\"../settings/powersettings.ui\" line=\"288\"/>\n        <source>hours</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"252\"/>\n        <location filename=\"../settings/powersettings.ui\" line=\"293\"/>\n        <source>never</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"260\"/>\n        <source>Suspend after</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"326\"/>\n        <source>When pressing the Power button</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"346\"/>\n        <source>Ask</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"351\"/>\n        <source>Power Off</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"356\"/>\n        <source>Reboot</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"361\"/>\n        <source>Suspend</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"366\"/>\n        <source>Hibernate</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"371\"/>\n        <source>Do Nothing</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"379\"/>\n        <source>After suspending, lock the screen</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"338\"/>\n        <source>BUTTONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.cpp\" line=\"141\"/>\n        <source>Performance mode unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.cpp\" line=\"142\"/>\n        <source>unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.cpp\" line=\"147\"/>\n        <source>Performance mode temporarily unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.cpp\" line=\"148\"/>\n        <source>temporarily unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.cpp\" line=\"159\"/>\n        <source>Performance mode is %1 because the device is on your lap.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.cpp\" line=\"160\"/>\n        <source>Performance mode is %1 because your device is getting warm.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.cpp\" line=\"161\"/>\n        <source>Performance mode is %1.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/PowerPlugin/translations/es.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"es\" sourcelanguage=\"en_US\">\n<context>\n    <name>EventHandler</name>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"99\"/>\n        <source>Unable to inhibit logind power management</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"122\"/>\n        <source>Caffeinated</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"125\"/>\n        <source>Caffeinate</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"136\"/>\n        <source>Decaffeinate</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"154\"/>\n        <source>Suspend</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../eventhandler.cpp\" line=\"155\"/>\n        <source>%n seconds</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n        </translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"233\"/>\n        <location filename=\"../eventhandler.cpp\" line=\"243\"/>\n        <location filename=\"../eventhandler.cpp\" line=\"253\"/>\n        <location filename=\"../eventhandler.cpp\" line=\"263\"/>\n        <source>Battery</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"244\"/>\n        <source>Charging</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"254\"/>\n        <source>Full</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"264\"/>\n        <source>Discharging</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>Plugin</name>\n    <message>\n        <location filename=\"../plugin.cpp\" line=\"90\"/>\n        <location filename=\"../plugin.cpp\" line=\"102\"/>\n        <source>Power Stretch</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../plugin.cpp\" line=\"106\"/>\n        <source>Disable Power Stretch</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>PowerSettings</name>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"35\"/>\n        <location filename=\"../settings/powersettings.cpp\" line=\"74\"/>\n        <source>Power</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"83\"/>\n        <source>POWER PROFILE</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"126\"/>\n        <source>Balanced</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"103\"/>\n        <source>Power Stretch</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"116\"/>\n        <source>Reduce the performance of your device to save on power</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"149\"/>\n        <source>Performance</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"90\"/>\n        <source>A power profile tweaks the way your system runs in order to prioritise performance or reduce power consumption.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"139\"/>\n        <source>Performance and power consumption will be average</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"162\"/>\n        <source>Performance will be increased at the cost of power consumption</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"196\"/>\n        <source>TIMEOUTS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"209\"/>\n        <source>Switch off the screen after</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"226\"/>\n        <source>If you leave your device idle for a period of time, we can automatically turn off the screen or suspend it for you.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"237\"/>\n        <location filename=\"../settings/powersettings.ui\" line=\"278\"/>\n        <source>seconds</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"242\"/>\n        <location filename=\"../settings/powersettings.ui\" line=\"283\"/>\n        <source>minutes</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"247\"/>\n        <location filename=\"../settings/powersettings.ui\" line=\"288\"/>\n        <source>hours</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"252\"/>\n        <location filename=\"../settings/powersettings.ui\" line=\"293\"/>\n        <source>never</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"260\"/>\n        <source>Suspend after</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"326\"/>\n        <source>When pressing the Power button</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"346\"/>\n        <source>Ask</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"351\"/>\n        <source>Power Off</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"356\"/>\n        <source>Reboot</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"361\"/>\n        <source>Suspend</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"366\"/>\n        <source>Hibernate</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"371\"/>\n        <source>Do Nothing</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"379\"/>\n        <source>After suspending, lock the screen</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"338\"/>\n        <source>BUTTONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.cpp\" line=\"141\"/>\n        <source>Performance mode unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.cpp\" line=\"142\"/>\n        <source>unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.cpp\" line=\"147\"/>\n        <source>Performance mode temporarily unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.cpp\" line=\"148\"/>\n        <source>temporarily unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.cpp\" line=\"159\"/>\n        <source>Performance mode is %1 because the device is on your lap.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.cpp\" line=\"160\"/>\n        <source>Performance mode is %1 because your device is getting warm.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.cpp\" line=\"161\"/>\n        <source>Performance mode is %1.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/PowerPlugin/translations/es_VE.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"es_VE\" sourcelanguage=\"en_US\">\n<context>\n    <name>EventHandler</name>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"99\"/>\n        <source>Unable to inhibit logind power management</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"122\"/>\n        <source>Caffeinated</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"125\"/>\n        <source>Caffeinate</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"136\"/>\n        <source>Decaffeinate</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"154\"/>\n        <source>Suspend</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../eventhandler.cpp\" line=\"155\"/>\n        <source>%n seconds</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n        </translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"233\"/>\n        <location filename=\"../eventhandler.cpp\" line=\"243\"/>\n        <location filename=\"../eventhandler.cpp\" line=\"253\"/>\n        <location filename=\"../eventhandler.cpp\" line=\"263\"/>\n        <source>Battery</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"244\"/>\n        <source>Charging</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"254\"/>\n        <source>Full</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"264\"/>\n        <source>Discharging</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>Plugin</name>\n    <message>\n        <location filename=\"../plugin.cpp\" line=\"90\"/>\n        <location filename=\"../plugin.cpp\" line=\"102\"/>\n        <source>Power Stretch</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../plugin.cpp\" line=\"106\"/>\n        <source>Disable Power Stretch</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>PowerSettings</name>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"35\"/>\n        <location filename=\"../settings/powersettings.cpp\" line=\"74\"/>\n        <source>Power</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"83\"/>\n        <source>POWER PROFILE</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"126\"/>\n        <source>Balanced</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"103\"/>\n        <source>Power Stretch</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"116\"/>\n        <source>Reduce the performance of your device to save on power</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"149\"/>\n        <source>Performance</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"90\"/>\n        <source>A power profile tweaks the way your system runs in order to prioritise performance or reduce power consumption.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"139\"/>\n        <source>Performance and power consumption will be average</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"162\"/>\n        <source>Performance will be increased at the cost of power consumption</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"196\"/>\n        <source>TIMEOUTS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"209\"/>\n        <source>Switch off the screen after</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"226\"/>\n        <source>If you leave your device idle for a period of time, we can automatically turn off the screen or suspend it for you.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"237\"/>\n        <location filename=\"../settings/powersettings.ui\" line=\"278\"/>\n        <source>seconds</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"242\"/>\n        <location filename=\"../settings/powersettings.ui\" line=\"283\"/>\n        <source>minutes</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"247\"/>\n        <location filename=\"../settings/powersettings.ui\" line=\"288\"/>\n        <source>hours</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"252\"/>\n        <location filename=\"../settings/powersettings.ui\" line=\"293\"/>\n        <source>never</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"260\"/>\n        <source>Suspend after</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"326\"/>\n        <source>When pressing the Power button</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"346\"/>\n        <source>Ask</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"351\"/>\n        <source>Power Off</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"356\"/>\n        <source>Reboot</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"361\"/>\n        <source>Suspend</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"366\"/>\n        <source>Hibernate</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"371\"/>\n        <source>Do Nothing</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"379\"/>\n        <source>After suspending, lock the screen</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"338\"/>\n        <source>BUTTONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.cpp\" line=\"141\"/>\n        <source>Performance mode unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.cpp\" line=\"142\"/>\n        <source>unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.cpp\" line=\"147\"/>\n        <source>Performance mode temporarily unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.cpp\" line=\"148\"/>\n        <source>temporarily unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.cpp\" line=\"159\"/>\n        <source>Performance mode is %1 because the device is on your lap.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.cpp\" line=\"160\"/>\n        <source>Performance mode is %1 because your device is getting warm.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.cpp\" line=\"161\"/>\n        <source>Performance mode is %1.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/PowerPlugin/translations/id_ID.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"id_ID\" sourcelanguage=\"en_US\">\n<context>\n    <name>EventHandler</name>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"99\"/>\n        <source>Unable to inhibit logind power management</source>\n        <translation>Tidak dapat menghalangi manajemen daya dari logind</translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"122\"/>\n        <source>Caffeinated</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"125\"/>\n        <source>Caffeinate</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"136\"/>\n        <source>Decaffeinate</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"154\"/>\n        <source>Suspend</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../eventhandler.cpp\" line=\"155\"/>\n        <source>%n seconds</source>\n        <translation>\n            <numerusform>%n detik</numerusform>\n        </translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"233\"/>\n        <location filename=\"../eventhandler.cpp\" line=\"243\"/>\n        <location filename=\"../eventhandler.cpp\" line=\"253\"/>\n        <location filename=\"../eventhandler.cpp\" line=\"263\"/>\n        <source>Battery</source>\n        <translation>Baterai</translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"244\"/>\n        <source>Charging</source>\n        <translation>Mengisi</translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"254\"/>\n        <source>Full</source>\n        <translation>Penuh</translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"264\"/>\n        <source>Discharging</source>\n        <translation>Discharge</translation>\n    </message>\n</context>\n<context>\n    <name>Plugin</name>\n    <message>\n        <location filename=\"../plugin.cpp\" line=\"90\"/>\n        <location filename=\"../plugin.cpp\" line=\"102\"/>\n        <source>Power Stretch</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../plugin.cpp\" line=\"106\"/>\n        <source>Disable Power Stretch</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>PowerSettings</name>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"35\"/>\n        <location filename=\"../settings/powersettings.cpp\" line=\"74\"/>\n        <source>Power</source>\n        <translation>Daya</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"196\"/>\n        <source>TIMEOUTS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"209\"/>\n        <source>Switch off the screen after</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"237\"/>\n        <location filename=\"../settings/powersettings.ui\" line=\"278\"/>\n        <source>seconds</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"242\"/>\n        <location filename=\"../settings/powersettings.ui\" line=\"283\"/>\n        <source>minutes</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"247\"/>\n        <location filename=\"../settings/powersettings.ui\" line=\"288\"/>\n        <source>hours</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"252\"/>\n        <location filename=\"../settings/powersettings.ui\" line=\"293\"/>\n        <source>never</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"226\"/>\n        <source>If you leave your device idle for a period of time, we can automatically turn off the screen or suspend it for you.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"260\"/>\n        <source>Suspend after</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"326\"/>\n        <source>When pressing the Power button</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"346\"/>\n        <source>Ask</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"351\"/>\n        <source>Power Off</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"356\"/>\n        <source>Reboot</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"361\"/>\n        <source>Suspend</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"366\"/>\n        <source>Hibernate</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"371\"/>\n        <source>Do Nothing</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"338\"/>\n        <source>BUTTONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"83\"/>\n        <source>POWER PROFILE</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"126\"/>\n        <source>Balanced</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"103\"/>\n        <source>Power Stretch</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"116\"/>\n        <source>Reduce the performance of your device to save on power</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"149\"/>\n        <source>Performance</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.cpp\" line=\"141\"/>\n        <source>Performance mode unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.cpp\" line=\"142\"/>\n        <source>unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.cpp\" line=\"160\"/>\n        <source>Performance mode is %1 because your device is getting warm.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.cpp\" line=\"161\"/>\n        <source>Performance mode is %1.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.cpp\" line=\"159\"/>\n        <source>Performance mode is %1 because the device is on your lap.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.cpp\" line=\"147\"/>\n        <source>Performance mode temporarily unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.cpp\" line=\"148\"/>\n        <source>temporarily unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"90\"/>\n        <source>A power profile tweaks the way your system runs in order to prioritise performance or reduce power consumption.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"139\"/>\n        <source>Performance and power consumption will be average</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"162\"/>\n        <source>Performance will be increased at the cost of power consumption</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"379\"/>\n        <source>After suspending, lock the screen</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/PowerPlugin/translations/nl.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"nl\" sourcelanguage=\"en_US\">\n<context>\n    <name>EventHandler</name>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"99\"/>\n        <source>Unable to inhibit logind power management</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"122\"/>\n        <source>Caffeinated</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"125\"/>\n        <source>Caffeinate</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"136\"/>\n        <source>Decaffeinate</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"154\"/>\n        <source>Suspend</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../eventhandler.cpp\" line=\"155\"/>\n        <source>%n seconds</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n        </translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"233\"/>\n        <location filename=\"../eventhandler.cpp\" line=\"243\"/>\n        <location filename=\"../eventhandler.cpp\" line=\"253\"/>\n        <location filename=\"../eventhandler.cpp\" line=\"263\"/>\n        <source>Battery</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"244\"/>\n        <source>Charging</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"254\"/>\n        <source>Full</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"264\"/>\n        <source>Discharging</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>Plugin</name>\n    <message>\n        <location filename=\"../plugin.cpp\" line=\"90\"/>\n        <location filename=\"../plugin.cpp\" line=\"102\"/>\n        <source>Power Stretch</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../plugin.cpp\" line=\"106\"/>\n        <source>Disable Power Stretch</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>PowerSettings</name>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"35\"/>\n        <location filename=\"../settings/powersettings.cpp\" line=\"74\"/>\n        <source>Power</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"83\"/>\n        <source>POWER PROFILE</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"126\"/>\n        <source>Balanced</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"103\"/>\n        <source>Power Stretch</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"116\"/>\n        <source>Reduce the performance of your device to save on power</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"149\"/>\n        <source>Performance</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"90\"/>\n        <source>A power profile tweaks the way your system runs in order to prioritise performance or reduce power consumption.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"139\"/>\n        <source>Performance and power consumption will be average</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"162\"/>\n        <source>Performance will be increased at the cost of power consumption</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"196\"/>\n        <source>TIMEOUTS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"209\"/>\n        <source>Switch off the screen after</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"226\"/>\n        <source>If you leave your device idle for a period of time, we can automatically turn off the screen or suspend it for you.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"237\"/>\n        <location filename=\"../settings/powersettings.ui\" line=\"278\"/>\n        <source>seconds</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"242\"/>\n        <location filename=\"../settings/powersettings.ui\" line=\"283\"/>\n        <source>minutes</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"247\"/>\n        <location filename=\"../settings/powersettings.ui\" line=\"288\"/>\n        <source>hours</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"252\"/>\n        <location filename=\"../settings/powersettings.ui\" line=\"293\"/>\n        <source>never</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"260\"/>\n        <source>Suspend after</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"326\"/>\n        <source>When pressing the Power button</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"346\"/>\n        <source>Ask</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"351\"/>\n        <source>Power Off</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"356\"/>\n        <source>Reboot</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"361\"/>\n        <source>Suspend</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"366\"/>\n        <source>Hibernate</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"371\"/>\n        <source>Do Nothing</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"379\"/>\n        <source>After suspending, lock the screen</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"338\"/>\n        <source>BUTTONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.cpp\" line=\"141\"/>\n        <source>Performance mode unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.cpp\" line=\"142\"/>\n        <source>unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.cpp\" line=\"147\"/>\n        <source>Performance mode temporarily unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.cpp\" line=\"148\"/>\n        <source>temporarily unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.cpp\" line=\"159\"/>\n        <source>Performance mode is %1 because the device is on your lap.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.cpp\" line=\"160\"/>\n        <source>Performance mode is %1 because your device is getting warm.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.cpp\" line=\"161\"/>\n        <source>Performance mode is %1.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/PowerPlugin/translations/pt_BR.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"pt_BR\" sourcelanguage=\"en_US\">\n<context>\n    <name>EventHandler</name>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"99\"/>\n        <source>Unable to inhibit logind power management</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"122\"/>\n        <source>Caffeinated</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"125\"/>\n        <source>Caffeinate</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"136\"/>\n        <source>Decaffeinate</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"154\"/>\n        <source>Suspend</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../eventhandler.cpp\" line=\"155\"/>\n        <source>%n seconds</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n        </translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"233\"/>\n        <location filename=\"../eventhandler.cpp\" line=\"243\"/>\n        <location filename=\"../eventhandler.cpp\" line=\"253\"/>\n        <location filename=\"../eventhandler.cpp\" line=\"263\"/>\n        <source>Battery</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"244\"/>\n        <source>Charging</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"254\"/>\n        <source>Full</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"264\"/>\n        <source>Discharging</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>Plugin</name>\n    <message>\n        <location filename=\"../plugin.cpp\" line=\"90\"/>\n        <location filename=\"../plugin.cpp\" line=\"102\"/>\n        <source>Power Stretch</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../plugin.cpp\" line=\"106\"/>\n        <source>Disable Power Stretch</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>PowerSettings</name>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"35\"/>\n        <location filename=\"../settings/powersettings.cpp\" line=\"74\"/>\n        <source>Power</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"83\"/>\n        <source>POWER PROFILE</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"126\"/>\n        <source>Balanced</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"103\"/>\n        <source>Power Stretch</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"116\"/>\n        <source>Reduce the performance of your device to save on power</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"149\"/>\n        <source>Performance</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"90\"/>\n        <source>A power profile tweaks the way your system runs in order to prioritise performance or reduce power consumption.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"139\"/>\n        <source>Performance and power consumption will be average</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"162\"/>\n        <source>Performance will be increased at the cost of power consumption</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"196\"/>\n        <source>TIMEOUTS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"209\"/>\n        <source>Switch off the screen after</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"226\"/>\n        <source>If you leave your device idle for a period of time, we can automatically turn off the screen or suspend it for you.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"237\"/>\n        <location filename=\"../settings/powersettings.ui\" line=\"278\"/>\n        <source>seconds</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"242\"/>\n        <location filename=\"../settings/powersettings.ui\" line=\"283\"/>\n        <source>minutes</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"247\"/>\n        <location filename=\"../settings/powersettings.ui\" line=\"288\"/>\n        <source>hours</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"252\"/>\n        <location filename=\"../settings/powersettings.ui\" line=\"293\"/>\n        <source>never</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"260\"/>\n        <source>Suspend after</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"326\"/>\n        <source>When pressing the Power button</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"346\"/>\n        <source>Ask</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"351\"/>\n        <source>Power Off</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"356\"/>\n        <source>Reboot</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"361\"/>\n        <source>Suspend</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"366\"/>\n        <source>Hibernate</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"371\"/>\n        <source>Do Nothing</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"379\"/>\n        <source>After suspending, lock the screen</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"338\"/>\n        <source>BUTTONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.cpp\" line=\"141\"/>\n        <source>Performance mode unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.cpp\" line=\"142\"/>\n        <source>unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.cpp\" line=\"147\"/>\n        <source>Performance mode temporarily unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.cpp\" line=\"148\"/>\n        <source>temporarily unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.cpp\" line=\"159\"/>\n        <source>Performance mode is %1 because the device is on your lap.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.cpp\" line=\"160\"/>\n        <source>Performance mode is %1 because your device is getting warm.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.cpp\" line=\"161\"/>\n        <source>Performance mode is %1.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/PowerPlugin/translations/ro_RO.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"ro_RO\" sourcelanguage=\"en_US\">\n<context>\n    <name>EventHandler</name>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"99\"/>\n        <source>Unable to inhibit logind power management</source>\n        <translation>Nu s-a putut opri gestionarea de curent logind</translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"122\"/>\n        <source>Caffeinated</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"125\"/>\n        <source>Caffeinate</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"136\"/>\n        <source>Decaffeinate</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"154\"/>\n        <source>Suspend</source>\n        <translation>Suspendare</translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../eventhandler.cpp\" line=\"155\"/>\n        <source>%n seconds</source>\n        <translation>\n            <numerusform>O secundă</numerusform>\n            <numerusform>%n secunde</numerusform>\n            <numerusform>%n de secunde</numerusform>\n        </translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"233\"/>\n        <location filename=\"../eventhandler.cpp\" line=\"243\"/>\n        <location filename=\"../eventhandler.cpp\" line=\"253\"/>\n        <location filename=\"../eventhandler.cpp\" line=\"263\"/>\n        <source>Battery</source>\n        <translation>Baterie</translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"244\"/>\n        <source>Charging</source>\n        <translation>Se încarcă</translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"254\"/>\n        <source>Full</source>\n        <translation>Încărcat complet</translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"264\"/>\n        <source>Discharging</source>\n        <translation>Se descarcă</translation>\n    </message>\n</context>\n<context>\n    <name>Plugin</name>\n    <message>\n        <location filename=\"../plugin.cpp\" line=\"90\"/>\n        <location filename=\"../plugin.cpp\" line=\"102\"/>\n        <source>Power Stretch</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../plugin.cpp\" line=\"106\"/>\n        <source>Disable Power Stretch</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>PowerSettings</name>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"35\"/>\n        <location filename=\"../settings/powersettings.cpp\" line=\"74\"/>\n        <source>Power</source>\n        <translation>Energie</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"196\"/>\n        <source>TIMEOUTS</source>\n        <translation>OPRIRE AUTOMATĂ</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"209\"/>\n        <source>Switch off the screen after</source>\n        <translation>Închide ecranul după</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"237\"/>\n        <location filename=\"../settings/powersettings.ui\" line=\"278\"/>\n        <source>seconds</source>\n        <translation>secunde</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"242\"/>\n        <location filename=\"../settings/powersettings.ui\" line=\"283\"/>\n        <source>minutes</source>\n        <translation>minute</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"247\"/>\n        <location filename=\"../settings/powersettings.ui\" line=\"288\"/>\n        <source>hours</source>\n        <translation>ore</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"252\"/>\n        <location filename=\"../settings/powersettings.ui\" line=\"293\"/>\n        <source>never</source>\n        <translation>niciodată</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"226\"/>\n        <source>If you leave your device idle for a period of time, we can automatically turn off the screen or suspend it for you.</source>\n        <translation>În lipsa activității, putem opri ecranul sau intra în modul de suspendare automat pentru dumneavoastră.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"260\"/>\n        <source>Suspend after</source>\n        <translation>Intră în modul de suspendare după</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"326\"/>\n        <source>When pressing the Power button</source>\n        <translation>Când se apasă butonul de oprire</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"346\"/>\n        <source>Ask</source>\n        <translation>Întreabă</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"351\"/>\n        <source>Power Off</source>\n        <translation>Oprire</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"356\"/>\n        <source>Reboot</source>\n        <translation>Repronire</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"361\"/>\n        <source>Suspend</source>\n        <translation>Suspendare</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"366\"/>\n        <source>Hibernate</source>\n        <translation>Hibernare</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"371\"/>\n        <source>Do Nothing</source>\n        <translation>Nimic</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"338\"/>\n        <source>BUTTONS</source>\n        <translation>BUTOANE</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"83\"/>\n        <source>POWER PROFILE</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"126\"/>\n        <source>Balanced</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"103\"/>\n        <source>Power Stretch</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"116\"/>\n        <source>Reduce the performance of your device to save on power</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"149\"/>\n        <source>Performance</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.cpp\" line=\"141\"/>\n        <source>Performance mode unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.cpp\" line=\"142\"/>\n        <source>unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.cpp\" line=\"160\"/>\n        <source>Performance mode is %1 because your device is getting warm.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.cpp\" line=\"161\"/>\n        <source>Performance mode is %1.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.cpp\" line=\"159\"/>\n        <source>Performance mode is %1 because the device is on your lap.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.cpp\" line=\"147\"/>\n        <source>Performance mode temporarily unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.cpp\" line=\"148\"/>\n        <source>temporarily unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"90\"/>\n        <source>A power profile tweaks the way your system runs in order to prioritise performance or reduce power consumption.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"139\"/>\n        <source>Performance and power consumption will be average</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"162\"/>\n        <source>Performance will be increased at the cost of power consumption</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"379\"/>\n        <source>After suspending, lock the screen</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/PowerPlugin/translations/sv.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"sv\" sourcelanguage=\"en_US\">\n<context>\n    <name>EventHandler</name>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"99\"/>\n        <source>Unable to inhibit logind power management</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"122\"/>\n        <source>Caffeinated</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"125\"/>\n        <source>Caffeinate</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"136\"/>\n        <source>Decaffeinate</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"154\"/>\n        <source>Suspend</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../eventhandler.cpp\" line=\"155\"/>\n        <source>%n seconds</source>\n        <translation type=\"unfinished\">\n            <numerusform></numerusform>\n            <numerusform></numerusform>\n        </translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"233\"/>\n        <location filename=\"../eventhandler.cpp\" line=\"243\"/>\n        <location filename=\"../eventhandler.cpp\" line=\"253\"/>\n        <location filename=\"../eventhandler.cpp\" line=\"263\"/>\n        <source>Battery</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"244\"/>\n        <source>Charging</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"254\"/>\n        <source>Full</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"264\"/>\n        <source>Discharging</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>Plugin</name>\n    <message>\n        <location filename=\"../plugin.cpp\" line=\"90\"/>\n        <location filename=\"../plugin.cpp\" line=\"102\"/>\n        <source>Power Stretch</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../plugin.cpp\" line=\"106\"/>\n        <source>Disable Power Stretch</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>PowerSettings</name>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"35\"/>\n        <location filename=\"../settings/powersettings.cpp\" line=\"74\"/>\n        <source>Power</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"83\"/>\n        <source>POWER PROFILE</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"126\"/>\n        <source>Balanced</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"103\"/>\n        <source>Power Stretch</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"116\"/>\n        <source>Reduce the performance of your device to save on power</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"149\"/>\n        <source>Performance</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"90\"/>\n        <source>A power profile tweaks the way your system runs in order to prioritise performance or reduce power consumption.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"139\"/>\n        <source>Performance and power consumption will be average</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"162\"/>\n        <source>Performance will be increased at the cost of power consumption</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"196\"/>\n        <source>TIMEOUTS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"209\"/>\n        <source>Switch off the screen after</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"226\"/>\n        <source>If you leave your device idle for a period of time, we can automatically turn off the screen or suspend it for you.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"237\"/>\n        <location filename=\"../settings/powersettings.ui\" line=\"278\"/>\n        <source>seconds</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"242\"/>\n        <location filename=\"../settings/powersettings.ui\" line=\"283\"/>\n        <source>minutes</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"247\"/>\n        <location filename=\"../settings/powersettings.ui\" line=\"288\"/>\n        <source>hours</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"252\"/>\n        <location filename=\"../settings/powersettings.ui\" line=\"293\"/>\n        <source>never</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"260\"/>\n        <source>Suspend after</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"326\"/>\n        <source>When pressing the Power button</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"346\"/>\n        <source>Ask</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"351\"/>\n        <source>Power Off</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"356\"/>\n        <source>Reboot</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"361\"/>\n        <source>Suspend</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"366\"/>\n        <source>Hibernate</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"371\"/>\n        <source>Do Nothing</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"379\"/>\n        <source>After suspending, lock the screen</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"338\"/>\n        <source>BUTTONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.cpp\" line=\"141\"/>\n        <source>Performance mode unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.cpp\" line=\"142\"/>\n        <source>unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.cpp\" line=\"147\"/>\n        <source>Performance mode temporarily unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.cpp\" line=\"148\"/>\n        <source>temporarily unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.cpp\" line=\"159\"/>\n        <source>Performance mode is %1 because the device is on your lap.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.cpp\" line=\"160\"/>\n        <source>Performance mode is %1 because your device is getting warm.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.cpp\" line=\"161\"/>\n        <source>Performance mode is %1.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/PowerPlugin/translations/tr_TR.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"tr_TR\" sourcelanguage=\"en_US\">\n<context>\n    <name>EventHandler</name>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"99\"/>\n        <source>Unable to inhibit logind power management</source>\n        <translation>Logind güç yönetimi engellenemiyor</translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"122\"/>\n        <source>Caffeinated</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"125\"/>\n        <source>Caffeinate</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"136\"/>\n        <source>Decaffeinate</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"154\"/>\n        <source>Suspend</source>\n        <translation>Askıya al</translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../eventhandler.cpp\" line=\"155\"/>\n        <source>%n seconds</source>\n        <translation>\n            <numerusform>%n saniye</numerusform>\n        </translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"233\"/>\n        <location filename=\"../eventhandler.cpp\" line=\"243\"/>\n        <location filename=\"../eventhandler.cpp\" line=\"253\"/>\n        <location filename=\"../eventhandler.cpp\" line=\"263\"/>\n        <source>Battery</source>\n        <translation>Pil</translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"244\"/>\n        <source>Charging</source>\n        <translation>Doluyor</translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"254\"/>\n        <source>Full</source>\n        <translation>Tam</translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"264\"/>\n        <source>Discharging</source>\n        <translation>Taburcu</translation>\n    </message>\n</context>\n<context>\n    <name>Plugin</name>\n    <message>\n        <location filename=\"../plugin.cpp\" line=\"90\"/>\n        <location filename=\"../plugin.cpp\" line=\"102\"/>\n        <source>Power Stretch</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../plugin.cpp\" line=\"106\"/>\n        <source>Disable Power Stretch</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>PowerSettings</name>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"35\"/>\n        <location filename=\"../settings/powersettings.cpp\" line=\"74\"/>\n        <source>Power</source>\n        <translation>Güç</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"196\"/>\n        <source>TIMEOUTS</source>\n        <translation>ZAMAN AŞIMI</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"209\"/>\n        <source>Switch off the screen after</source>\n        <translation>Sonra ekranı kapatın</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"237\"/>\n        <location filename=\"../settings/powersettings.ui\" line=\"278\"/>\n        <source>seconds</source>\n        <translation>saniye</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"242\"/>\n        <location filename=\"../settings/powersettings.ui\" line=\"283\"/>\n        <source>minutes</source>\n        <translation>dakika</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"247\"/>\n        <location filename=\"../settings/powersettings.ui\" line=\"288\"/>\n        <source>hours</source>\n        <translation>saatler</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"252\"/>\n        <location filename=\"../settings/powersettings.ui\" line=\"293\"/>\n        <source>never</source>\n        <translation>asla</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"226\"/>\n        <source>If you leave your device idle for a period of time, we can automatically turn off the screen or suspend it for you.</source>\n        <translation>Cihazınızı bir süre boşta bırakırsanız, sizin için ekranı otomatik olarak kapatabilir veya askıya alabiliriz.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"260\"/>\n        <source>Suspend after</source>\n        <translation>Sonra askıya al</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"326\"/>\n        <source>When pressing the Power button</source>\n        <translation>Güç düğmesine basıldığında</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"346\"/>\n        <source>Ask</source>\n        <translation>Sor</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"351\"/>\n        <source>Power Off</source>\n        <translation>Kapat</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"356\"/>\n        <source>Reboot</source>\n        <translation>Yeniden başlat</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"361\"/>\n        <source>Suspend</source>\n        <translation>Askıya al</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"366\"/>\n        <source>Hibernate</source>\n        <translation>Hazırda beklet</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"371\"/>\n        <source>Do Nothing</source>\n        <translation>Hiçbir şey yapma</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"338\"/>\n        <source>BUTTONS</source>\n        <translation>BUTONLAR</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"83\"/>\n        <source>POWER PROFILE</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"126\"/>\n        <source>Balanced</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"103\"/>\n        <source>Power Stretch</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"116\"/>\n        <source>Reduce the performance of your device to save on power</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"149\"/>\n        <source>Performance</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.cpp\" line=\"141\"/>\n        <source>Performance mode unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.cpp\" line=\"142\"/>\n        <source>unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.cpp\" line=\"160\"/>\n        <source>Performance mode is %1 because your device is getting warm.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.cpp\" line=\"161\"/>\n        <source>Performance mode is %1.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.cpp\" line=\"159\"/>\n        <source>Performance mode is %1 because the device is on your lap.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.cpp\" line=\"147\"/>\n        <source>Performance mode temporarily unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.cpp\" line=\"148\"/>\n        <source>temporarily unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"90\"/>\n        <source>A power profile tweaks the way your system runs in order to prioritise performance or reduce power consumption.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"139\"/>\n        <source>Performance and power consumption will be average</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"162\"/>\n        <source>Performance will be increased at the cost of power consumption</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"379\"/>\n        <source>After suspending, lock the screen</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/PowerPlugin/translations/vi.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"vi\" sourcelanguage=\"en_US\">\n<context>\n    <name>EventHandler</name>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"99\"/>\n        <source>Unable to inhibit logind power management</source>\n        <translation>Không thể ngăn cản việc quản lý điện logind</translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"122\"/>\n        <source>Caffeinated</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"125\"/>\n        <source>Caffeinate</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"136\"/>\n        <source>Decaffeinate</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"154\"/>\n        <source>Suspend</source>\n        <translation>Tạm dừng</translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../eventhandler.cpp\" line=\"155\"/>\n        <source>%n seconds</source>\n        <translation>\n            <numerusform>%n giây</numerusform>\n        </translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"233\"/>\n        <location filename=\"../eventhandler.cpp\" line=\"243\"/>\n        <location filename=\"../eventhandler.cpp\" line=\"253\"/>\n        <location filename=\"../eventhandler.cpp\" line=\"263\"/>\n        <source>Battery</source>\n        <translation>Pin</translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"244\"/>\n        <source>Charging</source>\n        <translation>Đang sạc</translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"254\"/>\n        <source>Full</source>\n        <translation>Đã đầy</translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"264\"/>\n        <source>Discharging</source>\n        <translation>Đang xả</translation>\n    </message>\n</context>\n<context>\n    <name>Plugin</name>\n    <message>\n        <location filename=\"../plugin.cpp\" line=\"90\"/>\n        <location filename=\"../plugin.cpp\" line=\"102\"/>\n        <source>Power Stretch</source>\n        <translation>Tiết kiệm pin</translation>\n    </message>\n    <message>\n        <location filename=\"../plugin.cpp\" line=\"106\"/>\n        <source>Disable Power Stretch</source>\n        <translation>Tắt chế độ tiết kiệm pin</translation>\n    </message>\n</context>\n<context>\n    <name>PowerSettings</name>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"35\"/>\n        <location filename=\"../settings/powersettings.cpp\" line=\"74\"/>\n        <source>Power</source>\n        <translation>Điện</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"83\"/>\n        <source>POWER PROFILE</source>\n        <translation>HỒ SƠ ĐIỆN</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"126\"/>\n        <source>Balanced</source>\n        <translation>Cân bằng</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"103\"/>\n        <source>Power Stretch</source>\n        <translation>Tiết kiệm pin</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"116\"/>\n        <source>Reduce the performance of your device to save on power</source>\n        <translation>Giảm hiệu suất của thiết bị để tiết kiệm năng lượng</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"149\"/>\n        <source>Performance</source>\n        <translation>Hiệu suất</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"90\"/>\n        <source>A power profile tweaks the way your system runs in order to prioritise performance or reduce power consumption.</source>\n        <translation>Một hồ sơ điện điều chỉnh cách hệ thống của bạn chạy để ưu tiên hiệu suất hoặc giảm mức tiêu năng lượng.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"139\"/>\n        <source>Performance and power consumption will be average</source>\n        <translation>Cân bằng hiệu suất và mục tiêu năng lượng</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"162\"/>\n        <source>Performance will be increased at the cost of power consumption</source>\n        <translation>Hiệu suất cũng như mục tiêu năng lượng sẽ được tăng lên</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"196\"/>\n        <source>TIMEOUTS</source>\n        <translation>THỜI GIAN CHỜ</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"209\"/>\n        <source>Switch off the screen after</source>\n        <translation>Tắt màn hình sau</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"226\"/>\n        <source>If you leave your device idle for a period of time, we can automatically turn off the screen or suspend it for you.</source>\n        <translation>Nếu bạn để thiết bị chờ trong một khoảng thời gian, chúng tôi có thể tự động tắt màn hình hoặc tạm dừng nó cho bạn.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"237\"/>\n        <location filename=\"../settings/powersettings.ui\" line=\"278\"/>\n        <source>seconds</source>\n        <translation>giây</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"242\"/>\n        <location filename=\"../settings/powersettings.ui\" line=\"283\"/>\n        <source>minutes</source>\n        <translation>phút</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"247\"/>\n        <location filename=\"../settings/powersettings.ui\" line=\"288\"/>\n        <source>hours</source>\n        <translation>giờ</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"252\"/>\n        <location filename=\"../settings/powersettings.ui\" line=\"293\"/>\n        <source>never</source>\n        <translation>không bao giờ</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"260\"/>\n        <source>Suspend after</source>\n        <translation>Tạm dừng sau</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"326\"/>\n        <source>When pressing the Power button</source>\n        <translation>Khi nút nguồn bị bấm</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"346\"/>\n        <source>Ask</source>\n        <translation>Hỏi tôi</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"351\"/>\n        <source>Power Off</source>\n        <translation>Tắt nguồn</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"356\"/>\n        <source>Reboot</source>\n        <translation>Khởi động lại</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"361\"/>\n        <source>Suspend</source>\n        <translation>Tạm dừng</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"366\"/>\n        <source>Hibernate</source>\n        <translation>Ngủ đông</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"371\"/>\n        <source>Do Nothing</source>\n        <translation>Không làm gì</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"379\"/>\n        <source>After suspending, lock the screen</source>\n        <translation>Khóa màn hình sau khi thiết bị bị tạm dừng</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"338\"/>\n        <source>BUTTONS</source>\n        <translation>NÚT</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.cpp\" line=\"141\"/>\n        <source>Performance mode unavailable</source>\n        <translation>Chế độ hiệu suất không có sẵn</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.cpp\" line=\"142\"/>\n        <source>unavailable</source>\n        <translation>không sẵn</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.cpp\" line=\"147\"/>\n        <source>Performance mode temporarily unavailable</source>\n        <translation>Chế độ hiệu suất không sẵn tạm thời</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.cpp\" line=\"148\"/>\n        <source>temporarily unavailable</source>\n        <translation>không sẵn tạm thời</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.cpp\" line=\"159\"/>\n        <source>Performance mode is %1 because the device is on your lap.</source>\n        <translation>Chế độ hiệu suất tại vì thiết bị này đang nằm trên đùi của bạn.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.cpp\" line=\"160\"/>\n        <source>Performance mode is %1 because your device is getting warm.</source>\n        <translation>Chế độ hiệu suất tại vì thiết bị của bạn đang nóng lên.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.cpp\" line=\"161\"/>\n        <source>Performance mode is %1.</source>\n        <translation>Chế độ hiệu suất %1.</translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/PowerPlugin/translations/vi_VN.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"vi_VN\">\n<context>\n    <name>EventHandler</name>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"99\"/>\n        <source>Unable to inhibit logind power management</source>\n        <translation>Không thể che quản lý năng lượng của logind</translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"122\"/>\n        <source>Caffeinated</source>\n        <translation>Phá tạp caffeine</translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"125\"/>\n        <source>Caffeinate</source>\n        <translation>Pha tạp caffeine</translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"136\"/>\n        <source>Decaffeinate</source>\n        <translation>Khử caffeine</translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"154\"/>\n        <source>Suspend</source>\n        <translation>Tạm dừng</translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../eventhandler.cpp\" line=\"155\"/>\n        <source>%n seconds</source>\n        <translation>\n            <numerusform>%n giay</numerusform>\n        </translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"233\"/>\n        <location filename=\"../eventhandler.cpp\" line=\"243\"/>\n        <location filename=\"../eventhandler.cpp\" line=\"253\"/>\n        <location filename=\"../eventhandler.cpp\" line=\"263\"/>\n        <source>Battery</source>\n        <translation>Pin</translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"244\"/>\n        <source>Charging</source>\n        <translation>Đang sạc</translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"254\"/>\n        <source>Full</source>\n        <translation>Đầy</translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"264\"/>\n        <source>Discharging</source>\n        <translation>Xả</translation>\n    </message>\n</context>\n<context>\n    <name>Plugin</name>\n    <message>\n        <location filename=\"../plugin.cpp\" line=\"90\"/>\n        <location filename=\"../plugin.cpp\" line=\"102\"/>\n        <source>Power Stretch</source>\n        <translation>Tiết kiệm pin</translation>\n    </message>\n    <message>\n        <location filename=\"../plugin.cpp\" line=\"106\"/>\n        <source>Disable Power Stretch</source>\n        <translation>Tất tiết kiệm pin</translation>\n    </message>\n</context>\n<context>\n    <name>PowerSettings</name>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"35\"/>\n        <location filename=\"../settings/powersettings.cpp\" line=\"74\"/>\n        <source>Power</source>\n        <translation>Năng lượng</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"83\"/>\n        <source>POWER PROFILE</source>\n        <translation>Hồ sơ năng lượng</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"126\"/>\n        <source>Balanced</source>\n        <translation>Cân bằng</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"103\"/>\n        <source>Power Stretch</source>\n        <translation>Tiết kiệm năng lượng</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"116\"/>\n        <source>Reduce the performance of your device to save on power</source>\n        <translation>Giảm hiệu suất của thiết bị để tiết kiệm năng lượng</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"149\"/>\n        <source>Performance</source>\n        <translation>Hiệu suất</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"90\"/>\n        <source>A power profile tweaks the way your system runs in order to prioritise performance or reduce power consumption.</source>\n        <translation>Hồ sơ năng lượng điều chỉnh cách hệ thống của bạn chạy để ưu tiên hiệu suất hoặc giảm tiêu năng lượng.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"139\"/>\n        <source>Performance and power consumption will be average</source>\n        <translation>Hiệu suất và độ tiêu năng lượng là trung bình</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"162\"/>\n        <source>Performance will be increased at the cost of power consumption</source>\n        <translation>Hiệu suất tốt nhất với chi phí tiêu thụ năng lượng</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"196\"/>\n        <source>TIMEOUTS</source>\n        <translation>HẠN THỜI GIAN CHẠY KHÔNG DÙNG</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"209\"/>\n        <source>Switch off the screen after</source>\n        <translation>Tất màn hình sau</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"226\"/>\n        <source>If you leave your device idle for a period of time, we can automatically turn off the screen or suspend it for you.</source>\n        <translation>Nếu bạn để thiết bị nhàn rỗi trong một khoảng thời gian, chúng tôi có thể tắt màn hình hoặc tạm dừng thiết bị cho bạn.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"237\"/>\n        <location filename=\"../settings/powersettings.ui\" line=\"278\"/>\n        <source>seconds</source>\n        <translation>giay</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"242\"/>\n        <location filename=\"../settings/powersettings.ui\" line=\"283\"/>\n        <source>minutes</source>\n        <translation>phút</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"247\"/>\n        <location filename=\"../settings/powersettings.ui\" line=\"288\"/>\n        <source>hours</source>\n        <translation>giờ</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"252\"/>\n        <location filename=\"../settings/powersettings.ui\" line=\"293\"/>\n        <source>never</source>\n        <translation>không bao giờ</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"260\"/>\n        <source>Suspend after</source>\n        <translation>Tạm dừng sau</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"326\"/>\n        <source>When pressing the Power button</source>\n        <translation>Khi nút nguồn bị nhấn</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"346\"/>\n        <source>Ask</source>\n        <translation>Hỏi tôi</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"351\"/>\n        <source>Power Off</source>\n        <translation>Tất nguồn</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"356\"/>\n        <source>Reboot</source>\n        <translation>Khởi động lại</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"361\"/>\n        <source>Suspend</source>\n        <translation>Tạm dừng</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"366\"/>\n        <source>Hibernate</source>\n        <translation>Ngủ đông</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"371\"/>\n        <source>Do Nothing</source>\n        <translation>Không làm gì</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"379\"/>\n        <source>After suspending, lock the screen</source>\n        <translation>Sau khi tạm dừng, khóa màn hình</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"338\"/>\n        <source>BUTTONS</source>\n        <translation>NÚT</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.cpp\" line=\"141\"/>\n        <source>Performance mode unavailable</source>\n        <translation>Chế độ hiệu suất không có sẵn</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.cpp\" line=\"142\"/>\n        <source>unavailable</source>\n        <translation>không có sẵn</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.cpp\" line=\"147\"/>\n        <source>Performance mode temporarily unavailable</source>\n        <translation>Chế độ hiệu suất tạm không sẵn</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.cpp\" line=\"148\"/>\n        <source>temporarily unavailable</source>\n        <translation>tạm không sẵn</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.cpp\" line=\"159\"/>\n        <source>Performance mode is %1 because the device is on your lap.</source>\n        <translation>Chế độ hiệu suất %1 tại vì thiết bị nằm trong lòng bạn</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.cpp\" line=\"160\"/>\n        <source>Performance mode is %1 because your device is getting warm.</source>\n        <translation>Chế độ hiệu suất %1 tại vì thiết bị của bạn đang trở nên ấm áp</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.cpp\" line=\"161\"/>\n        <source>Performance mode is %1.</source>\n        <translation>Chế độ hiệu suất %1.</translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/PowerPlugin/translations/zh_CN.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"zh_CN\" sourcelanguage=\"en_US\">\n<context>\n    <name>EventHandler</name>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"99\"/>\n        <source>Unable to inhibit logind power management</source>\n        <translation>无法禁止登录电源管理</translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"122\"/>\n        <source>Caffeinated</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"125\"/>\n        <source>Caffeinate</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"136\"/>\n        <source>Decaffeinate</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"154\"/>\n        <source>Suspend</source>\n        <translation>暂停</translation>\n    </message>\n    <message numerus=\"yes\">\n        <location filename=\"../eventhandler.cpp\" line=\"155\"/>\n        <source>%n seconds</source>\n        <translation>\n            <numerusform>%n 秒</numerusform>\n        </translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"233\"/>\n        <location filename=\"../eventhandler.cpp\" line=\"243\"/>\n        <location filename=\"../eventhandler.cpp\" line=\"253\"/>\n        <location filename=\"../eventhandler.cpp\" line=\"263\"/>\n        <source>Battery</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"244\"/>\n        <source>Charging</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"254\"/>\n        <source>Full</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"264\"/>\n        <source>Discharging</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>Plugin</name>\n    <message>\n        <location filename=\"../plugin.cpp\" line=\"90\"/>\n        <location filename=\"../plugin.cpp\" line=\"102\"/>\n        <source>Power Stretch</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../plugin.cpp\" line=\"106\"/>\n        <source>Disable Power Stretch</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>PowerSettings</name>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"35\"/>\n        <location filename=\"../settings/powersettings.cpp\" line=\"74\"/>\n        <source>Power</source>\n        <translation>电源</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"196\"/>\n        <source>TIMEOUTS</source>\n        <translation>超时</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"209\"/>\n        <source>Switch off the screen after</source>\n        <translation>在时间过后关闭屏幕</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"237\"/>\n        <location filename=\"../settings/powersettings.ui\" line=\"278\"/>\n        <source>seconds</source>\n        <translation>秒</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"242\"/>\n        <location filename=\"../settings/powersettings.ui\" line=\"283\"/>\n        <source>minutes</source>\n        <translation>分</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"247\"/>\n        <location filename=\"../settings/powersettings.ui\" line=\"288\"/>\n        <source>hours</source>\n        <translation>时</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"252\"/>\n        <location filename=\"../settings/powersettings.ui\" line=\"293\"/>\n        <source>never</source>\n        <translation>永不</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"226\"/>\n        <source>If you leave your device idle for a period of time, we can automatically turn off the screen or suspend it for you.</source>\n        <translation>如果你的机器静置超过一定时间， 我可以将屏幕为您自动关闭或者暂停。</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"260\"/>\n        <source>Suspend after</source>\n        <translation>暂停在</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"326\"/>\n        <source>When pressing the Power button</source>\n        <translation>当按下电源键时</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"346\"/>\n        <source>Ask</source>\n        <translation>询问</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"351\"/>\n        <source>Power Off</source>\n        <translation>关机</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"356\"/>\n        <source>Reboot</source>\n        <translation>重启</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"361\"/>\n        <source>Suspend</source>\n        <translation>暂停</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"366\"/>\n        <source>Hibernate</source>\n        <translation>休眠</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"371\"/>\n        <source>Do Nothing</source>\n        <translation>什么都不做</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"338\"/>\n        <source>BUTTONS</source>\n        <translation>按键</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"83\"/>\n        <source>POWER PROFILE</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"126\"/>\n        <source>Balanced</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"103\"/>\n        <source>Power Stretch</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"116\"/>\n        <source>Reduce the performance of your device to save on power</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"149\"/>\n        <source>Performance</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.cpp\" line=\"141\"/>\n        <source>Performance mode unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.cpp\" line=\"142\"/>\n        <source>unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.cpp\" line=\"160\"/>\n        <source>Performance mode is %1 because your device is getting warm.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.cpp\" line=\"161\"/>\n        <source>Performance mode is %1.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.cpp\" line=\"159\"/>\n        <source>Performance mode is %1 because the device is on your lap.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.cpp\" line=\"147\"/>\n        <source>Performance mode temporarily unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.cpp\" line=\"148\"/>\n        <source>temporarily unavailable</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"90\"/>\n        <source>A power profile tweaks the way your system runs in order to prioritise performance or reduce power consumption.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"139\"/>\n        <source>Performance and power consumption will be average</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"162\"/>\n        <source>Performance will be increased at the cost of power consumption</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/powersettings.ui\" line=\"379\"/>\n        <source>After suspending, lock the screen</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/ScreenshotPlugin/CMakeLists.txt",
    "content": "cmake_minimum_required(VERSION 3.24.0)\n\nfind_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets Svg)\nfind_package(libcontemporary)\n\nset(SOURCES\n    eventhandler.cpp\n    plugin.cpp\n)\n\nset(HEADERS\n    eventhandler.h\n    plugin.h\n)\n\nset(PLUGIN_NAME screenshot)\nadd_plugin_td(${PLUGIN_NAME})\ntarget_sources(plugin-${PLUGIN_NAME} PRIVATE ${SOURCES} ${HEADERS})\ncntp_defaults_file(${PLUGIN_NAME}\n    DEFAULTS_FILE thedesk-screenshot.conf)\n\ntarget_link_libraries(plugin-${PLUGIN_NAME} Qt::Widgets Qt::Svg libcontemporary libthedesk)\n"
  },
  {
    "path": "plugins/ScreenshotPlugin/Plugin.json",
    "content": "{\n    \"name\": \"Screenshots\",\n    \"icon\": \"preferences-system-display\",\n    \"uuid\": \"d8f3c551-f356-4d6e-830e-fa90e142224c\",\n    \"vi\": {\n        \"name\": \"Chụp màn hình\"\n    }\n}\n"
  },
  {
    "path": "plugins/ScreenshotPlugin/ScreenshotPlugin.pro",
    "content": "QT += gui widgets svg\n\nTEMPLATE = lib\nCONFIG += plugin\n\nCONFIG += c++11\n\n# Include the-libs build tools\ninclude(/usr/share/the-libs/pri/gentranslations.pri)\n\n# The following define makes your compiler emit warnings if you use\n# any Qt feature that has been marked deprecated (the exact warnings\n# depend on your compiler). Please consult the documentation of the\n# deprecated API in order to know how to port your code away from it.\nDEFINES += QT_DEPRECATED_WARNINGS\n\n# You can also make your code fail to compile if it uses deprecated APIs.\n# In order to do so, uncomment the following line.\n# You can also select to disable deprecated APIs only up to a certain version of Qt.\n#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0\n\nSOURCES += \\\n    eventhandler.cpp \\\n    penbutton.cpp \\\n    plugin.cpp \\\n    screenshotwindow.cpp\n\nHEADERS += \\\n    eventhandler.h \\\n    penbutton.h \\\n    plugin.h \\\n    screenshotwindow.h\n\nDISTFILES += \\\n    Plugin.json \\\n    defaults.conf\n\n\nunix {\n    translations.files = translations/*.qm\n    translations.path = /usr/share/thedesk/ScreenshotPlugin/translations\n\n    defaults.files = defaults.conf\n    defaults.path = /etc/theSuite/theDesk/ScreenshotPlugin/\n\n    INSTALLS += translations defaults\n}\n\ninclude(../plugins.pri)\n\nFORMS += \\\n    screenshotwindow.ui\n\nRESOURCES += \\\n    screenshot_resources.qrc\n"
  },
  {
    "path": "plugins/ScreenshotPlugin/eventhandler.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"eventhandler.h\"\n\n#include <QApplication>\n#include <QCoroDBusPendingCall>\n#include <QDBusConnection>\n#include <QDBusMessage>\n#include <QDBusObjectPath>\n#include <QDBusPendingCall>\n#include <QKeySequence>\n#include <QScreen>\n#include <keygrab.h>\n#include <tlogger.h>\n#include <tnotification.h>\n\nstruct EventHandlerPrivate {\n        KeyGrab* prtScr;\n        KeyGrab* screenshotAlt;\n};\n\nEventHandler::EventHandler(QObject* parent) :\n    QObject(parent) {\n    d = new EventHandlerPrivate();\n    d->prtScr = new KeyGrab(QKeySequence(Qt::Key_Print), \"screenshot\");\n    d->screenshotAlt = new KeyGrab(QKeySequence(Qt::MetaModifier | Qt::AltModifier | Qt::Key_P), \"screenshotAlt\");\n\n    connect(d->prtScr, &KeyGrab::activated, this, &EventHandler::takeScreenshot);\n    connect(d->screenshotAlt, &KeyGrab::activated, this, &EventHandler::takeScreenshot);\n}\n\nEventHandler::~EventHandler() {\n    d->prtScr->deleteLater();\n    d->screenshotAlt->deleteLater();\n    delete d;\n}\n\nQCoro::Task<> EventHandler::takeScreenshot() {\n    // Delegate screenshot taking to the portal\n    auto message = QDBusMessage::createMethodCall(\"org.freedesktop.impl.portal.desktop.thedesk\", \"/org/freedesktop/portal/desktop\", \"org.freedesktop.impl.portal.Screenshot\", \"Screenshot\");\n    message.setArguments({\n        QDBusObjectPath(\"/\"), \"com.vicr123.thedesk\", \"\", QVariantMap{{\"interactive\", true}, {\"x-thedesk-screenshot\", true}}\n    });\n    auto reply = co_await QDBusConnection::sessionBus().asyncCall(message, 300000);\n    if (reply.type() != QDBusMessage::ReplyMessage) {\n        tWarn(\"EventHandler\") << \"Unable to take screenshot\";\n        tWarn(\"EventHandler\") << message.errorMessage();\n\n        // Send a notification\n        auto notification = new tNotification();\n        notification->setSummary(tr(\"Unable to take screenshot\"));\n        notification->setText(tr(\"Sorry, the screenshot was unable to be taken.\"));\n        notification->post();\n    }\n}\n"
  },
  {
    "path": "plugins/ScreenshotPlugin/eventhandler.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef EVENTHANDLER_H\n#define EVENTHANDLER_H\n\n#include <QCoroTask>\n#include <QObject>\n\nstruct EventHandlerPrivate;\nclass EventHandler : public QObject {\n        Q_OBJECT\n    public:\n        explicit EventHandler(QObject* parent = nullptr);\n        ~EventHandler();\n\n    signals:\n\n    private:\n        EventHandlerPrivate* d;\n\n        QCoro::Task<> takeScreenshot();\n};\n\n#endif // EVENTHANDLER_H\n"
  },
  {
    "path": "plugins/ScreenshotPlugin/plugin.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"plugin.h\"\n\n#include \"eventhandler.h\"\n#include <QApplication>\n#include <QDebug>\n#include <QDir>\n#include <localemanager.h>\n#include <statemanager.h>\n#include <statuscentermanager.h>\n#include <tapplication.h>\n#include <tsettings.h>\n\nstruct PluginPrivate {\n        EventHandler* keyHandler;\n};\n\nPlugin::Plugin() {\n    d = new PluginPrivate();\n}\n\nPlugin::~Plugin() {\n    delete d;\n}\n\nvoid Plugin::activate() {\n    tApplication::addPluginTranslator(CNTP_TARGET_NAME);\n\n    tSettings::registerDefaults(QDir::cleanPath(qApp->applicationDirPath() + \"/../plugins/ScreenshotPlugin/thedesk-screenshot.conf\"));\n    tSettings::registerDefaults(\"/usr/share/defaults/thedesk-screenshot.conf\");\n\n    d->keyHandler = new EventHandler();\n}\n\nvoid Plugin::deactivate() {\n    d->keyHandler->deleteLater();\n    tApplication::removePluginTranslator(CNTP_TARGET_NAME);\n}\n"
  },
  {
    "path": "plugins/ScreenshotPlugin/plugin.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef PLUGIN_H\n#define PLUGIN_H\n\n#include \"plugins/plugininterface.h\"\n\nstruct PluginPrivate;\nclass Plugin : public QObject,\n               public PluginInterface {\n        Q_OBJECT\n        Q_PLUGIN_METADATA(IID PluginInterface_iid FILE \"Plugin.json\")\n        Q_INTERFACES(PluginInterface)\n\n    public:\n        Plugin();\n        ~Plugin();\n\n    private:\n        PluginPrivate* d;\n\n        // PluginInterface interface\n    public:\n        void activate();\n        void deactivate();\n};\n\n#endif // PLUGIN_H\n"
  },
  {
    "path": "plugins/ScreenshotPlugin/thedesk-screenshot.conf",
    "content": ""
  },
  {
    "path": "plugins/ScreenshotPlugin/translations/ar_SA.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"ar_SA\" sourcelanguage=\"en_US\">\n<context>\n    <name>EventHandler</name>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"68\"/>\n        <source>Unable to take screenshot</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"69\"/>\n        <source>Sorry, the screenshot was unable to be taken.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/ScreenshotPlugin/translations/au_AU.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"au_AU\" sourcelanguage=\"en_US\">\n<context>\n    <name>EventHandler</name>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"68\"/>\n        <source>Unable to take screenshot</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"69\"/>\n        <source>Sorry, the screenshot was unable to be taken.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/ScreenshotPlugin/translations/cy.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"cy\" sourcelanguage=\"en_US\">\n<context>\n    <name>EventHandler</name>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"68\"/>\n        <source>Unable to take screenshot</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"69\"/>\n        <source>Sorry, the screenshot was unable to be taken.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/ScreenshotPlugin/translations/da.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"da\" sourcelanguage=\"en_US\">\n<context>\n    <name>EventHandler</name>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"68\"/>\n        <source>Unable to take screenshot</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"69\"/>\n        <source>Sorry, the screenshot was unable to be taken.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/ScreenshotPlugin/translations/de.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"de\" sourcelanguage=\"en_US\">\n<context>\n    <name>EventHandler</name>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"68\"/>\n        <source>Unable to take screenshot</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"69\"/>\n        <source>Sorry, the screenshot was unable to be taken.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/ScreenshotPlugin/translations/en_GB.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"en_GB\" sourcelanguage=\"en_US\">\n<context>\n    <name>EventHandler</name>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"68\"/>\n        <source>Unable to take screenshot</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"69\"/>\n        <source>Sorry, the screenshot was unable to be taken.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>PenButton</name>\n    <message>\n        <source>Erase-o</source>\n        <comment>This and the next translation span two lines. Be spiffy with these!</comment>\n        <translation type=\"vanished\">Erase-o</translation>\n    </message>\n    <message>\n        <source>matic 2000</source>\n        <comment>This and the previous translation span two lines. Be spiffy with these!</comment>\n        <translation type=\"vanished\">matic 2000</translation>\n    </message>\n</context>\n<context>\n    <name>ScreenshotWindow</name>\n    <message>\n        <source>Discard</source>\n        <translation type=\"vanished\">Discard</translation>\n    </message>\n    <message>\n        <source>Copy</source>\n        <translation type=\"vanished\">Copy</translation>\n    </message>\n    <message>\n        <source>SCREENSHOT</source>\n        <translation type=\"vanished\">SCREENSHOT</translation>\n    </message>\n    <message>\n        <source>Crop</source>\n        <translation type=\"vanished\">Crop</translation>\n    </message>\n    <message>\n        <source>Redact</source>\n        <translation type=\"vanished\">Redact</translation>\n    </message>\n    <message>\n        <source>Reset Markup</source>\n        <translation type=\"vanished\">Reset Markup</translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/ScreenshotPlugin/translations/en_US.qm",
    "content": "<d\u0018!\u001c`"
  },
  {
    "path": "plugins/ScreenshotPlugin/translations/en_US.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" sourcelanguage=\"en_US\">\n<context>\n    <name>EventHandler</name>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"68\"/>\n        <source>Unable to take screenshot</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"69\"/>\n        <source>Sorry, the screenshot was unable to be taken.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/ScreenshotPlugin/translations/es.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"es\" sourcelanguage=\"en_US\">\n<context>\n    <name>EventHandler</name>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"68\"/>\n        <source>Unable to take screenshot</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"69\"/>\n        <source>Sorry, the screenshot was unable to be taken.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/ScreenshotPlugin/translations/es_VE.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"es_VE\" sourcelanguage=\"en_US\">\n<context>\n    <name>EventHandler</name>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"68\"/>\n        <source>Unable to take screenshot</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"69\"/>\n        <source>Sorry, the screenshot was unable to be taken.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/ScreenshotPlugin/translations/id.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"id\" sourcelanguage=\"en_US\">\n<context>\n    <name>EventHandler</name>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"68\"/>\n        <source>Unable to take screenshot</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"69\"/>\n        <source>Sorry, the screenshot was unable to be taken.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/ScreenshotPlugin/translations/nl.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"nl\">\n<context>\n    <name>EventHandler</name>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"68\"/>\n        <source>Unable to take screenshot</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"69\"/>\n        <source>Sorry, the screenshot was unable to be taken.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>PenButton</name>\n    <message>\n        <source>Erase-o</source>\n        <translation type=\"vanished\">Supergum</translation>\n    </message>\n    <message>\n        <source>matic 2000</source>\n        <translation type=\"vanished\">2000</translation>\n    </message>\n    <message>\n        <source>Erase-o</source>\n        <comment>This and the next translation span two lines. Be spiffy with these!</comment>\n        <translation type=\"obsolete\">Supergum</translation>\n    </message>\n    <message>\n        <source>matic 2000</source>\n        <comment>This and the previous translation span two lines. Be spiffy with these!</comment>\n        <translation type=\"obsolete\">2000</translation>\n    </message>\n</context>\n<context>\n    <name>ScreenshotWindow</name>\n    <message>\n        <source>SCREENSHOT</source>\n        <translation type=\"vanished\">SCHERMAFBEELDING</translation>\n    </message>\n    <message>\n        <source>Crop</source>\n        <translation type=\"vanished\">Bijsnijden</translation>\n    </message>\n    <message>\n        <source>Redact</source>\n        <translation type=\"vanished\">Redigeren</translation>\n    </message>\n    <message>\n        <source>Reset Markup</source>\n        <translation type=\"vanished\">Opmaak Herstellen</translation>\n    </message>\n    <message>\n        <source>Discard</source>\n        <translation type=\"vanished\">Verwijderen</translation>\n    </message>\n    <message>\n        <source>Copy</source>\n        <translation type=\"vanished\">Kopiëren</translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/ScreenshotPlugin/translations/pt_BR.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"pt_BR\" sourcelanguage=\"en_US\">\n<context>\n    <name>EventHandler</name>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"68\"/>\n        <source>Unable to take screenshot</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"69\"/>\n        <source>Sorry, the screenshot was unable to be taken.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/ScreenshotPlugin/translations/ro_RO.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"ro_RO\" sourcelanguage=\"en_US\">\n<context>\n    <name>EventHandler</name>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"68\"/>\n        <source>Unable to take screenshot</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"69\"/>\n        <source>Sorry, the screenshot was unable to be taken.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>PenButton</name>\n    <message>\n        <source>Erase-o</source>\n        <comment>This and the next translation span two lines. Be spiffy with these!</comment>\n        <translation type=\"vanished\">Erase-o</translation>\n    </message>\n    <message>\n        <source>matic 2000</source>\n        <comment>This and the previous translation span two lines. Be spiffy with these!</comment>\n        <translation type=\"vanished\">matic 2000</translation>\n    </message>\n</context>\n<context>\n    <name>ScreenshotWindow</name>\n    <message>\n        <source>Discard</source>\n        <translation type=\"vanished\">Renunță</translation>\n    </message>\n    <message>\n        <source>Copy</source>\n        <translation type=\"vanished\">Copiază</translation>\n    </message>\n    <message>\n        <source>SCREENSHOT</source>\n        <translation type=\"vanished\">Captură de ecran</translation>\n    </message>\n    <message>\n        <source>Crop</source>\n        <translation type=\"vanished\">Decupează</translation>\n    </message>\n    <message>\n        <source>Redact</source>\n        <translation type=\"vanished\">Redactează</translation>\n    </message>\n    <message>\n        <source>Reset Markup</source>\n        <translation type=\"vanished\">Resetează însemnările</translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/ScreenshotPlugin/translations/sv.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"sv\" sourcelanguage=\"en_US\">\n<context>\n    <name>EventHandler</name>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"68\"/>\n        <source>Unable to take screenshot</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"69\"/>\n        <source>Sorry, the screenshot was unable to be taken.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/ScreenshotPlugin/translations/tr_TR.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"tr_TR\" sourcelanguage=\"en_US\">\n<context>\n    <name>EventHandler</name>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"68\"/>\n        <source>Unable to take screenshot</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"69\"/>\n        <source>Sorry, the screenshot was unable to be taken.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>PenButton</name>\n    <message>\n        <source>Erase-o</source>\n        <comment>This and the next translation span two lines. Be spiffy with these!</comment>\n        <translation type=\"vanished\">Sil-o</translation>\n    </message>\n    <message>\n        <source>matic 2000</source>\n        <comment>This and the previous translation span two lines. Be spiffy with these!</comment>\n        <translation type=\"vanished\">matik 2000</translation>\n    </message>\n</context>\n<context>\n    <name>ScreenshotWindow</name>\n    <message>\n        <source>Discard</source>\n        <translation type=\"vanished\">At</translation>\n    </message>\n    <message>\n        <source>Copy</source>\n        <translation type=\"vanished\">Kopyala</translation>\n    </message>\n    <message>\n        <source>SCREENSHOT</source>\n        <translation type=\"vanished\">EKRAN GÖRÜNTÜSÜ</translation>\n    </message>\n    <message>\n        <source>Crop</source>\n        <translation type=\"vanished\">Kırp</translation>\n    </message>\n    <message>\n        <source>Redact</source>\n        <translation type=\"vanished\">Yazıya dökmek</translation>\n    </message>\n    <message>\n        <source>Reset Markup</source>\n        <translation type=\"vanished\">İşaretlemeyi Sıfırla</translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/ScreenshotPlugin/translations/vi.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"vi\" sourcelanguage=\"en_US\">\n<context>\n    <name>EventHandler</name>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"68\"/>\n        <source>Unable to take screenshot</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"69\"/>\n        <source>Sorry, the screenshot was unable to be taken.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>PenButton</name>\n    <message>\n        <source>Erase-o</source>\n        <comment>This and the next translation span two lines. Be spiffy with these!</comment>\n        <translation type=\"vanished\">Cục tẩy</translation>\n    </message>\n    <message>\n        <source>matic 2000</source>\n        <comment>This and the previous translation span two lines. Be spiffy with these!</comment>\n        <translation type=\"vanished\">đẹp xinh</translation>\n    </message>\n</context>\n<context>\n    <name>ScreenshotWindow</name>\n    <message>\n        <source>SCREENSHOT</source>\n        <translation type=\"vanished\">ẢNH CHỤP MÀN HÌNH</translation>\n    </message>\n    <message>\n        <source>Crop</source>\n        <translation type=\"vanished\">Cắt xén</translation>\n    </message>\n    <message>\n        <source>Redact</source>\n        <translation type=\"vanished\">Ẩn</translation>\n    </message>\n    <message>\n        <source>Reset Markup</source>\n        <translation type=\"vanished\">Xóa đánh dấu</translation>\n    </message>\n    <message>\n        <source>Discard</source>\n        <translation type=\"vanished\">Bỏ</translation>\n    </message>\n    <message>\n        <source>Copy</source>\n        <translation type=\"vanished\">Chép</translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/ScreenshotPlugin/translations/vi_VN.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"vi_VN\">\n<context>\n    <name>EventHandler</name>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"68\"/>\n        <source>Unable to take screenshot</source>\n        <translation>Không thể chụp màn hình</translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"69\"/>\n        <source>Sorry, the screenshot was unable to be taken.</source>\n        <translation>Rất tiếc, chúng tôi không thể chụp màn hình.</translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/ScreenshotPlugin/translations/zh_CN.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"zh_CN\" sourcelanguage=\"en_US\">\n<context>\n    <name>EventHandler</name>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"68\"/>\n        <source>Unable to take screenshot</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../eventhandler.cpp\" line=\"69\"/>\n        <source>Sorry, the screenshot was unable to be taken.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>PenButton</name>\n    <message>\n        <source>Erase-o</source>\n        <comment>This and the next translation span two lines. Be spiffy with these!</comment>\n        <translation type=\"vanished\">清除-O</translation>\n    </message>\n    <message>\n        <source>matic 2000</source>\n        <comment>This and the previous translation span two lines. Be spiffy with these!</comment>\n        <translation type=\"vanished\">统计2000</translation>\n    </message>\n</context>\n<context>\n    <name>ScreenshotWindow</name>\n    <message>\n        <source>Discard</source>\n        <translation type=\"vanished\">取消</translation>\n    </message>\n    <message>\n        <source>Copy</source>\n        <translation type=\"vanished\">复制</translation>\n    </message>\n    <message>\n        <source>SCREENSHOT</source>\n        <translation type=\"vanished\">截图</translation>\n    </message>\n    <message>\n        <source>Crop</source>\n        <translation type=\"vanished\">裁剪</translation>\n    </message>\n    <message>\n        <source>Redact</source>\n        <translation type=\"vanished\">编辑</translation>\n    </message>\n    <message>\n        <source>Reset Markup</source>\n        <translation type=\"vanished\">重置绘图</translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/ThemePlugin/CMakeLists.txt",
    "content": "cmake_minimum_required(VERSION 3.24.0)\n\nfind_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets)\nfind_package(libcontemporary)\n\nset(SOURCES\n    onboarding/onboardingtheme.cpp\n    plugin.cpp\n    settings/accentcolourpicker.cpp\n    settings/themesettingspane.cpp\n\n    onboarding/onboardingtheme.ui\n    settings/themesettingspane.ui\n\n    thedesk-themeplugin-resources.qrc\n)\n\nset(HEADERS\n    onboarding/onboardingtheme.h\n    plugin.h\n    settings/accentcolourpicker.h\n    settings/themesettingspane.h\n)\n\nset(PLUGIN_NAME theme)\nadd_plugin_td(${PLUGIN_NAME})\ntarget_sources(plugin-${PLUGIN_NAME} PRIVATE ${SOURCES} ${HEADERS})\ncntp_defaults_file(${PLUGIN_NAME}\n    DEFAULTS_FILE thedesk-theme.conf)\n\ntarget_link_libraries(plugin-${PLUGIN_NAME} Qt::Widgets libcontemporary libthedesk)\n"
  },
  {
    "path": "plugins/ThemePlugin/Plugin.json",
    "content": "{\n    \"name\": \"Theme Management\",\n    \"icon\": \"preferences-desktop-theme\",\n    \"uuid\": \"1e88a080-d7cf-41cc-beae-df7ed5777e5d\",\n    \"vi\": {\n        \"name\": \"Quản lý giao diện\"\n    }\n}\n"
  },
  {
    "path": "plugins/ThemePlugin/ThemePlugin.pro",
    "content": "QT += gui widgets\n\nTEMPLATE = lib\nCONFIG += plugin\n\nCONFIG += c++11\n\n# Include the-libs build tools\ninclude(/usr/share/the-libs/pri/gentranslations.pri)\n\n# The following define makes your compiler emit warnings if you use\n# any Qt feature that has been marked deprecated (the exact warnings\n# depend on your compiler). Please consult the documentation of the\n# deprecated API in order to know how to port your code away from it.\nDEFINES += QT_DEPRECATED_WARNINGS\n\n# You can also make your code fail to compile if it uses deprecated APIs.\n# In order to do so, uncomment the following line.\n# You can also select to disable deprecated APIs only up to a certain version of Qt.\n#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0\n\nSOURCES += \\\n    onboarding/onboardingtheme.cpp \\\n    plugin.cpp \\\n    settings/accentcolourpicker.cpp \\\n    settings/themesettingspane.cpp\n\nHEADERS += \\\n    onboarding/onboardingtheme.h \\\n    plugin.h \\\n    settings/accentcolourpicker.h \\\n    settings/themesettingspane.h\n\nDISTFILES += \\\n    Plugin.json \\\n    defaults.conf\n\n\nunix {\n    translations.files = translations/*.qm\n    translations.path = /usr/share/thedesk/ThemePlugin/translations\n\n    defaults.files = defaults.conf\n    defaults.path = /etc/theSuite/theDesk/ThemePlugin/\n\n    INSTALLS += translations defaults\n}\n\ninclude(../plugins.pri)\n\nFORMS += \\\n    onboarding/onboardingtheme.ui \\\n    settings/themesettingspane.ui\n\nRESOURCES += \\\n    thedesk-themeplugin-resources.qrc\n"
  },
  {
    "path": "plugins/ThemePlugin/onboarding/onboardingtheme.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"onboardingtheme.h\"\n#include \"ui_onboardingtheme.h\"\n\n#include <statemanager.h>\n#include <onboardingmanager.h>\n#include <tsettings.h>\n\nstruct OnboardingThemePrivate {\n    tSettings* platformSettings;\n};\n\nOnboardingTheme::OnboardingTheme(QWidget* parent) :\n    OnboardingPage(parent),\n    ui(new Ui::OnboardingTheme) {\n    ui->setupUi(this);\n    d = new OnboardingThemePrivate();\n    d->platformSettings = new tSettings(\"theDesk.platform\", this);\n\n    ui->titleLabel->setBackButtonShown(true);\n\n    connect(d->platformSettings, &tSettings::settingChanged, this, [ = ](QString key, QVariant value) {\n        if (key == \"Palette/base\") {\n            updateSettings();\n        }\n    });\n\n    QPalette lightPal;\n    lightPal.setColor(QPalette::Window, QColor(210, 210, 210));\n    lightPal.setColor(QPalette::WindowText, Qt::black);\n    ui->lightContainer->setPalette(lightPal);\n\n    QPalette darkPal;\n    darkPal.setColor(QPalette::Window, QColor(40, 40, 40));\n    darkPal.setColor(QPalette::WindowText, Qt::white);\n    ui->darkContainer->setPalette(darkPal);\n\n    updateSettings();\n}\n\nOnboardingTheme::~OnboardingTheme() {\n    delete d;\n    delete ui;\n}\n\nvoid OnboardingTheme::changeEvent(QEvent* event) {\n    if (event->type() == QEvent::LanguageChange) {\n        ui->retranslateUi(this);\n    }\n}\n\nvoid OnboardingTheme::updateSettings() {\n    QString baseColor = d->platformSettings->value(\"Palette/base\").toString();\n    if (baseColor == \"dark\") {\n        ui->darkButton->setChecked(true);\n        ui->lightButton->setChecked(false);\n        ui->emojiLabel->setPixmap(QPixmap(\":/thedesk/themeplugin/icons/moonman.svg\"));\n        ui->quote->setText(tr(\"Intellect has spoken; blinding shall be no more!\"));\n    } else if (baseColor == \"light\") {\n        ui->darkButton->setChecked(false);\n        ui->lightButton->setChecked(true);\n        ui->emojiLabel->setPixmap(QPixmap(\":/thedesk/themeplugin/icons/sunglassesman.svg\"));\n        ui->quote->setText(tr(\"One whose wisdom has brought them the light of day!\"));\n    }\n}\n\n\nQString OnboardingTheme::name() {\n    return \"OnboardingTheme\";\n}\n\nQString OnboardingTheme::displayName() {\n    return tr(\"Theme\");\n}\n\nvoid OnboardingTheme::on_titleLabel_backButtonClicked() {\n    StateManager::onboardingManager()->previousStep();\n}\n\nvoid OnboardingTheme::on_nextButton_clicked() {\n    StateManager::onboardingManager()->nextStep();\n}\n\nvoid OnboardingTheme::on_lightButton_toggled(bool checked) {\n    if (checked) {\n        d->platformSettings->setValue(\"Palette/base\", \"light\");\n    } else {\n        updateSettings();\n    }\n}\n\nvoid OnboardingTheme::on_darkButton_toggled(bool checked) {\n    if (checked) {\n        d->platformSettings->setValue(\"Palette/base\", \"dark\");\n    } else {\n        updateSettings();\n    }\n}\n"
  },
  {
    "path": "plugins/ThemePlugin/onboarding/onboardingtheme.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef ONBOARDINGTHEME_H\n#define ONBOARDINGTHEME_H\n\n#include <onboardingpage.h>\n\nnamespace Ui {\n    class OnboardingTheme;\n}\n\nstruct OnboardingThemePrivate;\nclass OnboardingTheme : public OnboardingPage {\n        Q_OBJECT\n\n    public:\n        explicit OnboardingTheme(QWidget* parent = nullptr);\n        ~OnboardingTheme();\n\n    private:\n        Ui::OnboardingTheme* ui;\n        OnboardingThemePrivate* d;\n\n        void changeEvent(QEvent* event);\n\n        void updateSettings();\n\n        // OnboardingPage interface\n    public:\n        QString name();\n        QString displayName();\n\n    private slots:\n        void on_titleLabel_backButtonClicked();\n        void on_nextButton_clicked();\n        void on_lightButton_toggled(bool checked);\n        void on_darkButton_toggled(bool checked);\n};\n\n#endif // ONBOARDINGTHEME_H\n"
  },
  {
    "path": "plugins/ThemePlugin/onboarding/onboardingtheme.ui",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ui version=\"4.0\">\n <class>OnboardingTheme</class>\n <widget class=\"QWidget\" name=\"OnboardingTheme\">\n  <property name=\"geometry\">\n   <rect>\n    <x>0</x>\n    <y>0</y>\n    <width>488</width>\n    <height>412</height>\n   </rect>\n  </property>\n  <property name=\"windowTitle\">\n   <string notr=\"true\">Form</string>\n  </property>\n  <layout class=\"QVBoxLayout\" name=\"verticalLayout\">\n   <property name=\"spacing\">\n    <number>0</number>\n   </property>\n   <property name=\"leftMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"topMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"rightMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"bottomMargin\">\n    <number>0</number>\n   </property>\n   <item>\n    <widget class=\"tTitleLabel\" name=\"titleLabel\">\n     <property name=\"text\">\n      <string>Theme</string>\n     </property>\n    </widget>\n   </item>\n   <item>\n    <widget class=\"QLabel\" name=\"label\">\n     <property name=\"text\">\n      <string>Select a theme. You'll be able to change this at any time.</string>\n     </property>\n     <property name=\"wordWrap\">\n      <bool>true</bool>\n     </property>\n     <property name=\"margin\">\n      <number>9</number>\n     </property>\n    </widget>\n   </item>\n   <item>\n    <widget class=\"Line\" name=\"line_2\">\n     <property name=\"maximumSize\">\n      <size>\n       <width>16777215</width>\n       <height>1</height>\n      </size>\n     </property>\n     <property name=\"orientation\">\n      <enum>Qt::Horizontal</enum>\n     </property>\n    </widget>\n   </item>\n   <item>\n    <layout class=\"QHBoxLayout\" name=\"horizontalLayout_3\">\n     <property name=\"spacing\">\n      <number>0</number>\n     </property>\n     <item>\n      <widget class=\"QWidget\" name=\"darkContainer\" native=\"true\">\n       <property name=\"autoFillBackground\">\n        <bool>true</bool>\n       </property>\n       <layout class=\"QHBoxLayout\" name=\"horizontalLayout_5\">\n        <item>\n         <spacer name=\"horizontalSpacer_3\">\n          <property name=\"orientation\">\n           <enum>Qt::Horizontal</enum>\n          </property>\n          <property name=\"sizeHint\" stdset=\"0\">\n           <size>\n            <width>40</width>\n            <height>20</height>\n           </size>\n          </property>\n         </spacer>\n        </item>\n        <item>\n         <widget class=\"QRadioButton\" name=\"darkButton\">\n          <property name=\"text\">\n           <string>Dark</string>\n          </property>\n         </widget>\n        </item>\n       </layout>\n      </widget>\n     </item>\n     <item>\n      <widget class=\"QWidget\" name=\"lightContainer\" native=\"true\">\n       <property name=\"autoFillBackground\">\n        <bool>true</bool>\n       </property>\n       <layout class=\"QHBoxLayout\" name=\"horizontalLayout_4\">\n        <item>\n         <widget class=\"QRadioButton\" name=\"lightButton\">\n          <property name=\"text\">\n           <string>Light</string>\n          </property>\n         </widget>\n        </item>\n        <item>\n         <spacer name=\"horizontalSpacer_4\">\n          <property name=\"orientation\">\n           <enum>Qt::Horizontal</enum>\n          </property>\n          <property name=\"sizeHint\" stdset=\"0\">\n           <size>\n            <width>40</width>\n            <height>20</height>\n           </size>\n          </property>\n         </spacer>\n        </item>\n       </layout>\n      </widget>\n     </item>\n    </layout>\n   </item>\n   <item>\n    <widget class=\"QWidget\" name=\"widget\" native=\"true\">\n     <layout class=\"QVBoxLayout\" name=\"verticalLayout_2\">\n      <item>\n       <spacer name=\"verticalSpacer_2\">\n        <property name=\"orientation\">\n         <enum>Qt::Vertical</enum>\n        </property>\n        <property name=\"sizeHint\" stdset=\"0\">\n         <size>\n          <width>20</width>\n          <height>40</height>\n         </size>\n        </property>\n       </spacer>\n      </item>\n      <item>\n       <widget class=\"QLabel\" name=\"emojiLabel\">\n        <property name=\"font\">\n         <font>\n          <pointsize>100</pointsize>\n         </font>\n        </property>\n        <property name=\"text\">\n         <string/>\n        </property>\n        <property name=\"alignment\">\n         <set>Qt::AlignCenter</set>\n        </property>\n       </widget>\n      </item>\n      <item>\n       <widget class=\"QLabel\" name=\"quote\">\n        <property name=\"font\">\n         <font>\n          <pointsize>20</pointsize>\n         </font>\n        </property>\n        <property name=\"text\">\n         <string notr=\"true\">TextLabel</string>\n        </property>\n        <property name=\"alignment\">\n         <set>Qt::AlignCenter</set>\n        </property>\n        <property name=\"wordWrap\">\n         <bool>true</bool>\n        </property>\n        <property name=\"margin\">\n         <number>9</number>\n        </property>\n       </widget>\n      </item>\n      <item>\n       <spacer name=\"verticalSpacer\">\n        <property name=\"orientation\">\n         <enum>Qt::Vertical</enum>\n        </property>\n        <property name=\"sizeHint\" stdset=\"0\">\n         <size>\n          <width>20</width>\n          <height>40</height>\n         </size>\n        </property>\n       </spacer>\n      </item>\n     </layout>\n    </widget>\n   </item>\n   <item>\n    <widget class=\"Line\" name=\"line\">\n     <property name=\"maximumSize\">\n      <size>\n       <width>16777215</width>\n       <height>1</height>\n      </size>\n     </property>\n     <property name=\"orientation\">\n      <enum>Qt::Horizontal</enum>\n     </property>\n    </widget>\n   </item>\n   <item>\n    <layout class=\"QHBoxLayout\" name=\"horizontalLayout_2\">\n     <property name=\"leftMargin\">\n      <number>9</number>\n     </property>\n     <property name=\"topMargin\">\n      <number>9</number>\n     </property>\n     <property name=\"rightMargin\">\n      <number>9</number>\n     </property>\n     <property name=\"bottomMargin\">\n      <number>9</number>\n     </property>\n     <item>\n      <spacer name=\"horizontalSpacer_2\">\n       <property name=\"orientation\">\n        <enum>Qt::Horizontal</enum>\n       </property>\n       <property name=\"sizeHint\" stdset=\"0\">\n        <size>\n         <width>40</width>\n         <height>20</height>\n        </size>\n       </property>\n      </spacer>\n     </item>\n     <item>\n      <widget class=\"QPushButton\" name=\"nextButton\">\n       <property name=\"text\">\n        <string>Next</string>\n       </property>\n       <property name=\"icon\">\n        <iconset theme=\"go-next\">\n         <normaloff>../../LocalePlugin/onboarding</normaloff>../../LocalePlugin/onboarding</iconset>\n       </property>\n      </widget>\n     </item>\n    </layout>\n   </item>\n  </layout>\n </widget>\n <customwidgets>\n  <customwidget>\n   <class>tTitleLabel</class>\n   <extends>QLabel</extends>\n   <header location=\"global\">ttitlelabel.h</header>\n   <slots>\n    <signal>backButtonClicked()</signal>\n   </slots>\n  </customwidget>\n </customwidgets>\n <resources/>\n <connections/>\n</ui>\n"
  },
  {
    "path": "plugins/ThemePlugin/plugin.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"plugin.h\"\n\n#include \"tsettings.h\"\n#include <QApplication>\n#include <QDebug>\n#include <QDir>\n#include <localemanager.h>\n#include <onboardingmanager.h>\n#include <statemanager.h>\n#include <statuscentermanager.h>\n#include <tapplication.h>\n\n#include \"onboarding/onboardingtheme.h\"\n#include \"settings/themesettingspane.h\"\n\nstruct PluginPrivate {\n        ThemeSettingsPane* themeSettingsPane;\n};\n\nPlugin::Plugin() {\n    d = new PluginPrivate();\n}\n\nPlugin::~Plugin() {\n    delete d;\n}\n\nvoid Plugin::activate() {\n    tApplication::addPluginTranslator(CNTP_TARGET_NAME);\n\n    tSettings::registerDefaults(QDir::cleanPath(qApp->applicationDirPath() + \"/../plugins/ThemePlugin/thedesk-theme.conf\"));\n    tSettings::registerDefaults(\"/usr/share/defaults/thedesk-theme.conf\");\n\n    d->themeSettingsPane = new ThemeSettingsPane();\n    StateManager::statusCenterManager()->addPane(d->themeSettingsPane, StatusCenterManager::SystemSettings);\n\n    connect(StateManager::onboardingManager(), &OnboardingManager::onboardingRequired, this, [=] {\n        StateManager::onboardingManager()->addOnboardingStep(new OnboardingTheme);\n    });\n}\n\nvoid Plugin::deactivate() {\n    StateManager::statusCenterManager()->removePane(d->themeSettingsPane);\n    d->themeSettingsPane->deleteLater();\n    tApplication::removePluginTranslator(CNTP_TARGET_NAME);\n}\n"
  },
  {
    "path": "plugins/ThemePlugin/plugin.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef PLUGIN_H\n#define PLUGIN_H\n\n#include \"plugins/plugininterface.h\"\n\nstruct PluginPrivate;\nclass Plugin : public QObject,\n               public PluginInterface {\n        Q_OBJECT\n        Q_PLUGIN_METADATA(IID PluginInterface_iid FILE \"Plugin.json\")\n        Q_INTERFACES(PluginInterface)\n\n    public:\n        Plugin();\n        ~Plugin();\n\n    private:\n        PluginPrivate* d;\n\n        // PluginInterface interface\n    public:\n        void activate();\n        void deactivate();\n};\n\n#endif // PLUGIN_H\n"
  },
  {
    "path": "plugins/ThemePlugin/settings/accentcolourpicker.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"accentcolourpicker.h\"\n\n#include <QPainter>\n#include <tsettings.h>\n#include <QMouseEvent>\n#include <QKeyEvent>\n\nstruct AccentColourPickerPrivate {\n    tSettings* settings;\n\n    QString colorName;\n    QColor color;\n    bool checked;\n};\n\nAccentColourPicker::AccentColourPicker(QWidget* parent) : QWidget(parent) {\n    d = new AccentColourPickerPrivate();\n    d->settings = new tSettings(\"theDesk.platform\", this);\n    connect(d->settings, &tSettings::settingChanged, this, [ = ](QString key, QVariant value) {\n        if (key == \"Palette/accent\") {\n            d->checked = value.toString() == d->colorName;\n            this->update();\n        }\n    });\n\n    this->setFocusPolicy(Qt::StrongFocus);\n}\n\nAccentColourPicker::~AccentColourPicker() {\n    delete d;\n}\n\nvoid AccentColourPicker::setColorName(QString name) {\n    d->colorName = name;\n    d->checked = d->settings->value(\"Palette/accent\").toString() == name;\n    updateColor();\n}\n\nQSize AccentColourPicker::sizeHint() const {\n    return SC_DPI_T(QSize(24, 24), QSize);\n}\n\nvoid AccentColourPicker::paintEvent(QPaintEvent* event) {\n    QPainter painter(this);\n    painter.setBrush(d->color);\n    painter.setPen(Qt::transparent);\n    painter.drawRect(0, 0, this->width(), this->height());\n\n    if (d->checked) {\n        QRect pxRect;\n        pxRect.setSize(SC_DPI_T(QSize(16, 16), QSize));\n        pxRect.moveCenter(QPoint(this->width() / 2, this->height() / 2));\n        painter.drawPixmap(pxRect, QIcon::fromTheme(\"dialog-ok\").pixmap(pxRect.size()));\n    }\n}\n\nvoid AccentColourPicker::mousePressEvent(QMouseEvent* event) {\n    event->accept();\n}\n\nvoid AccentColourPicker::mouseReleaseEvent(QMouseEvent* event) {\n    QRect geometry = this->geometry();\n    geometry.moveTopLeft(QPoint(0, 0));\n    if (geometry.contains(event->pos())) {\n        d->settings->setValue(\"Palette/accent\", d->colorName);\n        d->settings->sync();\n    }\n}\n\nvoid AccentColourPicker::keyPressEvent(QKeyEvent* event) {\n    if (event->key() == Qt::Key_Enter || event->key() == Qt::Key_Space || event->key() == Qt::Key_Return) {\n        d->settings->setValue(\"Palette/accent\", d->colorName);\n        d->settings->sync();\n    }\n}\n\nvoid AccentColourPicker::updateColor() {\n    if (d->colorName == \"blue\") {\n        d->color = QColor(0, 50, 150);\n    } else if (d->colorName == \"green\") {\n        d->color = QColor(0, 85, 0);\n    } else if (d->colorName == \"orange\") {\n        d->color = QColor(200, 50, 0);\n    } else if (d->colorName == \"pink\") {\n        d->color = QColor(150, 0, 150);\n    }\n\n    this->update();\n}\n"
  },
  {
    "path": "plugins/ThemePlugin/settings/accentcolourpicker.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef ACCENTCOLOURPICKER_H\n#define ACCENTCOLOURPICKER_H\n\n#include <QWidget>\n\nstruct AccentColourPickerPrivate;\nclass AccentColourPicker : public QWidget {\n        Q_OBJECT\n    public:\n        explicit AccentColourPicker(QWidget* parent = nullptr);\n        ~AccentColourPicker();\n\n        void setColorName(QString name);\n\n        QSize sizeHint() const;\n\n    signals:\n\n    private:\n        AccentColourPickerPrivate* d;\n\n        void paintEvent(QPaintEvent* event);\n        void mousePressEvent(QMouseEvent* event);\n        void mouseReleaseEvent(QMouseEvent* event);\n        void keyPressEvent(QKeyEvent* event);\n\n        void updateColor();\n};\n\n#endif // ACCENTCOLOURPICKER_H\n"
  },
  {
    "path": "plugins/ThemePlugin/settings/themesettingspane.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"themesettingspane.h\"\n#include \"ui_themesettingspane.h\"\n\n#include <statemanager.h>\n#include <statuscentermanager.h>\n#include <tsettings.h>\n#include <QIcon>\n#include <QDBusConnectionInterface>\n#include <QStandardPaths>\n#include <QStyleFactory>\n#include <QDir>\n\nstruct ThemeSettingsPanePrivate {\n    QSettings* kwinSettings;\n    tSettings* themeSettings;\n    tSettings settings;\n};\n\nThemeSettingsPane::ThemeSettingsPane() :\n    StatusCenterPane(),\n    ui(new Ui::ThemeSettingsPane) {\n    ui->setupUi(this);\n\n    d = new ThemeSettingsPanePrivate();\n    d->themeSettings = new tSettings(\"theDesk.platform\", this);\n    d->kwinSettings = new QSettings(QStandardPaths::writableLocation(QStandardPaths::ConfigLocation) + \"/kwinrc\", QSettings::IniFormat);\n\n    ui->titleLabel->setBackButtonIsMenu(true);\n    ui->titleLabel->setBackButtonShown(StateManager::instance()->statusCenterManager()->isHamburgerMenuRequired());\n    connect(StateManager::instance()->statusCenterManager(), &StatusCenterManager::isHamburgerMenuRequiredChanged, ui->titleLabel, &tTitleLabel::setBackButtonShown);\n\n    const int contentWidth = StateManager::instance()->statusCenterManager()->preferredContentWidth();\n    ui->coloursWidget->setFixedWidth(contentWidth);\n    ui->fontsWidget->setFixedWidth(contentWidth);\n    ui->widgetsWidget->setFixedWidth(contentWidth);\n    ui->windowBordersWidget->setFixedWidth(contentWidth);\n    ui->effectsWidget->setFixedWidth(contentWidth);\n\n    ui->accentBlue->setColorName(\"blue\");\n    ui->accentGreen->setColorName(\"green\");\n    ui->accentOrange->setColorName(\"orange\");\n    ui->accentPink->setColorName(\"pink\");\n\n    for (QString key : QStyleFactory::keys()) {\n        QSignalBlocker blocker(ui->widgetThemeBox);\n        ui->widgetThemeBox->addItem(key);\n    }\n\n    connect(d->themeSettings, &tSettings::settingChanged, this, [ = ](QString key, QVariant value) {\n        if (key == \"Palette/base\") {\n            updateBaseColour();\n        } else if (key.startsWith(\"Fonts/\")) {\n            updateFonts();\n        } else if (key == \"Platform/style\") {\n            updateWidgets();\n        }\n    });\n    updateBaseColour();\n    updateFonts();\n    updateWidgets();\n\n    connect(&d->settings, &tSettings::settingChanged, this, [ = ](QString key, QVariant value) {\n        if (key == \"Appearance/translucent\") {\n            ui->transparencySwitch->setChecked(value.toBool());\n        }\n    });\n    ui->transparencySwitch->setChecked(d->settings.value(\"Appearance/translucent\").toBool());\n}\n\nThemeSettingsPane::~ThemeSettingsPane() {\n    delete d;\n    delete ui;\n}\n\nvoid ThemeSettingsPane::changeEvent(QEvent* event) {\n    if (event->type() == QEvent::LanguageChange) {\n        ui->retranslateUi(this);\n        emit displayNameChanged();\n    }\n}\n\nvoid ThemeSettingsPane::updateBaseColour() {\n    d->kwinSettings->beginGroup(\"org.kde.kdecoration2\");\n    QString theme = d->kwinSettings->value(\"theme\").toString();\n    QString library = d->kwinSettings->value(\"library\").toString();\n    d->kwinSettings->endGroup();\n\n    bool isHandlingWindowBorders = (library == \"org.kde.kwin.aurorae\" && theme.startsWith(\"__aurorae__svg__Contemporary\"));\n\n    QSignalBlocker blocker(ui->baseColourComboBox);\n    QString baseColor = d->themeSettings->value(\"Palette/base\").toString();\n    if (baseColor == \"dark\") {\n        ui->baseColourComboBox->setCurrentIndex(0);\n    } else if (baseColor == \"light\") {\n        ui->baseColourComboBox->setCurrentIndex(1);\n    }\n\n    if (isHandlingWindowBorders) {\n        writeWindowBorders();\n    } else {\n        //Ensure that KWin is running and that the themes are (probably) installed\n        if (QDir(\"/usr/share/aurorae/themes/Contemporary\").exists() &&\n            QDBusConnection::sessionBus().interface()->isServiceRegistered(\"org.kde.KWin\").value()) {\n            ui->windowBordersConditonalWidget->expand();\n        }\n    }\n}\n\nvoid ThemeSettingsPane::updateFonts() {\n    QSignalBlocker blocker1(ui->interfaceFont);\n    QSignalBlocker blocker2(ui->interfaceFontSize);\n    QSignalBlocker blocker3(ui->fixedFont);\n    QSignalBlocker blocker4(ui->fixedFontSize);\n    QStringList systemFont = d->themeSettings->value(\"Fonts/system\").toStringList();\n    if (systemFont.count() == 2) {\n        QFont font(systemFont.at(0));\n        ui->interfaceFont->setCurrentFont(font);\n        ui->interfaceFontSize->setValue(systemFont.at(1).toDouble());\n    }\n\n    QStringList fixedFont = d->themeSettings->value(\"Fonts/fixed\").toStringList();\n    if (fixedFont.count() == 2) {\n        QFont font(fixedFont.at(0));\n        ui->fixedFont->setCurrentFont(font);\n        ui->fixedFontSize->setValue(fixedFont.at(1).toDouble());\n    }\n}\n\nvoid ThemeSettingsPane::updateWidgets() {\n    QSignalBlocker blocker(ui->widgetThemeBox);\n    QString name = d->themeSettings->value(\"Platform/style\").toString();\n    ui->widgetThemeBox->setCurrentIndex(QStyleFactory::keys().indexOf(name));\n}\n\nvoid ThemeSettingsPane::setFonts() {\n    d->themeSettings->setValue(\"Fonts/system\", QStringList({\n        ui->interfaceFont->currentFont().family(),\n        QString::number(ui->interfaceFontSize->value())\n    }));\n    d->themeSettings->setValue(\"Fonts/fixed\", QStringList({\n        ui->fixedFont->currentFont().family(),\n        QString::number(ui->fixedFontSize->value())\n    }));\n}\n\nvoid ThemeSettingsPane::writeWindowBorders() {\n    QString theme;\n    QString baseColor = d->themeSettings->value(\"Palette/base\").toString();\n    if (baseColor == \"dark\") {\n        theme = \"__aurorae__svg__Contemporary\";\n    } else {\n        theme = \"__aurorae__svg__Contemporary-light\";\n    }\n\n    d->kwinSettings->beginGroup(\"org.kde.kdecoration2\");\n    if (d->kwinSettings->value(\"theme\").toString() == theme && d->kwinSettings->value(\"library\").toString() == \"org.kde.kwin.aurorae\") {\n        //Nothing to do\n        d->kwinSettings->endGroup();\n        return;\n    }\n    d->kwinSettings->setValue(\"library\", \"org.kde.kwin.aurorae\");\n    d->kwinSettings->setValue(\"theme\", theme);\n    d->kwinSettings->endGroup();\n\n    d->kwinSettings->sync();\n\n    //Reload KWin\n    QDBusMessage message = QDBusMessage::createMethodCall(\"org.kde.KWin\", \"/KWin\", \"org.kde.KWin\", \"reconfigure\");\n    QDBusConnection::sessionBus().asyncCall(message);\n\n    ui->windowBordersConditonalWidget->collapse();\n}\n\nQString ThemeSettingsPane::name() {\n    return \"ThemeSettings\";\n}\n\nQString ThemeSettingsPane::displayName() {\n    return tr(\"Theme\");\n}\n\nQIcon ThemeSettingsPane::icon() {\n    return QIcon::fromTheme(\"preferences-desktop-theme\");\n}\n\nQWidget* ThemeSettingsPane::leftPane() {\n    return nullptr;\n}\n\nvoid ThemeSettingsPane::on_baseColourComboBox_currentIndexChanged(int index) {\n    switch (index) {\n        case 0:\n            d->themeSettings->setValue(\"Palette/base\", \"dark\");\n            break;\n        case 1:\n            d->themeSettings->setValue(\"Palette/base\", \"light\");\n    }\n}\n\nvoid ThemeSettingsPane::on_titleLabel_backButtonClicked() {\n    StateManager::statusCenterManager()->showStatusCenterHamburgerMenu();\n}\n\nvoid ThemeSettingsPane::on_fixedFont_currentFontChanged(const QFont& f) {\n    setFonts();\n}\n\nvoid ThemeSettingsPane::on_fixedFontSize_valueChanged(double arg1) {\n    setFonts();\n}\n\nvoid ThemeSettingsPane::on_interfaceFont_currentFontChanged(const QFont& f) {\n    setFonts();\n}\n\nvoid ThemeSettingsPane::on_interfaceFontSize_valueChanged(double arg1) {\n    setFonts();\n}\n\nvoid ThemeSettingsPane::on_widgetThemeBox_currentIndexChanged(int index) {\n    QString name = QStyleFactory::keys().at(index);\n    d->themeSettings->setValue(\"Platform/style\", name);\n}\n\nvoid ThemeSettingsPane::on_setWindowBordersButton_clicked() {\n    writeWindowBorders();\n}\n\nvoid ThemeSettingsPane::on_transparencySwitch_toggled(bool checked) {\n    d->settings.setValue(\"Appearance/translucent\", checked);\n}\n"
  },
  {
    "path": "plugins/ThemePlugin/settings/themesettingspane.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef THEMESETTINGSPANE_H\n#define THEMESETTINGSPANE_H\n\n#include <statuscenterpane.h>\n\nnamespace Ui {\n    class ThemeSettingsPane;\n}\n\nstruct ThemeSettingsPanePrivate;\nclass ThemeSettingsPane : public StatusCenterPane {\n        Q_OBJECT\n\n    public:\n        explicit ThemeSettingsPane();\n        ~ThemeSettingsPane();\n\n    private:\n        Ui::ThemeSettingsPane* ui;\n        ThemeSettingsPanePrivate* d;\n\n        void changeEvent(QEvent* event);\n\n        void updateBaseColour();\n        void updateFonts();\n        void updateWidgets();\n        void setFonts();\n        void writeWindowBorders();\n\n        // StatusCenterPane interface\n    public:\n        QString name();\n        QString displayName();\n        QIcon icon();\n        QWidget* leftPane();\n    private slots:\n        void on_baseColourComboBox_currentIndexChanged(int index);\n        void on_titleLabel_backButtonClicked();\n        void on_fixedFont_currentFontChanged(const QFont& f);\n        void on_fixedFontSize_valueChanged(double arg1);\n        void on_interfaceFont_currentFontChanged(const QFont& f);\n        void on_interfaceFontSize_valueChanged(double arg1);\n        void on_widgetThemeBox_currentIndexChanged(int index);\n        void on_setWindowBordersButton_clicked();\n        void on_transparencySwitch_toggled(bool checked);\n};\n\n#endif // THEMESETTINGSPANE_H\n"
  },
  {
    "path": "plugins/ThemePlugin/settings/themesettingspane.ui",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ui version=\"4.0\">\n <class>ThemeSettingsPane</class>\n <widget class=\"QWidget\" name=\"ThemeSettingsPane\">\n  <property name=\"geometry\">\n   <rect>\n    <x>0</x>\n    <y>0</y>\n    <width>627</width>\n    <height>620</height>\n   </rect>\n  </property>\n  <property name=\"windowTitle\">\n   <string notr=\"true\">Form</string>\n  </property>\n  <layout class=\"QVBoxLayout\" name=\"verticalLayout\">\n   <property name=\"spacing\">\n    <number>0</number>\n   </property>\n   <property name=\"leftMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"topMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"rightMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"bottomMargin\">\n    <number>0</number>\n   </property>\n   <item>\n    <widget class=\"tTitleLabel\" name=\"titleLabel\">\n     <property name=\"text\">\n      <string>Theme</string>\n     </property>\n    </widget>\n   </item>\n   <item>\n    <widget class=\"QScrollArea\" name=\"scrollArea\">\n     <property name=\"frameShape\">\n      <enum>QFrame::NoFrame</enum>\n     </property>\n     <property name=\"widgetResizable\">\n      <bool>true</bool>\n     </property>\n     <widget class=\"QWidget\" name=\"scrollAreaWidgetContents\">\n      <property name=\"geometry\">\n       <rect>\n        <x>0</x>\n        <y>-124</y>\n        <width>613</width>\n        <height>735</height>\n       </rect>\n      </property>\n      <layout class=\"QVBoxLayout\" name=\"verticalLayout_3\">\n       <property name=\"spacing\">\n        <number>0</number>\n       </property>\n       <property name=\"leftMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"topMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"rightMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"bottomMargin\">\n        <number>0</number>\n       </property>\n       <item alignment=\"Qt::AlignHCenter\">\n        <widget class=\"QWidget\" name=\"coloursWidget\" native=\"true\">\n         <layout class=\"QGridLayout\" name=\"gridLayout\">\n          <item row=\"3\" column=\"1\">\n           <widget class=\"QWidget\" name=\"widget\" native=\"true\">\n            <layout class=\"QHBoxLayout\" name=\"horizontalLayout\">\n             <property name=\"spacing\">\n              <number>0</number>\n             </property>\n             <property name=\"leftMargin\">\n              <number>0</number>\n             </property>\n             <property name=\"topMargin\">\n              <number>0</number>\n             </property>\n             <property name=\"rightMargin\">\n              <number>0</number>\n             </property>\n             <property name=\"bottomMargin\">\n              <number>0</number>\n             </property>\n             <item>\n              <widget class=\"AccentColourPicker\" name=\"accentBlue\" native=\"true\">\n               <property name=\"focusPolicy\">\n                <enum>Qt::StrongFocus</enum>\n               </property>\n              </widget>\n             </item>\n             <item>\n              <widget class=\"AccentColourPicker\" name=\"accentGreen\" native=\"true\">\n               <property name=\"focusPolicy\">\n                <enum>Qt::StrongFocus</enum>\n               </property>\n              </widget>\n             </item>\n             <item>\n              <widget class=\"AccentColourPicker\" name=\"accentOrange\" native=\"true\">\n               <property name=\"focusPolicy\">\n                <enum>Qt::StrongFocus</enum>\n               </property>\n              </widget>\n             </item>\n             <item>\n              <widget class=\"AccentColourPicker\" name=\"accentPink\" native=\"true\">\n               <property name=\"focusPolicy\">\n                <enum>Qt::StrongFocus</enum>\n               </property>\n              </widget>\n             </item>\n            </layout>\n           </widget>\n          </item>\n          <item row=\"3\" column=\"0\">\n           <widget class=\"QLabel\" name=\"label_4\">\n            <property name=\"text\">\n             <string>Accent Colour</string>\n            </property>\n           </widget>\n          </item>\n          <item row=\"2\" column=\"1\">\n           <widget class=\"QComboBox\" name=\"baseColourComboBox\">\n            <property name=\"sizePolicy\">\n             <sizepolicy hsizetype=\"Expanding\" vsizetype=\"Fixed\">\n              <horstretch>0</horstretch>\n              <verstretch>0</verstretch>\n             </sizepolicy>\n            </property>\n            <item>\n             <property name=\"text\">\n              <string>Dark</string>\n             </property>\n            </item>\n            <item>\n             <property name=\"text\">\n              <string>Light</string>\n             </property>\n            </item>\n           </widget>\n          </item>\n          <item row=\"1\" column=\"0\" colspan=\"2\">\n           <widget class=\"QLabel\" name=\"label_2\">\n            <property name=\"text\">\n             <string>Change the colours of the interface</string>\n            </property>\n           </widget>\n          </item>\n          <item row=\"2\" column=\"0\">\n           <widget class=\"QLabel\" name=\"label_3\">\n            <property name=\"text\">\n             <string>Base Colour</string>\n            </property>\n           </widget>\n          </item>\n          <item row=\"0\" column=\"0\" colspan=\"2\">\n           <widget class=\"QLabel\" name=\"label\">\n            <property name=\"font\">\n             <font>\n              <weight>75</weight>\n              <bold>true</bold>\n             </font>\n            </property>\n            <property name=\"text\">\n             <string>COLOURS</string>\n            </property>\n           </widget>\n          </item>\n         </layout>\n        </widget>\n       </item>\n       <item>\n        <widget class=\"Line\" name=\"line\">\n         <property name=\"maximumSize\">\n          <size>\n           <width>16777215</width>\n           <height>1</height>\n          </size>\n         </property>\n         <property name=\"orientation\">\n          <enum>Qt::Horizontal</enum>\n         </property>\n        </widget>\n       </item>\n       <item>\n        <widget class=\"tConditionalWidget\" name=\"windowBordersConditonalWidget\" native=\"true\">\n         <layout class=\"QVBoxLayout\" name=\"verticalLayout_4\">\n          <property name=\"spacing\">\n           <number>0</number>\n          </property>\n          <property name=\"leftMargin\">\n           <number>0</number>\n          </property>\n          <property name=\"topMargin\">\n           <number>0</number>\n          </property>\n          <property name=\"rightMargin\">\n           <number>0</number>\n          </property>\n          <property name=\"bottomMargin\">\n           <number>0</number>\n          </property>\n          <item alignment=\"Qt::AlignHCenter\">\n           <widget class=\"QWidget\" name=\"windowBordersWidget\" native=\"true\">\n            <layout class=\"QVBoxLayout\" name=\"verticalLayout_2\">\n             <item>\n              <widget class=\"QLabel\" name=\"label_13\">\n               <property name=\"font\">\n                <font>\n                 <weight>75</weight>\n                 <bold>true</bold>\n                </font>\n               </property>\n               <property name=\"text\">\n                <string>WINDOW BORDERS</string>\n               </property>\n              </widget>\n             </item>\n             <item>\n              <widget class=\"QLabel\" name=\"label_14\">\n               <property name=\"text\">\n                <string>If the window borders don't look correct, we can fix that up for you. This will also change your window borders in KDE, and any other desktop that uses KWin for the window manager.</string>\n               </property>\n               <property name=\"wordWrap\">\n                <bool>true</bool>\n               </property>\n              </widget>\n             </item>\n             <item>\n              <layout class=\"QHBoxLayout\" name=\"horizontalLayout_3\">\n               <item>\n                <widget class=\"QPushButton\" name=\"setWindowBordersButton\">\n                 <property name=\"text\">\n                  <string>Set Window Borders</string>\n                 </property>\n                </widget>\n               </item>\n              </layout>\n             </item>\n            </layout>\n           </widget>\n          </item>\n          <item>\n           <widget class=\"Line\" name=\"line_3\">\n            <property name=\"maximumSize\">\n             <size>\n              <width>16777215</width>\n              <height>1</height>\n             </size>\n            </property>\n            <property name=\"orientation\">\n             <enum>Qt::Horizontal</enum>\n            </property>\n           </widget>\n          </item>\n         </layout>\n        </widget>\n       </item>\n       <item alignment=\"Qt::AlignHCenter\">\n        <widget class=\"QWidget\" name=\"fontsWidget\" native=\"true\">\n         <layout class=\"QGridLayout\" name=\"gridLayout_2\">\n          <item row=\"2\" column=\"0\">\n           <widget class=\"QLabel\" name=\"label_7\">\n            <property name=\"text\">\n             <string>Fixed Width Font</string>\n            </property>\n           </widget>\n          </item>\n          <item row=\"1\" column=\"0\">\n           <widget class=\"QLabel\" name=\"label_6\">\n            <property name=\"text\">\n             <string>Interface Font</string>\n            </property>\n           </widget>\n          </item>\n          <item row=\"1\" column=\"1\">\n           <widget class=\"QFontComboBox\" name=\"interfaceFont\">\n            <property name=\"sizePolicy\">\n             <sizepolicy hsizetype=\"Expanding\" vsizetype=\"Fixed\">\n              <horstretch>0</horstretch>\n              <verstretch>0</verstretch>\n             </sizepolicy>\n            </property>\n           </widget>\n          </item>\n          <item row=\"0\" column=\"0\">\n           <widget class=\"QLabel\" name=\"label_5\">\n            <property name=\"font\">\n             <font>\n              <weight>75</weight>\n              <bold>true</bold>\n             </font>\n            </property>\n            <property name=\"text\">\n             <string>FONTS</string>\n            </property>\n           </widget>\n          </item>\n          <item row=\"2\" column=\"1\">\n           <widget class=\"QFontComboBox\" name=\"fixedFont\">\n            <property name=\"sizePolicy\">\n             <sizepolicy hsizetype=\"Expanding\" vsizetype=\"Fixed\">\n              <horstretch>0</horstretch>\n              <verstretch>0</verstretch>\n             </sizepolicy>\n            </property>\n            <property name=\"fontFilters\">\n             <set>QFontComboBox::MonospacedFonts</set>\n            </property>\n           </widget>\n          </item>\n          <item row=\"1\" column=\"2\">\n           <widget class=\"QDoubleSpinBox\" name=\"interfaceFontSize\">\n            <property name=\"decimals\">\n             <number>0</number>\n            </property>\n            <property name=\"minimum\">\n             <double>5.000000000000000</double>\n            </property>\n           </widget>\n          </item>\n          <item row=\"2\" column=\"2\">\n           <widget class=\"QDoubleSpinBox\" name=\"fixedFontSize\">\n            <property name=\"decimals\">\n             <number>0</number>\n            </property>\n            <property name=\"minimum\">\n             <double>5.000000000000000</double>\n            </property>\n           </widget>\n          </item>\n         </layout>\n        </widget>\n       </item>\n       <item>\n        <widget class=\"Line\" name=\"line_2\">\n         <property name=\"maximumSize\">\n          <size>\n           <width>16777215</width>\n           <height>1</height>\n          </size>\n         </property>\n         <property name=\"orientation\">\n          <enum>Qt::Horizontal</enum>\n         </property>\n        </widget>\n       </item>\n       <item alignment=\"Qt::AlignHCenter\">\n        <widget class=\"QWidget\" name=\"widgetsWidget\" native=\"true\">\n         <layout class=\"QGridLayout\" name=\"gridLayout_3\">\n          <item row=\"1\" column=\"0\" colspan=\"2\">\n           <widget class=\"QLabel\" name=\"label_9\">\n            <property name=\"text\">\n             <string>Set the appearance of buttons, text boxes and other interface elements</string>\n            </property>\n           </widget>\n          </item>\n          <item row=\"2\" column=\"0\">\n           <widget class=\"QLabel\" name=\"label_10\">\n            <property name=\"text\">\n             <string>Widget Theme</string>\n            </property>\n           </widget>\n          </item>\n          <item row=\"0\" column=\"0\" colspan=\"2\">\n           <widget class=\"QLabel\" name=\"label_8\">\n            <property name=\"font\">\n             <font>\n              <weight>75</weight>\n              <bold>true</bold>\n             </font>\n            </property>\n            <property name=\"text\">\n             <string>WIDGETS</string>\n            </property>\n           </widget>\n          </item>\n          <item row=\"2\" column=\"1\">\n           <widget class=\"QComboBox\" name=\"widgetThemeBox\">\n            <property name=\"sizePolicy\">\n             <sizepolicy hsizetype=\"Expanding\" vsizetype=\"Fixed\">\n              <horstretch>0</horstretch>\n              <verstretch>0</verstretch>\n             </sizepolicy>\n            </property>\n           </widget>\n          </item>\n          <item row=\"3\" column=\"0\" colspan=\"2\">\n           <widget class=\"QFrame\" name=\"frame\">\n            <property name=\"frameShape\">\n             <enum>QFrame::StyledPanel</enum>\n            </property>\n            <property name=\"frameShadow\">\n             <enum>QFrame::Raised</enum>\n            </property>\n            <layout class=\"QGridLayout\" name=\"gridLayout_4\">\n             <item row=\"4\" column=\"1\">\n              <widget class=\"QProgressBar\" name=\"progressBar_2\">\n               <property name=\"maximum\">\n                <number>0</number>\n               </property>\n               <property name=\"value\">\n                <number>-1</number>\n               </property>\n              </widget>\n             </item>\n             <item row=\"6\" column=\"0\" colspan=\"2\">\n              <layout class=\"QHBoxLayout\" name=\"horizontalLayout_2\">\n               <item>\n                <spacer name=\"horizontalSpacer\">\n                 <property name=\"orientation\">\n                  <enum>Qt::Horizontal</enum>\n                 </property>\n                 <property name=\"sizeHint\" stdset=\"0\">\n                  <size>\n                   <width>40</width>\n                   <height>20</height>\n                  </size>\n                 </property>\n                </spacer>\n               </item>\n               <item>\n                <widget class=\"QPushButton\" name=\"pushButton\">\n                 <property name=\"text\">\n                  <string>Button</string>\n                 </property>\n                 <property name=\"icon\">\n                  <iconset theme=\"dialog-ok\">\n                   <normaloff>.</normaloff>.</iconset>\n                 </property>\n                </widget>\n               </item>\n              </layout>\n             </item>\n             <item row=\"3\" column=\"1\">\n              <widget class=\"QRadioButton\" name=\"radioButton_2\">\n               <property name=\"text\">\n                <string>Radio Button 2</string>\n               </property>\n               <property name=\"checked\">\n                <bool>true</bool>\n               </property>\n              </widget>\n             </item>\n             <item row=\"1\" column=\"0\" colspan=\"2\">\n              <widget class=\"QLabel\" name=\"label_12\">\n               <property name=\"text\">\n                <string>Using the theme set above, interface elements will look like this:</string>\n               </property>\n              </widget>\n             </item>\n             <item row=\"2\" column=\"1\">\n              <widget class=\"QRadioButton\" name=\"radioButton\">\n               <property name=\"text\">\n                <string>Radio Button 1</string>\n               </property>\n              </widget>\n             </item>\n             <item row=\"3\" column=\"0\">\n              <widget class=\"QCheckBox\" name=\"checkBox_2\">\n               <property name=\"text\">\n                <string>Check Box 2</string>\n               </property>\n               <property name=\"checked\">\n                <bool>true</bool>\n               </property>\n              </widget>\n             </item>\n             <item row=\"0\" column=\"0\" colspan=\"2\">\n              <widget class=\"QLabel\" name=\"label_11\">\n               <property name=\"font\">\n                <font>\n                 <weight>75</weight>\n                 <bold>true</bold>\n                </font>\n               </property>\n               <property name=\"text\">\n                <string>DEMO</string>\n               </property>\n              </widget>\n             </item>\n             <item row=\"2\" column=\"0\">\n              <widget class=\"QCheckBox\" name=\"checkBox\">\n               <property name=\"text\">\n                <string>Check Box 1</string>\n               </property>\n              </widget>\n             </item>\n             <item row=\"4\" column=\"0\">\n              <widget class=\"QProgressBar\" name=\"progressBar\">\n               <property name=\"value\">\n                <number>24</number>\n               </property>\n              </widget>\n             </item>\n             <item row=\"5\" column=\"0\" colspan=\"2\">\n              <widget class=\"QLineEdit\" name=\"lineEdit\">\n               <property name=\"placeholderText\">\n                <string>Type here!</string>\n               </property>\n              </widget>\n             </item>\n            </layout>\n           </widget>\n          </item>\n         </layout>\n        </widget>\n       </item>\n       <item>\n        <widget class=\"Line\" name=\"line_4\">\n         <property name=\"maximumSize\">\n          <size>\n           <width>16777215</width>\n           <height>1</height>\n          </size>\n         </property>\n         <property name=\"orientation\">\n          <enum>Qt::Horizontal</enum>\n         </property>\n        </widget>\n       </item>\n       <item alignment=\"Qt::AlignHCenter\">\n        <widget class=\"QWidget\" name=\"effectsWidget\" native=\"true\">\n         <layout class=\"QGridLayout\" name=\"gridLayout_5\">\n          <item row=\"1\" column=\"0\">\n           <widget class=\"QLabel\" name=\"label_16\">\n            <property name=\"sizePolicy\">\n             <sizepolicy hsizetype=\"Expanding\" vsizetype=\"Preferred\">\n              <horstretch>0</horstretch>\n              <verstretch>0</verstretch>\n             </sizepolicy>\n            </property>\n            <property name=\"text\">\n             <string>Transparency Effects</string>\n            </property>\n           </widget>\n          </item>\n          <item row=\"1\" column=\"1\">\n           <widget class=\"tSwitch\" name=\"transparencySwitch\">\n            <property name=\"text\">\n             <string notr=\"true\">TransparencySwitch</string>\n            </property>\n           </widget>\n          </item>\n          <item row=\"0\" column=\"0\" colspan=\"2\">\n           <widget class=\"QLabel\" name=\"label_15\">\n            <property name=\"font\">\n             <font>\n              <weight>75</weight>\n              <bold>true</bold>\n             </font>\n            </property>\n            <property name=\"text\">\n             <string>EFFECTS</string>\n            </property>\n           </widget>\n          </item>\n         </layout>\n        </widget>\n       </item>\n       <item>\n        <spacer name=\"verticalSpacer\">\n         <property name=\"orientation\">\n          <enum>Qt::Vertical</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>20</width>\n           <height>40</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n      </layout>\n     </widget>\n    </widget>\n   </item>\n  </layout>\n </widget>\n <customwidgets>\n  <customwidget>\n   <class>tTitleLabel</class>\n   <extends>QLabel</extends>\n   <header location=\"global\">ttitlelabel.h</header>\n   <slots>\n    <signal>backButtonClicked()</signal>\n   </slots>\n  </customwidget>\n  <customwidget>\n   <class>AccentColourPicker</class>\n   <extends>QWidget</extends>\n   <header>settings/accentcolourpicker.h</header>\n   <container>1</container>\n  </customwidget>\n  <customwidget>\n   <class>tSwitch</class>\n   <extends>QPushButton</extends>\n   <header location=\"global\">tswitch.h</header>\n  </customwidget>\n  <customwidget>\n   <class>tConditionalWidget</class>\n   <extends>QWidget</extends>\n   <header location=\"global\">tconditionalwidget.h</header>\n   <container>1</container>\n  </customwidget>\n </customwidgets>\n <tabstops>\n  <tabstop>scrollArea</tabstop>\n  <tabstop>baseColourComboBox</tabstop>\n  <tabstop>accentBlue</tabstop>\n  <tabstop>accentGreen</tabstop>\n  <tabstop>accentOrange</tabstop>\n  <tabstop>accentPink</tabstop>\n  <tabstop>interfaceFont</tabstop>\n  <tabstop>interfaceFontSize</tabstop>\n  <tabstop>fixedFont</tabstop>\n  <tabstop>fixedFontSize</tabstop>\n </tabstops>\n <resources/>\n <connections/>\n</ui>\n"
  },
  {
    "path": "plugins/ThemePlugin/thedesk-theme.conf",
    "content": ""
  },
  {
    "path": "plugins/ThemePlugin/thedesk-themeplugin-resources.qrc",
    "content": "<RCC>\n    <qresource prefix=\"/thedesk/themeplugin\">\n        <file>icons/moonman.svg</file>\n        <file>icons/sunglassesman.svg</file>\n    </qresource>\n</RCC>\n"
  },
  {
    "path": "plugins/ThemePlugin/translations/ar_SA.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"ar_SA\" sourcelanguage=\"en_US\">\n<context>\n    <name>OnboardingTheme</name>\n    <message>\n        <location filename=\"../onboarding/onboardingtheme.ui\" line=\"35\"/>\n        <location filename=\"../onboarding/onboardingtheme.cpp\" line=\"91\"/>\n        <source>Theme</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtheme.ui\" line=\"42\"/>\n        <source>Select a theme. You&apos;ll be able to change this at any time.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtheme.ui\" line=\"92\"/>\n        <source>Dark</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtheme.ui\" line=\"108\"/>\n        <source>Light</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtheme.ui\" line=\"241\"/>\n        <source>Next</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtheme.cpp\" line=\"76\"/>\n        <source>Intellect has spoken; blinding shall be no more!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtheme.cpp\" line=\"81\"/>\n        <source>One whose wisdom has brought them the light of day!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>ThemeSettingsPane</name>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"35\"/>\n        <location filename=\"../settings/themesettingspane.cpp\" line=\"198\"/>\n        <source>Theme</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"127\"/>\n        <source>Accent Colour</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"141\"/>\n        <source>Dark</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"146\"/>\n        <source>Light</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"154\"/>\n        <source>Change the colours of the interface</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"161\"/>\n        <source>Base Colour</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"174\"/>\n        <source>COLOURS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"224\"/>\n        <source>WINDOW BORDERS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"231\"/>\n        <source>If the window borders don&apos;t look correct, we can fix that up for you. This will also change your window borders in KDE, and any other desktop that uses KWin for the window manager.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"243\"/>\n        <source>Set Window Borders</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"274\"/>\n        <source>Fixed Width Font</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"281\"/>\n        <source>Interface Font</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"304\"/>\n        <source>FONTS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"363\"/>\n        <source>Set the appearance of buttons, text boxes and other interface elements</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"370\"/>\n        <source>Widget Theme</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"383\"/>\n        <source>WIDGETS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"434\"/>\n        <source>Button</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"447\"/>\n        <source>Radio Button 2</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"457\"/>\n        <source>Using the theme set above, interface elements will look like this:</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"464\"/>\n        <source>Radio Button 1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"471\"/>\n        <source>Check Box 2</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"487\"/>\n        <source>DEMO</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"494\"/>\n        <source>Check Box 1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"508\"/>\n        <source>Type here!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"543\"/>\n        <source>Transparency Effects</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"563\"/>\n        <source>EFFECTS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/ThemePlugin/translations/au_AU.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"au_AU\" sourcelanguage=\"en_US\">\n<context>\n    <name>OnboardingTheme</name>\n    <message>\n        <location filename=\"../onboarding/onboardingtheme.ui\" line=\"35\"/>\n        <location filename=\"../onboarding/onboardingtheme.cpp\" line=\"91\"/>\n        <source>Theme</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtheme.ui\" line=\"42\"/>\n        <source>Select a theme. You&apos;ll be able to change this at any time.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtheme.ui\" line=\"92\"/>\n        <source>Dark</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtheme.ui\" line=\"108\"/>\n        <source>Light</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtheme.ui\" line=\"241\"/>\n        <source>Next</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtheme.cpp\" line=\"76\"/>\n        <source>Intellect has spoken; blinding shall be no more!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtheme.cpp\" line=\"81\"/>\n        <source>One whose wisdom has brought them the light of day!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>ThemeSettingsPane</name>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"35\"/>\n        <location filename=\"../settings/themesettingspane.cpp\" line=\"198\"/>\n        <source>Theme</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"127\"/>\n        <source>Accent Colour</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"141\"/>\n        <source>Dark</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"146\"/>\n        <source>Light</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"154\"/>\n        <source>Change the colours of the interface</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"161\"/>\n        <source>Base Colour</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"174\"/>\n        <source>COLOURS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"224\"/>\n        <source>WINDOW BORDERS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"231\"/>\n        <source>If the window borders don&apos;t look correct, we can fix that up for you. This will also change your window borders in KDE, and any other desktop that uses KWin for the window manager.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"243\"/>\n        <source>Set Window Borders</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"274\"/>\n        <source>Fixed Width Font</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"281\"/>\n        <source>Interface Font</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"304\"/>\n        <source>FONTS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"363\"/>\n        <source>Set the appearance of buttons, text boxes and other interface elements</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"370\"/>\n        <source>Widget Theme</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"383\"/>\n        <source>WIDGETS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"434\"/>\n        <source>Button</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"447\"/>\n        <source>Radio Button 2</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"457\"/>\n        <source>Using the theme set above, interface elements will look like this:</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"464\"/>\n        <source>Radio Button 1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"471\"/>\n        <source>Check Box 2</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"487\"/>\n        <source>DEMO</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"494\"/>\n        <source>Check Box 1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"508\"/>\n        <source>Type here!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"543\"/>\n        <source>Transparency Effects</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"563\"/>\n        <source>EFFECTS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/ThemePlugin/translations/cy.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"cy\" sourcelanguage=\"en_US\">\n<context>\n    <name>OnboardingTheme</name>\n    <message>\n        <location filename=\"../onboarding/onboardingtheme.ui\" line=\"35\"/>\n        <location filename=\"../onboarding/onboardingtheme.cpp\" line=\"91\"/>\n        <source>Theme</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtheme.ui\" line=\"42\"/>\n        <source>Select a theme. You&apos;ll be able to change this at any time.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtheme.ui\" line=\"92\"/>\n        <source>Dark</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtheme.ui\" line=\"108\"/>\n        <source>Light</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtheme.ui\" line=\"241\"/>\n        <source>Next</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtheme.cpp\" line=\"76\"/>\n        <source>Intellect has spoken; blinding shall be no more!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtheme.cpp\" line=\"81\"/>\n        <source>One whose wisdom has brought them the light of day!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>ThemeSettingsPane</name>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"35\"/>\n        <location filename=\"../settings/themesettingspane.cpp\" line=\"198\"/>\n        <source>Theme</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"127\"/>\n        <source>Accent Colour</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"141\"/>\n        <source>Dark</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"146\"/>\n        <source>Light</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"154\"/>\n        <source>Change the colours of the interface</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"161\"/>\n        <source>Base Colour</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"174\"/>\n        <source>COLOURS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"224\"/>\n        <source>WINDOW BORDERS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"231\"/>\n        <source>If the window borders don&apos;t look correct, we can fix that up for you. This will also change your window borders in KDE, and any other desktop that uses KWin for the window manager.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"243\"/>\n        <source>Set Window Borders</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"274\"/>\n        <source>Fixed Width Font</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"281\"/>\n        <source>Interface Font</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"304\"/>\n        <source>FONTS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"363\"/>\n        <source>Set the appearance of buttons, text boxes and other interface elements</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"370\"/>\n        <source>Widget Theme</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"383\"/>\n        <source>WIDGETS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"434\"/>\n        <source>Button</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"447\"/>\n        <source>Radio Button 2</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"457\"/>\n        <source>Using the theme set above, interface elements will look like this:</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"464\"/>\n        <source>Radio Button 1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"471\"/>\n        <source>Check Box 2</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"487\"/>\n        <source>DEMO</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"494\"/>\n        <source>Check Box 1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"508\"/>\n        <source>Type here!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"543\"/>\n        <source>Transparency Effects</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"563\"/>\n        <source>EFFECTS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/ThemePlugin/translations/da.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"da\" sourcelanguage=\"en_US\">\n<context>\n    <name>OnboardingTheme</name>\n    <message>\n        <location filename=\"../onboarding/onboardingtheme.ui\" line=\"35\"/>\n        <location filename=\"../onboarding/onboardingtheme.cpp\" line=\"91\"/>\n        <source>Theme</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtheme.ui\" line=\"42\"/>\n        <source>Select a theme. You&apos;ll be able to change this at any time.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtheme.ui\" line=\"92\"/>\n        <source>Dark</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtheme.ui\" line=\"108\"/>\n        <source>Light</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtheme.ui\" line=\"241\"/>\n        <source>Next</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtheme.cpp\" line=\"76\"/>\n        <source>Intellect has spoken; blinding shall be no more!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtheme.cpp\" line=\"81\"/>\n        <source>One whose wisdom has brought them the light of day!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>ThemeSettingsPane</name>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"35\"/>\n        <location filename=\"../settings/themesettingspane.cpp\" line=\"198\"/>\n        <source>Theme</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"127\"/>\n        <source>Accent Colour</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"141\"/>\n        <source>Dark</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"146\"/>\n        <source>Light</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"154\"/>\n        <source>Change the colours of the interface</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"161\"/>\n        <source>Base Colour</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"174\"/>\n        <source>COLOURS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"224\"/>\n        <source>WINDOW BORDERS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"231\"/>\n        <source>If the window borders don&apos;t look correct, we can fix that up for you. This will also change your window borders in KDE, and any other desktop that uses KWin for the window manager.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"243\"/>\n        <source>Set Window Borders</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"274\"/>\n        <source>Fixed Width Font</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"281\"/>\n        <source>Interface Font</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"304\"/>\n        <source>FONTS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"363\"/>\n        <source>Set the appearance of buttons, text boxes and other interface elements</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"370\"/>\n        <source>Widget Theme</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"383\"/>\n        <source>WIDGETS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"434\"/>\n        <source>Button</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"447\"/>\n        <source>Radio Button 2</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"457\"/>\n        <source>Using the theme set above, interface elements will look like this:</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"464\"/>\n        <source>Radio Button 1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"471\"/>\n        <source>Check Box 2</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"487\"/>\n        <source>DEMO</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"494\"/>\n        <source>Check Box 1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"508\"/>\n        <source>Type here!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"543\"/>\n        <source>Transparency Effects</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"563\"/>\n        <source>EFFECTS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/ThemePlugin/translations/de.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"de\" sourcelanguage=\"en_US\">\n<context>\n    <name>OnboardingTheme</name>\n    <message>\n        <location filename=\"../onboarding/onboardingtheme.ui\" line=\"35\"/>\n        <location filename=\"../onboarding/onboardingtheme.cpp\" line=\"91\"/>\n        <source>Theme</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtheme.ui\" line=\"42\"/>\n        <source>Select a theme. You&apos;ll be able to change this at any time.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtheme.ui\" line=\"92\"/>\n        <source>Dark</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtheme.ui\" line=\"108\"/>\n        <source>Light</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtheme.ui\" line=\"241\"/>\n        <source>Next</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtheme.cpp\" line=\"76\"/>\n        <source>Intellect has spoken; blinding shall be no more!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtheme.cpp\" line=\"81\"/>\n        <source>One whose wisdom has brought them the light of day!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>ThemeSettingsPane</name>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"35\"/>\n        <location filename=\"../settings/themesettingspane.cpp\" line=\"198\"/>\n        <source>Theme</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"127\"/>\n        <source>Accent Colour</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"141\"/>\n        <source>Dark</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"146\"/>\n        <source>Light</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"154\"/>\n        <source>Change the colours of the interface</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"161\"/>\n        <source>Base Colour</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"174\"/>\n        <source>COLOURS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"224\"/>\n        <source>WINDOW BORDERS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"231\"/>\n        <source>If the window borders don&apos;t look correct, we can fix that up for you. This will also change your window borders in KDE, and any other desktop that uses KWin for the window manager.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"243\"/>\n        <source>Set Window Borders</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"274\"/>\n        <source>Fixed Width Font</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"281\"/>\n        <source>Interface Font</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"304\"/>\n        <source>FONTS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"363\"/>\n        <source>Set the appearance of buttons, text boxes and other interface elements</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"370\"/>\n        <source>Widget Theme</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"383\"/>\n        <source>WIDGETS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"434\"/>\n        <source>Button</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"447\"/>\n        <source>Radio Button 2</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"457\"/>\n        <source>Using the theme set above, interface elements will look like this:</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"464\"/>\n        <source>Radio Button 1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"471\"/>\n        <source>Check Box 2</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"487\"/>\n        <source>DEMO</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"494\"/>\n        <source>Check Box 1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"508\"/>\n        <source>Type here!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"543\"/>\n        <source>Transparency Effects</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"563\"/>\n        <source>EFFECTS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/ThemePlugin/translations/en_GB.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"en_GB\" sourcelanguage=\"en_US\">\n<context>\n    <name>OnboardingTheme</name>\n    <message>\n        <location filename=\"../onboarding/onboardingtheme.ui\" line=\"35\"/>\n        <location filename=\"../onboarding/onboardingtheme.cpp\" line=\"91\"/>\n        <source>Theme</source>\n        <translation>Theme</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtheme.ui\" line=\"42\"/>\n        <source>Select a theme. You&apos;ll be able to change this at any time.</source>\n        <translation>Select a theme. You&apos;ll be able to change this at any time.</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtheme.ui\" line=\"92\"/>\n        <source>Dark</source>\n        <translation>Dark</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtheme.ui\" line=\"108\"/>\n        <source>Light</source>\n        <translation>Light</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtheme.ui\" line=\"241\"/>\n        <source>Next</source>\n        <translation>Next</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtheme.cpp\" line=\"76\"/>\n        <source>Intellect has spoken; blinding shall be no more!</source>\n        <translation>Intellect has spoken; blinding shall be no more!</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtheme.cpp\" line=\"81\"/>\n        <source>One whose wisdom has brought them the light of day!</source>\n        <translation>One whose wisdom has brought them the light of day!</translation>\n    </message>\n</context>\n<context>\n    <name>ThemeSettingsPane</name>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"35\"/>\n        <location filename=\"../settings/themesettingspane.cpp\" line=\"198\"/>\n        <source>Theme</source>\n        <translation>Theme</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"141\"/>\n        <source>Dark</source>\n        <translation>Dark</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"146\"/>\n        <source>Light</source>\n        <translation>Light</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"154\"/>\n        <source>Change the colours of the interface</source>\n        <translation>Change the colours of the interface</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"174\"/>\n        <source>COLOURS</source>\n        <translation>COLOURS</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"224\"/>\n        <source>WINDOW BORDERS</source>\n        <translation>WINDOW BORDERS</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"231\"/>\n        <source>If the window borders don&apos;t look correct, we can fix that up for you. This will also change your window borders in KDE, and any other desktop that uses KWin for the window manager.</source>\n        <translation>If the window borders don&apos;t look correct, we can fix that up for you. This will also change your window borders in KDE, and any other desktop that uses KWin for the window manager.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"243\"/>\n        <source>Set Window Borders</source>\n        <translation>Set Window Borders</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"274\"/>\n        <source>Fixed Width Font</source>\n        <translation>Fixed Width Font</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"281\"/>\n        <source>Interface Font</source>\n        <translation>Interface Font</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"304\"/>\n        <source>FONTS</source>\n        <translation>FONTS</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"370\"/>\n        <source>Widget Theme</source>\n        <translation>Widget Theme</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"434\"/>\n        <source>Button</source>\n        <translation>Button</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"447\"/>\n        <source>Radio Button 2</source>\n        <translation>Radio Button 2</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"457\"/>\n        <source>Using the theme set above, interface elements will look like this:</source>\n        <translation>Using the theme set above, interface elements will look like this:</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"464\"/>\n        <source>Radio Button 1</source>\n        <translation>Radio Button 1</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"471\"/>\n        <source>Check Box 2</source>\n        <translation>Check Box 2</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"487\"/>\n        <source>DEMO</source>\n        <translation>DEMO</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"494\"/>\n        <source>Check Box 1</source>\n        <translation>Check Box 1</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"508\"/>\n        <source>Type here!</source>\n        <translation>Type here!</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"543\"/>\n        <source>Transparency Effects</source>\n        <translation>Transparency Effects</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"563\"/>\n        <source>EFFECTS</source>\n        <translation>EFFECTS</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"363\"/>\n        <source>Set the appearance of buttons, text boxes and other interface elements</source>\n        <translation>Set the appearance of buttons, text boxes and other interface elements</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"383\"/>\n        <source>WIDGETS</source>\n        <translation>WIDGETS</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"161\"/>\n        <source>Base Colour</source>\n        <translation>Base Colour</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"127\"/>\n        <source>Accent Colour</source>\n        <translation>Accent Colour</translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/ThemePlugin/translations/en_US.qm",
    "content": "<d\u0018!\u001c`"
  },
  {
    "path": "plugins/ThemePlugin/translations/en_US.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" sourcelanguage=\"en_US\">\n<context>\n    <name>OnboardingTheme</name>\n    <message>\n        <location filename=\"../onboarding/onboardingtheme.ui\" line=\"35\"/>\n        <location filename=\"../onboarding/onboardingtheme.cpp\" line=\"91\"/>\n        <source>Theme</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtheme.ui\" line=\"42\"/>\n        <source>Select a theme. You&apos;ll be able to change this at any time.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtheme.ui\" line=\"92\"/>\n        <source>Dark</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtheme.ui\" line=\"108\"/>\n        <source>Light</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtheme.ui\" line=\"241\"/>\n        <source>Next</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtheme.cpp\" line=\"76\"/>\n        <source>Intellect has spoken; blinding shall be no more!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtheme.cpp\" line=\"81\"/>\n        <source>One whose wisdom has brought them the light of day!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>ThemeSettingsPane</name>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"35\"/>\n        <location filename=\"../settings/themesettingspane.cpp\" line=\"198\"/>\n        <source>Theme</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"127\"/>\n        <source>Accent Colour</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"141\"/>\n        <source>Dark</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"146\"/>\n        <source>Light</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"154\"/>\n        <source>Change the colours of the interface</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"161\"/>\n        <source>Base Colour</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"174\"/>\n        <source>COLOURS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"224\"/>\n        <source>WINDOW BORDERS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"231\"/>\n        <source>If the window borders don&apos;t look correct, we can fix that up for you. This will also change your window borders in KDE, and any other desktop that uses KWin for the window manager.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"243\"/>\n        <source>Set Window Borders</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"274\"/>\n        <source>Fixed Width Font</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"281\"/>\n        <source>Interface Font</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"304\"/>\n        <source>FONTS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"363\"/>\n        <source>Set the appearance of buttons, text boxes and other interface elements</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"370\"/>\n        <source>Widget Theme</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"383\"/>\n        <source>WIDGETS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"434\"/>\n        <source>Button</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"447\"/>\n        <source>Radio Button 2</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"457\"/>\n        <source>Using the theme set above, interface elements will look like this:</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"464\"/>\n        <source>Radio Button 1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"471\"/>\n        <source>Check Box 2</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"487\"/>\n        <source>DEMO</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"494\"/>\n        <source>Check Box 1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"508\"/>\n        <source>Type here!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"543\"/>\n        <source>Transparency Effects</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"563\"/>\n        <source>EFFECTS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/ThemePlugin/translations/es.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"es\" sourcelanguage=\"en_US\">\n<context>\n    <name>OnboardingTheme</name>\n    <message>\n        <location filename=\"../onboarding/onboardingtheme.ui\" line=\"35\"/>\n        <location filename=\"../onboarding/onboardingtheme.cpp\" line=\"91\"/>\n        <source>Theme</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtheme.ui\" line=\"42\"/>\n        <source>Select a theme. You&apos;ll be able to change this at any time.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtheme.ui\" line=\"92\"/>\n        <source>Dark</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtheme.ui\" line=\"108\"/>\n        <source>Light</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtheme.ui\" line=\"241\"/>\n        <source>Next</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtheme.cpp\" line=\"76\"/>\n        <source>Intellect has spoken; blinding shall be no more!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtheme.cpp\" line=\"81\"/>\n        <source>One whose wisdom has brought them the light of day!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>ThemeSettingsPane</name>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"35\"/>\n        <location filename=\"../settings/themesettingspane.cpp\" line=\"198\"/>\n        <source>Theme</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"127\"/>\n        <source>Accent Colour</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"141\"/>\n        <source>Dark</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"146\"/>\n        <source>Light</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"154\"/>\n        <source>Change the colours of the interface</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"161\"/>\n        <source>Base Colour</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"174\"/>\n        <source>COLOURS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"224\"/>\n        <source>WINDOW BORDERS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"231\"/>\n        <source>If the window borders don&apos;t look correct, we can fix that up for you. This will also change your window borders in KDE, and any other desktop that uses KWin for the window manager.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"243\"/>\n        <source>Set Window Borders</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"274\"/>\n        <source>Fixed Width Font</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"281\"/>\n        <source>Interface Font</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"304\"/>\n        <source>FONTS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"363\"/>\n        <source>Set the appearance of buttons, text boxes and other interface elements</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"370\"/>\n        <source>Widget Theme</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"383\"/>\n        <source>WIDGETS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"434\"/>\n        <source>Button</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"447\"/>\n        <source>Radio Button 2</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"457\"/>\n        <source>Using the theme set above, interface elements will look like this:</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"464\"/>\n        <source>Radio Button 1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"471\"/>\n        <source>Check Box 2</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"487\"/>\n        <source>DEMO</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"494\"/>\n        <source>Check Box 1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"508\"/>\n        <source>Type here!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"543\"/>\n        <source>Transparency Effects</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"563\"/>\n        <source>EFFECTS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/ThemePlugin/translations/es_VE.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"es_VE\" sourcelanguage=\"en_US\">\n<context>\n    <name>OnboardingTheme</name>\n    <message>\n        <location filename=\"../onboarding/onboardingtheme.ui\" line=\"35\"/>\n        <location filename=\"../onboarding/onboardingtheme.cpp\" line=\"91\"/>\n        <source>Theme</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtheme.ui\" line=\"42\"/>\n        <source>Select a theme. You&apos;ll be able to change this at any time.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtheme.ui\" line=\"92\"/>\n        <source>Dark</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtheme.ui\" line=\"108\"/>\n        <source>Light</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtheme.ui\" line=\"241\"/>\n        <source>Next</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtheme.cpp\" line=\"76\"/>\n        <source>Intellect has spoken; blinding shall be no more!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtheme.cpp\" line=\"81\"/>\n        <source>One whose wisdom has brought them the light of day!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>ThemeSettingsPane</name>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"35\"/>\n        <location filename=\"../settings/themesettingspane.cpp\" line=\"198\"/>\n        <source>Theme</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"127\"/>\n        <source>Accent Colour</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"141\"/>\n        <source>Dark</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"146\"/>\n        <source>Light</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"154\"/>\n        <source>Change the colours of the interface</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"161\"/>\n        <source>Base Colour</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"174\"/>\n        <source>COLOURS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"224\"/>\n        <source>WINDOW BORDERS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"231\"/>\n        <source>If the window borders don&apos;t look correct, we can fix that up for you. This will also change your window borders in KDE, and any other desktop that uses KWin for the window manager.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"243\"/>\n        <source>Set Window Borders</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"274\"/>\n        <source>Fixed Width Font</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"281\"/>\n        <source>Interface Font</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"304\"/>\n        <source>FONTS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"363\"/>\n        <source>Set the appearance of buttons, text boxes and other interface elements</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"370\"/>\n        <source>Widget Theme</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"383\"/>\n        <source>WIDGETS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"434\"/>\n        <source>Button</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"447\"/>\n        <source>Radio Button 2</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"457\"/>\n        <source>Using the theme set above, interface elements will look like this:</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"464\"/>\n        <source>Radio Button 1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"471\"/>\n        <source>Check Box 2</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"487\"/>\n        <source>DEMO</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"494\"/>\n        <source>Check Box 1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"508\"/>\n        <source>Type here!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"543\"/>\n        <source>Transparency Effects</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"563\"/>\n        <source>EFFECTS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/ThemePlugin/translations/id_ID.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"id_ID\" sourcelanguage=\"en_US\">\n<context>\n    <name>OnboardingTheme</name>\n    <message>\n        <location filename=\"../onboarding/onboardingtheme.ui\" line=\"35\"/>\n        <location filename=\"../onboarding/onboardingtheme.cpp\" line=\"91\"/>\n        <source>Theme</source>\n        <translation>Tema</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtheme.ui\" line=\"42\"/>\n        <source>Select a theme. You&apos;ll be able to change this at any time.</source>\n        <translation>Pilih tema. Anda dapat menggantinya kapan saja.</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtheme.ui\" line=\"92\"/>\n        <source>Dark</source>\n        <translation type=\"unfinished\">Gelap</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtheme.ui\" line=\"108\"/>\n        <source>Light</source>\n        <translation type=\"unfinished\">Terang</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtheme.ui\" line=\"241\"/>\n        <source>Next</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtheme.cpp\" line=\"76\"/>\n        <source>Intellect has spoken; blinding shall be no more!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtheme.cpp\" line=\"81\"/>\n        <source>One whose wisdom has brought them the light of day!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>ThemeSettingsPane</name>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"35\"/>\n        <location filename=\"../settings/themesettingspane.cpp\" line=\"198\"/>\n        <source>Theme</source>\n        <translation>Tema</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"141\"/>\n        <source>Dark</source>\n        <translation>Gelap</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"146\"/>\n        <source>Light</source>\n        <translation>Terang</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"154\"/>\n        <source>Change the colours of the interface</source>\n        <translation>Mengganti warna umum desktop</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"174\"/>\n        <source>COLOURS</source>\n        <translation>WARNA</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"224\"/>\n        <source>WINDOW BORDERS</source>\n        <translation>DEKORASI JENDELA</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"231\"/>\n        <source>If the window borders don&apos;t look correct, we can fix that up for you. This will also change your window borders in KDE, and any other desktop that uses KWin for the window manager.</source>\n        <translation>Jika dekorasi tidak sesuai dengan tema yang Anda pilih, kami dapat memperbaikinya. Ini akan mengganti dekorasi jendela pada KDE serta desktop apapun yang menggunakan KWin sebagai manajer jendela.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"243\"/>\n        <source>Set Window Borders</source>\n        <translation>Terapkan</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"274\"/>\n        <source>Fixed Width Font</source>\n        <translation>Font Kode</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"281\"/>\n        <source>Interface Font</source>\n        <translation>Font Antarmuka</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"304\"/>\n        <source>FONTS</source>\n        <translation>FONT</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"370\"/>\n        <source>Widget Theme</source>\n        <translation>Tema Widget</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"434\"/>\n        <source>Button</source>\n        <translation>Tombol</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"447\"/>\n        <source>Radio Button 2</source>\n        <translation>Tombol Pilihan 2</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"457\"/>\n        <source>Using the theme set above, interface elements will look like this:</source>\n        <translation>Dengan tema di atas, elemen antarmuka akan tampil seperti ini:</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"464\"/>\n        <source>Radio Button 1</source>\n        <translation>Tombol Pilihan 1</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"471\"/>\n        <source>Check Box 2</source>\n        <translation>Centang 2</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"487\"/>\n        <source>DEMO</source>\n        <translation>DEMO</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"494\"/>\n        <source>Check Box 1</source>\n        <translation>Centang 1</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"508\"/>\n        <source>Type here!</source>\n        <translation>Ketik di sini!</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"543\"/>\n        <source>Transparency Effects</source>\n        <translation>Efek Transparan</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"563\"/>\n        <source>EFFECTS</source>\n        <translation>EFEK</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"363\"/>\n        <source>Set the appearance of buttons, text boxes and other interface elements</source>\n        <translation>Mengatur tampilan tombol, kotak teks dan elemen antarmuka lainnya</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"383\"/>\n        <source>WIDGETS</source>\n        <translation>WIDGET</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"161\"/>\n        <source>Base Colour</source>\n        <translation>Warna Dasar</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"127\"/>\n        <source>Accent Colour</source>\n        <translation>Warna Aksen</translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/ThemePlugin/translations/nl.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"nl\" sourcelanguage=\"en_US\">\n<context>\n    <name>OnboardingTheme</name>\n    <message>\n        <location filename=\"../onboarding/onboardingtheme.ui\" line=\"35\"/>\n        <location filename=\"../onboarding/onboardingtheme.cpp\" line=\"91\"/>\n        <source>Theme</source>\n        <translation>Thema</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtheme.ui\" line=\"42\"/>\n        <source>Select a theme. You&apos;ll be able to change this at any time.</source>\n        <translation>Selecteer een thema. Je kunt deze altijd aanpassen.</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtheme.ui\" line=\"92\"/>\n        <source>Dark</source>\n        <translation>Donker</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtheme.ui\" line=\"108\"/>\n        <source>Light</source>\n        <translation>Licht</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtheme.ui\" line=\"241\"/>\n        <source>Next</source>\n        <translation>Volgende</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtheme.cpp\" line=\"76\"/>\n        <source>Intellect has spoken; blinding shall be no more!</source>\n        <translation>Kennis heeft gesproken; verblinding is voorbij!</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtheme.cpp\" line=\"81\"/>\n        <source>One whose wisdom has brought them the light of day!</source>\n        <translation>Een waarvan de wijsheid het daglicht heeft gebracht!</translation>\n    </message>\n</context>\n<context>\n    <name>ThemeSettingsPane</name>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"35\"/>\n        <location filename=\"../settings/themesettingspane.cpp\" line=\"198\"/>\n        <source>Theme</source>\n        <translation>Thema</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"127\"/>\n        <source>Accent Colour</source>\n        <translation>Accentkleur</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"141\"/>\n        <source>Dark</source>\n        <translation>Donker</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"146\"/>\n        <source>Light</source>\n        <translation>Licht</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"154\"/>\n        <source>Change the colours of the interface</source>\n        <translation>De kleuren van de interface veranderen</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"161\"/>\n        <source>Base Colour</source>\n        <translation>Basiskleur</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"174\"/>\n        <source>COLOURS</source>\n        <translation>KLEUREN</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"224\"/>\n        <source>WINDOW BORDERS</source>\n        <translation>VENSTERRANDEN</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"231\"/>\n        <source>If the window borders don&apos;t look correct, we can fix that up for you. This will also change your window borders in KDE, and any other desktop that uses KWin for the window manager.</source>\n        <translation>Als de vensterranden er niet goed uitzien, kunnen we dat voor je oplossen. Dat verandert ook de vensterranden in KDE en alle andere desktops die KWin als window manager gebruiken.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"243\"/>\n        <source>Set Window Borders</source>\n        <translation>Vensterranden Instellen</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"274\"/>\n        <source>Fixed Width Font</source>\n        <translation>Lettertype met Gelijke Breedte</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"281\"/>\n        <source>Interface Font</source>\n        <translation>Lettertype voor Interface</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"304\"/>\n        <source>FONTS</source>\n        <translation>LETTERTYPES</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"363\"/>\n        <source>Set the appearance of buttons, text boxes and other interface elements</source>\n        <translation>Het uiterlijk van knoppen, tekstvakken en andere interface-elementen aanpassen</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"370\"/>\n        <source>Widget Theme</source>\n        <translation>Widgetthema</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"383\"/>\n        <source>WIDGETS</source>\n        <translation>WIDGETS</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"434\"/>\n        <source>Button</source>\n        <translation>Knop</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"447\"/>\n        <source>Radio Button 2</source>\n        <translation>Radio-knop 2</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"457\"/>\n        <source>Using the theme set above, interface elements will look like this:</source>\n        <translation>Met het thema van hierboven zien interface-elementen er zo uit:</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"464\"/>\n        <source>Radio Button 1</source>\n        <translation>Radio-knop 1</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"471\"/>\n        <source>Check Box 2</source>\n        <translation>Checkbox 2</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"487\"/>\n        <source>DEMO</source>\n        <translation>DEMO</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"494\"/>\n        <source>Check Box 1</source>\n        <translation>Checkbox 1</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"508\"/>\n        <source>Type here!</source>\n        <translation>Type hier!</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"543\"/>\n        <source>Transparency Effects</source>\n        <translation>Transparantie-effecten</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"563\"/>\n        <source>EFFECTS</source>\n        <translation>EFFECTEN</translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/ThemePlugin/translations/pt_BR.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"pt_BR\" sourcelanguage=\"en_US\">\n<context>\n    <name>OnboardingTheme</name>\n    <message>\n        <location filename=\"../onboarding/onboardingtheme.ui\" line=\"35\"/>\n        <location filename=\"../onboarding/onboardingtheme.cpp\" line=\"91\"/>\n        <source>Theme</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtheme.ui\" line=\"42\"/>\n        <source>Select a theme. You&apos;ll be able to change this at any time.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtheme.ui\" line=\"92\"/>\n        <source>Dark</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtheme.ui\" line=\"108\"/>\n        <source>Light</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtheme.ui\" line=\"241\"/>\n        <source>Next</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtheme.cpp\" line=\"76\"/>\n        <source>Intellect has spoken; blinding shall be no more!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtheme.cpp\" line=\"81\"/>\n        <source>One whose wisdom has brought them the light of day!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>ThemeSettingsPane</name>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"35\"/>\n        <location filename=\"../settings/themesettingspane.cpp\" line=\"198\"/>\n        <source>Theme</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"127\"/>\n        <source>Accent Colour</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"141\"/>\n        <source>Dark</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"146\"/>\n        <source>Light</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"154\"/>\n        <source>Change the colours of the interface</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"161\"/>\n        <source>Base Colour</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"174\"/>\n        <source>COLOURS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"224\"/>\n        <source>WINDOW BORDERS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"231\"/>\n        <source>If the window borders don&apos;t look correct, we can fix that up for you. This will also change your window borders in KDE, and any other desktop that uses KWin for the window manager.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"243\"/>\n        <source>Set Window Borders</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"274\"/>\n        <source>Fixed Width Font</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"281\"/>\n        <source>Interface Font</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"304\"/>\n        <source>FONTS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"363\"/>\n        <source>Set the appearance of buttons, text boxes and other interface elements</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"370\"/>\n        <source>Widget Theme</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"383\"/>\n        <source>WIDGETS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"434\"/>\n        <source>Button</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"447\"/>\n        <source>Radio Button 2</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"457\"/>\n        <source>Using the theme set above, interface elements will look like this:</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"464\"/>\n        <source>Radio Button 1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"471\"/>\n        <source>Check Box 2</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"487\"/>\n        <source>DEMO</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"494\"/>\n        <source>Check Box 1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"508\"/>\n        <source>Type here!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"543\"/>\n        <source>Transparency Effects</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"563\"/>\n        <source>EFFECTS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/ThemePlugin/translations/ro.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"ro\" sourcelanguage=\"en_US\">\n<context>\n    <name>OnboardingTheme</name>\n    <message>\n        <location filename=\"../onboarding/onboardingtheme.ui\" line=\"35\"/>\n        <location filename=\"../onboarding/onboardingtheme.cpp\" line=\"91\"/>\n        <source>Theme</source>\n        <translation>Temă</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtheme.ui\" line=\"42\"/>\n        <source>Select a theme. You&apos;ll be able to change this at any time.</source>\n        <translation>Selectați o temă. O veți putea schimba oricând.</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtheme.ui\" line=\"92\"/>\n        <source>Dark</source>\n        <translation>Întunecat</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtheme.ui\" line=\"108\"/>\n        <source>Light</source>\n        <translation>Luminos</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtheme.ui\" line=\"241\"/>\n        <source>Next</source>\n        <translation>Următorul</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtheme.cpp\" line=\"76\"/>\n        <source>Intellect has spoken; blinding shall be no more!</source>\n        <translation>Intelectul a vorbit; lumina orbitoare să dispară!</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtheme.cpp\" line=\"81\"/>\n        <source>One whose wisdom has brought them the light of day!</source>\n        <translation>Pentru cei pe care înțelepciunea le-a adus lumina zilei!</translation>\n    </message>\n</context>\n<context>\n    <name>ThemeSettingsPane</name>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"35\"/>\n        <location filename=\"../settings/themesettingspane.cpp\" line=\"198\"/>\n        <source>Theme</source>\n        <translation>Temă</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"127\"/>\n        <source>Accent Colour</source>\n        <translation>Culoare de accent</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"141\"/>\n        <source>Dark</source>\n        <translation>Întunecat</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"146\"/>\n        <source>Light</source>\n        <translation>Luminos</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"154\"/>\n        <source>Change the colours of the interface</source>\n        <translation>Schimbați culorile interfeței</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"161\"/>\n        <source>Base Colour</source>\n        <translation>Culoarea de bază</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"174\"/>\n        <source>COLOURS</source>\n        <translation>CULORI</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"224\"/>\n        <source>WINDOW BORDERS</source>\n        <translation>CONTURUL FERESTRELOR</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"231\"/>\n        <source>If the window borders don&apos;t look correct, we can fix that up for you. This will also change your window borders in KDE, and any other desktop that uses KWin for the window manager.</source>\n        <translation>Dacă nu arată corect conturul ferestrelor, putem rezolva acest lucru pentru dvs. Acest proces va schimba conturul ferestrelor în KDE cât și în orice alt desktop care folosește KWin pentru gestiunea ferestrelor.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"243\"/>\n        <source>Set Window Borders</source>\n        <translation>Configurați conturul ferestrelor</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"274\"/>\n        <source>Fixed Width Font</source>\n        <translation>Font de lățime fixă</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"281\"/>\n        <source>Interface Font</source>\n        <translation>Font interfață</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"304\"/>\n        <source>FONTS</source>\n        <translation>FONTURI</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"363\"/>\n        <source>Set the appearance of buttons, text boxes and other interface elements</source>\n        <translation>Selectați aspectul butoanelor, căsuțelor de text și a altor elemente de interfață</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"370\"/>\n        <source>Widget Theme</source>\n        <translation>Temă widgeturi</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"383\"/>\n        <source>WIDGETS</source>\n        <translation>WIDGETURI</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"434\"/>\n        <source>Button</source>\n        <translation>Buton</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"447\"/>\n        <source>Radio Button 2</source>\n        <translation>Buton radio 2</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"457\"/>\n        <source>Using the theme set above, interface elements will look like this:</source>\n        <translation>Folosind tema setată mai sus, elementele de interfață vor arăta așa:</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"464\"/>\n        <source>Radio Button 1</source>\n        <translation>Buton radio 1</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"471\"/>\n        <source>Check Box 2</source>\n        <translation>Casetă de selectare 2</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"487\"/>\n        <source>DEMO</source>\n        <translation>DEMO</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"494\"/>\n        <source>Check Box 1</source>\n        <translation>Casetă de selectare 1</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"508\"/>\n        <source>Type here!</source>\n        <translation>Tastați aici!</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"543\"/>\n        <source>Transparency Effects</source>\n        <translation>Efecte de transparență</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"563\"/>\n        <source>EFFECTS</source>\n        <translation>EFECTE</translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/ThemePlugin/translations/sv.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"sv\" sourcelanguage=\"en_US\">\n<context>\n    <name>OnboardingTheme</name>\n    <message>\n        <location filename=\"../onboarding/onboardingtheme.ui\" line=\"35\"/>\n        <location filename=\"../onboarding/onboardingtheme.cpp\" line=\"91\"/>\n        <source>Theme</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtheme.ui\" line=\"42\"/>\n        <source>Select a theme. You&apos;ll be able to change this at any time.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtheme.ui\" line=\"92\"/>\n        <source>Dark</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtheme.ui\" line=\"108\"/>\n        <source>Light</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtheme.ui\" line=\"241\"/>\n        <source>Next</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtheme.cpp\" line=\"76\"/>\n        <source>Intellect has spoken; blinding shall be no more!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtheme.cpp\" line=\"81\"/>\n        <source>One whose wisdom has brought them the light of day!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>ThemeSettingsPane</name>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"35\"/>\n        <location filename=\"../settings/themesettingspane.cpp\" line=\"198\"/>\n        <source>Theme</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"127\"/>\n        <source>Accent Colour</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"141\"/>\n        <source>Dark</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"146\"/>\n        <source>Light</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"154\"/>\n        <source>Change the colours of the interface</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"161\"/>\n        <source>Base Colour</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"174\"/>\n        <source>COLOURS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"224\"/>\n        <source>WINDOW BORDERS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"231\"/>\n        <source>If the window borders don&apos;t look correct, we can fix that up for you. This will also change your window borders in KDE, and any other desktop that uses KWin for the window manager.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"243\"/>\n        <source>Set Window Borders</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"274\"/>\n        <source>Fixed Width Font</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"281\"/>\n        <source>Interface Font</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"304\"/>\n        <source>FONTS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"363\"/>\n        <source>Set the appearance of buttons, text boxes and other interface elements</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"370\"/>\n        <source>Widget Theme</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"383\"/>\n        <source>WIDGETS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"434\"/>\n        <source>Button</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"447\"/>\n        <source>Radio Button 2</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"457\"/>\n        <source>Using the theme set above, interface elements will look like this:</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"464\"/>\n        <source>Radio Button 1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"471\"/>\n        <source>Check Box 2</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"487\"/>\n        <source>DEMO</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"494\"/>\n        <source>Check Box 1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"508\"/>\n        <source>Type here!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"543\"/>\n        <source>Transparency Effects</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"563\"/>\n        <source>EFFECTS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/ThemePlugin/translations/tr_TR.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"tr_TR\" sourcelanguage=\"en_US\">\n<context>\n    <name>OnboardingTheme</name>\n    <message>\n        <location filename=\"../onboarding/onboardingtheme.ui\" line=\"35\"/>\n        <location filename=\"../onboarding/onboardingtheme.cpp\" line=\"91\"/>\n        <source>Theme</source>\n        <translation>Tema</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtheme.ui\" line=\"42\"/>\n        <source>Select a theme. You&apos;ll be able to change this at any time.</source>\n        <translation>Bir tema seç. Bunu istediğiniz zaman değiştirebileceksiniz.</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtheme.ui\" line=\"92\"/>\n        <source>Dark</source>\n        <translation>Karanlık</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtheme.ui\" line=\"108\"/>\n        <source>Light</source>\n        <translation>Aydınlık</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtheme.ui\" line=\"241\"/>\n        <source>Next</source>\n        <translation>Sonraki</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtheme.cpp\" line=\"76\"/>\n        <source>Intellect has spoken; blinding shall be no more!</source>\n        <translation>Akıl konuştu; kör edici olmayacak artık!</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtheme.cpp\" line=\"81\"/>\n        <source>One whose wisdom has brought them the light of day!</source>\n        <translation>Hikmeti onlara gün ışığını getiren biri!</translation>\n    </message>\n</context>\n<context>\n    <name>ThemeSettingsPane</name>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"35\"/>\n        <location filename=\"../settings/themesettingspane.cpp\" line=\"198\"/>\n        <source>Theme</source>\n        <translation>Tema</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"141\"/>\n        <source>Dark</source>\n        <translation>Karanlık</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"146\"/>\n        <source>Light</source>\n        <translation>Aydınlık</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"154\"/>\n        <source>Change the colours of the interface</source>\n        <translation>Arayüzün renklerini değiştirin</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"174\"/>\n        <source>COLOURS</source>\n        <translation>RENKLER</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"224\"/>\n        <source>WINDOW BORDERS</source>\n        <translation>PENCERE KENARLARI</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"231\"/>\n        <source>If the window borders don&apos;t look correct, we can fix that up for you. This will also change your window borders in KDE, and any other desktop that uses KWin for the window manager.</source>\n        <translation>Pencere kenarlıkları doğru görünmüyorsa, bunu sizin için düzeltebiliriz. Bu aynı zamanda KDE&apos;deki pencere kenarlıklarınızı ve pencere yöneticisi için KWin kullanan diğer masaüstlerini de değiştirecektir.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"243\"/>\n        <source>Set Window Borders</source>\n        <translation>Pencere Kenarlıklarını Ayarlama</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"274\"/>\n        <source>Fixed Width Font</source>\n        <translation>Sabit Genişlikli Yazı Tipi</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"281\"/>\n        <source>Interface Font</source>\n        <translation>Arayüz Yazı Tipi</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"304\"/>\n        <source>FONTS</source>\n        <translation>FONTLAR</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"370\"/>\n        <source>Widget Theme</source>\n        <translation>Widget Teması</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"434\"/>\n        <source>Button</source>\n        <translation>Buton</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"447\"/>\n        <source>Radio Button 2</source>\n        <translation>Radyo Düğmesi 2</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"457\"/>\n        <source>Using the theme set above, interface elements will look like this:</source>\n        <translation>Yukarıdaki tema kümesini kullandığınızda, arayüz öğeleri şöyle görünecektir:</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"464\"/>\n        <source>Radio Button 1</source>\n        <translation>Radyo Düğmesi 1</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"471\"/>\n        <source>Check Box 2</source>\n        <translation>Onay Kutusu 2</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"487\"/>\n        <source>DEMO</source>\n        <translation>GÖSTERİM</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"494\"/>\n        <source>Check Box 1</source>\n        <translation>Onay Kutusu 1</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"508\"/>\n        <source>Type here!</source>\n        <translation>Buraya yaz!</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"543\"/>\n        <source>Transparency Effects</source>\n        <translation>Şeffaflık Etkileri</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"563\"/>\n        <source>EFFECTS</source>\n        <translation>ÖZEL EFEKTLER</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"363\"/>\n        <source>Set the appearance of buttons, text boxes and other interface elements</source>\n        <translation>Düğmelerin, metin kutularının ve diğer arayüz öğelerinin görünümünü ayarlayın</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"383\"/>\n        <source>WIDGETS</source>\n        <translation>WIDGET&apos;LAR</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"161\"/>\n        <source>Base Colour</source>\n        <translation>Temel Renk</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"127\"/>\n        <source>Accent Colour</source>\n        <translation>Vurgu Rengi</translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/ThemePlugin/translations/vi_VN.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"vi_VN\" sourcelanguage=\"en_US\">\n<context>\n    <name>OnboardingTheme</name>\n    <message>\n        <location filename=\"../onboarding/onboardingtheme.ui\" line=\"35\"/>\n        <location filename=\"../onboarding/onboardingtheme.cpp\" line=\"91\"/>\n        <source>Theme</source>\n        <translation>Giao diện</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtheme.ui\" line=\"42\"/>\n        <source>Select a theme. You&apos;ll be able to change this at any time.</source>\n        <translation>Chọn một giao diện. Bạn có thể thay đổi điều này bất cứ lúc nào.</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtheme.ui\" line=\"92\"/>\n        <source>Dark</source>\n        <translation>Tối</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtheme.ui\" line=\"108\"/>\n        <source>Light</source>\n        <translation>Sáng</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtheme.ui\" line=\"241\"/>\n        <source>Next</source>\n        <translation>Tiếp</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtheme.cpp\" line=\"76\"/>\n        <source>Intellect has spoken; blinding shall be no more!</source>\n        <translation>Người khôn ngoan đã nói; không bao giờ chói mắt nữa!</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtheme.cpp\" line=\"81\"/>\n        <source>One whose wisdom has brought them the light of day!</source>\n        <translation>Người mà sự khôn ngoan đã mang lại ánh sáng ban ngày!</translation>\n    </message>\n</context>\n<context>\n    <name>ThemeSettingsPane</name>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"35\"/>\n        <location filename=\"../settings/themesettingspane.cpp\" line=\"198\"/>\n        <source>Theme</source>\n        <translation>Giao diện</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"141\"/>\n        <source>Dark</source>\n        <translation>Tối</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"146\"/>\n        <source>Light</source>\n        <translation>Sáng</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"154\"/>\n        <source>Change the colours of the interface</source>\n        <translation>Thay đổi màu giao diện</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"174\"/>\n        <source>COLOURS</source>\n        <translation>MÀU</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"224\"/>\n        <source>WINDOW BORDERS</source>\n        <translation>ĐƯỜNG VIỀN CỬA SỔ</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"231\"/>\n        <source>If the window borders don&apos;t look correct, we can fix that up for you. This will also change your window borders in KDE, and any other desktop that uses KWin for the window manager.</source>\n        <translation>Nếu viền cửa sổ không chính xác, chúng tôi có thể sửa lại cho bạn. Nếu viền cửa sổ không chính xác, chúng tôi có thể sửa lại cho bạn. Hoạt động này cũng sẽ thay đổi viền cửa sổ của bạn trong KDE và bất kỳ môi trường desktop khác sử dụng KWin cho trình quản lý cửa sổ.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"243\"/>\n        <source>Set Window Borders</source>\n        <translation>Sửa viền cửa sổ</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"274\"/>\n        <source>Fixed Width Font</source>\n        <translation>Phông chữ đơn cách</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"281\"/>\n        <source>Interface Font</source>\n        <translation>Phông chữ giao diện</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"304\"/>\n        <source>FONTS</source>\n        <translation>PHÔNG</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"370\"/>\n        <source>Widget Theme</source>\n        <translation>Giao diện thành phần</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"434\"/>\n        <source>Button</source>\n        <translation>Nút</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"447\"/>\n        <source>Radio Button 2</source>\n        <translation>Nút chọn 2</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"457\"/>\n        <source>Using the theme set above, interface elements will look like this:</source>\n        <translation>Sử dụng giao diện được đặt ở trên, các thành phần sẽ hiện như thế này:</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"464\"/>\n        <source>Radio Button 1</source>\n        <translation>Nút chọn 1</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"471\"/>\n        <source>Check Box 2</source>\n        <translation>Hộp kiểm 2</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"487\"/>\n        <source>DEMO</source>\n        <translation>BẢN XEM TRƯỚC</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"494\"/>\n        <source>Check Box 1</source>\n        <translation>Hộp kiểm 1</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"508\"/>\n        <source>Type here!</source>\n        <translation>Nhập ở đây!</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"543\"/>\n        <source>Transparency Effects</source>\n        <translation>Hiệu ứng trong suốt</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"563\"/>\n        <source>EFFECTS</source>\n        <translation>HIỆU ỨNG</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"363\"/>\n        <source>Set the appearance of buttons, text boxes and other interface elements</source>\n        <translation>Đặt sự xuất hiện cho nút, hộp văn bản và các thành phần giao diện</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"383\"/>\n        <source>WIDGETS</source>\n        <translation>THÀNH PHẦN GIAO DIỆN</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"161\"/>\n        <source>Base Colour</source>\n        <translation>Màu nền</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"127\"/>\n        <source>Accent Colour</source>\n        <translation>Màu sắc</translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/ThemePlugin/translations/zh_CN.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"zh_CN\" sourcelanguage=\"en_US\">\n<context>\n    <name>OnboardingTheme</name>\n    <message>\n        <location filename=\"../onboarding/onboardingtheme.ui\" line=\"35\"/>\n        <location filename=\"../onboarding/onboardingtheme.cpp\" line=\"91\"/>\n        <source>Theme</source>\n        <translation>皮肤</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtheme.ui\" line=\"42\"/>\n        <source>Select a theme. You&apos;ll be able to change this at any time.</source>\n        <translation>选择一个皮肤， 你可以对其随时更改。</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtheme.ui\" line=\"92\"/>\n        <source>Dark</source>\n        <translation>暗黑</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtheme.ui\" line=\"108\"/>\n        <source>Light</source>\n        <translation>日光</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtheme.ui\" line=\"241\"/>\n        <source>Next</source>\n        <translation>下一项</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtheme.cpp\" line=\"76\"/>\n        <source>Intellect has spoken; blinding shall be no more!</source>\n        <translation>暗黑模式开启！</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtheme.cpp\" line=\"81\"/>\n        <source>One whose wisdom has brought them the light of day!</source>\n        <translation>日光模式开启！</translation>\n    </message>\n</context>\n<context>\n    <name>ThemeSettingsPane</name>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"35\"/>\n        <location filename=\"../settings/themesettingspane.cpp\" line=\"198\"/>\n        <source>Theme</source>\n        <translation>皮肤</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"141\"/>\n        <source>Dark</source>\n        <translation>暗黑</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"146\"/>\n        <source>Light</source>\n        <translation>日光</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"154\"/>\n        <source>Change the colours of the interface</source>\n        <translation>更改界面的色彩</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"174\"/>\n        <source>COLOURS</source>\n        <translation>颜色</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"224\"/>\n        <source>WINDOW BORDERS</source>\n        <translation>窗框</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"231\"/>\n        <source>If the window borders don&apos;t look correct, we can fix that up for you. This will also change your window borders in KDE, and any other desktop that uses KWin for the window manager.</source>\n        <translation>如果窗框看上去不正确， 我们可以为您修复。 这也会更改你KDE里的窗框，或者其他任何桌面适用于KWin。</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"243\"/>\n        <source>Set Window Borders</source>\n        <translation>设置窗框</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"274\"/>\n        <source>Fixed Width Font</source>\n        <translation>修复了字体</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"281\"/>\n        <source>Interface Font</source>\n        <translation>界面字体</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"304\"/>\n        <source>FONTS</source>\n        <translation>字体</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"370\"/>\n        <source>Widget Theme</source>\n        <translation>小部件皮肤</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"434\"/>\n        <source>Button</source>\n        <translation>按键</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"447\"/>\n        <source>Radio Button 2</source>\n        <translation>按键 2</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"457\"/>\n        <source>Using the theme set above, interface elements will look like this:</source>\n        <translation>使用此皮肤， 界面将会看上去像：</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"464\"/>\n        <source>Radio Button 1</source>\n        <translation>按键 1</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"471\"/>\n        <source>Check Box 2</source>\n        <translation>选择框 2</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"487\"/>\n        <source>DEMO</source>\n        <translation>演示</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"494\"/>\n        <source>Check Box 1</source>\n        <translation>选择框 1</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"508\"/>\n        <source>Type here!</source>\n        <translation>在此输入！</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"543\"/>\n        <source>Transparency Effects</source>\n        <translation>透明效果</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"563\"/>\n        <source>EFFECTS</source>\n        <translation>效果</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"363\"/>\n        <source>Set the appearance of buttons, text boxes and other interface elements</source>\n        <translation>设置按键的外观， 输入栏 和 其他界面元素</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"383\"/>\n        <source>WIDGETS</source>\n        <translation>小部件</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"161\"/>\n        <source>Base Colour</source>\n        <translation>基础色</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/themesettingspane.ui\" line=\"127\"/>\n        <source>Accent Colour</source>\n        <translation>点缀色</translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/TimeDatePlugin/CMakeLists.txt",
    "content": "cmake_minimum_required(VERSION 3.24.0)\n\nfind_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets)\nfind_package(libcontemporary)\n\nset(SOURCES\n    onboarding/onboardingtimezone.cpp\n    plugin.cpp\n    popovers/settimedatepopover.cpp\n    popovers/settimezonepopover.cpp\n    settings/datetimepane.cpp\n    timezonesmodel.cpp\n\n    onboarding/onboardingtimezone.ui\n    popovers/settimedatepopover.ui\n    popovers/settimezonepopover.ui\n    settings/datetimepane.ui\n)\n\nset(HEADERS\n    onboarding/onboardingtimezone.h\n    plugin.h\n    popovers/settimedatepopover.h\n    popovers/settimezonepopover.h\n    settings/datetimepane.h\n    timezonesmodel.h\n)\n\nset(PLUGIN_NAME timedate)\nadd_plugin_td(${PLUGIN_NAME})\ntarget_sources(plugin-${PLUGIN_NAME} PRIVATE ${SOURCES} ${HEADERS})\ncntp_defaults_file(${PLUGIN_NAME}\n    DEFAULTS_FILE thedesk-timedate.conf)\n\ntarget_link_libraries(plugin-${PLUGIN_NAME} Qt::Widgets libcontemporary libthedesk)\n"
  },
  {
    "path": "plugins/TimeDatePlugin/Plugin.json",
    "content": "{\n    \"name\": \"Date and Time management\",\n    \"icon\": \"preferences-system-time\",\n    \"uuid\": \"e8e71dad-f372-4f96-a2c9-3462af834ada\",\n    \"vi\": {\n        \"name\": \"Quản lý ngày và giờ\"\n    }\n}\n"
  },
  {
    "path": "plugins/TimeDatePlugin/TimeDatePlugin.pro",
    "content": "QT += gui widgets\n\nTEMPLATE = lib\nCONFIG += plugin\n\nCONFIG += c++11\n\n# Include the-libs build tools\ninclude(/usr/share/the-libs/pri/gentranslations.pri)\n\n# You can make your code fail to compile if it uses deprecated APIs.\n# In order to do so, uncomment the following line.\n#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0\n\nSOURCES += \\\n    onboarding/onboardingtimezone.cpp \\\n    plugin.cpp \\\n    popovers/settimedatepopover.cpp \\\n    popovers/settimezonepopover.cpp \\\n    settings/datetimepane.cpp \\\n    timezonesmodel.cpp\n\nHEADERS += \\\n    onboarding/onboardingtimezone.h \\\n    plugin.h \\\n    popovers/settimedatepopover.h \\\n    popovers/settimezonepopover.h \\\n    settings/datetimepane.h \\\n    timezonesmodel.h\n\nDISTFILES += \\\n    Plugin.json \\\n    defaults.conf\n\nunix {\n    translations.files = translations/*.qm\n    translations.path = /usr/share/thedesk/TimeDatePlugin/translations\n\n    defaults.files = defaults.conf\n    defaults.path = /etc/theSuite/theDesk/TimeDatePlugin/\n\n    INSTALLS += translations defaults\n}\n\ninclude(../plugins.pri)\n\nFORMS += \\\n    onboarding/onboardingtimezone.ui \\\n    popovers/settimedatepopover.ui \\\n    popovers/settimezonepopover.ui \\\n    settings/datetimepane.ui\n"
  },
  {
    "path": "plugins/TimeDatePlugin/onboarding/onboardingtimezone.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"onboardingtimezone.h\"\n#include \"ui_onboardingtimezone.h\"\n\n#include \"timezonesmodel.h\"\n#include <QDBusConnection>\n#include <QDBusMessage>\n#include <onboardingmanager.h>\n#include <statemanager.h>\n\nstruct OnboardingTimeZonePrivate {\n        TimezonesModel* model;\n};\n\nOnboardingTimeZone::OnboardingTimeZone(QWidget* parent) :\n    OnboardingPage(parent),\n    ui(new Ui::OnboardingTimeZone) {\n    ui->setupUi(this);\n    d = new OnboardingTimeZonePrivate();\n    d->model = new TimezonesModel();\n\n    ui->titleLabel->setBackButtonShown(true);\n    ui->listView->setModel(d->model);\n    ui->listView->setItemDelegate(new TimezonesModelDelegate());\n    ui->nextButton->setEnabled(false);\n}\n\nOnboardingTimeZone::~OnboardingTimeZone() {\n    delete ui;\n}\n\nQString OnboardingTimeZone::name() {\n    return QStringLiteral(\"OnboardingTimeZone\");\n}\n\nQString OnboardingTimeZone::displayName() {\n    return tr(\"Time Zone\");\n}\n\nvoid OnboardingTimeZone::on_titleLabel_backButtonClicked() {\n    StateManager::onboardingManager()->previousStep();\n}\n\nvoid OnboardingTimeZone::on_nextButton_clicked() {\n    StateManager::onboardingManager()->nextStep();\n}\n\nvoid OnboardingTimeZone::on_searchBox_textChanged(const QString& arg1) {\n    d->model->search(arg1);\n}\n\nvoid OnboardingTimeZone::on_listView_activated(const QModelIndex& index) {\n    QDBusMessage setTimezoneMessage = QDBusMessage::createMethodCall(\"org.freedesktop.timedate1\", \"/org/freedesktop/timedate1\", \"org.freedesktop.timedate1\", \"SetTimezone\");\n    setTimezoneMessage.setArguments({index.data(Qt::UserRole).toString(), true});\n    QDBusConnection::systemBus().call(setTimezoneMessage, QDBus::NoBlock);\n\n    StateManager::onboardingManager()->setDateVisible(true);\n    ui->nextButton->setEnabled(true);\n}\n\nvoid OnboardingTimeZone::on_ntpCheckbox_toggled(bool checked) {\n    QDBusMessage setNtpMessage = QDBusMessage::createMethodCall(\"org.freedesktop.timedate1\", \"/org/freedesktop/timedate1\", \"org.freedesktop.timedate1\", \"SetNTP\");\n    setNtpMessage.setArguments({checked, true});\n    QDBusConnection::systemBus().call(setNtpMessage);\n}\n"
  },
  {
    "path": "plugins/TimeDatePlugin/onboarding/onboardingtimezone.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef ONBOARDINGTIMEZONE_H\n#define ONBOARDINGTIMEZONE_H\n\n#include <QWidget>\n#include <onboardingpage.h>\n\nnamespace Ui {\n    class OnboardingTimeZone;\n}\n\nstruct OnboardingTimeZonePrivate;\nclass OnboardingTimeZone : public OnboardingPage {\n        Q_OBJECT\n\n    public:\n        explicit OnboardingTimeZone(QWidget* parent = nullptr);\n        ~OnboardingTimeZone();\n\n    private:\n        Ui::OnboardingTimeZone* ui;\n        OnboardingTimeZonePrivate* d;\n\n        // OnboardingPage interface\n    public:\n        QString name();\n        QString displayName();\n    private slots:\n        void on_titleLabel_backButtonClicked();\n        void on_nextButton_clicked();\n        void on_searchBox_textChanged(const QString& arg1);\n        void on_listView_activated(const QModelIndex& index);\n        void on_ntpCheckbox_toggled(bool checked);\n};\n\n#endif // ONBOARDINGTIMEZONE_H\n"
  },
  {
    "path": "plugins/TimeDatePlugin/onboarding/onboardingtimezone.ui",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ui version=\"4.0\">\n <class>OnboardingTimeZone</class>\n <widget class=\"QWidget\" name=\"OnboardingTimeZone\">\n  <property name=\"geometry\">\n   <rect>\n    <x>0</x>\n    <y>0</y>\n    <width>617</width>\n    <height>420</height>\n   </rect>\n  </property>\n  <property name=\"windowTitle\">\n   <string notr=\"true\">Form</string>\n  </property>\n  <layout class=\"QVBoxLayout\" name=\"verticalLayout\">\n   <property name=\"spacing\">\n    <number>0</number>\n   </property>\n   <property name=\"leftMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"topMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"rightMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"bottomMargin\">\n    <number>0</number>\n   </property>\n   <item>\n    <widget class=\"tTitleLabel\" name=\"titleLabel\">\n     <property name=\"text\">\n      <string>Time Zone</string>\n     </property>\n    </widget>\n   </item>\n   <item>\n    <widget class=\"QLabel\" name=\"label\">\n     <property name=\"text\">\n      <string>Whereabouts are you located? We'll use this information to display the current time.</string>\n     </property>\n     <property name=\"wordWrap\">\n      <bool>true</bool>\n     </property>\n     <property name=\"margin\">\n      <number>9</number>\n     </property>\n    </widget>\n   </item>\n   <item>\n    <widget class=\"Line\" name=\"line_2\">\n     <property name=\"maximumSize\">\n      <size>\n       <width>16777215</width>\n       <height>1</height>\n      </size>\n     </property>\n     <property name=\"orientation\">\n      <enum>Qt::Horizontal</enum>\n     </property>\n    </widget>\n   </item>\n   <item>\n    <widget class=\"QLineEdit\" name=\"searchBox\">\n     <property name=\"frame\">\n      <bool>false</bool>\n     </property>\n     <property name=\"placeholderText\">\n      <string>Search</string>\n     </property>\n    </widget>\n   </item>\n   <item>\n    <widget class=\"Line\" name=\"line_3\">\n     <property name=\"maximumSize\">\n      <size>\n       <width>16777215</width>\n       <height>1</height>\n      </size>\n     </property>\n     <property name=\"orientation\">\n      <enum>Qt::Horizontal</enum>\n     </property>\n    </widget>\n   </item>\n   <item>\n    <widget class=\"QListView\" name=\"listView\">\n     <property name=\"frameShape\">\n      <enum>QFrame::NoFrame</enum>\n     </property>\n    </widget>\n   </item>\n   <item>\n    <widget class=\"Line\" name=\"line_4\">\n     <property name=\"maximumSize\">\n      <size>\n       <width>16777215</width>\n       <height>1</height>\n      </size>\n     </property>\n     <property name=\"orientation\">\n      <enum>Qt::Horizontal</enum>\n     </property>\n    </widget>\n   </item>\n   <item>\n    <layout class=\"QVBoxLayout\" name=\"verticalLayout_2\">\n     <property name=\"leftMargin\">\n      <number>9</number>\n     </property>\n     <property name=\"topMargin\">\n      <number>9</number>\n     </property>\n     <property name=\"rightMargin\">\n      <number>9</number>\n     </property>\n     <property name=\"bottomMargin\">\n      <number>9</number>\n     </property>\n     <item>\n      <widget class=\"QCheckBox\" name=\"ntpCheckbox\">\n       <property name=\"text\">\n        <string>Use the Internet to synchronise the system clock (recommended)</string>\n       </property>\n      </widget>\n     </item>\n    </layout>\n   </item>\n   <item>\n    <widget class=\"Line\" name=\"line\">\n     <property name=\"maximumSize\">\n      <size>\n       <width>16777215</width>\n       <height>1</height>\n      </size>\n     </property>\n     <property name=\"orientation\">\n      <enum>Qt::Horizontal</enum>\n     </property>\n    </widget>\n   </item>\n   <item>\n    <layout class=\"QHBoxLayout\" name=\"horizontalLayout\">\n     <property name=\"spacing\">\n      <number>6</number>\n     </property>\n     <property name=\"leftMargin\">\n      <number>9</number>\n     </property>\n     <property name=\"topMargin\">\n      <number>9</number>\n     </property>\n     <property name=\"rightMargin\">\n      <number>9</number>\n     </property>\n     <property name=\"bottomMargin\">\n      <number>9</number>\n     </property>\n     <item>\n      <spacer name=\"horizontalSpacer\">\n       <property name=\"orientation\">\n        <enum>Qt::Horizontal</enum>\n       </property>\n       <property name=\"sizeHint\" stdset=\"0\">\n        <size>\n         <width>40</width>\n         <height>20</height>\n        </size>\n       </property>\n      </spacer>\n     </item>\n     <item>\n      <widget class=\"QPushButton\" name=\"nextButton\">\n       <property name=\"text\">\n        <string>Next</string>\n       </property>\n       <property name=\"icon\">\n        <iconset theme=\"go-next\">\n         <normaloff>../../../thedesk/libthedesk/onboarding</normaloff>../../../thedesk/libthedesk/onboarding</iconset>\n       </property>\n      </widget>\n     </item>\n    </layout>\n   </item>\n  </layout>\n </widget>\n <customwidgets>\n  <customwidget>\n   <class>tTitleLabel</class>\n   <extends>QLabel</extends>\n   <header location=\"global\">ttitlelabel.h</header>\n   <slots>\n    <signal>backButtonClicked()</signal>\n   </slots>\n  </customwidget>\n </customwidgets>\n <resources/>\n <connections/>\n</ui>\n"
  },
  {
    "path": "plugins/TimeDatePlugin/plugin.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"plugin.h\"\n\n#include \"tsettings.h\"\n#include <QApplication>\n#include <QDebug>\n#include <QDir>\n#include <localemanager.h>\n#include <onboardingmanager.h>\n#include <statemanager.h>\n#include <statuscentermanager.h>\n#include <tapplication.h>\n\n#include \"settings/datetimepane.h\"\n\n#include \"onboarding/onboardingtimezone.h\"\n\nstruct PluginPrivate {\n        DateTimePane* dateTimePane;\n};\n\nPlugin::Plugin() {\n    d = new PluginPrivate();\n}\n\nPlugin::~Plugin() {\n    delete d;\n}\n\nvoid Plugin::activate() {\n    tApplication::addPluginTranslator(CNTP_TARGET_NAME);\n\n    tSettings::registerDefaults(QDir::cleanPath(qApp->applicationDirPath() + \"/../plugins/TimeDatePlugin/thedesk-timedate.conf\"));\n    tSettings::registerDefaults(\"/usr/share/defaults/thedesk-timedate.conf\");\n\n    d->dateTimePane = new DateTimePane();\n    StateManager::statusCenterManager()->addPane(d->dateTimePane, StatusCenterManager::SystemSettings);\n\n    QObject::connect(StateManager::onboardingManager(), &OnboardingManager::onboardingRequired, [=] {\n        StateManager::onboardingManager()->addOnboardingStep(new OnboardingTimeZone());\n    });\n}\n\nvoid Plugin::deactivate() {\n    StateManager::statusCenterManager()->removePane(d->dateTimePane);\n    d->dateTimePane->deleteLater();\n    tApplication::removePluginTranslator(CNTP_TARGET_NAME);\n}\n"
  },
  {
    "path": "plugins/TimeDatePlugin/plugin.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef PLUGIN_H\n#define PLUGIN_H\n\n#include \"plugins/plugininterface.h\"\n\nstruct PluginPrivate;\nclass Plugin : public QObject,\n               public PluginInterface {\n        Q_OBJECT\n        Q_PLUGIN_METADATA(IID PluginInterface_iid FILE \"Plugin.json\")\n        Q_INTERFACES(PluginInterface)\n\n    public:\n        Plugin();\n        ~Plugin();\n\n    private:\n        PluginPrivate* d;\n\n        // PluginInterface interface\n    public:\n        void activate();\n        void deactivate();\n};\n\n#endif // PLUGIN_H\n"
  },
  {
    "path": "plugins/TimeDatePlugin/popovers/settimedatepopover.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2022 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"settimedatepopover.h\"\n#include \"ui_settimedatepopover.h\"\n\n#include <QDBusConnection>\n#include <QDBusMessage>\n#include <QDBusPendingCallWatcher>\n#include <tdatetimepicker.h>\n\nstruct SetTimeDatePopoverPrivate {\n        tDateTimePicker* datePicker;\n        tDateTimePicker* timePicker;\n};\n\nSetTimeDatePopover::SetTimeDatePopover(QWidget* parent) :\n    QWidget(parent),\n    ui(new Ui::SetTimeDatePopover) {\n    ui->setupUi(this);\n    d = new SetTimeDatePopoverPrivate();\n    ui->titleLabel->setBackButtonShown(true);\n\n    d->datePicker = new tDateTimePicker(this);\n    d->timePicker = new tDateTimePicker(this);\n    ui->pickerLayout->addWidget(d->datePicker);\n    ui->pickerLayout->addWidget(d->timePicker);\n\n    QFont fnt = d->datePicker->font();\n    fnt.setPointSize(30);\n    d->datePicker->setFont(fnt);\n    d->timePicker->setFont(fnt);\n\n    d->datePicker->setDateTime(QDateTime::currentDateTime());\n    d->datePicker->setPickOptions(tDateTimePicker::PickDate);\n    d->timePicker->setDateTime(QDateTime::currentDateTime());\n    d->timePicker->setPickOptions(tDateTimePicker::PickTime);\n\n    ui->stackedWidget->setCurrentAnimation(tStackedWidget::Fade);\n    ui->spinner->setFixedSize(SC_DPI_T(QSize(32, 32), QSize));\n}\n\nSetTimeDatePopover::~SetTimeDatePopover() {\n    delete ui;\n    delete d;\n}\n\nvoid SetTimeDatePopover::on_titleLabel_backButtonClicked() {\n    emit done();\n}\n\nvoid SetTimeDatePopover::on_applyButton_clicked() {\n    ui->stackedWidget->setCurrentWidget(ui->spinnerPage);\n\n    QDateTime selectedDateTime(d->datePicker->currentDateTime().date(), d->timePicker->currentDateTime().time());\n    qint64 milliSinceEpoch = selectedDateTime.toMSecsSinceEpoch() * 1000;\n\n    QDBusMessage setTimeMessage = QDBusMessage::createMethodCall(\"org.freedesktop.timedate1\", \"/org/freedesktop/timedate1\", \"org.freedesktop.timedate1\", \"SetTime\");\n    setTimeMessage.setArguments({milliSinceEpoch, false, true});\n    QDBusPendingCallWatcher* watcher = new QDBusPendingCallWatcher(QDBusConnection::systemBus().asyncCall(setTimeMessage));\n    connect(watcher, &QDBusPendingCallWatcher::finished, this, [=] {\n        if (watcher->isError()) {\n            ui->stackedWidget->setCurrentWidget(ui->dateTimePage);\n        } else {\n            emit done();\n        }\n        watcher->deleteLater();\n    });\n}\n"
  },
  {
    "path": "plugins/TimeDatePlugin/popovers/settimedatepopover.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2022 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef SETTIMEDATEPOPOVER_H\n#define SETTIMEDATEPOPOVER_H\n\n#include <QWidget>\n\nnamespace Ui {\n    class SetTimeDatePopover;\n}\n\nstruct SetTimeDatePopoverPrivate;\nclass SetTimeDatePopover : public QWidget {\n        Q_OBJECT\n\n    public:\n        explicit SetTimeDatePopover(QWidget* parent = nullptr);\n        ~SetTimeDatePopover();\n\n    signals:\n        void done();\n\n    private slots:\n        void on_titleLabel_backButtonClicked();\n\n        void on_applyButton_clicked();\n\n    private:\n        Ui::SetTimeDatePopover* ui;\n        SetTimeDatePopoverPrivate* d;\n};\n\n#endif // SETTIMEDATEPOPOVER_H\n"
  },
  {
    "path": "plugins/TimeDatePlugin/popovers/settimedatepopover.ui",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ui version=\"4.0\">\n <class>SetTimeDatePopover</class>\n <widget class=\"QWidget\" name=\"SetTimeDatePopover\">\n  <property name=\"geometry\">\n   <rect>\n    <x>0</x>\n    <y>0</y>\n    <width>400</width>\n    <height>300</height>\n   </rect>\n  </property>\n  <property name=\"windowTitle\">\n   <string notr=\"true\">Form</string>\n  </property>\n  <layout class=\"QVBoxLayout\" name=\"verticalLayout_2\">\n   <property name=\"spacing\">\n    <number>0</number>\n   </property>\n   <property name=\"leftMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"topMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"rightMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"bottomMargin\">\n    <number>0</number>\n   </property>\n   <item>\n    <widget class=\"tStackedWidget\" name=\"stackedWidget\">\n     <property name=\"currentIndex\">\n      <number>0</number>\n     </property>\n     <widget class=\"QWidget\" name=\"dateTimePage\">\n      <layout class=\"QVBoxLayout\" name=\"verticalLayout\">\n       <property name=\"spacing\">\n        <number>0</number>\n       </property>\n       <property name=\"leftMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"topMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"rightMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"bottomMargin\">\n        <number>0</number>\n       </property>\n       <item>\n        <widget class=\"tTitleLabel\" name=\"titleLabel\">\n         <property name=\"text\">\n          <string>Set Date and Time</string>\n         </property>\n        </widget>\n       </item>\n       <item>\n        <widget class=\"QLabel\" name=\"label\">\n         <property name=\"text\">\n          <string>What's the current date and time?</string>\n         </property>\n         <property name=\"margin\">\n          <number>9</number>\n         </property>\n        </widget>\n       </item>\n       <item>\n        <layout class=\"QVBoxLayout\" name=\"pickerLayout\"/>\n       </item>\n       <item>\n        <widget class=\"QPushButton\" name=\"applyButton\">\n         <property name=\"text\">\n          <string>Apply Date and Time</string>\n         </property>\n         <property name=\"icon\">\n          <iconset theme=\"dialog-ok\"/>\n         </property>\n        </widget>\n       </item>\n       <item>\n        <spacer name=\"verticalSpacer\">\n         <property name=\"orientation\">\n          <enum>Qt::Vertical</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>20</width>\n           <height>107</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n      </layout>\n     </widget>\n     <widget class=\"QWidget\" name=\"spinnerPage\">\n      <layout class=\"QGridLayout\" name=\"gridLayout\">\n       <item row=\"0\" column=\"1\">\n        <spacer name=\"verticalSpacer_3\">\n         <property name=\"orientation\">\n          <enum>Qt::Vertical</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>20</width>\n           <height>121</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n       <item row=\"1\" column=\"0\">\n        <spacer name=\"horizontalSpacer\">\n         <property name=\"orientation\">\n          <enum>Qt::Horizontal</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>171</width>\n           <height>20</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n       <item row=\"1\" column=\"1\">\n        <widget class=\"tCircularSpinner\" name=\"spinner\" native=\"true\"/>\n       </item>\n       <item row=\"1\" column=\"2\">\n        <spacer name=\"horizontalSpacer_2\">\n         <property name=\"orientation\">\n          <enum>Qt::Horizontal</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>170</width>\n           <height>20</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n       <item row=\"2\" column=\"1\">\n        <spacer name=\"verticalSpacer_2\">\n         <property name=\"orientation\">\n          <enum>Qt::Vertical</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>20</width>\n           <height>120</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n      </layout>\n     </widget>\n    </widget>\n   </item>\n  </layout>\n </widget>\n <customwidgets>\n  <customwidget>\n   <class>tStackedWidget</class>\n   <extends>QStackedWidget</extends>\n   <header location=\"global\">tstackedwidget.h</header>\n   <container>1</container>\n   <slots>\n    <signal>switchingFrame(int)</signal>\n   </slots>\n  </customwidget>\n  <customwidget>\n   <class>tTitleLabel</class>\n   <extends>QLabel</extends>\n   <header location=\"global\">ttitlelabel.h</header>\n   <slots>\n    <signal>backButtonClicked()</signal>\n   </slots>\n  </customwidget>\n  <customwidget>\n   <class>tCircularSpinner</class>\n   <extends>QWidget</extends>\n   <header location=\"global\">tcircularspinner.h</header>\n   <container>1</container>\n  </customwidget>\n </customwidgets>\n <resources/>\n <connections/>\n</ui>\n"
  },
  {
    "path": "plugins/TimeDatePlugin/popovers/settimezonepopover.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"settimezonepopover.h\"\n#include \"ui_settimezonepopover.h\"\n\n#include \"timezonesmodel.h\"\n#include <QDBusConnection>\n#include <QDBusMessage>\n#include <QDBusPendingCallWatcher>\n\nstruct SetTimezonePopoverPrivate {\n        TimezonesModel* model;\n};\n\nSetTimezonePopover::SetTimezonePopover(QWidget* parent) :\n    QWidget(parent),\n    ui(new Ui::SetTimezonePopover) {\n    ui->setupUi(this);\n    d = new SetTimezonePopoverPrivate();\n    d->model = new TimezonesModel();\n\n    ui->titleLabel->setBackButtonShown(true);\n    ui->listView->setModel(d->model);\n    ui->listView->setItemDelegate(new TimezonesModelDelegate());\n    ui->stackedWidget->setCurrentAnimation(tStackedWidget::Fade);\n    ui->spinner->setFixedSize(SC_DPI_T(QSize(32, 32), QSize));\n}\n\nSetTimezonePopover::~SetTimezonePopover() {\n    delete ui;\n    delete d;\n}\n\nvoid SetTimezonePopover::on_titleLabel_backButtonClicked() {\n    emit done();\n}\n\nvoid SetTimezonePopover::on_listView_activated(const QModelIndex& index) {\n    ui->stackedWidget->setCurrentWidget(ui->spinnerPage);\n\n    QDBusMessage setTimezoneMessage = QDBusMessage::createMethodCall(\"org.freedesktop.timedate1\", \"/org/freedesktop/timedate1\", \"org.freedesktop.timedate1\", \"SetTimezone\");\n    setTimezoneMessage.setArguments({index.data(Qt::UserRole).toString(), true});\n    QDBusPendingCallWatcher* watcher = new QDBusPendingCallWatcher(QDBusConnection::systemBus().asyncCall(setTimezoneMessage));\n    connect(watcher, &QDBusPendingCallWatcher::finished, this, [=] {\n        if (watcher->isError()) {\n            ui->stackedWidget->setCurrentWidget(ui->timezonesPage);\n        } else {\n            emit done();\n        }\n        watcher->deleteLater();\n    });\n}\n\nvoid SetTimezonePopover::on_searchBox_textChanged(const QString& arg1) {\n    d->model->search(arg1);\n}\n"
  },
  {
    "path": "plugins/TimeDatePlugin/popovers/settimezonepopover.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef SETTIMEZONEPOPOVER_H\n#define SETTIMEZONEPOPOVER_H\n\n#include <QWidget>\n\nnamespace Ui {\n    class SetTimezonePopover;\n}\n\nstruct SetTimezonePopoverPrivate;\nclass SetTimezonePopover : public QWidget {\n        Q_OBJECT\n\n    public:\n        explicit SetTimezonePopover(QWidget* parent = nullptr);\n        ~SetTimezonePopover();\n\n    signals:\n        void done();\n\n    private slots:\n        void on_titleLabel_backButtonClicked();\n\n        void on_listView_activated(const QModelIndex& index);\n\n        void on_searchBox_textChanged(const QString& arg1);\n\n    private:\n        Ui::SetTimezonePopover* ui;\n        SetTimezonePopoverPrivate* d;\n};\n\n#endif // SETTIMEZONEPOPOVER_H\n"
  },
  {
    "path": "plugins/TimeDatePlugin/popovers/settimezonepopover.ui",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ui version=\"4.0\">\n <class>SetTimezonePopover</class>\n <widget class=\"QWidget\" name=\"SetTimezonePopover\">\n  <property name=\"geometry\">\n   <rect>\n    <x>0</x>\n    <y>0</y>\n    <width>400</width>\n    <height>300</height>\n   </rect>\n  </property>\n  <property name=\"windowTitle\">\n   <string notr=\"true\">Form</string>\n  </property>\n  <layout class=\"QVBoxLayout\" name=\"verticalLayout\">\n   <property name=\"spacing\">\n    <number>0</number>\n   </property>\n   <property name=\"leftMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"topMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"rightMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"bottomMargin\">\n    <number>0</number>\n   </property>\n   <item>\n    <widget class=\"tStackedWidget\" name=\"stackedWidget\">\n     <property name=\"currentIndex\">\n      <number>0</number>\n     </property>\n     <widget class=\"QWidget\" name=\"timezonesPage\">\n      <layout class=\"QVBoxLayout\" name=\"verticalLayout_2\">\n       <property name=\"spacing\">\n        <number>0</number>\n       </property>\n       <property name=\"leftMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"topMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"rightMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"bottomMargin\">\n        <number>0</number>\n       </property>\n       <item>\n        <widget class=\"tTitleLabel\" name=\"titleLabel\">\n         <property name=\"text\">\n          <string>Set Timezone</string>\n         </property>\n        </widget>\n       </item>\n       <item>\n        <widget class=\"QLabel\" name=\"label\">\n         <property name=\"text\">\n          <string>Where are you now?</string>\n         </property>\n         <property name=\"margin\">\n          <number>9</number>\n         </property>\n        </widget>\n       </item>\n       <item>\n        <widget class=\"Line\" name=\"line\">\n         <property name=\"maximumSize\">\n          <size>\n           <width>16777215</width>\n           <height>1</height>\n          </size>\n         </property>\n         <property name=\"orientation\">\n          <enum>Qt::Horizontal</enum>\n         </property>\n        </widget>\n       </item>\n       <item>\n        <widget class=\"QLineEdit\" name=\"searchBox\">\n         <property name=\"frame\">\n          <bool>false</bool>\n         </property>\n         <property name=\"placeholderText\">\n          <string>Search</string>\n         </property>\n        </widget>\n       </item>\n       <item>\n        <widget class=\"Line\" name=\"line_2\">\n         <property name=\"maximumSize\">\n          <size>\n           <width>16777215</width>\n           <height>1</height>\n          </size>\n         </property>\n         <property name=\"orientation\">\n          <enum>Qt::Horizontal</enum>\n         </property>\n        </widget>\n       </item>\n       <item>\n        <widget class=\"QListView\" name=\"listView\">\n         <property name=\"frameShape\">\n          <enum>QFrame::NoFrame</enum>\n         </property>\n        </widget>\n       </item>\n      </layout>\n     </widget>\n     <widget class=\"QWidget\" name=\"spinnerPage\">\n      <layout class=\"QGridLayout\" name=\"gridLayout\">\n       <item row=\"0\" column=\"1\">\n        <spacer name=\"verticalSpacer\">\n         <property name=\"orientation\">\n          <enum>Qt::Vertical</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>20</width>\n           <height>121</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n       <item row=\"1\" column=\"0\">\n        <spacer name=\"horizontalSpacer\">\n         <property name=\"orientation\">\n          <enum>Qt::Horizontal</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>171</width>\n           <height>20</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n       <item row=\"1\" column=\"1\">\n        <widget class=\"tCircularSpinner\" name=\"spinner\" native=\"true\"/>\n       </item>\n       <item row=\"1\" column=\"2\">\n        <spacer name=\"horizontalSpacer_2\">\n         <property name=\"orientation\">\n          <enum>Qt::Horizontal</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>170</width>\n           <height>20</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n       <item row=\"2\" column=\"1\">\n        <spacer name=\"verticalSpacer_2\">\n         <property name=\"orientation\">\n          <enum>Qt::Vertical</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>20</width>\n           <height>120</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n      </layout>\n     </widget>\n    </widget>\n   </item>\n  </layout>\n </widget>\n <customwidgets>\n  <customwidget>\n   <class>tStackedWidget</class>\n   <extends>QStackedWidget</extends>\n   <header location=\"global\">tstackedwidget.h</header>\n   <container>1</container>\n   <slots>\n    <signal>switchingFrame(int)</signal>\n   </slots>\n  </customwidget>\n  <customwidget>\n   <class>tTitleLabel</class>\n   <extends>QLabel</extends>\n   <header location=\"global\">ttitlelabel.h</header>\n   <slots>\n    <signal>backButtonClicked()</signal>\n   </slots>\n  </customwidget>\n  <customwidget>\n   <class>tCircularSpinner</class>\n   <extends>QWidget</extends>\n   <header location=\"global\">tcircularspinner.h</header>\n   <container>1</container>\n  </customwidget>\n </customwidgets>\n <resources/>\n <connections/>\n</ui>\n"
  },
  {
    "path": "plugins/TimeDatePlugin/settings/datetimepane.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"datetimepane.h\"\n#include \"ui_datetimepane.h\"\n\n#include <statemanager.h>\n#include <statuscentermanager.h>\n#include <QIcon>\n#include <QDBusInterface>\n#include <tpopover.h>\n#include \"popovers/settimezonepopover.h\"\n#include \"popovers/settimedatepopover.h\"\n\nstruct DateTimePanePrivate {\n    bool updating = false;\n};\n\nDateTimePane::DateTimePane() :\n    StatusCenterPane(),\n    ui(new Ui::DateTimePane) {\n    ui->setupUi(this);\n\n    d = new DateTimePanePrivate();\n\n    ui->titleLabel->setBackButtonShown(true);\n    ui->titleLabel->setBackButtonShown(StateManager::instance()->statusCenterManager()->isHamburgerMenuRequired());\n    connect(StateManager::instance()->statusCenterManager(), &StatusCenterManager::isHamburgerMenuRequiredChanged, ui->titleLabel, &tTitleLabel::setBackButtonShown);\n\n    const int contentWidth = StateManager::instance()->statusCenterManager()->preferredContentWidth();\n    ui->actionsWidget->setFixedWidth(contentWidth);\n    ui->timeSyncWidget->setFixedWidth(contentWidth);\n\n    QDBusConnection::systemBus().connect(\"org.freedesktop.timedate1\", \"/org/freedesktop/timedate1\", \"org.freedesktop.DBus.Properties\", \"PropertiesChanged\", this, SLOT(propertiesChanged(QString, QVariantMap, QStringList)));\n    forceUpdate();\n}\n\nDateTimePane::~DateTimePane() {\n    delete d;\n    delete ui;\n}\n\nvoid DateTimePane::forceUpdate() {\n    QDBusInterface timedateInterface(\"org.freedesktop.timedate1\", \"/org/freedesktop/timedate1\", \"org.freedesktop.timedate1\", QDBusConnection::systemBus());\n    QVariantMap changedProperties;\n    changedProperties.insert(\"NTP\", timedateInterface.property(\"NTP\"));\n    changedProperties.insert(\"Timezone\", timedateInterface.property(\"Timezone\"));\n    this->propertiesChanged(\"org.freedesktop.timedate1\", changedProperties, changedProperties.keys());\n}\n\nQString DateTimePane::name() {\n    return QStringLiteral(\"DateTimeSettings\");\n}\n\nQString DateTimePane::displayName() {\n    return tr(\"Date and Time\");\n}\n\nQIcon DateTimePane::icon() {\n    return QIcon::fromTheme(\"preferences-system-time\");\n}\n\nQWidget* DateTimePane::leftPane() {\n    return nullptr;\n}\n\nvoid DateTimePane::on_titleLabel_backButtonClicked() {\n    StateManager::instance()->statusCenterManager()->showStatusCenterHamburgerMenu();\n}\n\nvoid DateTimePane::on_ntpSwitch_toggled(bool checked) {\n    if (d->updating) return;\n    QDBusMessage setNtpMessage = QDBusMessage::createMethodCall(\"org.freedesktop.timedate1\", \"/org/freedesktop/timedate1\", \"org.freedesktop.timedate1\", \"SetNTP\");\n    setNtpMessage.setArguments({checked, true});\n    QDBusPendingCallWatcher* watcher = new QDBusPendingCallWatcher(QDBusConnection::systemBus().asyncCall(setNtpMessage));\n    connect(watcher, &QDBusPendingCallWatcher::finished, this, [ = ] {\n        forceUpdate();\n        watcher->deleteLater();\n    });\n}\n\nvoid DateTimePane::propertiesChanged(QString interfaceName, QVariantMap changedProperties, QStringList invalidatedProperties) {\n    Q_UNUSED(interfaceName)\n\n    d->updating = true;\n    if (invalidatedProperties.contains(\"NTP\")) {\n        ui->ntpSwitch->setChecked(changedProperties.value(\"NTP\").toBool());\n        ui->changeDateTimeButton->setEnabled(!changedProperties.value(\"NTP\").toBool());\n    }\n    d->updating = false;\n}\n\nvoid DateTimePane::on_changeTimezoneButton_clicked() {\n    SetTimezonePopover* setTimezone = new SetTimezonePopover();\n    tPopover* popover = new tPopover(setTimezone);\n    popover->setPopoverWidth(SC_DPI(600));\n    connect(setTimezone, &SetTimezonePopover::done, popover, &tPopover::dismiss);\n    connect(popover, &tPopover::dismissed, popover, &tPopover::deleteLater);\n    connect(popover, &tPopover::dismissed, setTimezone, &SetTimezonePopover::deleteLater);\n    popover->show(this->window());\n}\n\n\nvoid DateTimePane::changeEvent(QEvent* event) {\n    if (event->type() == QEvent::LanguageChange) {\n        ui->retranslateUi(this);\n        emit displayNameChanged();\n    }\n}\n\nvoid DateTimePane::on_changeDateTimeButton_clicked() {\n    SetTimeDatePopover* setTimeDate = new SetTimeDatePopover();\n    tPopover* popover = new tPopover(setTimeDate);\n    popover->setPopoverWidth(SC_DPI(600));\n    connect(setTimeDate, &SetTimeDatePopover::done, popover, &tPopover::dismiss);\n    connect(popover, &tPopover::dismissed, popover, &tPopover::deleteLater);\n    connect(popover, &tPopover::dismissed, setTimeDate, &SetTimezonePopover::deleteLater);\n    popover->show(this->window());\n}\n\n"
  },
  {
    "path": "plugins/TimeDatePlugin/settings/datetimepane.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef DATETIMEPANE_H\n#define DATETIMEPANE_H\n\n#include <QVariantMap>\n#include <statuscenterpane.h>\n\nnamespace Ui {\n    class DateTimePane;\n}\n\nstruct DateTimePanePrivate;\nclass DateTimePane : public StatusCenterPane {\n        Q_OBJECT\n\n    public:\n        explicit DateTimePane();\n        ~DateTimePane();\n\n    private:\n        Ui::DateTimePane* ui;\n        DateTimePanePrivate* d;\n\n        void forceUpdate();\n\n        // StatusCenterPane interface\n    public:\n        QString name();\n        QString displayName();\n        QIcon icon();\n        QWidget* leftPane();\n\n    private slots:\n        void on_titleLabel_backButtonClicked();\n        void on_ntpSwitch_toggled(bool checked);\n        void propertiesChanged(QString interfaceName, QVariantMap changedProperties, QStringList invalidatedProperties);\n        void on_changeTimezoneButton_clicked();\n\n        // QWidget interface\n        void on_changeDateTimeButton_clicked();\n\n    protected:\n        void changeEvent(QEvent* event);\n};\n\n#endif // DATETIMEPANE_H\n"
  },
  {
    "path": "plugins/TimeDatePlugin/settings/datetimepane.ui",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ui version=\"4.0\">\n <class>DateTimePane</class>\n <widget class=\"QWidget\" name=\"DateTimePane\">\n  <property name=\"geometry\">\n   <rect>\n    <x>0</x>\n    <y>0</y>\n    <width>710</width>\n    <height>466</height>\n   </rect>\n  </property>\n  <property name=\"windowTitle\">\n   <string notr=\"true\">Form</string>\n  </property>\n  <layout class=\"QVBoxLayout\" name=\"verticalLayout\">\n   <property name=\"spacing\">\n    <number>0</number>\n   </property>\n   <property name=\"leftMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"topMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"rightMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"bottomMargin\">\n    <number>0</number>\n   </property>\n   <item>\n    <widget class=\"tTitleLabel\" name=\"titleLabel\">\n     <property name=\"text\">\n      <string>Date and Time</string>\n     </property>\n    </widget>\n   </item>\n   <item>\n    <widget class=\"QScrollArea\" name=\"scrollArea\">\n     <property name=\"frameShape\">\n      <enum>QFrame::NoFrame</enum>\n     </property>\n     <property name=\"widgetResizable\">\n      <bool>true</bool>\n     </property>\n     <widget class=\"QWidget\" name=\"scrollAreaWidgetContents\">\n      <property name=\"geometry\">\n       <rect>\n        <x>0</x>\n        <y>0</y>\n        <width>710</width>\n        <height>449</height>\n       </rect>\n      </property>\n      <layout class=\"QVBoxLayout\" name=\"verticalLayout_2\">\n       <property name=\"spacing\">\n        <number>0</number>\n       </property>\n       <property name=\"leftMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"topMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"rightMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"bottomMargin\">\n        <number>0</number>\n       </property>\n       <item alignment=\"Qt::AlignHCenter\">\n        <widget class=\"QWidget\" name=\"actionsWidget\" native=\"true\">\n         <layout class=\"QVBoxLayout\" name=\"verticalLayout_3\">\n          <item>\n           <widget class=\"QLabel\" name=\"label\">\n            <property name=\"font\">\n             <font>\n              <bold>true</bold>\n             </font>\n            </property>\n            <property name=\"text\">\n             <string>ACTIONS</string>\n            </property>\n           </widget>\n          </item>\n          <item>\n           <layout class=\"QVBoxLayout\" name=\"verticalLayout_4\">\n            <property name=\"spacing\">\n             <number>0</number>\n            </property>\n            <property name=\"leftMargin\">\n             <number>0</number>\n            </property>\n            <property name=\"topMargin\">\n             <number>0</number>\n            </property>\n            <property name=\"rightMargin\">\n             <number>0</number>\n            </property>\n            <property name=\"bottomMargin\">\n             <number>0</number>\n            </property>\n            <item>\n             <widget class=\"QPushButton\" name=\"changeDateTimeButton\">\n              <property name=\"text\">\n               <string>Change Date and Time</string>\n              </property>\n             </widget>\n            </item>\n            <item>\n             <widget class=\"QPushButton\" name=\"changeTimezoneButton\">\n              <property name=\"text\">\n               <string>Change Timezone</string>\n              </property>\n             </widget>\n            </item>\n           </layout>\n          </item>\n         </layout>\n        </widget>\n       </item>\n       <item>\n        <widget class=\"Line\" name=\"line\">\n         <property name=\"maximumSize\">\n          <size>\n           <width>16777215</width>\n           <height>1</height>\n          </size>\n         </property>\n         <property name=\"orientation\">\n          <enum>Qt::Horizontal</enum>\n         </property>\n        </widget>\n       </item>\n       <item alignment=\"Qt::AlignHCenter\">\n        <widget class=\"QWidget\" name=\"timeSyncWidget\" native=\"true\">\n         <layout class=\"QGridLayout\" name=\"gridLayout\">\n          <item row=\"1\" column=\"0\">\n           <widget class=\"QLabel\" name=\"label_3\">\n            <property name=\"text\">\n             <string>Synchronise clock with the Internet</string>\n            </property>\n           </widget>\n          </item>\n          <item row=\"1\" column=\"1\">\n           <widget class=\"tSwitch\" name=\"ntpSwitch\">\n            <property name=\"text\">\n             <string notr=\"true\">NtpSwitch</string>\n            </property>\n           </widget>\n          </item>\n          <item row=\"0\" column=\"0\" colspan=\"2\">\n           <widget class=\"QLabel\" name=\"label_2\">\n            <property name=\"font\">\n             <font>\n              <bold>true</bold>\n             </font>\n            </property>\n            <property name=\"text\">\n             <string>TIME SYNCHRONISATION</string>\n            </property>\n           </widget>\n          </item>\n         </layout>\n        </widget>\n       </item>\n       <item>\n        <spacer name=\"verticalSpacer\">\n         <property name=\"orientation\">\n          <enum>Qt::Vertical</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>20</width>\n           <height>40</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n      </layout>\n     </widget>\n    </widget>\n   </item>\n  </layout>\n </widget>\n <customwidgets>\n  <customwidget>\n   <class>tTitleLabel</class>\n   <extends>QLabel</extends>\n   <header location=\"global\">ttitlelabel.h</header>\n   <slots>\n    <signal>backButtonClicked()</signal>\n   </slots>\n  </customwidget>\n  <customwidget>\n   <class>tSwitch</class>\n   <extends>QPushButton</extends>\n   <header location=\"global\">tswitch.h</header>\n  </customwidget>\n </customwidgets>\n <resources/>\n <connections/>\n</ui>\n"
  },
  {
    "path": "plugins/TimeDatePlugin/thedesk-timedate.conf",
    "content": ""
  },
  {
    "path": "plugins/TimeDatePlugin/timezonesmodel.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2019 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"timezonesmodel.h\"\n\n#include <QPainter>\n#include <QTimeZone>\n\nstruct TimezonesModelPrivate {\n        QList<QTimeZone> timezones;\n        QList<QTimeZone> shownTimezones;\n};\n\nTimezonesModel::TimezonesModel(QObject* parent) :\n    QAbstractListModel(parent) {\n    d = new TimezonesModelPrivate();\n    QDateTime now = QDateTime::currentDateTimeUtc();\n    for (QByteArray timezone : QTimeZone::availableTimeZoneIds()) {\n        QTimeZone tz(timezone);\n        if (timezone == tz.displayName(now, QTimeZone::OffsetName)) continue; // Ignore\n        d->timezones.append(tz);\n    }\n\n    // Sort timezones\n    std::sort(d->timezones.begin(), d->timezones.end(), [=](const QTimeZone& first, const QTimeZone& second) {\n        if (first.offsetFromUtc(now) < second.offsetFromUtc(now)) {\n            return true;\n        } else if (first.offsetFromUtc(now) > second.offsetFromUtc(now)) {\n            return false;\n        } else {\n            return QString(first.id()).split(\"/\").last().localeAwareCompare(QString(second.id()).split(\"/\").last()) < 0;\n        }\n    });\n\n    // Initialize the shown items\n    search(\"\");\n}\n\nTimezonesModel::~TimezonesModel() {\n    delete d;\n}\n\nint TimezonesModel::rowCount(const QModelIndex& parent) const {\n    if (parent.isValid()) return 0;\n\n    return d->shownTimezones.count();\n}\n\nQVariant TimezonesModel::data(const QModelIndex& index, int role) const {\n    if (!index.isValid()) return QVariant();\n\n    QDateTime now = QDateTime::currentDateTimeUtc();\n    QTimeZone tz = d->shownTimezones.at(index.row());\n    switch (role) {\n        case Qt::DisplayRole:\n            {\n                return QString(tz.id()).split(\"/\").last().replace(\"_\", \" \");\n            }\n        case Qt::UserRole:\n            return tz.id();\n        case Qt::UserRole + 1:\n            return tz.displayName(now, QTimeZone::OffsetName);\n        case Qt::UserRole + 2:\n            return tz.displayName(now, QTimeZone::LongName);\n        case Qt::UserRole + 3:\n            if (index.row() == 0 || d->shownTimezones.at(index.row() - 1).offsetFromUtc(now) != tz.offsetFromUtc(now)) {\n                return true;\n            } else {\n                return false;\n            }\n    }\n    return QVariant();\n}\n\nQModelIndex TimezonesModel::timezone(QTimeZone timezone) {\n    for (int i = 0; i < d->timezones.count(); i++) {\n        if (d->timezones.at(i) == timezone) return index(i);\n    }\n    return QModelIndex();\n}\n\nvoid TimezonesModel::search(QString query) {\n    d->shownTimezones.clear();\n    if (query == \"\") {\n        d->shownTimezones = d->timezones;\n    } else {\n        QDateTime now = QDateTime::currentDateTime();\n        for (QTimeZone tz : d->timezones) {\n            bool match = false;\n            if (QString(tz.id()).contains(query, Qt::CaseInsensitive)) match = true;\n            if (QString(tz.id()).replace(\"_\", \" \").contains(query, Qt::CaseInsensitive)) match = true;\n            if (tz.displayName(now, QTimeZone::OffsetName).contains(query, Qt::CaseInsensitive)) match = true;\n            if (tz.displayName(now, QTimeZone::LongName).contains(query, Qt::CaseInsensitive)) match = true;\n\n            if (match) d->shownTimezones.append(tz);\n        }\n    }\n\n    emit dataChanged(index(0), index(rowCount()));\n}\n\nTimezonesModelDelegate::TimezonesModelDelegate(QObject* parent) :\n    QStyledItemDelegate(parent) {\n}\n\nTimezonesModelDelegate::~TimezonesModelDelegate() {\n}\n\nvoid TimezonesModelDelegate::paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const {\n    QPen textPen, offsetPen;\n    if (option.state & QStyle::State_Selected) {\n        painter->setBrush(option.palette.brush(QPalette::Highlight));\n        textPen = option.palette.color(QPalette::HighlightedText);\n        offsetPen = option.palette.color(QPalette::HighlightedText);\n    } else if (option.state & QStyle::State_MouseOver) {\n        QColor col = option.palette.color(QPalette::Highlight);\n        col.setAlpha(127);\n        painter->setBrush(col);\n        textPen = option.palette.color(QPalette::HighlightedText);\n        offsetPen = option.palette.color(QPalette::HighlightedText);\n    } else {\n        textPen = option.palette.color(QPalette::WindowText);\n        offsetPen = option.palette.color(QPalette::Disabled, QPalette::WindowText);\n    }\n    painter->setPen(Qt::transparent);\n    painter->drawRect(option.rect);\n    painter->setBrush(Qt::transparent);\n\n    QRect offsetRect = option.rect;\n    offsetRect.setLeft(option.rect.left() + 6);\n    offsetRect.setWidth(option.fontMetrics.horizontalAdvance(QStringLiteral(\"UTC+12:00\")));\n    painter->setPen(offsetPen);\n    painter->setFont(option.font);\n    if (index.data(Qt::UserRole + 3).toBool()) painter->drawText(offsetRect, Qt::AlignRight | Qt::AlignVCenter, index.data(Qt::UserRole + 1).toString());\n\n    QString mainText = index.data(Qt::DisplayRole).toString();\n    QRect textRect = option.rect;\n    textRect.setLeft(offsetRect.right() + 6);\n    textRect.setWidth(option.fontMetrics.horizontalAdvance(mainText) + 1);\n    painter->setPen(textPen);\n    painter->drawText(textRect, Qt::AlignLeft | Qt::AlignVCenter, mainText);\n\n    QRect zoneName = option.rect;\n    zoneName.setLeft(textRect.right() + 6);\n    painter->setPen(offsetPen);\n    painter->drawText(zoneName, Qt::AlignLeft | Qt::AlignVCenter, index.data(Qt::UserRole + 2).toString());\n}\n"
  },
  {
    "path": "plugins/TimeDatePlugin/timezonesmodel.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2019 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef TIMEZONESMODEL_H\n#define TIMEZONESMODEL_H\n\n#include <QAbstractListModel>\n#include <QStyledItemDelegate>\n\nstruct TimezonesModelPrivate;\nclass QTimeZone;\nclass TimezonesModel : public QAbstractListModel {\n        Q_OBJECT\n\n    public:\n        explicit TimezonesModel(QObject* parent = nullptr);\n        ~TimezonesModel();\n\n        // Basic functionality:\n        int rowCount(const QModelIndex& parent = QModelIndex()) const override;\n\n        QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const override;\n\n        QModelIndex timezone(QTimeZone timezone);\n\n        void search(QString query);\n\n    private:\n        TimezonesModelPrivate* d;\n};\n\nclass TimezonesModelDelegate : public QStyledItemDelegate {\n        Q_OBJECT\n\n    public:\n        explicit TimezonesModelDelegate(QObject* parent = nullptr);\n        ~TimezonesModelDelegate();\n\n        void paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const;\n};\n\n#endif // TIMEZONESMODEL_H\n"
  },
  {
    "path": "plugins/TimeDatePlugin/translations/ar_SA.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"ar_SA\" sourcelanguage=\"en_US\">\n<context>\n    <name>DateTimePane</name>\n    <message>\n        <location filename=\"../settings/datetimepane.ui\" line=\"35\"/>\n        <location filename=\"../settings/datetimepane.cpp\" line=\"72\"/>\n        <source>Date and Time</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/datetimepane.ui\" line=\"83\"/>\n        <source>ACTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/datetimepane.ui\" line=\"107\"/>\n        <source>Change Date and Time</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/datetimepane.ui\" line=\"114\"/>\n        <source>Change Timezone</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/datetimepane.ui\" line=\"142\"/>\n        <source>Synchronise clock with the Internet</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/datetimepane.ui\" line=\"161\"/>\n        <source>TIME SYNCHRONISATION</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>OnboardingTimeZone</name>\n    <message>\n        <location filename=\"../onboarding/onboardingtimezone.ui\" line=\"35\"/>\n        <location filename=\"../onboarding/onboardingtimezone.cpp\" line=\"55\"/>\n        <source>Time Zone</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtimezone.ui\" line=\"42\"/>\n        <source>Whereabouts are you located? We&apos;ll use this information to display the current time.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtimezone.ui\" line=\"71\"/>\n        <source>Search</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtimezone.ui\" line=\"125\"/>\n        <source>Use the Internet to synchronise the system clock (recommended)</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtimezone.ui\" line=\"177\"/>\n        <source>Next</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SetTimeDatePopover</name>\n    <message>\n        <location filename=\"../popovers/settimedatepopover.ui\" line=\"57\"/>\n        <source>Set Date and Time</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../popovers/settimedatepopover.ui\" line=\"64\"/>\n        <source>What&apos;s the current date and time?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../popovers/settimedatepopover.ui\" line=\"77\"/>\n        <source>Apply Date and Time</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SetTimezonePopover</name>\n    <message>\n        <location filename=\"../popovers/settimezonepopover.ui\" line=\"57\"/>\n        <source>Set Timezone</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../popovers/settimezonepopover.ui\" line=\"64\"/>\n        <source>Where are you now?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../popovers/settimezonepopover.ui\" line=\"90\"/>\n        <source>Search</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/TimeDatePlugin/translations/au_AU.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"au_AU\" sourcelanguage=\"en_US\">\n<context>\n    <name>DateTimePane</name>\n    <message>\n        <location filename=\"../settings/datetimepane.ui\" line=\"35\"/>\n        <location filename=\"../settings/datetimepane.cpp\" line=\"72\"/>\n        <source>Date and Time</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/datetimepane.ui\" line=\"83\"/>\n        <source>ACTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/datetimepane.ui\" line=\"107\"/>\n        <source>Change Date and Time</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/datetimepane.ui\" line=\"114\"/>\n        <source>Change Timezone</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/datetimepane.ui\" line=\"142\"/>\n        <source>Synchronise clock with the Internet</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/datetimepane.ui\" line=\"161\"/>\n        <source>TIME SYNCHRONISATION</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>OnboardingTimeZone</name>\n    <message>\n        <location filename=\"../onboarding/onboardingtimezone.ui\" line=\"35\"/>\n        <location filename=\"../onboarding/onboardingtimezone.cpp\" line=\"55\"/>\n        <source>Time Zone</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtimezone.ui\" line=\"42\"/>\n        <source>Whereabouts are you located? We&apos;ll use this information to display the current time.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtimezone.ui\" line=\"71\"/>\n        <source>Search</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtimezone.ui\" line=\"125\"/>\n        <source>Use the Internet to synchronise the system clock (recommended)</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtimezone.ui\" line=\"177\"/>\n        <source>Next</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SetTimeDatePopover</name>\n    <message>\n        <location filename=\"../popovers/settimedatepopover.ui\" line=\"57\"/>\n        <source>Set Date and Time</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../popovers/settimedatepopover.ui\" line=\"64\"/>\n        <source>What&apos;s the current date and time?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../popovers/settimedatepopover.ui\" line=\"77\"/>\n        <source>Apply Date and Time</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SetTimezonePopover</name>\n    <message>\n        <location filename=\"../popovers/settimezonepopover.ui\" line=\"57\"/>\n        <source>Set Timezone</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../popovers/settimezonepopover.ui\" line=\"64\"/>\n        <source>Where are you now?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../popovers/settimezonepopover.ui\" line=\"90\"/>\n        <source>Search</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/TimeDatePlugin/translations/cy.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"cy\" sourcelanguage=\"en_US\">\n<context>\n    <name>DateTimePane</name>\n    <message>\n        <location filename=\"../settings/datetimepane.ui\" line=\"35\"/>\n        <location filename=\"../settings/datetimepane.cpp\" line=\"72\"/>\n        <source>Date and Time</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/datetimepane.ui\" line=\"83\"/>\n        <source>ACTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/datetimepane.ui\" line=\"107\"/>\n        <source>Change Date and Time</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/datetimepane.ui\" line=\"114\"/>\n        <source>Change Timezone</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/datetimepane.ui\" line=\"142\"/>\n        <source>Synchronise clock with the Internet</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/datetimepane.ui\" line=\"161\"/>\n        <source>TIME SYNCHRONISATION</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>OnboardingTimeZone</name>\n    <message>\n        <location filename=\"../onboarding/onboardingtimezone.ui\" line=\"35\"/>\n        <location filename=\"../onboarding/onboardingtimezone.cpp\" line=\"55\"/>\n        <source>Time Zone</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtimezone.ui\" line=\"42\"/>\n        <source>Whereabouts are you located? We&apos;ll use this information to display the current time.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtimezone.ui\" line=\"71\"/>\n        <source>Search</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtimezone.ui\" line=\"125\"/>\n        <source>Use the Internet to synchronise the system clock (recommended)</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtimezone.ui\" line=\"177\"/>\n        <source>Next</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SetTimeDatePopover</name>\n    <message>\n        <location filename=\"../popovers/settimedatepopover.ui\" line=\"57\"/>\n        <source>Set Date and Time</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../popovers/settimedatepopover.ui\" line=\"64\"/>\n        <source>What&apos;s the current date and time?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../popovers/settimedatepopover.ui\" line=\"77\"/>\n        <source>Apply Date and Time</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SetTimezonePopover</name>\n    <message>\n        <location filename=\"../popovers/settimezonepopover.ui\" line=\"57\"/>\n        <source>Set Timezone</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../popovers/settimezonepopover.ui\" line=\"64\"/>\n        <source>Where are you now?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../popovers/settimezonepopover.ui\" line=\"90\"/>\n        <source>Search</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/TimeDatePlugin/translations/da.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"da\" sourcelanguage=\"en_US\">\n<context>\n    <name>DateTimePane</name>\n    <message>\n        <location filename=\"../settings/datetimepane.ui\" line=\"35\"/>\n        <location filename=\"../settings/datetimepane.cpp\" line=\"72\"/>\n        <source>Date and Time</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/datetimepane.ui\" line=\"83\"/>\n        <source>ACTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/datetimepane.ui\" line=\"107\"/>\n        <source>Change Date and Time</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/datetimepane.ui\" line=\"114\"/>\n        <source>Change Timezone</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/datetimepane.ui\" line=\"142\"/>\n        <source>Synchronise clock with the Internet</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/datetimepane.ui\" line=\"161\"/>\n        <source>TIME SYNCHRONISATION</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>OnboardingTimeZone</name>\n    <message>\n        <location filename=\"../onboarding/onboardingtimezone.ui\" line=\"35\"/>\n        <location filename=\"../onboarding/onboardingtimezone.cpp\" line=\"55\"/>\n        <source>Time Zone</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtimezone.ui\" line=\"42\"/>\n        <source>Whereabouts are you located? We&apos;ll use this information to display the current time.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtimezone.ui\" line=\"71\"/>\n        <source>Search</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtimezone.ui\" line=\"125\"/>\n        <source>Use the Internet to synchronise the system clock (recommended)</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtimezone.ui\" line=\"177\"/>\n        <source>Next</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SetTimeDatePopover</name>\n    <message>\n        <location filename=\"../popovers/settimedatepopover.ui\" line=\"57\"/>\n        <source>Set Date and Time</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../popovers/settimedatepopover.ui\" line=\"64\"/>\n        <source>What&apos;s the current date and time?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../popovers/settimedatepopover.ui\" line=\"77\"/>\n        <source>Apply Date and Time</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SetTimezonePopover</name>\n    <message>\n        <location filename=\"../popovers/settimezonepopover.ui\" line=\"57\"/>\n        <source>Set Timezone</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../popovers/settimezonepopover.ui\" line=\"64\"/>\n        <source>Where are you now?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../popovers/settimezonepopover.ui\" line=\"90\"/>\n        <source>Search</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/TimeDatePlugin/translations/de.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"de\" sourcelanguage=\"en_US\">\n<context>\n    <name>DateTimePane</name>\n    <message>\n        <location filename=\"../settings/datetimepane.ui\" line=\"35\"/>\n        <location filename=\"../settings/datetimepane.cpp\" line=\"72\"/>\n        <source>Date and Time</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/datetimepane.ui\" line=\"83\"/>\n        <source>ACTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/datetimepane.ui\" line=\"107\"/>\n        <source>Change Date and Time</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/datetimepane.ui\" line=\"114\"/>\n        <source>Change Timezone</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/datetimepane.ui\" line=\"142\"/>\n        <source>Synchronise clock with the Internet</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/datetimepane.ui\" line=\"161\"/>\n        <source>TIME SYNCHRONISATION</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>OnboardingTimeZone</name>\n    <message>\n        <location filename=\"../onboarding/onboardingtimezone.ui\" line=\"35\"/>\n        <location filename=\"../onboarding/onboardingtimezone.cpp\" line=\"55\"/>\n        <source>Time Zone</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtimezone.ui\" line=\"42\"/>\n        <source>Whereabouts are you located? We&apos;ll use this information to display the current time.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtimezone.ui\" line=\"71\"/>\n        <source>Search</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtimezone.ui\" line=\"125\"/>\n        <source>Use the Internet to synchronise the system clock (recommended)</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtimezone.ui\" line=\"177\"/>\n        <source>Next</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SetTimeDatePopover</name>\n    <message>\n        <location filename=\"../popovers/settimedatepopover.ui\" line=\"57\"/>\n        <source>Set Date and Time</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../popovers/settimedatepopover.ui\" line=\"64\"/>\n        <source>What&apos;s the current date and time?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../popovers/settimedatepopover.ui\" line=\"77\"/>\n        <source>Apply Date and Time</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SetTimezonePopover</name>\n    <message>\n        <location filename=\"../popovers/settimezonepopover.ui\" line=\"57\"/>\n        <source>Set Timezone</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../popovers/settimezonepopover.ui\" line=\"64\"/>\n        <source>Where are you now?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../popovers/settimezonepopover.ui\" line=\"90\"/>\n        <source>Search</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/TimeDatePlugin/translations/en_US.qm",
    "content": "<d\u0018!\u001c`"
  },
  {
    "path": "plugins/TimeDatePlugin/translations/en_US.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" sourcelanguage=\"en_US\">\n<context>\n    <name>DateTimePane</name>\n    <message>\n        <location filename=\"../settings/datetimepane.ui\" line=\"35\"/>\n        <location filename=\"../settings/datetimepane.cpp\" line=\"72\"/>\n        <source>Date and Time</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/datetimepane.ui\" line=\"83\"/>\n        <source>ACTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/datetimepane.ui\" line=\"107\"/>\n        <source>Change Date and Time</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/datetimepane.ui\" line=\"114\"/>\n        <source>Change Timezone</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/datetimepane.ui\" line=\"142\"/>\n        <source>Synchronise clock with the Internet</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/datetimepane.ui\" line=\"161\"/>\n        <source>TIME SYNCHRONISATION</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>OnboardingTimeZone</name>\n    <message>\n        <location filename=\"../onboarding/onboardingtimezone.ui\" line=\"35\"/>\n        <location filename=\"../onboarding/onboardingtimezone.cpp\" line=\"55\"/>\n        <source>Time Zone</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtimezone.ui\" line=\"42\"/>\n        <source>Whereabouts are you located? We&apos;ll use this information to display the current time.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtimezone.ui\" line=\"71\"/>\n        <source>Search</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtimezone.ui\" line=\"125\"/>\n        <source>Use the Internet to synchronise the system clock (recommended)</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtimezone.ui\" line=\"177\"/>\n        <source>Next</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SetTimeDatePopover</name>\n    <message>\n        <location filename=\"../popovers/settimedatepopover.ui\" line=\"57\"/>\n        <source>Set Date and Time</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../popovers/settimedatepopover.ui\" line=\"64\"/>\n        <source>What&apos;s the current date and time?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../popovers/settimedatepopover.ui\" line=\"77\"/>\n        <source>Apply Date and Time</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SetTimezonePopover</name>\n    <message>\n        <location filename=\"../popovers/settimezonepopover.ui\" line=\"57\"/>\n        <source>Set Timezone</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../popovers/settimezonepopover.ui\" line=\"64\"/>\n        <source>Where are you now?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../popovers/settimezonepopover.ui\" line=\"90\"/>\n        <source>Search</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/TimeDatePlugin/translations/es.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"es\" sourcelanguage=\"en_US\">\n<context>\n    <name>DateTimePane</name>\n    <message>\n        <location filename=\"../settings/datetimepane.ui\" line=\"35\"/>\n        <location filename=\"../settings/datetimepane.cpp\" line=\"72\"/>\n        <source>Date and Time</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/datetimepane.ui\" line=\"83\"/>\n        <source>ACTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/datetimepane.ui\" line=\"107\"/>\n        <source>Change Date and Time</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/datetimepane.ui\" line=\"114\"/>\n        <source>Change Timezone</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/datetimepane.ui\" line=\"142\"/>\n        <source>Synchronise clock with the Internet</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/datetimepane.ui\" line=\"161\"/>\n        <source>TIME SYNCHRONISATION</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>OnboardingTimeZone</name>\n    <message>\n        <location filename=\"../onboarding/onboardingtimezone.ui\" line=\"35\"/>\n        <location filename=\"../onboarding/onboardingtimezone.cpp\" line=\"55\"/>\n        <source>Time Zone</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtimezone.ui\" line=\"42\"/>\n        <source>Whereabouts are you located? We&apos;ll use this information to display the current time.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtimezone.ui\" line=\"71\"/>\n        <source>Search</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtimezone.ui\" line=\"125\"/>\n        <source>Use the Internet to synchronise the system clock (recommended)</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtimezone.ui\" line=\"177\"/>\n        <source>Next</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SetTimeDatePopover</name>\n    <message>\n        <location filename=\"../popovers/settimedatepopover.ui\" line=\"57\"/>\n        <source>Set Date and Time</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../popovers/settimedatepopover.ui\" line=\"64\"/>\n        <source>What&apos;s the current date and time?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../popovers/settimedatepopover.ui\" line=\"77\"/>\n        <source>Apply Date and Time</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SetTimezonePopover</name>\n    <message>\n        <location filename=\"../popovers/settimezonepopover.ui\" line=\"57\"/>\n        <source>Set Timezone</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../popovers/settimezonepopover.ui\" line=\"64\"/>\n        <source>Where are you now?</source>\n        <translation>Dónde estás ahora?</translation>\n    </message>\n    <message>\n        <location filename=\"../popovers/settimezonepopover.ui\" line=\"90\"/>\n        <source>Search</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/TimeDatePlugin/translations/es_VE.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"es_VE\" sourcelanguage=\"en_US\">\n<context>\n    <name>DateTimePane</name>\n    <message>\n        <location filename=\"../settings/datetimepane.ui\" line=\"35\"/>\n        <location filename=\"../settings/datetimepane.cpp\" line=\"72\"/>\n        <source>Date and Time</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/datetimepane.ui\" line=\"83\"/>\n        <source>ACTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/datetimepane.ui\" line=\"107\"/>\n        <source>Change Date and Time</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/datetimepane.ui\" line=\"114\"/>\n        <source>Change Timezone</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/datetimepane.ui\" line=\"142\"/>\n        <source>Synchronise clock with the Internet</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/datetimepane.ui\" line=\"161\"/>\n        <source>TIME SYNCHRONISATION</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>OnboardingTimeZone</name>\n    <message>\n        <location filename=\"../onboarding/onboardingtimezone.ui\" line=\"35\"/>\n        <location filename=\"../onboarding/onboardingtimezone.cpp\" line=\"55\"/>\n        <source>Time Zone</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtimezone.ui\" line=\"42\"/>\n        <source>Whereabouts are you located? We&apos;ll use this information to display the current time.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtimezone.ui\" line=\"71\"/>\n        <source>Search</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtimezone.ui\" line=\"125\"/>\n        <source>Use the Internet to synchronise the system clock (recommended)</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtimezone.ui\" line=\"177\"/>\n        <source>Next</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SetTimeDatePopover</name>\n    <message>\n        <location filename=\"../popovers/settimedatepopover.ui\" line=\"57\"/>\n        <source>Set Date and Time</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../popovers/settimedatepopover.ui\" line=\"64\"/>\n        <source>What&apos;s the current date and time?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../popovers/settimedatepopover.ui\" line=\"77\"/>\n        <source>Apply Date and Time</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SetTimezonePopover</name>\n    <message>\n        <location filename=\"../popovers/settimezonepopover.ui\" line=\"57\"/>\n        <source>Set Timezone</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../popovers/settimezonepopover.ui\" line=\"64\"/>\n        <source>Where are you now?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../popovers/settimezonepopover.ui\" line=\"90\"/>\n        <source>Search</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/TimeDatePlugin/translations/id.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"id\" sourcelanguage=\"en_US\">\n<context>\n    <name>DateTimePane</name>\n    <message>\n        <location filename=\"../settings/datetimepane.ui\" line=\"35\"/>\n        <location filename=\"../settings/datetimepane.cpp\" line=\"72\"/>\n        <source>Date and Time</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/datetimepane.ui\" line=\"83\"/>\n        <source>ACTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/datetimepane.ui\" line=\"107\"/>\n        <source>Change Date and Time</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/datetimepane.ui\" line=\"114\"/>\n        <source>Change Timezone</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/datetimepane.ui\" line=\"142\"/>\n        <source>Synchronise clock with the Internet</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/datetimepane.ui\" line=\"161\"/>\n        <source>TIME SYNCHRONISATION</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>OnboardingTimeZone</name>\n    <message>\n        <location filename=\"../onboarding/onboardingtimezone.ui\" line=\"35\"/>\n        <location filename=\"../onboarding/onboardingtimezone.cpp\" line=\"55\"/>\n        <source>Time Zone</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtimezone.ui\" line=\"42\"/>\n        <source>Whereabouts are you located? We&apos;ll use this information to display the current time.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtimezone.ui\" line=\"71\"/>\n        <source>Search</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtimezone.ui\" line=\"125\"/>\n        <source>Use the Internet to synchronise the system clock (recommended)</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtimezone.ui\" line=\"177\"/>\n        <source>Next</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SetTimeDatePopover</name>\n    <message>\n        <location filename=\"../popovers/settimedatepopover.ui\" line=\"57\"/>\n        <source>Set Date and Time</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../popovers/settimedatepopover.ui\" line=\"64\"/>\n        <source>What&apos;s the current date and time?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../popovers/settimedatepopover.ui\" line=\"77\"/>\n        <source>Apply Date and Time</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SetTimezonePopover</name>\n    <message>\n        <location filename=\"../popovers/settimezonepopover.ui\" line=\"57\"/>\n        <source>Set Timezone</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../popovers/settimezonepopover.ui\" line=\"64\"/>\n        <source>Where are you now?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../popovers/settimezonepopover.ui\" line=\"90\"/>\n        <source>Search</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/TimeDatePlugin/translations/nl.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"nl\" sourcelanguage=\"en_US\">\n<context>\n    <name>DateTimePane</name>\n    <message>\n        <location filename=\"../settings/datetimepane.ui\" line=\"35\"/>\n        <location filename=\"../settings/datetimepane.cpp\" line=\"72\"/>\n        <source>Date and Time</source>\n        <translation>Datum en Tijd</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/datetimepane.ui\" line=\"83\"/>\n        <source>ACTIONS</source>\n        <translation>ACTIES</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/datetimepane.ui\" line=\"107\"/>\n        <source>Change Date and Time</source>\n        <translation>Datum en Tijd Wijzigen</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/datetimepane.ui\" line=\"114\"/>\n        <source>Change Timezone</source>\n        <translation>Tijdzone Wijzigen</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/datetimepane.ui\" line=\"142\"/>\n        <source>Synchronise clock with the Internet</source>\n        <translation>Klok met het Internet synchroniseren</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/datetimepane.ui\" line=\"161\"/>\n        <source>TIME SYNCHRONISATION</source>\n        <translation>TIJDSYNCHRONISATIE</translation>\n    </message>\n</context>\n<context>\n    <name>OnboardingTimeZone</name>\n    <message>\n        <location filename=\"../onboarding/onboardingtimezone.ui\" line=\"35\"/>\n        <location filename=\"../onboarding/onboardingtimezone.cpp\" line=\"55\"/>\n        <source>Time Zone</source>\n        <translation>Tijdzone</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtimezone.ui\" line=\"42\"/>\n        <source>Whereabouts are you located? We&apos;ll use this information to display the current time.</source>\n        <translation>Wat is je verblijfplaats? Deze informatie gebruiken we om de huidige tijd weer te geven.</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtimezone.ui\" line=\"71\"/>\n        <source>Search</source>\n        <translation>Zoeken</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtimezone.ui\" line=\"125\"/>\n        <source>Use the Internet to synchronise the system clock (recommended)</source>\n        <translation>Het Internet gebruiken om de systeemklok te synchroniseren (aangeraden)</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtimezone.ui\" line=\"177\"/>\n        <source>Next</source>\n        <translation>Volgende</translation>\n    </message>\n</context>\n<context>\n    <name>SetTimeDatePopover</name>\n    <message>\n        <location filename=\"../popovers/settimedatepopover.ui\" line=\"57\"/>\n        <source>Set Date and Time</source>\n        <translation>Datum en Tijd Instellen</translation>\n    </message>\n    <message>\n        <location filename=\"../popovers/settimedatepopover.ui\" line=\"64\"/>\n        <source>What&apos;s the current date and time?</source>\n        <translation>Wat is de huidige datum en tijd?</translation>\n    </message>\n    <message>\n        <location filename=\"../popovers/settimedatepopover.ui\" line=\"77\"/>\n        <source>Apply Date and Time</source>\n        <translation>Datum en Tijd Toepassen</translation>\n    </message>\n</context>\n<context>\n    <name>SetTimezonePopover</name>\n    <message>\n        <location filename=\"../popovers/settimezonepopover.ui\" line=\"57\"/>\n        <source>Set Timezone</source>\n        <translation>Tijdzone Instellen</translation>\n    </message>\n    <message>\n        <location filename=\"../popovers/settimezonepopover.ui\" line=\"64\"/>\n        <source>Where are you now?</source>\n        <translation>Waar ben je nu?</translation>\n    </message>\n    <message>\n        <location filename=\"../popovers/settimezonepopover.ui\" line=\"90\"/>\n        <source>Search</source>\n        <translation>Zoeken</translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/TimeDatePlugin/translations/pt_BR.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"pt_BR\" sourcelanguage=\"en_US\">\n<context>\n    <name>DateTimePane</name>\n    <message>\n        <location filename=\"../settings/datetimepane.ui\" line=\"35\"/>\n        <location filename=\"../settings/datetimepane.cpp\" line=\"72\"/>\n        <source>Date and Time</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/datetimepane.ui\" line=\"83\"/>\n        <source>ACTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/datetimepane.ui\" line=\"107\"/>\n        <source>Change Date and Time</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/datetimepane.ui\" line=\"114\"/>\n        <source>Change Timezone</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/datetimepane.ui\" line=\"142\"/>\n        <source>Synchronise clock with the Internet</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/datetimepane.ui\" line=\"161\"/>\n        <source>TIME SYNCHRONISATION</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>OnboardingTimeZone</name>\n    <message>\n        <location filename=\"../onboarding/onboardingtimezone.ui\" line=\"35\"/>\n        <location filename=\"../onboarding/onboardingtimezone.cpp\" line=\"55\"/>\n        <source>Time Zone</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtimezone.ui\" line=\"42\"/>\n        <source>Whereabouts are you located? We&apos;ll use this information to display the current time.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtimezone.ui\" line=\"71\"/>\n        <source>Search</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtimezone.ui\" line=\"125\"/>\n        <source>Use the Internet to synchronise the system clock (recommended)</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtimezone.ui\" line=\"177\"/>\n        <source>Next</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SetTimeDatePopover</name>\n    <message>\n        <location filename=\"../popovers/settimedatepopover.ui\" line=\"57\"/>\n        <source>Set Date and Time</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../popovers/settimedatepopover.ui\" line=\"64\"/>\n        <source>What&apos;s the current date and time?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../popovers/settimedatepopover.ui\" line=\"77\"/>\n        <source>Apply Date and Time</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SetTimezonePopover</name>\n    <message>\n        <location filename=\"../popovers/settimezonepopover.ui\" line=\"57\"/>\n        <source>Set Timezone</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../popovers/settimezonepopover.ui\" line=\"64\"/>\n        <source>Where are you now?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../popovers/settimezonepopover.ui\" line=\"90\"/>\n        <source>Search</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/TimeDatePlugin/translations/ro.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"ro\" sourcelanguage=\"en_US\">\n<context>\n    <name>DateTimePane</name>\n    <message>\n        <location filename=\"../settings/datetimepane.ui\" line=\"35\"/>\n        <location filename=\"../settings/datetimepane.cpp\" line=\"72\"/>\n        <source>Date and Time</source>\n        <translation>Ora și data</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/datetimepane.ui\" line=\"83\"/>\n        <source>ACTIONS</source>\n        <translation>ACȚIUNI</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/datetimepane.ui\" line=\"107\"/>\n        <source>Change Date and Time</source>\n        <translation>Schimbați ora și data</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/datetimepane.ui\" line=\"114\"/>\n        <source>Change Timezone</source>\n        <translation>Schimbați fusul orar</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/datetimepane.ui\" line=\"142\"/>\n        <source>Synchronise clock with the Internet</source>\n        <translation>Sincronizați ceasul cu internetul</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/datetimepane.ui\" line=\"161\"/>\n        <source>TIME SYNCHRONISATION</source>\n        <translation>SINCRONIZAREA CEASULUI</translation>\n    </message>\n</context>\n<context>\n    <name>OnboardingTimeZone</name>\n    <message>\n        <location filename=\"../onboarding/onboardingtimezone.ui\" line=\"35\"/>\n        <location filename=\"../onboarding/onboardingtimezone.cpp\" line=\"55\"/>\n        <source>Time Zone</source>\n        <translation>Fus orar</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtimezone.ui\" line=\"42\"/>\n        <source>Whereabouts are you located? We&apos;ll use this information to display the current time.</source>\n        <translation>Unde vă aflați? Vom folosi informația aceasta pentru a vă arăta ora curentă.</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtimezone.ui\" line=\"71\"/>\n        <source>Search</source>\n        <translation>Căutare</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtimezone.ui\" line=\"125\"/>\n        <source>Use the Internet to synchronise the system clock (recommended)</source>\n        <translation>Folosiți internetul pentru a sincroniza ceasul sistemului (recomandat)</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtimezone.ui\" line=\"177\"/>\n        <source>Next</source>\n        <translation>Următorul</translation>\n    </message>\n</context>\n<context>\n    <name>SetTimeDatePopover</name>\n    <message>\n        <location filename=\"../popovers/settimedatepopover.ui\" line=\"57\"/>\n        <source>Set Date and Time</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../popovers/settimedatepopover.ui\" line=\"64\"/>\n        <source>What&apos;s the current date and time?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../popovers/settimedatepopover.ui\" line=\"77\"/>\n        <source>Apply Date and Time</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SetTimezonePopover</name>\n    <message>\n        <location filename=\"../popovers/settimezonepopover.ui\" line=\"57\"/>\n        <source>Set Timezone</source>\n        <translation>Configurați fusul orar</translation>\n    </message>\n    <message>\n        <location filename=\"../popovers/settimezonepopover.ui\" line=\"64\"/>\n        <source>Where are you now?</source>\n        <translation>Unde vă situați acum?</translation>\n    </message>\n    <message>\n        <location filename=\"../popovers/settimezonepopover.ui\" line=\"90\"/>\n        <source>Search</source>\n        <translation>Căutare</translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/TimeDatePlugin/translations/sv.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"sv\" sourcelanguage=\"en_US\">\n<context>\n    <name>DateTimePane</name>\n    <message>\n        <location filename=\"../settings/datetimepane.ui\" line=\"35\"/>\n        <location filename=\"../settings/datetimepane.cpp\" line=\"72\"/>\n        <source>Date and Time</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/datetimepane.ui\" line=\"83\"/>\n        <source>ACTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/datetimepane.ui\" line=\"107\"/>\n        <source>Change Date and Time</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/datetimepane.ui\" line=\"114\"/>\n        <source>Change Timezone</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/datetimepane.ui\" line=\"142\"/>\n        <source>Synchronise clock with the Internet</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/datetimepane.ui\" line=\"161\"/>\n        <source>TIME SYNCHRONISATION</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>OnboardingTimeZone</name>\n    <message>\n        <location filename=\"../onboarding/onboardingtimezone.ui\" line=\"35\"/>\n        <location filename=\"../onboarding/onboardingtimezone.cpp\" line=\"55\"/>\n        <source>Time Zone</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtimezone.ui\" line=\"42\"/>\n        <source>Whereabouts are you located? We&apos;ll use this information to display the current time.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtimezone.ui\" line=\"71\"/>\n        <source>Search</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtimezone.ui\" line=\"125\"/>\n        <source>Use the Internet to synchronise the system clock (recommended)</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtimezone.ui\" line=\"177\"/>\n        <source>Next</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SetTimeDatePopover</name>\n    <message>\n        <location filename=\"../popovers/settimedatepopover.ui\" line=\"57\"/>\n        <source>Set Date and Time</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../popovers/settimedatepopover.ui\" line=\"64\"/>\n        <source>What&apos;s the current date and time?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../popovers/settimedatepopover.ui\" line=\"77\"/>\n        <source>Apply Date and Time</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SetTimezonePopover</name>\n    <message>\n        <location filename=\"../popovers/settimezonepopover.ui\" line=\"57\"/>\n        <source>Set Timezone</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../popovers/settimezonepopover.ui\" line=\"64\"/>\n        <source>Where are you now?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../popovers/settimezonepopover.ui\" line=\"90\"/>\n        <source>Search</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/TimeDatePlugin/translations/tr.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"tr\" sourcelanguage=\"en_US\">\n<context>\n    <name>DateTimePane</name>\n    <message>\n        <location filename=\"../settings/datetimepane.ui\" line=\"35\"/>\n        <location filename=\"../settings/datetimepane.cpp\" line=\"72\"/>\n        <source>Date and Time</source>\n        <translation>Tarih ve Saat</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/datetimepane.ui\" line=\"83\"/>\n        <source>ACTIONS</source>\n        <translation>HAREKETLER</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/datetimepane.ui\" line=\"107\"/>\n        <source>Change Date and Time</source>\n        <translation>Tarih ve saati değiştir</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/datetimepane.ui\" line=\"114\"/>\n        <source>Change Timezone</source>\n        <translation>Saat Dilimini Değiştir</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/datetimepane.ui\" line=\"142\"/>\n        <source>Synchronise clock with the Internet</source>\n        <translation>Saati İnternet ile senkronize etmeye başlayın</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/datetimepane.ui\" line=\"161\"/>\n        <source>TIME SYNCHRONISATION</source>\n        <translation>ZAMAN SENKRONİZASYONU</translation>\n    </message>\n</context>\n<context>\n    <name>OnboardingTimeZone</name>\n    <message>\n        <location filename=\"../onboarding/onboardingtimezone.ui\" line=\"35\"/>\n        <location filename=\"../onboarding/onboardingtimezone.cpp\" line=\"55\"/>\n        <source>Time Zone</source>\n        <translation>Saat Dilimi</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtimezone.ui\" line=\"42\"/>\n        <source>Whereabouts are you located? We&apos;ll use this information to display the current time.</source>\n        <translation>Nerede bulunuyorsun? Bu bilgileri geçerli saati görüntülemek için kullanacağız.</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtimezone.ui\" line=\"71\"/>\n        <source>Search</source>\n        <translation>Ara</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtimezone.ui\" line=\"125\"/>\n        <source>Use the Internet to synchronise the system clock (recommended)</source>\n        <translation>Sistem saatini senkronize etmek için interneti kullanın (her zaman önerilir)</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtimezone.ui\" line=\"177\"/>\n        <source>Next</source>\n        <translation>Sonraki</translation>\n    </message>\n</context>\n<context>\n    <name>SetTimeDatePopover</name>\n    <message>\n        <location filename=\"../popovers/settimedatepopover.ui\" line=\"57\"/>\n        <source>Set Date and Time</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../popovers/settimedatepopover.ui\" line=\"64\"/>\n        <source>What&apos;s the current date and time?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../popovers/settimedatepopover.ui\" line=\"77\"/>\n        <source>Apply Date and Time</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SetTimezonePopover</name>\n    <message>\n        <location filename=\"../popovers/settimezonepopover.ui\" line=\"57\"/>\n        <source>Set Timezone</source>\n        <translation>Saat Dilimini Ayarla</translation>\n    </message>\n    <message>\n        <location filename=\"../popovers/settimezonepopover.ui\" line=\"64\"/>\n        <source>Where are you now?</source>\n        <translation>Şu anda neredesin?</translation>\n    </message>\n    <message>\n        <location filename=\"../popovers/settimezonepopover.ui\" line=\"90\"/>\n        <source>Search</source>\n        <translation>Ara</translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/TimeDatePlugin/translations/vi.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"vi\" sourcelanguage=\"en_US\">\n<context>\n    <name>DateTimePane</name>\n    <message>\n        <location filename=\"../settings/datetimepane.ui\" line=\"35\"/>\n        <location filename=\"../settings/datetimepane.cpp\" line=\"72\"/>\n        <source>Date and Time</source>\n        <translation>Ngày và giờ</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/datetimepane.ui\" line=\"83\"/>\n        <source>ACTIONS</source>\n        <translation>HOẠT ĐỘNG</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/datetimepane.ui\" line=\"107\"/>\n        <source>Change Date and Time</source>\n        <translation>Thay đổi ngày và giờ</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/datetimepane.ui\" line=\"114\"/>\n        <source>Change Timezone</source>\n        <translation>Thay đổi múi giờ</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/datetimepane.ui\" line=\"142\"/>\n        <source>Synchronise clock with the Internet</source>\n        <translation>Đồng bộ đồng hồ với Internet</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/datetimepane.ui\" line=\"161\"/>\n        <source>TIME SYNCHRONISATION</source>\n        <translation>ĐỒNG BỘ ĐỒNG HỒ</translation>\n    </message>\n</context>\n<context>\n    <name>OnboardingTimeZone</name>\n    <message>\n        <location filename=\"../onboarding/onboardingtimezone.ui\" line=\"35\"/>\n        <location filename=\"../onboarding/onboardingtimezone.cpp\" line=\"55\"/>\n        <source>Time Zone</source>\n        <translation>Múi giờ</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtimezone.ui\" line=\"42\"/>\n        <source>Whereabouts are you located? We&apos;ll use this information to display the current time.</source>\n        <translation>Bạn đang ở đâu? Chúng tôi sẽ sử dụng thông tin này để đặt ngày và giờ.</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtimezone.ui\" line=\"71\"/>\n        <source>Search</source>\n        <translation>Tìm kiếm</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtimezone.ui\" line=\"125\"/>\n        <source>Use the Internet to synchronise the system clock (recommended)</source>\n        <translation>Sử dụng Internet để đồng bộ ngày và giờ (Đề xuất)</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtimezone.ui\" line=\"177\"/>\n        <source>Next</source>\n        <translation>Tiếp</translation>\n    </message>\n</context>\n<context>\n    <name>SetTimeDatePopover</name>\n    <message>\n        <location filename=\"../popovers/settimedatepopover.ui\" line=\"57\"/>\n        <source>Set Date and Time</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../popovers/settimedatepopover.ui\" line=\"64\"/>\n        <source>What&apos;s the current date and time?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../popovers/settimedatepopover.ui\" line=\"77\"/>\n        <source>Apply Date and Time</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SetTimezonePopover</name>\n    <message>\n        <location filename=\"../popovers/settimezonepopover.ui\" line=\"57\"/>\n        <source>Set Timezone</source>\n        <translation>Đặt Múi Giờ</translation>\n    </message>\n    <message>\n        <location filename=\"../popovers/settimezonepopover.ui\" line=\"64\"/>\n        <source>Where are you now?</source>\n        <translation>Bạn đang ở đâu bây giờ?</translation>\n    </message>\n    <message>\n        <location filename=\"../popovers/settimezonepopover.ui\" line=\"90\"/>\n        <source>Search</source>\n        <translation>Tìm kiếm</translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/TimeDatePlugin/translations/vi_VN.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"vi_VN\">\n<context>\n    <name>DateTimePane</name>\n    <message>\n        <location filename=\"../settings/datetimepane.ui\" line=\"35\"/>\n        <location filename=\"../settings/datetimepane.cpp\" line=\"72\"/>\n        <source>Date and Time</source>\n        <translation>Ngày và giờ</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/datetimepane.ui\" line=\"83\"/>\n        <source>ACTIONS</source>\n        <translation>HOẠT ĐỘNG</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/datetimepane.ui\" line=\"107\"/>\n        <source>Change Date and Time</source>\n        <translation>Đổi ngày và giờ</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/datetimepane.ui\" line=\"114\"/>\n        <source>Change Timezone</source>\n        <translation>Đổi múi giờ</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/datetimepane.ui\" line=\"142\"/>\n        <source>Synchronise clock with the Internet</source>\n        <translation>Đồng bộ đồng hồ với Internet</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/datetimepane.ui\" line=\"161\"/>\n        <source>TIME SYNCHRONISATION</source>\n        <translation>ĐỒNG BỘ ĐỒNG HỒ</translation>\n    </message>\n</context>\n<context>\n    <name>OnboardingTimeZone</name>\n    <message>\n        <location filename=\"../onboarding/onboardingtimezone.ui\" line=\"35\"/>\n        <location filename=\"../onboarding/onboardingtimezone.cpp\" line=\"55\"/>\n        <source>Time Zone</source>\n        <translation>Múi giờ</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtimezone.ui\" line=\"42\"/>\n        <source>Whereabouts are you located? We&apos;ll use this information to display the current time.</source>\n        <translation>Bạn đang ở đâu? Chúng tôi sẽ sử dụng thông tin này để hiển thị thời gian hiện tại.</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtimezone.ui\" line=\"71\"/>\n        <source>Search</source>\n        <translation>Tìm kiếm</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtimezone.ui\" line=\"125\"/>\n        <source>Use the Internet to synchronise the system clock (recommended)</source>\n        <translation>Sử dụng Internet để đồng bộ đồng hồ hệ thống (khuyến khích)</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingtimezone.ui\" line=\"177\"/>\n        <source>Next</source>\n        <translation>Tiếp</translation>\n    </message>\n</context>\n<context>\n    <name>SetTimeDatePopover</name>\n    <message>\n        <location filename=\"../popovers/settimedatepopover.ui\" line=\"57\"/>\n        <source>Set Date and Time</source>\n        <translation>Đặt ngày và giờ</translation>\n    </message>\n    <message>\n        <location filename=\"../popovers/settimedatepopover.ui\" line=\"64\"/>\n        <source>What&apos;s the current date and time?</source>\n        <translation>Ngày và giờ hiện tại là gì?</translation>\n    </message>\n    <message>\n        <location filename=\"../popovers/settimedatepopover.ui\" line=\"77\"/>\n        <source>Apply Date and Time</source>\n        <translation>Áp dụng ngày và giờ</translation>\n    </message>\n</context>\n<context>\n    <name>SetTimezonePopover</name>\n    <message>\n        <location filename=\"../popovers/settimezonepopover.ui\" line=\"57\"/>\n        <source>Set Timezone</source>\n        <translation>Đặt múi giờ</translation>\n    </message>\n    <message>\n        <location filename=\"../popovers/settimezonepopover.ui\" line=\"64\"/>\n        <source>Where are you now?</source>\n        <translation>Bạn đang ở đâu bây giờ?</translation>\n    </message>\n    <message>\n        <location filename=\"../popovers/settimezonepopover.ui\" line=\"90\"/>\n        <source>Search</source>\n        <translation>Tìm kiếm</translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/UsersPlugin/CMakeLists.txt",
    "content": "cmake_minimum_required(VERSION 3.24.0)\n\nfind_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets DBus)\nfind_package(libcontemporary)\nfind_package(PolkitQt${QT_VERSION_MAJOR}-1)\n\nset(SOURCES\n    onboarding/onboardingusers.cpp\n    plugin.cpp\n    settings/adduserdialog.cpp\n    settings/changepassworddialog.cpp\n    settings/changerealnamedialog.cpp\n    settings/deleteuserdialog.cpp\n    settings/lockuserdialog.cpp\n    settings/user.cpp\n    settings/usersmodel.cpp\n    settings/userspane.cpp\n    settings/usertypedialog.cpp\n\n    onboarding/onboardingusers.ui\n    settings/adduserdialog.ui\n    settings/changepassworddialog.ui\n    settings/changerealnamedialog.ui\n    settings/deleteuserdialog.ui\n    settings/lockuserdialog.ui\n    settings/userspane.ui\n    settings/usertypedialog.ui\n)\n\nset(HEADERS\n    onboarding/onboardingusers.h\n    plugin.h\n    settings/adduserdialog.h\n    settings/changepassworddialog.h\n    settings/changerealnamedialog.h\n    settings/deleteuserdialog.h\n    settings/lockuserdialog.h\n    settings/user.h\n    settings/usersmodel.h\n    settings/userspane.h\n    settings/usertypedialog.h\n)\n\nset(PLUGIN_NAME users)\nadd_plugin_td(${PLUGIN_NAME})\ntarget_sources(plugin-${PLUGIN_NAME} PRIVATE ${SOURCES} ${HEADERS})\ncntp_defaults_file(${PLUGIN_NAME}\n    DEFAULTS_FILE thedesk-users.conf)\n\nIF(${PolkitQt${QT_VERSION_MAJOR}-1_FOUND})\n    target_link_libraries(plugin-${PLUGIN_NAME} PolkitQt${QT_VERSION_MAJOR}-1::Core)\n    target_compile_definitions(plugin-${PLUGIN_NAME} PRIVATE HAVE_POLKITQT)\nENDIF()\n\ntarget_link_libraries(plugin-${PLUGIN_NAME} Qt::Widgets Qt::DBus libcontemporary libthedesk crypt)\n"
  },
  {
    "path": "plugins/UsersPlugin/Plugin.json",
    "content": "{\n    \"name\": \"User Management\",\n    \"icon\": \"preferences-desktop-user\",\n    \"uuid\": \"86b9b918-b77a-496d-aa1d-10819a3732a8\",\n    \"vi\": {\n        \"name\": \"Quản lý người dùng\"\n    }\n}\n"
  },
  {
    "path": "plugins/UsersPlugin/UsersPlugin.pro",
    "content": "QT += gui widgets dbus\n\nPKGCONFIG += polkit-qt5-1\nCONFIG += link_pkgconfig\n\nLIBS += -lcrypt\n\nTEMPLATE = lib\nCONFIG += plugin\n\nCONFIG += c++11\n\n# Include the-libs build tools\ninclude(/usr/share/the-libs/pri/gentranslations.pri)\n\n# The following define makes your compiler emit warnings if you use\n# any Qt feature that has been marked deprecated (the exact warnings\n# depend on your compiler). Please consult the documentation of the\n# deprecated API in order to know how to port your code away from it.\nDEFINES += QT_DEPRECATED_WARNINGS\n\n# You can also make your code fail to compile if it uses deprecated APIs.\n# In order to do so, uncomment the following line.\n# You can also select to disable deprecated APIs only up to a certain version of Qt.\n#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0\n\nSOURCES += \\\n    onboarding/onboardingusers.cpp \\\n    plugin.cpp \\\n    settings/adduserdialog.cpp \\\n    settings/changepassworddialog.cpp \\\n    settings/changerealnamedialog.cpp \\\n    settings/deleteuserdialog.cpp \\\n    settings/lockuserdialog.cpp \\\n    settings/user.cpp \\\n    settings/usersmodel.cpp \\\n    settings/userspane.cpp \\\n    settings/usertypedialog.cpp\n\nHEADERS += \\\n    onboarding/onboardingusers.h \\\n    plugin.h \\\n    settings/adduserdialog.h \\\n    settings/changepassworddialog.h \\\n    settings/changerealnamedialog.h \\\n    settings/deleteuserdialog.h \\\n    settings/lockuserdialog.h \\\n    settings/user.h \\\n    settings/usersmodel.h \\\n    settings/userspane.h \\\n    settings/usertypedialog.h\n\nDISTFILES += \\\n    Plugin.json \\\n    defaults.conf\n\nunix {\n    translations.files = translations/*.qm\n    translations.path = /usr/share/thedesk/UsersPlugin/translations\n\n    defaults.files = defaults.conf\n    defaults.path = /etc/theSuite/theDesk/UsersPlugin/\n\n    INSTALLS += translations defaults\n}\n\ninclude(../plugins.pri)\n\nFORMS += \\\n    onboarding/onboardingusers.ui \\\n    settings/adduserdialog.ui \\\n    settings/changepassworddialog.ui \\\n    settings/changerealnamedialog.ui \\\n    settings/deleteuserdialog.ui \\\n    settings/lockuserdialog.ui \\\n    settings/userspane.ui \\\n    settings/usertypedialog.ui\n"
  },
  {
    "path": "plugins/UsersPlugin/onboarding/onboardingusers.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"onboardingusers.h\"\n#include \"ui_onboardingusers.h\"\n\n#include \"settings/user.h\"\n#include \"settings/usersmodel.h\"\n#include <QCoroDBus>\n#include <QDBusConnection>\n#include <QDBusMessage>\n#include <QDBusPendingCallWatcher>\n#include <onboardingmanager.h>\n#include <statemanager.h>\n#include <terrorflash.h>\n#include <ttoast.h>\n\nstruct OnboardingUsersPrivate {\n        bool userAdded = false;\n        QString firstUser;\n};\n\nOnboardingUsers::OnboardingUsers(QWidget* parent) :\n    OnboardingPage(parent),\n    ui(new Ui::OnboardingUsers) {\n    ui->setupUi(this);\n\n    d = new OnboardingUsersPrivate();\n\n    ui->addUserTitleLabel->setBackButtonShown(true);\n    ui->titleLabel->setBackButtonShown(true);\n    ui->stackedWidget->setCurrentAnimation(tStackedWidget::Fade);\n    ui->addUserDescriptionLabel->setText(tr(\"It's time to get to know you. Apps will use this information to personalise your experience, and you'll use the password to log in.\"));\n    ui->accountTypeWidget->setVisible(false);\n    ui->userList->setModel(new UsersModel(this));\n}\n\nOnboardingUsers::~OnboardingUsers() {\n    delete d;\n    delete ui;\n}\n\nvoid OnboardingUsers::on_addUserTitleLabel_backButtonClicked() {\n    if (d->userAdded) {\n        ui->stackedWidget->setCurrentWidget(ui->allUsersPage);\n    } else {\n        StateManager::onboardingManager()->previousStep();\n    }\n}\n\nQCoro::Task<> OnboardingUsers::on_addUserCompleteButton_clicked() {\n    if (ui->fullNameBox->text().isEmpty()) {\n        tErrorFlash::flashError(ui->fullNameBox);\n        co_return;\n    }\n\n    if (ui->usernameBox->text().isEmpty()) {\n        tErrorFlash::flashError(ui->usernameBox);\n        co_return;\n    }\n\n    if (ui->passwordBox->text().isEmpty()) {\n        tErrorFlash::flashError(ui->passwordBox);\n        co_return;\n    }\n\n    if (ui->passwordBox->text() != ui->confirmPasswordBox->text()) {\n        tErrorFlash::flashError(ui->confirmPasswordBox);\n        co_return;\n    }\n    ui->stackedWidget->setCurrentWidget(ui->spinnerPage);\n\n    // Add the user account\n    int accountType = d->userAdded ? (ui->administratorButton->isChecked() ? 1 : 0) : 1;\n    QDBusMessage createMessage = QDBusMessage::createMethodCall(\"org.freedesktop.Accounts\", \"/org/freedesktop/Accounts\", \"org.freedesktop.Accounts\", \"CreateUser\");\n    createMessage.setArguments({ui->usernameBox->text(),\n        ui->fullNameBox->text(),\n        accountType});\n\n    auto message = co_await QDBusConnection::systemBus().asyncCall(createMessage);\n\n    QString error;\n    if (message.type() == QDBusMessage::ErrorMessage) {\n        error = message.errorMessage();\n    } else {\n        UserPtr u(new User(message.arguments().constFirst().value<QDBusObjectPath>()));\n\n        // Set the user's password\n        try {\n            co_await u->setPassword(ui->passwordBox->text(), ui->passwordHintBox->text());\n        } catch (UserManipulationException& ex) {\n            error = ex.reason();\n        }\n    }\n\n    if (error.isEmpty()) {\n        if (d->userAdded) {\n            ui->userListDescriptionLabel->setText(tr(\"You've added these users to your system\"));\n        } else {\n            ui->userListDescriptionLabel->setText(tr(\"Thanks, %1. If other people will be using this device, you can add them now, or you can add them later.\").arg(ui->fullNameBox->text()));\n        }\n\n        ui->stackedWidget->setCurrentWidget(ui->allUsersPage);\n        d->userAdded = true;\n        ui->accountTypeWidget->setVisible(true);\n\n        ui->addUserDescriptionLabel->setText(tr(\"Enter the details of the next user to be added\"));\n    } else {\n        // Bail out\n        QTimer::singleShot(1000, [=] {\n            ui->stackedWidget->setCurrentWidget(ui->addUserPage);\n\n            tToast* toast = new tToast();\n            toast->setTitle(tr(\"Couldn't create user\"));\n            toast->setText(error);\n            connect(toast, &tToast::dismissed, toast, &tToast::deleteLater);\n            toast->show(this);\n        });\n    }\n}\n\nvoid OnboardingUsers::on_addUserButton_clicked() {\n    resetAddUserForm();\n    ui->stackedWidget->setCurrentWidget(ui->addUserPage);\n}\n\nvoid OnboardingUsers::on_nextButton_clicked() {\n    StateManager::onboardingManager()->nextStep();\n}\n\nvoid OnboardingUsers::on_titleLabel_backButtonClicked() {\n    StateManager::onboardingManager()->previousStep();\n}\n\nQString OnboardingUsers::name() {\n    return QStringLiteral(\"OnboardingUsers\");\n}\n\nQString OnboardingUsers::displayName() {\n    return tr(\"Users\");\n}\n\nvoid OnboardingUsers::on_fullNameBox_textChanged(const QString& arg1) {\n    ui->usernameBox->setText(arg1.split(\" \").first().toLower());\n}\n\nvoid OnboardingUsers::resetAddUserForm() {\n    ui->fullNameBox->clear();\n    ui->usernameBox->clear();\n    ui->passwordBox->clear();\n    ui->confirmPasswordBox->clear();\n    ui->passwordHintBox->clear();\n    ui->administratorButton->setChecked(false);\n    ui->standardUserButton->setChecked(true);\n}\n\nvoid OnboardingUsers::on_administratorButton_clicked() {\n    ui->administratorButton->setChecked(true);\n    ui->standardUserButton->setChecked(false);\n}\n\nvoid OnboardingUsers::on_standardUserButton_clicked() {\n    ui->administratorButton->setChecked(false);\n    ui->standardUserButton->setChecked(true);\n}\n"
  },
  {
    "path": "plugins/UsersPlugin/onboarding/onboardingusers.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef ONBOARDINGUSERS_H\n#define ONBOARDINGUSERS_H\n\n#include <QCoroTask>\n#include <onboardingpage.h>\n\nnamespace Ui {\n    class OnboardingUsers;\n}\n\nstruct OnboardingUsersPrivate;\nclass OnboardingUsers : public OnboardingPage {\n        Q_OBJECT\n\n    public:\n        explicit OnboardingUsers(QWidget* parent = nullptr);\n        ~OnboardingUsers();\n\n    private slots:\n        void on_addUserTitleLabel_backButtonClicked();\n\n        QCoro::Task<> on_addUserCompleteButton_clicked();\n\n        void on_addUserButton_clicked();\n\n        void on_nextButton_clicked();\n\n        void on_titleLabel_backButtonClicked();\n\n        void on_fullNameBox_textChanged(const QString& arg1);\n\n        void on_administratorButton_clicked();\n\n        void on_standardUserButton_clicked();\n\n    private:\n        Ui::OnboardingUsers* ui;\n        OnboardingUsersPrivate* d;\n\n        void resetAddUserForm();\n\n        // OnboardingPage interface\n    public:\n        QString name();\n        QString displayName();\n};\n\n#endif // ONBOARDINGUSERS_H\n"
  },
  {
    "path": "plugins/UsersPlugin/onboarding/onboardingusers.ui",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ui version=\"4.0\">\n <class>OnboardingUsers</class>\n <widget class=\"QWidget\" name=\"OnboardingUsers\">\n  <property name=\"geometry\">\n   <rect>\n    <x>0</x>\n    <y>0</y>\n    <width>621</width>\n    <height>526</height>\n   </rect>\n  </property>\n  <property name=\"windowTitle\">\n   <string notr=\"true\">Form</string>\n  </property>\n  <layout class=\"QVBoxLayout\" name=\"verticalLayout\">\n   <property name=\"spacing\">\n    <number>0</number>\n   </property>\n   <property name=\"leftMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"topMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"rightMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"bottomMargin\">\n    <number>0</number>\n   </property>\n   <item>\n    <widget class=\"tStackedWidget\" name=\"stackedWidget\">\n     <property name=\"currentIndex\">\n      <number>0</number>\n     </property>\n     <widget class=\"QWidget\" name=\"addUserPage\">\n      <layout class=\"QVBoxLayout\" name=\"verticalLayout_2\">\n       <property name=\"spacing\">\n        <number>0</number>\n       </property>\n       <property name=\"leftMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"topMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"rightMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"bottomMargin\">\n        <number>0</number>\n       </property>\n       <item>\n        <widget class=\"tTitleLabel\" name=\"addUserTitleLabel\">\n         <property name=\"text\">\n          <string>Users</string>\n         </property>\n        </widget>\n       </item>\n       <item>\n        <widget class=\"QScrollArea\" name=\"scrollArea\">\n         <property name=\"frameShape\">\n          <enum>QFrame::NoFrame</enum>\n         </property>\n         <property name=\"widgetResizable\">\n          <bool>true</bool>\n         </property>\n         <widget class=\"QWidget\" name=\"scrollAreaWidgetContents\">\n          <property name=\"geometry\">\n           <rect>\n            <x>0</x>\n            <y>-46</y>\n            <width>607</width>\n            <height>511</height>\n           </rect>\n          </property>\n          <layout class=\"QVBoxLayout\" name=\"verticalLayout_10\">\n           <property name=\"spacing\">\n            <number>0</number>\n           </property>\n           <property name=\"leftMargin\">\n            <number>0</number>\n           </property>\n           <property name=\"topMargin\">\n            <number>0</number>\n           </property>\n           <property name=\"rightMargin\">\n            <number>0</number>\n           </property>\n           <property name=\"bottomMargin\">\n            <number>0</number>\n           </property>\n           <item>\n            <layout class=\"QGridLayout\" name=\"gridLayout_7\">\n             <property name=\"leftMargin\">\n              <number>9</number>\n             </property>\n             <property name=\"topMargin\">\n              <number>9</number>\n             </property>\n             <property name=\"rightMargin\">\n              <number>9</number>\n             </property>\n             <property name=\"bottomMargin\">\n              <number>9</number>\n             </property>\n             <property name=\"spacing\">\n              <number>6</number>\n             </property>\n             <item row=\"3\" column=\"1\">\n              <widget class=\"QLineEdit\" name=\"usernameBox\"/>\n             </item>\n             <item row=\"2\" column=\"1\">\n              <widget class=\"QLineEdit\" name=\"fullNameBox\"/>\n             </item>\n             <item row=\"1\" column=\"0\" colspan=\"2\">\n              <widget class=\"QLabel\" name=\"addUserDescriptionLabel\">\n               <property name=\"text\">\n                <string notr=\"true\">Add a user to this system</string>\n               </property>\n               <property name=\"wordWrap\">\n                <bool>true</bool>\n               </property>\n              </widget>\n             </item>\n             <item row=\"2\" column=\"0\">\n              <widget class=\"QLabel\" name=\"label_27\">\n               <property name=\"text\">\n                <string>Full Name</string>\n               </property>\n              </widget>\n             </item>\n             <item row=\"3\" column=\"0\">\n              <widget class=\"QLabel\" name=\"label_28\">\n               <property name=\"text\">\n                <string>Username</string>\n               </property>\n              </widget>\n             </item>\n             <item row=\"0\" column=\"0\" colspan=\"2\">\n              <widget class=\"QLabel\" name=\"label_29\">\n               <property name=\"font\">\n                <font>\n                 <weight>75</weight>\n                 <bold>true</bold>\n                </font>\n               </property>\n               <property name=\"text\">\n                <string>ABOUT YOU</string>\n               </property>\n              </widget>\n             </item>\n             <item row=\"4\" column=\"1\">\n              <widget class=\"QLabel\" name=\"label_30\">\n               <property name=\"text\">\n                <string>The username is generated based on the given full name. We recommend not changing it.</string>\n               </property>\n               <property name=\"wordWrap\">\n                <bool>true</bool>\n               </property>\n              </widget>\n             </item>\n            </layout>\n           </item>\n           <item>\n            <widget class=\"Line\" name=\"line_4\">\n             <property name=\"maximumSize\">\n              <size>\n               <width>16777215</width>\n               <height>1</height>\n              </size>\n             </property>\n             <property name=\"orientation\">\n              <enum>Qt::Horizontal</enum>\n             </property>\n            </widget>\n           </item>\n           <item>\n            <layout class=\"QGridLayout\" name=\"gridLayout_5\">\n             <property name=\"leftMargin\">\n              <number>9</number>\n             </property>\n             <property name=\"topMargin\">\n              <number>9</number>\n             </property>\n             <property name=\"rightMargin\">\n              <number>9</number>\n             </property>\n             <property name=\"bottomMargin\">\n              <number>9</number>\n             </property>\n             <property name=\"spacing\">\n              <number>6</number>\n             </property>\n             <item row=\"2\" column=\"0\">\n              <widget class=\"QLabel\" name=\"label_16\">\n               <property name=\"text\">\n                <string>Password</string>\n               </property>\n              </widget>\n             </item>\n             <item row=\"4\" column=\"0\">\n              <widget class=\"QLabel\" name=\"label_17\">\n               <property name=\"text\">\n                <string>Password Hint</string>\n               </property>\n              </widget>\n             </item>\n             <item row=\"0\" column=\"0\" colspan=\"2\">\n              <widget class=\"QLabel\" name=\"label_18\">\n               <property name=\"font\">\n                <font>\n                 <weight>75</weight>\n                 <bold>true</bold>\n                </font>\n               </property>\n               <property name=\"text\">\n                <string>YOUR PASSWORD</string>\n               </property>\n              </widget>\n             </item>\n             <item row=\"4\" column=\"1\">\n              <widget class=\"QLineEdit\" name=\"passwordHintBox\"/>\n             </item>\n             <item row=\"3\" column=\"1\">\n              <widget class=\"QLineEdit\" name=\"confirmPasswordBox\">\n               <property name=\"echoMode\">\n                <enum>QLineEdit::Password</enum>\n               </property>\n              </widget>\n             </item>\n             <item row=\"3\" column=\"0\">\n              <widget class=\"QLabel\" name=\"label_19\">\n               <property name=\"text\">\n                <string>Confirm Password</string>\n               </property>\n              </widget>\n             </item>\n             <item row=\"1\" column=\"0\" colspan=\"2\">\n              <widget class=\"QLabel\" name=\"label_20\">\n               <property name=\"text\">\n                <string>Protect this account with a password to prevent anyone else logging into it.</string>\n               </property>\n              </widget>\n             </item>\n             <item row=\"2\" column=\"1\">\n              <widget class=\"QLineEdit\" name=\"passwordBox\">\n               <property name=\"echoMode\">\n                <enum>QLineEdit::Password</enum>\n               </property>\n              </widget>\n             </item>\n             <item row=\"5\" column=\"1\">\n              <widget class=\"QLabel\" name=\"label_21\">\n               <property name=\"text\">\n                <string>If you forget your password, this will appear to help you remember.</string>\n               </property>\n              </widget>\n             </item>\n            </layout>\n           </item>\n           <item>\n            <widget class=\"QWidget\" name=\"accountTypeWidget\" native=\"true\">\n             <layout class=\"QVBoxLayout\" name=\"verticalLayout_7\">\n              <property name=\"spacing\">\n               <number>0</number>\n              </property>\n              <property name=\"leftMargin\">\n               <number>0</number>\n              </property>\n              <property name=\"topMargin\">\n               <number>0</number>\n              </property>\n              <property name=\"rightMargin\">\n               <number>0</number>\n              </property>\n              <property name=\"bottomMargin\">\n               <number>0</number>\n              </property>\n              <item>\n               <widget class=\"Line\" name=\"line_6\">\n                <property name=\"maximumSize\">\n                 <size>\n                  <width>16777215</width>\n                  <height>1</height>\n                 </size>\n                </property>\n                <property name=\"orientation\">\n                 <enum>Qt::Horizontal</enum>\n                </property>\n               </widget>\n              </item>\n              <item>\n               <layout class=\"QGridLayout\" name=\"gridLayout_6\">\n                <property name=\"leftMargin\">\n                 <number>9</number>\n                </property>\n                <property name=\"topMargin\">\n                 <number>9</number>\n                </property>\n                <property name=\"rightMargin\">\n                 <number>9</number>\n                </property>\n                <property name=\"bottomMargin\">\n                 <number>9</number>\n                </property>\n                <property name=\"spacing\">\n                 <number>6</number>\n                </property>\n                <item row=\"1\" column=\"0\">\n                 <widget class=\"QFrame\" name=\"administratorFrame_2\">\n                  <property name=\"frameShape\">\n                   <enum>QFrame::StyledPanel</enum>\n                  </property>\n                  <property name=\"frameShadow\">\n                   <enum>QFrame::Raised</enum>\n                  </property>\n                  <layout class=\"QVBoxLayout\" name=\"verticalLayout_8\">\n                   <item>\n                    <widget class=\"QLabel\" name=\"label_22\">\n                     <property name=\"font\">\n                      <font>\n                       <weight>75</weight>\n                       <bold>true</bold>\n                      </font>\n                     </property>\n                     <property name=\"text\">\n                      <string>ADMINISTRATOR</string>\n                     </property>\n                    </widget>\n                   </item>\n                   <item>\n                    <widget class=\"QLabel\" name=\"label_23\">\n                     <property name=\"text\">\n                      <string>An administrator has full control over this device. They'll be able to configure systemwide settings and install software.</string>\n                     </property>\n                     <property name=\"wordWrap\">\n                      <bool>true</bool>\n                     </property>\n                    </widget>\n                   </item>\n                   <item>\n                    <widget class=\"QPushButton\" name=\"administratorButton\">\n                     <property name=\"text\">\n                      <string>Administrator</string>\n                     </property>\n                     <property name=\"checkable\">\n                      <bool>true</bool>\n                     </property>\n                     <property name=\"autoExclusive\">\n                      <bool>true</bool>\n                     </property>\n                    </widget>\n                   </item>\n                  </layout>\n                 </widget>\n                </item>\n                <item row=\"1\" column=\"1\">\n                 <widget class=\"QFrame\" name=\"standardUserFrame_2\">\n                  <property name=\"frameShape\">\n                   <enum>QFrame::StyledPanel</enum>\n                  </property>\n                  <property name=\"frameShadow\">\n                   <enum>QFrame::Raised</enum>\n                  </property>\n                  <layout class=\"QVBoxLayout\" name=\"verticalLayout_9\">\n                   <item>\n                    <widget class=\"QLabel\" name=\"label_24\">\n                     <property name=\"font\">\n                      <font>\n                       <weight>75</weight>\n                       <bold>true</bold>\n                      </font>\n                     </property>\n                     <property name=\"text\">\n                      <string>STANDARD USER</string>\n                     </property>\n                    </widget>\n                   </item>\n                   <item>\n                    <widget class=\"QLabel\" name=\"label_25\">\n                     <property name=\"text\">\n                      <string>A standard user can't perform systemwide actions. They'll only be able to perform administrative actions that only affect their account.</string>\n                     </property>\n                     <property name=\"wordWrap\">\n                      <bool>true</bool>\n                     </property>\n                    </widget>\n                   </item>\n                   <item>\n                    <widget class=\"QPushButton\" name=\"standardUserButton\">\n                     <property name=\"text\">\n                      <string>Standard User</string>\n                     </property>\n                     <property name=\"checkable\">\n                      <bool>true</bool>\n                     </property>\n                     <property name=\"checked\">\n                      <bool>true</bool>\n                     </property>\n                     <property name=\"autoExclusive\">\n                      <bool>true</bool>\n                     </property>\n                    </widget>\n                   </item>\n                  </layout>\n                 </widget>\n                </item>\n                <item row=\"0\" column=\"0\" colspan=\"2\">\n                 <widget class=\"QLabel\" name=\"label_26\">\n                  <property name=\"font\">\n                   <font>\n                    <weight>75</weight>\n                    <bold>true</bold>\n                   </font>\n                  </property>\n                  <property name=\"text\">\n                   <string>USER TYPE</string>\n                  </property>\n                 </widget>\n                </item>\n               </layout>\n              </item>\n             </layout>\n            </widget>\n           </item>\n           <item>\n            <spacer name=\"verticalSpacer\">\n             <property name=\"orientation\">\n              <enum>Qt::Vertical</enum>\n             </property>\n             <property name=\"sizeHint\" stdset=\"0\">\n              <size>\n               <width>20</width>\n               <height>0</height>\n              </size>\n             </property>\n            </spacer>\n           </item>\n          </layout>\n         </widget>\n        </widget>\n       </item>\n       <item>\n        <widget class=\"Line\" name=\"line\">\n         <property name=\"maximumSize\">\n          <size>\n           <width>16777215</width>\n           <height>1</height>\n          </size>\n         </property>\n         <property name=\"orientation\">\n          <enum>Qt::Horizontal</enum>\n         </property>\n        </widget>\n       </item>\n       <item>\n        <layout class=\"QHBoxLayout\" name=\"horizontalLayout\">\n         <property name=\"spacing\">\n          <number>6</number>\n         </property>\n         <property name=\"leftMargin\">\n          <number>9</number>\n         </property>\n         <property name=\"topMargin\">\n          <number>9</number>\n         </property>\n         <property name=\"rightMargin\">\n          <number>9</number>\n         </property>\n         <property name=\"bottomMargin\">\n          <number>9</number>\n         </property>\n         <item>\n          <spacer name=\"horizontalSpacer\">\n           <property name=\"orientation\">\n            <enum>Qt::Horizontal</enum>\n           </property>\n           <property name=\"sizeHint\" stdset=\"0\">\n            <size>\n             <width>40</width>\n             <height>20</height>\n            </size>\n           </property>\n          </spacer>\n         </item>\n         <item>\n          <widget class=\"QPushButton\" name=\"addUserCompleteButton\">\n           <property name=\"text\">\n            <string>Next</string>\n           </property>\n           <property name=\"icon\">\n            <iconset theme=\"go-next\">\n             <normaloff>../../../thedesk/libthedesk/onboarding</normaloff>../../../thedesk/libthedesk/onboarding</iconset>\n           </property>\n          </widget>\n         </item>\n        </layout>\n       </item>\n      </layout>\n     </widget>\n     <widget class=\"QWidget\" name=\"spinnerPage\">\n      <layout class=\"QGridLayout\" name=\"gridLayout\">\n       <item row=\"0\" column=\"1\">\n        <spacer name=\"verticalSpacer_3\">\n         <property name=\"orientation\">\n          <enum>Qt::Vertical</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>20</width>\n           <height>201</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n       <item row=\"1\" column=\"0\">\n        <spacer name=\"horizontalSpacer_2\">\n         <property name=\"orientation\">\n          <enum>Qt::Horizontal</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>281</width>\n           <height>20</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n       <item row=\"1\" column=\"1\">\n        <widget class=\"tCircularSpinner\" name=\"widget\" native=\"true\"/>\n       </item>\n       <item row=\"1\" column=\"2\">\n        <spacer name=\"horizontalSpacer_3\">\n         <property name=\"orientation\">\n          <enum>Qt::Horizontal</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>281</width>\n           <height>20</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n       <item row=\"2\" column=\"1\">\n        <spacer name=\"verticalSpacer_2\">\n         <property name=\"orientation\">\n          <enum>Qt::Vertical</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>20</width>\n           <height>201</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n      </layout>\n     </widget>\n     <widget class=\"QWidget\" name=\"allUsersPage\">\n      <layout class=\"QVBoxLayout\" name=\"verticalLayout_3\">\n       <property name=\"spacing\">\n        <number>0</number>\n       </property>\n       <property name=\"leftMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"topMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"rightMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"bottomMargin\">\n        <number>0</number>\n       </property>\n       <item>\n        <widget class=\"tTitleLabel\" name=\"titleLabel\">\n         <property name=\"text\">\n          <string>Users</string>\n         </property>\n        </widget>\n       </item>\n       <item>\n        <widget class=\"QLabel\" name=\"userListDescriptionLabel\">\n         <property name=\"text\">\n          <string notr=\"true\">You've added these users to your system</string>\n         </property>\n         <property name=\"margin\">\n          <number>9</number>\n         </property>\n        </widget>\n       </item>\n       <item>\n        <widget class=\"Line\" name=\"line_3\">\n         <property name=\"maximumSize\">\n          <size>\n           <width>16777215</width>\n           <height>1</height>\n          </size>\n         </property>\n         <property name=\"orientation\">\n          <enum>Qt::Horizontal</enum>\n         </property>\n        </widget>\n       </item>\n       <item>\n        <widget class=\"QListView\" name=\"userList\">\n         <property name=\"frameShape\">\n          <enum>QFrame::NoFrame</enum>\n         </property>\n        </widget>\n       </item>\n       <item>\n        <widget class=\"Line\" name=\"line_2\">\n         <property name=\"maximumSize\">\n          <size>\n           <width>16777215</width>\n           <height>1</height>\n          </size>\n         </property>\n         <property name=\"orientation\">\n          <enum>Qt::Horizontal</enum>\n         </property>\n        </widget>\n       </item>\n       <item>\n        <layout class=\"QHBoxLayout\" name=\"horizontalLayout_2\">\n         <property name=\"spacing\">\n          <number>6</number>\n         </property>\n         <property name=\"leftMargin\">\n          <number>9</number>\n         </property>\n         <property name=\"topMargin\">\n          <number>9</number>\n         </property>\n         <property name=\"rightMargin\">\n          <number>9</number>\n         </property>\n         <property name=\"bottomMargin\">\n          <number>9</number>\n         </property>\n         <item>\n          <spacer name=\"horizontalSpacer_4\">\n           <property name=\"orientation\">\n            <enum>Qt::Horizontal</enum>\n           </property>\n           <property name=\"sizeHint\" stdset=\"0\">\n            <size>\n             <width>40</width>\n             <height>20</height>\n            </size>\n           </property>\n          </spacer>\n         </item>\n         <item>\n          <widget class=\"QPushButton\" name=\"addUserButton\">\n           <property name=\"text\">\n            <string>Add Another User</string>\n           </property>\n           <property name=\"icon\">\n            <iconset theme=\"list-add\">\n             <normaloff>.</normaloff>.</iconset>\n           </property>\n          </widget>\n         </item>\n         <item>\n          <widget class=\"QPushButton\" name=\"nextButton\">\n           <property name=\"text\">\n            <string>Next</string>\n           </property>\n           <property name=\"icon\">\n            <iconset theme=\"go-next\">\n             <normaloff>../../../thedesk/libthedesk/onboarding</normaloff>../../../thedesk/libthedesk/onboarding</iconset>\n           </property>\n          </widget>\n         </item>\n        </layout>\n       </item>\n      </layout>\n     </widget>\n    </widget>\n   </item>\n  </layout>\n </widget>\n <customwidgets>\n  <customwidget>\n   <class>tTitleLabel</class>\n   <extends>QLabel</extends>\n   <header location=\"global\">ttitlelabel.h</header>\n   <slots>\n    <signal>backButtonClicked()</signal>\n   </slots>\n  </customwidget>\n  <customwidget>\n   <class>tStackedWidget</class>\n   <extends>QStackedWidget</extends>\n   <header location=\"global\">tstackedwidget.h</header>\n   <container>1</container>\n   <slots>\n    <signal>switchingFrame(int)</signal>\n   </slots>\n  </customwidget>\n  <customwidget>\n   <class>tCircularSpinner</class>\n   <extends>QWidget</extends>\n   <header location=\"global\">tcircularspinner.h</header>\n   <container>1</container>\n  </customwidget>\n </customwidgets>\n <tabstops>\n  <tabstop>scrollArea</tabstop>\n  <tabstop>fullNameBox</tabstop>\n  <tabstop>usernameBox</tabstop>\n  <tabstop>passwordBox</tabstop>\n  <tabstop>confirmPasswordBox</tabstop>\n  <tabstop>passwordHintBox</tabstop>\n  <tabstop>administratorButton</tabstop>\n  <tabstop>standardUserButton</tabstop>\n  <tabstop>addUserCompleteButton</tabstop>\n  <tabstop>userList</tabstop>\n  <tabstop>addUserButton</tabstop>\n  <tabstop>nextButton</tabstop>\n </tabstops>\n <resources/>\n <connections/>\n</ui>\n"
  },
  {
    "path": "plugins/UsersPlugin/plugin.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"plugin.h\"\n\n#include \"tsettings.h\"\n#include <QApplication>\n#include <QDebug>\n#include <QDir>\n#include <localemanager.h>\n#include <onboardingmanager.h>\n#include <statemanager.h>\n#include <statuscentermanager.h>\n#include <tapplication.h>\n\n#include \"settings/userspane.h\"\n\n#include \"onboarding/onboardingusers.h\"\n\nstruct PluginPrivate {\n        UsersPane* userPane;\n};\n\nPlugin::Plugin() {\n    d = new PluginPrivate();\n}\n\nPlugin::~Plugin() {\n    delete d;\n}\n\nvoid Plugin::activate() {\n    tApplication::addPluginTranslator(CNTP_TARGET_NAME);\n\n    tSettings::registerDefaults(QDir::cleanPath(qApp->applicationDirPath() + \"/../plugins/UsersPlugin/thedesk-users.conf\"));\n    tSettings::registerDefaults(\"/usr/share/defaults/thedesk-users.conf\");\n\n    d->userPane = new UsersPane();\n    StateManager::statusCenterManager()->addPane(d->userPane, StatusCenterManager::SystemSettings);\n\n    QObject::connect(StateManager::onboardingManager(), &OnboardingManager::onboardingRequired, [=] {\n        StateManager::onboardingManager()->addOnboardingStep(new OnboardingUsers());\n    });\n}\n\nvoid Plugin::deactivate() {\n    StateManager::statusCenterManager()->removePane(d->userPane);\n    d->userPane->deleteLater();\n    tApplication::removePluginTranslator(CNTP_TARGET_NAME);\n}\n"
  },
  {
    "path": "plugins/UsersPlugin/plugin.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef PLUGIN_H\n#define PLUGIN_H\n\n#include \"plugins/plugininterface.h\"\n\nstruct PluginPrivate;\nclass Plugin : public QObject,\n               public PluginInterface {\n        Q_OBJECT\n        Q_PLUGIN_METADATA(IID PluginInterface_iid FILE \"Plugin.json\")\n        Q_INTERFACES(PluginInterface)\n\n    public:\n        Plugin();\n        ~Plugin();\n\n    private:\n        PluginPrivate* d;\n\n        // PluginInterface interface\n    public:\n        void activate();\n        void deactivate();\n};\n\n#endif // PLUGIN_H\n"
  },
  {
    "path": "plugins/UsersPlugin/settings/adduserdialog.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2019 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"adduserdialog.h\"\n#include \"ui_adduserdialog.h\"\n\n#include \"user.h\"\n#include <QCoroDBus>\n#include <QDBusConnection>\n#include <QDBusMessage>\n#include <QDBusPendingCallWatcher>\n#include <terrorflash.h>\n#include <ttoast.h>\n\nstruct AddUserDialogPrivate {\n        User::PasswordMode passwordMode;\n};\n\nAddUserDialog::AddUserDialog(QWidget* parent) :\n    QWidget(parent),\n    ui(new Ui::AddUserDialog) {\n    ui->setupUi(this);\n    d = new AddUserDialogPrivate();\n\n    ui->stackedWidget->setCurrentAnimation(tStackedWidget::SlideHorizontal);\n    ui->standardUserButton->click();\n}\n\nAddUserDialog::~AddUserDialog() {\n    delete d;\n    delete ui;\n}\n\nvoid AddUserDialog::on_backButton_clicked() {\n    emit done();\n}\n\nvoid AddUserDialog::on_backButton_2_clicked() {\n    ui->stackedWidget->setCurrentWidget(ui->detailsPage);\n}\n\nvoid AddUserDialog::on_nextButton_clicked() {\n    if (ui->fullNameLineEdit->text().isEmpty()) {\n        tErrorFlash::flashError(ui->fullNameLineEdit);\n        return;\n    }\n\n    if (ui->usernameLineEdit->text().isEmpty()) {\n        tErrorFlash::flashError(ui->fullNameLineEdit);\n        return;\n    }\n\n    ui->stackedWidget->setCurrentWidget(ui->securityPage);\n}\n\nvoid AddUserDialog::on_fullNameLineEdit_textChanged(const QString& arg1) {\n    ui->usernameLineEdit->setText(arg1.split(\" \").first().toLower());\n    ui->realNameConfirmLabel->setText(arg1);\n}\n\nvoid AddUserDialog::on_usernameLineEdit_textChanged(const QString& arg1) {\n    ui->usernameLineEdit->setText(arg1.toLower());\n    ui->userNameConfirmLabel->setText(arg1);\n}\n\nvoid AddUserDialog::on_backButton_3_clicked() {\n    ui->stackedWidget->setCurrentWidget(ui->securityPage);\n}\n\nvoid AddUserDialog::on_usePasswordButton_clicked() {\n    if (ui->passwordLineEdit->text().isEmpty()) {\n        tErrorFlash::flashError(ui->passwordLineEdit);\n        return;\n    }\n\n    if (ui->passwordLineEdit->text() != ui->confirmPasswordLineEdit->text()) {\n        tErrorFlash::flashError(ui->confirmPasswordLineEdit);\n        return;\n    }\n\n    d->passwordMode = User::SetPassword;\n    ui->passwordConfirmLabel->setText(tr(\"Set Password\"));\n    ui->stackedWidget->setCurrentWidget(ui->confirmPage);\n}\n\nvoid AddUserDialog::on_askForPasswordButton_clicked() {\n    d->passwordMode = User::SetAtLogin;\n    ui->passwordConfirmLabel->setText(tr(\"Ask when logging in\"));\n    ui->stackedWidget->setCurrentWidget(ui->confirmPage);\n}\n\nvoid AddUserDialog::on_noPasswordButton_clicked() {\n    d->passwordMode = User::NoPassword;\n    ui->passwordConfirmLabel->setText(tr(\"Not Set\"));\n    ui->stackedWidget->setCurrentWidget(ui->confirmPage);\n}\n\nQCoro::Task<> AddUserDialog::on_performAddUserButton_clicked() {\n    ui->stackedWidget->setCurrentAnimation(tStackedWidget::Fade);\n    ui->stackedWidget->setCurrentWidget(ui->processingPage);\n\n    // Add the user account\n    int accountType = ui->administratorButton->isChecked() ? 1 : 0;\n    QDBusMessage createMessage = QDBusMessage::createMethodCall(\"org.freedesktop.Accounts\", \"/org/freedesktop/Accounts\", \"org.freedesktop.Accounts\", \"CreateUser\");\n    createMessage.setArguments({ui->usernameLineEdit->text(),\n        ui->fullNameLineEdit->text(),\n        accountType});\n\n    auto message = co_await QDBusConnection::systemBus().asyncCall(createMessage);\n    QString error;\n\n    if (message.type() == QDBusMessage::ErrorMessage) {\n        error = message.errorMessage();\n    } else {\n        UserPtr u(new User(message.arguments().first().value<QDBusObjectPath>()));\n\n        // Set the user's password\n        try {\n            if (d->passwordMode == User::SetPassword) {\n                co_await u->setPassword(ui->passwordLineEdit->text(), ui->passwordHintLineEdit->text());\n            } else {\n                co_await u->setPasswordMode(d->passwordMode);\n            }\n        } catch (UserManipulationException& ex) {\n            error = ex.reason();\n        }\n    }\n\n    if (error.isEmpty()) {\n        emit done();\n    } else {\n        // Bail out\n        QTimer::singleShot(1000, [=] {\n            ui->stackedWidget->setCurrentWidget(ui->confirmPage);\n            ui->stackedWidget->setCurrentAnimation(tStackedWidget::SlideHorizontal);\n\n            tToast* toast = new tToast();\n            toast->setTitle(tr(\"Couldn't create user\"));\n            toast->setText(error);\n            connect(toast, &tToast::dismissed, toast, &tToast::deleteLater);\n            toast->show(this);\n        });\n    }\n}\n\nvoid AddUserDialog::on_administratorButton_clicked() {\n    ui->administratorButton->setChecked(true);\n    ui->standardUserButton->setChecked(false);\n    ui->userTypeConfirmLabel->setText(tr(\"Administrator\"));\n}\n\nvoid AddUserDialog::on_standardUserButton_clicked() {\n    ui->administratorButton->setChecked(false);\n    ui->standardUserButton->setChecked(true);\n    ui->userTypeConfirmLabel->setText(tr(\"Standard\"));\n}\n"
  },
  {
    "path": "plugins/UsersPlugin/settings/adduserdialog.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2019 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef ADDUSERDIALOG_H\n#define ADDUSERDIALOG_H\n\n#include <QCoroTask>\n#include <QWidget>\n\nnamespace Ui {\n    class AddUserDialog;\n}\n\nstruct AddUserDialogPrivate;\nclass AddUserDialog : public QWidget {\n        Q_OBJECT\n\n    public:\n        explicit AddUserDialog(QWidget* parent = nullptr);\n        ~AddUserDialog();\n\n    private slots:\n        void on_backButton_clicked();\n\n        void on_backButton_2_clicked();\n\n        void on_nextButton_clicked();\n\n        void on_fullNameLineEdit_textChanged(const QString& arg1);\n\n        void on_usernameLineEdit_textChanged(const QString& arg1);\n\n        void on_backButton_3_clicked();\n\n        void on_usePasswordButton_clicked();\n\n        void on_askForPasswordButton_clicked();\n\n        void on_noPasswordButton_clicked();\n\n        QCoro::Task<> on_performAddUserButton_clicked();\n\n        void on_administratorButton_clicked();\n\n        void on_standardUserButton_clicked();\n\n    signals:\n        void done();\n\n    private:\n        Ui::AddUserDialog* ui;\n        AddUserDialogPrivate* d;\n};\n\n#endif // ADDUSERDIALOG_H\n"
  },
  {
    "path": "plugins/UsersPlugin/settings/adduserdialog.ui",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ui version=\"4.0\">\n <class>AddUserDialog</class>\n <widget class=\"QWidget\" name=\"AddUserDialog\">\n  <property name=\"geometry\">\n   <rect>\n    <x>0</x>\n    <y>0</y>\n    <width>568</width>\n    <height>593</height>\n   </rect>\n  </property>\n  <property name=\"windowTitle\">\n   <string notr=\"true\">Form</string>\n  </property>\n  <layout class=\"QVBoxLayout\" name=\"verticalLayout\">\n   <property name=\"spacing\">\n    <number>0</number>\n   </property>\n   <property name=\"leftMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"topMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"rightMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"bottomMargin\">\n    <number>0</number>\n   </property>\n   <item>\n    <widget class=\"tStackedWidget\" name=\"stackedWidget\">\n     <property name=\"currentIndex\">\n      <number>0</number>\n     </property>\n     <widget class=\"QWidget\" name=\"detailsPage\">\n      <layout class=\"QVBoxLayout\" name=\"verticalLayout_2\">\n       <property name=\"spacing\">\n        <number>0</number>\n       </property>\n       <property name=\"leftMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"topMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"rightMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"bottomMargin\">\n        <number>0</number>\n       </property>\n       <item>\n        <layout class=\"QHBoxLayout\" name=\"horizontalLayout\">\n         <property name=\"spacing\">\n          <number>0</number>\n         </property>\n         <item>\n          <widget class=\"QPushButton\" name=\"backButton\">\n           <property name=\"sizePolicy\">\n            <sizepolicy hsizetype=\"Preferred\" vsizetype=\"Preferred\">\n             <horstretch>0</horstretch>\n             <verstretch>0</verstretch>\n            </sizepolicy>\n           </property>\n           <property name=\"text\">\n            <string/>\n           </property>\n           <property name=\"icon\">\n            <iconset theme=\"go-previous\">\n             <normaloff>../PulseaudioPane</normaloff>../PulseaudioPane</iconset>\n           </property>\n           <property name=\"flat\">\n            <bool>true</bool>\n           </property>\n          </widget>\n         </item>\n         <item>\n          <widget class=\"QLabel\" name=\"label\">\n           <property name=\"sizePolicy\">\n            <sizepolicy hsizetype=\"Expanding\" vsizetype=\"Preferred\">\n             <horstretch>0</horstretch>\n             <verstretch>0</verstretch>\n            </sizepolicy>\n           </property>\n           <property name=\"font\">\n            <font>\n             <pointsize>15</pointsize>\n            </font>\n           </property>\n           <property name=\"text\">\n            <string>Add User</string>\n           </property>\n           <property name=\"margin\">\n            <number>9</number>\n           </property>\n          </widget>\n         </item>\n         <item>\n          <widget class=\"QPushButton\" name=\"nextButton\">\n           <property name=\"sizePolicy\">\n            <sizepolicy hsizetype=\"Preferred\" vsizetype=\"Preferred\">\n             <horstretch>0</horstretch>\n             <verstretch>0</verstretch>\n            </sizepolicy>\n           </property>\n           <property name=\"text\">\n            <string/>\n           </property>\n           <property name=\"icon\">\n            <iconset theme=\"go-next\">\n             <normaloff>../PulseaudioPane</normaloff>../PulseaudioPane</iconset>\n           </property>\n           <property name=\"flat\">\n            <bool>true</bool>\n           </property>\n          </widget>\n         </item>\n        </layout>\n       </item>\n       <item>\n        <widget class=\"Line\" name=\"line\">\n         <property name=\"maximumSize\">\n          <size>\n           <width>16777215</width>\n           <height>1</height>\n          </size>\n         </property>\n         <property name=\"orientation\">\n          <enum>Qt::Horizontal</enum>\n         </property>\n        </widget>\n       </item>\n       <item>\n        <layout class=\"QGridLayout\" name=\"gridLayout\">\n         <property name=\"leftMargin\">\n          <number>9</number>\n         </property>\n         <property name=\"topMargin\">\n          <number>9</number>\n         </property>\n         <property name=\"rightMargin\">\n          <number>9</number>\n         </property>\n         <property name=\"bottomMargin\">\n          <number>9</number>\n         </property>\n         <property name=\"spacing\">\n          <number>6</number>\n         </property>\n         <item row=\"0\" column=\"0\" colspan=\"2\">\n          <widget class=\"QLabel\" name=\"label_2\">\n           <property name=\"font\">\n            <font>\n             <weight>75</weight>\n             <bold>true</bold>\n            </font>\n           </property>\n           <property name=\"text\">\n            <string>PERSONAL DETAILS</string>\n           </property>\n          </widget>\n         </item>\n         <item row=\"2\" column=\"0\">\n          <widget class=\"QLabel\" name=\"label_9\">\n           <property name=\"text\">\n            <string>Username</string>\n           </property>\n          </widget>\n         </item>\n         <item row=\"1\" column=\"0\">\n          <widget class=\"QLabel\" name=\"label_4\">\n           <property name=\"text\">\n            <string>Full Name</string>\n           </property>\n          </widget>\n         </item>\n         <item row=\"1\" column=\"1\">\n          <widget class=\"QLineEdit\" name=\"fullNameLineEdit\"/>\n         </item>\n         <item row=\"2\" column=\"1\">\n          <widget class=\"QLineEdit\" name=\"usernameLineEdit\"/>\n         </item>\n         <item row=\"3\" column=\"1\">\n          <widget class=\"QLabel\" name=\"label_10\">\n           <property name=\"text\">\n            <string>The username is generated based on the given full name. We recommend not changing it.</string>\n           </property>\n           <property name=\"wordWrap\">\n            <bool>true</bool>\n           </property>\n          </widget>\n         </item>\n        </layout>\n       </item>\n       <item>\n        <widget class=\"Line\" name=\"line_2\">\n         <property name=\"maximumSize\">\n          <size>\n           <width>16777215</width>\n           <height>1</height>\n          </size>\n         </property>\n         <property name=\"orientation\">\n          <enum>Qt::Horizontal</enum>\n         </property>\n        </widget>\n       </item>\n       <item>\n        <layout class=\"QGridLayout\" name=\"gridLayout_2\">\n         <property name=\"leftMargin\">\n          <number>9</number>\n         </property>\n         <property name=\"topMargin\">\n          <number>9</number>\n         </property>\n         <property name=\"rightMargin\">\n          <number>9</number>\n         </property>\n         <property name=\"bottomMargin\">\n          <number>9</number>\n         </property>\n         <property name=\"spacing\">\n          <number>6</number>\n         </property>\n         <item row=\"1\" column=\"0\">\n          <widget class=\"QFrame\" name=\"administratorFrame\">\n           <property name=\"frameShape\">\n            <enum>QFrame::StyledPanel</enum>\n           </property>\n           <property name=\"frameShadow\">\n            <enum>QFrame::Raised</enum>\n           </property>\n           <layout class=\"QVBoxLayout\" name=\"verticalLayout_3\">\n            <item>\n             <widget class=\"QLabel\" name=\"label_5\">\n              <property name=\"font\">\n               <font>\n                <weight>75</weight>\n                <bold>true</bold>\n               </font>\n              </property>\n              <property name=\"text\">\n               <string>ADMINISTRATOR</string>\n              </property>\n             </widget>\n            </item>\n            <item>\n             <widget class=\"QLabel\" name=\"label_7\">\n              <property name=\"text\">\n               <string>An administrator has full control over this device. They'll be able to configure systemwide settings and install software.</string>\n              </property>\n              <property name=\"wordWrap\">\n               <bool>true</bool>\n              </property>\n             </widget>\n            </item>\n            <item>\n             <widget class=\"QPushButton\" name=\"administratorButton\">\n              <property name=\"text\">\n               <string>Administrator</string>\n              </property>\n              <property name=\"checkable\">\n               <bool>true</bool>\n              </property>\n              <property name=\"autoExclusive\">\n               <bool>true</bool>\n              </property>\n             </widget>\n            </item>\n           </layout>\n          </widget>\n         </item>\n         <item row=\"1\" column=\"1\">\n          <widget class=\"QFrame\" name=\"standardUserFrame\">\n           <property name=\"frameShape\">\n            <enum>QFrame::StyledPanel</enum>\n           </property>\n           <property name=\"frameShadow\">\n            <enum>QFrame::Raised</enum>\n           </property>\n           <layout class=\"QVBoxLayout\" name=\"verticalLayout_4\">\n            <item>\n             <widget class=\"QLabel\" name=\"label_6\">\n              <property name=\"font\">\n               <font>\n                <weight>75</weight>\n                <bold>true</bold>\n               </font>\n              </property>\n              <property name=\"text\">\n               <string>STANDARD USER</string>\n              </property>\n             </widget>\n            </item>\n            <item>\n             <widget class=\"QLabel\" name=\"label_8\">\n              <property name=\"text\">\n               <string>A standard user can't perform systemwide actions. They'll only be able to perform administrative actions that only affect their account.</string>\n              </property>\n              <property name=\"wordWrap\">\n               <bool>true</bool>\n              </property>\n             </widget>\n            </item>\n            <item>\n             <widget class=\"QPushButton\" name=\"standardUserButton\">\n              <property name=\"text\">\n               <string>Standard User</string>\n              </property>\n              <property name=\"checkable\">\n               <bool>true</bool>\n              </property>\n              <property name=\"autoExclusive\">\n               <bool>true</bool>\n              </property>\n             </widget>\n            </item>\n           </layout>\n          </widget>\n         </item>\n         <item row=\"0\" column=\"0\" colspan=\"2\">\n          <widget class=\"QLabel\" name=\"label_3\">\n           <property name=\"font\">\n            <font>\n             <weight>75</weight>\n             <bold>true</bold>\n            </font>\n           </property>\n           <property name=\"text\">\n            <string>USER TYPE</string>\n           </property>\n          </widget>\n         </item>\n        </layout>\n       </item>\n       <item>\n        <spacer name=\"verticalSpacer\">\n         <property name=\"orientation\">\n          <enum>Qt::Vertical</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>20</width>\n           <height>262</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n      </layout>\n     </widget>\n     <widget class=\"QWidget\" name=\"securityPage\">\n      <layout class=\"QVBoxLayout\" name=\"verticalLayout_5\">\n       <property name=\"spacing\">\n        <number>0</number>\n       </property>\n       <property name=\"leftMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"topMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"rightMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"bottomMargin\">\n        <number>0</number>\n       </property>\n       <item>\n        <layout class=\"QHBoxLayout\" name=\"horizontalLayout_2\">\n         <property name=\"spacing\">\n          <number>0</number>\n         </property>\n         <item>\n          <widget class=\"QPushButton\" name=\"backButton_2\">\n           <property name=\"sizePolicy\">\n            <sizepolicy hsizetype=\"Preferred\" vsizetype=\"Preferred\">\n             <horstretch>0</horstretch>\n             <verstretch>0</verstretch>\n            </sizepolicy>\n           </property>\n           <property name=\"text\">\n            <string/>\n           </property>\n           <property name=\"icon\">\n            <iconset theme=\"go-previous\">\n             <normaloff>../PulseaudioPane</normaloff>../PulseaudioPane</iconset>\n           </property>\n           <property name=\"flat\">\n            <bool>true</bool>\n           </property>\n          </widget>\n         </item>\n         <item>\n          <widget class=\"QLabel\" name=\"label_11\">\n           <property name=\"sizePolicy\">\n            <sizepolicy hsizetype=\"Expanding\" vsizetype=\"Preferred\">\n             <horstretch>0</horstretch>\n             <verstretch>0</verstretch>\n            </sizepolicy>\n           </property>\n           <property name=\"font\">\n            <font>\n             <pointsize>15</pointsize>\n            </font>\n           </property>\n           <property name=\"text\">\n            <string>Account Security</string>\n           </property>\n           <property name=\"margin\">\n            <number>9</number>\n           </property>\n          </widget>\n         </item>\n        </layout>\n       </item>\n       <item>\n        <widget class=\"Line\" name=\"line_3\">\n         <property name=\"maximumSize\">\n          <size>\n           <width>16777215</width>\n           <height>1</height>\n          </size>\n         </property>\n         <property name=\"orientation\">\n          <enum>Qt::Horizontal</enum>\n         </property>\n        </widget>\n       </item>\n       <item>\n        <widget class=\"QLabel\" name=\"label_12\">\n         <property name=\"text\">\n          <string>Protect this account with a password to prevent anyone else logging into it.</string>\n         </property>\n         <property name=\"margin\">\n          <number>9</number>\n         </property>\n        </widget>\n       </item>\n       <item>\n        <widget class=\"Line\" name=\"line_4\">\n         <property name=\"maximumSize\">\n          <size>\n           <width>16777215</width>\n           <height>1</height>\n          </size>\n         </property>\n         <property name=\"orientation\">\n          <enum>Qt::Horizontal</enum>\n         </property>\n        </widget>\n       </item>\n       <item>\n        <layout class=\"QGridLayout\" name=\"gridLayout_3\">\n         <property name=\"leftMargin\">\n          <number>9</number>\n         </property>\n         <property name=\"topMargin\">\n          <number>9</number>\n         </property>\n         <property name=\"rightMargin\">\n          <number>9</number>\n         </property>\n         <property name=\"bottomMargin\">\n          <number>9</number>\n         </property>\n         <property name=\"spacing\">\n          <number>6</number>\n         </property>\n         <item row=\"0\" column=\"0\">\n          <widget class=\"QLabel\" name=\"label_13\">\n           <property name=\"text\">\n            <string>Password</string>\n           </property>\n          </widget>\n         </item>\n         <item row=\"1\" column=\"1\">\n          <widget class=\"QLineEdit\" name=\"confirmPasswordLineEdit\">\n           <property name=\"echoMode\">\n            <enum>QLineEdit::Password</enum>\n           </property>\n          </widget>\n         </item>\n         <item row=\"1\" column=\"0\">\n          <widget class=\"QLabel\" name=\"label_14\">\n           <property name=\"text\">\n            <string>Confirm Password</string>\n           </property>\n          </widget>\n         </item>\n         <item row=\"0\" column=\"1\">\n          <widget class=\"QLineEdit\" name=\"passwordLineEdit\">\n           <property name=\"echoMode\">\n            <enum>QLineEdit::Password</enum>\n           </property>\n          </widget>\n         </item>\n         <item row=\"2\" column=\"1\">\n          <widget class=\"QLineEdit\" name=\"passwordHintLineEdit\"/>\n         </item>\n         <item row=\"2\" column=\"0\">\n          <widget class=\"QLabel\" name=\"label_22\">\n           <property name=\"text\">\n            <string>Password Hint</string>\n           </property>\n          </widget>\n         </item>\n         <item row=\"3\" column=\"1\">\n          <widget class=\"QLabel\" name=\"label_23\">\n           <property name=\"text\">\n            <string>If you forget your password, this will appear to help you remember.</string>\n           </property>\n           <property name=\"wordWrap\">\n            <bool>true</bool>\n           </property>\n          </widget>\n         </item>\n        </layout>\n       </item>\n       <item>\n        <widget class=\"QPushButton\" name=\"usePasswordButton\">\n         <property name=\"text\">\n          <string>Use this password</string>\n         </property>\n        </widget>\n       </item>\n       <item>\n        <widget class=\"QLabel\" name=\"label_15\">\n         <property name=\"text\">\n          <string>Alternatively, choose one of the following options:</string>\n         </property>\n         <property name=\"margin\">\n          <number>9</number>\n         </property>\n        </widget>\n       </item>\n       <item>\n        <widget class=\"QCommandLinkButton\" name=\"askForPasswordButton\">\n         <property name=\"text\">\n          <string>Ask for a password on the next login</string>\n         </property>\n         <property name=\"description\">\n          <string>The first time the user logs in, we'll ask them for a password.</string>\n         </property>\n        </widget>\n       </item>\n       <item>\n        <widget class=\"QCommandLinkButton\" name=\"noPasswordButton\">\n         <property name=\"text\">\n          <string>Don't set a password</string>\n         </property>\n         <property name=\"description\">\n          <string>Anyone will be able to log into this account.</string>\n         </property>\n        </widget>\n       </item>\n       <item>\n        <spacer name=\"verticalSpacer_2\">\n         <property name=\"orientation\">\n          <enum>Qt::Vertical</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>20</width>\n           <height>40</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n      </layout>\n     </widget>\n     <widget class=\"QWidget\" name=\"confirmPage\">\n      <layout class=\"QVBoxLayout\" name=\"verticalLayout_6\">\n       <property name=\"spacing\">\n        <number>0</number>\n       </property>\n       <property name=\"leftMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"topMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"rightMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"bottomMargin\">\n        <number>0</number>\n       </property>\n       <item>\n        <layout class=\"QHBoxLayout\" name=\"horizontalLayout_3\">\n         <property name=\"spacing\">\n          <number>0</number>\n         </property>\n         <item>\n          <widget class=\"QPushButton\" name=\"backButton_3\">\n           <property name=\"sizePolicy\">\n            <sizepolicy hsizetype=\"Preferred\" vsizetype=\"Preferred\">\n             <horstretch>0</horstretch>\n             <verstretch>0</verstretch>\n            </sizepolicy>\n           </property>\n           <property name=\"text\">\n            <string/>\n           </property>\n           <property name=\"icon\">\n            <iconset theme=\"go-previous\">\n             <normaloff>../PulseaudioPane</normaloff>../PulseaudioPane</iconset>\n           </property>\n           <property name=\"flat\">\n            <bool>true</bool>\n           </property>\n          </widget>\n         </item>\n         <item>\n          <widget class=\"QLabel\" name=\"label_16\">\n           <property name=\"sizePolicy\">\n            <sizepolicy hsizetype=\"Expanding\" vsizetype=\"Preferred\">\n             <horstretch>0</horstretch>\n             <verstretch>0</verstretch>\n            </sizepolicy>\n           </property>\n           <property name=\"font\">\n            <font>\n             <pointsize>15</pointsize>\n            </font>\n           </property>\n           <property name=\"text\">\n            <string>Add User</string>\n           </property>\n           <property name=\"margin\">\n            <number>9</number>\n           </property>\n          </widget>\n         </item>\n        </layout>\n       </item>\n       <item>\n        <widget class=\"Line\" name=\"line_5\">\n         <property name=\"maximumSize\">\n          <size>\n           <width>16777215</width>\n           <height>1</height>\n          </size>\n         </property>\n         <property name=\"orientation\">\n          <enum>Qt::Horizontal</enum>\n         </property>\n        </widget>\n       </item>\n       <item>\n        <widget class=\"QLabel\" name=\"label_17\">\n         <property name=\"text\">\n          <string>Add this user to your system?</string>\n         </property>\n         <property name=\"margin\">\n          <number>9</number>\n         </property>\n        </widget>\n       </item>\n       <item>\n        <layout class=\"QGridLayout\" name=\"gridLayout_4\">\n         <property name=\"leftMargin\">\n          <number>9</number>\n         </property>\n         <property name=\"topMargin\">\n          <number>9</number>\n         </property>\n         <property name=\"rightMargin\">\n          <number>9</number>\n         </property>\n         <property name=\"bottomMargin\">\n          <number>9</number>\n         </property>\n         <property name=\"spacing\">\n          <number>6</number>\n         </property>\n         <item row=\"1\" column=\"1\">\n          <widget class=\"QLabel\" name=\"userNameConfirmLabel\">\n           <property name=\"text\">\n            <string notr=\"true\">TextLabel</string>\n           </property>\n          </widget>\n         </item>\n         <item row=\"1\" column=\"0\">\n          <widget class=\"QLabel\" name=\"label_20\">\n           <property name=\"text\">\n            <string>Username</string>\n           </property>\n          </widget>\n         </item>\n         <item row=\"0\" column=\"0\">\n          <widget class=\"QLabel\" name=\"label_18\">\n           <property name=\"text\">\n            <string>Real Name</string>\n           </property>\n          </widget>\n         </item>\n         <item row=\"2\" column=\"0\">\n          <widget class=\"QLabel\" name=\"label_19\">\n           <property name=\"text\">\n            <string>User Type</string>\n           </property>\n          </widget>\n         </item>\n         <item row=\"2\" column=\"1\">\n          <widget class=\"QLabel\" name=\"userTypeConfirmLabel\">\n           <property name=\"text\">\n            <string notr=\"true\">TextLabel</string>\n           </property>\n          </widget>\n         </item>\n         <item row=\"0\" column=\"1\">\n          <widget class=\"QLabel\" name=\"realNameConfirmLabel\">\n           <property name=\"sizePolicy\">\n            <sizepolicy hsizetype=\"Expanding\" vsizetype=\"Preferred\">\n             <horstretch>0</horstretch>\n             <verstretch>0</verstretch>\n            </sizepolicy>\n           </property>\n           <property name=\"text\">\n            <string notr=\"true\">TextLabel</string>\n           </property>\n          </widget>\n         </item>\n         <item row=\"3\" column=\"0\">\n          <widget class=\"QLabel\" name=\"label_21\">\n           <property name=\"text\">\n            <string>Password</string>\n           </property>\n          </widget>\n         </item>\n         <item row=\"3\" column=\"1\">\n          <widget class=\"QLabel\" name=\"passwordConfirmLabel\">\n           <property name=\"text\">\n            <string notr=\"true\">TextLabel</string>\n           </property>\n          </widget>\n         </item>\n        </layout>\n       </item>\n       <item>\n        <widget class=\"QPushButton\" name=\"performAddUserButton\">\n         <property name=\"text\">\n          <string>Add User</string>\n         </property>\n        </widget>\n       </item>\n       <item>\n        <spacer name=\"verticalSpacer_3\">\n         <property name=\"orientation\">\n          <enum>Qt::Vertical</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>20</width>\n           <height>356</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n      </layout>\n     </widget>\n     <widget class=\"QWidget\" name=\"processingPage\">\n      <layout class=\"QGridLayout\" name=\"gridLayout_5\">\n       <item row=\"0\" column=\"1\">\n        <spacer name=\"verticalSpacer_5\">\n         <property name=\"orientation\">\n          <enum>Qt::Vertical</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>20</width>\n           <height>267</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n       <item row=\"1\" column=\"0\">\n        <spacer name=\"horizontalSpacer\">\n         <property name=\"orientation\">\n          <enum>Qt::Horizontal</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>255</width>\n           <height>20</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n       <item row=\"1\" column=\"1\">\n        <widget class=\"tCircularSpinner\" name=\"widget\" native=\"true\"/>\n       </item>\n       <item row=\"1\" column=\"2\">\n        <spacer name=\"horizontalSpacer_2\">\n         <property name=\"orientation\">\n          <enum>Qt::Horizontal</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>254</width>\n           <height>20</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n       <item row=\"2\" column=\"1\">\n        <spacer name=\"verticalSpacer_4\">\n         <property name=\"orientation\">\n          <enum>Qt::Vertical</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>20</width>\n           <height>267</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n      </layout>\n     </widget>\n    </widget>\n   </item>\n  </layout>\n </widget>\n <customwidgets>\n  <customwidget>\n   <class>tStackedWidget</class>\n   <extends>QStackedWidget</extends>\n   <header location=\"global\">tstackedwidget.h</header>\n   <container>1</container>\n   <slots>\n    <signal>switchingFrame(int)</signal>\n   </slots>\n  </customwidget>\n  <customwidget>\n   <class>tCircularSpinner</class>\n   <extends>QWidget</extends>\n   <header location=\"global\">tcircularspinner.h</header>\n   <container>1</container>\n  </customwidget>\n </customwidgets>\n <tabstops>\n  <tabstop>fullNameLineEdit</tabstop>\n  <tabstop>usernameLineEdit</tabstop>\n  <tabstop>administratorButton</tabstop>\n  <tabstop>standardUserButton</tabstop>\n  <tabstop>passwordLineEdit</tabstop>\n  <tabstop>confirmPasswordLineEdit</tabstop>\n  <tabstop>passwordHintLineEdit</tabstop>\n  <tabstop>usePasswordButton</tabstop>\n  <tabstop>askForPasswordButton</tabstop>\n  <tabstop>noPasswordButton</tabstop>\n  <tabstop>performAddUserButton</tabstop>\n  <tabstop>nextButton</tabstop>\n  <tabstop>backButton_3</tabstop>\n  <tabstop>backButton</tabstop>\n  <tabstop>backButton_2</tabstop>\n </tabstops>\n <resources/>\n <connections/>\n</ui>\n"
  },
  {
    "path": "plugins/UsersPlugin/settings/changepassworddialog.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2019 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"changepassworddialog.h\"\n#include \"ui_changepassworddialog.h\"\n\n#include <terrorflash.h>\n#include <ttoast.h>\n\nstruct ChangePasswordDialogPrivate {\n        UserPtr user;\n};\n\nChangePasswordDialog::ChangePasswordDialog(UserPtr user, QWidget* parent) :\n    QWidget(parent),\n    ui(new Ui::ChangePasswordDialog) {\n    ui->setupUi(this);\n\n    ui->titleLabel->setBackButtonShown(true);\n\n    d = new ChangePasswordDialogPrivate();\n    d->user = user;\n\n    ui->stackedWidget->setCurrentAnimation(tStackedWidget::Fade);\n    ui->lockedAccountWarning->setVisible(user->isLocked());\n}\n\nChangePasswordDialog::~ChangePasswordDialog() {\n    delete d;\n    delete ui;\n}\n\nQCoro::Task<> ChangePasswordDialog::on_setPasswordButton_clicked() {\n    if (ui->passwordLineEdit->text().isEmpty()) {\n        tErrorFlash::flashError(ui->passwordLineEdit);\n        co_return;\n    }\n\n    if (ui->passwordLineEdit->text() != ui->confirmPasswordLineEdit->text()) {\n        tErrorFlash::flashError(ui->confirmPasswordLineEdit);\n        co_return;\n    }\n\n    // Set the user's password\n    ui->stackedWidget->setCurrentWidget(ui->processingPage);\n\n    try {\n        co_await d->user->setPassword(ui->passwordLineEdit->text(), ui->passwordHintLineEdit->text());\n        emit done();\n    } catch (UserManipulationException& ex) {\n        // Bail out\n        QTimer::singleShot(1000, [=] {\n            ui->stackedWidget->setCurrentWidget(ui->setPasswordPage);\n\n            tToast* toast = new tToast();\n            toast->setTitle(tr(\"Couldn't set password\"));\n            toast->setText(ex.reason());\n            connect(toast, &tToast::dismissed, toast, &tToast::deleteLater);\n            toast->show(this);\n        });\n    }\n}\n\nQCoro::Task<> ChangePasswordDialog::on_askForPasswordButton_clicked() {\n    ui->stackedWidget->setCurrentWidget(ui->processingPage);\n\n    try {\n        co_await d->user->setPasswordMode(User::SetAtLogin);\n        emit done();\n    } catch (UserManipulationException& ex) {\n        // Bail out\n        QTimer::singleShot(1000, [this, ex] {\n            ui->stackedWidget->setCurrentWidget(ui->setPasswordPage);\n\n            tToast* toast = new tToast();\n            toast->setTitle(tr(\"Couldn't set password policy\"));\n            toast->setText(ex.reason());\n            connect(toast, &tToast::dismissed, toast, &tToast::deleteLater);\n            toast->show(this);\n        });\n    }\n}\n\nQCoro::Task<> ChangePasswordDialog::on_noPasswordButton_clicked() {\n    ui->stackedWidget->setCurrentWidget(ui->processingPage);\n    try {\n        co_await d->user->setPasswordMode(User::NoPassword);\n        emit done();\n    } catch (UserManipulationException& ex) {\n        // Bail out\n        QTimer::singleShot(1000, [this, ex] {\n            ui->stackedWidget->setCurrentWidget(ui->setPasswordPage);\n\n            tToast* toast = new tToast();\n            toast->setTitle(tr(\"Couldn't set password policy\"));\n            toast->setText(ex.reason());\n            connect(toast, &tToast::dismissed, toast, &tToast::deleteLater);\n            toast->show(this);\n        });\n    }\n}\n\nvoid ChangePasswordDialog::on_titleLabel_backButtonClicked() {\n    emit done();\n}\n"
  },
  {
    "path": "plugins/UsersPlugin/settings/changepassworddialog.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2019 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef CHANGEPASSWORDDIALOG_H\n#define CHANGEPASSWORDDIALOG_H\n\n#include \"user.h\"\n#include <QWidget>\n\nnamespace Ui {\n    class ChangePasswordDialog;\n}\n\nstruct ChangePasswordDialogPrivate;\nclass ChangePasswordDialog : public QWidget {\n        Q_OBJECT\n\n    public:\n        explicit ChangePasswordDialog(UserPtr user, QWidget* parent = nullptr);\n        ~ChangePasswordDialog();\n\n    private slots:\n        QCoro::Task<> on_setPasswordButton_clicked();\n\n        QCoro::Task<> on_askForPasswordButton_clicked();\n\n        QCoro::Task<> on_noPasswordButton_clicked();\n\n        void on_titleLabel_backButtonClicked();\n\n    signals:\n        void done();\n\n    private:\n        Ui::ChangePasswordDialog* ui;\n        ChangePasswordDialogPrivate* d;\n};\n\n#endif // CHANGEPASSWORDDIALOG_H\n"
  },
  {
    "path": "plugins/UsersPlugin/settings/changepassworddialog.ui",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ui version=\"4.0\">\n <class>ChangePasswordDialog</class>\n <widget class=\"QWidget\" name=\"ChangePasswordDialog\">\n  <property name=\"geometry\">\n   <rect>\n    <x>0</x>\n    <y>0</y>\n    <width>400</width>\n    <height>466</height>\n   </rect>\n  </property>\n  <property name=\"windowTitle\">\n   <string notr=\"true\">Form</string>\n  </property>\n  <layout class=\"QVBoxLayout\" name=\"verticalLayout\">\n   <property name=\"spacing\">\n    <number>0</number>\n   </property>\n   <property name=\"leftMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"topMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"rightMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"bottomMargin\">\n    <number>0</number>\n   </property>\n   <item>\n    <widget class=\"tStackedWidget\" name=\"stackedWidget\">\n     <property name=\"currentIndex\">\n      <number>0</number>\n     </property>\n     <widget class=\"QWidget\" name=\"setPasswordPage\">\n      <layout class=\"QVBoxLayout\" name=\"verticalLayout_7\">\n       <property name=\"spacing\">\n        <number>0</number>\n       </property>\n       <property name=\"leftMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"topMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"rightMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"bottomMargin\">\n        <number>0</number>\n       </property>\n       <item>\n        <layout class=\"QHBoxLayout\" name=\"horizontalLayout\">\n         <property name=\"spacing\">\n          <number>0</number>\n         </property>\n         <item>\n          <widget class=\"tTitleLabel\" name=\"titleLabel\">\n           <property name=\"sizePolicy\">\n            <sizepolicy hsizetype=\"Expanding\" vsizetype=\"Preferred\">\n             <horstretch>0</horstretch>\n             <verstretch>0</verstretch>\n            </sizepolicy>\n           </property>\n           <property name=\"text\">\n            <string>Change Password</string>\n           </property>\n          </widget>\n         </item>\n        </layout>\n       </item>\n       <item>\n        <layout class=\"QVBoxLayout\" name=\"verticalLayout_2\">\n         <property name=\"spacing\">\n          <number>6</number>\n         </property>\n         <property name=\"leftMargin\">\n          <number>9</number>\n         </property>\n         <property name=\"topMargin\">\n          <number>9</number>\n         </property>\n         <property name=\"rightMargin\">\n          <number>9</number>\n         </property>\n         <property name=\"bottomMargin\">\n          <number>9</number>\n         </property>\n         <item>\n          <widget class=\"QLabel\" name=\"label_29\">\n           <property name=\"text\">\n            <string>Set a password to protect this account.</string>\n           </property>\n          </widget>\n         </item>\n         <item>\n          <widget class=\"QFrame\" name=\"lockedAccountWarning\">\n           <property name=\"palette\">\n            <palette>\n             <active>\n              <colorrole role=\"Text\">\n               <brush brushstyle=\"SolidPattern\">\n                <color alpha=\"255\">\n                 <red>255</red>\n                 <green>255</green>\n                 <blue>255</blue>\n                </color>\n               </brush>\n              </colorrole>\n              <colorrole role=\"Base\">\n               <brush brushstyle=\"SolidPattern\">\n                <color alpha=\"255\">\n                 <red>255</red>\n                 <green>100</green>\n                 <blue>0</blue>\n                </color>\n               </brush>\n              </colorrole>\n              <colorrole role=\"Window\">\n               <brush brushstyle=\"SolidPattern\">\n                <color alpha=\"255\">\n                 <red>255</red>\n                 <green>100</green>\n                 <blue>0</blue>\n                </color>\n               </brush>\n              </colorrole>\n              <colorrole role=\"PlaceholderText\">\n               <brush brushstyle=\"SolidPattern\">\n                <color alpha=\"128\">\n                 <red>255</red>\n                 <green>255</green>\n                 <blue>255</blue>\n                </color>\n               </brush>\n              </colorrole>\n             </active>\n             <inactive>\n              <colorrole role=\"Text\">\n               <brush brushstyle=\"SolidPattern\">\n                <color alpha=\"255\">\n                 <red>255</red>\n                 <green>255</green>\n                 <blue>255</blue>\n                </color>\n               </brush>\n              </colorrole>\n              <colorrole role=\"Base\">\n               <brush brushstyle=\"SolidPattern\">\n                <color alpha=\"255\">\n                 <red>255</red>\n                 <green>100</green>\n                 <blue>0</blue>\n                </color>\n               </brush>\n              </colorrole>\n              <colorrole role=\"Window\">\n               <brush brushstyle=\"SolidPattern\">\n                <color alpha=\"255\">\n                 <red>255</red>\n                 <green>100</green>\n                 <blue>0</blue>\n                </color>\n               </brush>\n              </colorrole>\n              <colorrole role=\"PlaceholderText\">\n               <brush brushstyle=\"SolidPattern\">\n                <color alpha=\"128\">\n                 <red>255</red>\n                 <green>255</green>\n                 <blue>255</blue>\n                </color>\n               </brush>\n              </colorrole>\n             </inactive>\n             <disabled>\n              <colorrole role=\"Text\">\n               <brush brushstyle=\"SolidPattern\">\n                <color alpha=\"127\">\n                 <red>255</red>\n                 <green>255</green>\n                 <blue>255</blue>\n                </color>\n               </brush>\n              </colorrole>\n              <colorrole role=\"Base\">\n               <brush brushstyle=\"SolidPattern\">\n                <color alpha=\"255\">\n                 <red>255</red>\n                 <green>100</green>\n                 <blue>0</blue>\n                </color>\n               </brush>\n              </colorrole>\n              <colorrole role=\"Window\">\n               <brush brushstyle=\"SolidPattern\">\n                <color alpha=\"255\">\n                 <red>255</red>\n                 <green>100</green>\n                 <blue>0</blue>\n                </color>\n               </brush>\n              </colorrole>\n              <colorrole role=\"PlaceholderText\">\n               <brush brushstyle=\"SolidPattern\">\n                <color alpha=\"128\">\n                 <red>231</red>\n                 <green>231</green>\n                 <blue>231</blue>\n                </color>\n               </brush>\n              </colorrole>\n             </disabled>\n            </palette>\n           </property>\n           <property name=\"autoFillBackground\">\n            <bool>true</bool>\n           </property>\n           <property name=\"frameShape\">\n            <enum>QFrame::StyledPanel</enum>\n           </property>\n           <property name=\"frameShadow\">\n            <enum>QFrame::Raised</enum>\n           </property>\n           <layout class=\"QVBoxLayout\" name=\"verticalLayout_3\">\n            <item>\n             <widget class=\"QLabel\" name=\"label_2\">\n              <property name=\"font\">\n               <font>\n                <weight>75</weight>\n                <bold>true</bold>\n               </font>\n              </property>\n              <property name=\"text\">\n               <string>WARNING</string>\n              </property>\n             </widget>\n            </item>\n            <item>\n             <widget class=\"QLabel\" name=\"label_3\">\n              <property name=\"text\">\n               <string>This account is locked. Changing the password will unlock it.</string>\n              </property>\n              <property name=\"wordWrap\">\n               <bool>true</bool>\n              </property>\n             </widget>\n            </item>\n           </layout>\n          </widget>\n         </item>\n        </layout>\n       </item>\n       <item>\n        <widget class=\"Line\" name=\"line_7\">\n         <property name=\"maximumSize\">\n          <size>\n           <width>16777215</width>\n           <height>1</height>\n          </size>\n         </property>\n         <property name=\"orientation\">\n          <enum>Qt::Horizontal</enum>\n         </property>\n        </widget>\n       </item>\n       <item>\n        <layout class=\"QGridLayout\" name=\"gridLayout_6\">\n         <property name=\"leftMargin\">\n          <number>9</number>\n         </property>\n         <property name=\"topMargin\">\n          <number>9</number>\n         </property>\n         <property name=\"rightMargin\">\n          <number>9</number>\n         </property>\n         <property name=\"bottomMargin\">\n          <number>9</number>\n         </property>\n         <property name=\"spacing\">\n          <number>6</number>\n         </property>\n         <item row=\"0\" column=\"0\">\n          <widget class=\"QLabel\" name=\"label_25\">\n           <property name=\"text\">\n            <string>Password</string>\n           </property>\n          </widget>\n         </item>\n         <item row=\"1\" column=\"1\">\n          <widget class=\"QLineEdit\" name=\"confirmPasswordLineEdit\">\n           <property name=\"echoMode\">\n            <enum>QLineEdit::Password</enum>\n           </property>\n          </widget>\n         </item>\n         <item row=\"1\" column=\"0\">\n          <widget class=\"QLabel\" name=\"label_26\">\n           <property name=\"text\">\n            <string>Confirm Password</string>\n           </property>\n          </widget>\n         </item>\n         <item row=\"0\" column=\"1\">\n          <widget class=\"QLineEdit\" name=\"passwordLineEdit\">\n           <property name=\"echoMode\">\n            <enum>QLineEdit::Password</enum>\n           </property>\n          </widget>\n         </item>\n         <item row=\"2\" column=\"1\">\n          <widget class=\"QLineEdit\" name=\"passwordHintLineEdit\"/>\n         </item>\n         <item row=\"2\" column=\"0\">\n          <widget class=\"QLabel\" name=\"label_27\">\n           <property name=\"text\">\n            <string>Password Hint</string>\n           </property>\n          </widget>\n         </item>\n         <item row=\"3\" column=\"1\">\n          <widget class=\"QLabel\" name=\"label_28\">\n           <property name=\"text\">\n            <string>If you forget your password, this will appear to help you remember.</string>\n           </property>\n           <property name=\"wordWrap\">\n            <bool>true</bool>\n           </property>\n          </widget>\n         </item>\n        </layout>\n       </item>\n       <item>\n        <widget class=\"QPushButton\" name=\"setPasswordButton\">\n         <property name=\"text\">\n          <string>Use this password</string>\n         </property>\n        </widget>\n       </item>\n       <item>\n        <widget class=\"QLabel\" name=\"label_31\">\n         <property name=\"text\">\n          <string>Alternatively, choose one of the following options:</string>\n         </property>\n         <property name=\"margin\">\n          <number>9</number>\n         </property>\n        </widget>\n       </item>\n       <item>\n        <widget class=\"QCommandLinkButton\" name=\"askForPasswordButton\">\n         <property name=\"text\">\n          <string>Ask for a password on the next login</string>\n         </property>\n         <property name=\"description\">\n          <string>The first time the user logs in, we'll ask them for a password.</string>\n         </property>\n        </widget>\n       </item>\n       <item>\n        <widget class=\"QCommandLinkButton\" name=\"noPasswordButton\">\n         <property name=\"text\">\n          <string>Don't set a password</string>\n         </property>\n         <property name=\"description\">\n          <string>Anyone will be able to log into this account.</string>\n         </property>\n        </widget>\n       </item>\n       <item>\n        <spacer name=\"verticalSpacer_6\">\n         <property name=\"orientation\">\n          <enum>Qt::Vertical</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>20</width>\n           <height>40</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n      </layout>\n     </widget>\n     <widget class=\"QWidget\" name=\"processingPage\">\n      <layout class=\"QGridLayout\" name=\"gridLayout_7\">\n       <item row=\"0\" column=\"1\">\n        <spacer name=\"verticalSpacer_8\">\n         <property name=\"orientation\">\n          <enum>Qt::Vertical</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>20</width>\n           <height>204</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n       <item row=\"1\" column=\"0\">\n        <spacer name=\"horizontalSpacer_3\">\n         <property name=\"orientation\">\n          <enum>Qt::Horizontal</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>171</width>\n           <height>20</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n       <item row=\"1\" column=\"1\">\n        <widget class=\"tCircularSpinner\" name=\"widget_2\" native=\"true\"/>\n       </item>\n       <item row=\"1\" column=\"2\">\n        <spacer name=\"horizontalSpacer_4\">\n         <property name=\"orientation\">\n          <enum>Qt::Horizontal</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>170</width>\n           <height>20</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n       <item row=\"2\" column=\"1\">\n        <spacer name=\"verticalSpacer_7\">\n         <property name=\"orientation\">\n          <enum>Qt::Vertical</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>20</width>\n           <height>203</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n      </layout>\n     </widget>\n    </widget>\n   </item>\n  </layout>\n </widget>\n <customwidgets>\n  <customwidget>\n   <class>tTitleLabel</class>\n   <extends>QLabel</extends>\n   <header location=\"global\">ttitlelabel.h</header>\n   <slots>\n    <signal>backButtonClicked()</signal>\n   </slots>\n  </customwidget>\n  <customwidget>\n   <class>tStackedWidget</class>\n   <extends>QStackedWidget</extends>\n   <header location=\"global\">tstackedwidget.h</header>\n   <container>1</container>\n   <slots>\n    <signal>switchingFrame(int)</signal>\n   </slots>\n  </customwidget>\n  <customwidget>\n   <class>tCircularSpinner</class>\n   <extends>QWidget</extends>\n   <header location=\"global\">tcircularspinner.h</header>\n   <container>1</container>\n  </customwidget>\n </customwidgets>\n <tabstops>\n  <tabstop>passwordLineEdit</tabstop>\n  <tabstop>confirmPasswordLineEdit</tabstop>\n  <tabstop>passwordHintLineEdit</tabstop>\n  <tabstop>setPasswordButton</tabstop>\n  <tabstop>askForPasswordButton</tabstop>\n  <tabstop>noPasswordButton</tabstop>\n </tabstops>\n <resources/>\n <connections/>\n</ui>\n"
  },
  {
    "path": "plugins/UsersPlugin/settings/changerealnamedialog.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2019 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"changerealnamedialog.h\"\n#include \"ui_changerealnamedialog.h\"\n\n#include <terrorflash.h>\n#include <ttoast.h>\n\nstruct ChangeRealNameDialogPrivate {\n    UserPtr user;\n};\n\nChangeRealNameDialog::ChangeRealNameDialog(UserPtr user, QWidget* parent) :\n    QWidget(parent),\n    ui(new Ui::ChangeRealNameDialog) {\n    ui->setupUi(this);\n    d = new ChangeRealNameDialogPrivate();\n\n    ui->titleLabel->setBackButtonShown(true);\n\n    d->user = user;\n    ui->stackedWidget->setCurrentAnimation(tStackedWidget::Fade);\n}\n\nChangeRealNameDialog::~ChangeRealNameDialog() {\n    delete d;\n    delete ui;\n}\n\nvoid ChangeRealNameDialog::on_setPasswordButton_clicked() {\n    if (ui->realNameLineEdit->text().isEmpty()) {\n        tErrorFlash::flashError(ui->realNameLineEdit);\n        return;\n    }\n\n    //Set the user's real name\n    ui->stackedWidget->setCurrentWidget(ui->processingPage);\n\n    d->user->setRealName(ui->realNameLineEdit->text())->then([ = ] {\n        emit done();\n    })->error([ = ](QString err) {\n        //Bail out\n        QTimer::singleShot(1000, [ = ] {\n            ui->stackedWidget->setCurrentWidget(ui->setRealNamePage);\n\n            tToast* toast = new tToast();\n            toast->setTitle(tr(\"Couldn't set real name\"));\n            toast->setText(err);\n            connect(toast, &tToast::dismissed, toast, &tToast::deleteLater);\n            toast->show(this);\n        });\n    });\n}\n\nvoid ChangeRealNameDialog::on_titleLabel_backButtonClicked() {\n    emit done();\n}\n"
  },
  {
    "path": "plugins/UsersPlugin/settings/changerealnamedialog.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2019 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef CHANGEREALNAMEDIALOG_H\n#define CHANGEREALNAMEDIALOG_H\n\n#include <QWidget>\n#include \"user.h\"\n\nnamespace Ui {\n    class ChangeRealNameDialog;\n}\n\nstruct ChangeRealNameDialogPrivate;\nclass ChangeRealNameDialog : public QWidget {\n        Q_OBJECT\n\n    public:\n        explicit ChangeRealNameDialog(UserPtr user, QWidget* parent = nullptr);\n        ~ChangeRealNameDialog();\n\n    private slots:\n        void on_setPasswordButton_clicked();\n\n        void on_titleLabel_backButtonClicked();\n\n    signals:\n        void done();\n\n    private:\n        Ui::ChangeRealNameDialog* ui;\n        ChangeRealNameDialogPrivate* d;\n};\n\n#endif // CHANGEREALNAMEDIALOG_H\n"
  },
  {
    "path": "plugins/UsersPlugin/settings/changerealnamedialog.ui",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ui version=\"4.0\">\n <class>ChangeRealNameDialog</class>\n <widget class=\"QWidget\" name=\"ChangeRealNameDialog\">\n  <property name=\"geometry\">\n   <rect>\n    <x>0</x>\n    <y>0</y>\n    <width>400</width>\n    <height>474</height>\n   </rect>\n  </property>\n  <property name=\"windowTitle\">\n   <string notr=\"true\">Form</string>\n  </property>\n  <layout class=\"QVBoxLayout\" name=\"verticalLayout\">\n   <property name=\"spacing\">\n    <number>0</number>\n   </property>\n   <property name=\"leftMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"topMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"rightMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"bottomMargin\">\n    <number>0</number>\n   </property>\n   <item>\n    <widget class=\"tStackedWidget\" name=\"stackedWidget\">\n     <property name=\"currentIndex\">\n      <number>0</number>\n     </property>\n     <widget class=\"QWidget\" name=\"setRealNamePage\">\n      <layout class=\"QVBoxLayout\" name=\"verticalLayout_7\">\n       <property name=\"spacing\">\n        <number>0</number>\n       </property>\n       <property name=\"leftMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"topMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"rightMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"bottomMargin\">\n        <number>0</number>\n       </property>\n       <item>\n        <layout class=\"QHBoxLayout\" name=\"horizontalLayout\">\n         <property name=\"spacing\">\n          <number>0</number>\n         </property>\n         <item>\n          <widget class=\"tTitleLabel\" name=\"titleLabel\">\n           <property name=\"sizePolicy\">\n            <sizepolicy hsizetype=\"Expanding\" vsizetype=\"Preferred\">\n             <horstretch>0</horstretch>\n             <verstretch>0</verstretch>\n            </sizepolicy>\n           </property>\n           <property name=\"text\">\n            <string>Change Real Name</string>\n           </property>\n          </widget>\n         </item>\n        </layout>\n       </item>\n       <item>\n        <widget class=\"QLabel\" name=\"label_29\">\n         <property name=\"text\">\n          <string>Your Real Name appears on the login screen, on the Gateway and in any other location where we need to differentiate between users.</string>\n         </property>\n         <property name=\"wordWrap\">\n          <bool>true</bool>\n         </property>\n         <property name=\"margin\">\n          <number>9</number>\n         </property>\n        </widget>\n       </item>\n       <item>\n        <widget class=\"Line\" name=\"line_7\">\n         <property name=\"maximumSize\">\n          <size>\n           <width>16777215</width>\n           <height>1</height>\n          </size>\n         </property>\n         <property name=\"orientation\">\n          <enum>Qt::Horizontal</enum>\n         </property>\n        </widget>\n       </item>\n       <item>\n        <layout class=\"QGridLayout\" name=\"gridLayout_6\">\n         <property name=\"leftMargin\">\n          <number>9</number>\n         </property>\n         <property name=\"topMargin\">\n          <number>9</number>\n         </property>\n         <property name=\"rightMargin\">\n          <number>9</number>\n         </property>\n         <property name=\"bottomMargin\">\n          <number>9</number>\n         </property>\n         <property name=\"spacing\">\n          <number>6</number>\n         </property>\n         <item row=\"0\" column=\"1\">\n          <widget class=\"QLineEdit\" name=\"realNameLineEdit\"/>\n         </item>\n         <item row=\"0\" column=\"0\">\n          <widget class=\"QLabel\" name=\"label_25\">\n           <property name=\"text\">\n            <string>Real Name</string>\n           </property>\n          </widget>\n         </item>\n        </layout>\n       </item>\n       <item>\n        <widget class=\"QPushButton\" name=\"setPasswordButton\">\n         <property name=\"text\">\n          <string>Set Real Name</string>\n         </property>\n        </widget>\n       </item>\n       <item>\n        <spacer name=\"verticalSpacer_6\">\n         <property name=\"orientation\">\n          <enum>Qt::Vertical</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>20</width>\n           <height>40</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n      </layout>\n     </widget>\n     <widget class=\"QWidget\" name=\"processingPage\">\n      <layout class=\"QGridLayout\" name=\"gridLayout_7\">\n       <item row=\"0\" column=\"1\">\n        <spacer name=\"verticalSpacer_8\">\n         <property name=\"orientation\">\n          <enum>Qt::Vertical</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>20</width>\n           <height>204</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n       <item row=\"1\" column=\"0\">\n        <spacer name=\"horizontalSpacer_3\">\n         <property name=\"orientation\">\n          <enum>Qt::Horizontal</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>171</width>\n           <height>20</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n       <item row=\"1\" column=\"1\">\n        <widget class=\"tCircularSpinner\" name=\"widget_2\" native=\"true\"/>\n       </item>\n       <item row=\"1\" column=\"2\">\n        <spacer name=\"horizontalSpacer_4\">\n         <property name=\"orientation\">\n          <enum>Qt::Horizontal</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>170</width>\n           <height>20</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n       <item row=\"2\" column=\"1\">\n        <spacer name=\"verticalSpacer_7\">\n         <property name=\"orientation\">\n          <enum>Qt::Vertical</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>20</width>\n           <height>203</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n      </layout>\n     </widget>\n    </widget>\n   </item>\n  </layout>\n </widget>\n <customwidgets>\n  <customwidget>\n   <class>tTitleLabel</class>\n   <extends>QLabel</extends>\n   <header location=\"global\">ttitlelabel.h</header>\n   <slots>\n    <signal>backButtonClicked()</signal>\n   </slots>\n  </customwidget>\n  <customwidget>\n   <class>tStackedWidget</class>\n   <extends>QStackedWidget</extends>\n   <header location=\"global\">tstackedwidget.h</header>\n   <container>1</container>\n   <slots>\n    <signal>switchingFrame(int)</signal>\n   </slots>\n  </customwidget>\n  <customwidget>\n   <class>tCircularSpinner</class>\n   <extends>QWidget</extends>\n   <header location=\"global\">tcircularspinner.h</header>\n   <container>1</container>\n  </customwidget>\n </customwidgets>\n <resources/>\n <connections/>\n</ui>\n"
  },
  {
    "path": "plugins/UsersPlugin/settings/deleteuserdialog.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2019 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"deleteuserdialog.h\"\n#include \"ui_deleteuserdialog.h\"\n\n#include <ttoast.h>\n\nstruct DeleteUserDialogPrivate {\n    UserPtr user;\n    bool shouldDeleteFiles;\n};\n\nDeleteUserDialog::DeleteUserDialog(UserPtr user, QWidget* parent) :\n    QWidget(parent),\n    ui(new Ui::DeleteUserDialog) {\n    ui->setupUi(this);\n    d = new DeleteUserDialogPrivate();\n\n    ui->titleLabel->setBackButtonShown(true);\n    ui->doDeleteTitleLabel->setBackButtonShown(true);\n\n    d->user = user;\n    ui->stackedWidget->setCurrentAnimation(tStackedWidget::SlideHorizontal);\n    ui->deleteButton->setProperty(\"type\", \"destructive\");\n}\n\nDeleteUserDialog::~DeleteUserDialog() {\n    delete d;\n    delete ui;\n}\n\nvoid DeleteUserDialog::on_deleteFilesButton_clicked() {\n    d->shouldDeleteFiles = true;\n    ui->stackedWidget->setCurrentWidget(ui->confirmPage);\n    ui->deleteDataWarning->setVisible(true);\n}\n\nvoid DeleteUserDialog::on_keepFilesButton_clicked() {\n    d->shouldDeleteFiles = false;\n    ui->stackedWidget->setCurrentWidget(ui->confirmPage);\n    ui->deleteDataWarning->setVisible(false);\n}\n\nvoid DeleteUserDialog::on_deleteButton_clicked() {\n    ui->stackedWidget->setCurrentAnimation(tStackedWidget::Fade);\n    ui->stackedWidget->setCurrentWidget(ui->processingPage);\n\n    d->user->deleteUser(d->shouldDeleteFiles)->then([ = ] {\n        emit done();\n    })->error([ = ](QString err) {\n        //Bail out\n        QTimer::singleShot(1000, [ = ] {\n            ui->stackedWidget->setCurrentWidget(ui->confirmPage);\n            ui->stackedWidget->setCurrentAnimation(tStackedWidget::SlideHorizontal);\n\n            tToast* toast = new tToast();\n            toast->setTitle(tr(\"Couldn't delete user\"));\n            toast->setText(err);\n            connect(toast, &tToast::dismissed, toast, &tToast::deleteLater);\n            toast->show(this);\n        });\n    });\n}\n\nvoid DeleteUserDialog::on_titleLabel_backButtonClicked() {\n    emit done();\n}\n\nvoid DeleteUserDialog::on_doDeleteTitleLabel_backButtonClicked() {\n    ui->stackedWidget->setCurrentWidget(ui->initialPage);\n}\n"
  },
  {
    "path": "plugins/UsersPlugin/settings/deleteuserdialog.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2019 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef DELETEUSERDIALOG_H\n#define DELETEUSERDIALOG_H\n\n#include <QWidget>\n#include \"user.h\"\n\nnamespace Ui {\n    class DeleteUserDialog;\n}\n\nstruct DeleteUserDialogPrivate;\nclass DeleteUserDialog : public QWidget {\n        Q_OBJECT\n\n    public:\n        explicit DeleteUserDialog(UserPtr user, QWidget* parent = nullptr);\n        ~DeleteUserDialog();\n\n    private slots:\n        void on_deleteFilesButton_clicked();\n\n        void on_keepFilesButton_clicked();\n\n        void on_deleteButton_clicked();\n\n        void on_titleLabel_backButtonClicked();\n\n        void on_doDeleteTitleLabel_backButtonClicked();\n\n    signals:\n        void done();\n\n    private:\n        Ui::DeleteUserDialog* ui;\n        DeleteUserDialogPrivate* d;\n};\n\n#endif // DELETEUSERDIALOG_H\n"
  },
  {
    "path": "plugins/UsersPlugin/settings/deleteuserdialog.ui",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ui version=\"4.0\">\n <class>DeleteUserDialog</class>\n <widget class=\"QWidget\" name=\"DeleteUserDialog\">\n  <property name=\"geometry\">\n   <rect>\n    <x>0</x>\n    <y>0</y>\n    <width>400</width>\n    <height>448</height>\n   </rect>\n  </property>\n  <property name=\"windowTitle\">\n   <string notr=\"true\">Form</string>\n  </property>\n  <layout class=\"QVBoxLayout\" name=\"verticalLayout\">\n   <property name=\"spacing\">\n    <number>0</number>\n   </property>\n   <property name=\"leftMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"topMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"rightMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"bottomMargin\">\n    <number>0</number>\n   </property>\n   <item>\n    <widget class=\"tStackedWidget\" name=\"stackedWidget\">\n     <property name=\"currentIndex\">\n      <number>0</number>\n     </property>\n     <widget class=\"QWidget\" name=\"initialPage\">\n      <layout class=\"QVBoxLayout\" name=\"verticalLayout_2\">\n       <property name=\"spacing\">\n        <number>0</number>\n       </property>\n       <property name=\"leftMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"topMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"rightMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"bottomMargin\">\n        <number>0</number>\n       </property>\n       <item>\n        <layout class=\"QHBoxLayout\" name=\"horizontalLayout\">\n         <property name=\"spacing\">\n          <number>0</number>\n         </property>\n         <item>\n          <widget class=\"tTitleLabel\" name=\"titleLabel\">\n           <property name=\"sizePolicy\">\n            <sizepolicy hsizetype=\"Expanding\" vsizetype=\"Preferred\">\n             <horstretch>0</horstretch>\n             <verstretch>0</verstretch>\n            </sizepolicy>\n           </property>\n           <property name=\"text\">\n            <string>Delete User</string>\n           </property>\n          </widget>\n         </item>\n        </layout>\n       </item>\n       <item>\n        <widget class=\"QLabel\" name=\"label_2\">\n         <property name=\"text\">\n          <string>What do you want to do with this user's files?</string>\n         </property>\n         <property name=\"wordWrap\">\n          <bool>true</bool>\n         </property>\n         <property name=\"margin\">\n          <number>9</number>\n         </property>\n        </widget>\n       </item>\n       <item>\n        <widget class=\"QCommandLinkButton\" name=\"deleteFilesButton\">\n         <property name=\"text\">\n          <string>Delete Files</string>\n         </property>\n         <property name=\"description\">\n          <string>Files for this user will be removed from this device.</string>\n         </property>\n        </widget>\n       </item>\n       <item>\n        <widget class=\"QCommandLinkButton\" name=\"keepFilesButton\">\n         <property name=\"text\">\n          <string>Keep Files</string>\n         </property>\n         <property name=\"description\">\n          <string>Files for this user will be kept in the same location.</string>\n         </property>\n        </widget>\n       </item>\n       <item>\n        <spacer name=\"verticalSpacer\">\n         <property name=\"orientation\">\n          <enum>Qt::Vertical</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>20</width>\n           <height>265</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n      </layout>\n     </widget>\n     <widget class=\"QWidget\" name=\"confirmPage\">\n      <layout class=\"QVBoxLayout\" name=\"verticalLayout_3\">\n       <property name=\"spacing\">\n        <number>0</number>\n       </property>\n       <property name=\"leftMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"topMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"rightMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"bottomMargin\">\n        <number>0</number>\n       </property>\n       <item>\n        <layout class=\"QHBoxLayout\" name=\"horizontalLayout_2\">\n         <property name=\"spacing\">\n          <number>0</number>\n         </property>\n         <item>\n          <widget class=\"tTitleLabel\" name=\"doDeleteTitleLabel\">\n           <property name=\"sizePolicy\">\n            <sizepolicy hsizetype=\"Expanding\" vsizetype=\"Preferred\">\n             <horstretch>0</horstretch>\n             <verstretch>0</verstretch>\n            </sizepolicy>\n           </property>\n           <property name=\"text\">\n            <string>Delete User</string>\n           </property>\n          </widget>\n         </item>\n        </layout>\n       </item>\n       <item>\n        <layout class=\"QVBoxLayout\" name=\"verticalLayout_4\">\n         <property name=\"spacing\">\n          <number>6</number>\n         </property>\n         <property name=\"leftMargin\">\n          <number>9</number>\n         </property>\n         <property name=\"topMargin\">\n          <number>9</number>\n         </property>\n         <property name=\"rightMargin\">\n          <number>9</number>\n         </property>\n         <property name=\"bottomMargin\">\n          <number>9</number>\n         </property>\n         <item>\n          <widget class=\"QLabel\" name=\"label_4\">\n           <property name=\"text\">\n            <string>Delete this user from this device?</string>\n           </property>\n           <property name=\"margin\">\n            <number>0</number>\n           </property>\n          </widget>\n         </item>\n         <item>\n          <widget class=\"QLabel\" name=\"deleteDataWarning\">\n           <property name=\"text\">\n            <string>Any data associated with this user will be gone forever. This includes\n- Home Directory\n- Mail Spool\n- Temporary Files</string>\n           </property>\n           <property name=\"wordWrap\">\n            <bool>true</bool>\n           </property>\n           <property name=\"margin\">\n            <number>0</number>\n           </property>\n          </widget>\n         </item>\n        </layout>\n       </item>\n       <item>\n        <widget class=\"QCommandLinkButton\" name=\"deleteButton\">\n         <property name=\"text\">\n          <string>Delete User</string>\n         </property>\n         <property name=\"description\">\n          <string>They'll be gone forever!</string>\n         </property>\n        </widget>\n       </item>\n       <item>\n        <spacer name=\"verticalSpacer_2\">\n         <property name=\"orientation\">\n          <enum>Qt::Vertical</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>20</width>\n           <height>232</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n      </layout>\n     </widget>\n     <widget class=\"QWidget\" name=\"processingPage\">\n      <layout class=\"QGridLayout\" name=\"gridLayout\">\n       <item row=\"0\" column=\"1\">\n        <spacer name=\"verticalSpacer_4\">\n         <property name=\"orientation\">\n          <enum>Qt::Vertical</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>20</width>\n           <height>195</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n       <item row=\"1\" column=\"0\">\n        <spacer name=\"horizontalSpacer\">\n         <property name=\"orientation\">\n          <enum>Qt::Horizontal</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>171</width>\n           <height>20</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n       <item row=\"1\" column=\"1\">\n        <widget class=\"tCircularSpinner\" name=\"widget\" native=\"true\"/>\n       </item>\n       <item row=\"1\" column=\"2\">\n        <spacer name=\"horizontalSpacer_2\">\n         <property name=\"orientation\">\n          <enum>Qt::Horizontal</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>170</width>\n           <height>20</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n       <item row=\"2\" column=\"1\">\n        <spacer name=\"verticalSpacer_3\">\n         <property name=\"orientation\">\n          <enum>Qt::Vertical</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>20</width>\n           <height>194</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n      </layout>\n     </widget>\n    </widget>\n   </item>\n  </layout>\n </widget>\n <customwidgets>\n  <customwidget>\n   <class>tTitleLabel</class>\n   <extends>QLabel</extends>\n   <header location=\"global\">ttitlelabel.h</header>\n   <slots>\n    <signal>backButtonClicked()</signal>\n   </slots>\n  </customwidget>\n  <customwidget>\n   <class>tStackedWidget</class>\n   <extends>QStackedWidget</extends>\n   <header location=\"global\">tstackedwidget.h</header>\n   <container>1</container>\n   <slots>\n    <signal>switchingFrame(int)</signal>\n   </slots>\n  </customwidget>\n  <customwidget>\n   <class>tCircularSpinner</class>\n   <extends>QWidget</extends>\n   <header location=\"global\">tcircularspinner.h</header>\n   <container>1</container>\n  </customwidget>\n </customwidgets>\n <resources/>\n <connections/>\n</ui>\n"
  },
  {
    "path": "plugins/UsersPlugin/settings/lockuserdialog.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2019 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"lockuserdialog.h\"\n#include \"ui_lockuserdialog.h\"\n\n#include <ttoast.h>\n\nstruct LockUserDialogPrivate {\n    UserPtr user;\n};\n\nLockUserDialog::LockUserDialog(UserPtr user, QWidget* parent) :\n    QWidget(parent),\n    ui(new Ui::LockUserDialog) {\n    ui->setupUi(this);\n    d = new LockUserDialogPrivate();\n    d->user = user;\n\n    ui->lockAccountTitleLabel->setBackButtonShown(true);\n    ui->unlockAccountTitleLabel->setBackButtonShown(true);\n\n    if (user->isLocked()) {\n        ui->stackedWidget->setCurrentWidget(ui->unlockPage);\n    } else {\n        ui->stackedWidget->setCurrentWidget(ui->lockPage);\n    }\n    ui->stackedWidget->setCurrentAnimation(tStackedWidget::Fade);\n}\n\nLockUserDialog::~LockUserDialog() {\n    delete d;\n    delete ui;\n}\n\nvoid LockUserDialog::toggleLock() {\n    ui->stackedWidget->setCurrentWidget(ui->processingPage);\n\n    d->user->setLocked(!d->user->isLocked())->then([ = ] {\n        emit done();\n    })->error([ = ](QString err) {\n        //Bail out\n        QTimer::singleShot(1000, [ = ] {\n            tToast* toast = new tToast();\n            if (d->user->isLocked()) {\n                ui->stackedWidget->setCurrentWidget(ui->unlockPage);\n                toast->setTitle(tr(\"Couldn't unlock user\"));\n            } else {\n                ui->stackedWidget->setCurrentWidget(ui->lockPage);\n                toast->setTitle(tr(\"Couldn't lock user\"));\n            }\n            toast->setText(err);\n            connect(toast, &tToast::dismissed, toast, &tToast::deleteLater);\n            toast->show(this);\n        });\n    });\n}\n\nvoid LockUserDialog::on_lockButton_clicked() {\n    this->toggleLock();\n}\n\nvoid LockUserDialog::on_unlockButton_clicked() {\n    this->toggleLock();\n}\n\nvoid LockUserDialog::on_lockAccountTitleLabel_backButtonClicked() {\n    emit done();\n}\n\nvoid LockUserDialog::on_unlockAccountTitleLabel_backButtonClicked() {\n    emit done();\n}\n"
  },
  {
    "path": "plugins/UsersPlugin/settings/lockuserdialog.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2019 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef LOCKUSERDIALOG_H\n#define LOCKUSERDIALOG_H\n\n#include <QWidget>\n#include \"user.h\"\n\nnamespace Ui {\n    class LockUserDialog;\n}\n\nstruct LockUserDialogPrivate;\nclass LockUserDialog : public QWidget {\n        Q_OBJECT\n\n    public:\n        explicit LockUserDialog(UserPtr user, QWidget* parent = nullptr);\n        ~LockUserDialog();\n\n    private slots:\n        void on_lockButton_clicked();\n\n        void on_unlockButton_clicked();\n\n        void on_lockAccountTitleLabel_backButtonClicked();\n\n        void on_unlockAccountTitleLabel_backButtonClicked();\n\n    signals:\n        void done();\n\n    private:\n        Ui::LockUserDialog* ui;\n        LockUserDialogPrivate* d;\n\n        void toggleLock();\n};\n\n#endif // LOCKUSERDIALOG_H\n"
  },
  {
    "path": "plugins/UsersPlugin/settings/lockuserdialog.ui",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ui version=\"4.0\">\n <class>LockUserDialog</class>\n <widget class=\"QWidget\" name=\"LockUserDialog\">\n  <property name=\"geometry\">\n   <rect>\n    <x>0</x>\n    <y>0</y>\n    <width>400</width>\n    <height>530</height>\n   </rect>\n  </property>\n  <property name=\"windowTitle\">\n   <string notr=\"true\">Form</string>\n  </property>\n  <layout class=\"QVBoxLayout\" name=\"verticalLayout\">\n   <property name=\"spacing\">\n    <number>0</number>\n   </property>\n   <property name=\"leftMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"topMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"rightMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"bottomMargin\">\n    <number>0</number>\n   </property>\n   <item>\n    <widget class=\"tStackedWidget\" name=\"stackedWidget\">\n     <property name=\"currentIndex\">\n      <number>0</number>\n     </property>\n     <widget class=\"QWidget\" name=\"lockPage\">\n      <layout class=\"QVBoxLayout\" name=\"verticalLayout_7\">\n       <property name=\"spacing\">\n        <number>0</number>\n       </property>\n       <property name=\"leftMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"topMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"rightMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"bottomMargin\">\n        <number>0</number>\n       </property>\n       <item>\n        <layout class=\"QHBoxLayout\" name=\"horizontalLayout\">\n         <property name=\"spacing\">\n          <number>0</number>\n         </property>\n         <item>\n          <widget class=\"tTitleLabel\" name=\"lockAccountTitleLabel\">\n           <property name=\"sizePolicy\">\n            <sizepolicy hsizetype=\"Expanding\" vsizetype=\"Preferred\">\n             <horstretch>0</horstretch>\n             <verstretch>0</verstretch>\n            </sizepolicy>\n           </property>\n           <property name=\"text\">\n            <string>Lock Account</string>\n           </property>\n          </widget>\n         </item>\n        </layout>\n       </item>\n       <item>\n        <widget class=\"QLabel\" name=\"label_29\">\n         <property name=\"text\">\n          <string>After locking this account, you won't be able to log in as this account.</string>\n         </property>\n         <property name=\"wordWrap\">\n          <bool>true</bool>\n         </property>\n         <property name=\"margin\">\n          <number>9</number>\n         </property>\n        </widget>\n       </item>\n       <item>\n        <widget class=\"QPushButton\" name=\"lockButton\">\n         <property name=\"text\">\n          <string>Lock Account</string>\n         </property>\n        </widget>\n       </item>\n       <item>\n        <spacer name=\"verticalSpacer_6\">\n         <property name=\"orientation\">\n          <enum>Qt::Vertical</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>20</width>\n           <height>40</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n      </layout>\n     </widget>\n     <widget class=\"QWidget\" name=\"unlockPage\">\n      <layout class=\"QVBoxLayout\" name=\"verticalLayout_2\">\n       <property name=\"spacing\">\n        <number>0</number>\n       </property>\n       <property name=\"leftMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"topMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"rightMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"bottomMargin\">\n        <number>0</number>\n       </property>\n       <item>\n        <layout class=\"QHBoxLayout\" name=\"horizontalLayout_2\">\n         <property name=\"spacing\">\n          <number>0</number>\n         </property>\n         <item>\n          <widget class=\"tTitleLabel\" name=\"unlockAccountTitleLabel\">\n           <property name=\"sizePolicy\">\n            <sizepolicy hsizetype=\"Expanding\" vsizetype=\"Preferred\">\n             <horstretch>0</horstretch>\n             <verstretch>0</verstretch>\n            </sizepolicy>\n           </property>\n           <property name=\"text\">\n            <string>Unlock Account</string>\n           </property>\n          </widget>\n         </item>\n        </layout>\n       </item>\n       <item>\n        <widget class=\"QLabel\" name=\"label_30\">\n         <property name=\"text\">\n          <string>After unlocking this account, you'll be able to log in as this account.</string>\n         </property>\n         <property name=\"wordWrap\">\n          <bool>true</bool>\n         </property>\n         <property name=\"margin\">\n          <number>9</number>\n         </property>\n        </widget>\n       </item>\n       <item>\n        <widget class=\"QPushButton\" name=\"unlockButton\">\n         <property name=\"text\">\n          <string>Unlock Account</string>\n         </property>\n        </widget>\n       </item>\n       <item>\n        <spacer name=\"verticalSpacer_9\">\n         <property name=\"orientation\">\n          <enum>Qt::Vertical</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>20</width>\n           <height>382</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n      </layout>\n     </widget>\n     <widget class=\"QWidget\" name=\"processingPage\">\n      <layout class=\"QGridLayout\" name=\"gridLayout_7\">\n       <item row=\"0\" column=\"1\">\n        <spacer name=\"verticalSpacer_8\">\n         <property name=\"orientation\">\n          <enum>Qt::Vertical</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>20</width>\n           <height>204</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n       <item row=\"1\" column=\"0\">\n        <spacer name=\"horizontalSpacer_3\">\n         <property name=\"orientation\">\n          <enum>Qt::Horizontal</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>171</width>\n           <height>20</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n       <item row=\"1\" column=\"1\">\n        <widget class=\"tCircularSpinner\" name=\"widget_2\" native=\"true\"/>\n       </item>\n       <item row=\"1\" column=\"2\">\n        <spacer name=\"horizontalSpacer_4\">\n         <property name=\"orientation\">\n          <enum>Qt::Horizontal</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>170</width>\n           <height>20</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n       <item row=\"2\" column=\"1\">\n        <spacer name=\"verticalSpacer_7\">\n         <property name=\"orientation\">\n          <enum>Qt::Vertical</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>20</width>\n           <height>203</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n      </layout>\n     </widget>\n    </widget>\n   </item>\n  </layout>\n </widget>\n <customwidgets>\n  <customwidget>\n   <class>tTitleLabel</class>\n   <extends>QLabel</extends>\n   <header location=\"global\">ttitlelabel.h</header>\n   <slots>\n    <signal>backButtonClicked()</signal>\n   </slots>\n  </customwidget>\n  <customwidget>\n   <class>tStackedWidget</class>\n   <extends>QStackedWidget</extends>\n   <header location=\"global\">tstackedwidget.h</header>\n   <container>1</container>\n   <slots>\n    <signal>switchingFrame(int)</signal>\n   </slots>\n  </customwidget>\n  <customwidget>\n   <class>tCircularSpinner</class>\n   <extends>QWidget</extends>\n   <header location=\"global\">tcircularspinner.h</header>\n   <container>1</container>\n  </customwidget>\n </customwidgets>\n <resources/>\n <connections/>\n</ui>\n"
  },
  {
    "path": "plugins/UsersPlugin/settings/user.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2019 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"user.h\"\n\n#include <QCoroDBusPendingCall>\n#include <QDBusInterface>\n#include <unistd.h>\n\nT_EXCEPTION_IMPL(UserManipulationException)\n\nstruct UserPrivate {\n        QDBusInterface* interface;\n\n        qulonglong uid;\n        QString realName;\n        QString userName;\n        QString displayName;\n        User::UserType userType;\n\n        bool locked;\n};\n\nUser::User(QDBusObjectPath path, QObject* parent) :\n    QObject(parent) {\n    d = new UserPrivate();\n    d->interface = new QDBusInterface(\"org.freedesktop.Accounts\", path.path(), \"org.freedesktop.Accounts.User\", QDBusConnection::systemBus());\n\n    QDBusConnection::systemBus().connect(\"org.freedesktop.Accounts\", path.path(), \"org.freedesktop.Accounts.User\", \"Changed\", this, SLOT(changed()));\n\n    this->update();\n}\n\nUser::~User() {\n    delete d;\n}\n\nQDBusObjectPath User::path() {\n    return QDBusObjectPath(d->interface->path());\n}\n\nbool User::isCurrentUser() {\n    return d->uid == geteuid();\n}\n\nbool User::isLocked() {\n    return d->locked;\n}\n\nQString User::displayName() {\n    return d->displayName;\n}\n\nQString User::userName() {\n    return d->userName;\n}\n\nUser::UserType User::userType() {\n    return d->userType;\n}\n\nQCoro::Task<> User::setPassword(QString password, QString hint) {\n    // Crypt password\n    QRandomGenerator* rand = QRandomGenerator::global();\n    QByteArray characters = \"0123456789ABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyz./\";\n    QByteArray salt = \"$6$\";\n    for (int i = 0; i < 16; i++) {\n        salt.append(characters.at(rand->bounded(characters.length())));\n    }\n    auto cryptedBytes = crypt(password.toUtf8().constData(), salt.constData());\n    QString crypted = QString::fromLatin1(cryptedBytes);\n\n    auto result = co_await d->interface->asyncCall(\"SetPassword\", crypted, hint);\n    if (result.type() == QDBusMessage::ErrorMessage) {\n        throw UserManipulationException(result.errorMessage());\n    }\n}\n\nQCoro::Task<> User::setPasswordMode(User::PasswordMode mode) {\n    auto result = co_await d->interface->asyncCall(\"SetPasswordMode\", static_cast<int>(mode));\n    if (result.type() == QDBusMessage::ErrorMessage) {\n        throw UserManipulationException(result.errorMessage());\n    }\n}\n\ntPromise<void>* User::setUserType(User::UserType type) {\n    return new tPromise<void>([=](std::function<void()> res, std::function<void(QString)> rej) {\n        QDBusPendingCallWatcher* watcher = new QDBusPendingCallWatcher(d->interface->asyncCall(\"SetAccountType\", static_cast<int>(type)));\n        connect(watcher, &QDBusPendingCallWatcher::finished, this, [=] {\n            if (watcher->isError()) {\n                rej(watcher->error().message());\n            } else {\n                res();\n            }\n        });\n    });\n}\n\ntPromise<void>* User::setRealName(QString realName) {\n    return new tPromise<void>([=](std::function<void()> res, std::function<void(QString)> rej) {\n        QDBusPendingCallWatcher* watcher = new QDBusPendingCallWatcher(d->interface->asyncCall(\"SetRealName\", realName));\n        connect(watcher, &QDBusPendingCallWatcher::finished, this, [=] {\n            if (watcher->isError()) {\n                rej(watcher->error().message());\n            } else {\n                res();\n            }\n        });\n    });\n}\n\ntPromise<void>* User::setLocked(bool locked) {\n    return new tPromise<void>([=](std::function<void()> res, std::function<void(QString)> rej) {\n        QDBusPendingCallWatcher* watcher = new QDBusPendingCallWatcher(d->interface->asyncCall(\"SetLocked\", locked));\n        connect(watcher, &QDBusPendingCallWatcher::finished, this, [=] {\n            if (watcher->isError()) {\n                rej(watcher->error().message());\n            } else {\n                res();\n            }\n        });\n    });\n}\n\ntPromise<void>* User::deleteUser(bool removeFiles) {\n    return new tPromise<void>([=](std::function<void()> res, std::function<void(QString)> rej) {\n        QDBusMessage message = QDBusMessage::createMethodCall(\"org.freedesktop.Accounts\", \"/org/freedesktop/Accounts\", \"org.freedesktop.Accounts\", \"DeleteUser\");\n        message.setArguments({static_cast<qint64>(d->uid),\n            removeFiles});\n\n        QDBusPendingCallWatcher* watcher = new QDBusPendingCallWatcher(QDBusConnection::systemBus().asyncCall(message));\n        connect(watcher, &QDBusPendingCallWatcher::finished, this, [=] {\n            if (watcher->isError()) {\n                rej(watcher->error().message());\n            } else {\n                res();\n            }\n        });\n    });\n}\n\nvoid User::changed() {\n    this->update();\n    emit dataUpdated();\n}\n\nvoid User::update() {\n    d->uid = d->interface->property(\"Uid\").toULongLong();\n    d->realName = d->interface->property(\"RealName\").toString();\n    d->userName = d->interface->property(\"UserName\").toString();\n    d->locked = d->interface->property(\"Locked\").toBool();\n    d->userType = static_cast<UserType>(d->interface->property(\"AccountType\").toInt());\n\n    QString displayName = d->realName;\n    if (displayName.isEmpty()) displayName = d->userName;\n    d->displayName = displayName;\n}\n"
  },
  {
    "path": "plugins/UsersPlugin/settings/user.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2019 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef USER_H\n#define USER_H\n\n#include <QCoroTask>\n#include <QDBusObjectPath>\n#include <QObject>\n#include <QSharedPointer>\n#include <texception.h>\n#include <tpromise.h>\n\nstruct UserPrivate;\nclass User : public QObject {\n        Q_OBJECT\n    public:\n        explicit User(QDBusObjectPath path, QObject* parent = nullptr);\n        ~User();\n\n        enum PasswordMode {\n            SetPassword = 0,\n            SetAtLogin = 1,\n            NoPassword = 2\n        };\n\n        enum UserType {\n            StandardUser = 0,\n            Administrator = 1\n        };\n\n        QDBusObjectPath path();\n\n        bool isCurrentUser();\n        bool isLocked();\n        QString displayName();\n        QString userName();\n        UserType userType();\n\n    signals:\n        void dataUpdated();\n\n    public slots:\n        QCoro::Task<> setPassword(QString password, QString hint);\n        QCoro::Task<> setPasswordMode(PasswordMode mode);\n        tPromise<void>* setUserType(UserType type);\n        tPromise<void>* setRealName(QString realName);\n        tPromise<void>* setLocked(bool locked);\n        tPromise<void>* deleteUser(bool removeFiles);\n\n    private slots:\n        void changed();\n\n    private:\n        UserPrivate* d;\n\n        void update();\n};\ntypedef QSharedPointer<User> UserPtr;\nQ_DECLARE_METATYPE(UserPtr);\n\nclass UserManipulationException : public tException {\n        T_EXCEPTION(UserManipulationException)\n};\n\n#endif // USER_H\n"
  },
  {
    "path": "plugins/UsersPlugin/settings/usersmodel.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2019 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"usersmodel.h\"\n\n#include <QDBusMessage>\n#include <QDBusObjectPath>\n#include <QDBusConnection>\n#include <QDBusPendingCallWatcher>\n#include <QDBusArgument>\n#include <tpromise.h>\n#include <QDBusInterface>\n#include \"user.h\"\n\nstruct UsersModelPrivate {\n    QList<UserPtr> users;\n};\n\nUsersModel::UsersModel(QObject *parent)\n    : QAbstractListModel(parent)\n{\n    d = new UsersModelPrivate();\n\n    QDBusConnection::systemBus().connect(\"org.freedesktop.Accounts\", \"/org/freedesktop/Accounts\", \"org.freedesktop.Accounts\", \"UserAdded\", this, SLOT(userAdded(QDBusObjectPath)));\n    QDBusConnection::systemBus().connect(\"org.freedesktop.Accounts\", \"/org/freedesktop/Accounts\", \"org.freedesktop.Accounts\", \"UserDeleted\", this, SLOT(userRemoved(QDBusObjectPath)));\n\n    QDBusMessage msg = QDBusMessage::createMethodCall(\"org.freedesktop.Accounts\", \"/org/freedesktop/Accounts\", \"org.freedesktop.Accounts\", \"ListCachedUsers\");\n    QDBusPendingCallWatcher* watcher = new QDBusPendingCallWatcher(QDBusConnection::systemBus().asyncCall(msg));\n    connect(watcher, &QDBusPendingCallWatcher::finished, this, [=] {\n        QDBusArgument arg = watcher->reply().arguments().first().value<QDBusArgument>();\n        QList<QDBusObjectPath> users;\n        arg >> users;\n        for (QDBusObjectPath user : users) {\n            this->userAdded(user);\n        }\n\n        watcher->deleteLater();\n        emit dataChanged(index(0), index(rowCount()));\n    });\n}\n\nUsersModel::~UsersModel()\n{\n    delete d;\n}\n\nint UsersModel::rowCount(const QModelIndex &parent) const\n{\n    if (parent.isValid()) return 0;\n\n    return d->users.count();\n}\n\nQVariant UsersModel::data(const QModelIndex &index, int role) const\n{\n    if (!index.isValid()) return QVariant();\n\n    UserPtr u = d->users.at(index.row());\n    switch (role) {\n        case Qt::DisplayRole:\n            return u->displayName();\n        case Qt::UserRole:\n            return QVariant::fromValue(u);\n    }\n\n    return QVariant();\n}\n\nvoid UsersModel::userAdded(QDBusObjectPath path)\n{\n    UserPtr u(new User(path));\n    connect(u.data(), &User::dataUpdated, this, [=] {\n        int i = d->users.indexOf(u);\n        emit dataChanged(index(i), index(i));\n    });\n    d->users.append(u);\n    emit dataChanged(index(0), index(rowCount()));\n}\n\nvoid UsersModel::userRemoved(QDBusObjectPath path)\n{\n    for (UserPtr u : d->users) {\n        if (u->path() == path) {\n            d->users.removeOne(u);\n            emit dataChanged(index(0), index(rowCount()));\n            return;\n        }\n    }\n}\n"
  },
  {
    "path": "plugins/UsersPlugin/settings/usersmodel.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2019 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef USERSMODEL_H\n#define USERSMODEL_H\n\n#include <QAbstractListModel>\n#include <QDBusObjectPath>\n\nstruct UsersModelPrivate;\nclass UsersModel : public QAbstractListModel\n{\n        Q_OBJECT\n\n    public:\n        explicit UsersModel(QObject *parent = nullptr);\n        ~UsersModel() override;\n\n        // Basic functionality:\n        int rowCount(const QModelIndex &parent = QModelIndex()) const override;\n\n        QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;\n\n    private slots:\n        void userAdded(QDBusObjectPath path);\n        void userRemoved(QDBusObjectPath path);\n\n    private:\n        UsersModelPrivate* d;\n\n};\n\n#endif // USERSMODEL_H\n"
  },
  {
    "path": "plugins/UsersPlugin/settings/userspane.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2019 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"userspane.h\"\n#include \"ui_userspane.h\"\n\n#include \"adduserdialog.h\"\n#include \"changepassworddialog.h\"\n#include \"changerealnamedialog.h\"\n#include \"deleteuserdialog.h\"\n#include \"lockuserdialog.h\"\n#include \"user.h\"\n#include \"usersmodel.h\"\n#include \"usertypedialog.h\"\n#include <tpopover.h>\n#include <ttoast.h>\n\n#include <statemanager.h>\n#include <statuscentermanager.h>\n\n#ifdef HAVE_POLKITQT\n    #include <PolkitQt1/Authority>\n#endif\n\nstruct UsersPanePrivate {\n        UserPtr currentUser;\n};\n\nUsersPane::UsersPane() :\n    StatusCenterPane(),\n    ui(new Ui::UsersPane) {\n    ui->setupUi(this);\n    d = new UsersPanePrivate();\n\n    ui->leftPane->setParent(nullptr);\n\n    ui->usernameTitleLabel->setBackButtonShown(true);\n    ui->usernameTitleLabel->setBackButtonShown(StateManager::instance()->statusCenterManager()->isHamburgerMenuRequired());\n    connect(StateManager::instance()->statusCenterManager(), &StatusCenterManager::isHamburgerMenuRequiredChanged, ui->usernameTitleLabel, &tTitleLabel::setBackButtonShown);\n\n    ui->usersList->setModel(new UsersModel());\n    connect(ui->usersList->selectionModel(), &QItemSelectionModel::currentChanged, this, [=](QModelIndex newIndex, QModelIndex oldIndex) {\n        if (d->currentUser) {\n            disconnect(d->currentUser.data(), &User::dataUpdated, this, &UsersPane::currentUserChanged);\n        }\n\n        if (newIndex.isValid()) {\n            ui->stackedWidget->setCurrentWidget(ui->userPane);\n\n            d->currentUser = newIndex.data(Qt::UserRole).value<UserPtr>();\n            connect(d->currentUser.data(), &User::dataUpdated, this, &UsersPane::currentUserChanged);\n            this->currentUserChanged();\n        } else {\n            d->currentUser = nullptr;\n            ui->stackedWidget->setCurrentWidget(ui->noUserPane);\n        }\n    });\n\n    const int contentWidth = StateManager::instance()->statusCenterManager()->preferredContentWidth();\n    ui->userActionsWidget->setFixedWidth(contentWidth);\n    ui->userDangerActionsWidget->setFixedWidth(contentWidth);\n    ui->usernameLabel->setFixedWidth(contentWidth);\n\n    ui->deleteUserButton->setProperty(\"type\", \"destructive\");\n}\n\nUsersPane::~UsersPane() {\n    delete d;\n    delete ui;\n}\n\nvoid UsersPane::on_mainMenuButton_clicked() {\n    StateManager::instance()->statusCenterManager()->returnToRootMenu();\n}\n\nvoid UsersPane::currentUserChanged() {\n    ui->usernameTitleLabel->setText(d->currentUser->displayName());\n    ui->usernameLabel->setText(tr(\"Username: %1\").arg(d->currentUser->userName()));\n\n    if (d->currentUser->isLocked()) {\n        ui->lockUserButton->setText(tr(\"Unlock User\"));\n    } else {\n        ui->lockUserButton->setText(tr(\"Lock User\"));\n    }\n}\n\nvoid UsersPane::on_addButton_clicked() {\n    this->checkPolkit(false)->then([=] {\n        AddUserDialog* d = new AddUserDialog();\n        tPopover* popover = new tPopover(d);\n        popover->setPopoverWidth(SC_DPI(600));\n        popover->setDismissable(false);\n        connect(d, &AddUserDialog::done, popover, &tPopover::dismiss);\n        connect(popover, &tPopover::dismissed, d, &AddUserDialog::deleteLater);\n        connect(popover, &tPopover::dismissed, popover, &tPopover::deleteLater);\n        popover->show(this->window());\n    });\n}\n\ntPromise<void>* UsersPane::checkPolkit(bool isOwnUser) {\n    tPromise<void>* promise = new tPromise<void>([=](QString& error) {\n        QString auth;\n        if (isOwnUser) {\n            auth = \"org.freedesktop.accounts.change-own-user-data\";\n        } else {\n            auth = \"org.freedesktop.accounts.user-administration\";\n        }\n\n#ifdef HAVE_POLKITQT\n        // Check Polkit authorization\n        PolkitQt1::Authority::Result r = PolkitQt1::Authority::instance()->checkAuthorizationSync(auth, PolkitQt1::UnixProcessSubject(QApplication::applicationPid()), PolkitQt1::Authority::None);\n        if (r == PolkitQt1::Authority::No) {\n            error = \"not-allowed\";\n            return;\n        } else if (r == PolkitQt1::Authority::Challenge) {\n            PolkitQt1::Authority::Result r = PolkitQt1::Authority::instance()->checkAuthorizationSync(auth, PolkitQt1::UnixProcessSubject(QApplication::applicationPid()), PolkitQt1::Authority::AllowUserInteraction);\n            if (r != PolkitQt1::Authority::Yes) {\n                error = \"challenge-failed\";\n                return;\n            }\n        }\n#endif\n    });\n    promise->error([=](QString err) {\n        if (err == \"not-allowed\") {\n            tToast* toast = new tToast();\n            toast->setTitle(tr(\"Unauthorized\"));\n            toast->setText(tr(\"Polkit does not allow you to manage users on the system.\"));\n            connect(toast, &tToast::dismissed, toast, &tToast::deleteLater);\n            toast->show(this);\n        }\n    });\n    return promise;\n}\n\nvoid UsersPane::on_deleteUserButton_clicked() {\n    this->checkPolkit(false)->then([=] {\n        DeleteUserDialog* d = new DeleteUserDialog(this->d->currentUser);\n        tPopover* popover = new tPopover(d);\n        popover->setPopoverWidth(SC_DPI(600));\n        popover->setDismissable(false);\n        connect(d, &DeleteUserDialog::done, popover, &tPopover::dismiss);\n        connect(popover, &tPopover::dismissed, d, &DeleteUserDialog::deleteLater);\n        connect(popover, &tPopover::dismissed, popover, &tPopover::deleteLater);\n        popover->show(this->window());\n    });\n}\n\nvoid UsersPane::on_changePasswordButton_clicked() {\n    this->checkPolkit(d->currentUser->isCurrentUser())->then([=] {\n        ChangePasswordDialog* d = new ChangePasswordDialog(this->d->currentUser);\n        tPopover* popover = new tPopover(d);\n        popover->setPopoverWidth(SC_DPI(600));\n        popover->setDismissable(false);\n        connect(d, &ChangePasswordDialog::done, popover, &tPopover::dismiss);\n        connect(popover, &tPopover::dismissed, d, &ChangePasswordDialog::deleteLater);\n        connect(popover, &tPopover::dismissed, popover, &tPopover::deleteLater);\n        popover->show(this->window());\n    });\n}\n\nvoid UsersPane::on_changeUserTypeButton_clicked() {\n    this->checkPolkit(d->currentUser->isCurrentUser())->then([=] {\n        UserTypeDialog* d = new UserTypeDialog(this->d->currentUser);\n        tPopover* popover = new tPopover(d);\n        popover->setPopoverWidth(SC_DPI(600));\n        popover->setDismissable(false);\n        connect(d, &UserTypeDialog::done, popover, &tPopover::dismiss);\n        connect(popover, &tPopover::dismissed, d, &UserTypeDialog::deleteLater);\n        connect(popover, &tPopover::dismissed, popover, &tPopover::deleteLater);\n        popover->show(this->window());\n    });\n}\n\nvoid UsersPane::on_changeRealNameButton_clicked() {\n    this->checkPolkit(d->currentUser->isCurrentUser())->then([=] {\n        ChangeRealNameDialog* d = new ChangeRealNameDialog(this->d->currentUser);\n        tPopover* popover = new tPopover(d);\n        popover->setPopoverWidth(SC_DPI(600));\n        popover->setDismissable(false);\n        connect(d, &ChangeRealNameDialog::done, popover, &tPopover::dismiss);\n        connect(popover, &tPopover::dismissed, d, &ChangeRealNameDialog::deleteLater);\n        connect(popover, &tPopover::dismissed, popover, &tPopover::deleteLater);\n        popover->show(this->window());\n    });\n}\n\nvoid UsersPane::on_lockUserButton_clicked() {\n    this->checkPolkit(false)->then([=] {\n        LockUserDialog* d = new LockUserDialog(this->d->currentUser);\n        tPopover* popover = new tPopover(d);\n        popover->setPopoverWidth(SC_DPI(600));\n        popover->setDismissable(false);\n        connect(d, &LockUserDialog::done, popover, &tPopover::dismiss);\n        connect(popover, &tPopover::dismissed, d, &LockUserDialog::deleteLater);\n        connect(popover, &tPopover::dismissed, popover, &tPopover::deleteLater);\n        popover->show(this->window());\n    });\n}\n\nQString UsersPane::name() {\n    return \"UsersSettings\";\n}\n\nQString UsersPane::displayName() {\n    return tr(\"Users\");\n}\n\nQIcon UsersPane::icon() {\n    return QIcon::fromTheme(\"preferences-desktop-user\");\n}\n\nQWidget* UsersPane::leftPane() {\n    return ui->leftPane;\n}\n\nvoid UsersPane::on_usernameTitleLabel_backButtonClicked() {\n    StateManager::instance()->statusCenterManager()->showStatusCenterHamburgerMenu();\n}\n\nvoid UsersPane::changeEvent(QEvent* event) {\n    if (event->type() == QEvent::LanguageChange) {\n        ui->retranslateUi(this);\n        emit displayNameChanged();\n    }\n}\n"
  },
  {
    "path": "plugins/UsersPlugin/settings/userspane.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2019 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef USERSPANE_H\n#define USERSPANE_H\n\n#include <QWidget>\n#include <tpromise.h>\n#include <statuscenterpane.h>\n\nnamespace Ui {\n    class UsersPane;\n}\n\nstruct UsersPanePrivate;\nclass UsersPane : public StatusCenterPane {\n        Q_OBJECT\n\n    public:\n        explicit UsersPane();\n        ~UsersPane();\n\n    private slots:\n        void on_mainMenuButton_clicked();\n\n        void on_addButton_clicked();\n\n        void on_deleteUserButton_clicked();\n\n        void on_changePasswordButton_clicked();\n\n        void on_changeUserTypeButton_clicked();\n\n        void on_changeRealNameButton_clicked();\n\n        void on_lockUserButton_clicked();\n\n        void on_usernameTitleLabel_backButtonClicked();\n\n    private:\n        Ui::UsersPane* ui;\n        UsersPanePrivate* d;\n\n        void changeEvent(QEvent* event);\n\n        tPromise<void>* checkPolkit(bool isOwnUser);\n        void currentUserChanged();\n\n        // StatusCenterPane interface\n    public:\n        QString name();\n        QString displayName();\n        QIcon icon();\n        QWidget* leftPane();\n\n};\n\n#endif // USERSPANE_H\n"
  },
  {
    "path": "plugins/UsersPlugin/settings/userspane.ui",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ui version=\"4.0\">\n <class>UsersPane</class>\n <widget class=\"QWidget\" name=\"UsersPane\">\n  <property name=\"geometry\">\n   <rect>\n    <x>0</x>\n    <y>0</y>\n    <width>708</width>\n    <height>418</height>\n   </rect>\n  </property>\n  <property name=\"windowTitle\">\n   <string notr=\"true\">Form</string>\n  </property>\n  <layout class=\"QHBoxLayout\" name=\"horizontalLayout\">\n   <property name=\"spacing\">\n    <number>0</number>\n   </property>\n   <property name=\"leftMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"topMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"rightMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"bottomMargin\">\n    <number>0</number>\n   </property>\n   <item>\n    <widget class=\"QWidget\" name=\"leftPane\" native=\"true\">\n     <layout class=\"QVBoxLayout\" name=\"verticalLayout\">\n      <property name=\"spacing\">\n       <number>0</number>\n      </property>\n      <property name=\"leftMargin\">\n       <number>0</number>\n      </property>\n      <property name=\"topMargin\">\n       <number>0</number>\n      </property>\n      <property name=\"rightMargin\">\n       <number>0</number>\n      </property>\n      <property name=\"bottomMargin\">\n       <number>0</number>\n      </property>\n      <item>\n       <layout class=\"QHBoxLayout\" name=\"horizontalLayout_2\">\n        <property name=\"spacing\">\n         <number>0</number>\n        </property>\n        <item>\n         <widget class=\"QToolButton\" name=\"mainMenuButton\">\n          <property name=\"sizePolicy\">\n           <sizepolicy hsizetype=\"Preferred\" vsizetype=\"Preferred\">\n            <horstretch>0</horstretch>\n            <verstretch>0</verstretch>\n           </sizepolicy>\n          </property>\n          <property name=\"text\">\n           <string/>\n          </property>\n          <property name=\"icon\">\n           <iconset theme=\"go-previous\">\n            <normaloff>../PulseaudioPane</normaloff>../PulseaudioPane</iconset>\n          </property>\n          <property name=\"autoRaise\">\n           <bool>true</bool>\n          </property>\n         </widget>\n        </item>\n        <item>\n         <widget class=\"QLabel\" name=\"label\">\n          <property name=\"sizePolicy\">\n           <sizepolicy hsizetype=\"Expanding\" vsizetype=\"Preferred\">\n            <horstretch>0</horstretch>\n            <verstretch>0</verstretch>\n           </sizepolicy>\n          </property>\n          <property name=\"font\">\n           <font>\n            <pointsize>15</pointsize>\n           </font>\n          </property>\n          <property name=\"text\">\n           <string>Users</string>\n          </property>\n          <property name=\"margin\">\n           <number>9</number>\n          </property>\n         </widget>\n        </item>\n        <item>\n         <widget class=\"QToolButton\" name=\"addButton\">\n          <property name=\"sizePolicy\">\n           <sizepolicy hsizetype=\"Preferred\" vsizetype=\"Preferred\">\n            <horstretch>0</horstretch>\n            <verstretch>0</verstretch>\n           </sizepolicy>\n          </property>\n          <property name=\"toolTip\">\n           <string>New User</string>\n          </property>\n          <property name=\"text\">\n           <string/>\n          </property>\n          <property name=\"icon\">\n           <iconset theme=\"list-add\">\n            <normaloff>../PulseaudioPane</normaloff>../PulseaudioPane</iconset>\n          </property>\n          <property name=\"autoRaise\">\n           <bool>true</bool>\n          </property>\n         </widget>\n        </item>\n       </layout>\n      </item>\n      <item>\n       <widget class=\"Line\" name=\"line\">\n        <property name=\"maximumSize\">\n         <size>\n          <width>16777215</width>\n          <height>1</height>\n         </size>\n        </property>\n        <property name=\"orientation\">\n         <enum>Qt::Horizontal</enum>\n        </property>\n       </widget>\n      </item>\n      <item>\n       <widget class=\"QListView\" name=\"usersList\">\n        <property name=\"frameShape\">\n         <enum>QFrame::NoFrame</enum>\n        </property>\n       </widget>\n      </item>\n     </layout>\n    </widget>\n   </item>\n   <item>\n    <widget class=\"QStackedWidget\" name=\"stackedWidget\">\n     <property name=\"currentIndex\">\n      <number>0</number>\n     </property>\n     <widget class=\"QWidget\" name=\"noUserPane\">\n      <layout class=\"QVBoxLayout\" name=\"verticalLayout_2\">\n       <item>\n        <spacer name=\"verticalSpacer\">\n         <property name=\"orientation\">\n          <enum>Qt::Vertical</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>20</width>\n           <height>163</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n       <item>\n        <widget class=\"QLabel\" name=\"label_2\">\n         <property name=\"font\">\n          <font>\n           <pointsize>20</pointsize>\n          </font>\n         </property>\n         <property name=\"text\">\n          <string>No User Selected</string>\n         </property>\n         <property name=\"alignment\">\n          <set>Qt::AlignCenter</set>\n         </property>\n        </widget>\n       </item>\n       <item>\n        <widget class=\"QLabel\" name=\"label_3\">\n         <property name=\"text\">\n          <string>Select a user to get started</string>\n         </property>\n         <property name=\"alignment\">\n          <set>Qt::AlignCenter</set>\n         </property>\n        </widget>\n       </item>\n       <item>\n        <spacer name=\"verticalSpacer_2\">\n         <property name=\"orientation\">\n          <enum>Qt::Vertical</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>20</width>\n           <height>163</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n      </layout>\n     </widget>\n     <widget class=\"QWidget\" name=\"userPane\">\n      <layout class=\"QVBoxLayout\" name=\"verticalLayout_3\">\n       <property name=\"spacing\">\n        <number>0</number>\n       </property>\n       <property name=\"leftMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"topMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"rightMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"bottomMargin\">\n        <number>0</number>\n       </property>\n       <item>\n        <widget class=\"tTitleLabel\" name=\"usernameTitleLabel\">\n         <property name=\"text\">\n          <string notr=\"true\">Title</string>\n         </property>\n        </widget>\n       </item>\n       <item>\n        <widget class=\"QScrollArea\" name=\"scrollArea\">\n         <property name=\"frameShape\">\n          <enum>QFrame::NoFrame</enum>\n         </property>\n         <property name=\"widgetResizable\">\n          <bool>true</bool>\n         </property>\n         <widget class=\"QWidget\" name=\"scrollAreaWidgetContents\">\n          <property name=\"geometry\">\n           <rect>\n            <x>0</x>\n            <y>0</y>\n            <width>354</width>\n            <height>401</height>\n           </rect>\n          </property>\n          <layout class=\"QVBoxLayout\" name=\"verticalLayout_4\">\n           <property name=\"spacing\">\n            <number>0</number>\n           </property>\n           <property name=\"leftMargin\">\n            <number>0</number>\n           </property>\n           <property name=\"topMargin\">\n            <number>0</number>\n           </property>\n           <property name=\"rightMargin\">\n            <number>0</number>\n           </property>\n           <property name=\"bottomMargin\">\n            <number>0</number>\n           </property>\n           <item alignment=\"Qt::AlignHCenter\">\n            <widget class=\"QWidget\" name=\"userActionsWidget\" native=\"true\">\n             <layout class=\"QVBoxLayout\" name=\"verticalLayout_5\">\n              <property name=\"spacing\">\n               <number>0</number>\n              </property>\n              <property name=\"leftMargin\">\n               <number>0</number>\n              </property>\n              <property name=\"topMargin\">\n               <number>0</number>\n              </property>\n              <property name=\"rightMargin\">\n               <number>0</number>\n              </property>\n              <property name=\"bottomMargin\">\n               <number>0</number>\n              </property>\n              <item>\n               <widget class=\"QLabel\" name=\"label_4\">\n                <property name=\"font\">\n                 <font>\n                  <weight>75</weight>\n                  <bold>true</bold>\n                 </font>\n                </property>\n                <property name=\"text\">\n                 <string>ACTIONS</string>\n                </property>\n                <property name=\"margin\">\n                 <number>9</number>\n                </property>\n               </widget>\n              </item>\n              <item>\n               <widget class=\"QPushButton\" name=\"changeRealNameButton\">\n                <property name=\"text\">\n                 <string>Change Real Name</string>\n                </property>\n               </widget>\n              </item>\n              <item>\n               <widget class=\"QPushButton\" name=\"changePasswordButton\">\n                <property name=\"text\">\n                 <string>Change Password</string>\n                </property>\n               </widget>\n              </item>\n              <item>\n               <widget class=\"QPushButton\" name=\"changeUserTypeButton\">\n                <property name=\"text\">\n                 <string>Change User Type</string>\n                </property>\n               </widget>\n              </item>\n             </layout>\n            </widget>\n           </item>\n           <item>\n            <widget class=\"Line\" name=\"line_2\">\n             <property name=\"maximumSize\">\n              <size>\n               <width>16777215</width>\n               <height>1</height>\n              </size>\n             </property>\n             <property name=\"orientation\">\n              <enum>Qt::Horizontal</enum>\n             </property>\n            </widget>\n           </item>\n           <item alignment=\"Qt::AlignHCenter\">\n            <widget class=\"QWidget\" name=\"userDangerActionsWidget\" native=\"true\">\n             <layout class=\"QVBoxLayout\" name=\"verticalLayout_6\">\n              <property name=\"spacing\">\n               <number>0</number>\n              </property>\n              <property name=\"leftMargin\">\n               <number>0</number>\n              </property>\n              <property name=\"topMargin\">\n               <number>0</number>\n              </property>\n              <property name=\"rightMargin\">\n               <number>0</number>\n              </property>\n              <property name=\"bottomMargin\">\n               <number>0</number>\n              </property>\n              <item>\n               <widget class=\"QLabel\" name=\"label_5\">\n                <property name=\"font\">\n                 <font>\n                  <weight>75</weight>\n                  <bold>true</bold>\n                 </font>\n                </property>\n                <property name=\"text\">\n                 <string>DANGER</string>\n                </property>\n                <property name=\"margin\">\n                 <number>9</number>\n                </property>\n               </widget>\n              </item>\n              <item>\n               <widget class=\"QPushButton\" name=\"lockUserButton\">\n                <property name=\"text\">\n                 <string notr=\"true\">Lock User</string>\n                </property>\n               </widget>\n              </item>\n              <item>\n               <widget class=\"QPushButton\" name=\"deleteUserButton\">\n                <property name=\"text\">\n                 <string>Delete User</string>\n                </property>\n               </widget>\n              </item>\n             </layout>\n            </widget>\n           </item>\n           <item alignment=\"Qt::AlignHCenter\">\n            <widget class=\"QLabel\" name=\"usernameLabel\">\n             <property name=\"text\">\n              <string notr=\"true\">Username: title</string>\n             </property>\n             <property name=\"margin\">\n              <number>9</number>\n             </property>\n            </widget>\n           </item>\n           <item>\n            <spacer name=\"verticalSpacer_3\">\n             <property name=\"orientation\">\n              <enum>Qt::Vertical</enum>\n             </property>\n             <property name=\"sizeHint\" stdset=\"0\">\n              <size>\n               <width>20</width>\n               <height>0</height>\n              </size>\n             </property>\n            </spacer>\n           </item>\n          </layout>\n         </widget>\n        </widget>\n       </item>\n      </layout>\n     </widget>\n    </widget>\n   </item>\n  </layout>\n </widget>\n <customwidgets>\n  <customwidget>\n   <class>tTitleLabel</class>\n   <extends>QLabel</extends>\n   <header location=\"global\">ttitlelabel.h</header>\n   <slots>\n    <signal>backButtonClicked()</signal>\n   </slots>\n  </customwidget>\n </customwidgets>\n <resources/>\n <connections/>\n</ui>\n"
  },
  {
    "path": "plugins/UsersPlugin/settings/usertypedialog.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2019 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"usertypedialog.h\"\n#include \"ui_usertypedialog.h\"\n\n#include <ttoast.h>\n\nstruct UserTypeDialogPrivate {\n    UserPtr user;\n};\n\nUserTypeDialog::UserTypeDialog(UserPtr user, QWidget *parent) :\n    QWidget(parent),\n    ui(new Ui::UserTypeDialog)\n{\n    ui->setupUi(this);\n    d = new UserTypeDialogPrivate();\n    d->user = user;\n\n    ui->stackedWidget->setCurrentAnimation(tStackedWidget::Fade);\n\n    if (user->userType() == User::Administrator) {\n        ui->administratorButton->setChecked(true);\n    } else {\n        ui->standardUserButton->setChecked(true);\n    }\n}\n\nUserTypeDialog::~UserTypeDialog()\n{\n    delete d;\n    delete ui;\n}\n\nvoid UserTypeDialog::on_backButton_clicked()\n{\n    emit done();\n}\n\nvoid UserTypeDialog::on_standardUserButton_clicked()\n{\n    //Set the user type\n    this->setUserType(User::StandardUser);\n}\n\nvoid UserTypeDialog::on_administratorButton_clicked()\n{\n    //Set the user type\n    this->setUserType(User::Administrator);\n}\n\nvoid UserTypeDialog::setUserType(User::UserType type)\n{\n    if (d->user->userType() == type) {\n        emit done();\n        return;\n    }\n\n    //Set the user's account type\n    ui->stackedWidget->setCurrentWidget(ui->processingPage);\n\n    d->user->setUserType(type)->then([=] {\n        emit done();\n    })->error([=](QString err) {\n        //Bail out\n        QTimer::singleShot(1000, [=] {\n            ui->stackedWidget->setCurrentWidget(ui->setAccountTypePage);\n\n            tToast* toast = new tToast();\n            toast->setTitle(tr(\"Couldn't set user type\"));\n            toast->setText(err);\n            connect(toast, &tToast::dismissed, toast, &tToast::deleteLater);\n            toast->show(this);\n        });\n    });\n}\n"
  },
  {
    "path": "plugins/UsersPlugin/settings/usertypedialog.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2019 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef USERTYPEDIALOG_H\n#define USERTYPEDIALOG_H\n\n#include <QWidget>\n#include \"user.h\"\n\nnamespace Ui {\n    class UserTypeDialog;\n}\n\nstruct UserTypeDialogPrivate;\nclass UserTypeDialog : public QWidget\n{\n        Q_OBJECT\n\n    public:\n        explicit UserTypeDialog(UserPtr user, QWidget *parent = nullptr);\n        ~UserTypeDialog();\n\n    private slots:\n        void on_backButton_clicked();\n\n        void on_standardUserButton_clicked();\n\n        void on_administratorButton_clicked();\n\n    signals:\n        void done();\n\n    private:\n        Ui::UserTypeDialog *ui;\n        UserTypeDialogPrivate* d;\n\n        void setUserType(User::UserType type);\n};\n\n#endif // USERTYPEDIALOG_H\n"
  },
  {
    "path": "plugins/UsersPlugin/settings/usertypedialog.ui",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ui version=\"4.0\">\n <class>UserTypeDialog</class>\n <widget class=\"QWidget\" name=\"UserTypeDialog\">\n  <property name=\"geometry\">\n   <rect>\n    <x>0</x>\n    <y>0</y>\n    <width>535</width>\n    <height>480</height>\n   </rect>\n  </property>\n  <property name=\"windowTitle\">\n   <string notr=\"true\">Form</string>\n  </property>\n  <layout class=\"QVBoxLayout\" name=\"verticalLayout\">\n   <property name=\"spacing\">\n    <number>6</number>\n   </property>\n   <property name=\"leftMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"topMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"rightMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"bottomMargin\">\n    <number>0</number>\n   </property>\n   <item>\n    <widget class=\"tStackedWidget\" name=\"stackedWidget\">\n     <property name=\"currentIndex\">\n      <number>0</number>\n     </property>\n     <widget class=\"QWidget\" name=\"setAccountTypePage\">\n      <layout class=\"QVBoxLayout\" name=\"verticalLayout_7\">\n       <property name=\"spacing\">\n        <number>0</number>\n       </property>\n       <property name=\"leftMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"topMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"rightMargin\">\n        <number>0</number>\n       </property>\n       <property name=\"bottomMargin\">\n        <number>0</number>\n       </property>\n       <item>\n        <layout class=\"QHBoxLayout\" name=\"horizontalLayout\">\n         <property name=\"spacing\">\n          <number>0</number>\n         </property>\n         <item>\n          <widget class=\"QPushButton\" name=\"backButton\">\n           <property name=\"sizePolicy\">\n            <sizepolicy hsizetype=\"Preferred\" vsizetype=\"Preferred\">\n             <horstretch>0</horstretch>\n             <verstretch>0</verstretch>\n            </sizepolicy>\n           </property>\n           <property name=\"text\">\n            <string/>\n           </property>\n           <property name=\"icon\">\n            <iconset theme=\"go-previous\">\n             <normaloff>../PulseaudioPane</normaloff>../PulseaudioPane</iconset>\n           </property>\n           <property name=\"flat\">\n            <bool>true</bool>\n           </property>\n          </widget>\n         </item>\n         <item>\n          <widget class=\"QLabel\" name=\"label\">\n           <property name=\"sizePolicy\">\n            <sizepolicy hsizetype=\"Expanding\" vsizetype=\"Preferred\">\n             <horstretch>0</horstretch>\n             <verstretch>0</verstretch>\n            </sizepolicy>\n           </property>\n           <property name=\"font\">\n            <font>\n             <pointsize>15</pointsize>\n            </font>\n           </property>\n           <property name=\"text\">\n            <string>Change User Type</string>\n           </property>\n           <property name=\"margin\">\n            <number>9</number>\n           </property>\n          </widget>\n         </item>\n        </layout>\n       </item>\n       <item>\n        <widget class=\"Line\" name=\"line_7\">\n         <property name=\"maximumSize\">\n          <size>\n           <width>16777215</width>\n           <height>1</height>\n          </size>\n         </property>\n         <property name=\"orientation\">\n          <enum>Qt::Horizontal</enum>\n         </property>\n        </widget>\n       </item>\n       <item>\n        <layout class=\"QHBoxLayout\" name=\"horizontalLayout_2\">\n         <property name=\"spacing\">\n          <number>6</number>\n         </property>\n         <property name=\"leftMargin\">\n          <number>9</number>\n         </property>\n         <property name=\"topMargin\">\n          <number>9</number>\n         </property>\n         <property name=\"rightMargin\">\n          <number>9</number>\n         </property>\n         <property name=\"bottomMargin\">\n          <number>9</number>\n         </property>\n         <item>\n          <widget class=\"QFrame\" name=\"administratorFrame\">\n           <property name=\"frameShape\">\n            <enum>QFrame::StyledPanel</enum>\n           </property>\n           <property name=\"frameShadow\">\n            <enum>QFrame::Raised</enum>\n           </property>\n           <layout class=\"QVBoxLayout\" name=\"verticalLayout_3\">\n            <item>\n             <widget class=\"QLabel\" name=\"label_5\">\n              <property name=\"font\">\n               <font>\n                <weight>75</weight>\n                <bold>true</bold>\n               </font>\n              </property>\n              <property name=\"text\">\n               <string>ADMINISTRATOR</string>\n              </property>\n             </widget>\n            </item>\n            <item>\n             <widget class=\"QLabel\" name=\"label_7\">\n              <property name=\"text\">\n               <string>An administrator has full control over this device. They'll be able to configure systemwide settings and install software.</string>\n              </property>\n              <property name=\"wordWrap\">\n               <bool>true</bool>\n              </property>\n             </widget>\n            </item>\n            <item>\n             <widget class=\"QPushButton\" name=\"administratorButton\">\n              <property name=\"text\">\n               <string>Administrator</string>\n              </property>\n              <property name=\"checkable\">\n               <bool>true</bool>\n              </property>\n              <property name=\"autoExclusive\">\n               <bool>true</bool>\n              </property>\n             </widget>\n            </item>\n           </layout>\n          </widget>\n         </item>\n         <item>\n          <widget class=\"QFrame\" name=\"standardUserFrame\">\n           <property name=\"frameShape\">\n            <enum>QFrame::StyledPanel</enum>\n           </property>\n           <property name=\"frameShadow\">\n            <enum>QFrame::Raised</enum>\n           </property>\n           <layout class=\"QVBoxLayout\" name=\"verticalLayout_4\">\n            <item>\n             <widget class=\"QLabel\" name=\"label_6\">\n              <property name=\"font\">\n               <font>\n                <weight>75</weight>\n                <bold>true</bold>\n               </font>\n              </property>\n              <property name=\"text\">\n               <string>STANDARD USER</string>\n              </property>\n             </widget>\n            </item>\n            <item>\n             <widget class=\"QLabel\" name=\"label_8\">\n              <property name=\"text\">\n               <string>A standard user can't perform systemwide actions. They'll only be able to perform administrative actions that only affect their account.</string>\n              </property>\n              <property name=\"wordWrap\">\n               <bool>true</bool>\n              </property>\n             </widget>\n            </item>\n            <item>\n             <widget class=\"QPushButton\" name=\"standardUserButton\">\n              <property name=\"text\">\n               <string>Standard User</string>\n              </property>\n              <property name=\"checkable\">\n               <bool>true</bool>\n              </property>\n              <property name=\"autoExclusive\">\n               <bool>true</bool>\n              </property>\n             </widget>\n            </item>\n           </layout>\n          </widget>\n         </item>\n        </layout>\n       </item>\n       <item>\n        <spacer name=\"verticalSpacer_6\">\n         <property name=\"orientation\">\n          <enum>Qt::Vertical</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>20</width>\n           <height>40</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n      </layout>\n     </widget>\n     <widget class=\"QWidget\" name=\"processingPage\">\n      <layout class=\"QGridLayout\" name=\"gridLayout_7\">\n       <item row=\"0\" column=\"1\">\n        <spacer name=\"verticalSpacer_8\">\n         <property name=\"orientation\">\n          <enum>Qt::Vertical</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>20</width>\n           <height>204</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n       <item row=\"1\" column=\"0\">\n        <spacer name=\"horizontalSpacer_3\">\n         <property name=\"orientation\">\n          <enum>Qt::Horizontal</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>171</width>\n           <height>20</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n       <item row=\"1\" column=\"1\">\n        <widget class=\"tCircularSpinner\" name=\"widget_2\" native=\"true\"/>\n       </item>\n       <item row=\"1\" column=\"2\">\n        <spacer name=\"horizontalSpacer_4\">\n         <property name=\"orientation\">\n          <enum>Qt::Horizontal</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>170</width>\n           <height>20</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n       <item row=\"2\" column=\"1\">\n        <spacer name=\"verticalSpacer_7\">\n         <property name=\"orientation\">\n          <enum>Qt::Vertical</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>20</width>\n           <height>203</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n      </layout>\n     </widget>\n    </widget>\n   </item>\n  </layout>\n </widget>\n <customwidgets>\n  <customwidget>\n   <class>tStackedWidget</class>\n   <extends>QStackedWidget</extends>\n   <header location=\"global\">tstackedwidget.h</header>\n   <container>1</container>\n   <slots>\n    <signal>switchingFrame(int)</signal>\n   </slots>\n  </customwidget>\n  <customwidget>\n   <class>tCircularSpinner</class>\n   <extends>QWidget</extends>\n   <header location=\"global\">tcircularspinner.h</header>\n   <container>1</container>\n  </customwidget>\n </customwidgets>\n <resources/>\n <connections/>\n</ui>\n"
  },
  {
    "path": "plugins/UsersPlugin/thedesk-users.conf",
    "content": ""
  },
  {
    "path": "plugins/UsersPlugin/translations/ar_SA.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"sa_IN\" sourcelanguage=\"en_US\">\n<context>\n    <name>AddUserDialog</name>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"93\"/>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"629\"/>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"745\"/>\n        <source>Add User</source>\n        <translation>أضف مستخدم</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"161\"/>\n        <source>PERSONAL DETAILS</source>\n        <translation>تفاصيل شخصية</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"168\"/>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"688\"/>\n        <source>Username</source>\n        <translation>اسم المستخدم</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"175\"/>\n        <source>Full Name</source>\n        <translation>الاسم الكامل</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"188\"/>\n        <source>The username is generated based on the given full name. We recommend not changing it.</source>\n        <translation>يتم إنشاء اسم المستخدم بناءً على الاسم الكامل المحدد. نوصي ا بعدم تغييره.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"245\"/>\n        <source>ADMINISTRATOR</source>\n        <translation>مدير</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"262\"/>\n        <location filename=\"../settings/adduserdialog.cpp\" line=\"165\"/>\n        <source>Administrator</source>\n        <translation>مدير</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"293\"/>\n        <source>STANDARD USER</source>\n        <translation>مستخدم عادي</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"252\"/>\n        <source>An administrator has full control over this device. They&apos;ll be able to configure systemwide settings and install software.</source>\n        <translation>يمتلك مدير التحكم الكامل على هذا الجهاز. يستطيعون على تغيير إعدادات النظام و تحميل وتثبيت البرامج.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"300\"/>\n        <source>A standard user can&apos;t perform systemwide actions. They&apos;ll only be able to perform administrative actions that only affect their account.</source>\n        <translation>لا يمكن للمستخدم عادي تنفيذ إجراءات على مستوى المدير. لن يتمكنوا إلا من تنفيذ الإجراءات الإدارية التي تؤثر فقط على حساباهم.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"310\"/>\n        <source>Standard User</source>\n        <translation>مستخدم عادي</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"332\"/>\n        <source>USER TYPE</source>\n        <translation>نوع المستخدم</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"409\"/>\n        <source>Account Security</source>\n        <translation>أمن حساب المستخدم</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"434\"/>\n        <source>Protect this account with a password to prevent anyone else logging into it.</source>\n        <translation>قم بحماية هذا الحساب بكلمة مرور لمنع أي شخص آخر من تسجيل الدخول إلي هذا الحساب.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"474\"/>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"729\"/>\n        <source>Password</source>\n        <translation>كلمة مرور</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"488\"/>\n        <source>Confirm Password</source>\n        <translation>التأكيد من كلمة المرور</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"505\"/>\n        <source>Password Hint</source>\n        <translation>ملحوظة كلمة مرور</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"512\"/>\n        <source>If you forget your password, this will appear to help you remember.</source>\n        <translation>إذا نسيت كلمة المرور الخاصة بك، فسيظهر هذه الملحوظة لكلمة مرور لمساعدتك على التذكر.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"524\"/>\n        <source>Use this password</source>\n        <translation>استخدم كلمة المرور هذه</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"531\"/>\n        <source>Alternatively, choose one of the following options:</source>\n        <translation>غير من ذلك، تستطيع اختر أحد الخيارات التالية:</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"541\"/>\n        <source>Ask for a password on the next login</source>\n        <translation>اطلب كلمة مرور عند تسجيل الدخول التالي</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"544\"/>\n        <source>The first time the user logs in, we&apos;ll ask them for a password.</source>\n        <translation>في المرة الأولى التي يسجل فيها الحساب المستخدم الدخول، سنقوم بطلب منه كلمة مرور.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"551\"/>\n        <source>Don&apos;t set a password</source>\n        <translation>لا تضف كلمة مرور</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"554\"/>\n        <source>Anyone will be able to log into this account.</source>\n        <translation>سيتمكن أي حساب آخر من تسجيل الدخول إلى هذا الحساب.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"654\"/>\n        <source>Add this user to your system?</source>\n        <translation>أضف هذا المستخدم إلى نظام التشغيل؟</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"695\"/>\n        <source>Real Name</source>\n        <translation>الاسم الحقيقي</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"702\"/>\n        <source>User Type</source>\n        <translation>نوع المستخدم</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.cpp\" line=\"98\"/>\n        <source>Set Password</source>\n        <translation>ضبط كلمة مرور</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.cpp\" line=\"104\"/>\n        <source>Ask when logging in</source>\n        <translation>اسأل عند تسجيل الدخول</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.cpp\" line=\"110\"/>\n        <source>Not Set</source>\n        <translation>لم يتم الوضع</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.cpp\" line=\"154\"/>\n        <source>Couldn&apos;t create user</source>\n        <translation>غير قادر على إنشاء حساب المستخدم</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.cpp\" line=\"171\"/>\n        <source>Standard</source>\n        <translation>اساسي</translation>\n    </message>\n</context>\n<context>\n    <name>ChangePasswordDialog</name>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"68\"/>\n        <source>Change Password</source>\n        <translation>تغيير كلمة المرور</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"94\"/>\n        <source>Set a password to protect this account.</source>\n        <translation>قم بتعيين كلمة مرور لحماية هذا الحساب.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"237\"/>\n        <source>WARNING</source>\n        <translation>تحذير</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"244\"/>\n        <source>This account is locked. Changing the password will unlock it.</source>\n        <translation>هذا الحساب مغلق. تغيير كلمة المرور إلى هذا الحساب يلغاء قفلها.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"289\"/>\n        <source>Password</source>\n        <translation>كلمة مرور</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"303\"/>\n        <source>Confirm Password</source>\n        <translation>التأكيد من كلمة المرور</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"320\"/>\n        <source>Password Hint</source>\n        <translation>ملحوظة كلمة مرور</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"327\"/>\n        <source>If you forget your password, this will appear to help you remember.</source>\n        <translation>إذا نسيت كلمة المرور الخاصة بك، فسيظهر هذه الملحوظة لكلمة مرور لمساعدتك على التذكر.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"339\"/>\n        <source>Use this password</source>\n        <translation>استخدم كلمة المرور هذه</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"346\"/>\n        <source>Alternatively, choose one of the following options:</source>\n        <translation>غير من ذلك، تستطيع اختر أحد الخيارات التالية:</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"356\"/>\n        <source>Ask for a password on the next login</source>\n        <translation>اطلب كلمة مرور عند تسجيل الدخول التالي</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"359\"/>\n        <source>The first time the user logs in, we&apos;ll ask them for a password.</source>\n        <translation>في المرة الأولى التي يسجل فيها الحساب المستخدم الدخول، سنقوم بطلب منه كلمة مرور.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"366\"/>\n        <source>Don&apos;t set a password</source>\n        <translation>لا تضف كلمة مرور</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"369\"/>\n        <source>Anyone will be able to log into this account.</source>\n        <translation>سيتمكن أي حساب آخر من تسجيل الدخول إلى هذا الحساب.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.cpp\" line=\"72\"/>\n        <source>Couldn&apos;t set password</source>\n        <translation>غير قادر على تعيين كلمة المرور</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.cpp\" line=\"92\"/>\n        <location filename=\"../settings/changepassworddialog.cpp\" line=\"111\"/>\n        <source>Couldn&apos;t set password policy</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>ChangeRealNameDialog</name>\n    <message>\n        <location filename=\"../settings/changerealnamedialog.ui\" line=\"68\"/>\n        <source>Change Real Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changerealnamedialog.ui\" line=\"77\"/>\n        <source>Your Real Name appears on the login screen, on the Gateway and in any other location where we need to differentiate between users.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changerealnamedialog.ui\" line=\"123\"/>\n        <source>Real Name</source>\n        <translation type=\"unfinished\">الاسم الحقيقي</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changerealnamedialog.ui\" line=\"132\"/>\n        <source>Set Real Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changerealnamedialog.cpp\" line=\"64\"/>\n        <source>Couldn&apos;t set real name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>DeleteUserDialog</name>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"68\"/>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"153\"/>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"207\"/>\n        <source>Delete User</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"77\"/>\n        <source>What do you want to do with this user&apos;s files?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"90\"/>\n        <source>Delete Files</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"93\"/>\n        <source>Files for this user will be removed from this device.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"100\"/>\n        <source>Keep Files</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"103\"/>\n        <source>Files for this user will be kept in the same location.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"179\"/>\n        <source>Delete this user from this device?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"189\"/>\n        <source>Any data associated with this user will be gone forever. This includes\n- Home Directory\n- Mail Spool\n- Temporary Files</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"210\"/>\n        <source>They&apos;ll be gone forever!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.cpp\" line=\"74\"/>\n        <source>Couldn&apos;t delete user</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>LockUserDialog</name>\n    <message>\n        <location filename=\"../settings/lockuserdialog.ui\" line=\"68\"/>\n        <location filename=\"../settings/lockuserdialog.ui\" line=\"90\"/>\n        <source>Lock Account</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/lockuserdialog.ui\" line=\"77\"/>\n        <source>After locking this account, you won&apos;t be able to log in as this account.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/lockuserdialog.ui\" line=\"140\"/>\n        <location filename=\"../settings/lockuserdialog.ui\" line=\"162\"/>\n        <source>Unlock Account</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/lockuserdialog.ui\" line=\"149\"/>\n        <source>After unlocking this account, you&apos;ll be able to log in as this account.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/lockuserdialog.cpp\" line=\"63\"/>\n        <source>Couldn&apos;t unlock user</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/lockuserdialog.cpp\" line=\"66\"/>\n        <source>Couldn&apos;t lock user</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>OnboardingUsers</name>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"57\"/>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"582\"/>\n        <location filename=\"../onboarding/onboardingusers.cpp\" line=\"156\"/>\n        <source>Users</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"130\"/>\n        <source>Full Name</source>\n        <translation type=\"unfinished\">الاسم الكامل</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"137\"/>\n        <source>Username</source>\n        <translation type=\"unfinished\">اسم المستخدم</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"150\"/>\n        <source>ABOUT YOU</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"157\"/>\n        <source>The username is generated based on the given full name. We recommend not changing it.</source>\n        <translation type=\"unfinished\">يتم إنشاء اسم المستخدم بناءً على الاسم الكامل المحدد. نوصي ا بعدم تغييره.</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"199\"/>\n        <source>Password</source>\n        <translation type=\"unfinished\">كلمة مرور</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"206\"/>\n        <source>Password Hint</source>\n        <translation type=\"unfinished\">ملحوظة كلمة مرور</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"219\"/>\n        <source>YOUR PASSWORD</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"236\"/>\n        <source>Confirm Password</source>\n        <translation type=\"unfinished\">التأكيد من كلمة المرور</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"243\"/>\n        <source>Protect this account with a password to prevent anyone else logging into it.</source>\n        <translation type=\"unfinished\">قم بحماية هذا الحساب بكلمة مرور لمنع أي شخص آخر من تسجيل الدخول إلي هذا الحساب.</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"257\"/>\n        <source>If you forget your password, this will appear to help you remember.</source>\n        <translation type=\"unfinished\">إذا نسيت كلمة المرور الخاصة بك، فسيظهر هذه الملحوظة لكلمة مرور لمساعدتك على التذكر.</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"329\"/>\n        <source>ADMINISTRATOR</source>\n        <translation type=\"unfinished\">مدير</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"336\"/>\n        <source>An administrator has full control over this device. They&apos;ll be able to configure systemwide settings and install software.</source>\n        <translation type=\"unfinished\">يمتلك مدير التحكم الكامل على هذا الجهاز. يستطيعون على تغيير إعدادات النظام و تحميل وتثبيت البرامج.</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"346\"/>\n        <source>Administrator</source>\n        <translation type=\"unfinished\">مدير</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"377\"/>\n        <source>STANDARD USER</source>\n        <translation type=\"unfinished\">مستخدم عادي</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"384\"/>\n        <source>A standard user can&apos;t perform systemwide actions. They&apos;ll only be able to perform administrative actions that only affect their account.</source>\n        <translation type=\"unfinished\">لا يمكن للمستخدم عادي تنفيذ إجراءات على مستوى المدير. لن يتمكنوا إلا من تنفيذ الإجراءات الإدارية التي تؤثر فقط على حساباهم.</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"394\"/>\n        <source>Standard User</source>\n        <translation type=\"unfinished\">مستخدم عادي</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"419\"/>\n        <source>USER TYPE</source>\n        <translation type=\"unfinished\">نوع المستخدم</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"491\"/>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"673\"/>\n        <source>Next</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"662\"/>\n        <source>Add Another User</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.cpp\" line=\"49\"/>\n        <source>It&apos;s time to get to know you. Apps will use this information to personalise your experience, and you&apos;ll use the password to log in.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.cpp\" line=\"116\"/>\n        <source>Thanks, %1. If other people will be using this device, you can add them now, or you can add them later.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.cpp\" line=\"114\"/>\n        <source>You&apos;ve added these users to your system</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.cpp\" line=\"123\"/>\n        <source>Enter the details of the next user to be added</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.cpp\" line=\"130\"/>\n        <source>Couldn&apos;t create user</source>\n        <translation type=\"unfinished\">غير قادر على إنشاء حساب المستخدم</translation>\n    </message>\n</context>\n<context>\n    <name>UserTypeDialog</name>\n    <message>\n        <location filename=\"../settings/usertypedialog.ui\" line=\"93\"/>\n        <source>Change User Type</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/usertypedialog.ui\" line=\"150\"/>\n        <source>ADMINISTRATOR</source>\n        <translation type=\"unfinished\">مدير</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/usertypedialog.ui\" line=\"157\"/>\n        <source>An administrator has full control over this device. They&apos;ll be able to configure systemwide settings and install software.</source>\n        <translation type=\"unfinished\">يمتلك مدير التحكم الكامل على هذا الجهاز. يستطيعون على تغيير إعدادات النظام و تحميل وتثبيت البرامج.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/usertypedialog.ui\" line=\"205\"/>\n        <source>A standard user can&apos;t perform systemwide actions. They&apos;ll only be able to perform administrative actions that only affect their account.</source>\n        <translation type=\"unfinished\">لا يمكن للمستخدم عادي تنفيذ إجراءات على مستوى المدير. لن يتمكنوا إلا من تنفيذ الإجراءات الإدارية التي تؤثر فقط على حساباهم.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/usertypedialog.ui\" line=\"167\"/>\n        <source>Administrator</source>\n        <translation type=\"unfinished\">مدير</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/usertypedialog.ui\" line=\"198\"/>\n        <source>STANDARD USER</source>\n        <translation type=\"unfinished\">مستخدم عادي</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/usertypedialog.ui\" line=\"215\"/>\n        <source>Standard User</source>\n        <translation type=\"unfinished\">مستخدم عادي</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/usertypedialog.cpp\" line=\"87\"/>\n        <source>Couldn&apos;t set user type</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>UsersPane</name>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"89\"/>\n        <location filename=\"../settings/userspane.cpp\" line=\"222\"/>\n        <source>Users</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"105\"/>\n        <source>New User</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"172\"/>\n        <source>No User Selected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"182\"/>\n        <source>Select a user to get started</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"288\"/>\n        <source>ACTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"298\"/>\n        <source>Change Real Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"305\"/>\n        <source>Change Password</source>\n        <translation type=\"unfinished\">تغيير كلمة المرور</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"312\"/>\n        <source>Change User Type</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"359\"/>\n        <source>DANGER</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"376\"/>\n        <source>Delete User</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.cpp\" line=\"94\"/>\n        <source>Username: %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.cpp\" line=\"97\"/>\n        <source>Unlock User</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.cpp\" line=\"99\"/>\n        <source>Lock User</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.cpp\" line=\"143\"/>\n        <source>Unauthorized</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.cpp\" line=\"144\"/>\n        <source>Polkit does not allow you to manage users on the system.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/UsersPlugin/translations/au_AU.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"au_AU\" sourcelanguage=\"en_US\">\n<context>\n    <name>AddUserDialog</name>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"93\"/>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"629\"/>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"745\"/>\n        <source>Add User</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"161\"/>\n        <source>PERSONAL DETAILS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"168\"/>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"688\"/>\n        <source>Username</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"175\"/>\n        <source>Full Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"188\"/>\n        <source>The username is generated based on the given full name. We recommend not changing it.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"245\"/>\n        <source>ADMINISTRATOR</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"262\"/>\n        <location filename=\"../settings/adduserdialog.cpp\" line=\"165\"/>\n        <source>Administrator</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"293\"/>\n        <source>STANDARD USER</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"252\"/>\n        <source>An administrator has full control over this device. They&apos;ll be able to configure systemwide settings and install software.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"300\"/>\n        <source>A standard user can&apos;t perform systemwide actions. They&apos;ll only be able to perform administrative actions that only affect their account.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"310\"/>\n        <source>Standard User</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"332\"/>\n        <source>USER TYPE</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"409\"/>\n        <source>Account Security</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"434\"/>\n        <source>Protect this account with a password to prevent anyone else logging into it.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"474\"/>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"729\"/>\n        <source>Password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"488\"/>\n        <source>Confirm Password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"505\"/>\n        <source>Password Hint</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"512\"/>\n        <source>If you forget your password, this will appear to help you remember.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"524\"/>\n        <source>Use this password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"531\"/>\n        <source>Alternatively, choose one of the following options:</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"541\"/>\n        <source>Ask for a password on the next login</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"544\"/>\n        <source>The first time the user logs in, we&apos;ll ask them for a password.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"551\"/>\n        <source>Don&apos;t set a password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"554\"/>\n        <source>Anyone will be able to log into this account.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"654\"/>\n        <source>Add this user to your system?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"695\"/>\n        <source>Real Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"702\"/>\n        <source>User Type</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.cpp\" line=\"98\"/>\n        <source>Set Password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.cpp\" line=\"104\"/>\n        <source>Ask when logging in</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.cpp\" line=\"110\"/>\n        <source>Not Set</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.cpp\" line=\"154\"/>\n        <source>Couldn&apos;t create user</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.cpp\" line=\"171\"/>\n        <source>Standard</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>ChangePasswordDialog</name>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"68\"/>\n        <source>Change Password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"94\"/>\n        <source>Set a password to protect this account.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"237\"/>\n        <source>WARNING</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"244\"/>\n        <source>This account is locked. Changing the password will unlock it.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"289\"/>\n        <source>Password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"303\"/>\n        <source>Confirm Password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"320\"/>\n        <source>Password Hint</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"327\"/>\n        <source>If you forget your password, this will appear to help you remember.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"339\"/>\n        <source>Use this password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"346\"/>\n        <source>Alternatively, choose one of the following options:</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"356\"/>\n        <source>Ask for a password on the next login</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"359\"/>\n        <source>The first time the user logs in, we&apos;ll ask them for a password.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"366\"/>\n        <source>Don&apos;t set a password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"369\"/>\n        <source>Anyone will be able to log into this account.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.cpp\" line=\"72\"/>\n        <source>Couldn&apos;t set password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.cpp\" line=\"92\"/>\n        <location filename=\"../settings/changepassworddialog.cpp\" line=\"111\"/>\n        <source>Couldn&apos;t set password policy</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>ChangeRealNameDialog</name>\n    <message>\n        <location filename=\"../settings/changerealnamedialog.ui\" line=\"68\"/>\n        <source>Change Real Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changerealnamedialog.ui\" line=\"77\"/>\n        <source>Your Real Name appears on the login screen, on the Gateway and in any other location where we need to differentiate between users.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changerealnamedialog.ui\" line=\"123\"/>\n        <source>Real Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changerealnamedialog.ui\" line=\"132\"/>\n        <source>Set Real Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changerealnamedialog.cpp\" line=\"64\"/>\n        <source>Couldn&apos;t set real name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>DeleteUserDialog</name>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"68\"/>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"153\"/>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"207\"/>\n        <source>Delete User</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"77\"/>\n        <source>What do you want to do with this user&apos;s files?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"90\"/>\n        <source>Delete Files</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"93\"/>\n        <source>Files for this user will be removed from this device.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"100\"/>\n        <source>Keep Files</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"103\"/>\n        <source>Files for this user will be kept in the same location.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"179\"/>\n        <source>Delete this user from this device?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"189\"/>\n        <source>Any data associated with this user will be gone forever. This includes\n- Home Directory\n- Mail Spool\n- Temporary Files</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"210\"/>\n        <source>They&apos;ll be gone forever!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.cpp\" line=\"74\"/>\n        <source>Couldn&apos;t delete user</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>LockUserDialog</name>\n    <message>\n        <location filename=\"../settings/lockuserdialog.ui\" line=\"68\"/>\n        <location filename=\"../settings/lockuserdialog.ui\" line=\"90\"/>\n        <source>Lock Account</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/lockuserdialog.ui\" line=\"77\"/>\n        <source>After locking this account, you won&apos;t be able to log in as this account.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/lockuserdialog.ui\" line=\"140\"/>\n        <location filename=\"../settings/lockuserdialog.ui\" line=\"162\"/>\n        <source>Unlock Account</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/lockuserdialog.ui\" line=\"149\"/>\n        <source>After unlocking this account, you&apos;ll be able to log in as this account.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/lockuserdialog.cpp\" line=\"63\"/>\n        <source>Couldn&apos;t unlock user</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/lockuserdialog.cpp\" line=\"66\"/>\n        <source>Couldn&apos;t lock user</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>OnboardingUsers</name>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"57\"/>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"582\"/>\n        <location filename=\"../onboarding/onboardingusers.cpp\" line=\"156\"/>\n        <source>Users</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"130\"/>\n        <source>Full Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"137\"/>\n        <source>Username</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"150\"/>\n        <source>ABOUT YOU</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"157\"/>\n        <source>The username is generated based on the given full name. We recommend not changing it.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"199\"/>\n        <source>Password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"206\"/>\n        <source>Password Hint</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"219\"/>\n        <source>YOUR PASSWORD</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"236\"/>\n        <source>Confirm Password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"243\"/>\n        <source>Protect this account with a password to prevent anyone else logging into it.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"257\"/>\n        <source>If you forget your password, this will appear to help you remember.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"329\"/>\n        <source>ADMINISTRATOR</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"336\"/>\n        <source>An administrator has full control over this device. They&apos;ll be able to configure systemwide settings and install software.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"346\"/>\n        <source>Administrator</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"377\"/>\n        <source>STANDARD USER</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"384\"/>\n        <source>A standard user can&apos;t perform systemwide actions. They&apos;ll only be able to perform administrative actions that only affect their account.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"394\"/>\n        <source>Standard User</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"419\"/>\n        <source>USER TYPE</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"491\"/>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"673\"/>\n        <source>Next</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"662\"/>\n        <source>Add Another User</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.cpp\" line=\"49\"/>\n        <source>It&apos;s time to get to know you. Apps will use this information to personalise your experience, and you&apos;ll use the password to log in.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.cpp\" line=\"116\"/>\n        <source>Thanks, %1. If other people will be using this device, you can add them now, or you can add them later.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.cpp\" line=\"114\"/>\n        <source>You&apos;ve added these users to your system</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.cpp\" line=\"123\"/>\n        <source>Enter the details of the next user to be added</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.cpp\" line=\"130\"/>\n        <source>Couldn&apos;t create user</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>UserTypeDialog</name>\n    <message>\n        <location filename=\"../settings/usertypedialog.ui\" line=\"93\"/>\n        <source>Change User Type</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/usertypedialog.ui\" line=\"150\"/>\n        <source>ADMINISTRATOR</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/usertypedialog.ui\" line=\"157\"/>\n        <source>An administrator has full control over this device. They&apos;ll be able to configure systemwide settings and install software.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/usertypedialog.ui\" line=\"205\"/>\n        <source>A standard user can&apos;t perform systemwide actions. They&apos;ll only be able to perform administrative actions that only affect their account.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/usertypedialog.ui\" line=\"167\"/>\n        <source>Administrator</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/usertypedialog.ui\" line=\"198\"/>\n        <source>STANDARD USER</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/usertypedialog.ui\" line=\"215\"/>\n        <source>Standard User</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/usertypedialog.cpp\" line=\"87\"/>\n        <source>Couldn&apos;t set user type</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>UsersPane</name>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"89\"/>\n        <location filename=\"../settings/userspane.cpp\" line=\"222\"/>\n        <source>Users</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"105\"/>\n        <source>New User</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"172\"/>\n        <source>No User Selected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"182\"/>\n        <source>Select a user to get started</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"288\"/>\n        <source>ACTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"298\"/>\n        <source>Change Real Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"305\"/>\n        <source>Change Password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"312\"/>\n        <source>Change User Type</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"359\"/>\n        <source>DANGER</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"376\"/>\n        <source>Delete User</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.cpp\" line=\"94\"/>\n        <source>Username: %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.cpp\" line=\"97\"/>\n        <source>Unlock User</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.cpp\" line=\"99\"/>\n        <source>Lock User</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.cpp\" line=\"143\"/>\n        <source>Unauthorized</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.cpp\" line=\"144\"/>\n        <source>Polkit does not allow you to manage users on the system.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/UsersPlugin/translations/cy.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"cy\" sourcelanguage=\"en_US\">\n<context>\n    <name>AddUserDialog</name>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"93\"/>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"629\"/>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"745\"/>\n        <source>Add User</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"161\"/>\n        <source>PERSONAL DETAILS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"168\"/>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"688\"/>\n        <source>Username</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"175\"/>\n        <source>Full Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"188\"/>\n        <source>The username is generated based on the given full name. We recommend not changing it.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"245\"/>\n        <source>ADMINISTRATOR</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"262\"/>\n        <location filename=\"../settings/adduserdialog.cpp\" line=\"165\"/>\n        <source>Administrator</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"293\"/>\n        <source>STANDARD USER</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"252\"/>\n        <source>An administrator has full control over this device. They&apos;ll be able to configure systemwide settings and install software.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"300\"/>\n        <source>A standard user can&apos;t perform systemwide actions. They&apos;ll only be able to perform administrative actions that only affect their account.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"310\"/>\n        <source>Standard User</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"332\"/>\n        <source>USER TYPE</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"409\"/>\n        <source>Account Security</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"434\"/>\n        <source>Protect this account with a password to prevent anyone else logging into it.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"474\"/>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"729\"/>\n        <source>Password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"488\"/>\n        <source>Confirm Password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"505\"/>\n        <source>Password Hint</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"512\"/>\n        <source>If you forget your password, this will appear to help you remember.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"524\"/>\n        <source>Use this password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"531\"/>\n        <source>Alternatively, choose one of the following options:</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"541\"/>\n        <source>Ask for a password on the next login</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"544\"/>\n        <source>The first time the user logs in, we&apos;ll ask them for a password.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"551\"/>\n        <source>Don&apos;t set a password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"554\"/>\n        <source>Anyone will be able to log into this account.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"654\"/>\n        <source>Add this user to your system?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"695\"/>\n        <source>Real Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"702\"/>\n        <source>User Type</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.cpp\" line=\"98\"/>\n        <source>Set Password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.cpp\" line=\"104\"/>\n        <source>Ask when logging in</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.cpp\" line=\"110\"/>\n        <source>Not Set</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.cpp\" line=\"154\"/>\n        <source>Couldn&apos;t create user</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.cpp\" line=\"171\"/>\n        <source>Standard</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>ChangePasswordDialog</name>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"68\"/>\n        <source>Change Password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"94\"/>\n        <source>Set a password to protect this account.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"237\"/>\n        <source>WARNING</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"244\"/>\n        <source>This account is locked. Changing the password will unlock it.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"289\"/>\n        <source>Password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"303\"/>\n        <source>Confirm Password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"320\"/>\n        <source>Password Hint</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"327\"/>\n        <source>If you forget your password, this will appear to help you remember.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"339\"/>\n        <source>Use this password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"346\"/>\n        <source>Alternatively, choose one of the following options:</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"356\"/>\n        <source>Ask for a password on the next login</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"359\"/>\n        <source>The first time the user logs in, we&apos;ll ask them for a password.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"366\"/>\n        <source>Don&apos;t set a password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"369\"/>\n        <source>Anyone will be able to log into this account.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.cpp\" line=\"72\"/>\n        <source>Couldn&apos;t set password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.cpp\" line=\"92\"/>\n        <location filename=\"../settings/changepassworddialog.cpp\" line=\"111\"/>\n        <source>Couldn&apos;t set password policy</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>ChangeRealNameDialog</name>\n    <message>\n        <location filename=\"../settings/changerealnamedialog.ui\" line=\"68\"/>\n        <source>Change Real Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changerealnamedialog.ui\" line=\"77\"/>\n        <source>Your Real Name appears on the login screen, on the Gateway and in any other location where we need to differentiate between users.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changerealnamedialog.ui\" line=\"123\"/>\n        <source>Real Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changerealnamedialog.ui\" line=\"132\"/>\n        <source>Set Real Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changerealnamedialog.cpp\" line=\"64\"/>\n        <source>Couldn&apos;t set real name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>DeleteUserDialog</name>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"68\"/>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"153\"/>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"207\"/>\n        <source>Delete User</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"77\"/>\n        <source>What do you want to do with this user&apos;s files?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"90\"/>\n        <source>Delete Files</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"93\"/>\n        <source>Files for this user will be removed from this device.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"100\"/>\n        <source>Keep Files</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"103\"/>\n        <source>Files for this user will be kept in the same location.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"179\"/>\n        <source>Delete this user from this device?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"189\"/>\n        <source>Any data associated with this user will be gone forever. This includes\n- Home Directory\n- Mail Spool\n- Temporary Files</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"210\"/>\n        <source>They&apos;ll be gone forever!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.cpp\" line=\"74\"/>\n        <source>Couldn&apos;t delete user</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>LockUserDialog</name>\n    <message>\n        <location filename=\"../settings/lockuserdialog.ui\" line=\"68\"/>\n        <location filename=\"../settings/lockuserdialog.ui\" line=\"90\"/>\n        <source>Lock Account</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/lockuserdialog.ui\" line=\"77\"/>\n        <source>After locking this account, you won&apos;t be able to log in as this account.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/lockuserdialog.ui\" line=\"140\"/>\n        <location filename=\"../settings/lockuserdialog.ui\" line=\"162\"/>\n        <source>Unlock Account</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/lockuserdialog.ui\" line=\"149\"/>\n        <source>After unlocking this account, you&apos;ll be able to log in as this account.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/lockuserdialog.cpp\" line=\"63\"/>\n        <source>Couldn&apos;t unlock user</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/lockuserdialog.cpp\" line=\"66\"/>\n        <source>Couldn&apos;t lock user</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>OnboardingUsers</name>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"57\"/>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"582\"/>\n        <location filename=\"../onboarding/onboardingusers.cpp\" line=\"156\"/>\n        <source>Users</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"130\"/>\n        <source>Full Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"137\"/>\n        <source>Username</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"150\"/>\n        <source>ABOUT YOU</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"157\"/>\n        <source>The username is generated based on the given full name. We recommend not changing it.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"199\"/>\n        <source>Password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"206\"/>\n        <source>Password Hint</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"219\"/>\n        <source>YOUR PASSWORD</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"236\"/>\n        <source>Confirm Password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"243\"/>\n        <source>Protect this account with a password to prevent anyone else logging into it.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"257\"/>\n        <source>If you forget your password, this will appear to help you remember.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"329\"/>\n        <source>ADMINISTRATOR</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"336\"/>\n        <source>An administrator has full control over this device. They&apos;ll be able to configure systemwide settings and install software.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"346\"/>\n        <source>Administrator</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"377\"/>\n        <source>STANDARD USER</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"384\"/>\n        <source>A standard user can&apos;t perform systemwide actions. They&apos;ll only be able to perform administrative actions that only affect their account.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"394\"/>\n        <source>Standard User</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"419\"/>\n        <source>USER TYPE</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"491\"/>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"673\"/>\n        <source>Next</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"662\"/>\n        <source>Add Another User</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.cpp\" line=\"49\"/>\n        <source>It&apos;s time to get to know you. Apps will use this information to personalise your experience, and you&apos;ll use the password to log in.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.cpp\" line=\"116\"/>\n        <source>Thanks, %1. If other people will be using this device, you can add them now, or you can add them later.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.cpp\" line=\"114\"/>\n        <source>You&apos;ve added these users to your system</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.cpp\" line=\"123\"/>\n        <source>Enter the details of the next user to be added</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.cpp\" line=\"130\"/>\n        <source>Couldn&apos;t create user</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>UserTypeDialog</name>\n    <message>\n        <location filename=\"../settings/usertypedialog.ui\" line=\"93\"/>\n        <source>Change User Type</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/usertypedialog.ui\" line=\"150\"/>\n        <source>ADMINISTRATOR</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/usertypedialog.ui\" line=\"157\"/>\n        <source>An administrator has full control over this device. They&apos;ll be able to configure systemwide settings and install software.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/usertypedialog.ui\" line=\"205\"/>\n        <source>A standard user can&apos;t perform systemwide actions. They&apos;ll only be able to perform administrative actions that only affect their account.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/usertypedialog.ui\" line=\"167\"/>\n        <source>Administrator</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/usertypedialog.ui\" line=\"198\"/>\n        <source>STANDARD USER</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/usertypedialog.ui\" line=\"215\"/>\n        <source>Standard User</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/usertypedialog.cpp\" line=\"87\"/>\n        <source>Couldn&apos;t set user type</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>UsersPane</name>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"89\"/>\n        <location filename=\"../settings/userspane.cpp\" line=\"222\"/>\n        <source>Users</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"105\"/>\n        <source>New User</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"172\"/>\n        <source>No User Selected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"182\"/>\n        <source>Select a user to get started</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"288\"/>\n        <source>ACTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"298\"/>\n        <source>Change Real Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"305\"/>\n        <source>Change Password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"312\"/>\n        <source>Change User Type</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"359\"/>\n        <source>DANGER</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"376\"/>\n        <source>Delete User</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.cpp\" line=\"94\"/>\n        <source>Username: %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.cpp\" line=\"97\"/>\n        <source>Unlock User</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.cpp\" line=\"99\"/>\n        <source>Lock User</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.cpp\" line=\"143\"/>\n        <source>Unauthorized</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.cpp\" line=\"144\"/>\n        <source>Polkit does not allow you to manage users on the system.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/UsersPlugin/translations/da.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"da\" sourcelanguage=\"en_US\">\n<context>\n    <name>AddUserDialog</name>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"93\"/>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"629\"/>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"745\"/>\n        <source>Add User</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"161\"/>\n        <source>PERSONAL DETAILS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"168\"/>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"688\"/>\n        <source>Username</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"175\"/>\n        <source>Full Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"188\"/>\n        <source>The username is generated based on the given full name. We recommend not changing it.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"245\"/>\n        <source>ADMINISTRATOR</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"262\"/>\n        <location filename=\"../settings/adduserdialog.cpp\" line=\"165\"/>\n        <source>Administrator</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"293\"/>\n        <source>STANDARD USER</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"252\"/>\n        <source>An administrator has full control over this device. They&apos;ll be able to configure systemwide settings and install software.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"300\"/>\n        <source>A standard user can&apos;t perform systemwide actions. They&apos;ll only be able to perform administrative actions that only affect their account.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"310\"/>\n        <source>Standard User</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"332\"/>\n        <source>USER TYPE</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"409\"/>\n        <source>Account Security</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"434\"/>\n        <source>Protect this account with a password to prevent anyone else logging into it.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"474\"/>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"729\"/>\n        <source>Password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"488\"/>\n        <source>Confirm Password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"505\"/>\n        <source>Password Hint</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"512\"/>\n        <source>If you forget your password, this will appear to help you remember.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"524\"/>\n        <source>Use this password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"531\"/>\n        <source>Alternatively, choose one of the following options:</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"541\"/>\n        <source>Ask for a password on the next login</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"544\"/>\n        <source>The first time the user logs in, we&apos;ll ask them for a password.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"551\"/>\n        <source>Don&apos;t set a password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"554\"/>\n        <source>Anyone will be able to log into this account.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"654\"/>\n        <source>Add this user to your system?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"695\"/>\n        <source>Real Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"702\"/>\n        <source>User Type</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.cpp\" line=\"98\"/>\n        <source>Set Password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.cpp\" line=\"104\"/>\n        <source>Ask when logging in</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.cpp\" line=\"110\"/>\n        <source>Not Set</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.cpp\" line=\"154\"/>\n        <source>Couldn&apos;t create user</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.cpp\" line=\"171\"/>\n        <source>Standard</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>ChangePasswordDialog</name>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"68\"/>\n        <source>Change Password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"94\"/>\n        <source>Set a password to protect this account.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"237\"/>\n        <source>WARNING</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"244\"/>\n        <source>This account is locked. Changing the password will unlock it.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"289\"/>\n        <source>Password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"303\"/>\n        <source>Confirm Password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"320\"/>\n        <source>Password Hint</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"327\"/>\n        <source>If you forget your password, this will appear to help you remember.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"339\"/>\n        <source>Use this password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"346\"/>\n        <source>Alternatively, choose one of the following options:</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"356\"/>\n        <source>Ask for a password on the next login</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"359\"/>\n        <source>The first time the user logs in, we&apos;ll ask them for a password.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"366\"/>\n        <source>Don&apos;t set a password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"369\"/>\n        <source>Anyone will be able to log into this account.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.cpp\" line=\"72\"/>\n        <source>Couldn&apos;t set password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.cpp\" line=\"92\"/>\n        <location filename=\"../settings/changepassworddialog.cpp\" line=\"111\"/>\n        <source>Couldn&apos;t set password policy</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>ChangeRealNameDialog</name>\n    <message>\n        <location filename=\"../settings/changerealnamedialog.ui\" line=\"68\"/>\n        <source>Change Real Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changerealnamedialog.ui\" line=\"77\"/>\n        <source>Your Real Name appears on the login screen, on the Gateway and in any other location where we need to differentiate between users.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changerealnamedialog.ui\" line=\"123\"/>\n        <source>Real Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changerealnamedialog.ui\" line=\"132\"/>\n        <source>Set Real Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changerealnamedialog.cpp\" line=\"64\"/>\n        <source>Couldn&apos;t set real name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>DeleteUserDialog</name>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"68\"/>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"153\"/>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"207\"/>\n        <source>Delete User</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"77\"/>\n        <source>What do you want to do with this user&apos;s files?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"90\"/>\n        <source>Delete Files</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"93\"/>\n        <source>Files for this user will be removed from this device.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"100\"/>\n        <source>Keep Files</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"103\"/>\n        <source>Files for this user will be kept in the same location.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"179\"/>\n        <source>Delete this user from this device?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"189\"/>\n        <source>Any data associated with this user will be gone forever. This includes\n- Home Directory\n- Mail Spool\n- Temporary Files</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"210\"/>\n        <source>They&apos;ll be gone forever!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.cpp\" line=\"74\"/>\n        <source>Couldn&apos;t delete user</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>LockUserDialog</name>\n    <message>\n        <location filename=\"../settings/lockuserdialog.ui\" line=\"68\"/>\n        <location filename=\"../settings/lockuserdialog.ui\" line=\"90\"/>\n        <source>Lock Account</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/lockuserdialog.ui\" line=\"77\"/>\n        <source>After locking this account, you won&apos;t be able to log in as this account.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/lockuserdialog.ui\" line=\"140\"/>\n        <location filename=\"../settings/lockuserdialog.ui\" line=\"162\"/>\n        <source>Unlock Account</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/lockuserdialog.ui\" line=\"149\"/>\n        <source>After unlocking this account, you&apos;ll be able to log in as this account.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/lockuserdialog.cpp\" line=\"63\"/>\n        <source>Couldn&apos;t unlock user</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/lockuserdialog.cpp\" line=\"66\"/>\n        <source>Couldn&apos;t lock user</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>OnboardingUsers</name>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"57\"/>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"582\"/>\n        <location filename=\"../onboarding/onboardingusers.cpp\" line=\"156\"/>\n        <source>Users</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"130\"/>\n        <source>Full Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"137\"/>\n        <source>Username</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"150\"/>\n        <source>ABOUT YOU</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"157\"/>\n        <source>The username is generated based on the given full name. We recommend not changing it.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"199\"/>\n        <source>Password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"206\"/>\n        <source>Password Hint</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"219\"/>\n        <source>YOUR PASSWORD</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"236\"/>\n        <source>Confirm Password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"243\"/>\n        <source>Protect this account with a password to prevent anyone else logging into it.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"257\"/>\n        <source>If you forget your password, this will appear to help you remember.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"329\"/>\n        <source>ADMINISTRATOR</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"336\"/>\n        <source>An administrator has full control over this device. They&apos;ll be able to configure systemwide settings and install software.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"346\"/>\n        <source>Administrator</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"377\"/>\n        <source>STANDARD USER</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"384\"/>\n        <source>A standard user can&apos;t perform systemwide actions. They&apos;ll only be able to perform administrative actions that only affect their account.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"394\"/>\n        <source>Standard User</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"419\"/>\n        <source>USER TYPE</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"491\"/>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"673\"/>\n        <source>Next</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"662\"/>\n        <source>Add Another User</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.cpp\" line=\"49\"/>\n        <source>It&apos;s time to get to know you. Apps will use this information to personalise your experience, and you&apos;ll use the password to log in.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.cpp\" line=\"116\"/>\n        <source>Thanks, %1. If other people will be using this device, you can add them now, or you can add them later.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.cpp\" line=\"114\"/>\n        <source>You&apos;ve added these users to your system</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.cpp\" line=\"123\"/>\n        <source>Enter the details of the next user to be added</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.cpp\" line=\"130\"/>\n        <source>Couldn&apos;t create user</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>UserTypeDialog</name>\n    <message>\n        <location filename=\"../settings/usertypedialog.ui\" line=\"93\"/>\n        <source>Change User Type</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/usertypedialog.ui\" line=\"150\"/>\n        <source>ADMINISTRATOR</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/usertypedialog.ui\" line=\"157\"/>\n        <source>An administrator has full control over this device. They&apos;ll be able to configure systemwide settings and install software.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/usertypedialog.ui\" line=\"205\"/>\n        <source>A standard user can&apos;t perform systemwide actions. They&apos;ll only be able to perform administrative actions that only affect their account.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/usertypedialog.ui\" line=\"167\"/>\n        <source>Administrator</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/usertypedialog.ui\" line=\"198\"/>\n        <source>STANDARD USER</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/usertypedialog.ui\" line=\"215\"/>\n        <source>Standard User</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/usertypedialog.cpp\" line=\"87\"/>\n        <source>Couldn&apos;t set user type</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>UsersPane</name>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"89\"/>\n        <location filename=\"../settings/userspane.cpp\" line=\"222\"/>\n        <source>Users</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"105\"/>\n        <source>New User</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"172\"/>\n        <source>No User Selected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"182\"/>\n        <source>Select a user to get started</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"288\"/>\n        <source>ACTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"298\"/>\n        <source>Change Real Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"305\"/>\n        <source>Change Password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"312\"/>\n        <source>Change User Type</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"359\"/>\n        <source>DANGER</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"376\"/>\n        <source>Delete User</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.cpp\" line=\"94\"/>\n        <source>Username: %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.cpp\" line=\"97\"/>\n        <source>Unlock User</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.cpp\" line=\"99\"/>\n        <source>Lock User</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.cpp\" line=\"143\"/>\n        <source>Unauthorized</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.cpp\" line=\"144\"/>\n        <source>Polkit does not allow you to manage users on the system.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/UsersPlugin/translations/de.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"de\" sourcelanguage=\"en_US\">\n<context>\n    <name>AddUserDialog</name>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"93\"/>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"629\"/>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"745\"/>\n        <source>Add User</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"161\"/>\n        <source>PERSONAL DETAILS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"168\"/>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"688\"/>\n        <source>Username</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"175\"/>\n        <source>Full Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"188\"/>\n        <source>The username is generated based on the given full name. We recommend not changing it.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"245\"/>\n        <source>ADMINISTRATOR</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"262\"/>\n        <location filename=\"../settings/adduserdialog.cpp\" line=\"165\"/>\n        <source>Administrator</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"293\"/>\n        <source>STANDARD USER</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"252\"/>\n        <source>An administrator has full control over this device. They&apos;ll be able to configure systemwide settings and install software.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"300\"/>\n        <source>A standard user can&apos;t perform systemwide actions. They&apos;ll only be able to perform administrative actions that only affect their account.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"310\"/>\n        <source>Standard User</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"332\"/>\n        <source>USER TYPE</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"409\"/>\n        <source>Account Security</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"434\"/>\n        <source>Protect this account with a password to prevent anyone else logging into it.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"474\"/>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"729\"/>\n        <source>Password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"488\"/>\n        <source>Confirm Password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"505\"/>\n        <source>Password Hint</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"512\"/>\n        <source>If you forget your password, this will appear to help you remember.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"524\"/>\n        <source>Use this password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"531\"/>\n        <source>Alternatively, choose one of the following options:</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"541\"/>\n        <source>Ask for a password on the next login</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"544\"/>\n        <source>The first time the user logs in, we&apos;ll ask them for a password.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"551\"/>\n        <source>Don&apos;t set a password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"554\"/>\n        <source>Anyone will be able to log into this account.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"654\"/>\n        <source>Add this user to your system?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"695\"/>\n        <source>Real Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"702\"/>\n        <source>User Type</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.cpp\" line=\"98\"/>\n        <source>Set Password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.cpp\" line=\"104\"/>\n        <source>Ask when logging in</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.cpp\" line=\"110\"/>\n        <source>Not Set</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.cpp\" line=\"154\"/>\n        <source>Couldn&apos;t create user</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.cpp\" line=\"171\"/>\n        <source>Standard</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>ChangePasswordDialog</name>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"68\"/>\n        <source>Change Password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"94\"/>\n        <source>Set a password to protect this account.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"237\"/>\n        <source>WARNING</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"244\"/>\n        <source>This account is locked. Changing the password will unlock it.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"289\"/>\n        <source>Password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"303\"/>\n        <source>Confirm Password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"320\"/>\n        <source>Password Hint</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"327\"/>\n        <source>If you forget your password, this will appear to help you remember.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"339\"/>\n        <source>Use this password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"346\"/>\n        <source>Alternatively, choose one of the following options:</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"356\"/>\n        <source>Ask for a password on the next login</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"359\"/>\n        <source>The first time the user logs in, we&apos;ll ask them for a password.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"366\"/>\n        <source>Don&apos;t set a password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"369\"/>\n        <source>Anyone will be able to log into this account.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.cpp\" line=\"72\"/>\n        <source>Couldn&apos;t set password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.cpp\" line=\"92\"/>\n        <location filename=\"../settings/changepassworddialog.cpp\" line=\"111\"/>\n        <source>Couldn&apos;t set password policy</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>ChangeRealNameDialog</name>\n    <message>\n        <location filename=\"../settings/changerealnamedialog.ui\" line=\"68\"/>\n        <source>Change Real Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changerealnamedialog.ui\" line=\"77\"/>\n        <source>Your Real Name appears on the login screen, on the Gateway and in any other location where we need to differentiate between users.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changerealnamedialog.ui\" line=\"123\"/>\n        <source>Real Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changerealnamedialog.ui\" line=\"132\"/>\n        <source>Set Real Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changerealnamedialog.cpp\" line=\"64\"/>\n        <source>Couldn&apos;t set real name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>DeleteUserDialog</name>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"68\"/>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"153\"/>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"207\"/>\n        <source>Delete User</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"77\"/>\n        <source>What do you want to do with this user&apos;s files?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"90\"/>\n        <source>Delete Files</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"93\"/>\n        <source>Files for this user will be removed from this device.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"100\"/>\n        <source>Keep Files</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"103\"/>\n        <source>Files for this user will be kept in the same location.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"179\"/>\n        <source>Delete this user from this device?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"189\"/>\n        <source>Any data associated with this user will be gone forever. This includes\n- Home Directory\n- Mail Spool\n- Temporary Files</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"210\"/>\n        <source>They&apos;ll be gone forever!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.cpp\" line=\"74\"/>\n        <source>Couldn&apos;t delete user</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>LockUserDialog</name>\n    <message>\n        <location filename=\"../settings/lockuserdialog.ui\" line=\"68\"/>\n        <location filename=\"../settings/lockuserdialog.ui\" line=\"90\"/>\n        <source>Lock Account</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/lockuserdialog.ui\" line=\"77\"/>\n        <source>After locking this account, you won&apos;t be able to log in as this account.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/lockuserdialog.ui\" line=\"140\"/>\n        <location filename=\"../settings/lockuserdialog.ui\" line=\"162\"/>\n        <source>Unlock Account</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/lockuserdialog.ui\" line=\"149\"/>\n        <source>After unlocking this account, you&apos;ll be able to log in as this account.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/lockuserdialog.cpp\" line=\"63\"/>\n        <source>Couldn&apos;t unlock user</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/lockuserdialog.cpp\" line=\"66\"/>\n        <source>Couldn&apos;t lock user</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>OnboardingUsers</name>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"57\"/>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"582\"/>\n        <location filename=\"../onboarding/onboardingusers.cpp\" line=\"156\"/>\n        <source>Users</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"130\"/>\n        <source>Full Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"137\"/>\n        <source>Username</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"150\"/>\n        <source>ABOUT YOU</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"157\"/>\n        <source>The username is generated based on the given full name. We recommend not changing it.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"199\"/>\n        <source>Password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"206\"/>\n        <source>Password Hint</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"219\"/>\n        <source>YOUR PASSWORD</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"236\"/>\n        <source>Confirm Password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"243\"/>\n        <source>Protect this account with a password to prevent anyone else logging into it.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"257\"/>\n        <source>If you forget your password, this will appear to help you remember.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"329\"/>\n        <source>ADMINISTRATOR</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"336\"/>\n        <source>An administrator has full control over this device. They&apos;ll be able to configure systemwide settings and install software.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"346\"/>\n        <source>Administrator</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"377\"/>\n        <source>STANDARD USER</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"384\"/>\n        <source>A standard user can&apos;t perform systemwide actions. They&apos;ll only be able to perform administrative actions that only affect their account.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"394\"/>\n        <source>Standard User</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"419\"/>\n        <source>USER TYPE</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"491\"/>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"673\"/>\n        <source>Next</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"662\"/>\n        <source>Add Another User</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.cpp\" line=\"49\"/>\n        <source>It&apos;s time to get to know you. Apps will use this information to personalise your experience, and you&apos;ll use the password to log in.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.cpp\" line=\"116\"/>\n        <source>Thanks, %1. If other people will be using this device, you can add them now, or you can add them later.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.cpp\" line=\"114\"/>\n        <source>You&apos;ve added these users to your system</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.cpp\" line=\"123\"/>\n        <source>Enter the details of the next user to be added</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.cpp\" line=\"130\"/>\n        <source>Couldn&apos;t create user</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>UserTypeDialog</name>\n    <message>\n        <location filename=\"../settings/usertypedialog.ui\" line=\"93\"/>\n        <source>Change User Type</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/usertypedialog.ui\" line=\"150\"/>\n        <source>ADMINISTRATOR</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/usertypedialog.ui\" line=\"157\"/>\n        <source>An administrator has full control over this device. They&apos;ll be able to configure systemwide settings and install software.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/usertypedialog.ui\" line=\"205\"/>\n        <source>A standard user can&apos;t perform systemwide actions. They&apos;ll only be able to perform administrative actions that only affect their account.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/usertypedialog.ui\" line=\"167\"/>\n        <source>Administrator</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/usertypedialog.ui\" line=\"198\"/>\n        <source>STANDARD USER</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/usertypedialog.ui\" line=\"215\"/>\n        <source>Standard User</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/usertypedialog.cpp\" line=\"87\"/>\n        <source>Couldn&apos;t set user type</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>UsersPane</name>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"89\"/>\n        <location filename=\"../settings/userspane.cpp\" line=\"222\"/>\n        <source>Users</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"105\"/>\n        <source>New User</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"172\"/>\n        <source>No User Selected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"182\"/>\n        <source>Select a user to get started</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"288\"/>\n        <source>ACTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"298\"/>\n        <source>Change Real Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"305\"/>\n        <source>Change Password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"312\"/>\n        <source>Change User Type</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"359\"/>\n        <source>DANGER</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"376\"/>\n        <source>Delete User</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.cpp\" line=\"94\"/>\n        <source>Username: %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.cpp\" line=\"97\"/>\n        <source>Unlock User</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.cpp\" line=\"99\"/>\n        <source>Lock User</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.cpp\" line=\"143\"/>\n        <source>Unauthorized</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.cpp\" line=\"144\"/>\n        <source>Polkit does not allow you to manage users on the system.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/UsersPlugin/translations/en_GB.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"en_GB\" sourcelanguage=\"en_US\">\n<context>\n    <name>AddUserDialog</name>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"93\"/>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"629\"/>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"745\"/>\n        <source>Add User</source>\n        <translation>Add User</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"161\"/>\n        <source>PERSONAL DETAILS</source>\n        <translation>PERSONAL DETAILS</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"168\"/>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"688\"/>\n        <source>Username</source>\n        <translation>Username</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"175\"/>\n        <source>Full Name</source>\n        <translation>Full Name</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"188\"/>\n        <source>The username is generated based on the given full name. We recommend not changing it.</source>\n        <translation>The username is generated based on the given full name. We recommend not changing it.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"245\"/>\n        <source>ADMINISTRATOR</source>\n        <translation>ADMINISTRATOR</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"262\"/>\n        <location filename=\"../settings/adduserdialog.cpp\" line=\"165\"/>\n        <source>Administrator</source>\n        <translation>Administrator</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"293\"/>\n        <source>STANDARD USER</source>\n        <translation>STANDARD USER</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"252\"/>\n        <source>An administrator has full control over this device. They&apos;ll be able to configure systemwide settings and install software.</source>\n        <translation>An administrator has full control over this device. They&apos;ll be able to configure systemwide settings and install software.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"300\"/>\n        <source>A standard user can&apos;t perform systemwide actions. They&apos;ll only be able to perform administrative actions that only affect their account.</source>\n        <translation>A standard user can&apos;t perform systemwide actions. They&apos;ll only be able to perform administrative actions that only affect their account.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"310\"/>\n        <source>Standard User</source>\n        <translation>Standard User</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"332\"/>\n        <source>USER TYPE</source>\n        <translation>USER TYPE</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"409\"/>\n        <source>Account Security</source>\n        <translation>Account Security</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"434\"/>\n        <source>Protect this account with a password to prevent anyone else logging into it.</source>\n        <translation>Protect this account with a password to prevent anyone else logging into it.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"474\"/>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"729\"/>\n        <source>Password</source>\n        <translation>Password</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"488\"/>\n        <source>Confirm Password</source>\n        <translation>Confirm Password</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"505\"/>\n        <source>Password Hint</source>\n        <translation>Password Hint</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"512\"/>\n        <source>If you forget your password, this will appear to help you remember.</source>\n        <translation>If you forget your password, this will appear to help you remember.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"524\"/>\n        <source>Use this password</source>\n        <translation>Use this password</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"531\"/>\n        <source>Alternatively, choose one of the following options:</source>\n        <translation>Alternatively, choose one of the following options:</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"541\"/>\n        <source>Ask for a password on the next login</source>\n        <translation>Ask for a password on the next login</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"544\"/>\n        <source>The first time the user logs in, we&apos;ll ask them for a password.</source>\n        <translation>The first time the user logs in, we&apos;ll ask them for a password.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"551\"/>\n        <source>Don&apos;t set a password</source>\n        <translation>Don&apos;t set a password</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"554\"/>\n        <source>Anyone will be able to log into this account.</source>\n        <translation>Anyone will be able to log into this account.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"654\"/>\n        <source>Add this user to your system?</source>\n        <translation>Add this user to your system?</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"695\"/>\n        <source>Real Name</source>\n        <translation>Real Name</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"702\"/>\n        <source>User Type</source>\n        <translation>User Type</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.cpp\" line=\"98\"/>\n        <source>Set Password</source>\n        <translation>Set Password</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.cpp\" line=\"104\"/>\n        <source>Ask when logging in</source>\n        <translation>Ask when logging in</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.cpp\" line=\"110\"/>\n        <source>Not Set</source>\n        <translation>Not Set</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.cpp\" line=\"154\"/>\n        <source>Couldn&apos;t create user</source>\n        <translation>Couldn&apos;t create user</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.cpp\" line=\"171\"/>\n        <source>Standard</source>\n        <translation>Standard</translation>\n    </message>\n</context>\n<context>\n    <name>ChangePasswordDialog</name>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"68\"/>\n        <source>Change Password</source>\n        <translation>Change Password</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"94\"/>\n        <source>Set a password to protect this account.</source>\n        <translation>Set a password to protect this account.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"237\"/>\n        <source>WARNING</source>\n        <translation>WARNING</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"244\"/>\n        <source>This account is locked. Changing the password will unlock it.</source>\n        <translation>This account is locked. Changing the password will unlock it.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"289\"/>\n        <source>Password</source>\n        <translation>Password</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"303\"/>\n        <source>Confirm Password</source>\n        <translation>Confirm Password</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"320\"/>\n        <source>Password Hint</source>\n        <translation>Password Hint</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"327\"/>\n        <source>If you forget your password, this will appear to help you remember.</source>\n        <translation>If you forget your password, this will appear to help you remember.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"339\"/>\n        <source>Use this password</source>\n        <translation>Use this password</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"346\"/>\n        <source>Alternatively, choose one of the following options:</source>\n        <translation>Alternatively, choose one of the following options:</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"356\"/>\n        <source>Ask for a password on the next login</source>\n        <translation>Ask for a password on the next login</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"359\"/>\n        <source>The first time the user logs in, we&apos;ll ask them for a password.</source>\n        <translation>The first time the user logs in, we&apos;ll ask them for a password.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"366\"/>\n        <source>Don&apos;t set a password</source>\n        <translation>Don&apos;t set a password</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"369\"/>\n        <source>Anyone will be able to log into this account.</source>\n        <translation>Anyone will be able to log into this account.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.cpp\" line=\"72\"/>\n        <source>Couldn&apos;t set password</source>\n        <translation>Couldn&apos;t set password</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.cpp\" line=\"92\"/>\n        <location filename=\"../settings/changepassworddialog.cpp\" line=\"111\"/>\n        <source>Couldn&apos;t set password policy</source>\n        <translation>Couldn&apos;t set password policy</translation>\n    </message>\n</context>\n<context>\n    <name>ChangeRealNameDialog</name>\n    <message>\n        <location filename=\"../settings/changerealnamedialog.ui\" line=\"68\"/>\n        <source>Change Real Name</source>\n        <translation>Change Real Name</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changerealnamedialog.ui\" line=\"77\"/>\n        <source>Your Real Name appears on the login screen, on the Gateway and in any other location where we need to differentiate between users.</source>\n        <translation>Your Real Name appears on the login screen, on the Gateway and in any other location where we need to differentiate between users.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changerealnamedialog.ui\" line=\"123\"/>\n        <source>Real Name</source>\n        <translation>Real Name</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changerealnamedialog.ui\" line=\"132\"/>\n        <source>Set Real Name</source>\n        <translation>Set Real Name</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changerealnamedialog.cpp\" line=\"64\"/>\n        <source>Couldn&apos;t set real name</source>\n        <translation>Couldn&apos;t set real name</translation>\n    </message>\n</context>\n<context>\n    <name>DeleteUserDialog</name>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"68\"/>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"153\"/>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"207\"/>\n        <source>Delete User</source>\n        <translation>Delete User</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"77\"/>\n        <source>What do you want to do with this user&apos;s files?</source>\n        <translation>What do you want to do with this user&apos;s files?</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"90\"/>\n        <source>Delete Files</source>\n        <translation>Delete Files</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"93\"/>\n        <source>Files for this user will be removed from this device.</source>\n        <translation>Files for this user will be removed from this device.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"100\"/>\n        <source>Keep Files</source>\n        <translation>Keep Files</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"103\"/>\n        <source>Files for this user will be kept in the same location.</source>\n        <translation>Files for this user will be kept in the same location.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"179\"/>\n        <source>Delete this user from this device?</source>\n        <translation>Delete this user from this device?</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"189\"/>\n        <source>Any data associated with this user will be gone forever. This includes\n- Home Directory\n- Mail Spool\n- Temporary Files</source>\n        <translation>Any data associated with this user will be gone forever. This includes\n- Home Directory\n- Mail Spool\n- Temporary Files</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"210\"/>\n        <source>They&apos;ll be gone forever!</source>\n        <translation>They&apos;ll be gone forever!</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.cpp\" line=\"74\"/>\n        <source>Couldn&apos;t delete user</source>\n        <translation>Couldn&apos;t delete user</translation>\n    </message>\n</context>\n<context>\n    <name>LockUserDialog</name>\n    <message>\n        <location filename=\"../settings/lockuserdialog.ui\" line=\"68\"/>\n        <location filename=\"../settings/lockuserdialog.ui\" line=\"90\"/>\n        <source>Lock Account</source>\n        <translation>Lock Account</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/lockuserdialog.ui\" line=\"77\"/>\n        <source>After locking this account, you won&apos;t be able to log in as this account.</source>\n        <translation>After locking this account, you won&apos;t be able to log in as this account.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/lockuserdialog.ui\" line=\"140\"/>\n        <location filename=\"../settings/lockuserdialog.ui\" line=\"162\"/>\n        <source>Unlock Account</source>\n        <translation>Unlock Account</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/lockuserdialog.ui\" line=\"149\"/>\n        <source>After unlocking this account, you&apos;ll be able to log in as this account.</source>\n        <translation>After unlocking this account, you&apos;ll be able to log in as this account.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/lockuserdialog.cpp\" line=\"63\"/>\n        <source>Couldn&apos;t unlock user</source>\n        <translation>Couldn&apos;t unlock user</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/lockuserdialog.cpp\" line=\"66\"/>\n        <source>Couldn&apos;t lock user</source>\n        <translation>Couldn&apos;t lock user</translation>\n    </message>\n</context>\n<context>\n    <name>OnboardingUsers</name>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"57\"/>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"582\"/>\n        <location filename=\"../onboarding/onboardingusers.cpp\" line=\"156\"/>\n        <source>Users</source>\n        <translation>Users</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"130\"/>\n        <source>Full Name</source>\n        <translation>Full Name</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"137\"/>\n        <source>Username</source>\n        <translation>Username</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"150\"/>\n        <source>ABOUT YOU</source>\n        <translation>ABOUT YOU</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"157\"/>\n        <source>The username is generated based on the given full name. We recommend not changing it.</source>\n        <translation>The username is generated based on the given full name. We recommend not changing it.</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"199\"/>\n        <source>Password</source>\n        <translation>Password</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"206\"/>\n        <source>Password Hint</source>\n        <translation>Password Hint</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"219\"/>\n        <source>YOUR PASSWORD</source>\n        <translation>YOUR PASSWORD</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"236\"/>\n        <source>Confirm Password</source>\n        <translation>Confirm Password</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"243\"/>\n        <source>Protect this account with a password to prevent anyone else logging into it.</source>\n        <translation>Protect this account with a password to prevent anyone else logging into it.</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"257\"/>\n        <source>If you forget your password, this will appear to help you remember.</source>\n        <translation>If you forget your password, this will appear to help you remember.</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"329\"/>\n        <source>ADMINISTRATOR</source>\n        <translation>ADMINISTRATOR</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"336\"/>\n        <source>An administrator has full control over this device. They&apos;ll be able to configure systemwide settings and install software.</source>\n        <translation>An administrator has full control over this device. They&apos;ll be able to configure systemwide settings and install software.</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"346\"/>\n        <source>Administrator</source>\n        <translation>Administrator</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"377\"/>\n        <source>STANDARD USER</source>\n        <translation>STANDARD USER</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"384\"/>\n        <source>A standard user can&apos;t perform systemwide actions. They&apos;ll only be able to perform administrative actions that only affect their account.</source>\n        <translation>A standard user can&apos;t perform systemwide actions. They&apos;ll only be able to perform administrative actions that only affect their account.</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"394\"/>\n        <source>Standard User</source>\n        <translation>Standard User</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"419\"/>\n        <source>USER TYPE</source>\n        <translation>USER TYPE</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"491\"/>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"673\"/>\n        <source>Next</source>\n        <translation>Next</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"662\"/>\n        <source>Add Another User</source>\n        <translation>Add Another User</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.cpp\" line=\"49\"/>\n        <source>It&apos;s time to get to know you. Apps will use this information to personalise your experience, and you&apos;ll use the password to log in.</source>\n        <translation>It&apos;s time to get to know you. Apps will use this information to personalise your experience, and you&apos;ll use the password to log in.</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.cpp\" line=\"116\"/>\n        <source>Thanks, %1. If other people will be using this device, you can add them now, or you can add them later.</source>\n        <translation>Thanks, %1. If other people will be using this device, you can add them now, or you can add them later.</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.cpp\" line=\"114\"/>\n        <source>You&apos;ve added these users to your system</source>\n        <translation>You&apos;ve added these users to your system</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.cpp\" line=\"123\"/>\n        <source>Enter the details of the next user to be added</source>\n        <translation>Enter the details of the next user to be added</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.cpp\" line=\"130\"/>\n        <source>Couldn&apos;t create user</source>\n        <translation>Couldn&apos;t create user</translation>\n    </message>\n</context>\n<context>\n    <name>UserTypeDialog</name>\n    <message>\n        <location filename=\"../settings/usertypedialog.ui\" line=\"93\"/>\n        <source>Change User Type</source>\n        <translation>Change User Type</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/usertypedialog.ui\" line=\"150\"/>\n        <source>ADMINISTRATOR</source>\n        <translation>ADMINISTRATOR</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/usertypedialog.ui\" line=\"157\"/>\n        <source>An administrator has full control over this device. They&apos;ll be able to configure systemwide settings and install software.</source>\n        <translation type=\"unfinished\">An administrator has full control over this device. They&apos;ll be able to configure systemwide settings and install software.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/usertypedialog.ui\" line=\"205\"/>\n        <source>A standard user can&apos;t perform systemwide actions. They&apos;ll only be able to perform administrative actions that only affect their account.</source>\n        <translation type=\"unfinished\">A standard user can&apos;t perform systemwide actions. They&apos;ll only be able to perform administrative actions that only affect their account.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/usertypedialog.ui\" line=\"167\"/>\n        <source>Administrator</source>\n        <translation>Administrator</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/usertypedialog.ui\" line=\"198\"/>\n        <source>STANDARD USER</source>\n        <translation>STANDARD USER</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/usertypedialog.ui\" line=\"215\"/>\n        <source>Standard User</source>\n        <translation>Standard User</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/usertypedialog.cpp\" line=\"87\"/>\n        <source>Couldn&apos;t set user type</source>\n        <translation>Couldn&apos;t set user type</translation>\n    </message>\n</context>\n<context>\n    <name>UsersPane</name>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"89\"/>\n        <location filename=\"../settings/userspane.cpp\" line=\"222\"/>\n        <source>Users</source>\n        <translation>Users</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"105\"/>\n        <source>New User</source>\n        <translation>New User</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"172\"/>\n        <source>No User Selected</source>\n        <translation>No User Selected</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"182\"/>\n        <source>Select a user to get started</source>\n        <translation>Select a user to get started</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"288\"/>\n        <source>ACTIONS</source>\n        <translation>ACTIONS</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"298\"/>\n        <source>Change Real Name</source>\n        <translation>Change Real Name</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"305\"/>\n        <source>Change Password</source>\n        <translation>Change Password</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"312\"/>\n        <source>Change User Type</source>\n        <translation>Change User Type</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"359\"/>\n        <source>DANGER</source>\n        <translation>DANGER</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"376\"/>\n        <source>Delete User</source>\n        <translation>Delete User</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.cpp\" line=\"94\"/>\n        <source>Username: %1</source>\n        <translation>Username: %1</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.cpp\" line=\"97\"/>\n        <source>Unlock User</source>\n        <translation>Unlock User</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.cpp\" line=\"99\"/>\n        <source>Lock User</source>\n        <translation>Lock User</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.cpp\" line=\"143\"/>\n        <source>Unauthorized</source>\n        <translation>Unauthorized</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.cpp\" line=\"144\"/>\n        <source>Polkit does not allow you to manage users on the system.</source>\n        <translation>Polkit does not allow you to manage users on the system.</translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/UsersPlugin/translations/en_US.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"en_US\" sourcelanguage=\"en_US\">\n<context>\n    <name>AddUserDialog</name>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"93\"/>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"629\"/>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"745\"/>\n        <source>Add User</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"161\"/>\n        <source>PERSONAL DETAILS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"168\"/>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"688\"/>\n        <source>Username</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"175\"/>\n        <source>Full Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"188\"/>\n        <source>The username is generated based on the given full name. We recommend not changing it.</source>\n        <translation>The username is based on your full name. It&apos;s recommended not to change it.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"245\"/>\n        <source>ADMINISTRATOR</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"262\"/>\n        <location filename=\"../settings/adduserdialog.cpp\" line=\"165\"/>\n        <source>Administrator</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"293\"/>\n        <source>STANDARD USER</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"252\"/>\n        <source>An administrator has full control over this device. They&apos;ll be able to configure systemwide settings and install software.</source>\n        <translation>An administrator has full control over this device. They can configure systemwide settings and install software.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"300\"/>\n        <source>A standard user can&apos;t perform systemwide actions. They&apos;ll only be able to perform administrative actions that only affect their account.</source>\n        <translation>A standard user can&apos;t perform systemwide actions. They can only make changes to their own account.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"310\"/>\n        <source>Standard User</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"332\"/>\n        <source>USER TYPE</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"409\"/>\n        <source>Account Security</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"434\"/>\n        <source>Protect this account with a password to prevent anyone else logging into it.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"474\"/>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"729\"/>\n        <source>Password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"488\"/>\n        <source>Confirm Password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"505\"/>\n        <source>Password Hint</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"512\"/>\n        <source>If you forget your password, this will appear to help you remember.</source>\n        <translation>If you forget your password, this will help you remember it.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"524\"/>\n        <source>Use this password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"531\"/>\n        <source>Alternatively, choose one of the following options:</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"541\"/>\n        <source>Ask for a password on the next login</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"544\"/>\n        <source>The first time the user logs in, we&apos;ll ask them for a password.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"551\"/>\n        <source>Don&apos;t set a password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"554\"/>\n        <source>Anyone will be able to log into this account.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"654\"/>\n        <source>Add this user to your system?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"695\"/>\n        <source>Real Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"702\"/>\n        <source>User Type</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.cpp\" line=\"98\"/>\n        <source>Set Password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.cpp\" line=\"104\"/>\n        <source>Ask when logging in</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.cpp\" line=\"110\"/>\n        <source>Not Set</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.cpp\" line=\"154\"/>\n        <source>Couldn&apos;t create user</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.cpp\" line=\"171\"/>\n        <source>Standard</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>ChangePasswordDialog</name>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"68\"/>\n        <source>Change Password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"94\"/>\n        <source>Set a password to protect this account.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"237\"/>\n        <source>WARNING</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"244\"/>\n        <source>This account is locked. Changing the password will unlock it.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"289\"/>\n        <source>Password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"303\"/>\n        <source>Confirm Password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"320\"/>\n        <source>Password Hint</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"327\"/>\n        <source>If you forget your password, this will appear to help you remember.</source>\n        <translation>If you forget your password, this will help you remember it.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"339\"/>\n        <source>Use this password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"346\"/>\n        <source>Alternatively, choose one of the following options:</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"356\"/>\n        <source>Ask for a password on the next login</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"359\"/>\n        <source>The first time the user logs in, we&apos;ll ask them for a password.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"366\"/>\n        <source>Don&apos;t set a password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"369\"/>\n        <source>Anyone will be able to log into this account.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.cpp\" line=\"72\"/>\n        <source>Couldn&apos;t set password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.cpp\" line=\"92\"/>\n        <location filename=\"../settings/changepassworddialog.cpp\" line=\"111\"/>\n        <source>Couldn&apos;t set password policy</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>ChangeRealNameDialog</name>\n    <message>\n        <location filename=\"../settings/changerealnamedialog.ui\" line=\"68\"/>\n        <source>Change Real Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changerealnamedialog.ui\" line=\"77\"/>\n        <source>Your Real Name appears on the login screen, on the Gateway and in any other location where we need to differentiate between users.</source>\n        <translation>Your real name appears on the login screen, on the Gateway, and anywhere else we need to differentiate users.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changerealnamedialog.ui\" line=\"123\"/>\n        <source>Real Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changerealnamedialog.ui\" line=\"132\"/>\n        <source>Set Real Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changerealnamedialog.cpp\" line=\"64\"/>\n        <source>Couldn&apos;t set real name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>DeleteUserDialog</name>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"68\"/>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"153\"/>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"207\"/>\n        <source>Delete User</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"77\"/>\n        <source>What do you want to do with this user&apos;s files?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"90\"/>\n        <source>Delete Files</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"93\"/>\n        <source>Files for this user will be removed from this device.</source>\n        <translation>Files for this user will be permanently deleted.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"100\"/>\n        <source>Keep Files</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"103\"/>\n        <source>Files for this user will be kept in the same location.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"179\"/>\n        <source>Delete this user from this device?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"189\"/>\n        <source>Any data associated with this user will be gone forever. This includes\n- Home Directory\n- Mail Spool\n- Temporary Files</source>\n        <translation>This user&apos;s data will be gone forever. This includes\n- Home Directory\n- Mail Spool\n- Temporary Files</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"210\"/>\n        <source>They&apos;ll be gone forever!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.cpp\" line=\"74\"/>\n        <source>Couldn&apos;t delete user</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>LockUserDialog</name>\n    <message>\n        <location filename=\"../settings/lockuserdialog.ui\" line=\"68\"/>\n        <location filename=\"../settings/lockuserdialog.ui\" line=\"90\"/>\n        <source>Lock Account</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/lockuserdialog.ui\" line=\"77\"/>\n        <source>After locking this account, you won&apos;t be able to log in as this account.</source>\n        <translation>After locking this account, you won&apos;t be able to log into it again.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/lockuserdialog.ui\" line=\"140\"/>\n        <location filename=\"../settings/lockuserdialog.ui\" line=\"162\"/>\n        <source>Unlock Account</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/lockuserdialog.ui\" line=\"149\"/>\n        <source>After unlocking this account, you&apos;ll be able to log in as this account.</source>\n        <translation>After unlocking this account, you&apos;ll be able to log into it again.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/lockuserdialog.cpp\" line=\"63\"/>\n        <source>Couldn&apos;t unlock user</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/lockuserdialog.cpp\" line=\"66\"/>\n        <source>Couldn&apos;t lock user</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>OnboardingUsers</name>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"57\"/>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"582\"/>\n        <location filename=\"../onboarding/onboardingusers.cpp\" line=\"156\"/>\n        <source>Users</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"130\"/>\n        <source>Full Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"137\"/>\n        <source>Username</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"150\"/>\n        <source>ABOUT YOU</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"157\"/>\n        <source>The username is generated based on the given full name. We recommend not changing it.</source>\n        <translation type=\"unfinished\">The username is based on your full name. It&apos;s recommended not to change it.</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"199\"/>\n        <source>Password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"206\"/>\n        <source>Password Hint</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"219\"/>\n        <source>YOUR PASSWORD</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"236\"/>\n        <source>Confirm Password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"243\"/>\n        <source>Protect this account with a password to prevent anyone else logging into it.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"257\"/>\n        <source>If you forget your password, this will appear to help you remember.</source>\n        <translation type=\"unfinished\">If you forget your password, this will help you remember it.</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"329\"/>\n        <source>ADMINISTRATOR</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"336\"/>\n        <source>An administrator has full control over this device. They&apos;ll be able to configure systemwide settings and install software.</source>\n        <translation type=\"unfinished\">An administrator has full control over this device. They can configure systemwide settings and install software.</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"346\"/>\n        <source>Administrator</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"377\"/>\n        <source>STANDARD USER</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"384\"/>\n        <source>A standard user can&apos;t perform systemwide actions. They&apos;ll only be able to perform administrative actions that only affect their account.</source>\n        <translation type=\"unfinished\">A standard user can&apos;t perform systemwide actions. They can only make changes to their own account.</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"394\"/>\n        <source>Standard User</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"419\"/>\n        <source>USER TYPE</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"491\"/>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"673\"/>\n        <source>Next</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"662\"/>\n        <source>Add Another User</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.cpp\" line=\"49\"/>\n        <source>It&apos;s time to get to know you. Apps will use this information to personalise your experience, and you&apos;ll use the password to log in.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.cpp\" line=\"116\"/>\n        <source>Thanks, %1. If other people will be using this device, you can add them now, or you can add them later.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.cpp\" line=\"114\"/>\n        <source>You&apos;ve added these users to your system</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.cpp\" line=\"123\"/>\n        <source>Enter the details of the next user to be added</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.cpp\" line=\"130\"/>\n        <source>Couldn&apos;t create user</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>UserTypeDialog</name>\n    <message>\n        <location filename=\"../settings/usertypedialog.ui\" line=\"93\"/>\n        <source>Change User Type</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/usertypedialog.ui\" line=\"150\"/>\n        <source>ADMINISTRATOR</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/usertypedialog.ui\" line=\"157\"/>\n        <source>An administrator has full control over this device. They&apos;ll be able to configure systemwide settings and install software.</source>\n        <translation type=\"unfinished\">An administrator has full control over this device. They can configure systemwide settings and install software.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/usertypedialog.ui\" line=\"205\"/>\n        <source>A standard user can&apos;t perform systemwide actions. They&apos;ll only be able to perform administrative actions that only affect their account.</source>\n        <translation type=\"unfinished\">A standard user can&apos;t perform systemwide actions. They can only make changes to their own account.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/usertypedialog.ui\" line=\"167\"/>\n        <source>Administrator</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/usertypedialog.ui\" line=\"198\"/>\n        <source>STANDARD USER</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/usertypedialog.ui\" line=\"215\"/>\n        <source>Standard User</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/usertypedialog.cpp\" line=\"87\"/>\n        <source>Couldn&apos;t set user type</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>UsersPane</name>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"89\"/>\n        <location filename=\"../settings/userspane.cpp\" line=\"222\"/>\n        <source>Users</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"105\"/>\n        <source>New User</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"172\"/>\n        <source>No User Selected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"182\"/>\n        <source>Select a user to get started</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"288\"/>\n        <source>ACTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"298\"/>\n        <source>Change Real Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"305\"/>\n        <source>Change Password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"312\"/>\n        <source>Change User Type</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"359\"/>\n        <source>DANGER</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"376\"/>\n        <source>Delete User</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.cpp\" line=\"94\"/>\n        <source>Username: %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.cpp\" line=\"97\"/>\n        <source>Unlock User</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.cpp\" line=\"99\"/>\n        <source>Lock User</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.cpp\" line=\"143\"/>\n        <source>Unauthorized</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.cpp\" line=\"144\"/>\n        <source>Polkit does not allow you to manage users on the system.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/UsersPlugin/translations/es.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"es\" sourcelanguage=\"en_US\">\n<context>\n    <name>AddUserDialog</name>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"93\"/>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"629\"/>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"745\"/>\n        <source>Add User</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"161\"/>\n        <source>PERSONAL DETAILS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"168\"/>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"688\"/>\n        <source>Username</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"175\"/>\n        <source>Full Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"188\"/>\n        <source>The username is generated based on the given full name. We recommend not changing it.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"245\"/>\n        <source>ADMINISTRATOR</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"262\"/>\n        <location filename=\"../settings/adduserdialog.cpp\" line=\"165\"/>\n        <source>Administrator</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"293\"/>\n        <source>STANDARD USER</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"252\"/>\n        <source>An administrator has full control over this device. They&apos;ll be able to configure systemwide settings and install software.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"300\"/>\n        <source>A standard user can&apos;t perform systemwide actions. They&apos;ll only be able to perform administrative actions that only affect their account.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"310\"/>\n        <source>Standard User</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"332\"/>\n        <source>USER TYPE</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"409\"/>\n        <source>Account Security</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"434\"/>\n        <source>Protect this account with a password to prevent anyone else logging into it.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"474\"/>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"729\"/>\n        <source>Password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"488\"/>\n        <source>Confirm Password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"505\"/>\n        <source>Password Hint</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"512\"/>\n        <source>If you forget your password, this will appear to help you remember.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"524\"/>\n        <source>Use this password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"531\"/>\n        <source>Alternatively, choose one of the following options:</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"541\"/>\n        <source>Ask for a password on the next login</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"544\"/>\n        <source>The first time the user logs in, we&apos;ll ask them for a password.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"551\"/>\n        <source>Don&apos;t set a password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"554\"/>\n        <source>Anyone will be able to log into this account.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"654\"/>\n        <source>Add this user to your system?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"695\"/>\n        <source>Real Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"702\"/>\n        <source>User Type</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.cpp\" line=\"98\"/>\n        <source>Set Password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.cpp\" line=\"104\"/>\n        <source>Ask when logging in</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.cpp\" line=\"110\"/>\n        <source>Not Set</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.cpp\" line=\"154\"/>\n        <source>Couldn&apos;t create user</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.cpp\" line=\"171\"/>\n        <source>Standard</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>ChangePasswordDialog</name>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"68\"/>\n        <source>Change Password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"94\"/>\n        <source>Set a password to protect this account.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"237\"/>\n        <source>WARNING</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"244\"/>\n        <source>This account is locked. Changing the password will unlock it.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"289\"/>\n        <source>Password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"303\"/>\n        <source>Confirm Password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"320\"/>\n        <source>Password Hint</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"327\"/>\n        <source>If you forget your password, this will appear to help you remember.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"339\"/>\n        <source>Use this password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"346\"/>\n        <source>Alternatively, choose one of the following options:</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"356\"/>\n        <source>Ask for a password on the next login</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"359\"/>\n        <source>The first time the user logs in, we&apos;ll ask them for a password.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"366\"/>\n        <source>Don&apos;t set a password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"369\"/>\n        <source>Anyone will be able to log into this account.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.cpp\" line=\"72\"/>\n        <source>Couldn&apos;t set password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.cpp\" line=\"92\"/>\n        <location filename=\"../settings/changepassworddialog.cpp\" line=\"111\"/>\n        <source>Couldn&apos;t set password policy</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>ChangeRealNameDialog</name>\n    <message>\n        <location filename=\"../settings/changerealnamedialog.ui\" line=\"68\"/>\n        <source>Change Real Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changerealnamedialog.ui\" line=\"77\"/>\n        <source>Your Real Name appears on the login screen, on the Gateway and in any other location where we need to differentiate between users.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changerealnamedialog.ui\" line=\"123\"/>\n        <source>Real Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changerealnamedialog.ui\" line=\"132\"/>\n        <source>Set Real Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changerealnamedialog.cpp\" line=\"64\"/>\n        <source>Couldn&apos;t set real name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>DeleteUserDialog</name>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"68\"/>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"153\"/>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"207\"/>\n        <source>Delete User</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"77\"/>\n        <source>What do you want to do with this user&apos;s files?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"90\"/>\n        <source>Delete Files</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"93\"/>\n        <source>Files for this user will be removed from this device.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"100\"/>\n        <source>Keep Files</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"103\"/>\n        <source>Files for this user will be kept in the same location.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"179\"/>\n        <source>Delete this user from this device?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"189\"/>\n        <source>Any data associated with this user will be gone forever. This includes\n- Home Directory\n- Mail Spool\n- Temporary Files</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"210\"/>\n        <source>They&apos;ll be gone forever!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.cpp\" line=\"74\"/>\n        <source>Couldn&apos;t delete user</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>LockUserDialog</name>\n    <message>\n        <location filename=\"../settings/lockuserdialog.ui\" line=\"68\"/>\n        <location filename=\"../settings/lockuserdialog.ui\" line=\"90\"/>\n        <source>Lock Account</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/lockuserdialog.ui\" line=\"77\"/>\n        <source>After locking this account, you won&apos;t be able to log in as this account.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/lockuserdialog.ui\" line=\"140\"/>\n        <location filename=\"../settings/lockuserdialog.ui\" line=\"162\"/>\n        <source>Unlock Account</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/lockuserdialog.ui\" line=\"149\"/>\n        <source>After unlocking this account, you&apos;ll be able to log in as this account.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/lockuserdialog.cpp\" line=\"63\"/>\n        <source>Couldn&apos;t unlock user</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/lockuserdialog.cpp\" line=\"66\"/>\n        <source>Couldn&apos;t lock user</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>OnboardingUsers</name>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"57\"/>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"582\"/>\n        <location filename=\"../onboarding/onboardingusers.cpp\" line=\"156\"/>\n        <source>Users</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"130\"/>\n        <source>Full Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"137\"/>\n        <source>Username</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"150\"/>\n        <source>ABOUT YOU</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"157\"/>\n        <source>The username is generated based on the given full name. We recommend not changing it.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"199\"/>\n        <source>Password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"206\"/>\n        <source>Password Hint</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"219\"/>\n        <source>YOUR PASSWORD</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"236\"/>\n        <source>Confirm Password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"243\"/>\n        <source>Protect this account with a password to prevent anyone else logging into it.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"257\"/>\n        <source>If you forget your password, this will appear to help you remember.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"329\"/>\n        <source>ADMINISTRATOR</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"336\"/>\n        <source>An administrator has full control over this device. They&apos;ll be able to configure systemwide settings and install software.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"346\"/>\n        <source>Administrator</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"377\"/>\n        <source>STANDARD USER</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"384\"/>\n        <source>A standard user can&apos;t perform systemwide actions. They&apos;ll only be able to perform administrative actions that only affect their account.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"394\"/>\n        <source>Standard User</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"419\"/>\n        <source>USER TYPE</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"491\"/>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"673\"/>\n        <source>Next</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"662\"/>\n        <source>Add Another User</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.cpp\" line=\"49\"/>\n        <source>It&apos;s time to get to know you. Apps will use this information to personalise your experience, and you&apos;ll use the password to log in.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.cpp\" line=\"116\"/>\n        <source>Thanks, %1. If other people will be using this device, you can add them now, or you can add them later.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.cpp\" line=\"114\"/>\n        <source>You&apos;ve added these users to your system</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.cpp\" line=\"123\"/>\n        <source>Enter the details of the next user to be added</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.cpp\" line=\"130\"/>\n        <source>Couldn&apos;t create user</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>UserTypeDialog</name>\n    <message>\n        <location filename=\"../settings/usertypedialog.ui\" line=\"93\"/>\n        <source>Change User Type</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/usertypedialog.ui\" line=\"150\"/>\n        <source>ADMINISTRATOR</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/usertypedialog.ui\" line=\"157\"/>\n        <source>An administrator has full control over this device. They&apos;ll be able to configure systemwide settings and install software.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/usertypedialog.ui\" line=\"205\"/>\n        <source>A standard user can&apos;t perform systemwide actions. They&apos;ll only be able to perform administrative actions that only affect their account.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/usertypedialog.ui\" line=\"167\"/>\n        <source>Administrator</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/usertypedialog.ui\" line=\"198\"/>\n        <source>STANDARD USER</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/usertypedialog.ui\" line=\"215\"/>\n        <source>Standard User</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/usertypedialog.cpp\" line=\"87\"/>\n        <source>Couldn&apos;t set user type</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>UsersPane</name>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"89\"/>\n        <location filename=\"../settings/userspane.cpp\" line=\"222\"/>\n        <source>Users</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"105\"/>\n        <source>New User</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"172\"/>\n        <source>No User Selected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"182\"/>\n        <source>Select a user to get started</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"288\"/>\n        <source>ACTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"298\"/>\n        <source>Change Real Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"305\"/>\n        <source>Change Password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"312\"/>\n        <source>Change User Type</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"359\"/>\n        <source>DANGER</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"376\"/>\n        <source>Delete User</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.cpp\" line=\"94\"/>\n        <source>Username: %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.cpp\" line=\"97\"/>\n        <source>Unlock User</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.cpp\" line=\"99\"/>\n        <source>Lock User</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.cpp\" line=\"143\"/>\n        <source>Unauthorized</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.cpp\" line=\"144\"/>\n        <source>Polkit does not allow you to manage users on the system.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/UsersPlugin/translations/es_VE.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"es_VE\" sourcelanguage=\"en_US\">\n<context>\n    <name>AddUserDialog</name>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"93\"/>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"629\"/>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"745\"/>\n        <source>Add User</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"161\"/>\n        <source>PERSONAL DETAILS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"168\"/>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"688\"/>\n        <source>Username</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"175\"/>\n        <source>Full Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"188\"/>\n        <source>The username is generated based on the given full name. We recommend not changing it.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"245\"/>\n        <source>ADMINISTRATOR</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"262\"/>\n        <location filename=\"../settings/adduserdialog.cpp\" line=\"165\"/>\n        <source>Administrator</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"293\"/>\n        <source>STANDARD USER</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"252\"/>\n        <source>An administrator has full control over this device. They&apos;ll be able to configure systemwide settings and install software.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"300\"/>\n        <source>A standard user can&apos;t perform systemwide actions. They&apos;ll only be able to perform administrative actions that only affect their account.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"310\"/>\n        <source>Standard User</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"332\"/>\n        <source>USER TYPE</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"409\"/>\n        <source>Account Security</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"434\"/>\n        <source>Protect this account with a password to prevent anyone else logging into it.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"474\"/>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"729\"/>\n        <source>Password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"488\"/>\n        <source>Confirm Password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"505\"/>\n        <source>Password Hint</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"512\"/>\n        <source>If you forget your password, this will appear to help you remember.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"524\"/>\n        <source>Use this password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"531\"/>\n        <source>Alternatively, choose one of the following options:</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"541\"/>\n        <source>Ask for a password on the next login</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"544\"/>\n        <source>The first time the user logs in, we&apos;ll ask them for a password.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"551\"/>\n        <source>Don&apos;t set a password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"554\"/>\n        <source>Anyone will be able to log into this account.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"654\"/>\n        <source>Add this user to your system?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"695\"/>\n        <source>Real Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"702\"/>\n        <source>User Type</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.cpp\" line=\"98\"/>\n        <source>Set Password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.cpp\" line=\"104\"/>\n        <source>Ask when logging in</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.cpp\" line=\"110\"/>\n        <source>Not Set</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.cpp\" line=\"154\"/>\n        <source>Couldn&apos;t create user</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.cpp\" line=\"171\"/>\n        <source>Standard</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>ChangePasswordDialog</name>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"68\"/>\n        <source>Change Password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"94\"/>\n        <source>Set a password to protect this account.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"237\"/>\n        <source>WARNING</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"244\"/>\n        <source>This account is locked. Changing the password will unlock it.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"289\"/>\n        <source>Password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"303\"/>\n        <source>Confirm Password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"320\"/>\n        <source>Password Hint</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"327\"/>\n        <source>If you forget your password, this will appear to help you remember.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"339\"/>\n        <source>Use this password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"346\"/>\n        <source>Alternatively, choose one of the following options:</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"356\"/>\n        <source>Ask for a password on the next login</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"359\"/>\n        <source>The first time the user logs in, we&apos;ll ask them for a password.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"366\"/>\n        <source>Don&apos;t set a password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"369\"/>\n        <source>Anyone will be able to log into this account.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.cpp\" line=\"72\"/>\n        <source>Couldn&apos;t set password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.cpp\" line=\"92\"/>\n        <location filename=\"../settings/changepassworddialog.cpp\" line=\"111\"/>\n        <source>Couldn&apos;t set password policy</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>ChangeRealNameDialog</name>\n    <message>\n        <location filename=\"../settings/changerealnamedialog.ui\" line=\"68\"/>\n        <source>Change Real Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changerealnamedialog.ui\" line=\"77\"/>\n        <source>Your Real Name appears on the login screen, on the Gateway and in any other location where we need to differentiate between users.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changerealnamedialog.ui\" line=\"123\"/>\n        <source>Real Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changerealnamedialog.ui\" line=\"132\"/>\n        <source>Set Real Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changerealnamedialog.cpp\" line=\"64\"/>\n        <source>Couldn&apos;t set real name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>DeleteUserDialog</name>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"68\"/>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"153\"/>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"207\"/>\n        <source>Delete User</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"77\"/>\n        <source>What do you want to do with this user&apos;s files?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"90\"/>\n        <source>Delete Files</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"93\"/>\n        <source>Files for this user will be removed from this device.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"100\"/>\n        <source>Keep Files</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"103\"/>\n        <source>Files for this user will be kept in the same location.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"179\"/>\n        <source>Delete this user from this device?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"189\"/>\n        <source>Any data associated with this user will be gone forever. This includes\n- Home Directory\n- Mail Spool\n- Temporary Files</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"210\"/>\n        <source>They&apos;ll be gone forever!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.cpp\" line=\"74\"/>\n        <source>Couldn&apos;t delete user</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>LockUserDialog</name>\n    <message>\n        <location filename=\"../settings/lockuserdialog.ui\" line=\"68\"/>\n        <location filename=\"../settings/lockuserdialog.ui\" line=\"90\"/>\n        <source>Lock Account</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/lockuserdialog.ui\" line=\"77\"/>\n        <source>After locking this account, you won&apos;t be able to log in as this account.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/lockuserdialog.ui\" line=\"140\"/>\n        <location filename=\"../settings/lockuserdialog.ui\" line=\"162\"/>\n        <source>Unlock Account</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/lockuserdialog.ui\" line=\"149\"/>\n        <source>After unlocking this account, you&apos;ll be able to log in as this account.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/lockuserdialog.cpp\" line=\"63\"/>\n        <source>Couldn&apos;t unlock user</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/lockuserdialog.cpp\" line=\"66\"/>\n        <source>Couldn&apos;t lock user</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>OnboardingUsers</name>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"57\"/>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"582\"/>\n        <location filename=\"../onboarding/onboardingusers.cpp\" line=\"156\"/>\n        <source>Users</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"130\"/>\n        <source>Full Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"137\"/>\n        <source>Username</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"150\"/>\n        <source>ABOUT YOU</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"157\"/>\n        <source>The username is generated based on the given full name. We recommend not changing it.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"199\"/>\n        <source>Password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"206\"/>\n        <source>Password Hint</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"219\"/>\n        <source>YOUR PASSWORD</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"236\"/>\n        <source>Confirm Password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"243\"/>\n        <source>Protect this account with a password to prevent anyone else logging into it.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"257\"/>\n        <source>If you forget your password, this will appear to help you remember.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"329\"/>\n        <source>ADMINISTRATOR</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"336\"/>\n        <source>An administrator has full control over this device. They&apos;ll be able to configure systemwide settings and install software.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"346\"/>\n        <source>Administrator</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"377\"/>\n        <source>STANDARD USER</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"384\"/>\n        <source>A standard user can&apos;t perform systemwide actions. They&apos;ll only be able to perform administrative actions that only affect their account.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"394\"/>\n        <source>Standard User</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"419\"/>\n        <source>USER TYPE</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"491\"/>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"673\"/>\n        <source>Next</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"662\"/>\n        <source>Add Another User</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.cpp\" line=\"49\"/>\n        <source>It&apos;s time to get to know you. Apps will use this information to personalise your experience, and you&apos;ll use the password to log in.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.cpp\" line=\"116\"/>\n        <source>Thanks, %1. If other people will be using this device, you can add them now, or you can add them later.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.cpp\" line=\"114\"/>\n        <source>You&apos;ve added these users to your system</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.cpp\" line=\"123\"/>\n        <source>Enter the details of the next user to be added</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.cpp\" line=\"130\"/>\n        <source>Couldn&apos;t create user</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>UserTypeDialog</name>\n    <message>\n        <location filename=\"../settings/usertypedialog.ui\" line=\"93\"/>\n        <source>Change User Type</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/usertypedialog.ui\" line=\"150\"/>\n        <source>ADMINISTRATOR</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/usertypedialog.ui\" line=\"157\"/>\n        <source>An administrator has full control over this device. They&apos;ll be able to configure systemwide settings and install software.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/usertypedialog.ui\" line=\"205\"/>\n        <source>A standard user can&apos;t perform systemwide actions. They&apos;ll only be able to perform administrative actions that only affect their account.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/usertypedialog.ui\" line=\"167\"/>\n        <source>Administrator</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/usertypedialog.ui\" line=\"198\"/>\n        <source>STANDARD USER</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/usertypedialog.ui\" line=\"215\"/>\n        <source>Standard User</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/usertypedialog.cpp\" line=\"87\"/>\n        <source>Couldn&apos;t set user type</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>UsersPane</name>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"89\"/>\n        <location filename=\"../settings/userspane.cpp\" line=\"222\"/>\n        <source>Users</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"105\"/>\n        <source>New User</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"172\"/>\n        <source>No User Selected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"182\"/>\n        <source>Select a user to get started</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"288\"/>\n        <source>ACTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"298\"/>\n        <source>Change Real Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"305\"/>\n        <source>Change Password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"312\"/>\n        <source>Change User Type</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"359\"/>\n        <source>DANGER</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"376\"/>\n        <source>Delete User</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.cpp\" line=\"94\"/>\n        <source>Username: %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.cpp\" line=\"97\"/>\n        <source>Unlock User</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.cpp\" line=\"99\"/>\n        <source>Lock User</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.cpp\" line=\"143\"/>\n        <source>Unauthorized</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.cpp\" line=\"144\"/>\n        <source>Polkit does not allow you to manage users on the system.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/UsersPlugin/translations/id_ID.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"id_ID\" sourcelanguage=\"en_US\">\n<context>\n    <name>AddUserDialog</name>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"93\"/>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"629\"/>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"745\"/>\n        <source>Add User</source>\n        <translation>Tambahkan User</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"161\"/>\n        <source>PERSONAL DETAILS</source>\n        <translation>DATA PRIBADI</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"168\"/>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"688\"/>\n        <source>Username</source>\n        <translation>Nama user</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"175\"/>\n        <source>Full Name</source>\n        <translation>Nama lengkap</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"188\"/>\n        <source>The username is generated based on the given full name. We recommend not changing it.</source>\n        <translation>Nama user dibuat berdasarkan nama lengkap yang Anda tulis, sebaiknya tidak perlu diganti.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"245\"/>\n        <source>ADMINISTRATOR</source>\n        <translation>ADMINISTRATOR</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"262\"/>\n        <location filename=\"../settings/adduserdialog.cpp\" line=\"165\"/>\n        <source>Administrator</source>\n        <translation>Administrator</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"293\"/>\n        <source>STANDARD USER</source>\n        <translation>USER BIASA</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"252\"/>\n        <source>An administrator has full control over this device. They&apos;ll be able to configure systemwide settings and install software.</source>\n        <translation>Administrator punya kendali penuh atas sistem. Mereka dapat mengubah konfigurasi sistem dan menginstal software.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"300\"/>\n        <source>A standard user can&apos;t perform systemwide actions. They&apos;ll only be able to perform administrative actions that only affect their account.</source>\n        <translation>User biasa tak dapat mengubah konfigurasi sistem. Mereka hanya dapat melakukan hal-hal administratif pada akunnya sendiri.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"310\"/>\n        <source>Standard User</source>\n        <translation>User Biasa</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"332\"/>\n        <source>USER TYPE</source>\n        <translation>TIPE USER</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"409\"/>\n        <source>Account Security</source>\n        <translation>Keamanan Akun</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"434\"/>\n        <source>Protect this account with a password to prevent anyone else logging into it.</source>\n        <translation>Amankan akun dengan menggunakan password agar orang lain tak bisa login ke akun Anda.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"474\"/>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"729\"/>\n        <source>Password</source>\n        <translation>Password</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"488\"/>\n        <source>Confirm Password</source>\n        <translation>Ulangi Password</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"505\"/>\n        <source>Password Hint</source>\n        <translation>Petunjuk Password</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"512\"/>\n        <source>If you forget your password, this will appear to help you remember.</source>\n        <translation>Jika suatu saat Anda lupa password akun, ini dapat membantu Anda mengingatnya.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"524\"/>\n        <source>Use this password</source>\n        <translation>Gunakan password ini</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"531\"/>\n        <source>Alternatively, choose one of the following options:</source>\n        <translation>Kalau tidak, pilihlah salah satu dari berikut:</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"541\"/>\n        <source>Ask for a password on the next login</source>\n        <translation>Tanyakan password saat login berikutnya</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"544\"/>\n        <source>The first time the user logs in, we&apos;ll ask them for a password.</source>\n        <translation>Saat pertama kali user login, user akan diminta mengetik password.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"551\"/>\n        <source>Don&apos;t set a password</source>\n        <translation>Jangan gunakan password</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"554\"/>\n        <source>Anyone will be able to log into this account.</source>\n        <translation>Siapa saja dapat login ke akun ini.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"654\"/>\n        <source>Add this user to your system?</source>\n        <translation>Tambahkan user ke sistem?</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"695\"/>\n        <source>Real Name</source>\n        <translation>Nama Lengkap</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"702\"/>\n        <source>User Type</source>\n        <translation>Tipe User</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.cpp\" line=\"98\"/>\n        <source>Set Password</source>\n        <translation>Pilih Password</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.cpp\" line=\"104\"/>\n        <source>Ask when logging in</source>\n        <translation>Minta saat login</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.cpp\" line=\"110\"/>\n        <source>Not Set</source>\n        <translation>Tidak Diatur</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.cpp\" line=\"154\"/>\n        <source>Couldn&apos;t create user</source>\n        <translation>Tidak dapat membuat user</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.cpp\" line=\"171\"/>\n        <source>Standard</source>\n        <translation>Standar</translation>\n    </message>\n</context>\n<context>\n    <name>ChangePasswordDialog</name>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"68\"/>\n        <source>Change Password</source>\n        <translation>Ganti Password</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"94\"/>\n        <source>Set a password to protect this account.</source>\n        <translation>Atur password untuk mengamankan akun ini.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"237\"/>\n        <source>WARNING</source>\n        <translation>PERINGATAN</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"244\"/>\n        <source>This account is locked. Changing the password will unlock it.</source>\n        <translation>Akun ini terkunci. Mengganti password akan membuka akun.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"289\"/>\n        <source>Password</source>\n        <translation>Password</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"303\"/>\n        <source>Confirm Password</source>\n        <translation>Ulangi Password</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"320\"/>\n        <source>Password Hint</source>\n        <translation>Petunjuk Password</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"327\"/>\n        <source>If you forget your password, this will appear to help you remember.</source>\n        <translation>Jika suatu saat Anda lupa password akun, ini dapat membantu Anda mengingatnya.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"339\"/>\n        <source>Use this password</source>\n        <translation>Gunakan password ini</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"346\"/>\n        <source>Alternatively, choose one of the following options:</source>\n        <translation>Kalau tidak, pilihlah salah satu dari berikut:</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"356\"/>\n        <source>Ask for a password on the next login</source>\n        <translation>Tanyakan password saat login berikutnya</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"359\"/>\n        <source>The first time the user logs in, we&apos;ll ask them for a password.</source>\n        <translation>Saat pertama kali user login, user akan diminta mengetik password.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"366\"/>\n        <source>Don&apos;t set a password</source>\n        <translation>Jangan gunakan password</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"369\"/>\n        <source>Anyone will be able to log into this account.</source>\n        <translation>Siapa saja dapat login ke akun ini.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.cpp\" line=\"72\"/>\n        <source>Couldn&apos;t set password</source>\n        <translation>Tidak dapat mengatur password</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.cpp\" line=\"92\"/>\n        <location filename=\"../settings/changepassworddialog.cpp\" line=\"111\"/>\n        <source>Couldn&apos;t set password policy</source>\n        <translation>Tidak dapat mengatur kebijakan password</translation>\n    </message>\n</context>\n<context>\n    <name>ChangeRealNameDialog</name>\n    <message>\n        <location filename=\"../settings/changerealnamedialog.ui\" line=\"68\"/>\n        <source>Change Real Name</source>\n        <translation>Ganti Nama Lengkap</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changerealnamedialog.ui\" line=\"77\"/>\n        <source>Your Real Name appears on the login screen, on the Gateway and in any other location where we need to differentiate between users.</source>\n        <translation>Nama Lengkap Anda akan muncul pada login screen, pada Gerbang Aplikasi serta tempat-tempat lain dimana user dibedakan dengan jelas.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changerealnamedialog.ui\" line=\"123\"/>\n        <source>Real Name</source>\n        <translation>Nama Lengkap</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changerealnamedialog.ui\" line=\"132\"/>\n        <source>Set Real Name</source>\n        <translation>Atur Nama Lengkap</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changerealnamedialog.cpp\" line=\"64\"/>\n        <source>Couldn&apos;t set real name</source>\n        <translation>Tidak dapat mengatur nama lengkap</translation>\n    </message>\n</context>\n<context>\n    <name>DeleteUserDialog</name>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"68\"/>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"153\"/>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"207\"/>\n        <source>Delete User</source>\n        <translation>Hapus User</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"77\"/>\n        <source>What do you want to do with this user&apos;s files?</source>\n        <translation>Apa yang ingin Anda lakukan dengan file-file user ini?</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"90\"/>\n        <source>Delete Files</source>\n        <translation>Hapus</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"93\"/>\n        <source>Files for this user will be removed from this device.</source>\n        <translation>Semua file dari user ini akan dihapus dari sistem.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"100\"/>\n        <source>Keep Files</source>\n        <translation>Simpan</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"103\"/>\n        <source>Files for this user will be kept in the same location.</source>\n        <translation>Semua file dari user ini akan disimpan di lokasi yang sama.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"179\"/>\n        <source>Delete this user from this device?</source>\n        <translation>Hapus user ini dari sistem?</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"189\"/>\n        <source>Any data associated with this user will be gone forever. This includes\n- Home Directory\n- Mail Spool\n- Temporary Files</source>\n        <translation>Semua data terkait user ini akan hilang selamanya. Ini termasuk\n- Direktori Home\n- Pesan (mail spool)\n- File Sementara</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"210\"/>\n        <source>They&apos;ll be gone forever!</source>\n        <translation>User ini akan hilang selamanya!</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.cpp\" line=\"74\"/>\n        <source>Couldn&apos;t delete user</source>\n        <translation>Tidak dapat menghapus user</translation>\n    </message>\n</context>\n<context>\n    <name>LockUserDialog</name>\n    <message>\n        <location filename=\"../settings/lockuserdialog.ui\" line=\"68\"/>\n        <location filename=\"../settings/lockuserdialog.ui\" line=\"90\"/>\n        <source>Lock Account</source>\n        <translation>Kunci Akun</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/lockuserdialog.ui\" line=\"77\"/>\n        <source>After locking this account, you won&apos;t be able to log in as this account.</source>\n        <translation>Setelah mengunci akun ini, Anda tidak dapat login ke akun tersebut.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/lockuserdialog.ui\" line=\"140\"/>\n        <location filename=\"../settings/lockuserdialog.ui\" line=\"162\"/>\n        <source>Unlock Account</source>\n        <translation>Buka Akun</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/lockuserdialog.ui\" line=\"149\"/>\n        <source>After unlocking this account, you&apos;ll be able to log in as this account.</source>\n        <translation>Setelah membuka akun ini, Anda dapat kembali login ke akun tersebut.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/lockuserdialog.cpp\" line=\"63\"/>\n        <source>Couldn&apos;t unlock user</source>\n        <translation>Tidak dapat membuka user</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/lockuserdialog.cpp\" line=\"66\"/>\n        <source>Couldn&apos;t lock user</source>\n        <translation>Tidak dapat mengunci user</translation>\n    </message>\n</context>\n<context>\n    <name>OnboardingUsers</name>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"57\"/>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"582\"/>\n        <location filename=\"../onboarding/onboardingusers.cpp\" line=\"156\"/>\n        <source>Users</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"130\"/>\n        <source>Full Name</source>\n        <translation type=\"unfinished\">Nama lengkap</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"137\"/>\n        <source>Username</source>\n        <translation type=\"unfinished\">Nama user</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"150\"/>\n        <source>ABOUT YOU</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"157\"/>\n        <source>The username is generated based on the given full name. We recommend not changing it.</source>\n        <translation type=\"unfinished\">Nama user dibuat berdasarkan nama lengkap yang Anda tulis, sebaiknya tidak perlu diganti.</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"199\"/>\n        <source>Password</source>\n        <translation type=\"unfinished\">Password</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"206\"/>\n        <source>Password Hint</source>\n        <translation type=\"unfinished\">Petunjuk Password</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"219\"/>\n        <source>YOUR PASSWORD</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"236\"/>\n        <source>Confirm Password</source>\n        <translation type=\"unfinished\">Ulangi Password</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"243\"/>\n        <source>Protect this account with a password to prevent anyone else logging into it.</source>\n        <translation type=\"unfinished\">Amankan akun dengan menggunakan password agar orang lain tak bisa login ke akun Anda.</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"257\"/>\n        <source>If you forget your password, this will appear to help you remember.</source>\n        <translation type=\"unfinished\">Jika suatu saat Anda lupa password akun, ini dapat membantu Anda mengingatnya.</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"329\"/>\n        <source>ADMINISTRATOR</source>\n        <translation type=\"unfinished\">ADMINISTRATOR</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"336\"/>\n        <source>An administrator has full control over this device. They&apos;ll be able to configure systemwide settings and install software.</source>\n        <translation type=\"unfinished\">Administrator punya kendali penuh atas sistem. Mereka dapat mengubah konfigurasi sistem dan menginstal software.</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"346\"/>\n        <source>Administrator</source>\n        <translation type=\"unfinished\">Administrator</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"377\"/>\n        <source>STANDARD USER</source>\n        <translation type=\"unfinished\">USER BIASA</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"384\"/>\n        <source>A standard user can&apos;t perform systemwide actions. They&apos;ll only be able to perform administrative actions that only affect their account.</source>\n        <translation type=\"unfinished\">User biasa tak dapat mengubah konfigurasi sistem. Mereka hanya dapat melakukan hal-hal administratif pada akunnya sendiri.</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"394\"/>\n        <source>Standard User</source>\n        <translation type=\"unfinished\">User Biasa</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"419\"/>\n        <source>USER TYPE</source>\n        <translation type=\"unfinished\">TIPE USER</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"491\"/>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"673\"/>\n        <source>Next</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"662\"/>\n        <source>Add Another User</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.cpp\" line=\"49\"/>\n        <source>It&apos;s time to get to know you. Apps will use this information to personalise your experience, and you&apos;ll use the password to log in.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.cpp\" line=\"116\"/>\n        <source>Thanks, %1. If other people will be using this device, you can add them now, or you can add them later.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.cpp\" line=\"114\"/>\n        <source>You&apos;ve added these users to your system</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.cpp\" line=\"123\"/>\n        <source>Enter the details of the next user to be added</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.cpp\" line=\"130\"/>\n        <source>Couldn&apos;t create user</source>\n        <translation type=\"unfinished\">Tidak dapat membuat user</translation>\n    </message>\n</context>\n<context>\n    <name>UserTypeDialog</name>\n    <message>\n        <location filename=\"../settings/usertypedialog.ui\" line=\"93\"/>\n        <source>Change User Type</source>\n        <translation>Ganti Tipe User</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/usertypedialog.ui\" line=\"150\"/>\n        <source>ADMINISTRATOR</source>\n        <translation>ADMINISTRATOR</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/usertypedialog.ui\" line=\"157\"/>\n        <source>An administrator has full control over this device. They&apos;ll be able to configure systemwide settings and install software.</source>\n        <translation type=\"unfinished\">Administrator punya kendali penuh atas sistem. Mereka dapat mengubah konfigurasi sistem dan menginstal software.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/usertypedialog.ui\" line=\"205\"/>\n        <source>A standard user can&apos;t perform systemwide actions. They&apos;ll only be able to perform administrative actions that only affect their account.</source>\n        <translation type=\"unfinished\">User biasa tak dapat mengubah konfigurasi sistem. Mereka hanya dapat melakukan hal-hal administratif pada akunnya sendiri.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/usertypedialog.ui\" line=\"167\"/>\n        <source>Administrator</source>\n        <translation type=\"unfinished\">Administrator</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/usertypedialog.ui\" line=\"198\"/>\n        <source>STANDARD USER</source>\n        <translation type=\"unfinished\">USER BIASA</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/usertypedialog.ui\" line=\"215\"/>\n        <source>Standard User</source>\n        <translation type=\"unfinished\">User Biasa</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/usertypedialog.cpp\" line=\"87\"/>\n        <source>Couldn&apos;t set user type</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>UsersPane</name>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"89\"/>\n        <location filename=\"../settings/userspane.cpp\" line=\"222\"/>\n        <source>Users</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"105\"/>\n        <source>New User</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"172\"/>\n        <source>No User Selected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"182\"/>\n        <source>Select a user to get started</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"288\"/>\n        <source>ACTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"298\"/>\n        <source>Change Real Name</source>\n        <translation type=\"unfinished\">Ganti Nama Lengkap</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"305\"/>\n        <source>Change Password</source>\n        <translation type=\"unfinished\">Ganti Password</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"312\"/>\n        <source>Change User Type</source>\n        <translation type=\"unfinished\">Ganti Tipe User</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"359\"/>\n        <source>DANGER</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"376\"/>\n        <source>Delete User</source>\n        <translation type=\"unfinished\">Hapus User</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.cpp\" line=\"94\"/>\n        <source>Username: %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.cpp\" line=\"97\"/>\n        <source>Unlock User</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.cpp\" line=\"99\"/>\n        <source>Lock User</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.cpp\" line=\"143\"/>\n        <source>Unauthorized</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.cpp\" line=\"144\"/>\n        <source>Polkit does not allow you to manage users on the system.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/UsersPlugin/translations/nl.ts",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<TS version=\"2.1\" language=\"nl\">\n  <context>\n    <name>AddUserDialog</name>\n    <message>\n      <translation>Gebruiker Toevoegen</translation>\n      <location filename=\"../settings/adduserdialog.ui\" line=\"93\" />\n      <location filename=\"../settings/adduserdialog.ui\" line=\"629\" />\n      <location filename=\"../settings/adduserdialog.ui\" line=\"745\" />\n      <source>Add User</source>\n    </message>\n    <message>\n      <translation>PERSOONSGEGEVENS</translation>\n      <location filename=\"../settings/adduserdialog.ui\" line=\"161\" />\n      <source>PERSONAL DETAILS</source>\n    </message>\n    <message>\n      <translation>Gebruikersnaam</translation>\n      <location filename=\"../settings/adduserdialog.ui\" line=\"168\" />\n      <location filename=\"../settings/adduserdialog.ui\" line=\"688\" />\n      <source>Username</source>\n    </message>\n    <message>\n      <translation>Volledige Naam</translation>\n      <location filename=\"../settings/adduserdialog.ui\" line=\"175\" />\n      <source>Full Name</source>\n    </message>\n    <message>\n      <translation>De gebruikersnaam wordt gegenereerd op basis van de gegeven volledige naam. We raden aan om hem niet te wijzigen.</translation>\n      <location filename=\"../settings/adduserdialog.ui\" line=\"188\" />\n      <source>The username is generated based on the given full name. We recommend not changing it.</source>\n    </message>\n    <message>\n      <translation>BEHEERDER</translation>\n      <location filename=\"../settings/adduserdialog.ui\" line=\"245\" />\n      <source>ADMINISTRATOR</source>\n    </message>\n    <message>\n      <translation>Beheerder</translation>\n      <location filename=\"../settings/adduserdialog.ui\" line=\"262\" />\n      <location filename=\"../settings/adduserdialog.cpp\" line=\"165\" />\n      <source>Administrator</source>\n    </message>\n    <message>\n      <translation>STANDAARDGEBRUIKER</translation>\n      <location filename=\"../settings/adduserdialog.ui\" line=\"293\" />\n      <source>STANDARD USER</source>\n    </message>\n    <message>\n      <translation>Beheerders hebben volledige controle over dit apparaat. Ze kunnen systeembrede instellingen aanpassen en software installeren.</translation>\n      <location filename=\"../settings/adduserdialog.ui\" line=\"252\" />\n      <source>An administrator has full control over this device. They'll be able to configure systemwide settings and install software.</source>\n    </message>\n    <message>\n      <translation>Standaardgebruikers kunnen geen systeembrede acties uitvoeren. Ze kunnen alleen administratieve acties uitvoeren die alleen van toepassing zijn op hun eigen account.</translation>\n      <location filename=\"../settings/adduserdialog.ui\" line=\"300\" />\n      <source>A standard user can't perform systemwide actions. They'll only be able to perform administrative actions that only affect their account.</source>\n    </message>\n    <message>\n      <translation>Standaardgebruiker</translation>\n      <location filename=\"../settings/adduserdialog.ui\" line=\"310\" />\n      <source>Standard User</source>\n    </message>\n    <message>\n      <translation>GEBRUIKERSTYPE</translation>\n      <location filename=\"../settings/adduserdialog.ui\" line=\"332\" />\n      <source>USER TYPE</source>\n    </message>\n    <message>\n      <translation>Accountbeveiliging</translation>\n      <location filename=\"../settings/adduserdialog.ui\" line=\"409\" />\n      <source>Account Security</source>\n    </message>\n    <message>\n      <translation>Bescherm dit account met een wachtwoord om te voorkomen dat iemand anders ermee inlogt.</translation>\n      <location filename=\"../settings/adduserdialog.ui\" line=\"434\" />\n      <source>Protect this account with a password to prevent anyone else logging into it.</source>\n    </message>\n    <message>\n      <translation>Wachtwoord</translation>\n      <location filename=\"../settings/adduserdialog.ui\" line=\"474\" />\n      <location filename=\"../settings/adduserdialog.ui\" line=\"729\" />\n      <source>Password</source>\n    </message>\n    <message>\n      <translation>Wachtwoord Bevestigen</translation>\n      <location filename=\"../settings/adduserdialog.ui\" line=\"488\" />\n      <source>Confirm Password</source>\n    </message>\n    <message>\n      <translation>Wachtwoordhint</translation>\n      <location filename=\"../settings/adduserdialog.ui\" line=\"505\" />\n      <source>Password Hint</source>\n    </message>\n    <message>\n      <translation>Als je je wachtwoord vergeet, verschijnt dit om je te helpen herinneren.</translation>\n      <location filename=\"../settings/adduserdialog.ui\" line=\"512\" />\n      <source>If you forget your password, this will appear to help you remember.</source>\n    </message>\n    <message>\n      <translation>Dit wachtwoord gebruiken</translation>\n      <location filename=\"../settings/adduserdialog.ui\" line=\"524\" />\n      <source>Use this password</source>\n    </message>\n    <message>\n      <translation>Of kies een van de volgende opties:</translation>\n      <location filename=\"../settings/adduserdialog.ui\" line=\"531\" />\n      <source>Alternatively, choose one of the following options:</source>\n    </message>\n    <message>\n      <translation>Om een wachtwoord vragen bij de volgende login</translation>\n      <location filename=\"../settings/adduserdialog.ui\" line=\"541\" />\n      <source>Ask for a password on the next login</source>\n    </message>\n    <message>\n      <translation>De eerste keer dat de gebruiker inlogt, zullen we om een wachtwoord vragen.</translation>\n      <location filename=\"../settings/adduserdialog.ui\" line=\"544\" />\n      <source>The first time the user logs in, we'll ask them for a password.</source>\n    </message>\n    <message>\n      <translation>Geen wachtwoord instellen</translation>\n      <location filename=\"../settings/adduserdialog.ui\" line=\"551\" />\n      <source>Don't set a password</source>\n    </message>\n    <message>\n      <translation>Iedereen kan met dit account inloggen.</translation>\n      <location filename=\"../settings/adduserdialog.ui\" line=\"554\" />\n      <source>Anyone will be able to log into this account.</source>\n    </message>\n    <message>\n      <translation>Deze gebruiker aan je systeem toevoegen?</translation>\n      <location filename=\"../settings/adduserdialog.ui\" line=\"654\" />\n      <source>Add this user to your system?</source>\n    </message>\n    <message>\n      <translation>Echte Naam</translation>\n      <location filename=\"../settings/adduserdialog.ui\" line=\"695\" />\n      <source>Real Name</source>\n    </message>\n    <message>\n      <translation>Gebruikerstype</translation>\n      <location filename=\"../settings/adduserdialog.ui\" line=\"702\" />\n      <source>User Type</source>\n    </message>\n    <message>\n      <translation>Wachtwoord Instellen</translation>\n      <location filename=\"../settings/adduserdialog.cpp\" line=\"98\" />\n      <source>Set Password</source>\n    </message>\n    <message>\n      <translation>Vragen bij het inloggen</translation>\n      <location filename=\"../settings/adduserdialog.cpp\" line=\"104\" />\n      <source>Ask when logging in</source>\n    </message>\n    <message>\n      <translation>Niet Ingesteld</translation>\n      <location filename=\"../settings/adduserdialog.cpp\" line=\"110\" />\n      <source>Not Set</source>\n    </message>\n    <message>\n      <translation>Kon gebruiker niet aanmaken</translation>\n      <location filename=\"../settings/adduserdialog.cpp\" line=\"154\" />\n      <source>Couldn't create user</source>\n    </message>\n    <message>\n      <translation>Standaard</translation>\n      <location filename=\"../settings/adduserdialog.cpp\" line=\"171\" />\n      <source>Standard</source>\n    </message>\n  </context>\n  <context>\n    <name>ChangePasswordDialog</name>\n    <message>\n      <translation>Wachtwoord Wijzigen</translation>\n      <location filename=\"../settings/changepassworddialog.ui\" line=\"68\" />\n      <source>Change Password</source>\n    </message>\n    <message>\n      <translation>Stel een wachtwoord in om dit account te beschermen.</translation>\n      <location filename=\"../settings/changepassworddialog.ui\" line=\"94\" />\n      <source>Set a password to protect this account.</source>\n    </message>\n    <message>\n      <translation>WAARSCHUWING</translation>\n      <location filename=\"../settings/changepassworddialog.ui\" line=\"237\" />\n      <source>WARNING</source>\n    </message>\n    <message>\n      <translation>Dit account is vergrendeld. Door het wachtwoord aan te passen wordt het ontgrendeld.</translation>\n      <location filename=\"../settings/changepassworddialog.ui\" line=\"244\" />\n      <source>This account is locked. Changing the password will unlock it.</source>\n    </message>\n    <message>\n      <translation>Wachtwoord</translation>\n      <location filename=\"../settings/changepassworddialog.ui\" line=\"289\" />\n      <source>Password</source>\n    </message>\n    <message>\n      <translation>Wachtwoord Bevestigen</translation>\n      <location filename=\"../settings/changepassworddialog.ui\" line=\"303\" />\n      <source>Confirm Password</source>\n    </message>\n    <message>\n      <translation>Wachtwoordhint</translation>\n      <location filename=\"../settings/changepassworddialog.ui\" line=\"320\" />\n      <source>Password Hint</source>\n    </message>\n    <message>\n      <translation>Als je je wachtwoord vergeet, verschijnt dit om je te helpen herinneren.</translation>\n      <location filename=\"../settings/changepassworddialog.ui\" line=\"327\" />\n      <source>If you forget your password, this will appear to help you remember.</source>\n    </message>\n    <message>\n      <translation>Dit wachtwoord gebruiken</translation>\n      <location filename=\"../settings/changepassworddialog.ui\" line=\"339\" />\n      <source>Use this password</source>\n    </message>\n    <message>\n      <translation>Of kies een van de volgende opties:</translation>\n      <location filename=\"../settings/changepassworddialog.ui\" line=\"346\" />\n      <source>Alternatively, choose one of the following options:</source>\n    </message>\n    <message>\n      <translation></translation>\n      <location filename=\"../settings/changepassworddialog.ui\" line=\"356\" />\n      <source>Ask for a password on the next login</source>\n    </message>\n    <message>\n      <translation></translation>\n      <location filename=\"../settings/changepassworddialog.ui\" line=\"359\" />\n      <source>The first time the user logs in, we'll ask them for a password.</source>\n    </message>\n    <message>\n      <translation></translation>\n      <location filename=\"../settings/changepassworddialog.ui\" line=\"366\" />\n      <source>Don't set a password</source>\n    </message>\n    <message>\n      <translation></translation>\n      <location filename=\"../settings/changepassworddialog.ui\" line=\"369\" />\n      <source>Anyone will be able to log into this account.</source>\n    </message>\n    <message>\n      <translation></translation>\n      <location filename=\"../settings/changepassworddialog.cpp\" line=\"72\" />\n      <source>Couldn't set password</source>\n    </message>\n    <message>\n      <translation></translation>\n      <location filename=\"../settings/changepassworddialog.cpp\" line=\"92\" />\n      <location filename=\"../settings/changepassworddialog.cpp\" line=\"111\" />\n      <source>Couldn't set password policy</source>\n    </message>\n  </context>\n  <context>\n    <name>ChangeRealNameDialog</name>\n    <message>\n      <translation>Echte Naam Wijzigen</translation>\n      <location filename=\"../settings/changerealnamedialog.ui\" line=\"68\" />\n      <source>Change Real Name</source>\n    </message>\n    <message>\n      <translation>Je Echte Naam veschijnt op het loginscherm, in de Gateway en op andere plekken waar we onderscheid moeten maken tussen gebruikers.</translation>\n      <location filename=\"../settings/changerealnamedialog.ui\" line=\"77\" />\n      <source>Your Real Name appears on the login screen, on the Gateway and in any other location where we need to differentiate between users.</source>\n    </message>\n    <message>\n      <translation>Echte Naam</translation>\n      <location filename=\"../settings/changerealnamedialog.ui\" line=\"123\" />\n      <source>Real Name</source>\n    </message>\n    <message>\n      <translation>Echte Naam Instellen</translation>\n      <location filename=\"../settings/changerealnamedialog.ui\" line=\"132\" />\n      <source>Set Real Name</source>\n    </message>\n    <message>\n      <translation>Kon echte naam niet instellen</translation>\n      <location filename=\"../settings/changerealnamedialog.cpp\" line=\"64\" />\n      <source>Couldn't set real name</source>\n    </message>\n  </context>\n  <context>\n    <name>DeleteUserDialog</name>\n    <message>\n      <translation>Gebruiker Verwijderen</translation>\n      <location filename=\"../settings/deleteuserdialog.ui\" line=\"68\" />\n      <location filename=\"../settings/deleteuserdialog.ui\" line=\"153\" />\n      <location filename=\"../settings/deleteuserdialog.ui\" line=\"207\" />\n      <source>Delete User</source>\n    </message>\n    <message>\n      <translation>Wat wil je doen met de bestanden van deze gebruiker?</translation>\n      <location filename=\"../settings/deleteuserdialog.ui\" line=\"77\" />\n      <source>What do you want to do with this user's files?</source>\n    </message>\n    <message>\n      <translation>Bestanden Verwijderen</translation>\n      <location filename=\"../settings/deleteuserdialog.ui\" line=\"90\" />\n      <source>Delete Files</source>\n    </message>\n    <message>\n      <translation>De bestanden van deze gebruiker worden van dit apparaat verwijderd.</translation>\n      <location filename=\"../settings/deleteuserdialog.ui\" line=\"93\" />\n      <source>Files for this user will be removed from this device.</source>\n    </message>\n    <message>\n      <translation>Bestanden Houden</translation>\n      <location filename=\"../settings/deleteuserdialog.ui\" line=\"100\" />\n      <source>Keep Files</source>\n    </message>\n    <message>\n      <translation>Bestanden van deze gebruiker blijven op dezelfde locatie staan.</translation>\n      <location filename=\"../settings/deleteuserdialog.ui\" line=\"103\" />\n      <source>Files for this user will be kept in the same location.</source>\n    </message>\n    <message>\n      <translation>Deze gebruiker van dit apparaat verwijderen?</translation>\n      <location filename=\"../settings/deleteuserdialog.ui\" line=\"179\" />\n      <source>Delete this user from this device?</source>\n    </message>\n    <message>\n      <translation>Alle gegevens verbonden aan deze gebruiker zullen voor altijd weg zijn, bijvoorbeeld:\n- Home Directory\n- Mail Spool\n- Tijdelijke Bestanden</translation>\n      <location filename=\"../settings/deleteuserdialog.ui\" line=\"189\" />\n      <source>Any data associated with this user will be gone forever. This includes\n- Home Directory\n- Mail Spool\n- Temporary Files</source>\n    </message>\n    <message>\n      <translation>Ze gaan voor altijd weg!</translation>\n      <location filename=\"../settings/deleteuserdialog.ui\" line=\"210\" />\n      <source>They'll be gone forever!</source>\n    </message>\n    <message>\n      <translation>Kon gebruiker niet verwijderen</translation>\n      <location filename=\"../settings/deleteuserdialog.cpp\" line=\"74\" />\n      <source>Couldn't delete user</source>\n    </message>\n  </context>\n  <context>\n    <name>LockUserDialog</name>\n    <message>\n      <translation>Account Vergrendelen</translation>\n      <location filename=\"../settings/lockuserdialog.ui\" line=\"68\" />\n      <location filename=\"../settings/lockuserdialog.ui\" line=\"90\" />\n      <source>Lock Account</source>\n    </message>\n    <message>\n      <translation>Door dit account te vergrendelen, kun je niet inloggen met dit account.</translation>\n      <location filename=\"../settings/lockuserdialog.ui\" line=\"77\" />\n      <source>After locking this account, you won't be able to log in as this account.</source>\n    </message>\n    <message>\n      <translation>Account Ontgrendelen</translation>\n      <location filename=\"../settings/lockuserdialog.ui\" line=\"140\" />\n      <location filename=\"../settings/lockuserdialog.ui\" line=\"162\" />\n      <source>Unlock Account</source>\n    </message>\n    <message>\n      <translation>Door dit account te ontgrendelen, kun je weer inloggen met dit account.</translation>\n      <location filename=\"../settings/lockuserdialog.ui\" line=\"149\" />\n      <source>After unlocking this account, you'll be able to log in as this account.</source>\n    </message>\n    <message>\n      <translation>Kon gebruiker niet ontgrendelen</translation>\n      <location filename=\"../settings/lockuserdialog.cpp\" line=\"63\" />\n      <source>Couldn't unlock user</source>\n    </message>\n    <message>\n      <translation>Kon gebruiker niet vergrendelen</translation>\n      <location filename=\"../settings/lockuserdialog.cpp\" line=\"66\" />\n      <source>Couldn't lock user</source>\n    </message>\n  </context>\n  <context>\n    <name>OnboardingUsers</name>\n    <message>\n      <translation>Gebruikers</translation>\n      <location filename=\"../onboarding/onboardingusers.ui\" line=\"57\" />\n      <location filename=\"../onboarding/onboardingusers.ui\" line=\"582\" />\n      <location filename=\"../onboarding/onboardingusers.cpp\" line=\"156\" />\n      <source>Users</source>\n    </message>\n    <message>\n      <translation>Volledige Naam</translation>\n      <location filename=\"../onboarding/onboardingusers.ui\" line=\"130\" />\n      <source>Full Name</source>\n    </message>\n    <message>\n      <translation>Gebruikersnaam</translation>\n      <location filename=\"../onboarding/onboardingusers.ui\" line=\"137\" />\n      <source>Username</source>\n    </message>\n    <message>\n      <translation>OVER JOU</translation>\n      <location filename=\"../onboarding/onboardingusers.ui\" line=\"150\" />\n      <source>ABOUT YOU</source>\n    </message>\n    <message>\n      <translation></translation>\n      <location filename=\"../onboarding/onboardingusers.ui\" line=\"157\" />\n      <source>The username is generated based on the given full name. We recommend not changing it.</source>\n    </message>\n    <message>\n      <translation></translation>\n      <location filename=\"../onboarding/onboardingusers.ui\" line=\"199\" />\n      <source>Password</source>\n    </message>\n    <message>\n      <translation></translation>\n      <location filename=\"../onboarding/onboardingusers.ui\" line=\"206\" />\n      <source>Password Hint</source>\n    </message>\n    <message>\n      <translation></translation>\n      <location filename=\"../onboarding/onboardingusers.ui\" line=\"219\" />\n      <source>YOUR PASSWORD</source>\n    </message>\n    <message>\n      <translation></translation>\n      <location filename=\"../onboarding/onboardingusers.ui\" line=\"236\" />\n      <source>Confirm Password</source>\n    </message>\n    <message>\n      <translation></translation>\n      <location filename=\"../onboarding/onboardingusers.ui\" line=\"243\" />\n      <source>Protect this account with a password to prevent anyone else logging into it.</source>\n    </message>\n    <message>\n      <translation></translation>\n      <location filename=\"../onboarding/onboardingusers.ui\" line=\"257\" />\n      <source>If you forget your password, this will appear to help you remember.</source>\n    </message>\n    <message>\n      <translation></translation>\n      <location filename=\"../onboarding/onboardingusers.ui\" line=\"329\" />\n      <source>ADMINISTRATOR</source>\n    </message>\n    <message>\n      <translation></translation>\n      <location filename=\"../onboarding/onboardingusers.ui\" line=\"336\" />\n      <source>An administrator has full control over this device. They'll be able to configure systemwide settings and install software.</source>\n    </message>\n    <message>\n      <translation></translation>\n      <location filename=\"../onboarding/onboardingusers.ui\" line=\"346\" />\n      <source>Administrator</source>\n    </message>\n    <message>\n      <translation></translation>\n      <location filename=\"../onboarding/onboardingusers.ui\" line=\"377\" />\n      <source>STANDARD USER</source>\n    </message>\n    <message>\n      <translation></translation>\n      <location filename=\"../onboarding/onboardingusers.ui\" line=\"384\" />\n      <source>A standard user can't perform systemwide actions. They'll only be able to perform administrative actions that only affect their account.</source>\n    </message>\n    <message>\n      <translation></translation>\n      <location filename=\"../onboarding/onboardingusers.ui\" line=\"394\" />\n      <source>Standard User</source>\n    </message>\n    <message>\n      <translation></translation>\n      <location filename=\"../onboarding/onboardingusers.ui\" line=\"419\" />\n      <source>USER TYPE</source>\n    </message>\n    <message>\n      <translation>Volgende</translation>\n      <location filename=\"../onboarding/onboardingusers.ui\" line=\"491\" />\n      <location filename=\"../onboarding/onboardingusers.ui\" line=\"673\" />\n      <source>Next</source>\n    </message>\n    <message>\n      <translation>Nog een Gebruiker Toevoegen</translation>\n      <location filename=\"../onboarding/onboardingusers.ui\" line=\"662\" />\n      <source>Add Another User</source>\n    </message>\n    <message>\n      <translation>Tijd om je te leren kennen! Apps gebruiken deze informatie om je ervaring te personaliseren en je zult dit wachtwoord gebruiken om in te loggen.</translation>\n      <location filename=\"../onboarding/onboardingusers.cpp\" line=\"49\" />\n      <source>It's time to get to know you. Apps will use this information to personalise your experience, and you'll use the password to log in.</source>\n    </message>\n    <message>\n      <translation>Dankjewel, %1.  Als anderen dit apparaat ook gaan gebruiken, kun je ze nu toevoegen, of later.</translation>\n      <location filename=\"../onboarding/onboardingusers.cpp\" line=\"116\" />\n      <source>Thanks, %1. If other people will be using this device, you can add them now, or you can add them later.</source>\n    </message>\n    <message>\n      <translation>Je hebt deze gebruikers aan je systeem toegevoegd</translation>\n      <location filename=\"../onboarding/onboardingusers.cpp\" line=\"114\" />\n      <source>You've added these users to your system</source>\n    </message>\n    <message>\n      <translation>Vul de gegevens in van de volgende toe te voegen gebruiker</translation>\n      <location filename=\"../onboarding/onboardingusers.cpp\" line=\"123\" />\n      <source>Enter the details of the next user to be added</source>\n    </message>\n    <message>\n      <translation>Kon gebruiker niet aanmaken</translation>\n      <location filename=\"../onboarding/onboardingusers.cpp\" line=\"130\" />\n      <source>Couldn't create user</source>\n    </message>\n  </context>\n  <context>\n    <name>UserTypeDialog</name>\n    <message>\n      <translation>Gebruikerstype Wijzigen</translation>\n      <location filename=\"../settings/usertypedialog.ui\" line=\"93\" />\n      <source>Change User Type</source>\n    </message>\n    <message>\n      <translation></translation>\n      <location filename=\"../settings/usertypedialog.ui\" line=\"150\" />\n      <source>ADMINISTRATOR</source>\n    </message>\n    <message>\n      <translation></translation>\n      <location filename=\"../settings/usertypedialog.ui\" line=\"157\" />\n      <source>An administrator has full control over this device. They'll be able to configure systemwide settings and install software.</source>\n    </message>\n    <message>\n      <translation></translation>\n      <location filename=\"../settings/usertypedialog.ui\" line=\"205\" />\n      <source>A standard user can't perform systemwide actions. They'll only be able to perform administrative actions that only affect their account.</source>\n    </message>\n    <message>\n      <translation></translation>\n      <location filename=\"../settings/usertypedialog.ui\" line=\"167\" />\n      <source>Administrator</source>\n    </message>\n    <message>\n      <translation></translation>\n      <location filename=\"../settings/usertypedialog.ui\" line=\"198\" />\n      <source>STANDARD USER</source>\n    </message>\n    <message>\n      <translation></translation>\n      <location filename=\"../settings/usertypedialog.ui\" line=\"215\" />\n      <source>Standard User</source>\n    </message>\n    <message>\n      <translation>Kon gebruikerstype niet instellen</translation>\n      <location filename=\"../settings/usertypedialog.cpp\" line=\"87\" />\n      <source>Couldn't set user type</source>\n    </message>\n  </context>\n  <context>\n    <name>UsersPane</name>\n    <message>\n      <translation>Gebruiker</translation>\n      <location filename=\"../settings/userspane.ui\" line=\"89\" />\n      <location filename=\"../settings/userspane.cpp\" line=\"222\" />\n      <source>Users</source>\n    </message>\n    <message>\n      <translation>Nieuwe Gebruiker</translation>\n      <location filename=\"../settings/userspane.ui\" line=\"105\" />\n      <source>New User</source>\n    </message>\n    <message>\n      <translation>Geen Gebruiker Geselecteerd</translation>\n      <location filename=\"../settings/userspane.ui\" line=\"172\" />\n      <source>No User Selected</source>\n    </message>\n    <message>\n      <translation>Kies een gebruiker om te beginnen</translation>\n      <location filename=\"../settings/userspane.ui\" line=\"182\" />\n      <source>Select a user to get started</source>\n    </message>\n    <message>\n      <translation>ACTIES</translation>\n      <location filename=\"../settings/userspane.ui\" line=\"288\" />\n      <source>ACTIONS</source>\n    </message>\n    <message>\n      <translation>Echte Naam Wijzigen</translation>\n      <location filename=\"../settings/userspane.ui\" line=\"298\" />\n      <source>Change Real Name</source>\n    </message>\n    <message>\n      <translation>Wachtwoord Wijzigen</translation>\n      <location filename=\"../settings/userspane.ui\" line=\"305\" />\n      <source>Change Password</source>\n    </message>\n    <message>\n      <translation>Gebruikerstype Wijzigen</translation>\n      <location filename=\"../settings/userspane.ui\" line=\"312\" />\n      <source>Change User Type</source>\n    </message>\n    <message>\n      <translation>GEVAAR</translation>\n      <location filename=\"../settings/userspane.ui\" line=\"359\" />\n      <source>DANGER</source>\n    </message>\n    <message>\n      <translation>Gebruiker Verwijderen</translation>\n      <location filename=\"../settings/userspane.ui\" line=\"376\" />\n      <source>Delete User</source>\n    </message>\n    <message>\n      <translation>Gebruikersnaam: %1</translation>\n      <location filename=\"../settings/userspane.cpp\" line=\"94\" />\n      <source>Username: %1</source>\n    </message>\n    <message>\n      <translation>Gebruiker Ontgrendelen</translation>\n      <location filename=\"../settings/userspane.cpp\" line=\"97\" />\n      <source>Unlock User</source>\n    </message>\n    <message>\n      <translation>Gebruiker Vergrendelen</translation>\n      <location filename=\"../settings/userspane.cpp\" line=\"99\" />\n      <source>Lock User</source>\n    </message>\n    <message>\n      <translation>Ongeauthoriseerd</translation>\n      <location filename=\"../settings/userspane.cpp\" line=\"143\" />\n      <source>Unauthorized</source>\n    </message>\n    <message>\n      <translation>Polkit laat je geen gebruikers beheren op het systeem.</translation>\n      <location filename=\"../settings/userspane.cpp\" line=\"144\" />\n      <source>Polkit does not allow you to manage users on the system.</source>\n    </message>\n  </context>\n</TS>"
  },
  {
    "path": "plugins/UsersPlugin/translations/pt_BR.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"pt_BR\" sourcelanguage=\"en_US\">\n<context>\n    <name>AddUserDialog</name>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"93\"/>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"629\"/>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"745\"/>\n        <source>Add User</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"161\"/>\n        <source>PERSONAL DETAILS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"168\"/>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"688\"/>\n        <source>Username</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"175\"/>\n        <source>Full Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"188\"/>\n        <source>The username is generated based on the given full name. We recommend not changing it.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"245\"/>\n        <source>ADMINISTRATOR</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"262\"/>\n        <location filename=\"../settings/adduserdialog.cpp\" line=\"165\"/>\n        <source>Administrator</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"293\"/>\n        <source>STANDARD USER</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"252\"/>\n        <source>An administrator has full control over this device. They&apos;ll be able to configure systemwide settings and install software.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"300\"/>\n        <source>A standard user can&apos;t perform systemwide actions. They&apos;ll only be able to perform administrative actions that only affect their account.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"310\"/>\n        <source>Standard User</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"332\"/>\n        <source>USER TYPE</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"409\"/>\n        <source>Account Security</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"434\"/>\n        <source>Protect this account with a password to prevent anyone else logging into it.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"474\"/>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"729\"/>\n        <source>Password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"488\"/>\n        <source>Confirm Password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"505\"/>\n        <source>Password Hint</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"512\"/>\n        <source>If you forget your password, this will appear to help you remember.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"524\"/>\n        <source>Use this password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"531\"/>\n        <source>Alternatively, choose one of the following options:</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"541\"/>\n        <source>Ask for a password on the next login</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"544\"/>\n        <source>The first time the user logs in, we&apos;ll ask them for a password.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"551\"/>\n        <source>Don&apos;t set a password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"554\"/>\n        <source>Anyone will be able to log into this account.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"654\"/>\n        <source>Add this user to your system?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"695\"/>\n        <source>Real Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"702\"/>\n        <source>User Type</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.cpp\" line=\"98\"/>\n        <source>Set Password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.cpp\" line=\"104\"/>\n        <source>Ask when logging in</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.cpp\" line=\"110\"/>\n        <source>Not Set</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.cpp\" line=\"154\"/>\n        <source>Couldn&apos;t create user</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.cpp\" line=\"171\"/>\n        <source>Standard</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>ChangePasswordDialog</name>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"68\"/>\n        <source>Change Password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"94\"/>\n        <source>Set a password to protect this account.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"237\"/>\n        <source>WARNING</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"244\"/>\n        <source>This account is locked. Changing the password will unlock it.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"289\"/>\n        <source>Password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"303\"/>\n        <source>Confirm Password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"320\"/>\n        <source>Password Hint</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"327\"/>\n        <source>If you forget your password, this will appear to help you remember.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"339\"/>\n        <source>Use this password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"346\"/>\n        <source>Alternatively, choose one of the following options:</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"356\"/>\n        <source>Ask for a password on the next login</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"359\"/>\n        <source>The first time the user logs in, we&apos;ll ask them for a password.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"366\"/>\n        <source>Don&apos;t set a password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"369\"/>\n        <source>Anyone will be able to log into this account.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.cpp\" line=\"72\"/>\n        <source>Couldn&apos;t set password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.cpp\" line=\"92\"/>\n        <location filename=\"../settings/changepassworddialog.cpp\" line=\"111\"/>\n        <source>Couldn&apos;t set password policy</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>ChangeRealNameDialog</name>\n    <message>\n        <location filename=\"../settings/changerealnamedialog.ui\" line=\"68\"/>\n        <source>Change Real Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changerealnamedialog.ui\" line=\"77\"/>\n        <source>Your Real Name appears on the login screen, on the Gateway and in any other location where we need to differentiate between users.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changerealnamedialog.ui\" line=\"123\"/>\n        <source>Real Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changerealnamedialog.ui\" line=\"132\"/>\n        <source>Set Real Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changerealnamedialog.cpp\" line=\"64\"/>\n        <source>Couldn&apos;t set real name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>DeleteUserDialog</name>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"68\"/>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"153\"/>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"207\"/>\n        <source>Delete User</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"77\"/>\n        <source>What do you want to do with this user&apos;s files?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"90\"/>\n        <source>Delete Files</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"93\"/>\n        <source>Files for this user will be removed from this device.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"100\"/>\n        <source>Keep Files</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"103\"/>\n        <source>Files for this user will be kept in the same location.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"179\"/>\n        <source>Delete this user from this device?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"189\"/>\n        <source>Any data associated with this user will be gone forever. This includes\n- Home Directory\n- Mail Spool\n- Temporary Files</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"210\"/>\n        <source>They&apos;ll be gone forever!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.cpp\" line=\"74\"/>\n        <source>Couldn&apos;t delete user</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>LockUserDialog</name>\n    <message>\n        <location filename=\"../settings/lockuserdialog.ui\" line=\"68\"/>\n        <location filename=\"../settings/lockuserdialog.ui\" line=\"90\"/>\n        <source>Lock Account</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/lockuserdialog.ui\" line=\"77\"/>\n        <source>After locking this account, you won&apos;t be able to log in as this account.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/lockuserdialog.ui\" line=\"140\"/>\n        <location filename=\"../settings/lockuserdialog.ui\" line=\"162\"/>\n        <source>Unlock Account</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/lockuserdialog.ui\" line=\"149\"/>\n        <source>After unlocking this account, you&apos;ll be able to log in as this account.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/lockuserdialog.cpp\" line=\"63\"/>\n        <source>Couldn&apos;t unlock user</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/lockuserdialog.cpp\" line=\"66\"/>\n        <source>Couldn&apos;t lock user</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>OnboardingUsers</name>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"57\"/>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"582\"/>\n        <location filename=\"../onboarding/onboardingusers.cpp\" line=\"156\"/>\n        <source>Users</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"130\"/>\n        <source>Full Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"137\"/>\n        <source>Username</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"150\"/>\n        <source>ABOUT YOU</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"157\"/>\n        <source>The username is generated based on the given full name. We recommend not changing it.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"199\"/>\n        <source>Password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"206\"/>\n        <source>Password Hint</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"219\"/>\n        <source>YOUR PASSWORD</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"236\"/>\n        <source>Confirm Password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"243\"/>\n        <source>Protect this account with a password to prevent anyone else logging into it.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"257\"/>\n        <source>If you forget your password, this will appear to help you remember.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"329\"/>\n        <source>ADMINISTRATOR</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"336\"/>\n        <source>An administrator has full control over this device. They&apos;ll be able to configure systemwide settings and install software.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"346\"/>\n        <source>Administrator</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"377\"/>\n        <source>STANDARD USER</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"384\"/>\n        <source>A standard user can&apos;t perform systemwide actions. They&apos;ll only be able to perform administrative actions that only affect their account.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"394\"/>\n        <source>Standard User</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"419\"/>\n        <source>USER TYPE</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"491\"/>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"673\"/>\n        <source>Next</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"662\"/>\n        <source>Add Another User</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.cpp\" line=\"49\"/>\n        <source>It&apos;s time to get to know you. Apps will use this information to personalise your experience, and you&apos;ll use the password to log in.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.cpp\" line=\"116\"/>\n        <source>Thanks, %1. If other people will be using this device, you can add them now, or you can add them later.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.cpp\" line=\"114\"/>\n        <source>You&apos;ve added these users to your system</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.cpp\" line=\"123\"/>\n        <source>Enter the details of the next user to be added</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.cpp\" line=\"130\"/>\n        <source>Couldn&apos;t create user</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>UserTypeDialog</name>\n    <message>\n        <location filename=\"../settings/usertypedialog.ui\" line=\"93\"/>\n        <source>Change User Type</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/usertypedialog.ui\" line=\"150\"/>\n        <source>ADMINISTRATOR</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/usertypedialog.ui\" line=\"157\"/>\n        <source>An administrator has full control over this device. They&apos;ll be able to configure systemwide settings and install software.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/usertypedialog.ui\" line=\"205\"/>\n        <source>A standard user can&apos;t perform systemwide actions. They&apos;ll only be able to perform administrative actions that only affect their account.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/usertypedialog.ui\" line=\"167\"/>\n        <source>Administrator</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/usertypedialog.ui\" line=\"198\"/>\n        <source>STANDARD USER</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/usertypedialog.ui\" line=\"215\"/>\n        <source>Standard User</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/usertypedialog.cpp\" line=\"87\"/>\n        <source>Couldn&apos;t set user type</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>UsersPane</name>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"89\"/>\n        <location filename=\"../settings/userspane.cpp\" line=\"222\"/>\n        <source>Users</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"105\"/>\n        <source>New User</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"172\"/>\n        <source>No User Selected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"182\"/>\n        <source>Select a user to get started</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"288\"/>\n        <source>ACTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"298\"/>\n        <source>Change Real Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"305\"/>\n        <source>Change Password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"312\"/>\n        <source>Change User Type</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"359\"/>\n        <source>DANGER</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"376\"/>\n        <source>Delete User</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.cpp\" line=\"94\"/>\n        <source>Username: %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.cpp\" line=\"97\"/>\n        <source>Unlock User</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.cpp\" line=\"99\"/>\n        <source>Lock User</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.cpp\" line=\"143\"/>\n        <source>Unauthorized</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.cpp\" line=\"144\"/>\n        <source>Polkit does not allow you to manage users on the system.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/UsersPlugin/translations/ro.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"ro\" sourcelanguage=\"en_US\">\n<context>\n    <name>AddUserDialog</name>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"93\"/>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"629\"/>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"745\"/>\n        <source>Add User</source>\n        <translation>Adaugă un utilizator</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"161\"/>\n        <source>PERSONAL DETAILS</source>\n        <translation>INFORMAȚII PERSONALE</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"168\"/>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"688\"/>\n        <source>Username</source>\n        <translation>Nume de utilizator</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"175\"/>\n        <source>Full Name</source>\n        <translation>Nume complet</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"188\"/>\n        <source>The username is generated based on the given full name. We recommend not changing it.</source>\n        <translation>Numele complet determină numele de utilizator. Nu recomandăm schimbarea acestuia.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"245\"/>\n        <source>ADMINISTRATOR</source>\n        <translation>ADMINISTRATOR</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"262\"/>\n        <location filename=\"../settings/adduserdialog.cpp\" line=\"165\"/>\n        <source>Administrator</source>\n        <translation>Administrator</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"293\"/>\n        <source>STANDARD USER</source>\n        <translation>Utilizator normal</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"252\"/>\n        <source>An administrator has full control over this device. They&apos;ll be able to configure systemwide settings and install software.</source>\n        <translation>Un administrator are control complet asupra dispozitivului. Acesta va putea să schimbe setări pe întregul sistem și să instaleze software.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"300\"/>\n        <source>A standard user can&apos;t perform systemwide actions. They&apos;ll only be able to perform administrative actions that only affect their account.</source>\n        <translation>Un utilizator normal nu poate executa acțiuni la întregul sistem. Acesta va putea să execute acțiuni administrative doar pe contul său.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"310\"/>\n        <source>Standard User</source>\n        <translation>Utilizator normal</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"332\"/>\n        <source>USER TYPE</source>\n        <translation>TIP DE UTILIZATOR</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"409\"/>\n        <source>Account Security</source>\n        <translation>Securitatea contului</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"434\"/>\n        <source>Protect this account with a password to prevent anyone else logging into it.</source>\n        <translation>Protejați acest cont cu o parolă pentru a împiedica accesul neautorizat.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"474\"/>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"729\"/>\n        <source>Password</source>\n        <translation>Parola</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"488\"/>\n        <source>Confirm Password</source>\n        <translation>Confirmați parola</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"505\"/>\n        <source>Password Hint</source>\n        <translation>Indiciu de parolă</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"512\"/>\n        <source>If you forget your password, this will appear to help you remember.</source>\n        <translation>Dacă vă uitați parola, acest indiciu va apărea ca să vă ajute să vă reamintiți.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"524\"/>\n        <source>Use this password</source>\n        <translation>Folosiți parola</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"531\"/>\n        <source>Alternatively, choose one of the following options:</source>\n        <translation>Sau, alegeți una dintre următoarele opțiuni:</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"541\"/>\n        <source>Ask for a password on the next login</source>\n        <translation>Solicită parola la următoarea autentificare</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"544\"/>\n        <source>The first time the user logs in, we&apos;ll ask them for a password.</source>\n        <translation>Prima dată când utilizatorul se autentifică, îi vom cere o parolă.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"551\"/>\n        <source>Don&apos;t set a password</source>\n        <translation>Nu seta o parolă</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"554\"/>\n        <source>Anyone will be able to log into this account.</source>\n        <translation>Oricine va putea intra pe acest cont.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"654\"/>\n        <source>Add this user to your system?</source>\n        <translation>Adăugați acest utilizator la sistemul dvs.?</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"695\"/>\n        <source>Real Name</source>\n        <translation>Numele real</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"702\"/>\n        <source>User Type</source>\n        <translation>Tipul utilizatorului</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.cpp\" line=\"98\"/>\n        <source>Set Password</source>\n        <translation>Setează o parolă</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.cpp\" line=\"104\"/>\n        <source>Ask when logging in</source>\n        <translation>Solicită la autentificare</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.cpp\" line=\"110\"/>\n        <source>Not Set</source>\n        <translation>Nesetat</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.cpp\" line=\"154\"/>\n        <source>Couldn&apos;t create user</source>\n        <translation>Nu s-a putut crea utilizatorul</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.cpp\" line=\"171\"/>\n        <source>Standard</source>\n        <translation>Normal</translation>\n    </message>\n</context>\n<context>\n    <name>ChangePasswordDialog</name>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"68\"/>\n        <source>Change Password</source>\n        <translation>Schimbă parola</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"94\"/>\n        <source>Set a password to protect this account.</source>\n        <translation>Setați o parolă pentru a proteja acest cont.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"237\"/>\n        <source>WARNING</source>\n        <translation>ATENȚIE</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"244\"/>\n        <source>This account is locked. Changing the password will unlock it.</source>\n        <translation>Acest cont este blocat. Schimbarea parolei îl va debloca.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"289\"/>\n        <source>Password</source>\n        <translation>Parolă</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"303\"/>\n        <source>Confirm Password</source>\n        <translation>Confirmați parola</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"320\"/>\n        <source>Password Hint</source>\n        <translation>Indiciu de parolă</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"327\"/>\n        <source>If you forget your password, this will appear to help you remember.</source>\n        <translation>Dacă vă uitați parola, acest indiciu va apărea ca să vă ajute să vă reamintiți.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"339\"/>\n        <source>Use this password</source>\n        <translation>Folosiți parola</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"346\"/>\n        <source>Alternatively, choose one of the following options:</source>\n        <translation>Sau, alegeți una dintre următoarele opțiuni:</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"356\"/>\n        <source>Ask for a password on the next login</source>\n        <translation>Solicită parola la următoarea autentificare</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"359\"/>\n        <source>The first time the user logs in, we&apos;ll ask them for a password.</source>\n        <translation>Prima dată când utilizatorul se autentifică, îi vom cere o parolă.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"366\"/>\n        <source>Don&apos;t set a password</source>\n        <translation>Nu seta o parolă</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"369\"/>\n        <source>Anyone will be able to log into this account.</source>\n        <translation>Oricine va putea intra pe acest cont.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.cpp\" line=\"72\"/>\n        <source>Couldn&apos;t set password</source>\n        <translation>Nu s-a putut seta o parolă</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.cpp\" line=\"92\"/>\n        <location filename=\"../settings/changepassworddialog.cpp\" line=\"111\"/>\n        <source>Couldn&apos;t set password policy</source>\n        <translation>Nu s-a putut seta o politică de parolă</translation>\n    </message>\n</context>\n<context>\n    <name>ChangeRealNameDialog</name>\n    <message>\n        <location filename=\"../settings/changerealnamedialog.ui\" line=\"68\"/>\n        <source>Change Real Name</source>\n        <translation>Schimbă numele real</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changerealnamedialog.ui\" line=\"77\"/>\n        <source>Your Real Name appears on the login screen, on the Gateway and in any other location where we need to differentiate between users.</source>\n        <translation>Numele real va apărea pe ecranul de autentificare, pe portal și în orice altă locație unde trebuie să diferențiem utilizatorii.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changerealnamedialog.ui\" line=\"123\"/>\n        <source>Real Name</source>\n        <translation>Numele real</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changerealnamedialog.ui\" line=\"132\"/>\n        <source>Set Real Name</source>\n        <translation>Setează numele real</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changerealnamedialog.cpp\" line=\"64\"/>\n        <source>Couldn&apos;t set real name</source>\n        <translation>Nu s-a putut seta numele real</translation>\n    </message>\n</context>\n<context>\n    <name>DeleteUserDialog</name>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"68\"/>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"153\"/>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"207\"/>\n        <source>Delete User</source>\n        <translation>Șterge utilizatorul</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"77\"/>\n        <source>What do you want to do with this user&apos;s files?</source>\n        <translation>Ce doriți să faceți cu fișierele acestui utilizator?</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"90\"/>\n        <source>Delete Files</source>\n        <translation>Șterge fișierele</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"93\"/>\n        <source>Files for this user will be removed from this device.</source>\n        <translation>Fișierele utilizatorului vor fi șterse de pe dispozitiv.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"100\"/>\n        <source>Keep Files</source>\n        <translation>Păstrează fișierele</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"103\"/>\n        <source>Files for this user will be kept in the same location.</source>\n        <translation>Fișierele utilizatorului vor fi păstrate acolo unde sunt.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"179\"/>\n        <source>Delete this user from this device?</source>\n        <translation>Ștergeți utilizatorul de pe acest dispozitiv?</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"189\"/>\n        <source>Any data associated with this user will be gone forever. This includes\n- Home Directory\n- Mail Spool\n- Temporary Files</source>\n        <translation>Orice date asociate cu acest utilizator vor fi șterse permanent. Acestea cuprind:\n-Folderul Home\n-Mailurile\n-Fișierele temporare</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"210\"/>\n        <source>They&apos;ll be gone forever!</source>\n        <translation>Vor fi șterse permanent!</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.cpp\" line=\"74\"/>\n        <source>Couldn&apos;t delete user</source>\n        <translation>Nu s-a putut șterge utilizatorul</translation>\n    </message>\n</context>\n<context>\n    <name>LockUserDialog</name>\n    <message>\n        <location filename=\"../settings/lockuserdialog.ui\" line=\"68\"/>\n        <location filename=\"../settings/lockuserdialog.ui\" line=\"90\"/>\n        <source>Lock Account</source>\n        <translation>Blochează contul</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/lockuserdialog.ui\" line=\"77\"/>\n        <source>After locking this account, you won&apos;t be able to log in as this account.</source>\n        <translation>După blocarea contului, acesta nu va mai putea fi folosit pentru autentificare.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/lockuserdialog.ui\" line=\"140\"/>\n        <location filename=\"../settings/lockuserdialog.ui\" line=\"162\"/>\n        <source>Unlock Account</source>\n        <translation>Deblochează contul</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/lockuserdialog.ui\" line=\"149\"/>\n        <source>After unlocking this account, you&apos;ll be able to log in as this account.</source>\n        <translation>După deblocarea contului, acesta va putea fi folosit pentru autentificare.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/lockuserdialog.cpp\" line=\"63\"/>\n        <source>Couldn&apos;t unlock user</source>\n        <translation>Nu s-a putut debloca contul</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/lockuserdialog.cpp\" line=\"66\"/>\n        <source>Couldn&apos;t lock user</source>\n        <translation>Nu s-a putut bloca contul</translation>\n    </message>\n</context>\n<context>\n    <name>OnboardingUsers</name>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"57\"/>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"582\"/>\n        <location filename=\"../onboarding/onboardingusers.cpp\" line=\"156\"/>\n        <source>Users</source>\n        <translation>Utilizatori</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"130\"/>\n        <source>Full Name</source>\n        <translation>Nume complet</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"137\"/>\n        <source>Username</source>\n        <translation>Nume de utilizator</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"150\"/>\n        <source>ABOUT YOU</source>\n        <translation>DESPRE DUMNEAVOASTRĂ</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"157\"/>\n        <source>The username is generated based on the given full name. We recommend not changing it.</source>\n        <translation>Numele complet determină numele de utilizator. Nu recomandăm schimbarea acestuia.</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"199\"/>\n        <source>Password</source>\n        <translation>Parolă</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"206\"/>\n        <source>Password Hint</source>\n        <translation>Indiciu de parolă</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"219\"/>\n        <source>YOUR PASSWORD</source>\n        <translation>PAROLA DUMNEAVOASTRĂ</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"236\"/>\n        <source>Confirm Password</source>\n        <translation>Confirmați parola</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"243\"/>\n        <source>Protect this account with a password to prevent anyone else logging into it.</source>\n        <translation>Protejați acest cont cu o parolă pentru a împiedica accesul neautorizat.</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"257\"/>\n        <source>If you forget your password, this will appear to help you remember.</source>\n        <translation>Dacă vă uitați parola, acest indiciu va apărea ca să vă ajute să vă reamintiți.</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"329\"/>\n        <source>ADMINISTRATOR</source>\n        <translation>ADMINISTRATOR</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"336\"/>\n        <source>An administrator has full control over this device. They&apos;ll be able to configure systemwide settings and install software.</source>\n        <translation>Un administrator are control complet asupra dispozitivului. Acesta va putea să schimbe setări pe întregul sistem și să instaleze software.</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"346\"/>\n        <source>Administrator</source>\n        <translation>Administrator</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"377\"/>\n        <source>STANDARD USER</source>\n        <translation>UTILIZATOR NORMAL</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"384\"/>\n        <source>A standard user can&apos;t perform systemwide actions. They&apos;ll only be able to perform administrative actions that only affect their account.</source>\n        <translation>Un utilizator normal nu poate executa acțiuni la întregul sistem. Acesta va putea să execute acțiuni administrative doar pe contul său.</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"394\"/>\n        <source>Standard User</source>\n        <translation>Utilizator normal</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"419\"/>\n        <source>USER TYPE</source>\n        <translation>TIP DE UTILIZATOR</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"491\"/>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"673\"/>\n        <source>Next</source>\n        <translation>Următorul</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"662\"/>\n        <source>Add Another User</source>\n        <translation>Adăugați un alt utilizatăr</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.cpp\" line=\"49\"/>\n        <source>It&apos;s time to get to know you. Apps will use this information to personalise your experience, and you&apos;ll use the password to log in.</source>\n        <translation>Haideți să ne cunoaștem. Aplicațiile vor folosi aceste informații pentru a vă personaliza experiența, iar dumneavoastră veți putea folosi parola pentru a vă autentifica.</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.cpp\" line=\"116\"/>\n        <source>Thanks, %1. If other people will be using this device, you can add them now, or you can add them later.</source>\n        <translation>Mulțumim, %1. Dacă mai folosesc și alte persoane acest dispozitiv, le puteți adăuga acum sau mai târziu.</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.cpp\" line=\"114\"/>\n        <source>You&apos;ve added these users to your system</source>\n        <translation>Ați adăugat acești utilizatori la sistemul dumneavoastă</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.cpp\" line=\"123\"/>\n        <source>Enter the details of the next user to be added</source>\n        <translation>Introduceți detaliile următorului utilizator de adăugat</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.cpp\" line=\"130\"/>\n        <source>Couldn&apos;t create user</source>\n        <translation>Nu s-a putut crea utilizatorul</translation>\n    </message>\n</context>\n<context>\n    <name>UserTypeDialog</name>\n    <message>\n        <location filename=\"../settings/usertypedialog.ui\" line=\"93\"/>\n        <source>Change User Type</source>\n        <translation>Schimbați tipul utilizatorului</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/usertypedialog.ui\" line=\"150\"/>\n        <source>ADMINISTRATOR</source>\n        <translation>ADMINISTRATOR</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/usertypedialog.ui\" line=\"157\"/>\n        <source>An administrator has full control over this device. They&apos;ll be able to configure systemwide settings and install software.</source>\n        <translation>Un administrator are control complet asupra dispozitivului. Acesta va putea să schimbe setări pe întregul sistem și să instaleze software.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/usertypedialog.ui\" line=\"205\"/>\n        <source>A standard user can&apos;t perform systemwide actions. They&apos;ll only be able to perform administrative actions that only affect their account.</source>\n        <translation>Un utilizator normal nu poate executa acțiuni la întregul sistem. Acesta va putea să execute acțiuni administrative doar pe contul său.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/usertypedialog.ui\" line=\"167\"/>\n        <source>Administrator</source>\n        <translation>Administrator</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/usertypedialog.ui\" line=\"198\"/>\n        <source>STANDARD USER</source>\n        <translation>UTILIZATOR NORMAL</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/usertypedialog.ui\" line=\"215\"/>\n        <source>Standard User</source>\n        <translation>Utilizator normal</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/usertypedialog.cpp\" line=\"87\"/>\n        <source>Couldn&apos;t set user type</source>\n        <translation>Nu s-a putut seta tipul utilizatorului</translation>\n    </message>\n</context>\n<context>\n    <name>UsersPane</name>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"89\"/>\n        <location filename=\"../settings/userspane.cpp\" line=\"222\"/>\n        <source>Users</source>\n        <translation>Utilizatori</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"105\"/>\n        <source>New User</source>\n        <translation>Utilizator nou</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"172\"/>\n        <source>No User Selected</source>\n        <translation>Niciun utilizator selectat</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"182\"/>\n        <source>Select a user to get started</source>\n        <translation>Selectați un utilizator pentru a începe</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"288\"/>\n        <source>ACTIONS</source>\n        <translation>ACȚIUNI</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"298\"/>\n        <source>Change Real Name</source>\n        <translation>Schimbă numele real</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"305\"/>\n        <source>Change Password</source>\n        <translation>Schimbă parola</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"312\"/>\n        <source>Change User Type</source>\n        <translation>Schimbați tipul utilizatorului</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"359\"/>\n        <source>DANGER</source>\n        <translation type=\"unfinished\">PERICOL</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"376\"/>\n        <source>Delete User</source>\n        <translation>Șterge utilizatorul</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.cpp\" line=\"94\"/>\n        <source>Username: %1</source>\n        <translation>Nume utilizator: %1</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.cpp\" line=\"97\"/>\n        <source>Unlock User</source>\n        <translation>Deblochează utilizatorul</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.cpp\" line=\"99\"/>\n        <source>Lock User</source>\n        <translation>Blochează utilizatorul</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.cpp\" line=\"143\"/>\n        <source>Unauthorized</source>\n        <translation>Neautorizat</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.cpp\" line=\"144\"/>\n        <source>Polkit does not allow you to manage users on the system.</source>\n        <translation>Polkit nu vă permite să gestionați utilizatorii pe acest sistem.</translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/UsersPlugin/translations/sv.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"sv\" sourcelanguage=\"en_US\">\n<context>\n    <name>AddUserDialog</name>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"93\"/>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"629\"/>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"745\"/>\n        <source>Add User</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"161\"/>\n        <source>PERSONAL DETAILS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"168\"/>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"688\"/>\n        <source>Username</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"175\"/>\n        <source>Full Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"188\"/>\n        <source>The username is generated based on the given full name. We recommend not changing it.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"245\"/>\n        <source>ADMINISTRATOR</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"262\"/>\n        <location filename=\"../settings/adduserdialog.cpp\" line=\"165\"/>\n        <source>Administrator</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"293\"/>\n        <source>STANDARD USER</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"252\"/>\n        <source>An administrator has full control over this device. They&apos;ll be able to configure systemwide settings and install software.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"300\"/>\n        <source>A standard user can&apos;t perform systemwide actions. They&apos;ll only be able to perform administrative actions that only affect their account.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"310\"/>\n        <source>Standard User</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"332\"/>\n        <source>USER TYPE</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"409\"/>\n        <source>Account Security</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"434\"/>\n        <source>Protect this account with a password to prevent anyone else logging into it.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"474\"/>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"729\"/>\n        <source>Password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"488\"/>\n        <source>Confirm Password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"505\"/>\n        <source>Password Hint</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"512\"/>\n        <source>If you forget your password, this will appear to help you remember.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"524\"/>\n        <source>Use this password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"531\"/>\n        <source>Alternatively, choose one of the following options:</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"541\"/>\n        <source>Ask for a password on the next login</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"544\"/>\n        <source>The first time the user logs in, we&apos;ll ask them for a password.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"551\"/>\n        <source>Don&apos;t set a password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"554\"/>\n        <source>Anyone will be able to log into this account.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"654\"/>\n        <source>Add this user to your system?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"695\"/>\n        <source>Real Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"702\"/>\n        <source>User Type</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.cpp\" line=\"98\"/>\n        <source>Set Password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.cpp\" line=\"104\"/>\n        <source>Ask when logging in</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.cpp\" line=\"110\"/>\n        <source>Not Set</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.cpp\" line=\"154\"/>\n        <source>Couldn&apos;t create user</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.cpp\" line=\"171\"/>\n        <source>Standard</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>ChangePasswordDialog</name>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"68\"/>\n        <source>Change Password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"94\"/>\n        <source>Set a password to protect this account.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"237\"/>\n        <source>WARNING</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"244\"/>\n        <source>This account is locked. Changing the password will unlock it.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"289\"/>\n        <source>Password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"303\"/>\n        <source>Confirm Password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"320\"/>\n        <source>Password Hint</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"327\"/>\n        <source>If you forget your password, this will appear to help you remember.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"339\"/>\n        <source>Use this password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"346\"/>\n        <source>Alternatively, choose one of the following options:</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"356\"/>\n        <source>Ask for a password on the next login</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"359\"/>\n        <source>The first time the user logs in, we&apos;ll ask them for a password.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"366\"/>\n        <source>Don&apos;t set a password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"369\"/>\n        <source>Anyone will be able to log into this account.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.cpp\" line=\"72\"/>\n        <source>Couldn&apos;t set password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.cpp\" line=\"92\"/>\n        <location filename=\"../settings/changepassworddialog.cpp\" line=\"111\"/>\n        <source>Couldn&apos;t set password policy</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>ChangeRealNameDialog</name>\n    <message>\n        <location filename=\"../settings/changerealnamedialog.ui\" line=\"68\"/>\n        <source>Change Real Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changerealnamedialog.ui\" line=\"77\"/>\n        <source>Your Real Name appears on the login screen, on the Gateway and in any other location where we need to differentiate between users.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changerealnamedialog.ui\" line=\"123\"/>\n        <source>Real Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changerealnamedialog.ui\" line=\"132\"/>\n        <source>Set Real Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changerealnamedialog.cpp\" line=\"64\"/>\n        <source>Couldn&apos;t set real name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>DeleteUserDialog</name>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"68\"/>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"153\"/>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"207\"/>\n        <source>Delete User</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"77\"/>\n        <source>What do you want to do with this user&apos;s files?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"90\"/>\n        <source>Delete Files</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"93\"/>\n        <source>Files for this user will be removed from this device.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"100\"/>\n        <source>Keep Files</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"103\"/>\n        <source>Files for this user will be kept in the same location.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"179\"/>\n        <source>Delete this user from this device?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"189\"/>\n        <source>Any data associated with this user will be gone forever. This includes\n- Home Directory\n- Mail Spool\n- Temporary Files</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"210\"/>\n        <source>They&apos;ll be gone forever!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.cpp\" line=\"74\"/>\n        <source>Couldn&apos;t delete user</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>LockUserDialog</name>\n    <message>\n        <location filename=\"../settings/lockuserdialog.ui\" line=\"68\"/>\n        <location filename=\"../settings/lockuserdialog.ui\" line=\"90\"/>\n        <source>Lock Account</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/lockuserdialog.ui\" line=\"77\"/>\n        <source>After locking this account, you won&apos;t be able to log in as this account.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/lockuserdialog.ui\" line=\"140\"/>\n        <location filename=\"../settings/lockuserdialog.ui\" line=\"162\"/>\n        <source>Unlock Account</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/lockuserdialog.ui\" line=\"149\"/>\n        <source>After unlocking this account, you&apos;ll be able to log in as this account.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/lockuserdialog.cpp\" line=\"63\"/>\n        <source>Couldn&apos;t unlock user</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/lockuserdialog.cpp\" line=\"66\"/>\n        <source>Couldn&apos;t lock user</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>OnboardingUsers</name>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"57\"/>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"582\"/>\n        <location filename=\"../onboarding/onboardingusers.cpp\" line=\"156\"/>\n        <source>Users</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"130\"/>\n        <source>Full Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"137\"/>\n        <source>Username</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"150\"/>\n        <source>ABOUT YOU</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"157\"/>\n        <source>The username is generated based on the given full name. We recommend not changing it.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"199\"/>\n        <source>Password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"206\"/>\n        <source>Password Hint</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"219\"/>\n        <source>YOUR PASSWORD</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"236\"/>\n        <source>Confirm Password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"243\"/>\n        <source>Protect this account with a password to prevent anyone else logging into it.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"257\"/>\n        <source>If you forget your password, this will appear to help you remember.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"329\"/>\n        <source>ADMINISTRATOR</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"336\"/>\n        <source>An administrator has full control over this device. They&apos;ll be able to configure systemwide settings and install software.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"346\"/>\n        <source>Administrator</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"377\"/>\n        <source>STANDARD USER</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"384\"/>\n        <source>A standard user can&apos;t perform systemwide actions. They&apos;ll only be able to perform administrative actions that only affect their account.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"394\"/>\n        <source>Standard User</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"419\"/>\n        <source>USER TYPE</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"491\"/>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"673\"/>\n        <source>Next</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"662\"/>\n        <source>Add Another User</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.cpp\" line=\"49\"/>\n        <source>It&apos;s time to get to know you. Apps will use this information to personalise your experience, and you&apos;ll use the password to log in.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.cpp\" line=\"116\"/>\n        <source>Thanks, %1. If other people will be using this device, you can add them now, or you can add them later.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.cpp\" line=\"114\"/>\n        <source>You&apos;ve added these users to your system</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.cpp\" line=\"123\"/>\n        <source>Enter the details of the next user to be added</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.cpp\" line=\"130\"/>\n        <source>Couldn&apos;t create user</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>UserTypeDialog</name>\n    <message>\n        <location filename=\"../settings/usertypedialog.ui\" line=\"93\"/>\n        <source>Change User Type</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/usertypedialog.ui\" line=\"150\"/>\n        <source>ADMINISTRATOR</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/usertypedialog.ui\" line=\"157\"/>\n        <source>An administrator has full control over this device. They&apos;ll be able to configure systemwide settings and install software.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/usertypedialog.ui\" line=\"205\"/>\n        <source>A standard user can&apos;t perform systemwide actions. They&apos;ll only be able to perform administrative actions that only affect their account.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/usertypedialog.ui\" line=\"167\"/>\n        <source>Administrator</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/usertypedialog.ui\" line=\"198\"/>\n        <source>STANDARD USER</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/usertypedialog.ui\" line=\"215\"/>\n        <source>Standard User</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/usertypedialog.cpp\" line=\"87\"/>\n        <source>Couldn&apos;t set user type</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>UsersPane</name>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"89\"/>\n        <location filename=\"../settings/userspane.cpp\" line=\"222\"/>\n        <source>Users</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"105\"/>\n        <source>New User</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"172\"/>\n        <source>No User Selected</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"182\"/>\n        <source>Select a user to get started</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"288\"/>\n        <source>ACTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"298\"/>\n        <source>Change Real Name</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"305\"/>\n        <source>Change Password</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"312\"/>\n        <source>Change User Type</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"359\"/>\n        <source>DANGER</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"376\"/>\n        <source>Delete User</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.cpp\" line=\"94\"/>\n        <source>Username: %1</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.cpp\" line=\"97\"/>\n        <source>Unlock User</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.cpp\" line=\"99\"/>\n        <source>Lock User</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.cpp\" line=\"143\"/>\n        <source>Unauthorized</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.cpp\" line=\"144\"/>\n        <source>Polkit does not allow you to manage users on the system.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/UsersPlugin/translations/tr_TR.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"tr_TR\" sourcelanguage=\"en_US\">\n<context>\n    <name>AddUserDialog</name>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"93\"/>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"629\"/>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"745\"/>\n        <source>Add User</source>\n        <translation>Kullanıcı Ekle</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"161\"/>\n        <source>PERSONAL DETAILS</source>\n        <translation>KİŞİSEL DETAYLAR</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"168\"/>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"688\"/>\n        <source>Username</source>\n        <translation>Kullanıcı adı</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"175\"/>\n        <source>Full Name</source>\n        <translation>Ad ve Soyad</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"188\"/>\n        <source>The username is generated based on the given full name. We recommend not changing it.</source>\n        <translation>Kullanıcı adı, verilen tam ada göre oluşturulur. Değiştirmemenizi öneririz.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"245\"/>\n        <source>ADMINISTRATOR</source>\n        <translation>YÖNETİCİ</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"262\"/>\n        <location filename=\"../settings/adduserdialog.cpp\" line=\"165\"/>\n        <source>Administrator</source>\n        <translation>Yönetici</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"293\"/>\n        <source>STANDARD USER</source>\n        <translation>STANDART KULLANICI</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"252\"/>\n        <source>An administrator has full control over this device. They&apos;ll be able to configure systemwide settings and install software.</source>\n        <translation>Bir yönetici, bu cihaz üzerinde tam denetime sahiptir. Sistem genelindeki ayarları yapılandırabilecek ve yazılım yükleyebilecekler.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"300\"/>\n        <source>A standard user can&apos;t perform systemwide actions. They&apos;ll only be able to perform administrative actions that only affect their account.</source>\n        <translation>Standart bir kullanıcı, sistem genelinde eylemler gerçekleştiremez. Yalnızca kendi hesaplarını etkileyen idari işlemleri gerçekleştirebilecekler.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"310\"/>\n        <source>Standard User</source>\n        <translation>Standart kullanıcı</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"332\"/>\n        <source>USER TYPE</source>\n        <translation>KULLANICI TİPİ</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"409\"/>\n        <source>Account Security</source>\n        <translation>Hesap Güvenliği</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"434\"/>\n        <source>Protect this account with a password to prevent anyone else logging into it.</source>\n        <translation>Başkalarının oturum açmasını önlemek için bu hesabı bir parola ile koruyun.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"474\"/>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"729\"/>\n        <source>Password</source>\n        <translation>Şifre</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"488\"/>\n        <source>Confirm Password</source>\n        <translation>Şifreyi Onayla</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"505\"/>\n        <source>Password Hint</source>\n        <translation>Şifre ipucu</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"512\"/>\n        <source>If you forget your password, this will appear to help you remember.</source>\n        <translation>Şifrenizi unutursanız, bu hatırlamanıza yardımcı olacak şekilde görünecektir.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"524\"/>\n        <source>Use this password</source>\n        <translation>Bu şifreyi kullanın</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"531\"/>\n        <source>Alternatively, choose one of the following options:</source>\n        <translation>Alternatif olarak, aşağıdaki seçeneklerden birini seçin:</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"541\"/>\n        <source>Ask for a password on the next login</source>\n        <translation>Bir sonraki girişte şifre isteyin</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"544\"/>\n        <source>The first time the user logs in, we&apos;ll ask them for a password.</source>\n        <translation>Kullanıcı ilk kez oturum açtığında, ondan bir parola isteyeceğiz.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"551\"/>\n        <source>Don&apos;t set a password</source>\n        <translation>Bir şifre belirlemeyin</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"554\"/>\n        <source>Anyone will be able to log into this account.</source>\n        <translation>Bu hesaba herkes giriş yapabilecek.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"654\"/>\n        <source>Add this user to your system?</source>\n        <translation>Bu kullanıcı sisteminize eklensin mi?</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"695\"/>\n        <source>Real Name</source>\n        <translation>Gerçek ad</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"702\"/>\n        <source>User Type</source>\n        <translation>Kullanıcı tipi</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.cpp\" line=\"98\"/>\n        <source>Set Password</source>\n        <translation>Şifreyi belirle</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.cpp\" line=\"104\"/>\n        <source>Ask when logging in</source>\n        <translation>Giriş yaparken sor</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.cpp\" line=\"110\"/>\n        <source>Not Set</source>\n        <translation>Ayarlanmadı</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.cpp\" line=\"154\"/>\n        <source>Couldn&apos;t create user</source>\n        <translation>Kullanıcı oluşturulamadı</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.cpp\" line=\"171\"/>\n        <source>Standard</source>\n        <translation>Standart</translation>\n    </message>\n</context>\n<context>\n    <name>ChangePasswordDialog</name>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"68\"/>\n        <source>Change Password</source>\n        <translation>Şifre değiştir</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"94\"/>\n        <source>Set a password to protect this account.</source>\n        <translation>Bu hesabı korumak için bir şifre belirleyin.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"237\"/>\n        <source>WARNING</source>\n        <translation>UYARI</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"244\"/>\n        <source>This account is locked. Changing the password will unlock it.</source>\n        <translation>Bu hesap kilitlendi. Şifreyi değiştirmek kilidini açacaktır.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"289\"/>\n        <source>Password</source>\n        <translation>Şifre</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"303\"/>\n        <source>Confirm Password</source>\n        <translation>Şifreyi Onayla</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"320\"/>\n        <source>Password Hint</source>\n        <translation>Şifre ipucu</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"327\"/>\n        <source>If you forget your password, this will appear to help you remember.</source>\n        <translation>Şifrenizi unutursanız, bu hatırlamanıza yardımcı olacak şekilde görünecektir.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"339\"/>\n        <source>Use this password</source>\n        <translation>Bu şifreyi kullanın</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"346\"/>\n        <source>Alternatively, choose one of the following options:</source>\n        <translation>Alternatif olarak, aşağıdaki seçeneklerden birini seçin:</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"356\"/>\n        <source>Ask for a password on the next login</source>\n        <translation>Bir sonraki girişte şifre isteyin</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"359\"/>\n        <source>The first time the user logs in, we&apos;ll ask them for a password.</source>\n        <translation>Kullanıcı ilk kez oturum açtığında, ondan bir parola isteyeceğiz.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"366\"/>\n        <source>Don&apos;t set a password</source>\n        <translation>Parola belirleme</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"369\"/>\n        <source>Anyone will be able to log into this account.</source>\n        <translation>Bu hesaba herkes giriş yapabilecek.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.cpp\" line=\"72\"/>\n        <source>Couldn&apos;t set password</source>\n        <translation>Şifre ayarlanamadı</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.cpp\" line=\"92\"/>\n        <location filename=\"../settings/changepassworddialog.cpp\" line=\"111\"/>\n        <source>Couldn&apos;t set password policy</source>\n        <translation>Şifre ilkesi ayarlanamadı</translation>\n    </message>\n</context>\n<context>\n    <name>ChangeRealNameDialog</name>\n    <message>\n        <location filename=\"../settings/changerealnamedialog.ui\" line=\"68\"/>\n        <source>Change Real Name</source>\n        <translation>Gerçek ve Adı Değiştir</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changerealnamedialog.ui\" line=\"77\"/>\n        <source>Your Real Name appears on the login screen, on the Gateway and in any other location where we need to differentiate between users.</source>\n        <translation>Gerçek ve Adınız oturum açma ekranında, Ağ Geçidinde ve kullanıcılar arasında ayrım yapmamız gereken diğer herhangi bir yerde görünür.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changerealnamedialog.ui\" line=\"123\"/>\n        <source>Real Name</source>\n        <translation>Gerçek ve ad</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changerealnamedialog.ui\" line=\"132\"/>\n        <source>Set Real Name</source>\n        <translation>Gerçek ve Adı Ayarla</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changerealnamedialog.cpp\" line=\"64\"/>\n        <source>Couldn&apos;t set real name</source>\n        <translation>Gerçek ad belirlenemedi</translation>\n    </message>\n</context>\n<context>\n    <name>DeleteUserDialog</name>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"68\"/>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"153\"/>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"207\"/>\n        <source>Delete User</source>\n        <translation>Kullanıcıyı sil</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"77\"/>\n        <source>What do you want to do with this user&apos;s files?</source>\n        <translation>Bu kullanıcının dosyalarıyla ne yapmak istiyorsunuz?</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"90\"/>\n        <source>Delete Files</source>\n        <translation>Dosyaları sil</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"93\"/>\n        <source>Files for this user will be removed from this device.</source>\n        <translation>Bu kullanıcının dosyaları bu cihazdan kaldırılacaktır.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"100\"/>\n        <source>Keep Files</source>\n        <translation>Dosyaları sakla</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"103\"/>\n        <source>Files for this user will be kept in the same location.</source>\n        <translation>Bu kullanıcının dosyaları aynı yerde tutulacak.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"179\"/>\n        <source>Delete this user from this device?</source>\n        <translation>Bu kullanıcı bu cihazdan silinsin mi?</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"189\"/>\n        <source>Any data associated with this user will be gone forever. This includes\n- Home Directory\n- Mail Spool\n- Temporary Files</source>\n        <translation>Bu kullanıcıyla ilişkili tüm veriler sonsuza kadar silinecek. Bu içerir\n- Ana Dizin\n- Posta Biriktirme\n- Geçici dosyalar</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"210\"/>\n        <source>They&apos;ll be gone forever!</source>\n        <translation>Sonsuza dek gitmiş olacaklar!</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.cpp\" line=\"74\"/>\n        <source>Couldn&apos;t delete user</source>\n        <translation>Kullanıcı silinemedi</translation>\n    </message>\n</context>\n<context>\n    <name>LockUserDialog</name>\n    <message>\n        <location filename=\"../settings/lockuserdialog.ui\" line=\"68\"/>\n        <location filename=\"../settings/lockuserdialog.ui\" line=\"90\"/>\n        <source>Lock Account</source>\n        <translation>Kilitli hesap</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/lockuserdialog.ui\" line=\"77\"/>\n        <source>After locking this account, you won&apos;t be able to log in as this account.</source>\n        <translation>Bu hesabı kilitledikten sonra, bu hesapla giriş yapamayacaksınız.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/lockuserdialog.ui\" line=\"140\"/>\n        <location filename=\"../settings/lockuserdialog.ui\" line=\"162\"/>\n        <source>Unlock Account</source>\n        <translation>Hesabın Kilidini Aç</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/lockuserdialog.ui\" line=\"149\"/>\n        <source>After unlocking this account, you&apos;ll be able to log in as this account.</source>\n        <translation>Bu hesabın kilidini açtıktan sonra, bu hesapla giriş yapabileceksiniz.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/lockuserdialog.cpp\" line=\"63\"/>\n        <source>Couldn&apos;t unlock user</source>\n        <translation>Kullanıcının kilidi açılamadı</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/lockuserdialog.cpp\" line=\"66\"/>\n        <source>Couldn&apos;t lock user</source>\n        <translation>Kullanıcı kilitlenemedi</translation>\n    </message>\n</context>\n<context>\n    <name>OnboardingUsers</name>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"57\"/>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"582\"/>\n        <location filename=\"../onboarding/onboardingusers.cpp\" line=\"156\"/>\n        <source>Users</source>\n        <translation>Kullanıcılar</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"130\"/>\n        <source>Full Name</source>\n        <translation>Ad ve Soyad</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"137\"/>\n        <source>Username</source>\n        <translation>Kullanıcı adı</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"150\"/>\n        <source>ABOUT YOU</source>\n        <translation>SENİN HAKKINDA</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"157\"/>\n        <source>The username is generated based on the given full name. We recommend not changing it.</source>\n        <translation>Kullanıcı adı, verilen tam ada göre oluşturulur. Değiştirmemenizi öneririz.</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"199\"/>\n        <source>Password</source>\n        <translation>Şifre</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"206\"/>\n        <source>Password Hint</source>\n        <translation>Şifre ipucu</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"219\"/>\n        <source>YOUR PASSWORD</source>\n        <translation>SENİN ŞİFRE</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"236\"/>\n        <source>Confirm Password</source>\n        <translation>Şifreyi Onayla</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"243\"/>\n        <source>Protect this account with a password to prevent anyone else logging into it.</source>\n        <translation>Başkalarının oturum açmasını önlemek için bu hesabı bir parola ile koruyun.</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"257\"/>\n        <source>If you forget your password, this will appear to help you remember.</source>\n        <translation>Şifrenizi unutursanız, bu hatırlamanıza yardımcı olacak şekilde görünecektir.</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"329\"/>\n        <source>ADMINISTRATOR</source>\n        <translation>YÖNETİCİ</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"336\"/>\n        <source>An administrator has full control over this device. They&apos;ll be able to configure systemwide settings and install software.</source>\n        <translation>Bir yönetici, bu cihaz üzerinde tam denetime sahiptir. Sistem genelindeki ayarları yapılandırabilecek ve yazılım yükleyebilecekler.</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"346\"/>\n        <source>Administrator</source>\n        <translation>Yönetici</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"377\"/>\n        <source>STANDARD USER</source>\n        <translation>STANDART KULLANICI</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"384\"/>\n        <source>A standard user can&apos;t perform systemwide actions. They&apos;ll only be able to perform administrative actions that only affect their account.</source>\n        <translation>Standart bir kullanıcı, sistem genelinde eylemler gerçekleştiremez. Yalnızca kendi hesaplarını etkileyen idari işlemleri gerçekleştirebilecekler.</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"394\"/>\n        <source>Standard User</source>\n        <translation>Standart Kullanıcı</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"419\"/>\n        <source>USER TYPE</source>\n        <translation>KULLANICI TİPİ</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"491\"/>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"673\"/>\n        <source>Next</source>\n        <translation>Ertesi</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"662\"/>\n        <source>Add Another User</source>\n        <translation>Başka Kullanıcı Ekle</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.cpp\" line=\"49\"/>\n        <source>It&apos;s time to get to know you. Apps will use this information to personalise your experience, and you&apos;ll use the password to log in.</source>\n        <translation>Seni tanımanın zamanı geldi. Uygulamalar, deneyiminizi kişiselleştirmek için bu bilgileri kullanır ve oturum açmak için parolayı kullanırsınız.</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.cpp\" line=\"116\"/>\n        <source>Thanks, %1. If other people will be using this device, you can add them now, or you can add them later.</source>\n        <translation>Teşekkür ederim, %1. Bu cihazı başka kişiler kullanacaksa, şimdi ekleyebilir veya daha sonra ekleyebilirsiniz.</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.cpp\" line=\"114\"/>\n        <source>You&apos;ve added these users to your system</source>\n        <translation>Bu kullanıcıları sisteminize eklediniz</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.cpp\" line=\"123\"/>\n        <source>Enter the details of the next user to be added</source>\n        <translation>Eklenecek sonraki kullanıcının ayrıntılarını girin</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.cpp\" line=\"130\"/>\n        <source>Couldn&apos;t create user</source>\n        <translation>Kullanıcı oluşturulamadı</translation>\n    </message>\n</context>\n<context>\n    <name>UserTypeDialog</name>\n    <message>\n        <location filename=\"../settings/usertypedialog.ui\" line=\"93\"/>\n        <source>Change User Type</source>\n        <translation>Kullanıcı Türünü Değiştirin</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/usertypedialog.ui\" line=\"150\"/>\n        <source>ADMINISTRATOR</source>\n        <translation>YÖNETİCİ</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/usertypedialog.ui\" line=\"157\"/>\n        <source>An administrator has full control over this device. They&apos;ll be able to configure systemwide settings and install software.</source>\n        <translation>Bir yönetici, bu cihaz üzerinde tam denetime sahiptir. Sistem genelindeki ayarları yapılandırabilecek ve yazılım yükleyebilecekler.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/usertypedialog.ui\" line=\"205\"/>\n        <source>A standard user can&apos;t perform systemwide actions. They&apos;ll only be able to perform administrative actions that only affect their account.</source>\n        <translation>Standart bir kullanıcı, sistem genelinde eylemler gerçekleştiremez. Yalnızca kendi hesaplarını etkileyen idari işlemleri gerçekleştirebilecekler.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/usertypedialog.ui\" line=\"167\"/>\n        <source>Administrator</source>\n        <translation>Yönetici</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/usertypedialog.ui\" line=\"198\"/>\n        <source>STANDARD USER</source>\n        <translation>STANDART KULLANICI</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/usertypedialog.ui\" line=\"215\"/>\n        <source>Standard User</source>\n        <translation>Standart Kullanıcı</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/usertypedialog.cpp\" line=\"87\"/>\n        <source>Couldn&apos;t set user type</source>\n        <translation>Kullanıcı türü ayarlanamadı</translation>\n    </message>\n</context>\n<context>\n    <name>UsersPane</name>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"89\"/>\n        <location filename=\"../settings/userspane.cpp\" line=\"222\"/>\n        <source>Users</source>\n        <translation>Kullanıcılar</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"105\"/>\n        <source>New User</source>\n        <translation>Yeni kullanıcı</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"172\"/>\n        <source>No User Selected</source>\n        <translation>Kullanıcı Seçilmedi</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"182\"/>\n        <source>Select a user to get started</source>\n        <translation>Başlamak için bir kullanıcı seçin</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"288\"/>\n        <source>ACTIONS</source>\n        <translation>HAREKETLER</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"298\"/>\n        <source>Change Real Name</source>\n        <translation>Gerçek Adı Değiştir</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"305\"/>\n        <source>Change Password</source>\n        <translation>Şifre değiştir</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"312\"/>\n        <source>Change User Type</source>\n        <translation>Kullanıcı Türünü Değiştirin</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"359\"/>\n        <source>DANGER</source>\n        <translation>TEHLİKE</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"376\"/>\n        <source>Delete User</source>\n        <translation>Kullanıcıyı sil</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.cpp\" line=\"94\"/>\n        <source>Username: %1</source>\n        <translation>Kullanıcı adı: %1</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.cpp\" line=\"97\"/>\n        <source>Unlock User</source>\n        <translation>Kullanıcının Kilidini Aç</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.cpp\" line=\"99\"/>\n        <source>Lock User</source>\n        <translation>Kullanıcıyı Kilitle</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.cpp\" line=\"143\"/>\n        <source>Unauthorized</source>\n        <translation>Yetkisiz</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.cpp\" line=\"144\"/>\n        <source>Polkit does not allow you to manage users on the system.</source>\n        <translation>Polkit, sistemdeki kullanıcıları yönetmenize izin vermez.</translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/UsersPlugin/translations/vi_VN.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"vi_VN\" sourcelanguage=\"en_US\">\n<context>\n    <name>AddUserDialog</name>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"93\"/>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"629\"/>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"745\"/>\n        <source>Add User</source>\n        <translation>Thêm người dùng</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"161\"/>\n        <source>PERSONAL DETAILS</source>\n        <translation>CHI TIẾT CÁ NHÂN</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"168\"/>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"688\"/>\n        <source>Username</source>\n        <translation>Tên người dùng</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"175\"/>\n        <source>Full Name</source>\n        <translation>Họ và tên</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"188\"/>\n        <source>The username is generated based on the given full name. We recommend not changing it.</source>\n        <translation>Tên người dùng bị tạo dựa trên họ và tên bạn nhập vào. Chúng tôi nên bạn không thay đổi nó.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"245\"/>\n        <source>ADMINISTRATOR</source>\n        <translation>QUẢN TRỊ</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"262\"/>\n        <location filename=\"../settings/adduserdialog.cpp\" line=\"165\"/>\n        <source>Administrator</source>\n        <translation>Quản trị</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"293\"/>\n        <source>STANDARD USER</source>\n        <translation>CHUẨN</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"252\"/>\n        <source>An administrator has full control over this device. They&apos;ll be able to configure systemwide settings and install software.</source>\n        <translation>Người dùng quản trị có quyền kiểm soát toàn thiết bị này. Họ có thể đổi cài đặt cho toàn bộ hệ thống và cài đặt phần mềm.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"300\"/>\n        <source>A standard user can&apos;t perform systemwide actions. They&apos;ll only be able to perform administrative actions that only affect their account.</source>\n        <translation>Người dùng chuẩn không thể thực hiện hành động trên toàn hệ thống. Họ chỉ được thực hiện hành động sẽ ảnh hưởng đến tài khoản đó.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"310\"/>\n        <source>Standard User</source>\n        <translation>Chuẩn</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"332\"/>\n        <source>USER TYPE</source>\n        <translation>KIỂU NGƯỜI DÙNG</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"409\"/>\n        <source>Account Security</source>\n        <translation>Bảo mật tài khoản</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"434\"/>\n        <source>Protect this account with a password to prevent anyone else logging into it.</source>\n        <translation>Bảo vệ tài khoản này với một mật khẩu để ngăn chặn bất cứ ai khác đăng nhập vào nó.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"474\"/>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"729\"/>\n        <source>Password</source>\n        <translation>Mật khẩu</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"488\"/>\n        <source>Confirm Password</source>\n        <translation>Xác nhận mật khẩu</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"505\"/>\n        <source>Password Hint</source>\n        <translation>Gợi ý mật khẩu</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"512\"/>\n        <source>If you forget your password, this will appear to help you remember.</source>\n        <translation>Nếu bạn quên mật khẩu, gợi ý này sẽ hiện lên để giúp bạn nhớ.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"524\"/>\n        <source>Use this password</source>\n        <translation>Sử dụng mật khẩu này</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"531\"/>\n        <source>Alternatively, choose one of the following options:</source>\n        <translation>Cách khắc, chọn một tùy chọn bên dưới:</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"541\"/>\n        <source>Ask for a password on the next login</source>\n        <translation>Yêu cầu mật khẩu mới khi đăng nhập lần tiếp</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"544\"/>\n        <source>The first time the user logs in, we&apos;ll ask them for a password.</source>\n        <translation>Lần sau người dùng này đăng nhập, chúng tôi sẽ yêu cầu một mật khẩu.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"551\"/>\n        <source>Don&apos;t set a password</source>\n        <translation>Đừng đặt mật khẩu</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"554\"/>\n        <source>Anyone will be able to log into this account.</source>\n        <translation>Bất cứ ai hết có thể đăng nhập vào tài khoản này.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"654\"/>\n        <source>Add this user to your system?</source>\n        <translation>Thêm người dùng này vào hệ thống của bạn?</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"695\"/>\n        <source>Real Name</source>\n        <translation>Họ và tên</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"702\"/>\n        <source>User Type</source>\n        <translation>Kiểu người dùng</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.cpp\" line=\"98\"/>\n        <source>Set Password</source>\n        <translation>Đặt</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.cpp\" line=\"104\"/>\n        <source>Ask when logging in</source>\n        <translation>Yêu cầu lần tiếp</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.cpp\" line=\"110\"/>\n        <source>Not Set</source>\n        <translation>Không đặt</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.cpp\" line=\"154\"/>\n        <source>Couldn&apos;t create user</source>\n        <translation>Không thể tạo người dùng</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.cpp\" line=\"171\"/>\n        <source>Standard</source>\n        <translation>Chuẩn</translation>\n    </message>\n</context>\n<context>\n    <name>ChangePasswordDialog</name>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"68\"/>\n        <source>Change Password</source>\n        <translation>Đổi mật khẩu</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"94\"/>\n        <source>Set a password to protect this account.</source>\n        <translation>Đặt một mật khẩu để bảo vệ tài khoản này.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"237\"/>\n        <source>WARNING</source>\n        <translation>CẢNH BÁO</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"244\"/>\n        <source>This account is locked. Changing the password will unlock it.</source>\n        <translation>Tài khoản này đã bị vô hiệu. Nếu bạn đổi mật khẩu, nó sẽ bị kích hoạt.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"289\"/>\n        <source>Password</source>\n        <translation>Mật khẩu</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"303\"/>\n        <source>Confirm Password</source>\n        <translation>Xác nhận mật khẩu</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"320\"/>\n        <source>Password Hint</source>\n        <translation>Gợi ý mật khẩu</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"327\"/>\n        <source>If you forget your password, this will appear to help you remember.</source>\n        <translation>Nếu bạn quên mật khẩu, gợi ý này sẽ hiện lên để giúp bạn nhớ.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"339\"/>\n        <source>Use this password</source>\n        <translation>Sử dụng mật khẩu này</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"346\"/>\n        <source>Alternatively, choose one of the following options:</source>\n        <translation>Cách khắc, chọn một tùy chọn bên dưới:</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"356\"/>\n        <source>Ask for a password on the next login</source>\n        <translation>Yêu cầu mật khẩu mới khi đăng nhập lần tiếp</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"359\"/>\n        <source>The first time the user logs in, we&apos;ll ask them for a password.</source>\n        <translation>Lần sau người dùng này đăng nhập, chúng tôi sẽ yêu cầu một mật khẩu.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"366\"/>\n        <source>Don&apos;t set a password</source>\n        <translation>Đừng đặt mật khẩu</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"369\"/>\n        <source>Anyone will be able to log into this account.</source>\n        <translation>Bất cứ ai hết có thể đăng nhập vào tài khoản này.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.cpp\" line=\"72\"/>\n        <source>Couldn&apos;t set password</source>\n        <translation>Không thể đặt mật khẩu</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.cpp\" line=\"92\"/>\n        <location filename=\"../settings/changepassworddialog.cpp\" line=\"111\"/>\n        <source>Couldn&apos;t set password policy</source>\n        <translation>Không thể đặt chính sách mật khẩu</translation>\n    </message>\n</context>\n<context>\n    <name>ChangeRealNameDialog</name>\n    <message>\n        <location filename=\"../settings/changerealnamedialog.ui\" line=\"68\"/>\n        <source>Change Real Name</source>\n        <translation>Đổi họ và tên</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changerealnamedialog.ui\" line=\"77\"/>\n        <source>Your Real Name appears on the login screen, on the Gateway and in any other location where we need to differentiate between users.</source>\n        <translation>Họ và tên của bạn sẽ hiện lên trên màn hình đăng nhập, trên cửa, và bất kỳ vị trí nào khác khi chúng tôi cần phân biệt người dùng khác nhau.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changerealnamedialog.ui\" line=\"123\"/>\n        <source>Real Name</source>\n        <translation>Họ và tên</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changerealnamedialog.ui\" line=\"132\"/>\n        <source>Set Real Name</source>\n        <translation>Đặt họ và tên</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changerealnamedialog.cpp\" line=\"64\"/>\n        <source>Couldn&apos;t set real name</source>\n        <translation>Không thể đặt họ và tên</translation>\n    </message>\n</context>\n<context>\n    <name>DeleteUserDialog</name>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"68\"/>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"153\"/>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"207\"/>\n        <source>Delete User</source>\n        <translation>Xóa người dùng</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"77\"/>\n        <source>What do you want to do with this user&apos;s files?</source>\n        <translation>Bạn muốn làm điều gì với các tệp của người dùng này?</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"90\"/>\n        <source>Delete Files</source>\n        <translation>Xóa các tệp</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"93\"/>\n        <source>Files for this user will be removed from this device.</source>\n        <translation>Tệp của người dùng này sẽ bị xóa khỏi thiết bị này.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"100\"/>\n        <source>Keep Files</source>\n        <translation>Giữ các tệp</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"103\"/>\n        <source>Files for this user will be kept in the same location.</source>\n        <translation>Tệp của người dùng này sẽ bị giữ lại nguyên chỗ.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"179\"/>\n        <source>Delete this user from this device?</source>\n        <translation>Xóa người dùng khỏi thiết bị này?</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"189\"/>\n        <source>Any data associated with this user will be gone forever. This includes\n- Home Directory\n- Mail Spool\n- Temporary Files</source>\n        <translation>Bất kỳ dữ liệu liên quan với người dùng này sẽ bị mất mãi mãi. Dữ liệu này bao gồm\n- Thư mục chính\n- Ống thư\n- Tệp tạm thời</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"210\"/>\n        <source>They&apos;ll be gone forever!</source>\n        <translation>Nó sẽ bị mất mãi mãi!</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.cpp\" line=\"74\"/>\n        <source>Couldn&apos;t delete user</source>\n        <translation>Không thể xóa người dùng</translation>\n    </message>\n</context>\n<context>\n    <name>LockUserDialog</name>\n    <message>\n        <location filename=\"../settings/lockuserdialog.ui\" line=\"68\"/>\n        <location filename=\"../settings/lockuserdialog.ui\" line=\"90\"/>\n        <source>Lock Account</source>\n        <translation>Vô hiệu tài khoản</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/lockuserdialog.ui\" line=\"77\"/>\n        <source>After locking this account, you won&apos;t be able to log in as this account.</source>\n        <translation>Sau khi bạn vô hiệu tài khoản này, bạn không thể đăng nhập vào nó.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/lockuserdialog.ui\" line=\"140\"/>\n        <location filename=\"../settings/lockuserdialog.ui\" line=\"162\"/>\n        <source>Unlock Account</source>\n        <translation>Kích hoạt tài khoản</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/lockuserdialog.ui\" line=\"149\"/>\n        <source>After unlocking this account, you&apos;ll be able to log in as this account.</source>\n        <translation>Sau khi bạn kích hoạt tài khoản này, bạn có thể đăng nhập vào nó.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/lockuserdialog.cpp\" line=\"63\"/>\n        <source>Couldn&apos;t unlock user</source>\n        <translation>Không thể kích hoạt tài khoản</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/lockuserdialog.cpp\" line=\"66\"/>\n        <source>Couldn&apos;t lock user</source>\n        <translation>Không thể vô hiệu tài khoản</translation>\n    </message>\n</context>\n<context>\n    <name>OnboardingUsers</name>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"57\"/>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"582\"/>\n        <location filename=\"../onboarding/onboardingusers.cpp\" line=\"156\"/>\n        <source>Users</source>\n        <translation>Người dùng</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"130\"/>\n        <source>Full Name</source>\n        <translation>Họ và tên</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"137\"/>\n        <source>Username</source>\n        <translation>Tên người dùng</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"150\"/>\n        <source>ABOUT YOU</source>\n        <translation>VỀ BẠN</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"157\"/>\n        <source>The username is generated based on the given full name. We recommend not changing it.</source>\n        <translation>Tên người dùng bị tạo dựa trên họ và tên bạn nhập vào. Chúng tôi nên bạn không thay đổi nó.</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"199\"/>\n        <source>Password</source>\n        <translation>Mật khẩu</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"206\"/>\n        <source>Password Hint</source>\n        <translation>Gợi ý mật khẩu</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"219\"/>\n        <source>YOUR PASSWORD</source>\n        <translation>MẬT KHẨU CỦA BẠN</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"236\"/>\n        <source>Confirm Password</source>\n        <translation>Xác nhận mật khẩu</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"243\"/>\n        <source>Protect this account with a password to prevent anyone else logging into it.</source>\n        <translation>Bảo vệ tài khoản này với một mật khẩu để ngăn chặn bất cứ ai khác đăng nhập vào nó.</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"257\"/>\n        <source>If you forget your password, this will appear to help you remember.</source>\n        <translation>Nếu bạn quên mật khẩu, gợi ý này sẽ hiện lên để giúp bạn nhớ.</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"329\"/>\n        <source>ADMINISTRATOR</source>\n        <translation>QUẢN TRỊ</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"336\"/>\n        <source>An administrator has full control over this device. They&apos;ll be able to configure systemwide settings and install software.</source>\n        <translation>Người dùng quản trị có quyền kiểm soát toàn thiết bị này. Họ có thể đổi cài đặt cho toàn bộ hệ thống và cài đặt phần mềm.</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"346\"/>\n        <source>Administrator</source>\n        <translation>Quản trị</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"377\"/>\n        <source>STANDARD USER</source>\n        <translation>CHUẨN</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"384\"/>\n        <source>A standard user can&apos;t perform systemwide actions. They&apos;ll only be able to perform administrative actions that only affect their account.</source>\n        <translation>Người dùng chuẩn không thể thực hiện hành động trên toàn hệ thống. Họ chỉ được thực hiện hành động sẽ ảnh hưởng đến tài khoản đó.</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"394\"/>\n        <source>Standard User</source>\n        <translation>Chuẩn</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"419\"/>\n        <source>USER TYPE</source>\n        <translation>KIỂU NGƯỜI DÙNG</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"491\"/>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"673\"/>\n        <source>Next</source>\n        <translation>Tiếp</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"662\"/>\n        <source>Add Another User</source>\n        <translation>Thêm người dùng nữa</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.cpp\" line=\"49\"/>\n        <source>It&apos;s time to get to know you. Apps will use this information to personalise your experience, and you&apos;ll use the password to log in.</source>\n        <translation>Đến giờ làm quen với bạn. Ứng dụng sẽ sử dụng thông tin này để cá nhân hóa trải nghiệm của bạn và bạn sẽ sử dụng mật khẩu này để đăng nhập.</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.cpp\" line=\"116\"/>\n        <source>Thanks, %1. If other people will be using this device, you can add them now, or you can add them later.</source>\n        <translation>Cảm ơn %1. Nếu người khác sử dụng thiết bị này, bạn có thể thêm họ vào ngay bây giờ, hoặc bạn có thể thêm vào sau.</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.cpp\" line=\"114\"/>\n        <source>You&apos;ve added these users to your system</source>\n        <translation>Bạn đã thêm người dùng này vào thiết bị này</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.cpp\" line=\"123\"/>\n        <source>Enter the details of the next user to be added</source>\n        <translation>Điền vào chi tiết cho người dùng tiếp theo để thêm vào</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.cpp\" line=\"130\"/>\n        <source>Couldn&apos;t create user</source>\n        <translation>Không thể tạo người dùng</translation>\n    </message>\n</context>\n<context>\n    <name>UserTypeDialog</name>\n    <message>\n        <location filename=\"../settings/usertypedialog.ui\" line=\"93\"/>\n        <source>Change User Type</source>\n        <translation>Đổi kiểu tài khoản</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/usertypedialog.ui\" line=\"150\"/>\n        <source>ADMINISTRATOR</source>\n        <translation>QUẢN TRỊ</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/usertypedialog.ui\" line=\"157\"/>\n        <source>An administrator has full control over this device. They&apos;ll be able to configure systemwide settings and install software.</source>\n        <translation>Người dùng quản trị có quyền kiểm soát toàn thiết bị này. Họ có thể đổi cài đặt cho toàn bộ hệ thống và cài đặt phần mềm.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/usertypedialog.ui\" line=\"205\"/>\n        <source>A standard user can&apos;t perform systemwide actions. They&apos;ll only be able to perform administrative actions that only affect their account.</source>\n        <translation>Người dùng chuẩn không thể thực hiện hành động trên toàn hệ thống. Họ chỉ được thực hiện hành động sẽ ảnh hưởng đến tài khoản đó.</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/usertypedialog.ui\" line=\"167\"/>\n        <source>Administrator</source>\n        <translation>Quản trị</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/usertypedialog.ui\" line=\"198\"/>\n        <source>STANDARD USER</source>\n        <translation>CHUẨN</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/usertypedialog.ui\" line=\"215\"/>\n        <source>Standard User</source>\n        <translation>Chuẩn</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/usertypedialog.cpp\" line=\"87\"/>\n        <source>Couldn&apos;t set user type</source>\n        <translation>Không thể đặt kiểu người dùng</translation>\n    </message>\n</context>\n<context>\n    <name>UsersPane</name>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"89\"/>\n        <location filename=\"../settings/userspane.cpp\" line=\"222\"/>\n        <source>Users</source>\n        <translation>Người dùng</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"105\"/>\n        <source>New User</source>\n        <translation>Người dùng mới</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"172\"/>\n        <source>No User Selected</source>\n        <translation>Chúa chọn người dùng</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"182\"/>\n        <source>Select a user to get started</source>\n        <translation>Chọn một người dùng để bắt đầu</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"288\"/>\n        <source>ACTIONS</source>\n        <translation>HOẠT ĐỘNG</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"298\"/>\n        <source>Change Real Name</source>\n        <translation>Đổi họ và tên</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"305\"/>\n        <source>Change Password</source>\n        <translation>Đổi mật khẩu</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"312\"/>\n        <source>Change User Type</source>\n        <translation>Đổi kiểu tài khoản</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"359\"/>\n        <source>DANGER</source>\n        <translation>NGUY HIỂM</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"376\"/>\n        <source>Delete User</source>\n        <translation>Xóa người dùng</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.cpp\" line=\"94\"/>\n        <source>Username: %1</source>\n        <translation>Tên người dùng: %1</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.cpp\" line=\"97\"/>\n        <source>Unlock User</source>\n        <translation>Kích hoạt người dùng</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.cpp\" line=\"99\"/>\n        <source>Lock User</source>\n        <translation>Vô hiệu người dùng</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.cpp\" line=\"143\"/>\n        <source>Unauthorized</source>\n        <translation>Không được phép</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.cpp\" line=\"144\"/>\n        <source>Polkit does not allow you to manage users on the system.</source>\n        <translation>Polkit không có cho bạn phép quản lý người dùng trên hệ thống này.</translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/UsersPlugin/translations/zh_CN.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"zh_CN\" sourcelanguage=\"en_US\">\n<context>\n    <name>AddUserDialog</name>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"93\"/>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"629\"/>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"745\"/>\n        <source>Add User</source>\n        <translation>添加用户</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"161\"/>\n        <source>PERSONAL DETAILS</source>\n        <translation>个人信息</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"168\"/>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"688\"/>\n        <source>Username</source>\n        <translation>用户名</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"175\"/>\n        <source>Full Name</source>\n        <translation>全面</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"188\"/>\n        <source>The username is generated based on the given full name. We recommend not changing it.</source>\n        <translation>用户名是根据给定的全名生成的。 我们建议不要更改它。</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"245\"/>\n        <source>ADMINISTRATOR</source>\n        <translation>管理员</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"262\"/>\n        <location filename=\"../settings/adduserdialog.cpp\" line=\"165\"/>\n        <source>Administrator</source>\n        <translation>管理员</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"293\"/>\n        <source>STANDARD USER</source>\n        <translation>普通用户</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"252\"/>\n        <source>An administrator has full control over this device. They&apos;ll be able to configure systemwide settings and install software.</source>\n        <translation>管理员可以完全控制此设备。 他们将能够配置系统范围的设置并安装软件。</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"300\"/>\n        <source>A standard user can&apos;t perform systemwide actions. They&apos;ll only be able to perform administrative actions that only affect their account.</source>\n        <translation>标准用户无法执行系统范围的操作。 他们将只能执行只会影响其帐户的管理操作。</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"310\"/>\n        <source>Standard User</source>\n        <translation>普通用户</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"332\"/>\n        <source>USER TYPE</source>\n        <translation>用户类型</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"409\"/>\n        <source>Account Security</source>\n        <translation>帐号安全</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"434\"/>\n        <source>Protect this account with a password to prevent anyone else logging into it.</source>\n        <translation>使用密码保护该帐户，以防止其他人登录。</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"474\"/>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"729\"/>\n        <source>Password</source>\n        <translation>密码</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"488\"/>\n        <source>Confirm Password</source>\n        <translation>确定密码</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"505\"/>\n        <source>Password Hint</source>\n        <translation>密码提示</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"512\"/>\n        <source>If you forget your password, this will appear to help you remember.</source>\n        <translation>如果您忘记密码，这将有助于您记忆。</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"524\"/>\n        <source>Use this password</source>\n        <translation>使用此密码</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"531\"/>\n        <source>Alternatively, choose one of the following options:</source>\n        <translation>或者，选择以下选项之一：</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"541\"/>\n        <source>Ask for a password on the next login</source>\n        <translation>在下次登录时要求输入密码</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"544\"/>\n        <source>The first time the user logs in, we&apos;ll ask them for a password.</source>\n        <translation>用户首次登录时，我们会要求他们输入密码。</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"551\"/>\n        <source>Don&apos;t set a password</source>\n        <translation>不要设置密码</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"554\"/>\n        <source>Anyone will be able to log into this account.</source>\n        <translation>任何人都可以登录此帐户。</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"654\"/>\n        <source>Add this user to your system?</source>\n        <translation>将此用户添加到您的系统？</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"695\"/>\n        <source>Real Name</source>\n        <translation>真实名字</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.ui\" line=\"702\"/>\n        <source>User Type</source>\n        <translation>用户类型</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.cpp\" line=\"98\"/>\n        <source>Set Password</source>\n        <translation>设置密码</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.cpp\" line=\"104\"/>\n        <source>Ask when logging in</source>\n        <translation>登录时询问</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.cpp\" line=\"110\"/>\n        <source>Not Set</source>\n        <translation>未设置</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.cpp\" line=\"154\"/>\n        <source>Couldn&apos;t create user</source>\n        <translation>无法创建用户</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/adduserdialog.cpp\" line=\"171\"/>\n        <source>Standard</source>\n        <translation>标准</translation>\n    </message>\n</context>\n<context>\n    <name>ChangePasswordDialog</name>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"68\"/>\n        <source>Change Password</source>\n        <translation>更改密码</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"94\"/>\n        <source>Set a password to protect this account.</source>\n        <translation>设置密码以保护该帐户。</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"237\"/>\n        <source>WARNING</source>\n        <translation>警告</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"244\"/>\n        <source>This account is locked. Changing the password will unlock it.</source>\n        <translation>此帐户已被锁定。 更改密码将其解锁。</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"289\"/>\n        <source>Password</source>\n        <translation>密码</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"303\"/>\n        <source>Confirm Password</source>\n        <translation>确定密码</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"320\"/>\n        <source>Password Hint</source>\n        <translation>密码提示</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"327\"/>\n        <source>If you forget your password, this will appear to help you remember.</source>\n        <translation>如果您忘记密码，这将有助于您记忆。</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"339\"/>\n        <source>Use this password</source>\n        <translation>使用此密码</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"346\"/>\n        <source>Alternatively, choose one of the following options:</source>\n        <translation>或者，选择以下选项之一：</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"356\"/>\n        <source>Ask for a password on the next login</source>\n        <translation>在下次登录时要求输入密码</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"359\"/>\n        <source>The first time the user logs in, we&apos;ll ask them for a password.</source>\n        <translation>用户首次登录时，我们会要求他们输入密码。</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"366\"/>\n        <source>Don&apos;t set a password</source>\n        <translation>不要设置密码</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.ui\" line=\"369\"/>\n        <source>Anyone will be able to log into this account.</source>\n        <translation>任何人都可以登录此帐户。</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.cpp\" line=\"72\"/>\n        <source>Couldn&apos;t set password</source>\n        <translation>无法设置密码</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changepassworddialog.cpp\" line=\"92\"/>\n        <location filename=\"../settings/changepassworddialog.cpp\" line=\"111\"/>\n        <source>Couldn&apos;t set password policy</source>\n        <translation>无法设置密码</translation>\n    </message>\n</context>\n<context>\n    <name>ChangeRealNameDialog</name>\n    <message>\n        <location filename=\"../settings/changerealnamedialog.ui\" line=\"68\"/>\n        <source>Change Real Name</source>\n        <translation>更改真实姓名</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changerealnamedialog.ui\" line=\"77\"/>\n        <source>Your Real Name appears on the login screen, on the Gateway and in any other location where we need to differentiate between users.</source>\n        <translation>您的真实姓名会出现在登录屏幕，网关以及我们需要区分用户的任何其他位置。</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changerealnamedialog.ui\" line=\"123\"/>\n        <source>Real Name</source>\n        <translation>真实名字</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changerealnamedialog.ui\" line=\"132\"/>\n        <source>Set Real Name</source>\n        <translation>设置真实姓名</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/changerealnamedialog.cpp\" line=\"64\"/>\n        <source>Couldn&apos;t set real name</source>\n        <translation>无法设置姓名</translation>\n    </message>\n</context>\n<context>\n    <name>DeleteUserDialog</name>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"68\"/>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"153\"/>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"207\"/>\n        <source>Delete User</source>\n        <translation>删除用户</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"77\"/>\n        <source>What do you want to do with this user&apos;s files?</source>\n        <translation>您要如何处理此用户的文件？</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"90\"/>\n        <source>Delete Files</source>\n        <translation>删除文件</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"93\"/>\n        <source>Files for this user will be removed from this device.</source>\n        <translation>该用户的文件将从此设备中删除。</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"100\"/>\n        <source>Keep Files</source>\n        <translation>保留档案</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"103\"/>\n        <source>Files for this user will be kept in the same location.</source>\n        <translation>该用户的文件将保存在同一位置。</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"179\"/>\n        <source>Delete this user from this device?</source>\n        <translation>从此设备删除该用户？</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"189\"/>\n        <source>Any data associated with this user will be gone forever. This includes\n- Home Directory\n- Mail Spool\n- Temporary Files</source>\n        <translation>与该用户关联的所有数据将永远消失。 这包括\n-主目录\n-邮件线轴\n-临时文件</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.ui\" line=\"210\"/>\n        <source>They&apos;ll be gone forever!</source>\n        <translation>他们将永远消失！</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/deleteuserdialog.cpp\" line=\"74\"/>\n        <source>Couldn&apos;t delete user</source>\n        <translation>无法删除用户</translation>\n    </message>\n</context>\n<context>\n    <name>LockUserDialog</name>\n    <message>\n        <location filename=\"../settings/lockuserdialog.ui\" line=\"68\"/>\n        <location filename=\"../settings/lockuserdialog.ui\" line=\"90\"/>\n        <source>Lock Account</source>\n        <translation>锁定账户</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/lockuserdialog.ui\" line=\"77\"/>\n        <source>After locking this account, you won&apos;t be able to log in as this account.</source>\n        <translation>锁定此帐户后，您将无法使用该帐户登录。</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/lockuserdialog.ui\" line=\"140\"/>\n        <location filename=\"../settings/lockuserdialog.ui\" line=\"162\"/>\n        <source>Unlock Account</source>\n        <translation>解锁账号</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/lockuserdialog.ui\" line=\"149\"/>\n        <source>After unlocking this account, you&apos;ll be able to log in as this account.</source>\n        <translation>锁定此帐户后，您将无法使用该帐户登录。</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/lockuserdialog.cpp\" line=\"63\"/>\n        <source>Couldn&apos;t unlock user</source>\n        <translation>无法解锁此用户</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/lockuserdialog.cpp\" line=\"66\"/>\n        <source>Couldn&apos;t lock user</source>\n        <translation>无法锁定此用户</translation>\n    </message>\n</context>\n<context>\n    <name>OnboardingUsers</name>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"57\"/>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"582\"/>\n        <location filename=\"../onboarding/onboardingusers.cpp\" line=\"156\"/>\n        <source>Users</source>\n        <translation type=\"unfinished\">用户</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"130\"/>\n        <source>Full Name</source>\n        <translation type=\"unfinished\">全面</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"137\"/>\n        <source>Username</source>\n        <translation type=\"unfinished\">用户名</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"150\"/>\n        <source>ABOUT YOU</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"157\"/>\n        <source>The username is generated based on the given full name. We recommend not changing it.</source>\n        <translation type=\"unfinished\">用户名是根据给定的全名生成的。 我们建议不要更改它。</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"199\"/>\n        <source>Password</source>\n        <translation type=\"unfinished\">密码</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"206\"/>\n        <source>Password Hint</source>\n        <translation type=\"unfinished\">密码提示</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"219\"/>\n        <source>YOUR PASSWORD</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"236\"/>\n        <source>Confirm Password</source>\n        <translation type=\"unfinished\">确定密码</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"243\"/>\n        <source>Protect this account with a password to prevent anyone else logging into it.</source>\n        <translation type=\"unfinished\">使用密码保护该帐户，以防止其他人登录。</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"257\"/>\n        <source>If you forget your password, this will appear to help you remember.</source>\n        <translation type=\"unfinished\">如果您忘记密码，这将有助于您记忆。</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"329\"/>\n        <source>ADMINISTRATOR</source>\n        <translation type=\"unfinished\">管理员</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"336\"/>\n        <source>An administrator has full control over this device. They&apos;ll be able to configure systemwide settings and install software.</source>\n        <translation type=\"unfinished\">管理员可以完全控制此设备。 他们将能够配置系统范围的设置并安装软件。</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"346\"/>\n        <source>Administrator</source>\n        <translation type=\"unfinished\">管理员</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"377\"/>\n        <source>STANDARD USER</source>\n        <translation type=\"unfinished\">普通用户</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"384\"/>\n        <source>A standard user can&apos;t perform systemwide actions. They&apos;ll only be able to perform administrative actions that only affect their account.</source>\n        <translation type=\"unfinished\">标准用户无法执行系统范围的操作。 他们将只能执行只会影响其帐户的管理操作。</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"394\"/>\n        <source>Standard User</source>\n        <translation type=\"unfinished\">普通用户</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"419\"/>\n        <source>USER TYPE</source>\n        <translation type=\"unfinished\">用户类型</translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"491\"/>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"673\"/>\n        <source>Next</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.ui\" line=\"662\"/>\n        <source>Add Another User</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.cpp\" line=\"49\"/>\n        <source>It&apos;s time to get to know you. Apps will use this information to personalise your experience, and you&apos;ll use the password to log in.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.cpp\" line=\"116\"/>\n        <source>Thanks, %1. If other people will be using this device, you can add them now, or you can add them later.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.cpp\" line=\"114\"/>\n        <source>You&apos;ve added these users to your system</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.cpp\" line=\"123\"/>\n        <source>Enter the details of the next user to be added</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../onboarding/onboardingusers.cpp\" line=\"130\"/>\n        <source>Couldn&apos;t create user</source>\n        <translation type=\"unfinished\">无法创建用户</translation>\n    </message>\n</context>\n<context>\n    <name>UserTypeDialog</name>\n    <message>\n        <location filename=\"../settings/usertypedialog.ui\" line=\"93\"/>\n        <source>Change User Type</source>\n        <translation>变更使用者类型</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/usertypedialog.ui\" line=\"150\"/>\n        <source>ADMINISTRATOR</source>\n        <translation>管理员</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/usertypedialog.ui\" line=\"157\"/>\n        <source>An administrator has full control over this device. They&apos;ll be able to configure systemwide settings and install software.</source>\n        <translation type=\"unfinished\">管理员可以完全控制此设备。 他们将能够配置系统范围的设置并安装软件。</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/usertypedialog.ui\" line=\"205\"/>\n        <source>A standard user can&apos;t perform systemwide actions. They&apos;ll only be able to perform administrative actions that only affect their account.</source>\n        <translation type=\"unfinished\">标准用户无法执行系统范围的操作。 他们将只能执行只会影响其帐户的管理操作。</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/usertypedialog.ui\" line=\"167\"/>\n        <source>Administrator</source>\n        <translation>管理员</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/usertypedialog.ui\" line=\"198\"/>\n        <source>STANDARD USER</source>\n        <translation>普通用户</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/usertypedialog.ui\" line=\"215\"/>\n        <source>Standard User</source>\n        <translation>普通用户</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/usertypedialog.cpp\" line=\"87\"/>\n        <source>Couldn&apos;t set user type</source>\n        <translation>无法设置用户类型</translation>\n    </message>\n</context>\n<context>\n    <name>UsersPane</name>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"89\"/>\n        <location filename=\"../settings/userspane.cpp\" line=\"222\"/>\n        <source>Users</source>\n        <translation>用户</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"105\"/>\n        <source>New User</source>\n        <translation>新用户</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"172\"/>\n        <source>No User Selected</source>\n        <translation>未选择用户</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"182\"/>\n        <source>Select a user to get started</source>\n        <translation>选择一个用户开始</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"288\"/>\n        <source>ACTIONS</source>\n        <translation>行动</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"298\"/>\n        <source>Change Real Name</source>\n        <translation>更改真实姓名</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"305\"/>\n        <source>Change Password</source>\n        <translation>更改密码</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"312\"/>\n        <source>Change User Type</source>\n        <translation>变更使用者类型</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"359\"/>\n        <source>DANGER</source>\n        <translation>危险</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.ui\" line=\"376\"/>\n        <source>Delete User</source>\n        <translation>删除用户</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.cpp\" line=\"94\"/>\n        <source>Username: %1</source>\n        <translation>用户名: %1</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.cpp\" line=\"97\"/>\n        <source>Unlock User</source>\n        <translation>解锁用户</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.cpp\" line=\"99\"/>\n        <source>Lock User</source>\n        <translation>锁定用户</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.cpp\" line=\"143\"/>\n        <source>Unauthorized</source>\n        <translation>未授权</translation>\n    </message>\n    <message>\n        <location filename=\"../settings/userspane.cpp\" line=\"144\"/>\n        <source>Polkit does not allow you to manage users on the system.</source>\n        <translation>Polkit不允许您管理系统上的用户。</translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "plugins/plugins.pri",
    "content": "QT += tdesktopenvironment\nCONFIG += plugin\n\nunix:!macx: {\n    LIBS += -L$$OUT_PWD/../../libthedesk/ -lthedesk\n    INCLUDEPATH += $$PWD/../libthedesk ../../libthedesk/plugins\n    DEPENDPATH += $$PWD/../libthedesk\n\n    target.path = $$[QT_INSTALL_LIBS]/thedesk/plugins\n    INSTALLS += target\n}\n\nQMAKE_POST_LINK += $$QMAKE_COPY_DIR $$quote($$_PRO_FILE_PWD_/translations) $$shell_quote($$OUT_PWD) && \\\n    $$QMAKE_COPY $$quote($$_PRO_FILE_PWD_/defaults.conf) $$shell_quote($$OUT_PWD)\n"
  },
  {
    "path": "plugins/plugins.pro",
    "content": "TEMPLATE = subdirs\n\nSUBDIRS += \\\n    AccessibilityPlugin \\\n    AudioPlugin \\\n    BluetoothPlugin \\\n    BrightnessPlugin \\\n    DefaultsPlugin \\\n    DisplayPlugin \\\n    InputPlugin \\\n    LocalePlugin \\\n    NetworkPlugin \\\n    NotificationsPlugin \\\n    OverviewPlugin \\\n    PowerPlugin \\\n    ScreenshotPlugin \\\n    ThemePlugin \\\n    TimeDatePlugin \\\n    UsersPlugin\n\nDISTFILES += plugins.pri\n"
  },
  {
    "path": "polkitagent/CMakeLists.txt",
    "content": "cmake_minimum_required(VERSION 3.24.0)\n\nproject(polkitagent VERSION 1.0.0 LANGUAGES CXX)\n\nfind_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets Network DBus)\nfind_package(libcontemporary REQUIRED)\nfind_package(libtdesktopenvironment REQUIRED)\nfind_package(PolkitQt${QT_VERSION_MAJOR}-1 REQUIRED)\n\nset(SOURCES\n    authwindow.cpp\n    common.cpp\n    identitypopover.cpp\n    main.cpp\n    polkitinterface.cpp\n\n    authwindow.ui\n    identitypopover.ui\n)\n\nset(HEADERS\n    authwindow.h\n    common.h\n    identitypopover.h\n    polkitinterface.h\n)\n\nadd_executable(polkitagent ${SOURCES} ${HEADERS})\n\nset_target_properties(polkitagent PROPERTIES\n        MACOSX_BUNDLE TRUE\n        MACOSX_BUNDLE_GUI_IDENTIFIER com.vicr123.thedesk.polkitagent\n        WIN32_EXECUTABLE TRUE\n        CNTP_DATA_SUBDIR thedesk/td-polkitagent\n        OUTPUT_NAME \"td-polkitagent\"\n    )\n\ncntp_init(polkitagent 20)\ncntp_translate(polkitagent)\ncntp_target_name(polkitagent \"td-polkitagent\")\n#cntp_defaults_file(polkitagent\n#    DEFAULTS_FILE polkitagent.conf)\n\ntarget_link_libraries(polkitagent Qt::Widgets Qt::Network Qt::DBus PolkitQt${QT_VERSION_MAJOR}-1::Core PolkitQt${QT_VERSION_MAJOR}-1::Agent libcontemporary libtdesktopenvironment)\n\ninstall(TARGETS polkitagent\n        RUNTIME DESTINATION ${CMAKE_INSTALL_LIBDIR}\n        BUNDLE DESTINATION /Applications)\n"
  },
  {
    "path": "polkitagent/authwindow.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"authwindow.h\"\n#include \"ui_authwindow.h\"\n\n#include \"common.h\"\n#include \"identitypopover.h\"\n#include <PolkitQt1/Agent/Session>\n#include <QScreen>\n#include <QShortcut>\n#include <Screens/systempopover.h>\n#include <ttoast.h>\n\nstruct AuthWindowPrivate {\n        PolkitQt1::Identity::List identities;\n        PolkitQt1::Agent::AsyncResult* callback = nullptr;\n\n        PolkitQt1::Agent::Session* session = nullptr;\n        QString cookie;\n};\n\nAuthWindow::AuthWindow(QWidget* parent) :\n    QWidget(parent),\n    ui(new Ui::AuthWindow) {\n    ui->setupUi(this);\n\n    d = new AuthWindowPrivate();\n    ui->titleLabel->setBackButtonShown(true);\n    ui->stackedWidget->setCurrentAnimation(tStackedWidget::Fade);\n\n    QShortcut* escShortcut = new QShortcut(QKeySequence(Qt::Key_Escape), this);\n    connect(escShortcut, &QShortcut::activated, this, [=] {\n        ui->titleLabel->backButtonClicked();\n    });\n}\n\nAuthWindow::~AuthWindow() {\n    delete d;\n    delete ui;\n}\n\nvoid AuthWindow::setMessage(QString message) {\n    ui->messageLabel->setText(message);\n    ui->customMessageLabel->setText(message);\n}\n\nvoid AuthWindow::setIdentities(PolkitQt1::Identity::List identities) {\n    d->identities = identities;\n    ui->changeIdentity->setVisible(!identities.isEmpty());\n    ui->customChangeIdentity->setVisible(!identities.isEmpty());\n}\n\nvoid AuthWindow::setCallback(PolkitQt1::Agent::AsyncResult* result) {\n    d->callback = result;\n}\n\nvoid AuthWindow::setCookie(QString cookie) {\n    d->cookie = cookie;\n}\n\nvoid AuthWindow::showAuthWindow() {\n    initiateSession(d->identities.first());\n\n    QTimer::singleShot(0, [=] {\n        auto* popover = new SystemPopover(this);\n        popover->setPopoverWidth(600);\n        popover->setPopoverSide(tPopover::Bottom);\n        connect(ui->titleLabel, &tTitleLabel::backButtonClicked, popover, &tPopover::dismiss);\n        connect(this, &AuthWindow::dismiss, popover, &tPopover::dismiss);\n        connect(popover, &tPopover::dismissed, this, [=] {\n            if (d->session) {\n                d->session->setProperty(\"cancelled\", true);\n                d->session->cancel();\n                d->session->deleteLater();\n            }\n\n            if (d->callback) {\n                d->callback->setError(\"org.freedesktop.PolicyKit1.Error.Cancelled\");\n                d->callback->setCompleted();\n            }\n\n            popover->deleteLater();\n        });\n        popover->show();\n    });\n}\n\nvoid AuthWindow::cancel() {\n    ui->titleLabel->backButtonClicked();\n}\n\nvoid AuthWindow::initiateSession(PolkitQt1::Identity identity) {\n    if (d->session) {\n        d->session->setProperty(\"cancelled\", true);\n        d->session->cancel();\n        d->session->deleteLater();\n    }\n\n    ui->stackedWidget->setCurrentWidget(ui->loadingPage, false);\n    ui->usernameLabel->setText(Common::stringForIdentity(identity));\n    ui->customUsernameLabel->setText(Common::stringForIdentity(identity));\n    d->session = new PolkitQt1::Agent::Session(d->identities.first(), d->cookie);\n    d->session->setProperty(\"cancelled\", false);\n    connect(d->session, &PolkitQt1::Agent::Session::request, this, [=](QString request, bool echo) {\n        if (request.startsWith(\"password:\", Qt::CaseInsensitive)) {\n            // Use the password pane\n            ui->passwordBox->setText(\"\");\n            ui->passwordBox->setEchoMode(echo ? QLineEdit::Normal : QLineEdit::Password);\n            ui->stackedWidget->setCurrentWidget(ui->passwordPage);\n            ui->passwordBox->setFocus();\n        } else {\n            // Use the request pane\n            ui->responseBox->setText(\"\");\n            ui->responseBox->setPlaceholderText(request);\n            ui->responseBox->setEchoMode(echo ? QLineEdit::Normal : QLineEdit::Password);\n            ui->stackedWidget->setCurrentWidget(ui->customResponsePage);\n            ui->responseBox->setFocus();\n        }\n    });\n    connect(d->session, &PolkitQt1::Agent::Session::completed, this, [=](bool gainedAuthorisation) {\n        if (!d->session->property(\"cancelled\").toBool()) {\n            if (gainedAuthorisation) {\n                d->session->deleteLater();\n                d->session = nullptr;\n\n                d->callback->setCompleted();\n                emit dismiss();\n            } else {\n                initiateSession(identity);\n            }\n        }\n    });\n    connect(d->session, &PolkitQt1::Agent::Session::showError, this, [=](QString error) {\n        tToast* toast = new tToast(this);\n        toast->setTitle(tr(\"Error\"));\n        toast->setText(error);\n        connect(toast, &tToast::dismissed, toast, &tToast::deleteLater);\n        toast->show(this);\n    });\n    connect(d->session, &PolkitQt1::Agent::Session::showInfo, this, [=](QString info) {\n        tToast* toast = new tToast(this);\n        toast->setTitle(tr(\"Message\"));\n        toast->setText(info);\n        connect(toast, &tToast::dismissed, toast, &tToast::deleteLater);\n        toast->show(this);\n    });\n    d->session->initiate();\n}\n\nvoid AuthWindow::on_okPasswordButton_clicked() {\n    ui->stackedWidget->setCurrentWidget(ui->loadingPage);\n    d->session->setResponse(ui->passwordBox->text());\n}\n\nvoid AuthWindow::on_changeIdentity_clicked() {\n    IdentityPopover* id = new IdentityPopover(d->identities, this);\n    tPopover* popover = new tPopover(id);\n    popover->setPopoverWidth(SC_DPI(400));\n    popover->setPopoverSide(tPopover::Bottom);\n    connect(id, &IdentityPopover::selectIdentity, this, [=](PolkitQt1::Identity identity) {\n        this->initiateSession(identity);\n    });\n    connect(id, &IdentityPopover::done, popover, &tPopover::dismiss);\n    connect(popover, &tPopover::dismissed, popover, &tPopover::deleteLater);\n    connect(popover, &tPopover::dismissed, id, &IdentityPopover::deleteLater);\n    popover->show(this);\n}\n\nvoid AuthWindow::on_customChangeIdentity_clicked() {\n    ui->changeIdentity->click();\n}\n\nvoid AuthWindow::on_okResponseButton_clicked() {\n    ui->stackedWidget->setCurrentWidget(ui->loadingPage);\n    d->session->setResponse(ui->responseBox->text());\n}\n"
  },
  {
    "path": "polkitagent/authwindow.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef AUTHWINDOW_H\n#define AUTHWINDOW_H\n\n#include <QWidget>\n#include <PolkitQt1/Identity>\n#include <PolkitQt1/Agent/Session>\n\nnamespace Ui {\n    class AuthWindow;\n}\n\nstruct AuthWindowPrivate;\nclass AuthWindow : public QWidget {\n        Q_OBJECT\n\n    public:\n        explicit AuthWindow(QWidget* parent = nullptr);\n        ~AuthWindow();\n\n        void setMessage(QString message);\n        void setIdentities(PolkitQt1::Identity::List identities);\n        void setCallback(PolkitQt1::Agent::AsyncResult* result);\n        void setCookie(QString cookie);\n        void showAuthWindow();\n\n        void cancel();\n\n    signals:\n        void dismiss();\n\n    private slots:\n        void on_okPasswordButton_clicked();\n\n        void on_changeIdentity_clicked();\n\n        void on_customChangeIdentity_clicked();\n\n        void on_okResponseButton_clicked();\n\n    private:\n        Ui::AuthWindow* ui;\n        AuthWindowPrivate* d;\n\n        void initiateSession(PolkitQt1::Identity identity);\n};\n\n#endif // AUTHWINDOW_H\n"
  },
  {
    "path": "polkitagent/authwindow.ui",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ui version=\"4.0\">\n <class>AuthWindow</class>\n <widget class=\"QWidget\" name=\"AuthWindow\">\n  <property name=\"geometry\">\n   <rect>\n    <x>0</x>\n    <y>0</y>\n    <width>618</width>\n    <height>357</height>\n   </rect>\n  </property>\n  <property name=\"windowTitle\">\n   <string notr=\"true\">Form</string>\n  </property>\n  <layout class=\"QGridLayout\" name=\"gridLayout\">\n   <property name=\"leftMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"topMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"rightMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"bottomMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"spacing\">\n    <number>0</number>\n   </property>\n   <item row=\"0\" column=\"0\" colspan=\"2\">\n    <widget class=\"tTitleLabel\" name=\"titleLabel\">\n     <property name=\"text\">\n      <string>PolicyKit Authentication</string>\n     </property>\n    </widget>\n   </item>\n   <item row=\"1\" column=\"0\">\n    <widget class=\"tStackedWidget\" name=\"stackedWidget\">\n     <property name=\"currentIndex\">\n      <number>2</number>\n     </property>\n     <widget class=\"QWidget\" name=\"loadingPage\">\n      <layout class=\"QGridLayout\" name=\"gridLayout_3\">\n       <item row=\"0\" column=\"1\">\n        <spacer name=\"verticalSpacer_3\">\n         <property name=\"orientation\">\n          <enum>Qt::Vertical</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>20</width>\n           <height>141</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n       <item row=\"1\" column=\"0\">\n        <spacer name=\"horizontalSpacer_3\">\n         <property name=\"orientation\">\n          <enum>Qt::Horizontal</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>280</width>\n           <height>20</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n       <item row=\"1\" column=\"1\">\n        <widget class=\"tCircularSpinner\" name=\"widget\" native=\"true\"/>\n       </item>\n       <item row=\"1\" column=\"2\">\n        <spacer name=\"horizontalSpacer_4\">\n         <property name=\"orientation\">\n          <enum>Qt::Horizontal</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>279</width>\n           <height>20</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n       <item row=\"2\" column=\"1\">\n        <spacer name=\"verticalSpacer_4\">\n         <property name=\"orientation\">\n          <enum>Qt::Vertical</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>20</width>\n           <height>140</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n      </layout>\n     </widget>\n     <widget class=\"QWidget\" name=\"passwordPage\">\n      <layout class=\"QGridLayout\" name=\"gridLayout_2\">\n       <item row=\"0\" column=\"1\">\n        <spacer name=\"verticalSpacer\">\n         <property name=\"orientation\">\n          <enum>Qt::Vertical</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>20</width>\n           <height>38</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n       <item row=\"1\" column=\"0\">\n        <spacer name=\"horizontalSpacer\">\n         <property name=\"orientation\">\n          <enum>Qt::Horizontal</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>23</width>\n           <height>20</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n       <item row=\"1\" column=\"1\">\n        <widget class=\"QFrame\" name=\"lockFrame\">\n         <property name=\"minimumSize\">\n          <size>\n           <width>500</width>\n           <height>0</height>\n          </size>\n         </property>\n         <property name=\"autoFillBackground\">\n          <bool>false</bool>\n         </property>\n         <property name=\"frameShape\">\n          <enum>QFrame::NoFrame</enum>\n         </property>\n         <property name=\"frameShadow\">\n          <enum>QFrame::Plain</enum>\n         </property>\n         <property name=\"lineWidth\">\n          <number>0</number>\n         </property>\n         <layout class=\"QVBoxLayout\" name=\"verticalLayout_6\">\n          <item>\n           <layout class=\"QHBoxLayout\" name=\"horizontalLayout_2\">\n            <item>\n             <widget class=\"QLabel\" name=\"usernameLabel\">\n              <property name=\"sizePolicy\">\n               <sizepolicy hsizetype=\"Expanding\" vsizetype=\"Preferred\">\n                <horstretch>0</horstretch>\n                <verstretch>0</verstretch>\n               </sizepolicy>\n              </property>\n              <property name=\"font\">\n               <font>\n                <pointsize>15</pointsize>\n               </font>\n              </property>\n              <property name=\"text\">\n               <string notr=\"true\">Username</string>\n              </property>\n              <property name=\"buddy\">\n               <cstring></cstring>\n              </property>\n             </widget>\n            </item>\n            <item>\n             <widget class=\"QPushButton\" name=\"changeIdentity\">\n              <property name=\"text\">\n               <string/>\n              </property>\n              <property name=\"icon\">\n               <iconset theme=\"system-switch-user\">\n                <normaloff>.</normaloff>.</iconset>\n              </property>\n              <property name=\"flat\">\n               <bool>true</bool>\n              </property>\n             </widget>\n            </item>\n           </layout>\n          </item>\n          <item>\n           <widget class=\"QLabel\" name=\"label_3\">\n            <property name=\"font\">\n             <font>\n              <pointsize>20</pointsize>\n             </font>\n            </property>\n            <property name=\"text\">\n             <string>Enter your password to confirm this action</string>\n            </property>\n           </widget>\n          </item>\n          <item>\n           <widget class=\"QLabel\" name=\"messageLabel\">\n            <property name=\"enabled\">\n             <bool>false</bool>\n            </property>\n            <property name=\"text\">\n             <string notr=\"true\">TextLabel</string>\n            </property>\n           </widget>\n          </item>\n          <item>\n           <spacer name=\"verticalSpacer_7\">\n            <property name=\"orientation\">\n             <enum>Qt::Vertical</enum>\n            </property>\n            <property name=\"sizeType\">\n             <enum>QSizePolicy::Fixed</enum>\n            </property>\n            <property name=\"sizeHint\" stdset=\"0\">\n             <size>\n              <width>20</width>\n              <height>40</height>\n             </size>\n            </property>\n           </spacer>\n          </item>\n          <item>\n           <layout class=\"QHBoxLayout\" name=\"horizontalLayout_8\">\n            <property name=\"bottomMargin\">\n             <number>0</number>\n            </property>\n            <item>\n             <widget class=\"QWidget\" name=\"networkKeyContainer\" native=\"true\">\n              <property name=\"autoFillBackground\">\n               <bool>true</bool>\n              </property>\n              <layout class=\"QHBoxLayout\" name=\"horizontalLayout\">\n               <property name=\"leftMargin\">\n                <number>0</number>\n               </property>\n               <property name=\"topMargin\">\n                <number>0</number>\n               </property>\n               <property name=\"rightMargin\">\n                <number>0</number>\n               </property>\n               <property name=\"bottomMargin\">\n                <number>0</number>\n               </property>\n               <item>\n                <widget class=\"QLineEdit\" name=\"passwordBox\">\n                 <property name=\"font\">\n                  <font>\n                   <pointsize>30</pointsize>\n                  </font>\n                 </property>\n                 <property name=\"frame\">\n                  <bool>false</bool>\n                 </property>\n                 <property name=\"echoMode\">\n                  <enum>QLineEdit::Password</enum>\n                 </property>\n                 <property name=\"alignment\">\n                  <set>Qt::AlignCenter</set>\n                 </property>\n                 <property name=\"clearButtonEnabled\">\n                  <bool>false</bool>\n                 </property>\n                </widget>\n               </item>\n              </layout>\n             </widget>\n            </item>\n            <item>\n             <widget class=\"QPushButton\" name=\"okPasswordButton\">\n              <property name=\"sizePolicy\">\n               <sizepolicy hsizetype=\"Preferred\" vsizetype=\"Preferred\">\n                <horstretch>0</horstretch>\n                <verstretch>0</verstretch>\n               </sizepolicy>\n              </property>\n              <property name=\"text\">\n               <string/>\n              </property>\n              <property name=\"icon\">\n               <iconset theme=\"go-next\">\n                <normaloff>../plugins/NetworkPlugin/statusCenter/popovers</normaloff>../plugins/NetworkPlugin/statusCenter/popovers</iconset>\n              </property>\n              <property name=\"default\">\n               <bool>false</bool>\n              </property>\n              <property name=\"flat\">\n               <bool>true</bool>\n              </property>\n             </widget>\n            </item>\n           </layout>\n          </item>\n         </layout>\n        </widget>\n       </item>\n       <item row=\"1\" column=\"2\">\n        <spacer name=\"horizontalSpacer_2\">\n         <property name=\"orientation\">\n          <enum>Qt::Horizontal</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>23</width>\n           <height>20</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n       <item row=\"2\" column=\"1\">\n        <spacer name=\"verticalSpacer_2\">\n         <property name=\"orientation\">\n          <enum>Qt::Vertical</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>20</width>\n           <height>52</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n      </layout>\n     </widget>\n     <widget class=\"QWidget\" name=\"customResponsePage\">\n      <layout class=\"QGridLayout\" name=\"gridLayout_4\">\n       <item row=\"0\" column=\"1\">\n        <spacer name=\"verticalSpacer_5\">\n         <property name=\"orientation\">\n          <enum>Qt::Vertical</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>20</width>\n           <height>50</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n       <item row=\"2\" column=\"1\">\n        <spacer name=\"verticalSpacer_6\">\n         <property name=\"orientation\">\n          <enum>Qt::Vertical</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>20</width>\n           <height>49</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n       <item row=\"1\" column=\"1\">\n        <widget class=\"QFrame\" name=\"lockFrame_2\">\n         <property name=\"minimumSize\">\n          <size>\n           <width>500</width>\n           <height>0</height>\n          </size>\n         </property>\n         <property name=\"autoFillBackground\">\n          <bool>false</bool>\n         </property>\n         <property name=\"frameShape\">\n          <enum>QFrame::NoFrame</enum>\n         </property>\n         <property name=\"frameShadow\">\n          <enum>QFrame::Plain</enum>\n         </property>\n         <property name=\"lineWidth\">\n          <number>0</number>\n         </property>\n         <layout class=\"QVBoxLayout\" name=\"verticalLayout_7\">\n          <item>\n           <layout class=\"QHBoxLayout\" name=\"horizontalLayout_3\">\n            <item>\n             <widget class=\"QLabel\" name=\"customUsernameLabel\">\n              <property name=\"sizePolicy\">\n               <sizepolicy hsizetype=\"Expanding\" vsizetype=\"Preferred\">\n                <horstretch>0</horstretch>\n                <verstretch>0</verstretch>\n               </sizepolicy>\n              </property>\n              <property name=\"font\">\n               <font>\n                <pointsize>15</pointsize>\n               </font>\n              </property>\n              <property name=\"text\">\n               <string notr=\"true\">Username</string>\n              </property>\n              <property name=\"buddy\">\n               <cstring></cstring>\n              </property>\n             </widget>\n            </item>\n            <item>\n             <widget class=\"QPushButton\" name=\"customChangeIdentity\">\n              <property name=\"focusPolicy\">\n               <enum>Qt::NoFocus</enum>\n              </property>\n              <property name=\"text\">\n               <string/>\n              </property>\n              <property name=\"icon\">\n               <iconset theme=\"system-switch-user\">\n                <normaloff>.</normaloff>.</iconset>\n              </property>\n              <property name=\"flat\">\n               <bool>true</bool>\n              </property>\n             </widget>\n            </item>\n           </layout>\n          </item>\n          <item>\n           <widget class=\"QLabel\" name=\"customMessageLabel\">\n            <property name=\"enabled\">\n             <bool>false</bool>\n            </property>\n            <property name=\"text\">\n             <string notr=\"true\">TextLabel</string>\n            </property>\n           </widget>\n          </item>\n          <item>\n           <widget class=\"QLabel\" name=\"customQuestionBox\">\n            <property name=\"font\">\n             <font>\n              <pointsize>15</pointsize>\n             </font>\n            </property>\n            <property name=\"text\">\n             <string>Pass the authentication challenge to confirm this action</string>\n            </property>\n           </widget>\n          </item>\n          <item>\n           <spacer name=\"verticalSpacer_8\">\n            <property name=\"orientation\">\n             <enum>Qt::Vertical</enum>\n            </property>\n            <property name=\"sizeType\">\n             <enum>QSizePolicy::Fixed</enum>\n            </property>\n            <property name=\"sizeHint\" stdset=\"0\">\n             <size>\n              <width>20</width>\n              <height>40</height>\n             </size>\n            </property>\n           </spacer>\n          </item>\n          <item>\n           <layout class=\"QHBoxLayout\" name=\"horizontalLayout_9\">\n            <property name=\"bottomMargin\">\n             <number>0</number>\n            </property>\n            <item>\n             <widget class=\"QWidget\" name=\"networkKeyContainer_2\" native=\"true\">\n              <property name=\"autoFillBackground\">\n               <bool>true</bool>\n              </property>\n              <layout class=\"QHBoxLayout\" name=\"horizontalLayout_4\">\n               <property name=\"leftMargin\">\n                <number>0</number>\n               </property>\n               <property name=\"topMargin\">\n                <number>0</number>\n               </property>\n               <property name=\"rightMargin\">\n                <number>0</number>\n               </property>\n               <property name=\"bottomMargin\">\n                <number>0</number>\n               </property>\n               <item>\n                <widget class=\"QLineEdit\" name=\"responseBox\">\n                 <property name=\"font\">\n                  <font>\n                   <pointsize>30</pointsize>\n                  </font>\n                 </property>\n                 <property name=\"frame\">\n                  <bool>false</bool>\n                 </property>\n                 <property name=\"echoMode\">\n                  <enum>QLineEdit::Password</enum>\n                 </property>\n                 <property name=\"clearButtonEnabled\">\n                  <bool>false</bool>\n                 </property>\n                </widget>\n               </item>\n              </layout>\n             </widget>\n            </item>\n            <item>\n             <widget class=\"QPushButton\" name=\"okResponseButton\">\n              <property name=\"sizePolicy\">\n               <sizepolicy hsizetype=\"Preferred\" vsizetype=\"Preferred\">\n                <horstretch>0</horstretch>\n                <verstretch>0</verstretch>\n               </sizepolicy>\n              </property>\n              <property name=\"focusPolicy\">\n               <enum>Qt::NoFocus</enum>\n              </property>\n              <property name=\"text\">\n               <string/>\n              </property>\n              <property name=\"icon\">\n               <iconset theme=\"go-next\">\n                <normaloff>../plugins/NetworkPlugin/statusCenter/popovers</normaloff>../plugins/NetworkPlugin/statusCenter/popovers</iconset>\n              </property>\n              <property name=\"default\">\n               <bool>false</bool>\n              </property>\n              <property name=\"flat\">\n               <bool>true</bool>\n              </property>\n             </widget>\n            </item>\n           </layout>\n          </item>\n         </layout>\n        </widget>\n       </item>\n       <item row=\"1\" column=\"0\">\n        <spacer name=\"horizontalSpacer_5\">\n         <property name=\"orientation\">\n          <enum>Qt::Horizontal</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>29</width>\n           <height>20</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n       <item row=\"1\" column=\"2\">\n        <spacer name=\"horizontalSpacer_6\">\n         <property name=\"orientation\">\n          <enum>Qt::Horizontal</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>40</width>\n           <height>20</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n      </layout>\n     </widget>\n    </widget>\n   </item>\n  </layout>\n </widget>\n <customwidgets>\n  <customwidget>\n   <class>tTitleLabel</class>\n   <extends>QLabel</extends>\n   <header location=\"global\">ttitlelabel.h</header>\n   <slots>\n    <signal>backButtonClicked()</signal>\n    <slot>backButtonClicked()</slot>\n   </slots>\n  </customwidget>\n  <customwidget>\n   <class>tCircularSpinner</class>\n   <extends>QWidget</extends>\n   <header location=\"global\">tcircularspinner.h</header>\n   <container>1</container>\n  </customwidget>\n  <customwidget>\n   <class>tStackedWidget</class>\n   <extends>QStackedWidget</extends>\n   <header location=\"global\">tstackedwidget.h</header>\n   <container>1</container>\n   <slots>\n    <signal>switchingFrame(int)</signal>\n   </slots>\n  </customwidget>\n </customwidgets>\n <resources/>\n <connections>\n  <connection>\n   <sender>passwordBox</sender>\n   <signal>returnPressed()</signal>\n   <receiver>okPasswordButton</receiver>\n   <slot>click()</slot>\n   <hints>\n    <hint type=\"sourcelabel\">\n     <x>499</x>\n     <y>251</y>\n    </hint>\n    <hint type=\"destinationlabel\">\n     <x>554</x>\n     <y>246</y>\n    </hint>\n   </hints>\n  </connection>\n  <connection>\n   <sender>responseBox</sender>\n   <signal>returnPressed()</signal>\n   <receiver>okResponseButton</receiver>\n   <slot>click()</slot>\n   <hints>\n    <hint type=\"sourcelabel\">\n     <x>465</x>\n     <y>254</y>\n    </hint>\n    <hint type=\"destinationlabel\">\n     <x>536</x>\n     <y>256</y>\n    </hint>\n   </hints>\n  </connection>\n </connections>\n</ui>\n"
  },
  {
    "path": "polkitagent/common.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"common.h\"\n\n#include <Wm/desktopwm.h>\n\nQString Common::stringForIdentity(PolkitQt1::Identity identity) {\n    if (identity.toUnixUserIdentity().isValid()) {\n        return DesktopWm::displayName(identity.toUnixUserIdentity().uid());\n    } else {\n        return identity.toString();\n    }\n}\n"
  },
  {
    "path": "polkitagent/common.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef COMMON_H\n#define COMMON_H\n\n#include <PolkitQt1/Identity>\n\nnamespace Common {\n    QString stringForIdentity(PolkitQt1::Identity identity);\n}\n\n#endif // COMMON_H\n"
  },
  {
    "path": "polkitagent/identitypopover.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"identitypopover.h\"\n#include \"ui_identitypopover.h\"\n\n#include \"common.h\"\n\nIdentityPopover::IdentityPopover(PolkitQt1::Identity::List identities, QWidget* parent) :\n    QWidget(parent),\n    ui(new Ui::IdentityPopover) {\n    ui->setupUi(this);\n\n    ui->titleLabel->setBackButtonShown(true);\n\n    for (PolkitQt1::Identity identity : identities) {\n        QListWidgetItem* item = new QListWidgetItem();\n        item->setText(Common::stringForIdentity(identity));\n        item->setData(Qt::UserRole, identity.toString());\n        ui->identityList->addItem(item);\n    }\n\n    ui->identityList->setFixedWidth(SC_DPI(600));\n}\n\nIdentityPopover::~IdentityPopover() {\n    delete ui;\n}\n\nvoid IdentityPopover::on_identityList_itemActivated(QListWidgetItem* item) {\n    emit selectIdentity(PolkitQt1::Identity::fromString(item->data(Qt::UserRole).toString()));\n    emit done();\n}\n\nvoid IdentityPopover::on_titleLabel_backButtonClicked() {\n    emit done();\n}\n"
  },
  {
    "path": "polkitagent/identitypopover.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef IDENTITYPOPOVER_H\n#define IDENTITYPOPOVER_H\n\n#include <QWidget>\n#include <PolkitQt1/Identity>\n\nnamespace Ui {\n    class IdentityPopover;\n}\n\nclass QListWidgetItem;\nclass IdentityPopover : public QWidget {\n        Q_OBJECT\n\n    public:\n        explicit IdentityPopover(PolkitQt1::Identity::List identities, QWidget* parent = nullptr);\n        ~IdentityPopover();\n\n    signals:\n        void selectIdentity(PolkitQt1::Identity identity);\n        void done();\n\n    private slots:\n        void on_identityList_itemActivated(QListWidgetItem* item);\n\n        void on_titleLabel_backButtonClicked();\n\n    private:\n        Ui::IdentityPopover* ui;\n};\n\n#endif // IDENTITYPOPOVER_H\n"
  },
  {
    "path": "polkitagent/identitypopover.ui",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ui version=\"4.0\">\n <class>IdentityPopover</class>\n <widget class=\"QWidget\" name=\"IdentityPopover\">\n  <property name=\"geometry\">\n   <rect>\n    <x>0</x>\n    <y>0</y>\n    <width>400</width>\n    <height>300</height>\n   </rect>\n  </property>\n  <property name=\"windowTitle\">\n   <string notr=\"true\">Form</string>\n  </property>\n  <layout class=\"QVBoxLayout\" name=\"verticalLayout_2\">\n   <property name=\"spacing\">\n    <number>0</number>\n   </property>\n   <property name=\"leftMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"topMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"rightMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"bottomMargin\">\n    <number>0</number>\n   </property>\n   <item>\n    <widget class=\"tTitleLabel\" name=\"titleLabel\">\n     <property name=\"text\">\n      <string>Identity</string>\n     </property>\n    </widget>\n   </item>\n   <item>\n    <widget class=\"QLabel\" name=\"label\">\n     <property name=\"text\">\n      <string>Who do you want to authenticate as?</string>\n     </property>\n     <property name=\"margin\">\n      <number>9</number>\n     </property>\n    </widget>\n   </item>\n   <item>\n    <layout class=\"QVBoxLayout\" name=\"verticalLayout\">\n     <item alignment=\"Qt::AlignHCenter\">\n      <widget class=\"QListWidget\" name=\"identityList\">\n       <property name=\"sizePolicy\">\n        <sizepolicy hsizetype=\"Preferred\" vsizetype=\"Expanding\">\n         <horstretch>0</horstretch>\n         <verstretch>0</verstretch>\n        </sizepolicy>\n       </property>\n       <property name=\"frameShape\">\n        <enum>QFrame::NoFrame</enum>\n       </property>\n      </widget>\n     </item>\n    </layout>\n   </item>\n  </layout>\n </widget>\n <customwidgets>\n  <customwidget>\n   <class>tTitleLabel</class>\n   <extends>QLabel</extends>\n   <header location=\"global\">ttitlelabel.h</header>\n   <slots>\n    <signal>backButtonClicked()</signal>\n   </slots>\n  </customwidget>\n </customwidgets>\n <resources/>\n <connections/>\n</ui>\n"
  },
  {
    "path": "polkitagent/main.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n\n#include \"polkitinterface.h\"\n#include <PolkitQt1/Subject>\n#include <QDebug>\n#include <tapplication.h>\n\nint main(int argc, char* argv[]) {\n    tApplication a(argc, argv);\n    a.setQuitOnLastWindowClosed(false);\n    a.setApplicationShareDir(\"thedesk/td-polkitagent\");\n    a.installTranslators();\n\n    PolkitInterface* interface = new PolkitInterface();\n    PolkitQt1::UnixSessionSubject subject(QApplication::applicationPid());\n\n    if (!interface->registerListener(subject, \"/com/vicr123/PolkitAuthAgent\")) {\n        qDebug() << \"Can't register authentication agent\";\n        return 1;\n    }\n\n    return a.exec();\n}\n"
  },
  {
    "path": "polkitagent/polkitagent.pro",
    "content": "QT       += core gui thelib tdesktopenvironment\nSHARE_APP_NAME=thedesk/td-polkitagent\n\ngreaterThan(QT_MAJOR_VERSION, 4): QT += widgets\n\nunix {\n    CONFIG += link_pkgconfig\n    PKGCONFIG += polkit-qt5-1 polkit-qt5-agent-1\n}\n\nCONFIG += c++11\nTARGET = td-polkitagent\n\n# Include the-libs build tools\ninclude(/usr/share/the-libs/pri/buildmaster.pri)\n\n# The following define makes your compiler emit warnings if you use\n# any Qt feature that has been marked deprecated (the exact warnings\n# depend on your compiler). Please consult the documentation of the\n# deprecated API in order to know how to port your code away from it.\nDEFINES += QT_DEPRECATED_WARNINGS\n\n# You can also make your code fail to compile if it uses deprecated APIs.\n# In order to do so, uncomment the following line.\n# You can also select to disable deprecated APIs only up to a certain version of Qt.\n#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0\n\nSOURCES += \\\n    authwindow.cpp \\\n    common.cpp \\\n    identitypopover.cpp \\\n    main.cpp \\\n    overlaywindow.cpp \\\n    polkitinterface.cpp\n\nHEADERS += \\\n    authwindow.h \\\n    common.h \\\n    identitypopover.h \\\n    overlaywindow.h \\\n    polkitinterface.h\n\nFORMS += \\\n    authwindow.ui \\\n    identitypopover.ui \\\n    overlaywindow.ui\n\nunix {\n    target.path = $$THELIBS_INSTALL_LIB\n\n    INSTALLS += target\n}\n"
  },
  {
    "path": "polkitagent/polkitinterface.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"polkitinterface.h\"\n\n#include <PolkitQt1/Details>\n#include <QPointer>\n#include <authwindow.h>\n\nstruct PolkitInterfacePrivate {\n    QPointer<AuthWindow> authWin;\n};\n\nPolkitInterface::PolkitInterface() : PolkitQt1::Agent::Listener() {\n    d = new PolkitInterfacePrivate();\n}\n\nPolkitInterface::~PolkitInterface() {\n    delete d;\n}\n\nvoid PolkitInterface::initiateAuthentication(const QString& actionId, const QString& message, const QString& iconName, const PolkitQt1::Details& details, const QString& cookie, const PolkitQt1::Identity::List& identities, PolkitQt1::Agent::AsyncResult* result) {\n    d->authWin = new AuthWindow();\n    d->authWin->setMessage(message);\n    d->authWin->setIdentities(identities);\n    d->authWin->setCookie(cookie);\n    d->authWin->setCallback(result);\n    d->authWin->showAuthWindow();\n}\n\nbool PolkitInterface::initiateAuthenticationFinish() {\n    return true;\n}\n\nvoid PolkitInterface::cancelAuthentication() {\n    if (d->authWin) {\n        d->authWin->cancel();\n    }\n}\n"
  },
  {
    "path": "polkitagent/polkitinterface.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef POLKITINTERFACE_H\n#define POLKITINTERFACE_H\n\n#include <PolkitQt1/Agent/Listener>\n#include <PolkitQt1/Identity>\n#include <PolkitQt1/Subject>\n#include <QObject>\n\nstruct PolkitInterfacePrivate;\nclass PolkitInterface : public PolkitQt1::Agent::Listener {\n        Q_OBJECT\n\n    public:\n        explicit PolkitInterface();\n        ~PolkitInterface();\n\n    signals:\n\n    private:\n        PolkitInterfacePrivate* d;\n\n        // Listener interface\n    public slots:\n        void initiateAuthentication(const QString& actionId, const QString& message, const QString& iconName, const PolkitQt1::Details& details, const QString& cookie, const PolkitQt1::Identity::List& identities, PolkitQt1::Agent::AsyncResult* result);\n        bool initiateAuthenticationFinish();\n        void cancelAuthentication();\n};\n\n#endif // POLKITINTERFACE_H\n"
  },
  {
    "path": "polkitagent/translations/ar_SA.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"ar_SA\" sourcelanguage=\"en_US\">\n<context>\n    <name>AuthWindow</name>\n    <message>\n        <location filename=\"../authwindow.ui\" line=\"35\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/polkitagent/polkitagent_autogen/include/ui_authwindow.h\" line=\"382\"/>\n        <source>PolicyKit Authentication</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../authwindow.ui\" line=\"199\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/polkitagent/polkitagent_autogen/include/ui_authwindow.h\" line=\"384\"/>\n        <source>Enter your password to confirm this action</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../authwindow.ui\" line=\"441\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/polkitagent/polkitagent_autogen/include/ui_authwindow.h\" line=\"387\"/>\n        <source>Pass the authentication challenge to confirm this action</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../authwindow.cpp\" line=\"152\"/>\n        <source>Error</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../authwindow.cpp\" line=\"159\"/>\n        <source>Message</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>IdentityPopover</name>\n    <message>\n        <location filename=\"../identitypopover.ui\" line=\"35\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/polkitagent/polkitagent_autogen/include/ui_identitypopover.h\" line=\"76\"/>\n        <source>Identity</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../identitypopover.ui\" line=\"42\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/polkitagent/polkitagent_autogen/include/ui_identitypopover.h\" line=\"77\"/>\n        <source>Who do you want to authenticate as?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "polkitagent/translations/au_AU.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"au_AU\" sourcelanguage=\"en_US\">\n<context>\n    <name>AuthWindow</name>\n    <message>\n        <location filename=\"../authwindow.ui\" line=\"35\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/polkitagent/polkitagent_autogen/include/ui_authwindow.h\" line=\"382\"/>\n        <source>PolicyKit Authentication</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../authwindow.ui\" line=\"199\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/polkitagent/polkitagent_autogen/include/ui_authwindow.h\" line=\"384\"/>\n        <source>Enter your password to confirm this action</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../authwindow.ui\" line=\"441\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/polkitagent/polkitagent_autogen/include/ui_authwindow.h\" line=\"387\"/>\n        <source>Pass the authentication challenge to confirm this action</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../authwindow.cpp\" line=\"152\"/>\n        <source>Error</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../authwindow.cpp\" line=\"159\"/>\n        <source>Message</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>IdentityPopover</name>\n    <message>\n        <location filename=\"../identitypopover.ui\" line=\"35\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/polkitagent/polkitagent_autogen/include/ui_identitypopover.h\" line=\"76\"/>\n        <source>Identity</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../identitypopover.ui\" line=\"42\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/polkitagent/polkitagent_autogen/include/ui_identitypopover.h\" line=\"77\"/>\n        <source>Who do you want to authenticate as?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "polkitagent/translations/cy.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"cy\" sourcelanguage=\"en_US\">\n<context>\n    <name>AuthWindow</name>\n    <message>\n        <location filename=\"../authwindow.ui\" line=\"35\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/polkitagent/polkitagent_autogen/include/ui_authwindow.h\" line=\"382\"/>\n        <source>PolicyKit Authentication</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../authwindow.ui\" line=\"199\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/polkitagent/polkitagent_autogen/include/ui_authwindow.h\" line=\"384\"/>\n        <source>Enter your password to confirm this action</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../authwindow.ui\" line=\"441\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/polkitagent/polkitagent_autogen/include/ui_authwindow.h\" line=\"387\"/>\n        <source>Pass the authentication challenge to confirm this action</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../authwindow.cpp\" line=\"152\"/>\n        <source>Error</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../authwindow.cpp\" line=\"159\"/>\n        <source>Message</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>IdentityPopover</name>\n    <message>\n        <location filename=\"../identitypopover.ui\" line=\"35\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/polkitagent/polkitagent_autogen/include/ui_identitypopover.h\" line=\"76\"/>\n        <source>Identity</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../identitypopover.ui\" line=\"42\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/polkitagent/polkitagent_autogen/include/ui_identitypopover.h\" line=\"77\"/>\n        <source>Who do you want to authenticate as?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "polkitagent/translations/da.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"da\" sourcelanguage=\"en_US\">\n<context>\n    <name>AuthWindow</name>\n    <message>\n        <location filename=\"../authwindow.ui\" line=\"35\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/polkitagent/polkitagent_autogen/include/ui_authwindow.h\" line=\"382\"/>\n        <source>PolicyKit Authentication</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../authwindow.ui\" line=\"199\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/polkitagent/polkitagent_autogen/include/ui_authwindow.h\" line=\"384\"/>\n        <source>Enter your password to confirm this action</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../authwindow.ui\" line=\"441\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/polkitagent/polkitagent_autogen/include/ui_authwindow.h\" line=\"387\"/>\n        <source>Pass the authentication challenge to confirm this action</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../authwindow.cpp\" line=\"152\"/>\n        <source>Error</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../authwindow.cpp\" line=\"159\"/>\n        <source>Message</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>IdentityPopover</name>\n    <message>\n        <location filename=\"../identitypopover.ui\" line=\"35\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/polkitagent/polkitagent_autogen/include/ui_identitypopover.h\" line=\"76\"/>\n        <source>Identity</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../identitypopover.ui\" line=\"42\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/polkitagent/polkitagent_autogen/include/ui_identitypopover.h\" line=\"77\"/>\n        <source>Who do you want to authenticate as?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "polkitagent/translations/de.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"de\" sourcelanguage=\"en_US\">\n<context>\n    <name>AuthWindow</name>\n    <message>\n        <location filename=\"../authwindow.ui\" line=\"35\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/polkitagent/polkitagent_autogen/include/ui_authwindow.h\" line=\"382\"/>\n        <source>PolicyKit Authentication</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../authwindow.ui\" line=\"199\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/polkitagent/polkitagent_autogen/include/ui_authwindow.h\" line=\"384\"/>\n        <source>Enter your password to confirm this action</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../authwindow.ui\" line=\"441\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/polkitagent/polkitagent_autogen/include/ui_authwindow.h\" line=\"387\"/>\n        <source>Pass the authentication challenge to confirm this action</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../authwindow.cpp\" line=\"152\"/>\n        <source>Error</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../authwindow.cpp\" line=\"159\"/>\n        <source>Message</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>IdentityPopover</name>\n    <message>\n        <location filename=\"../identitypopover.ui\" line=\"35\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/polkitagent/polkitagent_autogen/include/ui_identitypopover.h\" line=\"76\"/>\n        <source>Identity</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../identitypopover.ui\" line=\"42\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/polkitagent/polkitagent_autogen/include/ui_identitypopover.h\" line=\"77\"/>\n        <source>Who do you want to authenticate as?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "polkitagent/translations/en_GB.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"en_GB\" sourcelanguage=\"en_US\">\n<context>\n    <name>AuthWindow</name>\n    <message>\n        <location filename=\"../authwindow.ui\" line=\"35\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/polkitagent/polkitagent_autogen/include/ui_authwindow.h\" line=\"382\"/>\n        <source>PolicyKit Authentication</source>\n        <translation>PolicyKit Authentication</translation>\n    </message>\n    <message>\n        <location filename=\"../authwindow.ui\" line=\"199\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/polkitagent/polkitagent_autogen/include/ui_authwindow.h\" line=\"384\"/>\n        <source>Enter your password to confirm this action</source>\n        <translation>Enter your password to confirm this action</translation>\n    </message>\n    <message>\n        <location filename=\"../authwindow.ui\" line=\"441\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/polkitagent/polkitagent_autogen/include/ui_authwindow.h\" line=\"387\"/>\n        <source>Pass the authentication challenge to confirm this action</source>\n        <translation>Pass the authentication challenge to confirm this action</translation>\n    </message>\n    <message>\n        <location filename=\"../authwindow.cpp\" line=\"152\"/>\n        <source>Error</source>\n        <translation>Error</translation>\n    </message>\n    <message>\n        <location filename=\"../authwindow.cpp\" line=\"159\"/>\n        <source>Message</source>\n        <translation>Message</translation>\n    </message>\n</context>\n<context>\n    <name>IdentityPopover</name>\n    <message>\n        <location filename=\"../identitypopover.ui\" line=\"35\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/polkitagent/polkitagent_autogen/include/ui_identitypopover.h\" line=\"76\"/>\n        <source>Identity</source>\n        <translation>Identity</translation>\n    </message>\n    <message>\n        <location filename=\"../identitypopover.ui\" line=\"42\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/polkitagent/polkitagent_autogen/include/ui_identitypopover.h\" line=\"77\"/>\n        <source>Who do you want to authenticate as?</source>\n        <translation>Who do you want to authenticate as?</translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "polkitagent/translations/en_US.qm",
    "content": "<d\u0018!\u001c`"
  },
  {
    "path": "polkitagent/translations/en_US.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" sourcelanguage=\"en_US\">\n<context>\n    <name>AuthWindow</name>\n    <message>\n        <location filename=\"../authwindow.ui\" line=\"35\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/polkitagent/polkitagent_autogen/include/ui_authwindow.h\" line=\"382\"/>\n        <source>PolicyKit Authentication</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../authwindow.ui\" line=\"199\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/polkitagent/polkitagent_autogen/include/ui_authwindow.h\" line=\"384\"/>\n        <source>Enter your password to confirm this action</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../authwindow.ui\" line=\"441\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/polkitagent/polkitagent_autogen/include/ui_authwindow.h\" line=\"387\"/>\n        <source>Pass the authentication challenge to confirm this action</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../authwindow.cpp\" line=\"152\"/>\n        <source>Error</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../authwindow.cpp\" line=\"159\"/>\n        <source>Message</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>IdentityPopover</name>\n    <message>\n        <location filename=\"../identitypopover.ui\" line=\"35\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/polkitagent/polkitagent_autogen/include/ui_identitypopover.h\" line=\"76\"/>\n        <source>Identity</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../identitypopover.ui\" line=\"42\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/polkitagent/polkitagent_autogen/include/ui_identitypopover.h\" line=\"77\"/>\n        <source>Who do you want to authenticate as?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "polkitagent/translations/es.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"es\" sourcelanguage=\"en_US\">\n<context>\n    <name>AuthWindow</name>\n    <message>\n        <location filename=\"../authwindow.ui\" line=\"35\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/polkitagent/polkitagent_autogen/include/ui_authwindow.h\" line=\"382\"/>\n        <source>PolicyKit Authentication</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../authwindow.ui\" line=\"199\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/polkitagent/polkitagent_autogen/include/ui_authwindow.h\" line=\"384\"/>\n        <source>Enter your password to confirm this action</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../authwindow.ui\" line=\"441\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/polkitagent/polkitagent_autogen/include/ui_authwindow.h\" line=\"387\"/>\n        <source>Pass the authentication challenge to confirm this action</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../authwindow.cpp\" line=\"152\"/>\n        <source>Error</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../authwindow.cpp\" line=\"159\"/>\n        <source>Message</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>IdentityPopover</name>\n    <message>\n        <location filename=\"../identitypopover.ui\" line=\"35\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/polkitagent/polkitagent_autogen/include/ui_identitypopover.h\" line=\"76\"/>\n        <source>Identity</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../identitypopover.ui\" line=\"42\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/polkitagent/polkitagent_autogen/include/ui_identitypopover.h\" line=\"77\"/>\n        <source>Who do you want to authenticate as?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "polkitagent/translations/es_VE.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"es_VE\" sourcelanguage=\"en_US\">\n<context>\n    <name>AuthWindow</name>\n    <message>\n        <location filename=\"../authwindow.ui\" line=\"35\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/polkitagent/polkitagent_autogen/include/ui_authwindow.h\" line=\"382\"/>\n        <source>PolicyKit Authentication</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../authwindow.ui\" line=\"199\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/polkitagent/polkitagent_autogen/include/ui_authwindow.h\" line=\"384\"/>\n        <source>Enter your password to confirm this action</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../authwindow.ui\" line=\"441\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/polkitagent/polkitagent_autogen/include/ui_authwindow.h\" line=\"387\"/>\n        <source>Pass the authentication challenge to confirm this action</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../authwindow.cpp\" line=\"152\"/>\n        <source>Error</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../authwindow.cpp\" line=\"159\"/>\n        <source>Message</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>IdentityPopover</name>\n    <message>\n        <location filename=\"../identitypopover.ui\" line=\"35\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/polkitagent/polkitagent_autogen/include/ui_identitypopover.h\" line=\"76\"/>\n        <source>Identity</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../identitypopover.ui\" line=\"42\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/polkitagent/polkitagent_autogen/include/ui_identitypopover.h\" line=\"77\"/>\n        <source>Who do you want to authenticate as?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "polkitagent/translations/id.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"id\" sourcelanguage=\"en_US\">\n<context>\n    <name>AuthWindow</name>\n    <message>\n        <location filename=\"../authwindow.ui\" line=\"35\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/polkitagent/polkitagent_autogen/include/ui_authwindow.h\" line=\"382\"/>\n        <source>PolicyKit Authentication</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../authwindow.ui\" line=\"199\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/polkitagent/polkitagent_autogen/include/ui_authwindow.h\" line=\"384\"/>\n        <source>Enter your password to confirm this action</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../authwindow.ui\" line=\"441\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/polkitagent/polkitagent_autogen/include/ui_authwindow.h\" line=\"387\"/>\n        <source>Pass the authentication challenge to confirm this action</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../authwindow.cpp\" line=\"152\"/>\n        <source>Error</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../authwindow.cpp\" line=\"159\"/>\n        <source>Message</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>IdentityPopover</name>\n    <message>\n        <location filename=\"../identitypopover.ui\" line=\"35\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/polkitagent/polkitagent_autogen/include/ui_identitypopover.h\" line=\"76\"/>\n        <source>Identity</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../identitypopover.ui\" line=\"42\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/polkitagent/polkitagent_autogen/include/ui_identitypopover.h\" line=\"77\"/>\n        <source>Who do you want to authenticate as?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "polkitagent/translations/nl.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"nl\" sourcelanguage=\"en_US\">\n<context>\n    <name>AuthWindow</name>\n    <message>\n        <location filename=\"../authwindow.ui\" line=\"35\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/polkitagent/polkitagent_autogen/include/ui_authwindow.h\" line=\"382\"/>\n        <source>PolicyKit Authentication</source>\n        <translation>PolicyKit-authenticatie</translation>\n    </message>\n    <message>\n        <location filename=\"../authwindow.ui\" line=\"199\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/polkitagent/polkitagent_autogen/include/ui_authwindow.h\" line=\"384\"/>\n        <source>Enter your password to confirm this action</source>\n        <translation>Voer je wachtwoord in om deze actie te bevestigen</translation>\n    </message>\n    <message>\n        <location filename=\"../authwindow.ui\" line=\"441\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/polkitagent/polkitagent_autogen/include/ui_authwindow.h\" line=\"387\"/>\n        <source>Pass the authentication challenge to confirm this action</source>\n        <translation>Haal de authenticatie-uitdaging om deze actie te bevestigen</translation>\n    </message>\n    <message>\n        <location filename=\"../authwindow.cpp\" line=\"152\"/>\n        <source>Error</source>\n        <translation>Fout</translation>\n    </message>\n    <message>\n        <location filename=\"../authwindow.cpp\" line=\"159\"/>\n        <source>Message</source>\n        <translation>Bericht</translation>\n    </message>\n</context>\n<context>\n    <name>IdentityPopover</name>\n    <message>\n        <location filename=\"../identitypopover.ui\" line=\"35\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/polkitagent/polkitagent_autogen/include/ui_identitypopover.h\" line=\"76\"/>\n        <source>Identity</source>\n        <translation>Identiteit</translation>\n    </message>\n    <message>\n        <location filename=\"../identitypopover.ui\" line=\"42\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/polkitagent/polkitagent_autogen/include/ui_identitypopover.h\" line=\"77\"/>\n        <source>Who do you want to authenticate as?</source>\n        <translation>Als wie wil je je authentificeren?</translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "polkitagent/translations/pt_BR.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"pt_BR\" sourcelanguage=\"en_US\">\n<context>\n    <name>AuthWindow</name>\n    <message>\n        <location filename=\"../authwindow.ui\" line=\"35\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/polkitagent/polkitagent_autogen/include/ui_authwindow.h\" line=\"382\"/>\n        <source>PolicyKit Authentication</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../authwindow.ui\" line=\"199\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/polkitagent/polkitagent_autogen/include/ui_authwindow.h\" line=\"384\"/>\n        <source>Enter your password to confirm this action</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../authwindow.ui\" line=\"441\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/polkitagent/polkitagent_autogen/include/ui_authwindow.h\" line=\"387\"/>\n        <source>Pass the authentication challenge to confirm this action</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../authwindow.cpp\" line=\"152\"/>\n        <source>Error</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../authwindow.cpp\" line=\"159\"/>\n        <source>Message</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>IdentityPopover</name>\n    <message>\n        <location filename=\"../identitypopover.ui\" line=\"35\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/polkitagent/polkitagent_autogen/include/ui_identitypopover.h\" line=\"76\"/>\n        <source>Identity</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../identitypopover.ui\" line=\"42\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/polkitagent/polkitagent_autogen/include/ui_identitypopover.h\" line=\"77\"/>\n        <source>Who do you want to authenticate as?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "polkitagent/translations/ro_RO.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"ro_RO\" sourcelanguage=\"en_US\">\n<context>\n    <name>AuthWindow</name>\n    <message>\n        <location filename=\"../authwindow.ui\" line=\"35\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/polkitagent/polkitagent_autogen/include/ui_authwindow.h\" line=\"382\"/>\n        <source>PolicyKit Authentication</source>\n        <translation>Autentificare PolicyKit</translation>\n    </message>\n    <message>\n        <location filename=\"../authwindow.ui\" line=\"199\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/polkitagent/polkitagent_autogen/include/ui_authwindow.h\" line=\"384\"/>\n        <source>Enter your password to confirm this action</source>\n        <translation>Indroduceți parola pentru a confirma acțiunea</translation>\n    </message>\n    <message>\n        <location filename=\"../authwindow.ui\" line=\"441\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/polkitagent/polkitagent_autogen/include/ui_authwindow.h\" line=\"387\"/>\n        <source>Pass the authentication challenge to confirm this action</source>\n        <translation>Treceți de testul de autentificare pentru a confirma acțiunea</translation>\n    </message>\n    <message>\n        <location filename=\"../authwindow.cpp\" line=\"152\"/>\n        <source>Error</source>\n        <translation>Eroare</translation>\n    </message>\n    <message>\n        <location filename=\"../authwindow.cpp\" line=\"159\"/>\n        <source>Message</source>\n        <translation>Mesaj</translation>\n    </message>\n</context>\n<context>\n    <name>IdentityPopover</name>\n    <message>\n        <location filename=\"../identitypopover.ui\" line=\"35\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/polkitagent/polkitagent_autogen/include/ui_identitypopover.h\" line=\"76\"/>\n        <source>Identity</source>\n        <translation>Identitate</translation>\n    </message>\n    <message>\n        <location filename=\"../identitypopover.ui\" line=\"42\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/polkitagent/polkitagent_autogen/include/ui_identitypopover.h\" line=\"77\"/>\n        <source>Who do you want to authenticate as?</source>\n        <translation>Sub ce identitate doriți să vă autentificați?</translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "polkitagent/translations/sv.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"sv\" sourcelanguage=\"en_US\">\n<context>\n    <name>AuthWindow</name>\n    <message>\n        <location filename=\"../authwindow.ui\" line=\"35\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/polkitagent/polkitagent_autogen/include/ui_authwindow.h\" line=\"382\"/>\n        <source>PolicyKit Authentication</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../authwindow.ui\" line=\"199\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/polkitagent/polkitagent_autogen/include/ui_authwindow.h\" line=\"384\"/>\n        <source>Enter your password to confirm this action</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../authwindow.ui\" line=\"441\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/polkitagent/polkitagent_autogen/include/ui_authwindow.h\" line=\"387\"/>\n        <source>Pass the authentication challenge to confirm this action</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../authwindow.cpp\" line=\"152\"/>\n        <source>Error</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../authwindow.cpp\" line=\"159\"/>\n        <source>Message</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>IdentityPopover</name>\n    <message>\n        <location filename=\"../identitypopover.ui\" line=\"35\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/polkitagent/polkitagent_autogen/include/ui_identitypopover.h\" line=\"76\"/>\n        <source>Identity</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../identitypopover.ui\" line=\"42\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/polkitagent/polkitagent_autogen/include/ui_identitypopover.h\" line=\"77\"/>\n        <source>Who do you want to authenticate as?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "polkitagent/translations/tr_TR.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"tr_TR\" sourcelanguage=\"en_US\">\n<context>\n    <name>AuthWindow</name>\n    <message>\n        <location filename=\"../authwindow.ui\" line=\"35\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/polkitagent/polkitagent_autogen/include/ui_authwindow.h\" line=\"382\"/>\n        <source>PolicyKit Authentication</source>\n        <translation>PolicyKit Kimlik Doğrulaması</translation>\n    </message>\n    <message>\n        <location filename=\"../authwindow.ui\" line=\"199\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/polkitagent/polkitagent_autogen/include/ui_authwindow.h\" line=\"384\"/>\n        <source>Enter your password to confirm this action</source>\n        <translation>Bu eylemi onaylamak için şifrenizi girin</translation>\n    </message>\n    <message>\n        <location filename=\"../authwindow.ui\" line=\"441\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/polkitagent/polkitagent_autogen/include/ui_authwindow.h\" line=\"387\"/>\n        <source>Pass the authentication challenge to confirm this action</source>\n        <translation>Bu eylemi onaylamak için kimlik doğrulama sorgulamasını geçin</translation>\n    </message>\n    <message>\n        <location filename=\"../authwindow.cpp\" line=\"152\"/>\n        <source>Error</source>\n        <translation>Hata</translation>\n    </message>\n    <message>\n        <location filename=\"../authwindow.cpp\" line=\"159\"/>\n        <source>Message</source>\n        <translation>İleti</translation>\n    </message>\n</context>\n<context>\n    <name>IdentityPopover</name>\n    <message>\n        <location filename=\"../identitypopover.ui\" line=\"35\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/polkitagent/polkitagent_autogen/include/ui_identitypopover.h\" line=\"76\"/>\n        <source>Identity</source>\n        <translation>Kimlik</translation>\n    </message>\n    <message>\n        <location filename=\"../identitypopover.ui\" line=\"42\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/polkitagent/polkitagent_autogen/include/ui_identitypopover.h\" line=\"77\"/>\n        <source>Who do you want to authenticate as?</source>\n        <translation>Kimin kimliğini doğrulamak istiyorsunuz?</translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "polkitagent/translations/vi_VN.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"vi_VN\" sourcelanguage=\"en_US\">\n<context>\n    <name>AuthWindow</name>\n    <message>\n        <location filename=\"../authwindow.ui\" line=\"35\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/polkitagent/polkitagent_autogen/include/ui_authwindow.h\" line=\"382\"/>\n        <source>PolicyKit Authentication</source>\n        <translation>Xác thực PolicyKit</translation>\n    </message>\n    <message>\n        <location filename=\"../authwindow.ui\" line=\"199\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/polkitagent/polkitagent_autogen/include/ui_authwindow.h\" line=\"384\"/>\n        <source>Enter your password to confirm this action</source>\n        <translation>Điền mật khẩu của bạn để xác nhận hoạt động này</translation>\n    </message>\n    <message>\n        <location filename=\"../authwindow.ui\" line=\"441\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/polkitagent/polkitagent_autogen/include/ui_authwindow.h\" line=\"387\"/>\n        <source>Pass the authentication challenge to confirm this action</source>\n        <translation>Trả lời thử thách xác thực để xác nhận hoạt động này</translation>\n    </message>\n    <message>\n        <location filename=\"../authwindow.cpp\" line=\"152\"/>\n        <source>Error</source>\n        <translation>Lỗi</translation>\n    </message>\n    <message>\n        <location filename=\"../authwindow.cpp\" line=\"159\"/>\n        <source>Message</source>\n        <translation>Thông tin</translation>\n    </message>\n</context>\n<context>\n    <name>IdentityPopover</name>\n    <message>\n        <location filename=\"../identitypopover.ui\" line=\"35\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/polkitagent/polkitagent_autogen/include/ui_identitypopover.h\" line=\"76\"/>\n        <source>Identity</source>\n        <translation>Danh tính</translation>\n    </message>\n    <message>\n        <location filename=\"../identitypopover.ui\" line=\"42\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/polkitagent/polkitagent_autogen/include/ui_identitypopover.h\" line=\"77\"/>\n        <source>Who do you want to authenticate as?</source>\n        <translation>Bạn muốn xác thực bằng ai?</translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "polkitagent/translations/zh_CN.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"zh_CN\" sourcelanguage=\"en_US\">\n<context>\n    <name>AuthWindow</name>\n    <message>\n        <location filename=\"../authwindow.ui\" line=\"35\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/polkitagent/polkitagent_autogen/include/ui_authwindow.h\" line=\"382\"/>\n        <source>PolicyKit Authentication</source>\n        <translation>策略配置验证</translation>\n    </message>\n    <message>\n        <location filename=\"../authwindow.ui\" line=\"199\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/polkitagent/polkitagent_autogen/include/ui_authwindow.h\" line=\"384\"/>\n        <source>Enter your password to confirm this action</source>\n        <translation>输入你的密码以确定</translation>\n    </message>\n    <message>\n        <location filename=\"../authwindow.ui\" line=\"441\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/polkitagent/polkitagent_autogen/include/ui_authwindow.h\" line=\"387\"/>\n        <source>Pass the authentication challenge to confirm this action</source>\n        <translation>通过此挑战来确定此行为</translation>\n    </message>\n    <message>\n        <location filename=\"../authwindow.cpp\" line=\"152\"/>\n        <source>Error</source>\n        <translation>错误</translation>\n    </message>\n    <message>\n        <location filename=\"../authwindow.cpp\" line=\"159\"/>\n        <source>Message</source>\n        <translation>信息</translation>\n    </message>\n</context>\n<context>\n    <name>IdentityPopover</name>\n    <message>\n        <location filename=\"../identitypopover.ui\" line=\"35\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/polkitagent/polkitagent_autogen/include/ui_identitypopover.h\" line=\"76\"/>\n        <source>Identity</source>\n        <translation>身份</translation>\n    </message>\n    <message>\n        <location filename=\"../identitypopover.ui\" line=\"42\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/polkitagent/polkitagent_autogen/include/ui_identitypopover.h\" line=\"77\"/>\n        <source>Who do you want to authenticate as?</source>\n        <translation>你想作为谁来进行认证？</translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "polkitagent/translations/zu_ZA.qm",
    "content": "<d\u0018!\u001c`"
  },
  {
    "path": "polkitagent/translations/zu_ZA.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" sourcelanguage=\"en_US\">\n<context>\n    <name>AuthWindow</name>\n    <message>\n        <location filename=\"../authwindow.ui\" line=\"35\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/polkitagent/polkitagent_autogen/include/ui_authwindow.h\" line=\"382\"/>\n        <source>PolicyKit Authentication</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../authwindow.ui\" line=\"199\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/polkitagent/polkitagent_autogen/include/ui_authwindow.h\" line=\"384\"/>\n        <source>Enter your password to confirm this action</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../authwindow.ui\" line=\"441\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/polkitagent/polkitagent_autogen/include/ui_authwindow.h\" line=\"387\"/>\n        <source>Pass the authentication challenge to confirm this action</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../authwindow.cpp\" line=\"152\"/>\n        <source>Error</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../authwindow.cpp\" line=\"159\"/>\n        <source>Message</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>IdentityPopover</name>\n    <message>\n        <location filename=\"../identitypopover.ui\" line=\"35\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/polkitagent/polkitagent_autogen/include/ui_identitypopover.h\" line=\"76\"/>\n        <source>Identity</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../identitypopover.ui\" line=\"42\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/polkitagent/polkitagent_autogen/include/ui_identitypopover.h\" line=\"77\"/>\n        <source>Who do you want to authenticate as?</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "startdesk/CMakeLists.txt",
    "content": "cmake_minimum_required(VERSION 3.24.0)\n\nproject(startdesk VERSION 1.0.0 LANGUAGES CXX)\n\nfind_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets Network DBus)\nfind_package(libcontemporary REQUIRED)\nfind_package(libtdesktopenvironment REQUIRED)\n\nset(SOURCES\n    crash/backtracedialog.cpp\n    crash/backtracepopover.cpp\n    crash/backtracewidget.cpp\n    crash/crashwidget.cpp\n    main.cpp\n    splash/splashcontroller.cpp\n    splash/splashwidget.cpp\n    splashwindow.cpp\n\n    crash/backtracedialog.ui\n    crash/backtracepopover.ui\n    crash/backtracewidget.ui\n    crash/crashwidget.ui\n    splash/splashwidget.ui\n    splashwindow.ui\n\n    resources.qrc\n)\n\nset(HEADERS\n    crash/backtracedialog.h\n    crash/backtracepopover.h\n    crash/backtracewidget.h\n    crash/crashwidget.h\n    splash/splashcontroller.h\n    splash/splashwidget.h\n    splashwindow.h\n)\n\nadd_executable(startdesk ${SOURCES} ${HEADERS})\n\nset_target_properties(startdesk PROPERTIES\n        MACOSX_BUNDLE TRUE\n        MACOSX_BUNDLE_GUI_IDENTIFIER com.vicr123.thedesk.startdesk\n        WIN32_EXECUTABLE TRUE\n        CNTP_DATA_SUBDIR startdesk)\n\ncntp_init(startdesk 20)\ncntp_translate(startdesk)\ncntp_target_name(startdesk \"startdesk\")\n#cntp_defaults_file(startdesk\n#    DEFAULTS_FILE startdesk.conf)\n\ntarget_link_libraries(startdesk Qt::Widgets Qt::Network Qt::DBus libcontemporary libtdesktopenvironment libthedesk)\n\nconfigure_file(thedesk.desktop.in ${CMAKE_BINARY_DIR}/thedesk.desktop)\nconfigure_file(thedesk-wayland.desktop.in ${CMAKE_BINARY_DIR}/thedesk-wayland.desktop)\nconfigure_file(start-thedesk-wayland.in ${CMAKE_BINARY_DIR}/start-thedesk-wayland)\n\ninstall(TARGETS startdesk\n        RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}\n        BUNDLE DESTINATION /Applications)\n\ninstall(FILES wayfire-thedesk-config.conf\n    DESTINATION ${CMAKE_INSTALL_DATADIR}/thedesk/startdesk)\n\ninstall(FILES ${CMAKE_BINARY_DIR}/thedesk.desktop\n    DESTINATION ${CMAKE_INSTALL_DATADIR}/xsessions)\n\ninstall(FILES ${CMAKE_BINARY_DIR}/thedesk-wayland.desktop\n    DESTINATION ${CMAKE_INSTALL_DATADIR}/wayland-sessions)\n\ninstall(PROGRAMS ${CMAKE_BINARY_DIR}/start-thedesk-wayland\n    DESTINATION ${CMAKE_INSTALL_BINDIR})\n\n"
  },
  {
    "path": "startdesk/crash/backtracedialog.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2021 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"backtracedialog.h\"\n#include \"ui_backtracedialog.h\"\n\nBacktraceDialog::BacktraceDialog(QWidget *parent) :\n    QDialog(parent),\n    ui(new Ui::BacktraceDialog)\n{\n    ui->setupUi(this);\n}\n\nBacktraceDialog::~BacktraceDialog()\n{\n    delete ui;\n}\n"
  },
  {
    "path": "startdesk/crash/backtracedialog.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2021 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef BACKTRACEDIALOG_H\n#define BACKTRACEDIALOG_H\n\n#include <QDialog>\n\nnamespace Ui {\n    class BacktraceDialog;\n}\n\nclass BacktraceDialog : public QDialog\n{\n        Q_OBJECT\n\n    public:\n        explicit BacktraceDialog(QWidget *parent = nullptr);\n        ~BacktraceDialog();\n\n    private:\n        Ui::BacktraceDialog *ui;\n};\n\n#endif // BACKTRACEDIALOG_H\n"
  },
  {
    "path": "startdesk/crash/backtracedialog.ui",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ui version=\"4.0\">\n <class>BacktraceDialog</class>\n <widget class=\"QDialog\" name=\"BacktraceDialog\">\n  <property name=\"geometry\">\n   <rect>\n    <x>0</x>\n    <y>0</y>\n    <width>645</width>\n    <height>480</height>\n   </rect>\n  </property>\n  <property name=\"windowTitle\">\n   <string>Error Details</string>\n  </property>\n  <layout class=\"QVBoxLayout\" name=\"verticalLayout\">\n   <property name=\"spacing\">\n    <number>0</number>\n   </property>\n   <property name=\"leftMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"topMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"rightMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"bottomMargin\">\n    <number>0</number>\n   </property>\n   <item>\n    <widget class=\"tTitleLabel\" name=\"titleLabel\">\n     <property name=\"text\">\n      <string>Error Details</string>\n     </property>\n    </widget>\n   </item>\n   <item>\n    <widget class=\"BacktraceWidget\" name=\"widget\" native=\"true\">\n     <property name=\"sizePolicy\">\n      <sizepolicy hsizetype=\"Preferred\" vsizetype=\"Expanding\">\n       <horstretch>0</horstretch>\n       <verstretch>0</verstretch>\n      </sizepolicy>\n     </property>\n    </widget>\n   </item>\n  </layout>\n </widget>\n <customwidgets>\n  <customwidget>\n   <class>tTitleLabel</class>\n   <extends>QLabel</extends>\n   <header location=\"global\">ttitlelabel.h</header>\n   <slots>\n    <signal>backButtonClicked()</signal>\n   </slots>\n  </customwidget>\n  <customwidget>\n   <class>BacktraceWidget</class>\n   <extends>QWidget</extends>\n   <header>crash/backtracewidget.h</header>\n   <container>1</container>\n  </customwidget>\n </customwidgets>\n <resources/>\n <connections/>\n</ui>\n"
  },
  {
    "path": "startdesk/crash/backtracepopover.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2021 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"backtracepopover.h\"\n#include \"ui_backtracepopover.h\"\n\nBacktracePopover::BacktracePopover(QWidget* parent) :\n    QWidget(parent),\n    ui(new Ui::BacktracePopover) {\n    ui->setupUi(this);\n\n    ui->titleLabel->setBackButtonShown(true);\n}\n\nBacktracePopover::~BacktracePopover() {\n    delete ui;\n}\n\nvoid BacktracePopover::on_titleLabel_backButtonClicked() {\n    emit done();\n}\n"
  },
  {
    "path": "startdesk/crash/backtracepopover.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2021 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef BACKTRACEPOPOVER_H\n#define BACKTRACEPOPOVER_H\n\n#include <QWidget>\n\nnamespace Ui {\n    class BacktracePopover;\n}\n\nclass BacktracePopover : public QWidget {\n        Q_OBJECT\n\n    public:\n        explicit BacktracePopover(QWidget* parent = nullptr);\n        ~BacktracePopover();\n\n    signals:\n        void done();\n\n    private slots:\n        void on_titleLabel_backButtonClicked();\n\n    private:\n        Ui::BacktracePopover* ui;\n};\n\n#endif // BACKTRACEPOPOVER_H\n"
  },
  {
    "path": "startdesk/crash/backtracepopover.ui",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ui version=\"4.0\">\n <class>BacktracePopover</class>\n <widget class=\"QWidget\" name=\"BacktracePopover\">\n  <property name=\"geometry\">\n   <rect>\n    <x>0</x>\n    <y>0</y>\n    <width>908</width>\n    <height>586</height>\n   </rect>\n  </property>\n  <property name=\"windowTitle\">\n   <string notr=\"true\">Form</string>\n  </property>\n  <layout class=\"QVBoxLayout\" name=\"verticalLayout\">\n   <property name=\"spacing\">\n    <number>0</number>\n   </property>\n   <property name=\"leftMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"topMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"rightMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"bottomMargin\">\n    <number>0</number>\n   </property>\n   <item>\n    <widget class=\"tTitleLabel\" name=\"titleLabel\">\n     <property name=\"text\">\n      <string>Error Details</string>\n     </property>\n    </widget>\n   </item>\n   <item>\n    <widget class=\"BacktraceWidget\" name=\"widget\" native=\"true\">\n     <property name=\"sizePolicy\">\n      <sizepolicy hsizetype=\"Preferred\" vsizetype=\"Expanding\">\n       <horstretch>0</horstretch>\n       <verstretch>0</verstretch>\n      </sizepolicy>\n     </property>\n    </widget>\n   </item>\n  </layout>\n </widget>\n <customwidgets>\n  <customwidget>\n   <class>tTitleLabel</class>\n   <extends>QLabel</extends>\n   <header location=\"global\">ttitlelabel.h</header>\n   <slots>\n    <signal>backButtonClicked()</signal>\n   </slots>\n  </customwidget>\n  <customwidget>\n   <class>BacktraceWidget</class>\n   <extends>QWidget</extends>\n   <header>crash/backtracewidget.h</header>\n   <container>1</container>\n  </customwidget>\n </customwidgets>\n <resources/>\n <connections/>\n</ui>\n"
  },
  {
    "path": "startdesk/crash/backtracewidget.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2021 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"backtracewidget.h\"\n#include \"ui_backtracewidget.h\"\n\n#include \"splash/splashcontroller.h\"\n#include <QFileDialog>\n#include <QFontDatabase>\n#include <libcontemporary_global.h>\n\nBacktraceWidget::BacktraceWidget(QWidget* parent) :\n    QWidget(parent),\n    ui(new Ui::BacktraceWidget) {\n    ui->setupUi(this);\n\n    ui->textBrowser->setFont(QFontDatabase::systemFont(QFontDatabase::FixedFont));\n    ui->textBrowser->setText(SplashController::instance()->lastBacktrace().join(\"\\n\"));\n\n    ui->topWidget->setFixedWidth(SC_DPI(600));\n}\n\nBacktraceWidget::~BacktraceWidget() {\n    delete ui;\n}\n\nvoid BacktraceWidget::on_saveButton_clicked() {\n    QFileDialog* dialog = new QFileDialog(this);\n    dialog->setAcceptMode(QFileDialog::AcceptSave);\n    dialog->setFileMode(QFileDialog::AnyFile);\n    connect(dialog, &QFileDialog::fileSelected, this, [=](QString file) {\n        QFile fileOutput(file);\n        fileOutput.open(QFile::WriteOnly);\n        fileOutput.write(ui->textBrowser->toPlainText().toUtf8());\n        fileOutput.close();\n    });\n    connect(dialog, &QFileDialog::finished, dialog, &QFileDialog::deleteLater);\n    dialog->open();\n}\n"
  },
  {
    "path": "startdesk/crash/backtracewidget.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2021 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef BACKTRACEWIDGET_H\n#define BACKTRACEWIDGET_H\n\n#include <QWidget>\n\nnamespace Ui {\n    class BacktraceWidget;\n}\n\nclass BacktraceWidget : public QWidget {\n        Q_OBJECT\n\n    public:\n        explicit BacktraceWidget(QWidget* parent = nullptr);\n        ~BacktraceWidget();\n\n    private slots:\n        void on_saveButton_clicked();\n\n    private:\n        Ui::BacktraceWidget* ui;\n};\n\n#endif // BACKTRACEWIDGET_H\n"
  },
  {
    "path": "startdesk/crash/backtracewidget.ui",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ui version=\"4.0\">\n <class>BacktraceWidget</class>\n <widget class=\"QWidget\" name=\"BacktraceWidget\">\n  <property name=\"geometry\">\n   <rect>\n    <x>0</x>\n    <y>0</y>\n    <width>731</width>\n    <height>424</height>\n   </rect>\n  </property>\n  <property name=\"windowTitle\">\n   <string notr=\"true\">Form</string>\n  </property>\n  <layout class=\"QVBoxLayout\" name=\"verticalLayout\">\n   <property name=\"spacing\">\n    <number>0</number>\n   </property>\n   <property name=\"leftMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"topMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"rightMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"bottomMargin\">\n    <number>0</number>\n   </property>\n   <item alignment=\"Qt::AlignHCenter\">\n    <widget class=\"QWidget\" name=\"topWidget\" native=\"true\">\n     <layout class=\"QVBoxLayout\" name=\"verticalLayout_2\">\n      <property name=\"leftMargin\">\n       <number>9</number>\n      </property>\n      <property name=\"topMargin\">\n       <number>9</number>\n      </property>\n      <property name=\"rightMargin\">\n       <number>9</number>\n      </property>\n      <property name=\"bottomMargin\">\n       <number>9</number>\n      </property>\n      <item>\n       <widget class=\"QLabel\" name=\"label\">\n        <property name=\"text\">\n         <string>Review the information below and ensure it does not contain any personal data. Attach the information to a bug report and we'll get back to you!</string>\n        </property>\n        <property name=\"wordWrap\">\n         <bool>true</bool>\n        </property>\n       </widget>\n      </item>\n      <item>\n       <widget class=\"QLabel\" name=\"label_2\">\n        <property name=\"font\">\n         <font>\n          <weight>75</weight>\n          <bold>true</bold>\n         </font>\n        </property>\n        <property name=\"text\">\n         <string>ACTIONS</string>\n        </property>\n       </widget>\n      </item>\n      <item>\n       <widget class=\"QPushButton\" name=\"saveButton\">\n        <property name=\"text\">\n         <string>Save to file</string>\n        </property>\n        <property name=\"icon\">\n         <iconset theme=\"document-save\"/>\n        </property>\n       </widget>\n      </item>\n     </layout>\n    </widget>\n   </item>\n   <item>\n    <widget class=\"Line\" name=\"line\">\n     <property name=\"maximumSize\">\n      <size>\n       <width>16777215</width>\n       <height>1</height>\n      </size>\n     </property>\n     <property name=\"orientation\">\n      <enum>Qt::Horizontal</enum>\n     </property>\n    </widget>\n   </item>\n   <item>\n    <widget class=\"QTextBrowser\" name=\"textBrowser\">\n     <property name=\"frameShape\">\n      <enum>QFrame::NoFrame</enum>\n     </property>\n    </widget>\n   </item>\n  </layout>\n </widget>\n <resources/>\n <connections/>\n</ui>\n"
  },
  {
    "path": "startdesk/crash/crashwidget.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"crashwidget.h\"\n#include \"ui_crashwidget.h\"\n\n#include \"backtracepopover.h\"\n#include \"splash/splashcontroller.h\"\n#include <libcontemporary_global.h>\n#include <tpopover.h>\n\nCrashWidget::CrashWidget(QWidget* parent) :\n    QWidget(parent),\n    ui(new Ui::CrashWidget) {\n    ui->setupUi(this);\n\n    ui->iconLabel->setPixmap(QIcon(\":/icons/crash.svg\").pixmap(SC_DPI_T(QSize(128, 128), QSize)));\n\n    connect(SplashController::instance(), &SplashController::crash, this, [=] {\n        ui->descriptionLabel->setText(tr(\"theDesk had a problem and has stopped working.\"));\n    });\n    connect(SplashController::instance(), &SplashController::startFail, this, [=] {\n        ui->descriptionLabel->setText(tr(\"theDesk couldn't start because of a problem.\"));\n    });\n}\n\nCrashWidget::~CrashWidget() {\n    delete ui;\n}\n\nvoid CrashWidget::on_logOutButton_clicked() {\n    SplashController::instance()->logout();\n}\n\nvoid CrashWidget::on_relaunchButton_clicked() {\n    SplashController::instance()->startDE();\n}\n\nvoid CrashWidget::on_detailsButton_clicked() {\n    BacktracePopover* bt = new BacktracePopover();\n    tPopover* popover = new tPopover(bt);\n    popover->setPopoverWidth(SC_DPI(600));\n    popover->setPopoverSide(tPopover::Bottom);\n    connect(bt, &BacktracePopover::done, popover, &tPopover::dismiss);\n    connect(popover, &tPopover::dismissed, bt, &BacktracePopover::deleteLater);\n    connect(popover, &tPopover::dismissed, popover, &tPopover::deleteLater);\n    popover->show(this);\n}\n"
  },
  {
    "path": "startdesk/crash/crashwidget.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef CRASHWIDGET_H\n#define CRASHWIDGET_H\n\n#include <QWidget>\n\nnamespace Ui {\n    class CrashWidget;\n}\n\nclass CrashWidget : public QWidget {\n        Q_OBJECT\n\n    public:\n        explicit CrashWidget(QWidget* parent = nullptr);\n        ~CrashWidget();\n\n    private slots:\n        void on_logOutButton_clicked();\n\n        void on_relaunchButton_clicked();\n\n        void on_detailsButton_clicked();\n\n    private:\n        Ui::CrashWidget* ui;\n};\n\n#endif // CRASHWIDGET_H\n"
  },
  {
    "path": "startdesk/crash/crashwidget.ui",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ui version=\"4.0\">\n <class>CrashWidget</class>\n <widget class=\"QWidget\" name=\"CrashWidget\">\n  <property name=\"geometry\">\n   <rect>\n    <x>0</x>\n    <y>0</y>\n    <width>596</width>\n    <height>435</height>\n   </rect>\n  </property>\n  <property name=\"windowTitle\">\n   <string notr=\"true\">Form</string>\n  </property>\n  <layout class=\"QVBoxLayout\" name=\"verticalLayout\">\n   <item>\n    <spacer name=\"verticalSpacer\">\n     <property name=\"orientation\">\n      <enum>Qt::Vertical</enum>\n     </property>\n     <property name=\"sizeHint\" stdset=\"0\">\n      <size>\n       <width>20</width>\n       <height>155</height>\n      </size>\n     </property>\n    </spacer>\n   </item>\n   <item>\n    <widget class=\"QLabel\" name=\"label\">\n     <property name=\"font\">\n      <font>\n       <pointsize>20</pointsize>\n      </font>\n     </property>\n     <property name=\"text\">\n      <string>Oh, Bonkers!</string>\n     </property>\n     <property name=\"alignment\">\n      <set>Qt::AlignCenter</set>\n     </property>\n    </widget>\n   </item>\n   <item>\n    <widget class=\"QLabel\" name=\"iconLabel\">\n     <property name=\"enabled\">\n      <bool>false</bool>\n     </property>\n     <property name=\"text\">\n      <string notr=\"true\"/>\n     </property>\n     <property name=\"alignment\">\n      <set>Qt::AlignCenter</set>\n     </property>\n    </widget>\n   </item>\n   <item>\n    <widget class=\"QLabel\" name=\"descriptionLabel\">\n     <property name=\"text\">\n      <string>theDesk had a problem and has stopped working.</string>\n     </property>\n     <property name=\"alignment\">\n      <set>Qt::AlignCenter</set>\n     </property>\n    </widget>\n   </item>\n   <item>\n    <layout class=\"QHBoxLayout\" name=\"horizontalLayout\">\n     <item>\n      <spacer name=\"horizontalSpacer\">\n       <property name=\"orientation\">\n        <enum>Qt::Horizontal</enum>\n       </property>\n       <property name=\"sizeHint\" stdset=\"0\">\n        <size>\n         <width>40</width>\n         <height>20</height>\n        </size>\n       </property>\n      </spacer>\n     </item>\n     <item>\n      <widget class=\"QPushButton\" name=\"relaunchButton\">\n       <property name=\"text\">\n        <string>Relaunch theDesk</string>\n       </property>\n       <property name=\"icon\">\n        <iconset theme=\"view-refresh\">\n         <normaloff>.</normaloff>.</iconset>\n       </property>\n      </widget>\n     </item>\n     <item>\n      <widget class=\"QPushButton\" name=\"logOutButton\">\n       <property name=\"text\">\n        <string>Log Out</string>\n       </property>\n       <property name=\"icon\">\n        <iconset theme=\"system-log-out\">\n         <normaloff>.</normaloff>.</iconset>\n       </property>\n      </widget>\n     </item>\n     <item>\n      <spacer name=\"horizontalSpacer_2\">\n       <property name=\"orientation\">\n        <enum>Qt::Horizontal</enum>\n       </property>\n       <property name=\"sizeHint\" stdset=\"0\">\n        <size>\n         <width>40</width>\n         <height>20</height>\n        </size>\n       </property>\n      </spacer>\n     </item>\n    </layout>\n   </item>\n   <item>\n    <spacer name=\"verticalSpacer_2\">\n     <property name=\"orientation\">\n      <enum>Qt::Vertical</enum>\n     </property>\n     <property name=\"sizeHint\" stdset=\"0\">\n      <size>\n       <width>20</width>\n       <height>155</height>\n      </size>\n     </property>\n    </spacer>\n   </item>\n   <item>\n    <layout class=\"QHBoxLayout\" name=\"horizontalLayout_2\">\n     <item>\n      <spacer name=\"horizontalSpacer_3\">\n       <property name=\"orientation\">\n        <enum>Qt::Horizontal</enum>\n       </property>\n       <property name=\"sizeHint\" stdset=\"0\">\n        <size>\n         <width>40</width>\n         <height>20</height>\n        </size>\n       </property>\n      </spacer>\n     </item>\n     <item>\n      <widget class=\"QPushButton\" name=\"detailsButton\">\n       <property name=\"text\">\n        <string>View Details</string>\n       </property>\n      </widget>\n     </item>\n    </layout>\n   </item>\n  </layout>\n </widget>\n <resources/>\n <connections/>\n</ui>\n"
  },
  {
    "path": "startdesk/main.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n\n#include \"splash/splashcontroller.h\"\n#include <tapplication.h>\n\n#include <QDBusConnection>\n#include <QDBusMessage>\n#include <QDBusPendingCall>\n#include <QProcess>\n#include <Screens/screendaemon.h>\n#include <tsettings.h>\n\nint main(int argc, char* argv[]) {\n    // Put environment variables\n    qputenv(\"QT_QPA_PLATFORMTHEME\", \"thedesk-platform\");\n\n    // Turn off flatpak forwarding for ourselves\n    qputenv(\"TD_PLATFORM_NO_FLATPAK_FORWARD\", \"1\");\n\n    QString oldPath = qgetenv(\"PATH\");\n    qputenv(\"PATH\", (\"/usr/bin/thedesk-xdg-utils:\" + oldPath).toUtf8());\n\n    tApplication a(argc, argv);\n    a.setApplicationName(\"theDesk\");\n    a.setOrganizationName(\"theSuite\");\n    a.setApplicationDisplayName(\"theDesk\");\n    a.setQuitOnLastWindowClosed(false);\n\n    qunsetenv(\"TD_PLATFORM_NO_FLATPAK_FORWARD\");\n\n    tSettings::registerDefaults(a.applicationDirPath() + \"/defaults.conf\");\n    tSettings::registerDefaults(\"/etc/theSuite/theDesk/defaults.conf\");\n\n    tSettings* settings = new tSettings();\n\n    // Check for initialisation script\n    if (settings->value(\"Session/UseInitializationScript\").toBool()) {\n        QProcess process;\n        process.start(settings->value(\"Session/InitializationScript\").toString(), QStringList());\n        process.waitForFinished();\n    }\n\n    // Ask systemd to import environment variables\n    QStringList systemdEnvironment = {QStringLiteral(\"XDG_CURRENT_DESKTOP=%1\").arg(qEnvironmentVariable(\"XDG_CURRENT_DESKTOP\")),\n        QStringLiteral(\"QT_QPA_PLATFORMTHEME=%1\").arg(qEnvironmentVariable(\"QT_QPA_PLATFORMTHEME\")),\n        QStringLiteral(\"PATH=%1\").arg(qEnvironmentVariable(\"PATH\"))};\n    if (qEnvironmentVariableIsSet(\"DISPLAY\")) {\n        systemdEnvironment.append(QStringLiteral(\"DISPLAY=%1\").arg(qEnvironmentVariable(\"DISPLAY\")));\n    }\n    if (qEnvironmentVariableIsSet(\"WAYLAND_DISPLAY\")) {\n        systemdEnvironment.append(QStringLiteral(\"WAYLAND_DISPLAY=%1\").arg(qEnvironmentVariable(\"WAYLAND_DISPLAY\")));\n    }\n    QDBusMessage setEnvironmentMessage = QDBusMessage::createMethodCall(\"org.freedesktop.systemd1\", \"/org/freedesktop/systemd1\", \"org.freedesktop.systemd1.Manager\", \"SetEnvironment\");\n    setEnvironmentMessage.setArguments({systemdEnvironment});\n    QDBusConnection::sessionBus().asyncCall(setEnvironmentMessage);\n\n    // Restart the portal so it picks up our new environment variables\n    QDBusMessage restartPortalMessage = QDBusMessage::createMethodCall(\"org.freedesktop.systemd1\", \"/org/freedesktop/systemd1\", \"org.freedesktop.systemd1.Manager\", \"RestartUnit\");\n    restartPortalMessage.setArguments({QStringLiteral(\"xdg-desktop-portal.service\"), QStringLiteral(\"replace\")});\n    QDBusConnection::sessionBus().asyncCall(restartPortalMessage);\n\n    SplashController::instance()->startDE();\n\n    return a.exec();\n}\n"
  },
  {
    "path": "startdesk/resources.qrc",
    "content": "<RCC>\n    <qresource prefix=\"/\">\n        <file>icons/crash.svg</file>\n    </qresource>\n</RCC>\n"
  },
  {
    "path": "startdesk/splash/splashcontroller.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"splashcontroller.h\"\n\n#include \"crash/backtracedialog.h\"\n#include \"splashwindow.h\"\n#include <Applications/application.h>\n#include <QApplication>\n#include <QDir>\n#include <QElapsedTimer>\n#include <QFile>\n#include <QJsonDocument>\n#include <QJsonObject>\n#include <QLocalServer>\n#include <QLocalSocket>\n#include <QPointer>\n#include <QProcess>\n#include <QRandomGenerator>\n#include <QStandardPaths>\n#include <QTimer>\n#include <Screens/screendaemon.h>\n#include <Wm/desktopwm.h>\n#include <libcontemporary_global.h>\n#include <tnotification.h>\n#include <tsettings.h>\n\nstruct SplashControllerPrivate {\n        SplashController* instance = nullptr;\n\n        SplashWindow* splash;\n        QProcess* process = nullptr;\n        QProcess* wm = nullptr;\n\n        QLocalServer* server;\n        QPointer<QLocalSocket> socket;\n        QString serverPath;\n\n        QByteArray buffer;\n\n        tSettings* settings;\n\n        bool autostartDone = false;\n        bool startedSuccessfully = false;\n        bool performingAutoRecovery = false;\n        QElapsedTimer timeSinceSuccessfulStart;\n        QStringList currentBacktrace;\n        QStringList lastBacktrace;\n};\n\nSplashControllerPrivate* SplashController::d = new SplashControllerPrivate();\n\nSplashController::SplashController(QObject* parent) :\n    QObject(parent) {\n    d->settings = new tSettings();\n    this->initSession();\n}\n\nvoid SplashController::socketDataAvailable() {\n    d->buffer.append(d->socket->readAll());\n\n    int bracket = 0;\n    for (int i = 0; i < d->buffer.count(); i++) {\n        if (d->buffer.at(i) == '{') {\n            bracket++;\n        } else if (d->buffer.at(i) == '}') {\n            bracket--;\n        } else if (bracket == 0) {\n            // Error\n            d->buffer = d->buffer.mid(i + 1);\n            i = -1;\n        }\n\n        if (bracket == 0) {\n            QByteArray data = d->buffer.left(i + 1);\n            d->buffer = d->buffer.mid(i + 1);\n            i = -1;\n\n            QJsonDocument doc = QJsonDocument::fromJson(data);\n            QJsonObject obj = doc.object();\n            if (obj.contains(\"type\")) {\n                QString type = obj.value(\"type\").toString();\n                if (type == \"hideSplash\") {\n                    emit hideSplashes();\n                    d->startedSuccessfully = true;\n                    d->timeSinceSuccessfulStart.restart();\n\n                    if (d->performingAutoRecovery) {\n                        tNotification* notification = new tNotification();\n                        notification->setAppIcon(\"com.vicr123.thedesk\");\n                        notification->setAppName(\"theDesk\");\n                        notification->setSummary(tr(\"Oh, Bonkers!\"));\n                        notification->setText(tr(\"theDesk had a problem and was restarted.\"));\n                        notification->setTransient(true);\n                        notification->insertAction(\"details\", tr(\"View Details\"));\n                        notification->post();\n                        connect(notification, &tNotification::actionClicked, this, [=](QString key) {\n                            if (key == \"details\") {\n                                BacktraceDialog* dialog = new BacktraceDialog();\n                                connect(dialog, &BacktraceDialog::finished, dialog, &BacktraceDialog::deleteLater);\n                                dialog->show();\n                            }\n                        });\n                    }\n                } else if (type == \"showSplash\") {\n                    emit starting();\n                } else if (type == \"autoStart\") {\n                    // Run Autostart apps\n                    this->runAutostart();\n                } else if (type == \"question\") {\n                    emit question(obj.value(\"title\").toString(), obj.value(\"question\").toString());\n                }\n            }\n        }\n    }\n}\n\nSplashController::~SplashController() {\n}\n\nSplashController* SplashController::instance() {\n    if (!d->instance) {\n        d->instance = new SplashController();\n        d->splash = new SplashWindow();\n        d->splash->showFullScreen();\n    }\n    return d->instance;\n}\n\nvoid SplashController::initSession() {\n    // Start the server\n    d->serverPath = QStandardPaths::writableLocation(QStandardPaths::RuntimeLocation) + \"/startdesk-\" + QString::number(QRandomGenerator::system()->generate64());\n\n    QLocalServer::removeServer(d->serverPath);\n\n    d->server = new QLocalServer(this);\n    connect(d->server, &QLocalServer::newConnection, this, [=] {\n        d->socket = d->server->nextPendingConnection();\n        connect(d->socket, &QLocalSocket::readyRead, this, &SplashController::socketDataAvailable);\n        connect(d->socket, &QLocalSocket::disconnected, d->socket, &QLocalSocket::deleteLater);\n        d->server->close();\n    });\n\n    // Start the window manager\n    this->startWM();\n}\n\nvoid SplashController::runAutostart() {\n    if (d->autostartDone) return;\n    if (qEnvironmentVariable(\"THEDESK_NO_AUTOSTART\") == \"true\") return;\n\n    // Autostart the Polkit agent\n    QString pkPath = QStringLiteral(SYSTEM_LIBRARY_DIRECTORY).append(\"/td-polkitagent\");\n    if (QFile::exists(pkPath)) {\n        auto pkProc = new QProcess(this);\n        pkProc->start(pkPath);\n    }\n\n    QStringList searchPaths = {\n        qEnvironmentVariable(\"XDG_CONFIG_HOME\", QDir::homePath() + \"/.config\") + \"/autostart\",\n        qEnvironmentVariable(\"XDG_CONFIG_DIRS\", \"/etc/xdg\") + \"/autostart\"};\n\n    for (QString desktopEntry : Application::allApplications(searchPaths)) {\n        ApplicationPointer app(new Application(desktopEntry, searchPaths));\n        if (app->getProperty(\"Hidden\", \"false\").toString() == \"true\") continue; // Ignore this autostart entry\n        if (!app->getStringList(\"OnlyShowIn\", {\"thedesk\"}).contains(\"thedesk\")) continue;\n        if (app->getStringList(\"NotShowIn\").contains(\"thedesk\")) continue;\n\n        // Blacklist Touchegg\n        if (desktopEntry == \"touchegg\") continue;\n\n        if (app->hasProperty(\"TryExec\")) {\n            QString tryExecPath = app->getProperty(\"TryExec\").toString();\n            if (tryExecPath.startsWith(\"/\")) {\n                // TryExec is an absolute path\n                QFile testFile(tryExecPath);\n                if (!testFile.exists() | testFile.permissions() & ~QFile::ExeUser) continue;\n            } else {\n                // TryExec should be searched for in the PATH\n                if (libContemporaryCommon::searchInPath(tryExecPath).isEmpty()) continue;\n            }\n        }\n\n        // Autostart this app\n        app->launch();\n    }\n\n    d->autostartDone = true;\n}\n\nvoid SplashController::startWM() {\n    if (!d->wm && QApplication::platformName() != \"wayland\") {\n        d->wm = new QProcess(this);\n        QString wmgr = d->settings->value(\"Session/WindowManager\").toString();\n        d->wm->start(d->settings->value(\"Session/WindowManager\").toString(), d->settings->delimitedList(\"Session/WindowManagerArguments\")); // TODO: make this a configurable setting\n    }\n}\n\nvoid SplashController::startDE() {\n    if (d->process) return;\n\n    emit starting();\n    d->server->listen(d->serverPath);\n    d->startedSuccessfully = false;\n\n    // Set correct DPI\n    tSettings settings;\n    DesktopWm::instance()->registerAsPrimaryProvider();\n    ScreenDaemon::instance()->setDpi(settings.value(\"Display/dpi\").toInt());\n\n    QString thedeskPath = qEnvironmentVariable(\"THEDESK_PATH\", \"/usr/bin/thedesk\");\n    d->process = new QProcess(this);\n    //    d->process->setProcessChannelMode(QProcess::ForwardedChannels);\n    d->process->setProgram(thedeskPath);\n    d->process->setArguments({\"--sessionserver\", d->serverPath});\n    d->process->start();\n\n    connect(d->process, &QProcess::errorOccurred, this, [=](QProcess::ProcessError error) {\n        if (error == QProcess::FailedToStart || !d->startedSuccessfully) {\n            emit startFail();\n        } else if (error == QProcess::Crashed) {\n            d->lastBacktrace = d->currentBacktrace;\n            d->currentBacktrace.clear();\n\n            // Check to see if we should crash or not\n            if (d->timeSinceSuccessfulStart.hasExpired(60000)) {\n                // Attempt to recover\n                QTimer::singleShot(1000, this, [=] {\n                    d->performingAutoRecovery = true;\n                    this->startDE();\n                });\n            } else {\n                d->performingAutoRecovery = false;\n                emit crash();\n            }\n        }\n    });\n    connect(d->process, QOverload<int, QProcess::ExitStatus>::of(&QProcess::finished), this, [=](int exitCode, QProcess::ExitStatus status) {\n        if (status == QProcess::NormalExit) {\n            if (exitCode == 0) {\n                this->logout();\n            }\n        }\n\n        d->process->deleteLater();\n        d->process = nullptr;\n\n        d->server->close();\n        if (d->socket) d->socket->close();\n    });\n    connect(d->process, &QProcess::readyReadStandardOutput, this, [=] {\n        QString data = d->process->readAllStandardOutput();\n\n        QTextStream output(stdout);\n        output << data;\n    });\n    connect(d->process, &QProcess::readyReadStandardError, this, [=] {\n        QString data = d->process->readAllStandardError();\n\n        for (QString line : data.split(\"\\n\")) {\n            if (line.startsWith(\"THEDESK-TRAP:\")) {\n                d->currentBacktrace.append(line.mid(14));\n            }\n        }\n\n        QTextStream output(stderr);\n        output << data;\n    });\n}\n\nvoid SplashController::logout() {\n    if (d->wm) d->wm->kill();\n    QApplication::exit();\n}\n\nvoid SplashController::respond(bool answer) {\n    d->socket->write(QJsonDocument(QJsonObject({\n                                       {\"type\",     \"questionResponse\"},\n                                       {\"response\", answer            }\n    }))\n                         .toJson());\n    d->socket->flush();\n}\n\nQStringList SplashController::lastBacktrace() {\n    return d->lastBacktrace;\n}\n"
  },
  {
    "path": "startdesk/splash/splashcontroller.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef SPLASHCONTROLLER_H\n#define SPLASHCONTROLLER_H\n\n#include <QObject>\n\nstruct SplashControllerPrivate;\nclass SplashController : public QObject {\n        Q_OBJECT\n    public:\n        ~SplashController();\n\n        static SplashController* instance();\n\n        void initSession();\n        void runAutostart();\n        void startWM();\n        void startDE();\n        void logout();\n\n        void respond(bool answer);\n\n        QStringList lastBacktrace();\n\n    signals:\n        void starting();\n        void hideSplashes();\n        void crash();\n        void startFail();\n\n        void question(QString title, QString message);\n\n    private:\n        explicit SplashController(QObject* parent = nullptr);\n        static SplashControllerPrivate* d;\n\n        void socketDataAvailable();\n};\n\n#endif // SPLASHCONTROLLER_H\n"
  },
  {
    "path": "startdesk/splash/splashwidget.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"splashwidget.h\"\n#include \"ui_splashwidget.h\"\n\n#include <QFontDatabase>\n#include <QProcess>\n\nSplashWidget::SplashWidget(QWidget* parent) :\n    QWidget(parent),\n    ui(new Ui::SplashWidget) {\n    ui->setupUi(this);\n\n//    QProcess proc;\n//    proc.start(\"fortune\", QStringList());\n//    proc.waitForFinished();\n//    QProcess cs;\n//    cs.start(\"cowsay\", QStringList());\n//    cs.write(proc.readAll());\n//    cs.closeWriteChannel();\n//    cs.waitForFinished();\n\n//    ui->fortuneLabel->setFont(QFontDatabase::systemFont(QFontDatabase::FixedFont));\n//    ui->fortuneLabel->setText(cs.readAll().trimmed());\n    ui->fortuneLabel->setVisible(false);\n}\n\nSplashWidget::~SplashWidget() {\n    delete ui;\n}\n"
  },
  {
    "path": "startdesk/splash/splashwidget.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef SPLASHWIDGET_H\n#define SPLASHWIDGET_H\n\n#include <QWidget>\n\nnamespace Ui {\n    class SplashWidget;\n}\n\nclass SplashWidget : public QWidget\n{\n        Q_OBJECT\n\n    public:\n        explicit SplashWidget(QWidget *parent = nullptr);\n        ~SplashWidget();\n\n    private:\n        Ui::SplashWidget *ui;\n};\n\n#endif // SPLASHWIDGET_H\n"
  },
  {
    "path": "startdesk/splash/splashwidget.ui",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ui version=\"4.0\">\n <class>SplashWidget</class>\n <widget class=\"QWidget\" name=\"SplashWidget\">\n  <property name=\"geometry\">\n   <rect>\n    <x>0</x>\n    <y>0</y>\n    <width>400</width>\n    <height>300</height>\n   </rect>\n  </property>\n  <property name=\"windowTitle\">\n   <string notr=\"true\">Form</string>\n  </property>\n  <layout class=\"QGridLayout\" name=\"gridLayout\">\n   <property name=\"topMargin\">\n    <number>40</number>\n   </property>\n   <property name=\"bottomMargin\">\n    <number>40</number>\n   </property>\n   <item row=\"0\" column=\"1\">\n    <spacer name=\"verticalSpacer\">\n     <property name=\"orientation\">\n      <enum>Qt::Vertical</enum>\n     </property>\n     <property name=\"sizeHint\" stdset=\"0\">\n      <size>\n       <width>20</width>\n       <height>121</height>\n      </size>\n     </property>\n    </spacer>\n   </item>\n   <item row=\"1\" column=\"0\">\n    <spacer name=\"horizontalSpacer\">\n     <property name=\"orientation\">\n      <enum>Qt::Horizontal</enum>\n     </property>\n     <property name=\"sizeHint\" stdset=\"0\">\n      <size>\n       <width>171</width>\n       <height>20</height>\n      </size>\n     </property>\n    </spacer>\n   </item>\n   <item row=\"1\" column=\"2\">\n    <spacer name=\"horizontalSpacer_2\">\n     <property name=\"orientation\">\n      <enum>Qt::Horizontal</enum>\n     </property>\n     <property name=\"sizeHint\" stdset=\"0\">\n      <size>\n       <width>170</width>\n       <height>20</height>\n      </size>\n     </property>\n    </spacer>\n   </item>\n   <item row=\"2\" column=\"1\">\n    <spacer name=\"verticalSpacer_2\">\n     <property name=\"orientation\">\n      <enum>Qt::Vertical</enum>\n     </property>\n     <property name=\"sizeHint\" stdset=\"0\">\n      <size>\n       <width>20</width>\n       <height>120</height>\n      </size>\n     </property>\n    </spacer>\n   </item>\n   <item row=\"3\" column=\"1\">\n    <widget class=\"QLabel\" name=\"fortuneLabel\">\n     <property name=\"text\">\n      <string notr=\"true\">TextLabel</string>\n     </property>\n    </widget>\n   </item>\n   <item row=\"1\" column=\"1\" alignment=\"Qt::AlignHCenter\">\n    <widget class=\"tCircularSpinner\" name=\"widget\" native=\"true\"/>\n   </item>\n  </layout>\n </widget>\n <customwidgets>\n  <customwidget>\n   <class>tCircularSpinner</class>\n   <extends>QWidget</extends>\n   <header location=\"global\">tcircularspinner.h</header>\n   <container>1</container>\n  </customwidget>\n </customwidgets>\n <resources/>\n <connections/>\n</ui>\n"
  },
  {
    "path": "startdesk/splashwindow.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"splashwindow.h\"\n#include \"ui_splashwindow.h\"\n\n#include \"splash/splashcontroller.h\"\n#include <QScreen>\n#include <tapplication.h>\n#include <tvariantanimation.h>\n\nSplashWindow::SplashWindow(QWidget* parent) :\n    QDialog(parent),\n    ui(new Ui::SplashWindow) {\n    ui->setupUi(this);\n\n    this->setWindowFlag(Qt::WindowStaysOnTopHint);\n    ui->stackedWidget->setCurrentAnimation(tStackedWidget::Fade);\n\n    connect(SplashController::instance(), &SplashController::starting, this, [=] {\n        ui->stackedWidget->setCurrentWidget(ui->splashPage, this->isVisible());\n        this->showFullScreen();\n    });\n    connect(SplashController::instance(), &SplashController::hideSplashes, this, [=] {\n        this->hide();\n    });\n    connect(SplashController::instance(), &SplashController::crash, this, [=] {\n        ui->stackedWidget->setCurrentWidget(ui->crashPage, this->isVisible());\n        this->showFullScreen();\n    });\n    connect(SplashController::instance(), &SplashController::startFail, this, [=] {\n        ui->stackedWidget->setCurrentWidget(ui->crashPage, this->isVisible());\n        this->showFullScreen();\n    });\n    connect(SplashController::instance(), &SplashController::question, this, [=](QString title, QString message) {\n        ui->questionTitle->setText(title);\n        ui->questionText->setText(message);\n        ui->stackedWidget->setCurrentWidget(ui->questionPage, this->isVisible());\n        this->showFullScreen();\n    });\n\n    this->setGeometry(tApplication::primaryScreen()->geometry());\n}\n\nSplashWindow::~SplashWindow() {\n    delete ui;\n}\n\nvoid SplashWindow::hide() {\n    tVariantAnimation* anim = new tVariantAnimation(this);\n    anim->setStartValue(1.0);\n    anim->setEndValue(0.0);\n    anim->setEasingCurve(QEasingCurve::OutCubic);\n    anim->setDuration(500);\n    connect(anim, &tVariantAnimation::valueChanged, this, [=](QVariant value) {\n        this->setWindowOpacity(value.toDouble());\n    });\n    connect(anim, &tVariantAnimation::finished, this, [=] {\n        anim->deleteLater();\n        QDialog::hide();\n        this->setWindowOpacity(1);\n    });\n    anim->start();\n}\n\nvoid SplashWindow::on_yesButton_clicked() {\n    SplashController::instance()->respond(true);\n    ui->stackedWidget->setCurrentWidget(ui->splashPage);\n}\n\nvoid SplashWindow::on_noButton_clicked() {\n    SplashController::instance()->respond(false);\n    ui->stackedWidget->setCurrentWidget(ui->splashPage);\n}\n"
  },
  {
    "path": "startdesk/splashwindow.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2020 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef SPLASHWINDOW_H\n#define SPLASHWINDOW_H\n\n#include <QDialog>\n\nnamespace Ui {\n    class SplashWindow;\n}\n\nclass SplashWindow : public QDialog {\n        Q_OBJECT\n\n    public:\n        explicit SplashWindow(QWidget* parent = nullptr);\n        ~SplashWindow();\n\n        void hide();\n\n    private slots:\n        void on_yesButton_clicked();\n\n        void on_noButton_clicked();\n\n    private:\n        Ui::SplashWindow* ui;\n};\n\n#endif // SPLASHWINDOW_H\n"
  },
  {
    "path": "startdesk/splashwindow.ui",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ui version=\"4.0\">\n <class>SplashWindow</class>\n <widget class=\"QDialog\" name=\"SplashWindow\">\n  <property name=\"geometry\">\n   <rect>\n    <x>0</x>\n    <y>0</y>\n    <width>633</width>\n    <height>471</height>\n   </rect>\n  </property>\n  <property name=\"windowTitle\">\n   <string notr=\"true\">Dialog</string>\n  </property>\n  <layout class=\"QVBoxLayout\" name=\"verticalLayout\">\n   <property name=\"spacing\">\n    <number>0</number>\n   </property>\n   <property name=\"leftMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"topMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"rightMargin\">\n    <number>0</number>\n   </property>\n   <property name=\"bottomMargin\">\n    <number>0</number>\n   </property>\n   <item>\n    <widget class=\"tStackedWidget\" name=\"stackedWidget\">\n     <widget class=\"SplashWidget\" name=\"splashPage\"/>\n     <widget class=\"QWidget\" name=\"questionPage\">\n      <layout class=\"QGridLayout\" name=\"gridLayout\">\n       <item row=\"0\" column=\"1\">\n        <spacer name=\"verticalSpacer\">\n         <property name=\"orientation\">\n          <enum>Qt::Vertical</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>20</width>\n           <height>173</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n       <item row=\"1\" column=\"0\">\n        <spacer name=\"horizontalSpacer\">\n         <property name=\"orientation\">\n          <enum>Qt::Horizontal</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>218</width>\n           <height>20</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n       <item row=\"1\" column=\"1\">\n        <widget class=\"QWidget\" name=\"widget\" native=\"true\">\n         <layout class=\"QVBoxLayout\" name=\"verticalLayout_2\">\n          <property name=\"leftMargin\">\n           <number>0</number>\n          </property>\n          <property name=\"topMargin\">\n           <number>0</number>\n          </property>\n          <property name=\"rightMargin\">\n           <number>0</number>\n          </property>\n          <property name=\"bottomMargin\">\n           <number>0</number>\n          </property>\n          <item>\n           <layout class=\"QVBoxLayout\" name=\"verticalLayout_3\">\n            <property name=\"leftMargin\">\n             <number>9</number>\n            </property>\n            <property name=\"topMargin\">\n             <number>9</number>\n            </property>\n            <property name=\"rightMargin\">\n             <number>9</number>\n            </property>\n            <item>\n             <widget class=\"QLabel\" name=\"questionTitle\">\n              <property name=\"font\">\n               <font>\n                <pointsize>15</pointsize>\n               </font>\n              </property>\n              <property name=\"text\">\n               <string notr=\"true\">Title</string>\n              </property>\n             </widget>\n            </item>\n            <item>\n             <widget class=\"QLabel\" name=\"questionText\">\n              <property name=\"text\">\n               <string>Question</string>\n              </property>\n             </widget>\n            </item>\n           </layout>\n          </item>\n          <item>\n           <layout class=\"QHBoxLayout\" name=\"horizontalLayout\">\n            <property name=\"spacing\">\n             <number>0</number>\n            </property>\n            <item>\n             <widget class=\"QPushButton\" name=\"yesButton\">\n              <property name=\"text\">\n               <string>Yes</string>\n              </property>\n              <property name=\"icon\">\n               <iconset theme=\"dialog-ok\">\n                <normaloff>.</normaloff>.</iconset>\n              </property>\n             </widget>\n            </item>\n            <item>\n             <widget class=\"QPushButton\" name=\"noButton\">\n              <property name=\"text\">\n               <string>No</string>\n              </property>\n              <property name=\"icon\">\n               <iconset theme=\"dialog-cancel\">\n                <normaloff>.</normaloff>.</iconset>\n              </property>\n             </widget>\n            </item>\n           </layout>\n          </item>\n         </layout>\n        </widget>\n       </item>\n       <item row=\"1\" column=\"2\">\n        <spacer name=\"horizontalSpacer_2\">\n         <property name=\"orientation\">\n          <enum>Qt::Horizontal</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>217</width>\n           <height>20</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n       <item row=\"2\" column=\"1\">\n        <spacer name=\"verticalSpacer_2\">\n         <property name=\"orientation\">\n          <enum>Qt::Vertical</enum>\n         </property>\n         <property name=\"sizeHint\" stdset=\"0\">\n          <size>\n           <width>20</width>\n           <height>172</height>\n          </size>\n         </property>\n        </spacer>\n       </item>\n      </layout>\n     </widget>\n     <widget class=\"CrashWidget\" name=\"crashPage\"/>\n    </widget>\n   </item>\n  </layout>\n </widget>\n <customwidgets>\n  <customwidget>\n   <class>tStackedWidget</class>\n   <extends>QStackedWidget</extends>\n   <header location=\"global\">tstackedwidget.h</header>\n   <container>1</container>\n   <slots>\n    <signal>switchingFrame(int)</signal>\n   </slots>\n  </customwidget>\n  <customwidget>\n   <class>SplashWidget</class>\n   <extends>QWidget</extends>\n   <header>splash/splashwidget.h</header>\n   <container>1</container>\n  </customwidget>\n  <customwidget>\n   <class>CrashWidget</class>\n   <extends>QWidget</extends>\n   <header>crash/crashwidget.h</header>\n   <container>1</container>\n  </customwidget>\n </customwidgets>\n <resources/>\n <connections/>\n</ui>\n"
  },
  {
    "path": "startdesk/start-thedesk-wayland.in",
    "content": "#!/bin/sh\nsleep 2 # Mitigate lightdm bug that causes Wayfire not to start up correctly immediately\nexec wayfire --config ${CMAKE_INSTALL_FULL_DATADIR}/thedesk/startdesk/wayfire-thedesk-config.conf\n"
  },
  {
    "path": "startdesk/startdesk.pro",
    "content": "QT       += core gui thelib network tdesktopenvironment\n\ngreaterThan(QT_MAJOR_VERSION, 4): QT += widgets\n\nCONFIG += c++11\n\n# Include the-libs build tools\nequals(THELIBS_BUILDTOOLS_PATH, \"\") {\n    THELIBS_BUILDTOOLS_PATH = $$[QT_INSTALL_PREFIX]/share/the-libs/pri\n}\ninclude($$THELIBS_BUILDTOOLS_PATH/gentranslations.pri)\ninclude($$THELIBS_BUILDTOOLS_PATH/varset.pri)\n\n# The following define makes your compiler emit warnings if you use\n# any Qt feature that has been marked deprecated (the exact warnings\n# depend on your compiler). Please consult the documentation of the\n# deprecated API in order to know how to port your code away from it.\nDEFINES += QT_DEPRECATED_WARNINGS\n\n# You can also make your code fail to compile if it uses deprecated APIs.\n# In order to do so, uncomment the following line.\n# You can also select to disable deprecated APIs only up to a certain version of Qt.\n#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0\n\nSOURCES += \\\n    crash/backtracedialog.cpp \\\n    crash/backtracepopover.cpp \\\n    crash/backtracewidget.cpp \\\n    crash/crashwidget.cpp \\\n    main.cpp \\\n    splash/splashcontroller.cpp \\\n    splash/splashwidget.cpp \\\n    splashwindow.cpp\n\nHEADERS += \\\n    crash/backtracedialog.h \\\n    crash/backtracepopover.h \\\n    crash/backtracewidget.h \\\n    crash/crashwidget.h \\\n    splash/splashcontroller.h \\\n    splash/splashwidget.h \\\n    splashwindow.h\n\nFORMS += \\\n    crash/backtracedialog.ui \\\n    crash/backtracepopover.ui \\\n    crash/backtracewidget.ui \\\n    crash/crashwidget.ui \\\n    splash/splashwidget.ui \\\n    splashwindow.ui\n\nDISTFILES += \\\n    thedesk.desktop\n\nunix {\n    target.path = /usr/bin/\n\n    translations.files = translations/*.qm\n    translations.path = /usr/share/thedesk/startdesk/translations\n\n    xsession.path = /usr/share/xsessions\n    xsession.files = thedesk.desktop\n\n    wayland-session.path = /usr/share/wayland-sessions\n    wayland-session.files = thedesk-wayland.desktop\n\n    wayfire-config.path = /usr/share/thedesk/startdesk\n    wayfire-config.files = wayfire-thedesk-config.conf\n\n    INSTALLS += target translations xsession wayland-session wayfire-config\n}\n\nDEFINES += SYSTEM_LIBRARY_DIRECTORY=\\\\\\\"$$THELIBS_INSTALL_LIB\\\\\\\"\n\nunix:!macx: LIBS += -L$$OUT_PWD/../libthedesk/ -lthedesk\n\nINCLUDEPATH += $$PWD/../libthedesk\nDEPENDPATH += $$PWD/../libthedesk\n\nRESOURCES += \\\n    resources.qrc\n"
  },
  {
    "path": "startdesk/thedesk-wayland.desktop.in",
    "content": "[Desktop Entry]\nEncoding=UTF-8\nType=Application\nExec=${CMAKE_INSTALL_FULL_BINDIR}/start-thedesk-wayland\nTryExec=${CMAKE_INSTALL_FULL_BINDIR}/wayfire\nDesktopNames=theDesk\nName=theDesk on Wayland\nComment=theDesk Desktop Environment\n"
  },
  {
    "path": "startdesk/thedesk.desktop.in",
    "content": "[Desktop Entry]\nEncoding=UTF-8\nType=XSession\nExec=${CMAKE_INSTALL_FULL_BINDIR}/startdesk\nTryExec=${CMAKE_INSTALL_FULL_BINDIR}/startdesk\nDesktopNames=theDesk\nName=theDesk\nComment=theDesk Desktop Environment\n"
  },
  {
    "path": "startdesk/translations/ar_SA.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"ar_SA\" sourcelanguage=\"en_US\">\n<context>\n    <name>BacktraceDialog</name>\n    <message>\n        <location filename=\"../crash/backtracedialog.ui\" line=\"14\"/>\n        <location filename=\"../crash/backtracedialog.ui\" line=\"35\"/>\n        <source>Error Details</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>BacktracePopover</name>\n    <message>\n        <location filename=\"../crash/backtracepopover.ui\" line=\"35\"/>\n        <source>Error Details</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>BacktraceWidget</name>\n    <message>\n        <location filename=\"../crash/backtracewidget.ui\" line=\"50\"/>\n        <source>Review the information below and ensure it does not contain any personal data. Attach the information to a bug report and we&apos;ll get back to you!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../crash/backtracewidget.ui\" line=\"66\"/>\n        <source>ACTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../crash/backtracewidget.ui\" line=\"73\"/>\n        <source>Save to file</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>CrashWidget</name>\n    <message>\n        <location filename=\"../crash/crashwidget.ui\" line=\"38\"/>\n        <source>Oh, Bonkers!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../crash/crashwidget.ui\" line=\"61\"/>\n        <location filename=\"../crash/crashwidget.cpp\" line=\"36\"/>\n        <source>theDesk had a problem and has stopped working.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../crash/crashwidget.ui\" line=\"86\"/>\n        <source>Relaunch theDesk</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../crash/crashwidget.ui\" line=\"97\"/>\n        <source>Log Out</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../crash/crashwidget.ui\" line=\"151\"/>\n        <source>View Details</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../crash/crashwidget.cpp\" line=\"39\"/>\n        <source>theDesk couldn&apos;t start because of a problem.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SplashController</name>\n    <message>\n        <location filename=\"../splash/splashcontroller.cpp\" line=\"108\"/>\n        <source>Oh, Bonkers!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../splash/splashcontroller.cpp\" line=\"109\"/>\n        <source>theDesk had a problem and was restarted.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../splash/splashcontroller.cpp\" line=\"111\"/>\n        <source>View Details</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SplashWindow</name>\n    <message>\n        <location filename=\"../splashwindow.ui\" line=\"104\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/startdesk/startdesk_autogen/include/ui_splashwindow.h\" line=\"161\"/>\n        <source>Question</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../splashwindow.ui\" line=\"118\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/startdesk/startdesk_autogen/include/ui_splashwindow.h\" line=\"162\"/>\n        <source>Yes</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../splashwindow.ui\" line=\"129\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/startdesk/startdesk_autogen/include/ui_splashwindow.h\" line=\"163\"/>\n        <source>No</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "startdesk/translations/au_AU.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"au_AU\" sourcelanguage=\"en_US\">\n<context>\n    <name>BacktraceDialog</name>\n    <message>\n        <location filename=\"../crash/backtracedialog.ui\" line=\"14\"/>\n        <location filename=\"../crash/backtracedialog.ui\" line=\"35\"/>\n        <source>Error Details</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>BacktracePopover</name>\n    <message>\n        <location filename=\"../crash/backtracepopover.ui\" line=\"35\"/>\n        <source>Error Details</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>BacktraceWidget</name>\n    <message>\n        <location filename=\"../crash/backtracewidget.ui\" line=\"50\"/>\n        <source>Review the information below and ensure it does not contain any personal data. Attach the information to a bug report and we&apos;ll get back to you!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../crash/backtracewidget.ui\" line=\"66\"/>\n        <source>ACTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../crash/backtracewidget.ui\" line=\"73\"/>\n        <source>Save to file</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>CrashWidget</name>\n    <message>\n        <location filename=\"../crash/crashwidget.ui\" line=\"38\"/>\n        <source>Oh, Bonkers!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../crash/crashwidget.ui\" line=\"61\"/>\n        <location filename=\"../crash/crashwidget.cpp\" line=\"36\"/>\n        <source>theDesk had a problem and has stopped working.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../crash/crashwidget.ui\" line=\"86\"/>\n        <source>Relaunch theDesk</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../crash/crashwidget.ui\" line=\"97\"/>\n        <source>Log Out</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../crash/crashwidget.ui\" line=\"151\"/>\n        <source>View Details</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../crash/crashwidget.cpp\" line=\"39\"/>\n        <source>theDesk couldn&apos;t start because of a problem.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SplashController</name>\n    <message>\n        <location filename=\"../splash/splashcontroller.cpp\" line=\"108\"/>\n        <source>Oh, Bonkers!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../splash/splashcontroller.cpp\" line=\"109\"/>\n        <source>theDesk had a problem and was restarted.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../splash/splashcontroller.cpp\" line=\"111\"/>\n        <source>View Details</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SplashWindow</name>\n    <message>\n        <location filename=\"../splashwindow.ui\" line=\"104\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/startdesk/startdesk_autogen/include/ui_splashwindow.h\" line=\"161\"/>\n        <source>Question</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../splashwindow.ui\" line=\"118\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/startdesk/startdesk_autogen/include/ui_splashwindow.h\" line=\"162\"/>\n        <source>Yes</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../splashwindow.ui\" line=\"129\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/startdesk/startdesk_autogen/include/ui_splashwindow.h\" line=\"163\"/>\n        <source>No</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "startdesk/translations/cy.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"cy\" sourcelanguage=\"en_US\">\n<context>\n    <name>BacktraceDialog</name>\n    <message>\n        <location filename=\"../crash/backtracedialog.ui\" line=\"14\"/>\n        <location filename=\"../crash/backtracedialog.ui\" line=\"35\"/>\n        <source>Error Details</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>BacktracePopover</name>\n    <message>\n        <location filename=\"../crash/backtracepopover.ui\" line=\"35\"/>\n        <source>Error Details</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>BacktraceWidget</name>\n    <message>\n        <location filename=\"../crash/backtracewidget.ui\" line=\"50\"/>\n        <source>Review the information below and ensure it does not contain any personal data. Attach the information to a bug report and we&apos;ll get back to you!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../crash/backtracewidget.ui\" line=\"66\"/>\n        <source>ACTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../crash/backtracewidget.ui\" line=\"73\"/>\n        <source>Save to file</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>CrashWidget</name>\n    <message>\n        <location filename=\"../crash/crashwidget.ui\" line=\"38\"/>\n        <source>Oh, Bonkers!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../crash/crashwidget.ui\" line=\"61\"/>\n        <location filename=\"../crash/crashwidget.cpp\" line=\"36\"/>\n        <source>theDesk had a problem and has stopped working.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../crash/crashwidget.ui\" line=\"86\"/>\n        <source>Relaunch theDesk</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../crash/crashwidget.ui\" line=\"97\"/>\n        <source>Log Out</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../crash/crashwidget.ui\" line=\"151\"/>\n        <source>View Details</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../crash/crashwidget.cpp\" line=\"39\"/>\n        <source>theDesk couldn&apos;t start because of a problem.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SplashController</name>\n    <message>\n        <location filename=\"../splash/splashcontroller.cpp\" line=\"108\"/>\n        <source>Oh, Bonkers!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../splash/splashcontroller.cpp\" line=\"109\"/>\n        <source>theDesk had a problem and was restarted.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../splash/splashcontroller.cpp\" line=\"111\"/>\n        <source>View Details</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SplashWindow</name>\n    <message>\n        <location filename=\"../splashwindow.ui\" line=\"104\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/startdesk/startdesk_autogen/include/ui_splashwindow.h\" line=\"161\"/>\n        <source>Question</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../splashwindow.ui\" line=\"118\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/startdesk/startdesk_autogen/include/ui_splashwindow.h\" line=\"162\"/>\n        <source>Yes</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../splashwindow.ui\" line=\"129\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/startdesk/startdesk_autogen/include/ui_splashwindow.h\" line=\"163\"/>\n        <source>No</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "startdesk/translations/da.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"da\" sourcelanguage=\"en_US\">\n<context>\n    <name>BacktraceDialog</name>\n    <message>\n        <location filename=\"../crash/backtracedialog.ui\" line=\"14\"/>\n        <location filename=\"../crash/backtracedialog.ui\" line=\"35\"/>\n        <source>Error Details</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>BacktracePopover</name>\n    <message>\n        <location filename=\"../crash/backtracepopover.ui\" line=\"35\"/>\n        <source>Error Details</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>BacktraceWidget</name>\n    <message>\n        <location filename=\"../crash/backtracewidget.ui\" line=\"50\"/>\n        <source>Review the information below and ensure it does not contain any personal data. Attach the information to a bug report and we&apos;ll get back to you!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../crash/backtracewidget.ui\" line=\"66\"/>\n        <source>ACTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../crash/backtracewidget.ui\" line=\"73\"/>\n        <source>Save to file</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>CrashWidget</name>\n    <message>\n        <location filename=\"../crash/crashwidget.ui\" line=\"38\"/>\n        <source>Oh, Bonkers!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../crash/crashwidget.ui\" line=\"61\"/>\n        <location filename=\"../crash/crashwidget.cpp\" line=\"36\"/>\n        <source>theDesk had a problem and has stopped working.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../crash/crashwidget.ui\" line=\"86\"/>\n        <source>Relaunch theDesk</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../crash/crashwidget.ui\" line=\"97\"/>\n        <source>Log Out</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../crash/crashwidget.ui\" line=\"151\"/>\n        <source>View Details</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../crash/crashwidget.cpp\" line=\"39\"/>\n        <source>theDesk couldn&apos;t start because of a problem.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SplashController</name>\n    <message>\n        <location filename=\"../splash/splashcontroller.cpp\" line=\"108\"/>\n        <source>Oh, Bonkers!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../splash/splashcontroller.cpp\" line=\"109\"/>\n        <source>theDesk had a problem and was restarted.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../splash/splashcontroller.cpp\" line=\"111\"/>\n        <source>View Details</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SplashWindow</name>\n    <message>\n        <location filename=\"../splashwindow.ui\" line=\"104\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/startdesk/startdesk_autogen/include/ui_splashwindow.h\" line=\"161\"/>\n        <source>Question</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../splashwindow.ui\" line=\"118\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/startdesk/startdesk_autogen/include/ui_splashwindow.h\" line=\"162\"/>\n        <source>Yes</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../splashwindow.ui\" line=\"129\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/startdesk/startdesk_autogen/include/ui_splashwindow.h\" line=\"163\"/>\n        <source>No</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "startdesk/translations/de.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"de\" sourcelanguage=\"en_US\">\n<context>\n    <name>BacktraceDialog</name>\n    <message>\n        <location filename=\"../crash/backtracedialog.ui\" line=\"14\"/>\n        <location filename=\"../crash/backtracedialog.ui\" line=\"35\"/>\n        <source>Error Details</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>BacktracePopover</name>\n    <message>\n        <location filename=\"../crash/backtracepopover.ui\" line=\"35\"/>\n        <source>Error Details</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>BacktraceWidget</name>\n    <message>\n        <location filename=\"../crash/backtracewidget.ui\" line=\"50\"/>\n        <source>Review the information below and ensure it does not contain any personal data. Attach the information to a bug report and we&apos;ll get back to you!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../crash/backtracewidget.ui\" line=\"66\"/>\n        <source>ACTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../crash/backtracewidget.ui\" line=\"73\"/>\n        <source>Save to file</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>CrashWidget</name>\n    <message>\n        <location filename=\"../crash/crashwidget.ui\" line=\"38\"/>\n        <source>Oh, Bonkers!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../crash/crashwidget.ui\" line=\"61\"/>\n        <location filename=\"../crash/crashwidget.cpp\" line=\"36\"/>\n        <source>theDesk had a problem and has stopped working.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../crash/crashwidget.ui\" line=\"86\"/>\n        <source>Relaunch theDesk</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../crash/crashwidget.ui\" line=\"97\"/>\n        <source>Log Out</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../crash/crashwidget.ui\" line=\"151\"/>\n        <source>View Details</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../crash/crashwidget.cpp\" line=\"39\"/>\n        <source>theDesk couldn&apos;t start because of a problem.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SplashController</name>\n    <message>\n        <location filename=\"../splash/splashcontroller.cpp\" line=\"108\"/>\n        <source>Oh, Bonkers!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../splash/splashcontroller.cpp\" line=\"109\"/>\n        <source>theDesk had a problem and was restarted.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../splash/splashcontroller.cpp\" line=\"111\"/>\n        <source>View Details</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SplashWindow</name>\n    <message>\n        <location filename=\"../splashwindow.ui\" line=\"104\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/startdesk/startdesk_autogen/include/ui_splashwindow.h\" line=\"161\"/>\n        <source>Question</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../splashwindow.ui\" line=\"118\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/startdesk/startdesk_autogen/include/ui_splashwindow.h\" line=\"162\"/>\n        <source>Yes</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../splashwindow.ui\" line=\"129\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/startdesk/startdesk_autogen/include/ui_splashwindow.h\" line=\"163\"/>\n        <source>No</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "startdesk/translations/en_GB.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"en_GB\" sourcelanguage=\"en_US\">\n<context>\n    <name>BacktraceDialog</name>\n    <message>\n        <location filename=\"../crash/backtracedialog.ui\" line=\"14\"/>\n        <location filename=\"../crash/backtracedialog.ui\" line=\"35\"/>\n        <source>Error Details</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>BacktracePopover</name>\n    <message>\n        <location filename=\"../crash/backtracepopover.ui\" line=\"35\"/>\n        <source>Error Details</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>BacktraceWidget</name>\n    <message>\n        <location filename=\"../crash/backtracewidget.ui\" line=\"50\"/>\n        <source>Review the information below and ensure it does not contain any personal data. Attach the information to a bug report and we&apos;ll get back to you!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../crash/backtracewidget.ui\" line=\"66\"/>\n        <source>ACTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../crash/backtracewidget.ui\" line=\"73\"/>\n        <source>Save to file</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>CrashWidget</name>\n    <message>\n        <location filename=\"../crash/crashwidget.ui\" line=\"38\"/>\n        <source>Oh, Bonkers!</source>\n        <translation>Oh, Bonkers!</translation>\n    </message>\n    <message>\n        <location filename=\"../crash/crashwidget.ui\" line=\"61\"/>\n        <location filename=\"../crash/crashwidget.cpp\" line=\"36\"/>\n        <source>theDesk had a problem and has stopped working.</source>\n        <translation>theDesk had a problem and has stopped working.</translation>\n    </message>\n    <message>\n        <location filename=\"../crash/crashwidget.ui\" line=\"86\"/>\n        <source>Relaunch theDesk</source>\n        <translation>Relaunch theDesk</translation>\n    </message>\n    <message>\n        <location filename=\"../crash/crashwidget.ui\" line=\"97\"/>\n        <source>Log Out</source>\n        <translation>Log Out</translation>\n    </message>\n    <message>\n        <location filename=\"../crash/crashwidget.ui\" line=\"151\"/>\n        <source>View Details</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../crash/crashwidget.cpp\" line=\"39\"/>\n        <source>theDesk couldn&apos;t start because of a problem.</source>\n        <translation>theDesk couldn&apos;t start because of a problem.</translation>\n    </message>\n</context>\n<context>\n    <name>SplashController</name>\n    <message>\n        <location filename=\"../splash/splashcontroller.cpp\" line=\"108\"/>\n        <source>Oh, Bonkers!</source>\n        <translation type=\"unfinished\">Oh, Bonkers!</translation>\n    </message>\n    <message>\n        <location filename=\"../splash/splashcontroller.cpp\" line=\"109\"/>\n        <source>theDesk had a problem and was restarted.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../splash/splashcontroller.cpp\" line=\"111\"/>\n        <source>View Details</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SplashWindow</name>\n    <message>\n        <location filename=\"../splashwindow.ui\" line=\"104\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/startdesk/startdesk_autogen/include/ui_splashwindow.h\" line=\"161\"/>\n        <source>Question</source>\n        <translation>Question</translation>\n    </message>\n    <message>\n        <location filename=\"../splashwindow.ui\" line=\"118\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/startdesk/startdesk_autogen/include/ui_splashwindow.h\" line=\"162\"/>\n        <source>Yes</source>\n        <translation>Yes</translation>\n    </message>\n    <message>\n        <location filename=\"../splashwindow.ui\" line=\"129\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/startdesk/startdesk_autogen/include/ui_splashwindow.h\" line=\"163\"/>\n        <source>No</source>\n        <translation>No</translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "startdesk/translations/en_US.qm",
    "content": "<d\u0018!\u001c`"
  },
  {
    "path": "startdesk/translations/en_US.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" sourcelanguage=\"en_US\">\n<context>\n    <name>BacktraceDialog</name>\n    <message>\n        <location filename=\"../crash/backtracedialog.ui\" line=\"14\"/>\n        <location filename=\"../crash/backtracedialog.ui\" line=\"35\"/>\n        <source>Error Details</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>BacktracePopover</name>\n    <message>\n        <location filename=\"../crash/backtracepopover.ui\" line=\"35\"/>\n        <source>Error Details</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>BacktraceWidget</name>\n    <message>\n        <location filename=\"../crash/backtracewidget.ui\" line=\"50\"/>\n        <source>Review the information below and ensure it does not contain any personal data. Attach the information to a bug report and we&apos;ll get back to you!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../crash/backtracewidget.ui\" line=\"66\"/>\n        <source>ACTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../crash/backtracewidget.ui\" line=\"73\"/>\n        <source>Save to file</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>CrashWidget</name>\n    <message>\n        <location filename=\"../crash/crashwidget.ui\" line=\"38\"/>\n        <source>Oh, Bonkers!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../crash/crashwidget.ui\" line=\"61\"/>\n        <location filename=\"../crash/crashwidget.cpp\" line=\"36\"/>\n        <source>theDesk had a problem and has stopped working.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../crash/crashwidget.ui\" line=\"86\"/>\n        <source>Relaunch theDesk</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../crash/crashwidget.ui\" line=\"97\"/>\n        <source>Log Out</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../crash/crashwidget.ui\" line=\"151\"/>\n        <source>View Details</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../crash/crashwidget.cpp\" line=\"39\"/>\n        <source>theDesk couldn&apos;t start because of a problem.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SplashController</name>\n    <message>\n        <location filename=\"../splash/splashcontroller.cpp\" line=\"108\"/>\n        <source>Oh, Bonkers!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../splash/splashcontroller.cpp\" line=\"109\"/>\n        <source>theDesk had a problem and was restarted.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../splash/splashcontroller.cpp\" line=\"111\"/>\n        <source>View Details</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SplashWindow</name>\n    <message>\n        <location filename=\"../splashwindow.ui\" line=\"104\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/startdesk/startdesk_autogen/include/ui_splashwindow.h\" line=\"161\"/>\n        <source>Question</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../splashwindow.ui\" line=\"118\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/startdesk/startdesk_autogen/include/ui_splashwindow.h\" line=\"162\"/>\n        <source>Yes</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../splashwindow.ui\" line=\"129\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/startdesk/startdesk_autogen/include/ui_splashwindow.h\" line=\"163\"/>\n        <source>No</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "startdesk/translations/es.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"es\" sourcelanguage=\"en_US\">\n<context>\n    <name>BacktraceDialog</name>\n    <message>\n        <location filename=\"../crash/backtracedialog.ui\" line=\"14\"/>\n        <location filename=\"../crash/backtracedialog.ui\" line=\"35\"/>\n        <source>Error Details</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>BacktracePopover</name>\n    <message>\n        <location filename=\"../crash/backtracepopover.ui\" line=\"35\"/>\n        <source>Error Details</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>BacktraceWidget</name>\n    <message>\n        <location filename=\"../crash/backtracewidget.ui\" line=\"50\"/>\n        <source>Review the information below and ensure it does not contain any personal data. Attach the information to a bug report and we&apos;ll get back to you!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../crash/backtracewidget.ui\" line=\"66\"/>\n        <source>ACTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../crash/backtracewidget.ui\" line=\"73\"/>\n        <source>Save to file</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>CrashWidget</name>\n    <message>\n        <location filename=\"../crash/crashwidget.ui\" line=\"38\"/>\n        <source>Oh, Bonkers!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../crash/crashwidget.ui\" line=\"61\"/>\n        <location filename=\"../crash/crashwidget.cpp\" line=\"36\"/>\n        <source>theDesk had a problem and has stopped working.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../crash/crashwidget.ui\" line=\"86\"/>\n        <source>Relaunch theDesk</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../crash/crashwidget.ui\" line=\"97\"/>\n        <source>Log Out</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../crash/crashwidget.ui\" line=\"151\"/>\n        <source>View Details</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../crash/crashwidget.cpp\" line=\"39\"/>\n        <source>theDesk couldn&apos;t start because of a problem.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SplashController</name>\n    <message>\n        <location filename=\"../splash/splashcontroller.cpp\" line=\"108\"/>\n        <source>Oh, Bonkers!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../splash/splashcontroller.cpp\" line=\"109\"/>\n        <source>theDesk had a problem and was restarted.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../splash/splashcontroller.cpp\" line=\"111\"/>\n        <source>View Details</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SplashWindow</name>\n    <message>\n        <location filename=\"../splashwindow.ui\" line=\"104\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/startdesk/startdesk_autogen/include/ui_splashwindow.h\" line=\"161\"/>\n        <source>Question</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../splashwindow.ui\" line=\"118\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/startdesk/startdesk_autogen/include/ui_splashwindow.h\" line=\"162\"/>\n        <source>Yes</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../splashwindow.ui\" line=\"129\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/startdesk/startdesk_autogen/include/ui_splashwindow.h\" line=\"163\"/>\n        <source>No</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "startdesk/translations/es_VE.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"es_VE\" sourcelanguage=\"en_US\">\n<context>\n    <name>BacktraceDialog</name>\n    <message>\n        <location filename=\"../crash/backtracedialog.ui\" line=\"14\"/>\n        <location filename=\"../crash/backtracedialog.ui\" line=\"35\"/>\n        <source>Error Details</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>BacktracePopover</name>\n    <message>\n        <location filename=\"../crash/backtracepopover.ui\" line=\"35\"/>\n        <source>Error Details</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>BacktraceWidget</name>\n    <message>\n        <location filename=\"../crash/backtracewidget.ui\" line=\"50\"/>\n        <source>Review the information below and ensure it does not contain any personal data. Attach the information to a bug report and we&apos;ll get back to you!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../crash/backtracewidget.ui\" line=\"66\"/>\n        <source>ACTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../crash/backtracewidget.ui\" line=\"73\"/>\n        <source>Save to file</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>CrashWidget</name>\n    <message>\n        <location filename=\"../crash/crashwidget.ui\" line=\"38\"/>\n        <source>Oh, Bonkers!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../crash/crashwidget.ui\" line=\"61\"/>\n        <location filename=\"../crash/crashwidget.cpp\" line=\"36\"/>\n        <source>theDesk had a problem and has stopped working.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../crash/crashwidget.ui\" line=\"86\"/>\n        <source>Relaunch theDesk</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../crash/crashwidget.ui\" line=\"97\"/>\n        <source>Log Out</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../crash/crashwidget.ui\" line=\"151\"/>\n        <source>View Details</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../crash/crashwidget.cpp\" line=\"39\"/>\n        <source>theDesk couldn&apos;t start because of a problem.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SplashController</name>\n    <message>\n        <location filename=\"../splash/splashcontroller.cpp\" line=\"108\"/>\n        <source>Oh, Bonkers!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../splash/splashcontroller.cpp\" line=\"109\"/>\n        <source>theDesk had a problem and was restarted.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../splash/splashcontroller.cpp\" line=\"111\"/>\n        <source>View Details</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SplashWindow</name>\n    <message>\n        <location filename=\"../splashwindow.ui\" line=\"104\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/startdesk/startdesk_autogen/include/ui_splashwindow.h\" line=\"161\"/>\n        <source>Question</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../splashwindow.ui\" line=\"118\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/startdesk/startdesk_autogen/include/ui_splashwindow.h\" line=\"162\"/>\n        <source>Yes</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../splashwindow.ui\" line=\"129\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/startdesk/startdesk_autogen/include/ui_splashwindow.h\" line=\"163\"/>\n        <source>No</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "startdesk/translations/id.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"id\" sourcelanguage=\"en_US\">\n<context>\n    <name>BacktraceDialog</name>\n    <message>\n        <location filename=\"../crash/backtracedialog.ui\" line=\"14\"/>\n        <location filename=\"../crash/backtracedialog.ui\" line=\"35\"/>\n        <source>Error Details</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>BacktracePopover</name>\n    <message>\n        <location filename=\"../crash/backtracepopover.ui\" line=\"35\"/>\n        <source>Error Details</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>BacktraceWidget</name>\n    <message>\n        <location filename=\"../crash/backtracewidget.ui\" line=\"50\"/>\n        <source>Review the information below and ensure it does not contain any personal data. Attach the information to a bug report and we&apos;ll get back to you!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../crash/backtracewidget.ui\" line=\"66\"/>\n        <source>ACTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../crash/backtracewidget.ui\" line=\"73\"/>\n        <source>Save to file</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>CrashWidget</name>\n    <message>\n        <location filename=\"../crash/crashwidget.ui\" line=\"38\"/>\n        <source>Oh, Bonkers!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../crash/crashwidget.ui\" line=\"61\"/>\n        <location filename=\"../crash/crashwidget.cpp\" line=\"36\"/>\n        <source>theDesk had a problem and has stopped working.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../crash/crashwidget.ui\" line=\"86\"/>\n        <source>Relaunch theDesk</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../crash/crashwidget.ui\" line=\"97\"/>\n        <source>Log Out</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../crash/crashwidget.ui\" line=\"151\"/>\n        <source>View Details</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../crash/crashwidget.cpp\" line=\"39\"/>\n        <source>theDesk couldn&apos;t start because of a problem.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SplashController</name>\n    <message>\n        <location filename=\"../splash/splashcontroller.cpp\" line=\"108\"/>\n        <source>Oh, Bonkers!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../splash/splashcontroller.cpp\" line=\"109\"/>\n        <source>theDesk had a problem and was restarted.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../splash/splashcontroller.cpp\" line=\"111\"/>\n        <source>View Details</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SplashWindow</name>\n    <message>\n        <location filename=\"../splashwindow.ui\" line=\"104\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/startdesk/startdesk_autogen/include/ui_splashwindow.h\" line=\"161\"/>\n        <source>Question</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../splashwindow.ui\" line=\"118\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/startdesk/startdesk_autogen/include/ui_splashwindow.h\" line=\"162\"/>\n        <source>Yes</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../splashwindow.ui\" line=\"129\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/startdesk/startdesk_autogen/include/ui_splashwindow.h\" line=\"163\"/>\n        <source>No</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "startdesk/translations/nl.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"nl\" sourcelanguage=\"en_US\">\n<context>\n    <name>BacktraceDialog</name>\n    <message>\n        <location filename=\"../crash/backtracedialog.ui\" line=\"14\"/>\n        <location filename=\"../crash/backtracedialog.ui\" line=\"35\"/>\n        <source>Error Details</source>\n        <translation>Foutdetails</translation>\n    </message>\n</context>\n<context>\n    <name>BacktracePopover</name>\n    <message>\n        <location filename=\"../crash/backtracepopover.ui\" line=\"35\"/>\n        <source>Error Details</source>\n        <translation>Foutdetails</translation>\n    </message>\n</context>\n<context>\n    <name>BacktraceWidget</name>\n    <message>\n        <location filename=\"../crash/backtracewidget.ui\" line=\"50\"/>\n        <source>Review the information below and ensure it does not contain any personal data. Attach the information to a bug report and we&apos;ll get back to you!</source>\n        <translation>Bekijk de gegevens hieronder en zorg ervoor dat er geen persoonlijke gegevens in staan. Voeg deze informatie toe aan een bugrapport en dan komen we bij je terug!</translation>\n    </message>\n    <message>\n        <location filename=\"../crash/backtracewidget.ui\" line=\"66\"/>\n        <source>ACTIONS</source>\n        <translation>ACTIES</translation>\n    </message>\n    <message>\n        <location filename=\"../crash/backtracewidget.ui\" line=\"73\"/>\n        <source>Save to file</source>\n        <translation>Opslaan naar bestand</translation>\n    </message>\n</context>\n<context>\n    <name>CrashWidget</name>\n    <message>\n        <location filename=\"../crash/crashwidget.ui\" line=\"38\"/>\n        <source>Oh, Bonkers!</source>\n        <translation type=\"unfinished\">Oh nee!</translation>\n    </message>\n    <message>\n        <location filename=\"../crash/crashwidget.ui\" line=\"61\"/>\n        <location filename=\"../crash/crashwidget.cpp\" line=\"36\"/>\n        <source>theDesk had a problem and has stopped working.</source>\n        <translation>theDesk had een probleem en werkt niet meer.</translation>\n    </message>\n    <message>\n        <location filename=\"../crash/crashwidget.ui\" line=\"86\"/>\n        <source>Relaunch theDesk</source>\n        <translation>theDesk Herstarten</translation>\n    </message>\n    <message>\n        <location filename=\"../crash/crashwidget.ui\" line=\"97\"/>\n        <source>Log Out</source>\n        <translation>Uitloggen</translation>\n    </message>\n    <message>\n        <location filename=\"../crash/crashwidget.ui\" line=\"151\"/>\n        <source>View Details</source>\n        <translation>Details Weergeven</translation>\n    </message>\n    <message>\n        <location filename=\"../crash/crashwidget.cpp\" line=\"39\"/>\n        <source>theDesk couldn&apos;t start because of a problem.</source>\n        <translation>theDesk kon niet opstarten door een probleem.</translation>\n    </message>\n</context>\n<context>\n    <name>SplashController</name>\n    <message>\n        <location filename=\"../splash/splashcontroller.cpp\" line=\"108\"/>\n        <source>Oh, Bonkers!</source>\n        <translation type=\"unfinished\">Oh nee!</translation>\n    </message>\n    <message>\n        <location filename=\"../splash/splashcontroller.cpp\" line=\"109\"/>\n        <source>theDesk had a problem and was restarted.</source>\n        <translation>theDesk had een probleem en is herstart.</translation>\n    </message>\n    <message>\n        <location filename=\"../splash/splashcontroller.cpp\" line=\"111\"/>\n        <source>View Details</source>\n        <translation>Details Weergeven</translation>\n    </message>\n</context>\n<context>\n    <name>SplashWindow</name>\n    <message>\n        <location filename=\"../splashwindow.ui\" line=\"104\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/startdesk/startdesk_autogen/include/ui_splashwindow.h\" line=\"161\"/>\n        <source>Question</source>\n        <translation>Vraag</translation>\n    </message>\n    <message>\n        <location filename=\"../splashwindow.ui\" line=\"118\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/startdesk/startdesk_autogen/include/ui_splashwindow.h\" line=\"162\"/>\n        <source>Yes</source>\n        <translation>Ja</translation>\n    </message>\n    <message>\n        <location filename=\"../splashwindow.ui\" line=\"129\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/startdesk/startdesk_autogen/include/ui_splashwindow.h\" line=\"163\"/>\n        <source>No</source>\n        <translation>Nee</translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "startdesk/translations/pl_PL.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"pl_PL\" sourcelanguage=\"en_US\">\n<context>\n    <name>BacktraceDialog</name>\n    <message>\n        <location filename=\"../crash/backtracedialog.ui\" line=\"14\"/>\n        <location filename=\"../crash/backtracedialog.ui\" line=\"35\"/>\n        <source>Error Details</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>BacktracePopover</name>\n    <message>\n        <location filename=\"../crash/backtracepopover.ui\" line=\"35\"/>\n        <source>Error Details</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>BacktraceWidget</name>\n    <message>\n        <location filename=\"../crash/backtracewidget.ui\" line=\"50\"/>\n        <source>Review the information below and ensure it does not contain any personal data. Attach the information to a bug report and we&apos;ll get back to you!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../crash/backtracewidget.ui\" line=\"66\"/>\n        <source>ACTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../crash/backtracewidget.ui\" line=\"73\"/>\n        <source>Save to file</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>CrashWidget</name>\n    <message>\n        <location filename=\"../crash/crashwidget.ui\" line=\"38\"/>\n        <source>Oh, Bonkers!</source>\n        <translation>O nie!</translation>\n    </message>\n    <message>\n        <location filename=\"../crash/crashwidget.ui\" line=\"61\"/>\n        <location filename=\"../crash/crashwidget.cpp\" line=\"36\"/>\n        <source>theDesk had a problem and has stopped working.</source>\n        <translation>Aplikacja theDesk miała problem i przestała działać.</translation>\n    </message>\n    <message>\n        <location filename=\"../crash/crashwidget.ui\" line=\"86\"/>\n        <source>Relaunch theDesk</source>\n        <translation>Uruchom ponownie theDesk</translation>\n    </message>\n    <message>\n        <location filename=\"../crash/crashwidget.ui\" line=\"97\"/>\n        <source>Log Out</source>\n        <translation>Wyloguj Sie</translation>\n    </message>\n    <message>\n        <location filename=\"../crash/crashwidget.ui\" line=\"151\"/>\n        <source>View Details</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../crash/crashwidget.cpp\" line=\"39\"/>\n        <source>theDesk couldn&apos;t start because of a problem.</source>\n        <translation>Aplikacja theDesk nie mogła zastartować bo jest problem.</translation>\n    </message>\n</context>\n<context>\n    <name>SplashController</name>\n    <message>\n        <location filename=\"../splash/splashcontroller.cpp\" line=\"108\"/>\n        <source>Oh, Bonkers!</source>\n        <translation type=\"unfinished\">O nie!</translation>\n    </message>\n    <message>\n        <location filename=\"../splash/splashcontroller.cpp\" line=\"109\"/>\n        <source>theDesk had a problem and was restarted.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../splash/splashcontroller.cpp\" line=\"111\"/>\n        <source>View Details</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SplashWindow</name>\n    <message>\n        <location filename=\"../splashwindow.ui\" line=\"104\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/startdesk/startdesk_autogen/include/ui_splashwindow.h\" line=\"161\"/>\n        <source>Question</source>\n        <translation>Pytanie</translation>\n    </message>\n    <message>\n        <location filename=\"../splashwindow.ui\" line=\"118\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/startdesk/startdesk_autogen/include/ui_splashwindow.h\" line=\"162\"/>\n        <source>Yes</source>\n        <translation>Tak</translation>\n    </message>\n    <message>\n        <location filename=\"../splashwindow.ui\" line=\"129\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/startdesk/startdesk_autogen/include/ui_splashwindow.h\" line=\"163\"/>\n        <source>No</source>\n        <translation>Nie</translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "startdesk/translations/pt_BR.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"pt_BR\" sourcelanguage=\"en_US\">\n<context>\n    <name>BacktraceDialog</name>\n    <message>\n        <location filename=\"../crash/backtracedialog.ui\" line=\"14\"/>\n        <location filename=\"../crash/backtracedialog.ui\" line=\"35\"/>\n        <source>Error Details</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>BacktracePopover</name>\n    <message>\n        <location filename=\"../crash/backtracepopover.ui\" line=\"35\"/>\n        <source>Error Details</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>BacktraceWidget</name>\n    <message>\n        <location filename=\"../crash/backtracewidget.ui\" line=\"50\"/>\n        <source>Review the information below and ensure it does not contain any personal data. Attach the information to a bug report and we&apos;ll get back to you!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../crash/backtracewidget.ui\" line=\"66\"/>\n        <source>ACTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../crash/backtracewidget.ui\" line=\"73\"/>\n        <source>Save to file</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>CrashWidget</name>\n    <message>\n        <location filename=\"../crash/crashwidget.ui\" line=\"38\"/>\n        <source>Oh, Bonkers!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../crash/crashwidget.ui\" line=\"61\"/>\n        <location filename=\"../crash/crashwidget.cpp\" line=\"36\"/>\n        <source>theDesk had a problem and has stopped working.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../crash/crashwidget.ui\" line=\"86\"/>\n        <source>Relaunch theDesk</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../crash/crashwidget.ui\" line=\"97\"/>\n        <source>Log Out</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../crash/crashwidget.ui\" line=\"151\"/>\n        <source>View Details</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../crash/crashwidget.cpp\" line=\"39\"/>\n        <source>theDesk couldn&apos;t start because of a problem.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SplashController</name>\n    <message>\n        <location filename=\"../splash/splashcontroller.cpp\" line=\"108\"/>\n        <source>Oh, Bonkers!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../splash/splashcontroller.cpp\" line=\"109\"/>\n        <source>theDesk had a problem and was restarted.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../splash/splashcontroller.cpp\" line=\"111\"/>\n        <source>View Details</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SplashWindow</name>\n    <message>\n        <location filename=\"../splashwindow.ui\" line=\"104\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/startdesk/startdesk_autogen/include/ui_splashwindow.h\" line=\"161\"/>\n        <source>Question</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../splashwindow.ui\" line=\"118\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/startdesk/startdesk_autogen/include/ui_splashwindow.h\" line=\"162\"/>\n        <source>Yes</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../splashwindow.ui\" line=\"129\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/startdesk/startdesk_autogen/include/ui_splashwindow.h\" line=\"163\"/>\n        <source>No</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "startdesk/translations/ro_RO.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"ro_RO\" sourcelanguage=\"en_US\">\n<context>\n    <name>BacktraceDialog</name>\n    <message>\n        <location filename=\"../crash/backtracedialog.ui\" line=\"14\"/>\n        <location filename=\"../crash/backtracedialog.ui\" line=\"35\"/>\n        <source>Error Details</source>\n        <translation>Detalii eroare</translation>\n    </message>\n</context>\n<context>\n    <name>BacktracePopover</name>\n    <message>\n        <location filename=\"../crash/backtracepopover.ui\" line=\"35\"/>\n        <source>Error Details</source>\n        <translation>Detalii eroare</translation>\n    </message>\n</context>\n<context>\n    <name>BacktraceWidget</name>\n    <message>\n        <location filename=\"../crash/backtracewidget.ui\" line=\"50\"/>\n        <source>Review the information below and ensure it does not contain any personal data. Attach the information to a bug report and we&apos;ll get back to you!</source>\n        <translation>Revizuiți informațiile de mai jos și asigurați-vă că nu conțin date personale. Atașați aceste date la un raport de eroare și o să vă contactăm!</translation>\n    </message>\n    <message>\n        <location filename=\"../crash/backtracewidget.ui\" line=\"66\"/>\n        <source>ACTIONS</source>\n        <translation>ACȚIUNI</translation>\n    </message>\n    <message>\n        <location filename=\"../crash/backtracewidget.ui\" line=\"73\"/>\n        <source>Save to file</source>\n        <translation>Salvați în fișier</translation>\n    </message>\n</context>\n<context>\n    <name>CrashWidget</name>\n    <message>\n        <location filename=\"../crash/crashwidget.ui\" line=\"38\"/>\n        <source>Oh, Bonkers!</source>\n        <translation>O, vai!</translation>\n    </message>\n    <message>\n        <location filename=\"../crash/crashwidget.ui\" line=\"61\"/>\n        <location filename=\"../crash/crashwidget.cpp\" line=\"36\"/>\n        <source>theDesk had a problem and has stopped working.</source>\n        <translation>theDesk a întâmpinat o problemă și s-a oprit.</translation>\n    </message>\n    <message>\n        <location filename=\"../crash/crashwidget.ui\" line=\"86\"/>\n        <source>Relaunch theDesk</source>\n        <translation>Repornește theDesk</translation>\n    </message>\n    <message>\n        <location filename=\"../crash/crashwidget.ui\" line=\"97\"/>\n        <source>Log Out</source>\n        <translation>Deconectare</translation>\n    </message>\n    <message>\n        <location filename=\"../crash/crashwidget.ui\" line=\"151\"/>\n        <source>View Details</source>\n        <translation type=\"unfinished\">Vedeți detaliile</translation>\n    </message>\n    <message>\n        <location filename=\"../crash/crashwidget.cpp\" line=\"39\"/>\n        <source>theDesk couldn&apos;t start because of a problem.</source>\n        <translation>theDesk nu a putut porni din cauza unei probleme.</translation>\n    </message>\n</context>\n<context>\n    <name>SplashController</name>\n    <message>\n        <location filename=\"../splash/splashcontroller.cpp\" line=\"108\"/>\n        <source>Oh, Bonkers!</source>\n        <translation>O, vai!</translation>\n    </message>\n    <message>\n        <location filename=\"../splash/splashcontroller.cpp\" line=\"109\"/>\n        <source>theDesk had a problem and was restarted.</source>\n        <translation>theDesk a întâmpinat o problemă și a fost repornit.</translation>\n    </message>\n    <message>\n        <location filename=\"../splash/splashcontroller.cpp\" line=\"111\"/>\n        <source>View Details</source>\n        <translation>Vedeți detaliile</translation>\n    </message>\n</context>\n<context>\n    <name>SplashWindow</name>\n    <message>\n        <location filename=\"../splashwindow.ui\" line=\"104\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/startdesk/startdesk_autogen/include/ui_splashwindow.h\" line=\"161\"/>\n        <source>Question</source>\n        <translation>Întrebare</translation>\n    </message>\n    <message>\n        <location filename=\"../splashwindow.ui\" line=\"118\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/startdesk/startdesk_autogen/include/ui_splashwindow.h\" line=\"162\"/>\n        <source>Yes</source>\n        <translation>Da</translation>\n    </message>\n    <message>\n        <location filename=\"../splashwindow.ui\" line=\"129\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/startdesk/startdesk_autogen/include/ui_splashwindow.h\" line=\"163\"/>\n        <source>No</source>\n        <translation>Nu</translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "startdesk/translations/sv.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"sv\" sourcelanguage=\"en_US\">\n<context>\n    <name>BacktraceDialog</name>\n    <message>\n        <location filename=\"../crash/backtracedialog.ui\" line=\"14\"/>\n        <location filename=\"../crash/backtracedialog.ui\" line=\"35\"/>\n        <source>Error Details</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>BacktracePopover</name>\n    <message>\n        <location filename=\"../crash/backtracepopover.ui\" line=\"35\"/>\n        <source>Error Details</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>BacktraceWidget</name>\n    <message>\n        <location filename=\"../crash/backtracewidget.ui\" line=\"50\"/>\n        <source>Review the information below and ensure it does not contain any personal data. Attach the information to a bug report and we&apos;ll get back to you!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../crash/backtracewidget.ui\" line=\"66\"/>\n        <source>ACTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../crash/backtracewidget.ui\" line=\"73\"/>\n        <source>Save to file</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>CrashWidget</name>\n    <message>\n        <location filename=\"../crash/crashwidget.ui\" line=\"38\"/>\n        <source>Oh, Bonkers!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../crash/crashwidget.ui\" line=\"61\"/>\n        <location filename=\"../crash/crashwidget.cpp\" line=\"36\"/>\n        <source>theDesk had a problem and has stopped working.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../crash/crashwidget.ui\" line=\"86\"/>\n        <source>Relaunch theDesk</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../crash/crashwidget.ui\" line=\"97\"/>\n        <source>Log Out</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../crash/crashwidget.ui\" line=\"151\"/>\n        <source>View Details</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../crash/crashwidget.cpp\" line=\"39\"/>\n        <source>theDesk couldn&apos;t start because of a problem.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SplashController</name>\n    <message>\n        <location filename=\"../splash/splashcontroller.cpp\" line=\"108\"/>\n        <source>Oh, Bonkers!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../splash/splashcontroller.cpp\" line=\"109\"/>\n        <source>theDesk had a problem and was restarted.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../splash/splashcontroller.cpp\" line=\"111\"/>\n        <source>View Details</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SplashWindow</name>\n    <message>\n        <location filename=\"../splashwindow.ui\" line=\"104\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/startdesk/startdesk_autogen/include/ui_splashwindow.h\" line=\"161\"/>\n        <source>Question</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../splashwindow.ui\" line=\"118\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/startdesk/startdesk_autogen/include/ui_splashwindow.h\" line=\"162\"/>\n        <source>Yes</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../splashwindow.ui\" line=\"129\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/startdesk/startdesk_autogen/include/ui_splashwindow.h\" line=\"163\"/>\n        <source>No</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "startdesk/translations/tr_TR.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"tr_TR\" sourcelanguage=\"en_US\">\n<context>\n    <name>BacktraceDialog</name>\n    <message>\n        <location filename=\"../crash/backtracedialog.ui\" line=\"14\"/>\n        <location filename=\"../crash/backtracedialog.ui\" line=\"35\"/>\n        <source>Error Details</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>BacktracePopover</name>\n    <message>\n        <location filename=\"../crash/backtracepopover.ui\" line=\"35\"/>\n        <source>Error Details</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>BacktraceWidget</name>\n    <message>\n        <location filename=\"../crash/backtracewidget.ui\" line=\"50\"/>\n        <source>Review the information below and ensure it does not contain any personal data. Attach the information to a bug report and we&apos;ll get back to you!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../crash/backtracewidget.ui\" line=\"66\"/>\n        <source>ACTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../crash/backtracewidget.ui\" line=\"73\"/>\n        <source>Save to file</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>CrashWidget</name>\n    <message>\n        <location filename=\"../crash/crashwidget.ui\" line=\"38\"/>\n        <source>Oh, Bonkers!</source>\n        <translation>Oh, Bir Kaçık!</translation>\n    </message>\n    <message>\n        <location filename=\"../crash/crashwidget.ui\" line=\"61\"/>\n        <location filename=\"../crash/crashwidget.cpp\" line=\"36\"/>\n        <source>theDesk had a problem and has stopped working.</source>\n        <translation>theDesk&apos;te bir sorun vardı ve çalışmayı durdurdu.</translation>\n    </message>\n    <message>\n        <location filename=\"../crash/crashwidget.ui\" line=\"86\"/>\n        <source>Relaunch theDesk</source>\n        <translation>TheDesk&apos;i yeniden başlatın</translation>\n    </message>\n    <message>\n        <location filename=\"../crash/crashwidget.ui\" line=\"97\"/>\n        <source>Log Out</source>\n        <translation>Çıkış Yap</translation>\n    </message>\n    <message>\n        <location filename=\"../crash/crashwidget.ui\" line=\"151\"/>\n        <source>View Details</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../crash/crashwidget.cpp\" line=\"39\"/>\n        <source>theDesk couldn&apos;t start because of a problem.</source>\n        <translation>theDesk bir sorun nedeniyle başlayamadı.</translation>\n    </message>\n</context>\n<context>\n    <name>SplashController</name>\n    <message>\n        <location filename=\"../splash/splashcontroller.cpp\" line=\"108\"/>\n        <source>Oh, Bonkers!</source>\n        <translation type=\"unfinished\">Oh, Bir Kaçık!</translation>\n    </message>\n    <message>\n        <location filename=\"../splash/splashcontroller.cpp\" line=\"109\"/>\n        <source>theDesk had a problem and was restarted.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../splash/splashcontroller.cpp\" line=\"111\"/>\n        <source>View Details</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SplashWindow</name>\n    <message>\n        <location filename=\"../splashwindow.ui\" line=\"104\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/startdesk/startdesk_autogen/include/ui_splashwindow.h\" line=\"161\"/>\n        <source>Question</source>\n        <translation>Soru</translation>\n    </message>\n    <message>\n        <location filename=\"../splashwindow.ui\" line=\"118\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/startdesk/startdesk_autogen/include/ui_splashwindow.h\" line=\"162\"/>\n        <source>Yes</source>\n        <translation>Evet</translation>\n    </message>\n    <message>\n        <location filename=\"../splashwindow.ui\" line=\"129\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/startdesk/startdesk_autogen/include/ui_splashwindow.h\" line=\"163\"/>\n        <source>No</source>\n        <translation>Yok</translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "startdesk/translations/vi_VN.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"vi_VN\" sourcelanguage=\"en_US\">\n<context>\n    <name>BacktraceDialog</name>\n    <message>\n        <location filename=\"../crash/backtracedialog.ui\" line=\"14\"/>\n        <location filename=\"../crash/backtracedialog.ui\" line=\"35\"/>\n        <source>Error Details</source>\n        <translation>Chi tiết về lỗi</translation>\n    </message>\n</context>\n<context>\n    <name>BacktracePopover</name>\n    <message>\n        <location filename=\"../crash/backtracepopover.ui\" line=\"35\"/>\n        <source>Error Details</source>\n        <translation>Chi tiết về lỗi</translation>\n    </message>\n</context>\n<context>\n    <name>BacktraceWidget</name>\n    <message>\n        <location filename=\"../crash/backtracewidget.ui\" line=\"50\"/>\n        <source>Review the information below and ensure it does not contain any personal data. Attach the information to a bug report and we&apos;ll get back to you!</source>\n        <translation>Vui lòng xem lại chi tiết dưới đây, và xác nhận nó không nhúng dữ liệu cá nhân. Đính kèm thông tin này vào một báo cáo lỗi, rồi chúng tôi hãy trả lời cho bạn!</translation>\n    </message>\n    <message>\n        <location filename=\"../crash/backtracewidget.ui\" line=\"66\"/>\n        <source>ACTIONS</source>\n        <translation>HOẠT ĐỘNG</translation>\n    </message>\n    <message>\n        <location filename=\"../crash/backtracewidget.ui\" line=\"73\"/>\n        <source>Save to file</source>\n        <translation>Lưu vào tệp</translation>\n    </message>\n</context>\n<context>\n    <name>CrashWidget</name>\n    <message>\n        <location filename=\"../crash/crashwidget.ui\" line=\"38\"/>\n        <source>Oh, Bonkers!</source>\n        <translation>Ủa?</translation>\n    </message>\n    <message>\n        <location filename=\"../crash/crashwidget.ui\" line=\"61\"/>\n        <location filename=\"../crash/crashwidget.cpp\" line=\"36\"/>\n        <source>theDesk had a problem and has stopped working.</source>\n        <translation>Rất tiếc, theDesk gặp vấn đề và bị buộc dừng.</translation>\n    </message>\n    <message>\n        <location filename=\"../crash/crashwidget.ui\" line=\"86\"/>\n        <source>Relaunch theDesk</source>\n        <translation>Khởi chạy theDesk lại</translation>\n    </message>\n    <message>\n        <location filename=\"../crash/crashwidget.ui\" line=\"97\"/>\n        <source>Log Out</source>\n        <translation>Đăng xuất</translation>\n    </message>\n    <message>\n        <location filename=\"../crash/crashwidget.ui\" line=\"151\"/>\n        <source>View Details</source>\n        <translation>Xem chi tiết</translation>\n    </message>\n    <message>\n        <location filename=\"../crash/crashwidget.cpp\" line=\"39\"/>\n        <source>theDesk couldn&apos;t start because of a problem.</source>\n        <translation>theDesk không thể khởi động vì một sự cố.</translation>\n    </message>\n</context>\n<context>\n    <name>SplashController</name>\n    <message>\n        <location filename=\"../splash/splashcontroller.cpp\" line=\"108\"/>\n        <source>Oh, Bonkers!</source>\n        <translation>Ủa?</translation>\n    </message>\n    <message>\n        <location filename=\"../splash/splashcontroller.cpp\" line=\"109\"/>\n        <source>theDesk had a problem and was restarted.</source>\n        <translation>theDesk đã xảy ra một lỗi, và đã khởi chạy lại.</translation>\n    </message>\n    <message>\n        <location filename=\"../splash/splashcontroller.cpp\" line=\"111\"/>\n        <source>View Details</source>\n        <translation>Xem chi tiết</translation>\n    </message>\n</context>\n<context>\n    <name>SplashWindow</name>\n    <message>\n        <location filename=\"../splashwindow.ui\" line=\"104\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/startdesk/startdesk_autogen/include/ui_splashwindow.h\" line=\"161\"/>\n        <source>Question</source>\n        <translation>Câu hỏi</translation>\n    </message>\n    <message>\n        <location filename=\"../splashwindow.ui\" line=\"118\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/startdesk/startdesk_autogen/include/ui_splashwindow.h\" line=\"162\"/>\n        <source>Yes</source>\n        <translation>Có</translation>\n    </message>\n    <message>\n        <location filename=\"../splashwindow.ui\" line=\"129\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/startdesk/startdesk_autogen/include/ui_splashwindow.h\" line=\"163\"/>\n        <source>No</source>\n        <translation>Không</translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "startdesk/translations/zh_CN.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"zh_CN\" sourcelanguage=\"en_US\">\n<context>\n    <name>BacktraceDialog</name>\n    <message>\n        <location filename=\"../crash/backtracedialog.ui\" line=\"14\"/>\n        <location filename=\"../crash/backtracedialog.ui\" line=\"35\"/>\n        <source>Error Details</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>BacktracePopover</name>\n    <message>\n        <location filename=\"../crash/backtracepopover.ui\" line=\"35\"/>\n        <source>Error Details</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>BacktraceWidget</name>\n    <message>\n        <location filename=\"../crash/backtracewidget.ui\" line=\"50\"/>\n        <source>Review the information below and ensure it does not contain any personal data. Attach the information to a bug report and we&apos;ll get back to you!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../crash/backtracewidget.ui\" line=\"66\"/>\n        <source>ACTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../crash/backtracewidget.ui\" line=\"73\"/>\n        <source>Save to file</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>CrashWidget</name>\n    <message>\n        <location filename=\"../crash/crashwidget.ui\" line=\"38\"/>\n        <source>Oh, Bonkers!</source>\n        <translation>糟糕！！</translation>\n    </message>\n    <message>\n        <location filename=\"../crash/crashwidget.ui\" line=\"61\"/>\n        <location filename=\"../crash/crashwidget.cpp\" line=\"36\"/>\n        <source>theDesk had a problem and has stopped working.</source>\n        <translation>theDesk遇到了错误并停止了运行。</translation>\n    </message>\n    <message>\n        <location filename=\"../crash/crashwidget.ui\" line=\"86\"/>\n        <source>Relaunch theDesk</source>\n        <translation>重启theDesk</translation>\n    </message>\n    <message>\n        <location filename=\"../crash/crashwidget.ui\" line=\"97\"/>\n        <source>Log Out</source>\n        <translation>注销</translation>\n    </message>\n    <message>\n        <location filename=\"../crash/crashwidget.ui\" line=\"151\"/>\n        <source>View Details</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../crash/crashwidget.cpp\" line=\"39\"/>\n        <source>theDesk couldn&apos;t start because of a problem.</source>\n        <translation>theDesk 因为某种原因不能启动。</translation>\n    </message>\n</context>\n<context>\n    <name>SplashController</name>\n    <message>\n        <location filename=\"../splash/splashcontroller.cpp\" line=\"108\"/>\n        <source>Oh, Bonkers!</source>\n        <translation type=\"unfinished\">糟糕！！</translation>\n    </message>\n    <message>\n        <location filename=\"../splash/splashcontroller.cpp\" line=\"109\"/>\n        <source>theDesk had a problem and was restarted.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../splash/splashcontroller.cpp\" line=\"111\"/>\n        <source>View Details</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SplashWindow</name>\n    <message>\n        <location filename=\"../splashwindow.ui\" line=\"104\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/startdesk/startdesk_autogen/include/ui_splashwindow.h\" line=\"161\"/>\n        <source>Question</source>\n        <translation>问题</translation>\n    </message>\n    <message>\n        <location filename=\"../splashwindow.ui\" line=\"118\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/startdesk/startdesk_autogen/include/ui_splashwindow.h\" line=\"162\"/>\n        <source>Yes</source>\n        <translation>是</translation>\n    </message>\n    <message>\n        <location filename=\"../splashwindow.ui\" line=\"129\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/startdesk/startdesk_autogen/include/ui_splashwindow.h\" line=\"163\"/>\n        <source>No</source>\n        <translation>否</translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "startdesk/translations/zu_ZA.qm",
    "content": "<d\u0018!\u001c`"
  },
  {
    "path": "startdesk/translations/zu_ZA.ts",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" sourcelanguage=\"en_US\">\n<context>\n    <name>BacktraceDialog</name>\n    <message>\n        <location filename=\"../crash/backtracedialog.ui\" line=\"14\"/>\n        <location filename=\"../crash/backtracedialog.ui\" line=\"35\"/>\n        <source>Error Details</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>BacktracePopover</name>\n    <message>\n        <location filename=\"../crash/backtracepopover.ui\" line=\"35\"/>\n        <source>Error Details</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>BacktraceWidget</name>\n    <message>\n        <location filename=\"../crash/backtracewidget.ui\" line=\"50\"/>\n        <source>Review the information below and ensure it does not contain any personal data. Attach the information to a bug report and we&apos;ll get back to you!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../crash/backtracewidget.ui\" line=\"66\"/>\n        <source>ACTIONS</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../crash/backtracewidget.ui\" line=\"73\"/>\n        <source>Save to file</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>CrashWidget</name>\n    <message>\n        <location filename=\"../crash/crashwidget.ui\" line=\"38\"/>\n        <source>Oh, Bonkers!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../crash/crashwidget.ui\" line=\"61\"/>\n        <location filename=\"../crash/crashwidget.cpp\" line=\"36\"/>\n        <source>theDesk had a problem and has stopped working.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../crash/crashwidget.ui\" line=\"86\"/>\n        <source>Relaunch theDesk</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../crash/crashwidget.ui\" line=\"97\"/>\n        <source>Log Out</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../crash/crashwidget.ui\" line=\"151\"/>\n        <source>View Details</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../crash/crashwidget.cpp\" line=\"39\"/>\n        <source>theDesk couldn&apos;t start because of a problem.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SplashController</name>\n    <message>\n        <location filename=\"../splash/splashcontroller.cpp\" line=\"108\"/>\n        <source>Oh, Bonkers!</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../splash/splashcontroller.cpp\" line=\"109\"/>\n        <source>theDesk had a problem and was restarted.</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../splash/splashcontroller.cpp\" line=\"111\"/>\n        <source>View Details</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n<context>\n    <name>SplashWindow</name>\n    <message>\n        <location filename=\"../splashwindow.ui\" line=\"104\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/startdesk/startdesk_autogen/include/ui_splashwindow.h\" line=\"161\"/>\n        <source>Question</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../splashwindow.ui\" line=\"118\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/startdesk/startdesk_autogen/include/ui_splashwindow.h\" line=\"162\"/>\n        <source>Yes</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n    <message>\n        <location filename=\"../splashwindow.ui\" line=\"129\"/>\n        <location filename=\"../../../build-thedesk-Chroot_6-Debug/startdesk/startdesk_autogen/include/ui_splashwindow.h\" line=\"163\"/>\n        <source>No</source>\n        <translation type=\"unfinished\"></translation>\n    </message>\n</context>\n</TS>\n"
  },
  {
    "path": "startdesk/wayfire-thedesk-config.conf",
    "content": "# Default config for Wayfire\n#\n# Copy this to ~/.config/wayfire.ini and edit it to your liking.\n#\n# Take the tutorial to get started.\n# https://github.com/WayfireWM/wayfire/wiki/Tutorial\n#\n# Read the Configuration document for a complete reference.\n# https://github.com/WayfireWM/wayfire/wiki/Configuration\n\n# Input configuration ──────────────────────────────────────────────────────────\n\n# Example configuration:\n#\n# [input]\n# xkb_layout = us,fr\n# xkb_variant = dvorak,bepo\n#\n# See Input options for a complete reference.\n# https://github.com/WayfireWM/wayfire/wiki/Configuration#input\n\n# Output configuration ─────────────────────────────────────────────────────────\n\n# Example configuration:\n#\n# [output:eDP-1]\n# mode = 1920x1080@60000\n# layout = 0,0\n# transform = normal\n# scale = 1.000000\n#\n# You can get the names of your outputs with wlr-randr.\n# https://github.com/emersion/wlr-randr\n#\n# See also kanshi for configuring your outputs automatically.\n# https://wayland.emersion.fr/kanshi/\n#\n# See Output options for a complete reference.\n# https://github.com/WayfireWM/wayfire/wiki/Configuration#output\n\n#[output:HDMI-A-1]\n#mode=3840x2160@30000\n\n# Core options ─────────────────────────────────────────────────────────────────\n\n[core]\n\n# List of plugins to be enabled.\n# See the Configuration document for a complete list.\nplugins = \\\n  alpha \\\n  animate \\\n  blur \\\n  cube \\\n  decoration \\\n  fast-switcher \\\n  fisheye \\\n  grid \\\n  idle \\\n  invert \\\n  move \\\n  oswitch \\\n  place \\\n  resize \\\n  switcher \\\n  vswitch \\\n  window-rules \\\n  wobbly \\\n  wrot \\\n  zoom \\\n  dbusqt \\\n  thedesk-keygrab \\\n  thedesk-startdesk \\\n  thedesk-a11y\n\n# Note: [blur] is not enabled by default, because it can be resource-intensive.\n# Feel free to add it to the list if you want it.\n# You can find its documentation here:\n# https://github.com/WayfireWM/wayfire/wiki/Configuration#blur\n\n# Close focused window.\nclose_top_view = <super> KEY_Q | <alt> KEY_F4\n\n# Workspaces arranged into a grid: 1 × 1.\nvwidth = 1\nvheight = 1\n\n# Prefer client-side decoration or server-side decoration\npreferred_decoration_mode = client\n\n# Mouse bindings ───────────────────────────────────────────────────────────────\n\n# Drag windows by holding down Super and left mouse button.\n[move]\nactivate = <super> BTN_LEFT\n\n# Resize them with right mouse button + Super.\n[resize]\nactivate = <super> BTN_RIGHT\n\n# Zoom in the desktop by scrolling + Super.\n[zoom]\nmodifier = <super>\n\n# Change opacity by scrolling with Super + Alt.\n[alpha]\nmodifier = <super> <alt>\n\n# Rotate windows with the mouse.\n[wrot]\nactivate = <super> <ctrl> BTN_RIGHT\n\n# Fisheye effect.\n[fisheye]\ntoggle = <super> <ctrl> KEY_F\n\n# Startup commands ─────────────────────────────────────────────────────────────\n\n[autostart]\n\n# Automatically start background and panel.\n# Set to false if you want to override the default clients.\nautostart_wf_shell = false\n\n# Applications ─────────────────────────────────────────────────────────────────\n\n[command]\n\n# Windows ──────────────────────────────────────────────────────────────────────\n\n# Position the windows in certain regions of the output.\n[grid]\n#\n# ⇱ ↑ ⇲   │ 7 8 9\n# ← f →   │ 4 5 6\n# ⇱ ↓ ⇲ d │ 1 2 3 0\n# ‾   ‾\nslot_bl = <super> KEY_KP1\nslot_b = <super> KEY_KP2\nslot_br = <super> KEY_KP3\nslot_l = <super> KEY_LEFT | <super> KEY_KP4\nslot_c = <super> KEY_UP | <super> KEY_KP5\nslot_r = <super> KEY_RIGHT | <super> KEY_KP6\nslot_tl = <super> KEY_KP7\nslot_t = <super> KEY_KP8\nslot_tr = <super> KEY_KP9\n# Restore default.\nrestore = <super> KEY_DOWN | <super> KEY_KP0\n\n# Change active window with an animation.\n[switcher]\nnext_view = <alt> KEY_TAB\nprev_view = <alt> <shift> KEY_TAB\n\n# Simple active window switcher.\n[fast-switcher]\nactivate = <alt> KEY_ESC\n\n# Workspaces ───────────────────────────────────────────────────────────────────\n\n# Switch to workspace.\n[vswitch]\nbinding_left = <ctrl> <super> KEY_LEFT\nbinding_down = <ctrl> <super> KEY_DOWN\nbinding_up = <ctrl> <super> KEY_UP\nbinding_right = <ctrl> <super> KEY_RIGHT\n# Move the focused window with the same key-bindings, but add Shift.\nbinding_win_left = <ctrl> <super> <shift> KEY_LEFT\nbinding_win_down = <ctrl> <super> <shift> KEY_DOWN\nbinding_win_up = <ctrl> <super> <shift> KEY_UP\nbinding_win_right = <ctrl> <super> <shift> KEY_RIGHT\n\n# Show the current workspace row as a cube.\n[cube]\nactivate = <ctrl> <alt> BTN_LEFT\n# Switch to the next or previous workspace.\n#rotate_left = <super> <ctrl> KEY_H\n#rotate_right = <super> <ctrl> KEY_L\n\n# Show an overview of all workspaces.\n[expo]\ntoggle = <super>\n# Select a workspace.\n# Workspaces are arranged into a grid of 3 × 3.\n# The numbering is left to right, line by line.\n#\n# ⇱ k ⇲\n# h ⏎ l\n# ⇱ j ⇲\n# ‾   ‾\n# See core.vwidth and core.vheight for configuring the grid.\nselect_workspace_1 = KEY_1\nselect_workspace_2 = KEY_2\nselect_workspace_3 = KEY_3\nselect_workspace_4 = KEY_4\nselect_workspace_5 = KEY_5\nselect_workspace_6 = KEY_6\nselect_workspace_7 = KEY_7\nselect_workspace_8 = KEY_8\nselect_workspace_9 = KEY_9\n\n# Outputs ──────────────────────────────────────────────────────────────────────\n\n# Change focused output.\n[oswitch]\n# Switch to the next output.\nnext_output = <super> KEY_O\n# Same with the window.\nnext_output_with_win = <super> <shift> KEY_O\n\n# Invert the colors of the whole output.\n[invert]\ntoggle = <super> KEY_I\n\n# Rules ────────────────────────────────────────────────────────────────────────\n\n# Example configuration:\n#\n# [window-rules]\n# maximize_alacritty = on created if app_id is \"Alacritty\" then maximize\n#\n# You can get the properties of your applications with the following command:\n# $ WAYLAND_DEBUG=1 alacritty 2>&1 | kak\n#\n# See Window rules for a complete reference.\n# https://github.com/WayfireWM/wayfire/wiki/Configuration#window-rules\n\n[animate]\nduration=250\n\n[blur]\nblur_by_default=all\n"
  },
  {
    "path": "theDesk.pro",
    "content": "TEMPLATE = subdirs\n\nlibraryproj.subdir = libthedesk\n\ndeskproj.subdir = desktop\ndeskproj.depends = libraryproj\n\npluginsproj.subdir = plugins\npluginsproj.depends = libraryproj\n\nstartdeskproj.subdir = startdesk\nstartdeskproj.depends = libraryproj\n\nSUBDIRS = libraryproj \\\n    deskproj \\\n    desktop-portal \\\n    platform \\\n    pluginsproj \\\n    polkitagent \\\n    startdeskproj\n\npackagesExist(wayfire) {\n    SUBDIRS +=  wayfire-plugins\n}\n"
  },
  {
    "path": "wayfire-plugins/CMakeLists.txt",
    "content": "find_program(WAYLAND_SCANNER wayland-scanner)\nif(NOT WAYLAND_SCANNER)\n    message(FATAL_ERROR \"wayland-scanner not found!\")\nendif()\nmessage(STATUS \"Found wayland-scanner: ${WAYLAND_SCANNER}\")\n\nfunction(thedesk_wayfire_plugin_wayland_protocols target)\n    set(multiValueArgs FILES)\n    cmake_parse_arguments(REGISTER_WAYLAND_PROTOCOL_EXTENSIONS \"\" \"\" \"${multiValueArgs}\" ${ARGN})\n\n    foreach(_file ${REGISTER_WAYLAND_PROTOCOL_EXTENSIONS_FILES})\n        get_filename_component(_basename ${_file} NAME_WE)\n\n        # Wayland scanner\n        add_custom_command(OUTPUT \"${CMAKE_CURRENT_BINARY_DIR}/wayland-${_basename}-server-protocol.h\"\n                           COMMAND ${WAYLAND_SCANNER} server-header ${_file} \"${CMAKE_CURRENT_BINARY_DIR}/wayland-${_basename}-server-protocol.h\"\n                           DEPENDS ${_file}\n                           VERBATIM)\n\n        add_custom_command(OUTPUT \"${CMAKE_CURRENT_BINARY_DIR}/wayland-${_basename}-server-protocol.c\"\n                           COMMAND ${WAYLAND_SCANNER} public-code ${_file} \"${CMAKE_CURRENT_BINARY_DIR}/wayland-${_basename}-server-protocol.c\"\n                           DEPENDS ${_file}\n                           VERBATIM)\n\n        # Include in sources\n        set_property(SOURCE \"${CMAKE_CURRENT_BINARY_DIR}/wayland-${_basename}-server-protocol.c\" PROPERTY SKIP_AUTOGEN ON)\n        set_property(SOURCE \"${CMAKE_CURRENT_BINARY_DIR}/wayland-${_basename}-server-protocol.h\" PROPERTY SKIP_AUTOGEN ON)\n        target_sources(${target} PRIVATE\n            \"${CMAKE_CURRENT_BINARY_DIR}/wayland-${_basename}-server-protocol.c\"\n            \"${CMAKE_CURRENT_BINARY_DIR}/wayland-${_basename}-server-protocol.h\")\n    endforeach()\nendfunction()\n\nadd_subdirectory(keygrab-plugin)\nadd_subdirectory(startdesk-plugin)\nadd_subdirectory(a11y-plugin)\n"
  },
  {
    "path": "wayfire-plugins/a11y-plugin/CMakeLists.txt",
    "content": "cmake_minimum_required(VERSION 3.24.0)\n\nproject(lib VERSION 1.0.0 LANGUAGES C CXX)\n\nfind_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Core)\nfind_package(libcontemporary REQUIRED)\ncntp_find_pkgconfig(wayfire wayfire)\ncntp_find_pkgconfig(pixman pixman-1)\n\nset(SOURCES\n    a11yplugin.cpp\n    abstracta11ycontroller.cpp\n    stickykeys.cpp\n    mousekeys.cpp\n)\n\nset(HEADERS\n    a11yplugin.h\n    abstracta11ycontroller.h\n    stickykeys.h\n    mousekeys.h\n)\n\nset(PRIVATE_HEADERS\n\n)\n\nadd_library(wf-thedesk-a11y SHARED)\ncntp_init(wf-thedesk-a11y 20)\nset_target_properties(wf-thedesk-a11y PROPERTIES\n        OUTPUT_NAME thedesk-a11y\n)\n\nfind_file(TDESKTOPENVIRONMENT_A11Y_FILE NAMES tdesktopenvironment-accessibility-v1.xml\n    PATHS ENV XDG_DATA_DIRS\n    PATH_SUFFIXES libtdesktopenvironment/wayland-protocols/tdesktopenvironment-protocols\n    NO_DEFAULT_PATH\n    REQUIRED\n)\n\nif(NOT TDESKTOPENVIRONMENT_A11Y_FILE)\n    message(FATAL_ERROR \"Could not find tdesktopenvironment-accessibility-v1.xml\")\nendif()\n\nthedesk_wayfire_plugin_wayland_protocols(wf-thedesk-a11y FILES\n    ${TDESKTOPENVIRONMENT_A11Y_FILE}\n)\n\ntarget_link_libraries(wf-thedesk-a11y Qt::Core libcontemporary PkgConfig::wayfire PkgConfig::pixman)\ntarget_compile_definitions(wf-thedesk-a11y PRIVATE A11YPLUGIN_LIBRARY WLR_USE_UNSTABLE QT_NO_KEYWORDS)\n\ntarget_sources(wf-thedesk-a11y PRIVATE ${SOURCES} ${HEADERS} ${PRIVATE_HEADERS})\ninstall(TARGETS wf-thedesk-a11y\n    INCLUDES DESTINATION ${INCLUDE_INSTALL_DIR}\n    LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}/wayfire\n)\n"
  },
  {
    "path": "wayfire-plugins/a11y-plugin/a11yplugin.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2021 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"a11yplugin.h\"\n\n#include \"mousekeys.h\"\n#include \"stickykeys.h\"\n\n#include <wayfire/core.hpp>\n#include <wayfire/seat.hpp>\n\nextern \"C\" {\n#include <wlr/backend/multi.h>\n}\n\nstruct A11yPluginPrivate {\n        wlr_backend* backend;\n        wlr_pointer pointer;\n        wlr_keyboard keyboard;\n        wl_resource* tdeKeygrabManager;\n\n        StickyKeys* stickyKeys;\n        MouseKeys* mouseKeys;\n\n        wlr_pointer_impl pointerImpl = {\n            \"thedesk-a11y-pointer\"};\n        wlr_keyboard_impl keyboardImpl = {\n            \"thedesk-a11y-keyboard\",\n            nullptr};\n};\n\nA11yPlugin::A11yPlugin() {\n    d = new A11yPluginPrivate();\n}\n\nA11yPlugin::~A11yPlugin() {\n    delete d;\n}\n\nvoid A11yPlugin::init() {\n    d->backend = wlr_headless_backend_create(wf::get_core().display);\n    wlr_multi_backend_add(wf::get_core().backend, d->backend);\n    wlr_pointer_init(&d->pointer, &d->pointerImpl, \"thedesk-a11y-pointer\");\n    wlr_keyboard_init(&d->keyboard, &d->keyboardImpl, \"thedesk-a11y-keyboard\");\n\n    wl_signal_emit_mutable(&d->backend->events.new_input, &d->pointer.base);\n    wl_signal_emit_mutable(&d->backend->events.new_input, &d->keyboard.base);\n\n    if (wf::get_core().get_current_state() == wf::compositor_state_t::RUNNING) {\n        wlr_backend_start(d->backend);\n    }\n\n    d->stickyKeys = new StickyKeys(&d->keyboard);\n    d->mouseKeys = new MouseKeys(&d->keyboard, &d->pointer);\n}\n\nvoid A11yPlugin::fini() {\n    d->stickyKeys->deleteLater();\n    d->mouseKeys->deleteLater();\n    wlr_keyboard_finish(&d->keyboard);\n    wlr_multi_backend_remove(wf::get_core().backend, d->backend);\n    wlr_backend_destroy(d->backend);\n}\n\nbool A11yPlugin::is_unloadable() {\n    return false;\n}\n"
  },
  {
    "path": "wayfire-plugins/a11y-plugin/a11yplugin.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2021 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef KEYGRABPLUGIN_H\n#define KEYGRABPLUGIN_H\n\n#include <wayfire/plugin.hpp>\n\nstruct wl_client;\nstruct A11yPluginPrivate;\nclass A11yPlugin : public wf::plugin_interface_t {\n    public:\n        A11yPlugin();\n        ~A11yPlugin();\n\n        // plugin_interface_t interface\n    public:\n        void init();\n        void fini();\n        bool is_unloadable();\n\n    private:\n        A11yPluginPrivate* d;\n};\n\nDECLARE_WAYFIRE_PLUGIN(A11yPlugin)\n\n#endif // KEYGRABPLUGIN_H\n"
  },
  {
    "path": "wayfire-plugins/a11y-plugin/abstracta11ycontroller.cpp",
    "content": "#include \"abstracta11ycontroller.h\"\n\nstruct AbstractA11yControllerPrivate {\n        bool enabled = false;\n};\n\nAbstractA11yController::AbstractA11yController(QObject* parent) :\n    QObject{parent} {\n    d = new AbstractA11yControllerPrivate();\n}\n\nAbstractA11yController::~AbstractA11yController() {\n    delete d;\n}\n\nvoid AbstractA11yController::setEnabled(bool enabled) {\n    if (enabled && !d->enabled) {\n        d->enabled = true;\n        this->enable();\n    } else if (!enabled && d->enabled) {\n        d->enabled = false;\n        this->disable();\n    }\n}\n\nbool AbstractA11yController::enabled() {\n    return d->enabled;\n}\n"
  },
  {
    "path": "wayfire-plugins/a11y-plugin/abstracta11ycontroller.h",
    "content": "#ifndef ABSTRACTA11YCONTROLLER_H\n#define ABSTRACTA11YCONTROLLER_H\n\n#include <QObject>\n\nstruct AbstractA11yControllerPrivate;\nclass AbstractA11yController : public QObject {\n        Q_OBJECT\n    public:\n        explicit AbstractA11yController(QObject* parent = nullptr);\n        ~AbstractA11yController();\n\n        void setEnabled(bool enabled);\n        bool enabled();\n\n    Q_SIGNALS:\n\n    private:\n        AbstractA11yControllerPrivate* d;\n\n        virtual void enable() = 0;\n        virtual void disable() = 0;\n};\n\n#endif // ABSTRACTA11YCONTROLLER_H\n"
  },
  {
    "path": "wayfire-plugins/a11y-plugin/mousekeys.cpp",
    "content": "#include \"mousekeys.h\"\n\n#include \"wayland-tdesktopenvironment-accessibility-v1-server-protocol.h\"\n#include <QDateTime>\n#include <QTextStream>\n#include <linux/input-event-codes.h>\n#include <wlr/types/wlr_cursor.h>\n\nstruct MouseKeysPrivate {\n        static constexpr int mouseKeysDelay = 100;\n        static constexpr int mouseKeysPixels = 1;\n\n        wlr_keyboard* keyboard;\n        wlr_pointer* pointer;\n        wl_resource* tdeA11yMouseKeys;\n        MouseKeys* parent;\n\n        wl_event_loop* eventLoop;\n        wl_event_source* timer;\n\n        Qt::Edges moveDirection;\n        QDateTime lastPress;\n\n        wf::signal::connection_t<wf::input_event_signal<wlr_keyboard_key_event>> keyboardButtonEvent = [this](wf::input_event_signal<wlr_keyboard_key_event>* ev) {\n            parent->keyboardButtonPressed(ev);\n        };\n\n        static int mouseKeysTimer(void* data) {\n            return reinterpret_cast<MouseKeys*>(data)->mouseKeysTimer();\n        }\n};\n\nMouseKeys::MouseKeys(wlr_keyboard* keyboard, wlr_pointer* pointer, QObject* parent) :\n    AbstractA11yController{parent} {\n    d = new MouseKeysPrivate();\n    d->parent = this;\n    d->keyboard = keyboard;\n    d->pointer = pointer;\n\n    wl_global_create(wf::get_core().display, &tdesktopenvironment_accessibility_mouse_keys_v1_interface, 1, this, [](wl_client* client, void* data, uint32_t version, uint32_t id) {\n        auto* plugin = reinterpret_cast<MouseKeys*>(data);\n\n        plugin->d->tdeA11yMouseKeys = wl_resource_create(client, &tdesktopenvironment_accessibility_mouse_keys_v1_interface, 1, id);\n\n        auto interface = new struct tdesktopenvironment_accessibility_sticky_keys_v1_interface();\n        interface->set_enabled = [](struct wl_client* client, struct wl_resource* resource, uint enabled) {\n            reinterpret_cast<MouseKeys*>(resource->data)->setEnabled(enabled);\n        };\n        wl_resource_set_implementation(plugin->d->tdeA11yMouseKeys, interface, plugin, nullptr);\n    });\n\n    d->eventLoop = wl_display_get_event_loop(wf::get_core().display);\n    d->timer = wl_event_loop_add_timer(d->eventLoop, MouseKeysPrivate::mouseKeysTimer, this);\n}\n\nMouseKeys::~MouseKeys() {\n    wl_event_source_remove(d->timer);\n    delete d;\n}\n\nvoid MouseKeys::keyboardButtonPressed(wf::input_event_signal<wlr_keyboard_key_event>* event) {\n    Qt::Edges edges;\n    switch (event->event->keycode) {\n        case KEY_KP7:\n            edges = Qt::LeftEdge | Qt::TopEdge;\n            break;\n        case KEY_KP8:\n            edges = Qt::TopEdge;\n            break;\n        case KEY_KP9:\n            edges = Qt::RightEdge | Qt::TopEdge;\n            break;\n        case KEY_KP4:\n            edges = Qt::LeftEdge;\n            break;\n        case KEY_KP6:\n            edges = Qt::RightEdge;\n            break;\n        case KEY_KP1:\n            edges = Qt::LeftEdge | Qt::BottomEdge;\n            break;\n        case KEY_KP2:\n            edges = Qt::BottomEdge;\n            break;\n        case KEY_KP3:\n            edges = Qt::RightEdge | Qt::BottomEdge;\n            break;\n        case KEY_KP5:\n            {\n                if (event->event->state == WL_KEYBOARD_KEY_STATE_PRESSED) {\n                    this->pressMouse();\n                } else if (event->event->state == WL_KEYBOARD_KEY_STATE_RELEASED) {\n                    this->releaseMouse();\n                }\n                return;\n            }\n    }\n\n    if (edges == 0) return;\n\n    event->mode = wf::input_event_processing_mode_t::IGNORE;\n\n    if (event->event->state == WL_KEYBOARD_KEY_STATE_PRESSED) {\n        // Always override the existing movement\n        d->moveDirection = edges;\n        d->lastPress = QDateTime::currentDateTimeUtc();\n\n        // Always move the mouse at least once\n        processMouseMovement();\n    } else if (event->event->state == WL_KEYBOARD_KEY_STATE_RELEASED) {\n        // Only stop movement if the existing movement is the same\n        if (d->moveDirection == edges) {\n            d->moveDirection = {};\n        }\n    }\n}\n\nint MouseKeys::mouseKeysTimer() {\n    if (!this->enabled()) return 0;\n\n    if (d->moveDirection) processMouseMovement();\n\n    wl_event_source_timer_update(d->timer, d->mouseKeysDelay);\n    return 1;\n}\n\nvoid MouseKeys::enable() {\n    wf::get_core().connect(&d->keyboardButtonEvent);\n    wl_event_source_timer_update(d->timer, d->mouseKeysDelay);\n    this->updateMouseKeysState();\n}\n\nvoid MouseKeys::disable() {\n    wf::get_core().disconnect(&d->keyboardButtonEvent);\n    this->updateMouseKeysState();\n}\n\nvoid MouseKeys::pressMouse() {\n    wlr_pointer_button_event ev;\n    ev.pointer = d->pointer;\n    ev.button = BTN_LEFT;\n    ev.state = WLR_BUTTON_PRESSED;\n    ev.time_msec = wf::get_current_time();\n    wl_signal_emit(&d->pointer->events.button, &ev);\n    wl_signal_emit(&d->pointer->events.frame, nullptr);\n}\n\nvoid MouseKeys::releaseMouse() {\n    wlr_pointer_button_event ev;\n    ev.pointer = d->pointer;\n    ev.button = BTN_LEFT;\n    ev.state = WLR_BUTTON_RELEASED;\n    ev.time_msec = wf::get_current_time();\n    wl_signal_emit(&d->pointer->events.button, &ev);\n    wl_signal_emit(&d->pointer->events.frame, nullptr);\n}\n\nvoid MouseKeys::processMouseMovement() {\n    double x = 0;\n    double y = 0;\n\n    auto movement = d->mouseKeysPixels;\n    auto stride = qMin(5000, d->lastPress.msecsTo(QDateTime::currentDateTimeUtc()));\n    do {\n        movement += d->mouseKeysPixels;\n        stride -= 500;\n    } while (stride >= 0);\n\n    if (d->moveDirection & Qt::LeftEdge) x -= movement;\n    if (d->moveDirection & Qt::RightEdge) x += movement;\n    if (d->moveDirection & Qt::TopEdge) y -= movement;\n    if (d->moveDirection & Qt::BottomEdge) y += movement;\n\n    wlr_pointer_motion_event ev;\n    ev.pointer = d->pointer;\n    ev.time_msec = wf::get_current_time();\n    ev.delta_x = ev.unaccel_dx = x;\n    ev.delta_y = ev.unaccel_dy = y;\n    wl_signal_emit(&d->pointer->events.motion, &ev);\n    wl_signal_emit(&d->pointer->events.frame, nullptr);\n}\n\nvoid MouseKeys::updateMouseKeysState() {\n    tdesktopenvironment_accessibility_mouse_keys_v1_send_mouse_keys_enabled(d->tdeA11yMouseKeys, this->enabled());\n}\n"
  },
  {
    "path": "wayfire-plugins/a11y-plugin/mousekeys.h",
    "content": "#ifndef MOUSEKEYS_H\n#define MOUSEKEYS_H\n\n#include \"abstracta11ycontroller.h\"\n#include <wayfire/signal-definitions.hpp>\n\nstruct MouseKeysPrivate;\nclass MouseKeys : public AbstractA11yController {\n        Q_OBJECT\n    public:\n        explicit MouseKeys(wlr_keyboard* keyboard, wlr_pointer* pointer, QObject* parent = nullptr);\n        ~MouseKeys();\n\n    protected:\n        friend MouseKeysPrivate;\n        void keyboardButtonPressed(wf::input_event_signal<wlr_keyboard_key_event>* event);\n        int mouseKeysTimer();\n\n    private:\n        MouseKeysPrivate* d;\n\n        void updateMouseKeysState();\n\n        // AbstractA11yController interface\n    private:\n        void enable();\n        void disable();\n\n        void pressMouse();\n        void releaseMouse();\n        void processMouseMovement();\n};\n\n#endif // MOUSEKEYS_H\n"
  },
  {
    "path": "wayfire-plugins/a11y-plugin/stickykeys.cpp",
    "content": "#include \"stickykeys.h\"\n\n#include \"wayland-tdesktopenvironment-accessibility-v1-server-protocol.h\"\n#include <QTextStream>\n#include <linux/input-event-codes.h>\n#include <wayfire/bindings-repository.hpp>\n#include <wayfire/core.hpp>\n#include <wayfire/seat.hpp>\n\nstruct StickyKeysPrivate {\n        wlr_keyboard* keyboard;\n        wl_resource* tdeA11yStickyKeys;\n        StickyKeys* parent;\n\n        wf::signal::connection_t<wf::input_event_signal<wlr_keyboard_key_event>> keyboardButtonEvent = [this](wf::input_event_signal<wlr_keyboard_key_event>* ev) {\n            parent->keyboardButtonPressed(ev);\n        };\n\n        Qt::KeyboardModifiers heldModifiers = Qt::NoModifier;\n        Qt::KeyboardModifiers latchedModifiers = Qt::NoModifier;\n\n        bool processing = false;\n\n        class KeySession {\n            public:\n                KeySession(wlr_keyboard* keyboard) {\n                    this->keyboard = keyboard;\n                }\n\n                ~KeySession() {\n                    for (auto keycode = keycodes.crbegin(); keycode != keycodes.crend(); keycode++) {\n                        wlr_keyboard_key_event newEvent;\n                        newEvent.keycode = *keycode;\n                        newEvent.update_state = true;\n                        newEvent.time_msec = wf::get_current_time();\n                        newEvent.state = WL_KEYBOARD_KEY_STATE_RELEASED;\n                        wlr_keyboard_notify_key(keyboard, &newEvent);\n                    }\n                }\n\n                void push(quint32 keycode) {\n                    keycodes.append(keycode);\n\n                    wlr_keyboard_key_event newEvent;\n                    newEvent.keycode = keycode;\n                    newEvent.update_state = true;\n                    newEvent.time_msec = wf::get_current_time();\n                    newEvent.state = WL_KEYBOARD_KEY_STATE_PRESSED;\n                    wlr_keyboard_notify_key(keyboard, &newEvent);\n                }\n\n            private:\n                QList<quint32> keycodes;\n                wlr_keyboard* keyboard;\n        };\n};\n\nStickyKeys::StickyKeys(wlr_keyboard* keyboard, QObject* parent) :\n    AbstractA11yController{parent} {\n    d = new StickyKeysPrivate();\n    d->parent = this;\n    d->keyboard = keyboard;\n\n    wl_global_create(wf::get_core().display, &tdesktopenvironment_accessibility_sticky_keys_v1_interface, 1, this, [](wl_client* client, void* data, uint32_t version, uint32_t id) {\n        auto* plugin = reinterpret_cast<StickyKeys*>(data);\n\n        plugin->d->tdeA11yStickyKeys = wl_resource_create(client, &tdesktopenvironment_accessibility_sticky_keys_v1_interface, 1, id);\n\n        auto interface = new struct tdesktopenvironment_accessibility_sticky_keys_v1_interface();\n        interface->set_enabled = [](struct wl_client* client, struct wl_resource* resource, uint enabled) {\n            reinterpret_cast<StickyKeys*>(resource->data)->setEnabled(enabled);\n        };\n        wl_resource_set_implementation(plugin->d->tdeA11yStickyKeys, interface, plugin, nullptr);\n    });\n}\n\nStickyKeys::~StickyKeys() {\n    delete d;\n}\n\nvoid StickyKeys::enable() {\n    wf::get_core().connect(&d->keyboardButtonEvent);\n    this->updateStickyKeysState();\n}\n\nvoid StickyKeys::disable() {\n    wf::get_core().disconnect(&d->keyboardButtonEvent);\n    this->updateStickyKeysState();\n}\n\nvoid StickyKeys::updateStickyKeysState() {\n    tdesktopenvironment_accessibility_sticky_keys_v1_send_sticky_keys_enabled(d->tdeA11yStickyKeys, this->enabled());\n}\n\nvoid StickyKeys::cycleModifier(Qt::KeyboardModifier modifier) {\n    if (d->latchedModifiers.testFlag(modifier)) {\n        // Turn off the latch\n        d->latchedModifiers = d->latchedModifiers.setFlag(modifier, false);\n    } else if (d->heldModifiers.testFlag(modifier)) {\n        // Latch this key\n        d->heldModifiers = d->heldModifiers.setFlag(modifier, false);\n        d->latchedModifiers = d->latchedModifiers.setFlag(modifier, true);\n    } else {\n        // Hold this key\n        d->heldModifiers = d->heldModifiers.setFlag(modifier);\n    }\n\n    sendUpdatedKeys();\n}\n\nvoid StickyKeys::sendUpdatedKeys() {\n    int heldMods = 0;\n    if (d->heldModifiers.testFlag(Qt::ControlModifier)) heldMods |= TDESKTOPENVIRONMENT_ACCESSIBILITY_STICKY_KEYS_V1_MODIFIER_CONTROL;\n    if (d->heldModifiers.testFlag(Qt::AltModifier)) heldMods |= TDESKTOPENVIRONMENT_ACCESSIBILITY_STICKY_KEYS_V1_MODIFIER_ALT;\n    if (d->heldModifiers.testFlag(Qt::ShiftModifier)) heldMods |= TDESKTOPENVIRONMENT_ACCESSIBILITY_STICKY_KEYS_V1_MODIFIER_SHIFT;\n    if (d->heldModifiers.testFlag(Qt::MetaModifier)) heldMods |= TDESKTOPENVIRONMENT_ACCESSIBILITY_STICKY_KEYS_V1_MODIFIER_SUPER;\n\n    int latchedMods = 0;\n    if (d->latchedModifiers.testFlag(Qt::ControlModifier)) latchedMods |= TDESKTOPENVIRONMENT_ACCESSIBILITY_STICKY_KEYS_V1_MODIFIER_CONTROL;\n    if (d->latchedModifiers.testFlag(Qt::AltModifier)) latchedMods |= TDESKTOPENVIRONMENT_ACCESSIBILITY_STICKY_KEYS_V1_MODIFIER_ALT;\n    if (d->latchedModifiers.testFlag(Qt::ShiftModifier)) latchedMods |= TDESKTOPENVIRONMENT_ACCESSIBILITY_STICKY_KEYS_V1_MODIFIER_SHIFT;\n    if (d->latchedModifiers.testFlag(Qt::MetaModifier)) latchedMods |= TDESKTOPENVIRONMENT_ACCESSIBILITY_STICKY_KEYS_V1_MODIFIER_SUPER;\n\n    tdesktopenvironment_accessibility_sticky_keys_v1_send_sticky_keys_held(d->tdeA11yStickyKeys, heldMods);\n    tdesktopenvironment_accessibility_sticky_keys_v1_send_sticky_keys_latched(d->tdeA11yStickyKeys, latchedMods);\n}\n\nvoid StickyKeys::keyboardButtonPressed(wf::input_event_signal<wlr_keyboard_key_event>* event) {\n    if (d->processing) return;\n    QTextStream(stderr) << \"Processing keycode: \" << event->event->keycode << \"  state: \" << event->event->state << \"\\n\";\n\n    switch (event->event->keycode) {\n        case KEY_LEFTCTRL:\n        case KEY_RIGHTCTRL:\n            event->mode = wf::input_event_processing_mode_t::IGNORE;\n            if (event->event->state == WL_KEYBOARD_KEY_STATE_PRESSED) {\n                // Cycle the CTRL key\n                this->cycleModifier(Qt::ControlModifier);\n            }\n            break;\n        case KEY_LEFTALT:\n        case KEY_RIGHTALT:\n            event->mode = wf::input_event_processing_mode_t::IGNORE;\n            if (event->event->state == WL_KEYBOARD_KEY_STATE_PRESSED) {\n                // Cycle the ALT key\n                this->cycleModifier(Qt::AltModifier);\n            }\n            break;\n        case KEY_LEFTSHIFT:\n        case KEY_RIGHTSHIFT:\n            event->mode = wf::input_event_processing_mode_t::IGNORE;\n            if (event->event->state == WL_KEYBOARD_KEY_STATE_PRESSED) {\n                // Cycle the SHIFT key\n                this->cycleModifier(Qt::ShiftModifier);\n            }\n            break;\n        case KEY_LEFTMETA:\n        case KEY_RIGHTMETA:\n            event->mode = wf::input_event_processing_mode_t::IGNORE;\n            if (event->event->state == WL_KEYBOARD_KEY_STATE_PRESSED) {\n                // Cycle the META key\n                this->cycleModifier(Qt::MetaModifier);\n            }\n            break;\n        default:\n            {\n                // If we have any keys held or latched, press them now\n                auto thisModifiers = d->heldModifiers | d->latchedModifiers;\n\n                if (thisModifiers != Qt::NoModifier) {\n                    event->mode = wf::input_event_processing_mode_t::IGNORE;\n                    if (event->event->state == WL_KEYBOARD_KEY_STATE_PRESSED) {\n                        QTextStream(stderr) << \"Pressing keycode: \" << event->event->keycode << \"  modifiers: \" << thisModifiers << \"\\n\";\n                        d->processing = true;\n\n                        {\n                            StickyKeysPrivate::KeySession session(d->keyboard);\n                            if (thisModifiers.testFlag(Qt::ControlModifier)) session.push(KEY_LEFTCTRL);\n                            if (thisModifiers.testFlag(Qt::AltModifier)) session.push(KEY_LEFTALT);\n                            if (thisModifiers.testFlag(Qt::ShiftModifier)) session.push(KEY_LEFTSHIFT);\n                            if (thisModifiers.testFlag(Qt::MetaModifier)) session.push(KEY_LEFTMETA);\n                            session.push(event->event->keycode);\n                        }\n\n                        d->processing = false;\n                    }\n                }\n\n                // Clear out all the held modifiers\n                d->heldModifiers = Qt::NoModifier;\n\n                sendUpdatedKeys();\n            }\n    }\n}\n"
  },
  {
    "path": "wayfire-plugins/a11y-plugin/stickykeys.h",
    "content": "#ifndef STICKYKEYS_H\n#define STICKYKEYS_H\n\n#include \"abstracta11ycontroller.h\"\n#include <wayfire/signal-definitions.hpp>\n\nstruct StickyKeysPrivate;\nclass StickyKeys : public AbstractA11yController {\n        Q_OBJECT\n    public:\n        explicit StickyKeys(wlr_keyboard* keyboard, QObject* parent = nullptr);\n        ~StickyKeys();\n\n    Q_SIGNALS:\n\n    protected:\n        friend StickyKeysPrivate;\n        void keyboardButtonPressed(wf::input_event_signal<wlr_keyboard_key_event>* event);\n\n    private:\n        StickyKeysPrivate* d;\n\n        // AbstractA11yController interface\n    private:\n        void enable();\n        void disable();\n\n        void updateStickyKeysState();\n\n        void cycleModifier(Qt::KeyboardModifier modifier);\n        void sendUpdatedKeys();\n};\n\n#endif // STICKYKEYS_H\n"
  },
  {
    "path": "wayfire-plugins/keygrab-plugin/CMakeLists.txt",
    "content": "cmake_minimum_required(VERSION 3.24.0)\n\nproject(lib VERSION 1.0.0 LANGUAGES C CXX)\n\nfind_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Core)\nfind_package(libcontemporary REQUIRED)\ncntp_find_pkgconfig(wayfire wayfire)\ncntp_find_pkgconfig(pixman pixman-1)\n\nset(SOURCES\n    keygrabplugin.cpp\n)\n\nset(HEADERS\n    keygrabplugin.h\n)\n\nset(PRIVATE_HEADERS\n\n)\n\nadd_library(wf-thedesk-keygrab SHARED)\ncntp_init(wf-thedesk-keygrab 20)\nset_target_properties(wf-thedesk-keygrab PROPERTIES\n        OUTPUT_NAME thedesk-keygrab\n)\n\nfind_file(TDESKTOPENVIRONMENT_KEYGRAB_FILE NAMES tdesktopenvironment-keygrab-v1.xml\n    PATHS ENV XDG_DATA_DIRS\n    PATH_SUFFIXES libtdesktopenvironment/wayland-protocols/tdesktopenvironment-protocols\n    NO_DEFAULT_PATH\n    REQUIRED\n)\n\nif(NOT TDESKTOPENVIRONMENT_KEYGRAB_FILE)\n    message(FATAL_ERROR \"Could not find tdesktopenvironment-keygrab-v1.xml\")\nendif()\n\nthedesk_wayfire_plugin_wayland_protocols(wf-thedesk-keygrab FILES\n    ${TDESKTOPENVIRONMENT_KEYGRAB_FILE}\n)\n\ntarget_link_libraries(wf-thedesk-keygrab Qt::Core libcontemporary PkgConfig::wayfire PkgConfig::pixman)\ntarget_compile_definitions(wf-thedesk-keygrab PRIVATE KEYGRABPLUGIN_LIBRARY WLR_USE_UNSTABLE)\n\ntarget_sources(wf-thedesk-keygrab PRIVATE ${SOURCES} ${HEADERS} ${PRIVATE_HEADERS})\ninstall(TARGETS wf-thedesk-keygrab\n    INCLUDES DESTINATION ${INCLUDE_INSTALL_DIR}\n    LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}/wayfire\n)\n"
  },
  {
    "path": "wayfire-plugins/keygrab-plugin/keygrab-plugin.pro",
    "content": "CONFIG += qt\n\nTEMPLATE = lib\nDEFINES += KEYGRABPLUGIN_LIBRARY\nTARGET = thedesk-keygrab\n\n# You can make your code fail to compile if it uses deprecated APIs.\n# In order to do so, uncomment the following line.\n#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0\n\nSOURCES += \\\n    keygrabplugin.cpp\n\nHEADERS += \\\n    keygrabplugin.h\n\nWAYLAND_PROTOCOL_EXTENSIONS += /usr/share/libtdesktopenvironment/wayland-protocols/tdesktopenvironment-keygrab-v1.xml\n\ninclude(../plugins.pri)\n"
  },
  {
    "path": "wayfire-plugins/keygrab-plugin/keygrab-plugin_global.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2021 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef KEYGRABPLUGIN_GLOBAL_H\n#define KEYGRABPLUGIN_GLOBAL_H\n\n#include <QtCore/qglobal.h>\n\n#if defined(KEYGRABPLUGIN_LIBRARY)\n#  define KEYGRABPLUGIN_EXPORT Q_DECL_EXPORT\n#else\n#  define KEYGRABPLUGIN_EXPORT Q_DECL_IMPORT\n#endif\n\n#endif // KEYGRABPLUGIN_GLOBAL_H\n"
  },
  {
    "path": "wayfire-plugins/keygrab-plugin/keygrabplugin.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2021 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"keygrabplugin.h\"\n\n#include <wayfire/bindings-repository.hpp>\n#include <wayfire/core.hpp>\n#include <wayfire/output.hpp>\n\n#include <QTextStream>\n\n#include \"wayland-tdesktopenvironment-keygrab-v1-server-protocol.h\"\n#include <iostream>\n#include <wlr/types/wlr_xdg_foreign_registry.h>\n\nstruct KeygrabPluginPrivate {\n        wl_resource* tdeKeygrabManager;\n};\n\nKeygrabPlugin::KeygrabPlugin() {\n    d = new KeygrabPluginPrivate();\n}\n\nKeygrabPlugin::~KeygrabPlugin() {\n    delete d;\n}\n\nvoid KeygrabPlugin::grabKey(wl_client* client, uint32_t mod, uint32_t key) {\n    std::cout << \"Grabbing key \" << key << \" mod \" << mod << \"\\n\";\n    wf::get_core().bindings->add_key(wf::create_option(wf::keybinding_t(mod, key)), new wf::key_callback([=](const wf::keybinding_t& keybind) {\n        std::cout << \"Pressed \" << key << \" mod \" << mod << \"\\n\";\n        tdesktopenvironment_keygrab_manager_v1_send_activated(d->tdeKeygrabManager, mod, key, 0);\n        return true;\n    }));\n}\n\nvoid KeygrabPlugin::ungrabKey(wl_client* client, uint32_t mod, uint32_t key) {\n}\n\nvoid KeygrabPlugin::init() {\n    wl_global_create(wf::get_core().display, &tdesktopenvironment_keygrab_manager_v1_interface, 1, this, [](wl_client* client, void* data, uint32_t version, uint32_t id) {\n        KeygrabPlugin* plugin = reinterpret_cast<KeygrabPlugin*>(data);\n\n        plugin->d->tdeKeygrabManager = wl_resource_create(client, &tdesktopenvironment_keygrab_manager_v1_interface, 1, id);\n\n        struct tdesktopenvironment_keygrab_manager_v1_interface* interface = new struct tdesktopenvironment_keygrab_manager_v1_interface();\n        interface->grab_key = [](struct wl_client* client, struct wl_resource* resource, uint32_t mod, uint32_t key) {\n            reinterpret_cast<KeygrabPlugin*>(resource->data)->grabKey(client, mod, key);\n        };\n        interface->ungrab_key = [](struct wl_client* client, struct wl_resource* resource, uint32_t mod, uint32_t key) {\n            reinterpret_cast<KeygrabPlugin*>(resource->data)->ungrabKey(client, mod, key);\n        };\n        interface->destroy = [](struct wl_client* client, struct wl_resource* resource) {\n\n        };\n        wl_resource_set_implementation(plugin->d->tdeKeygrabManager, interface, plugin, nullptr);\n    });\n}\n\nvoid KeygrabPlugin::fini() {\n}\n\nbool KeygrabPlugin::is_unloadable() {\n    return false;\n}\n"
  },
  {
    "path": "wayfire-plugins/keygrab-plugin/keygrabplugin.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2021 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef KEYGRABPLUGIN_H\n#define KEYGRABPLUGIN_H\n\n#include <wayfire/plugin.hpp>\n\nstruct wl_client;\nstruct KeygrabPluginPrivate;\nclass KeygrabPlugin : public wf::plugin_interface_t {\n    public:\n        KeygrabPlugin();\n        ~KeygrabPlugin();\n\n        void grabKey(wl_client* client, uint32_t mod, uint32_t key);\n        void ungrabKey(wl_client* client, uint32_t mod, uint32_t key);\n\n        // plugin_interface_t interface\n    public:\n        void init();\n        void fini();\n        bool is_unloadable();\n\n    private:\n        KeygrabPluginPrivate* d;\n};\n\nDECLARE_WAYFIRE_PLUGIN(KeygrabPlugin)\n\n#endif // KEYGRABPLUGIN_H\n"
  },
  {
    "path": "wayfire-plugins/plugins.pri",
    "content": "equals(THELIBS_BUILDTOOLS_PATH, \"\") {\n    THELIBS_BUILDTOOLS_PATH = $$[QT_INSTALL_PREFIX]/share/the-libs/pri\n}\ninclude($$THELIBS_BUILDTOOLS_PATH/varset.pri)\n\nDEFINES += WLR_USE_UNSTABLE WAYFIRE_PLUGIN\nCONFIG += c++17 plugin\n\nCONFIG += link_pkgconfig\nPKGCONFIG += wayfire wlroots\n\nwayland_scanner_headers.output = wayland-${QMAKE_FILE_BASE}-server-protocol.h\nwayland_scanner_headers.commands = wayland-scanner server-header ${QMAKE_FILE_NAME} ${QMAKE_FILE_OUT}\nwayland_scanner_headers.input = WAYLAND_PROTOCOL_EXTENSIONS\nwayland_scanner_headers.CONFIG += target_predeps no_link\n\nwayland_scanner_sources.output = wayland-${QMAKE_FILE_BASE}-server-protocol.c\nwayland_scanner_sources.commands = wayland-scanner private-code ${QMAKE_FILE_NAME} ${QMAKE_FILE_OUT}\nwayland_scanner_sources.input = WAYLAND_PROTOCOL_EXTENSIONS\nwayland_scanner_sources.variable_out = SOURCES\nwayland_scanner_headers.CONFIG += target_predeps no_link\n\nQMAKE_EXTRA_COMPILERS += wayland_scanner_headers wayland_scanner_sources\n\ntarget.path = $$THELIBS_INSTALL_LIB/wayfire/\nINSTALLS = target\n"
  },
  {
    "path": "wayfire-plugins/startdesk-plugin/CMakeLists.txt",
    "content": "cmake_minimum_required(VERSION 3.24.0)\n\nproject(lib VERSION 1.0.0 LANGUAGES C CXX)\n\nfind_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Core)\nfind_package(libcontemporary REQUIRED)\ncntp_find_pkgconfig(wayfire wayfire)\ncntp_find_pkgconfig(pixman pixman-1)\n\nset(SOURCES\n    startdeskplugin.cpp\n)\n\nset(HEADERS\n    startdeskplugin.h\n)\n\nset(PRIVATE_HEADERS\n\n)\n\nadd_library(wf-thedesk-startdesk SHARED)\ncntp_init(wf-thedesk-startdesk 20)\nset_target_properties(wf-thedesk-startdesk PROPERTIES\n        OUTPUT_NAME thedesk-startdesk\n)\ntarget_link_libraries(wf-thedesk-startdesk Qt::Core libcontemporary PkgConfig::wayfire PkgConfig::pixman)\ntarget_compile_definitions(wf-thedesk-startdesk PRIVATE STARTDESKPLUGIN_LIBRARY WLR_USE_UNSTABLE)\n\ntarget_sources(wf-thedesk-startdesk PRIVATE ${SOURCES} ${HEADERS} ${PRIVATE_HEADERS})\ninstall(TARGETS wf-thedesk-startdesk\n    INCLUDES DESTINATION ${INCLUDE_INSTALL_DIR}\n    LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}/wayfire\n)\n"
  },
  {
    "path": "wayfire-plugins/startdesk-plugin/startdesk-plugin.pro",
    "content": "CONFIG += qt\n\nTEMPLATE = lib\nDEFINES += STARTDESKPLUGIN_LIBRARY\nTARGET = thedesk-startdesk\n\n# You can make your code fail to compile if it uses deprecated APIs.\n# In order to do so, uncomment the following line.\n#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0\n\nSOURCES += \\\n    startdeskplugin.cpp\n\nHEADERS += \\\n    startdeskplugin.h\n\ninclude(../plugins.pri)\n"
  },
  {
    "path": "wayfire-plugins/startdesk-plugin/startdeskplugin.cpp",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2021 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#include \"startdeskplugin.h\"\n\n#include <iostream>\n#include <sys/wait.h>\n#include <wayfire/core.hpp>\n\n#include <QPointer>\n#include <QProcess>\n#include <QTextStream>\n\nStartdeskPlugin::StartdeskPlugin() {\n}\n\nvoid StartdeskPlugin::init() {\n    QProcessEnvironment env = QProcessEnvironment::systemEnvironment();\n    env.insert(\"QT_QPA_PLATFORM\", \"wayland\");\n    env.insert(\"WAYLAND_DISPLAY\", QString::fromStdString(wf::get_core().wayland_display));\n\n    if (qEnvironmentVariableIsSet(\"T_CHILD_LD_PRELOAD\")) {\n        env.insert(\"T_CHILD_LD_PRELOAD\", \"/usr/lib/libasan.so\");\n    }\n\n    QString x11Display = QString::fromStdString(wf::get_core().get_xwayland_display());\n    if (!x11Display.isEmpty()) {\n        env.insert(\"DISPLAY\", x11Display);\n    }\n\n    QString startdeskCommand = qEnvironmentVariable(\"TD_WF_STARTDESK\", \"startdesk\");\n    QTextStream(stdout) << \"Running startdesk command \" << startdeskCommand << \"\\n\";\n\n    QPointer<QProcess> deskProcess = new QProcess();\n    deskProcess->setProcessEnvironment(env);\n    deskProcess->start(startdeskCommand, QStringList());\n    deskProcess->waitForStarted();\n    QObject::connect(deskProcess.data(), &QProcess::readyReadStandardOutput, [deskProcess] {\n        QTextStream(stdout) << deskProcess->readAllStandardOutput();\n    });\n    QObject::connect(deskProcess.data(), &QProcess::readyReadStandardError, [deskProcess] {\n        QTextStream(stderr) << deskProcess->readAllStandardError();\n    });\n    QObject::connect(deskProcess.data(), QOverload<int, QProcess::ExitStatus>::of(&QProcess::finished), [=] {\n        QTextStream(stdout) << \"Finished!\\n\";\n    });\n    waiter.set_timeout(1000, [=] {\n        if (!deskProcess || deskProcess->waitForFinished(0)) {\n            wf::get_core().shutdown();\n            return false;\n        }\n        return true;\n    });\n}\n"
  },
  {
    "path": "wayfire-plugins/startdesk-plugin/startdeskplugin.h",
    "content": "/****************************************\n *\n *   INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE\n *   Copyright (C) 2021 Victor Tran\n *\n *   This program is free software: you can redistribute it and/or modify\n *   it under the terms of the GNU General Public License as published by\n *   the Free Software Foundation, either version 3 of the License, or\n *   (at your option) any later version.\n *\n *   This program is distributed in the hope that it will be useful,\n *   but WITHOUT ANY WARRANTY; without even the implied warranty of\n *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *   GNU General Public License for more details.\n *\n *   You should have received a copy of the GNU General Public License\n *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * *************************************/\n#ifndef STARTDESKPLUGIN_H\n#define STARTDESKPLUGIN_H\n\n#include <wayfire/plugin.hpp>\n\nclass StartdeskPlugin : public wf::plugin_interface_t {\n    public:\n        StartdeskPlugin();\n\n    private:\n        wf::wl_timer<true> waiter;\n\n        // plugin_interface_t interface\n    public:\n        void init();\n};\n\nDECLARE_WAYFIRE_PLUGIN(StartdeskPlugin)\n\n#endif // STARTDESKPLUGIN_H\n"
  },
  {
    "path": "wayfire-plugins/wayfire-plugins.pro",
    "content": "TEMPLATE = subdirs\n\nSUBDIRS += \\\n    keygrab-plugin \\\n    startdesk-plugin\n"
  }
]