From b1c7241116f40f97e3f1a516809d734564783686 Mon Sep 17 00:00:00 2001 From: Christophe Dumez Date: Mon, 28 Jun 2010 10:02:13 +0200 Subject: [PATCH] Initial commit --- AUTHORS | 9 + COPYING | 674 +++++++++++++++++++++++++++++++++++++++++ Changelog | 2 + NEWS | 5 + TimedSilencer.pro | 35 +++ TimedSilencer.pro.user | 247 +++++++++++++++ alarmd_backend.h | 136 +++++++++ dbus_backend.h | 47 +++ desktop/timedsilencer.desktop | 9 + ico/26x26/timedsilencer.png | Bin 0 -> 1533 bytes ico/48x48/timedsilencer.png | Bin 0 -> 3137 bytes ico/64x64/timedsilencer.png | Bin 0 -> 4339 bytes ico/xpm/timedsilencer.xpm | 255 ++++++++++++++++ lang.qrc | 7 + lang/timedsilencer_en.qm | Bin 0 -> 23 bytes lang/timedsilencer_en.ts | 32 ++ lang/timedsilencer_fr.qm | Bin 0 -> 583 bytes lang/timedsilencer_fr.ts | 51 ++++ lang/timedsilencer_zh.qm | Bin 0 -> 370 bytes lang/timedsilencer_zh.ts | 51 ++++ main.cpp | 43 +++ mainwindow.cpp | 116 +++++++ mainwindow.h | 44 +++ phone_profile.h | 23 ++ 24 files changed, 1786 insertions(+) create mode 100644 AUTHORS create mode 100644 COPYING create mode 100644 Changelog create mode 100644 NEWS create mode 100644 TimedSilencer.pro create mode 100644 TimedSilencer.pro.user create mode 100644 alarmd_backend.h create mode 100644 dbus_backend.h create mode 100644 desktop/timedsilencer.desktop create mode 100644 ico/26x26/timedsilencer.png create mode 100644 ico/48x48/timedsilencer.png create mode 100644 ico/64x64/timedsilencer.png create mode 100644 ico/xpm/timedsilencer.xpm create mode 100644 lang.qrc create mode 100644 lang/timedsilencer_en.qm create mode 100644 lang/timedsilencer_en.ts create mode 100644 lang/timedsilencer_fr.qm create mode 100644 lang/timedsilencer_fr.ts create mode 100644 lang/timedsilencer_zh.qm create mode 100644 lang/timedsilencer_zh.ts create mode 100644 main.cpp create mode 100644 mainwindow.cpp create mode 100644 mainwindow.h create mode 100644 phone_profile.h diff --git a/AUTHORS b/AUTHORS new file mode 100644 index 0000000..d95359f --- /dev/null +++ b/AUTHORS @@ -0,0 +1,9 @@ +Author: +* Christophe Dumez + +Images Authors: +* files: ico/YYxYY/*.png + files: ico/xpm/*.xpm + copyright: OpenClipart + license: creative commons Public Domain Dedication + diff --git a/COPYING b/COPYING new file mode 100644 index 0000000..94a9ed0 --- /dev/null +++ b/COPYING @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/Changelog b/Changelog new file mode 100644 index 0000000..9be2350 --- /dev/null +++ b/Changelog @@ -0,0 +1,2 @@ +* Unreleased - Christophe Dumez - v0.1 + - Initial release diff --git a/NEWS b/NEWS new file mode 100644 index 0000000..83a677b --- /dev/null +++ b/NEWS @@ -0,0 +1,5 @@ +See Changelog + +******************************************* +Christophe dumez - dchris@gmail.com + diff --git a/TimedSilencer.pro b/TimedSilencer.pro new file mode 100644 index 0000000..0c37c2d --- /dev/null +++ b/TimedSilencer.pro @@ -0,0 +1,35 @@ +#------------------------------------------------- +# +# Project created by QtCreator 2010-06-26T11:35:08 +# +#------------------------------------------------- + +LANG_PATH = lang + +QT += maemo5 dbus + +LIBS += -lalarm + +TARGET = timedsilencer + +TEMPLATE = app + + +SOURCES += main.cpp\ + mainwindow.cpp + +HEADERS += mainwindow.h \ + alarmd_backend.h \ + dbus_backend.h \ + phone_profile.h + +# Translations +TRANSLATIONS = $$LANG_PATH/timedsilencer_en.ts \ + $$LANG_PATH/timedsilencer_fr.ts \ + $$LANG_PATH/timedsilencer_zh.ts + +RESOURCES = lang.qrc + +#CONFIG += mobility +#MOBILITY = + diff --git a/TimedSilencer.pro.user b/TimedSilencer.pro.user new file mode 100644 index 0000000..74689fc --- /dev/null +++ b/TimedSilencer.pro.user @@ -0,0 +1,247 @@ + + + + ProjectExplorer.Project.ActiveTarget + 0 + + + ProjectExplorer.Project.EditorSettings + + UTF-8 + + + + ProjectExplorer.Project.Target.0 + + Maemo + Qt4ProjectManager.Target.MaemoDeviceTarget + 1 + 0 + + + qmake + QtProjectManager.QMakeBuildStep + + + + Make + Qt4ProjectManager.MakeStep + false + + + + + + Qt4ProjectManager.MaemoPackageCreationStep + + /home/chris/N900/TimedSilencer/ico/26x26/timedsilencer.png + /home/chris/N900/TimedSilencer/ico/48x48/timedsilencer.png + /home/chris/N900/TimedSilencer/ico/64x64/timedsilencer.png + /home/chris/N900/TimedSilencer/ico/xpm/timedsilencer.xpm + /home/chris/N900/TimedSilencer/desktop/timedsilencer.desktop + + false + /usr/bin/timedsilencer + + /usr/share/icons/hicolor/26x26/apps/timedsilencer.png + /usr/share/icons/hicolor/48x48/apps/timedsilencer.png + /usr/share/icons/hicolor/64x64/apps/timedsilencer.png + /usr/share/pixmaps/timedsilencer.xpm + /usr/share/applications/hildon/timedsilencer.desktop + + + 3 + + Make + Qt4ProjectManager.MakeStep + true + + clean + + + + 1 + false + + Debug + Qt4ProjectManager.Qt4BuildConfiguration + 2 + /home/chris/N900/TimedSilencer-build-maemo + 7 + 9 + true + + + + qmake + QtProjectManager.QMakeBuildStep + + + + Make + Qt4ProjectManager.MakeStep + false + + + + + + Qt4ProjectManager.MaemoPackageCreationStep + + /home/chris/N900/TimedSilencer/ico/26x26/timedsilencer.png + /home/chris/N900/TimedSilencer/ico/48x48/timedsilencer.png + /home/chris/N900/TimedSilencer/ico/64x64/timedsilencer.png + /home/chris/N900/TimedSilencer/ico/xpm/timedsilencer.xpm + /home/chris/N900/TimedSilencer/desktop/timedsilencer.desktop + + false + /usr/bin/timedsilencer + + /usr/share/icons/hicolor/26x26/apps/timedsilencer.png + /usr/share/icons/hicolor/48x48/apps/timedsilencer.png + /usr/share/icons/hicolor/64x64/apps/timedsilencer.png + /usr/share/pixmaps/timedsilencer.xpm + /usr/share/applications/hildon/timedsilencer.desktop + + + 3 + + Make + Qt4ProjectManager.MakeStep + true + + clean + + + + 1 + false + + Release + Qt4ProjectManager.Qt4BuildConfiguration + 0 + /home/chris/N900/TimedSilencer-build-maemo + 7 + 9 + true + + 2 + + TimedSilencer.pro + N900 + Qt4ProjectManager.MaemoRunConfiguration + + + 2010-06-26T16:09:16 + 2010-06-26T16:55:11 + + 8 + + 2010-06-27T15:34:11 + 2010-06-27T15:12:49 + + + 1 + + + + ProjectExplorer.Project.Target.1 + + Qt Simulator + Qt4ProjectManager.Target.QtSimulatorTarget + 0 + 0 + + + qmake + QtProjectManager.QMakeBuildStep + + + + Make + Qt4ProjectManager.MakeStep + false + + + + 2 + + Make + Qt4ProjectManager.MakeStep + true + + clean + + + + 1 + false + + Debug + Qt4ProjectManager.Qt4BuildConfiguration + 2 + /home/chris/N900/TimeSilencer-build-simulator + 6 + 0 + true + + + + qmake + QtProjectManager.QMakeBuildStep + + + + Make + Qt4ProjectManager.MakeStep + false + + + + 2 + + Make + Qt4ProjectManager.MakeStep + true + + clean + + + + 1 + false + + Release + Qt4ProjectManager.Qt4BuildConfiguration + 0 + /home/chris/N900/TimedSilencer-build-simulator + 6 + 0 + true + + 2 + + TimedSilencer + Qt4ProjectManager.Qt4RunConfiguration + 2 + + TimedSilencer.pro + false + false + + false + false + + + 1 + + + + ProjectExplorer.Project.TargetCount + 2 + + + ProjectExplorer.Project.Updater.FileVersion + 4 + + diff --git a/alarmd_backend.h b/alarmd_backend.h new file mode 100644 index 0000000..fe77b53 --- /dev/null +++ b/alarmd_backend.h @@ -0,0 +1,136 @@ +/* + * This file is part of TimedSilencer. + * + * TimedSilencer is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * TimedSilencer is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with TimedSilencer. If not, see . + */ + +#ifndef ALARMD_TALKER_H +#define ALARMD_TALKER_H + +#include +#include +#include +#include +#include +#include + +#include "phone_profile.h" + +// Alarmd documentation found at: +// http://wiki.maemo.org/Documentation/Maemo_5_Developer_Guide/Using_Generic_Platform_Components/Alarm_Framework +class AlarmdBackend : public QObject { + Q_OBJECT +private: + static time_t toTime_t(QTime t) { + int time_diff = QTime::currentTime().secsTo(t); + if(time_diff < 0) { + // Add 24 hours + time_diff += 86400; + } + qDebug("time diff: %d", time_diff); + return (time_t) time(0) + time_diff; + } + +public: + static void deleteEvents() { + // Get events cookies + QSettings settings("TimedSilencer", "TimedSilencer"); + cookie_t silent_cookie = settings.value("silencing_cookie", 0).toLongLong(); + if(silent_cookie != 0) { + qDebug("Deleting silent profile event with cookie %ld", (long) silent_cookie); + alarmd_event_del(silent_cookie); + } + cookie_t general_cookie = settings.value("unsilencing_cookie", 0).toLongLong(); + if(general_cookie != 0) { + qDebug("Deleting general profile event with cookie %ld", (long) general_cookie); + alarmd_event_del(general_cookie); + } + } + + static void setProfileEvent(Profile p, QTime event_time) { + // Get event cookie + QSettings settings("TimedSilencer", "TimedSilencer"); + cookie_t cookie; + if(p == SILENT) + cookie = settings.value("silencing_cookie", 0).toLongLong(); + else + cookie = settings.value("unsilencing_cookie", 0).toLongLong(); + alarm_event_t *eve = 0; + if(cookie == 0 || (eve = alarmd_event_get(cookie)) == 0) { + qDebug("Profile event does not exist yet, creating it..."); + // The event does not exist yet + newProfileEvent(p, event_time); + return; + } + // Update existing event + qDebug("Updating profile event with cookie %ld", (long)cookie); + eve->alarm_time = toTime_t(event_time); + alarmd_event_update(eve); + } + +protected: + static void newProfileEvent(Profile p, QTime event_time) { + // Create the default alarm struct. + alarm_event_t *newEvent = alarm_event_create(); + // Set the APP ID + alarm_event_set_alarm_appid(newEvent, "TimedSilencer"); + // Set the title + if(p == SILENT) + alarm_event_set_title(newEvent, "silent_profile"); + else + alarm_event_set_title(newEvent, "general_profile"); + // Timing + newEvent->recur_secs = 86400; // 24 hours interval + newEvent->recur_count = -1; // Reoccur infinitely + newEvent->alarm_time = toTime_t(event_time); + //Add 1 action to our alarm event, and assign it to the "act" variable + alarm_action_t *act = alarm_event_add_actions(newEvent, 1); + // Actions are documented here: + // http://maemo.org/api_refs/5.0/5.0-final/libalarm/libalarm_8h.html#cc8e6f439d134448001132132476683c910f7626ec85a4170659b53fa2f0abc7 + //Setup this action to be an "DBus command" one; also set it up to use DBUS auto-activation. + act->flags = ALARM_ACTION_WHEN_TRIGGERED | ALARM_ACTION_DBUS_USE_ACTIVATION | ALARM_ACTION_TYPE_DBUS; + + //Setup the DBus params for this action + alarm_action_set_dbus_interface(act, "com.nokia.profiled"); + alarm_action_set_dbus_service(act, "com.nokia.profiled"); + alarm_action_set_dbus_path(act, "/com/nokia/profiled"); + alarm_action_set_dbus_name(act, "set_profile"); + + if(p == SILENT) { + const char* param = "silent"; + alarm_action_set_dbus_args(act, DBUS_TYPE_STRING, ¶m, DBUS_TYPE_INVALID); + } else { + const char* param = "general"; + alarm_action_set_dbus_args(act, DBUS_TYPE_STRING, ¶m, DBUS_TYPE_INVALID); + } + + // Finally with everything setup, try to add your event to the alarm queue + cookie_t cookie = alarmd_event_add(newEvent); + if(cookie != 0) { + // Save cookie + QSettings settings("TimedSilencer", "TimedSilencer"); + if(p == SILENT) { + qDebug("Saving silent profile event cookie: %ld", (long)cookie); + settings.setValue("silencing_cookie", static_cast(cookie)); + } else { + qDebug("Saving silent general event cookie: %ld", (long)cookie); + settings.setValue("unsilencing_cookie", static_cast(cookie)); + } + return; + } + qDebug("ERROR: Failed to add profile event to the queue!"); + } +}; + +#endif // ALARMD_TALKER_H diff --git a/dbus_backend.h b/dbus_backend.h new file mode 100644 index 0000000..ece9cb6 --- /dev/null +++ b/dbus_backend.h @@ -0,0 +1,47 @@ +/* + * This file is part of TimedSilencer. + * + * TimedSilencer is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * TimedSilencer is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with TimedSilencer. If not, see . + */ + +#ifndef DBUS_TALKER_H +#define DBUS_TALKER_H + +#include +#include + +#include "phone_profile.h" + +class DBusBackend { + +public: + // DBus Command taken from http://wiki.maemo.org/Phone_control#Profiles + // dbus-send --type=method_call --dest=com.nokia.profiled /com/nokia/profiled com.nokia.profiled.set_profile string:"general" + // dbus-send --type=method_call --dest=com.nokia.profiled /com/nokia/profiled com.nokia.profiled.set_profile string:"silent" + static bool setProfile(Profile p) { + QDBusMessage msg = QDBusMessage::createMethodCall("com.nokia.profiled", + "/com/nokia/profiled", + "com.nokia.profiled", + "set_profile"); + if(p == SILENT) + msg << "silent"; + else + msg << "general"; + + QDBusMessage ret = QDBusConnection::sessionBus().call(msg); + return ret.type() != QDBusMessage::ErrorMessage; + } +}; + +#endif // DBUS_TALKER_H diff --git a/desktop/timedsilencer.desktop b/desktop/timedsilencer.desktop new file mode 100644 index 0000000..70a2212 --- /dev/null +++ b/desktop/timedsilencer.desktop @@ -0,0 +1,9 @@ +[Desktop Entry] +Categories=Qt; +Comment=V0.1 +Exec=timedsilencer +GenericName=Timed Silencer +Icon=timedsilencer +Name=Timed Silencer +Terminal=false +Type=Application diff --git a/ico/26x26/timedsilencer.png b/ico/26x26/timedsilencer.png new file mode 100644 index 0000000000000000000000000000000000000000..139e8eb78eebc0e332db1f8363cb93706c032265 GIT binary patch literal 1533 zcmVSWn*+{Z*CxOVr*$=VRUb4a%CWIb!lbl zIc}{0000woMObt}b#!QNasYXDWpf}$RY^=tPgVWXOTPdB02XvbSad{Xb7OL8aCB*J zZUAp$Y-wjdvHv56vsdJ=Gr7HNhJhX5v;7;3`SFl z5Ms6%HCm5)O@|0GrX5j66ji0uL20~o%&5mqBO%kK@to>|jy6Oz5oM_NZdODr5*ZS* z%Vy=*Kkmf3HVNOq&YW|8=W~DO_qvi0g4QHSl2NbMr&_Jn(OtS(dUT93ws*T--nvKC zk1HIP$_xHJzTe~V91%iXYPC*FAW4!8gHzt!H}<3XgXGXS&Q^BCQ5{T0H3YVS@DMO} zu4h0@C5?4g*|~XfzTIw57eds$F-TFA4>Oiz=E_~C25&iPpuyYfqzMm!Wn;>5lxDeh zY+XIu>-Fww6(mWLJ}xe9N5=A;lIaQ7i>IHnl)+DFfU>luuU2a^HrJ=Ct(hTo%EGc6-ok|d+7)9F4CZOuGr-XxyTd1*xvkA;qp1B~I}`3dY8mvh9@N3T zW^zkz85lTl;3zr9*th#Nr(P30x&juA1DyhqVQ&Wd_&rE8!MG%?-(DR?ml%^#4r><~ z`fA$}d--gW;mttZJEEdBDDi=-uKyen!O^m8r9!t*Vd~$vq>GopuV>HiR`?6)cvF<85#TPv90P}2^_$|~wh0ftEL-c_#HVNDw`0FC9JK&48YYWfo zuF%-n_^Tv@U~r1HXvECiV^7su0JHj;^Nl1?0UQ1o(>=b2qBzX z)_yrHHNLdjf^)XP&biR7qt9nDz^=KlG}}L4r$Ac51-5U^eDSnv9zK)Fl(S_0vFV>? z_wf6|kRVtvUhR8mu+c@d$oYW#I}Z=6|lrsSU?O@6^8egcG_1FaDSe8`{AyNCd3kwyi%)rz6h)anXa4fIVzF$WHE+!%In2U&XEfLEg;HIsZsl$rAvUs(f!&=n zJi5yMy_-*;E-IWXgm5-n?+tz+`^d8VeoD&F2|dkk8$-e(Lju|awyAR7sJ?sKezUl^ j_z#!MwO0t?XsyowN1^#(n-MGO00000NkvXXu0mjf9TwC` literal 0 HcmV?d00001 diff --git a/ico/48x48/timedsilencer.png b/ico/48x48/timedsilencer.png new file mode 100644 index 0000000000000000000000000000000000000000..09a8e6cb49816b3b6fb7ab78b5bd396fbed85035 GIT binary patch literal 3137 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 byY_zo{CAkf6A_S?00000NkvXXu0mjf)UEjk literal 0 HcmV?d00001 diff --git a/ico/64x64/timedsilencer.png b/ico/64x64/timedsilencer.png new file mode 100644 index 0000000000000000000000000000000000000000..3703e65b010c1b7a4fcd6436b3d9f3179ff23ef0 GIT binary patch literal 4339 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 literal 0 HcmV?d00001 diff --git a/ico/xpm/timedsilencer.xpm b/ico/xpm/timedsilencer.xpm new file mode 100644 index 0000000..9176cd4 --- /dev/null +++ b/ico/xpm/timedsilencer.xpm @@ -0,0 +1,255 @@ +/* XPM */ +static char *timedsilencer[] = { +/* columns rows colors chars-per-pixel */ +"165 165 84 1", +" c #003500350035", +". c #0C190C190C19", +"X c #155B155B155B", +"o c #1B931B931B93", +"O c #239D239D239D", +"+ c #2D2D2D2D2D2D", +"@ c #334F334F334F", +"# c #3C2C3C2C3C2C", +"$ c #44E044E044E0", +"% c #4B614B614B61", +"& c #544854485448", +"* c #5CA55CA55CA5", +"= c #628662866286", +"- c #6BCC6BCC6BCC", +"; c #73E373E373E3", +": c #7DC77DC77DC7", +"> c #00054C50FFFF", +", c #06F4512DFFFF", +"< c #0BB75485FFFF", +"1 c #0FF85781FFFF", +"2 c #13935A0AFFFF", +"3 c #191F5DEFFFFF", +"4 c #1E59619AFFFF", +"5 c #23AD6557FFFF", +"6 c #2A9D6A36FFFF", +"7 c #30A86E74FFFF", +"8 c #35D67216FFFF", +"9 c #3B0775BBFFFF", +"0 c #3EA37844FFFF", +"q c #43CC7BE3FFFF", +"w c #48E17F74FFFF", +"e c #4D32827CFFFF", +"r c #527B8632FFFF", +"t c #569A8917FFFF", +"y c #5C9E8D4FFFFF", +"u c #60558FEBFFFF", +"i c #64BB9302FFFF", +"p c #6AB59734FFFF", +"a c #6E5E99C5FFFF", +"s c #72F99D01FFFF", +"d c #77BAA057FFFF", +"f c #7B38A2CBFFFF", +"g c #854085408540", +"h c #8D508D508D50", +"j c #946394639463", +"k c #9CB29CB29CB2", +"l c #A237A237A237", +"z c #AC9AAC9AAC9A", +"x c #B371B371B371", +"c c #BB81BB81BB81", +"v c #8158A717FFFF", +"b c #84E2A993FFFF", +"n c #8AE8ADCDFFFF", +"m c #8F36B0D3FFFF", +"M c #93ECB422FFFF", +"N c #98E6B7A0FFFF", +"B c #9C46B9FFFFFF", +"V c #A1E8BDF3FFFF", +"C c #A712C192FFFF", +"Z c #ABBBC4D9FFFF", +"A c #B062C81CFFFF", +"S c #B454CAE1FFFF", +"D c #BA27CEF8FFFF", +"F c #BDCED188FFFF", +"G c #C57FC57FC57F", +"H c #CBABCBABCBAB", +"J c #D436D436D436", +"K c #DB54DB54DB54", +"L c #C532D6B8FFFF", +"P c #C7D8D894FFFF", +"I c #CC3CDBA9FFFF", +"U c #D1AEDF7CFFFF", +"Y c #D51CE1E4FFFF", +"T c #DB39E62FFFFF", +"R c #DEEAE8C7FFFF", +"E c #E4FFE4FFE4FF", +"W c #EC1AEC1AEC1A", +"Q c #E4D5ECEDFFFF", +"! c #E96FF029FFFF", +"~ c #ECAFF270FFFF", +"^ c #F476F476F476", +"/ c #F257F669FFFF", +"( c #F676F94DFFFF", +") c #FFF7FFF8FFFB", +/* pixels */ +" x)))))))x ))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))", +" x())x ))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))", +" : ))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))", +" ))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))", +" ))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))", +" ))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))", +" ))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))", +" ))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))", +" ; ))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))", +" z())z ))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))", +" z())))))z ))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))", +"))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))(^EKJHHHHJKE^^)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))", +")))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))^Ech&o X%gxK^))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))", +")))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))Wc-X .=xE))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))", +")))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))(H; .@$*-:ghhh:-*%O -G^))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))", +"))))))))))))))))))))))))))))))))))))))))))))))))))))))))))(G& +*kE))))))))))))))))))))Ek=+. %c^)))))))))))))))))))))))))))))))))))))))))))))))))))))))))", +"))))))))))))))))))))))))))))))))))))))))))))))))))))))))K; .#h^))))))))))))))))))))))))))))))^h$. -J)))))))))))))))))))))))))))))))))))))))))))))))))))))))", +"))))))))))))))))))))))))))))))))))))))))))))))))))))))x+ X=K))))))))))))))))))))))))))))))))))))))K=o Xz())))))))))))))))))))))))))))))))))))))))))))))))))))", +")))))))))))))))))))))))))))))))))))))))))))))))))))^l .=W))))))))))))QZft0<>>>>>>>>6qtsVQ))))))))))))E=X j^))))))))))))))))))))))))))))))))))))))))))))))))))", +")))))))))))))))))))))))))))))))))))))))))))))))))(k @x))))))))))Ls92>>>>>>>>>>>>>>>>>>>>>><7sL))))))))))x@ h^))))))))))))))))))))))))))))))))))))))))))))))))", +"))))))))))))))))))))))))))))))))))))))))))))))))z &^))))))))Tp6>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>5pT))))))))^& l())))))))))))))))))))))))))))))))))))))))))))))", +"))))))))))))))))))))))))))))))))))))))))))))))Jo .=))))))))Ir>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>1rI))))))))= .G)))))))))))))))))))))))))))))))))))))))))))))", +"))))))))))))))))))))))))))))))))))))))))))))W- &))))))))p<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>3p))))))))& &W)))))))))))))))))))))))))))))))))))))))))))", +")))))))))))))))))))))))))))))))))))))))))))c #^))))))L9>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>9L))))))^# z))))))))))))))))))))))))))))))))))))))))))", +")))))))))))))))))))))))))))))))))))))))))^* oz))))))Z5>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>5Z))))))zX %W))))))))))))))))))))))))))))))))))))))))", +"))))))))))))))))))))))))))))))))))))))))H *))))))S5>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>5S))))))* G)))))))))))))))))))))))))))))))))))))))", +")))))))))))))))))))))))))))))))))))))))k oG)))))T7>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>7R)))))Go g))))))))))))))))))))))))))))))))))))))", +")))))))))))))))))))))))))))))))))))))^* %))))))r>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>t))))))% $^))))))))))))))))))))))))))))))))))))", +"))))))))))))))))))))))))))))))))))))Wo j)))))V<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>1V)))))h K)))))))))))))))))))))))))))))))))))", +")))))))))))))))))))))))))))))))))))K XK)))))q>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>q)))))KX H))))))))))))))))))))))))))))))))))", +"))))))))))))))))))))))))))))))))))H +)))))D2>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>1F)))))+ c)))))))))))))))))))))))))))))))))", +")))))))))))))))))))))))))))))))))c $)))))a>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>s)))))$ z))))))))))))))))))))))))))))))))", +"))))))))))))))))))))))))))))))))c *)))))0>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>0)))))* l)))))))))))))))))))))))))))))))", +")))))))))))))))))))))))))))))))c -)))))4>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>5)))))- z))))))))))))))))))))))))))))))", +"))))))))))))))))))))))))))))))H -))))Y<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>1560ertreq863<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>Z))))* K)))))))))))))))))))))))))))", +")))))))))))))))))))))))))))^o $))))Z>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>19sS)))))))))))))))))b5>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>Z))))$ W))))))))))))))))))))))))))", +")))))))))))))))))))))))))))* +))))D>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>D))))+ #))))))))))))))))))))))))))", +"))))))))))))))))))))))))))k X))))U,>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,Y))))X :)))))))))))))))))))))))))", +")))))))))))))))))))))))))H K))))1>>>>>>>>>>>>>>>>>>>>>>>>>>>8A))))))))!Svq>>>>>>>>>>>>>>>>>0C/)))))))b2>>>>>>>>>>>>>>>>>>>>>>>>>>1))))K c))))))))))))))))))))))))", +"))))))))))))))))))))))))^ h))))5>>>>>>>>>>>>>>>>>>>>>>>>>,y)))))))~Ze>>>>>>>>>>>>>>>>>>>>>>>>>pR)))))))s<>>>>>>>>>>>>>>>>>>>>>>>>>5))))h W)))))))))))))))))))))))", +"))))))))))))))))))))))))= %))))0>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>efVDLIILLANsq,>>>>>>>eY)))))))t>>>>>>>>>>>>>>>>>>>>>>>>>0))))% #)))))))))))))))))))))))", +")))))))))))))))))))))))c o))))s>>>>>>>>>>>>>>>>>>>>>>>>y))))))Lq>>>>>2vLTT()))))))))))))))(QDf4>>>>5S/)))))!8>>>>>>>>>>>>>>>>>>>>>>>>a))))o l))))))))))))))))))))))", +"))))))))))))))))))))))^ G)))F>>>>>>>>>>>>>>>>>>>>>>>0))))))Z>>>>5iA~))))))))(/////()))))))))))/If>>>>5fQ))))M1>>>>>>>>>>>>>>>>>>>>>>>F)))G E)))))))))))))))))))))", +"))))))))))))))))))))))- *))))1>>>>>>>>>>>>>>>>>>>>>3S)))))))>>>fR)))))!PBp7>>>>>>>>>>>>7R))))w>>>>>>>>>>>>>>>>>>>>>>1))))* $)))))))))))))))))))))", +")))))))))))))))))))))H X))))q>>>>>>>>>>>>>>>>>>>>q~)))))))))BQ)))/Un9>>>>>>>>>>>>>>>>>>>>>>>>6sSQ)))))Qn>>>N))))V1>>>>>>>>>>>>>>>>>>>>>q))))o c))))))))))))))))))))", +")))))))))))))))))))))O z)))V>>>>>>>>>>>>>>>>>>>>n)))))))))))))QB8>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>eZ!)))R5>>t/))))9>>>>>>>>>>>>>>>>>>>>>V)))z ()))))))))))))))))))", +"))))))))))))))))))))z #))))1>>>>>>>>>>>>>>>>>>>q)))))))))))Rn>>>>>>>>>>>>F)Iw>>>>>>>>>>>>>>>>>>>>>>>>3N!))n>>>I))))s>>>>>>>>>>>>>>>>>>>>1))))# j)))))))))))))))))))", +")))))))))))))))))))( ^)))t>>>>>>>>>>>>>>>>>>>>D))))))))!M<>>>>>>>>>>>>s/!SS!U7>>>>>>>>>>>>>>>>>>>>>>>>>9D)/LU~)))))F1>>>>>>>>>>>>>>>>>>>t)))^ W))))))))))))))))))", +")))))))))))))))))))l &)))R>>>>>>>>>>>>>>>>>>>>>))))))(F9>>>>>>>>>>>>>9Y/t>>>>S)S>>>>>>>>>>>>>>>>>>>>>>>>>>>M/)))))))))5>>>>>>>>>>>>>>>>>>>T)))& g))))))))))))))))))", +"))))))))))))))))))^ ))))7>>>>>>>>>>>>>>>>>>>>>))))/n>>>>>>>>>>>>>>qI)I>>>>>>>qQ(B>>>>>>>>>>>>>>>DRLp>>>>>>>>v/))))))))0>>>>>>>>>>>>>>>>>>7)))) W)))))))))))))))))", +"))))))))))))))))))l =)))S>>>>>>>>>>>>>>>>>>>>>>)))/>>>>>>>>r>>>>eV!))N>>>>>>>>>>i!(V2>>>>>>>>>>>>N))MUZ6>>>>>>>n/)))))))r>>>>>>>>>>>>>>>>>>A)))= h)))))))))))))))))", +")))))))))))))))))( .))))5>>>>>>>>>>>>>>>>>>>>>>Y))m>>>1w>>T)(/~~!QRY9>>>>>>>>>>>>>yT)!LV>>>>9Dq>>p)N>>qQ/p>>>>>>>L))))))S>>>>>>>>>>>>>>>>>>5)))) ^))))))))))))))))", +")))))))))))))))))c &)))Z>>>>>>>>>>>>>>>>>>>>>>>B))0>>>pZ>>/S>>>>>>>>>>>>>>>>>>>>>>>>5Z/)TBVV/))QS/)M>>>>A)v>>>>>>>p!))))B>>>>>>>>>>>>>>>>>>>Z)))& k))))))))))))))))", +")))))))))))))))))O ^)))5>>>>>>>>>>>>>>>>>>>>>>>a))8>>>v!>fI>>>>>>>>>>>>>>>>>>>>>>>>>>>>rVSqV()/LtiDR>>>>>b)N>>v3>>>>I)))s>>>>>>>>>>>>>>>>>>>5)))^ ))))))))))))))))", +"))))))))))))))))K @)))L>>>>>>>>>>>>>>>>>>>>>>>>e))i>>>M)!(>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>t(A>MY>>>>>)))e>>>>>>>>>>>>>>>>>>>>L)))@ H)))))))))))))))", +")))))))))))))))); x)))9>>>>>>>>>>>>>>>>>>>>>>>>q))B>>>Z))I>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>6)LA)u>>>6)))6>>>>>>>>>>>>>>>>>>>>9)))x %)))))))))))))))", +")))))))))))))))^ X))))>>>>>>>>>>>>>>>>>>>>>>>>>e))P>>>S))a>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>f)))Y>>>p)))1>>>>>>>>>>>>>>>>>>>>>))))X ^))))))))))))))", +")))))))))))))))G =)))p>>>>>>>>>>>>>>>>>>>>>>>>>n))Q>>>Z))>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>!))(>>>s)))>>>>>>>>>>>>>>>>>>>>>>p)))= z))))))))))))))", +")))))))))))))))* E)))3>>>>>>>>>>>>>>>>>>>>>>>>7)))Q>>>N)Q>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>v)))6>>s)))>>>>>>>>>>>>>>>>>>>>>>2)))W +))))))))))))))", +"))))))))))))))^ o)))I>>>>>>>>>>>>>>>>>>>>>>>>>())))u>>p)M>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>)))s>>s))!>>>>>>>>>>>>>>>>>>>>>>>I)))o W)))))))))))))", +"))))))))))))))H =)))r>>>>>>>>>>>>>>>>>>>>>>>>>)))))L>>>/>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>I))w>>M))!>>>>>>>>>>>>>>>>>>>>>>>r)))= x)))))))))))))", +")))))))))))))); K)))1>>>>>>>>>>>>>>>>>>>>>>>>>Q))))T>>>y>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>e))3>>I)))>>>>>>>>>>>>>>>>>>>>>>>1)))K %)))))))))))))", +")))))))))))))) .)))T>>>>>>>>>>>>>>>>>>>>>>>>>>w))))S>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>I)5>6))))<>>>>>>>>>>>>>>>>>>>>>>>T))). ())))))))))))", +")))))))))))))W $)))p>>>>>>>>>>>>>>>>>>>>>>>>>>>s)))q>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>U~6Q))))0>>>>>>>>>>>>>>>>>>>>>>>i)))# K))))))))))))", +")))))))))))))x h)))5>>>>>>>>>>>>>>>>>>>>>>>>>>><)))r>Z9>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>wL)))))D>>>>>>>>>>>>>>>>>>>>>>>6)))h k))))))))))))", +")))))))))))))- ^)))>>>>>>>>>>>>>>>>>>>>>>>>>>>>3))))()S>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>~))))0>>>>>>>>>>>>>>>>>>>>>>>,)))^ %))))))))))))", +")))))))))))))X .)))L>>>>>>>>>>>>>>>>>>>>>>>>>>>>s))))))!>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>v)))Z>>>>>>>>>>>>>>>>>>>>>>>>>L))). ))))))))))))", +"))))))))))))^ +)))s>>>>>>>>>>>>>>>>>>>>>>>>>>5L)))))))(>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>S/VuV)))<>>>>>>>>>>>>>>>>>>>>>>>>>s)))+ W)))))))))))", +"))))))))))))K =)))8>>>>>>>>>>>>>>>>>>>>>>>>6Z))))))))))>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>L))))))s>>>>>>>>>>>>>>>>>>>>>>>>>>9)))* H)))))))))))", +"))))))))))))c k)))2>>>>>>>>>>>>>>>>>>>>>>5D))))))))))))<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>L()))))m>>>>>>>>>>>>>>>>>>>>>>>>>>2)))k k)))))))))))", +"))))))))))))h E)))>>>>>>>>>>>>>>>>>>>>>>i))))))))))))))2>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>U)))))))5>>>>>>>>>>>>>>>>>>>>>>>>>>)))E =)))))))))))", +"))))))))))))& )))!>>>>>>>>>>>>>>>>>>>>>f)))))))))))))))2>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>R))))))))t>>>>>>>>>>>>>>>>>>>>>>>>>!))) +)))))))))))", +"))))))))))))o .)))C>>>>>>>>>>>>>>>>>>>>1))))))))))))))))<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>~)))))))))T3>>>>>>>>>>>>>>>>>>>>>>>Z))). )))))))))))", +")))))))))))) o)))d>>>>>>>>>>>>>>>>>>>>r))))))))))))))))<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>()))))))))))7>>>>>>>>>>>>>>>>>>>>>>f)))o ())))))))))", +")))))))))))^ @)))t>>>>>>>>>>>>>>>>>>>>S))))))))))))))))>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>)))))))))))))6>>>>>>>>>>>>>>>>>>>>>t)))@ W))))))))))", +")))))))))))^ $)))0>>>>>>>>>>>>>>>>>>>>)))))))))))))))))>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>5)))))))))))))),>>>>>>>>>>>>>>>>>>>>0)))$ E))))))))))", +")))))))))))E *)))6>>>>>>>>>>>>>>>>>>>2)))))))))))))))))3>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>u))))))))))))))s>>>>>>>>>>>>>>>>>>>>6)))* J))))))))))", +")))))))))))K -)))5>>>>>>>>>>>>>>>>>>>5)))))))))))))))))9>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>N)))))))))))))))<>>>>>>>>>>>>>>>>>>>5)))- H))))))))))", +")))))))))))J :)))3>>>>>>>>>>>>>>>>>>>5)))))))))))))))))p>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>I)))))))))))))))0>>>>>>>>>>>>>>>>>>>3))): c))))))))))", +")))))))))))H h)))1>>>>>>>>>>>>>>>>>>>3)))))))))))))))))C>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>~)))))))))))))))f>>>>>>>>>>>>>>>>>>>2)))g x))))))))))", +")))))))))))H h)))1>>>>>>>>>>>>>>>>>>><))))))))))))))))))f>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>))))))))))))))))D>>>>>>>>>>>>>>>>>>>1)))h x))))))))))", +")))))))))))H h)))1>>>>>>>>>>>>>>>>>>>>Q))))))))))))))))))s>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>e))))))))))))))))Y>>>>>>>>>>>>>>>>>>>1)))h x))))))))))", +")))))))))))H g)))1>>>>>>>>>>>>>>>>>>>>M))))))))))))))))))D>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>V))))))))))))))))T>>>>>>>>>>>>>>>>>>>2)))h x))))))))))", +")))))))))))J :)))3>>>>>>>>>>>>>>>>>>>>t))))))))))))))))))Q>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>7Q))))))))))))))))L>>>>>>>>>>>>>>>>>>>3))): c))))))))))", +")))))))))))K -)))5>>>>>>>>>>>>>>>>>>>>8))))))))))))))))))/>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>y))))))))))))))))))B>>>>>>>>>>>>>>>>>>>5)))- H))))))))))", +")))))))))))E *)))6>>>>>>>>>>>>>>>>>>>>5))))))))))))))))))~>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>L))))))))))))))))))a>>>>>>>>>>>>>>>>>>>6)))* J))))))))))", +")))))))))))W %)))0>>>>>>>>>>>>>>>>>>>>1))))))))))))))))))Y>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>T))))))))))))))))))0>>>>>>>>>>>>>>>>>>>q)))$ E))))))))))", +")))))))))))^ @)))t>>>>>>>>>>>>>>>>>>>><)))))))))))))))))(1>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>!))))))))))))))))))3>>>>>>>>>>>>>>>>>>>t)))@ W))))))))))", +")))))))))))) o)))f>>>>>>>>>>>>>>>>>>>>>)))))))))))))))))I>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>)))))))))))))))))))>>>>>>>>>>>>>>>>>>>>s)))o ^))))))))))", +"))))))))))))X .)))Z>>>>>>>>>>>>>>>>>>>>>)))))))))))))))))U>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>U)))))))))))))))))I>>>>>>>>>>>>>>>>>>>>C))). )))))))))))", +"))))))))))))& )))!>>>>>>>>>>>>>>>>>>>>>Y))))))))))))))))T>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>p)))))))))))))))))f>>>>>>>>>>>>>>>>>>>>!))) O)))))))))))", +"))))))))))))g E)))>>>>>>>>>>>>>>>>>>>>>V))))))))))))))))~>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>2)))))))))))))))))0>>>>>>>>>>>>>>>>>>>>)))E =)))))))))))", +"))))))))))))x k)))1>>>>>>>>>>>>>>>>>>>>s))))))))))))))))(>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>1)))))))))))))))))3>>>>>>>>>>>>>>>>>>>2)))k j)))))))))))", +"))))))))))))K *)))9>>>>>>>>>>>>>>>>>>>>q)))))))))))))))))5>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>w)))))))))))))))))>>>>>>>>>>>>>>>>>>>>8)))= G)))))))))))", +"))))))))))))^ +)))s>>>>>>>>>>>>>>>>>>>>3)))))))))))))))))v>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>m))))))))))))))))~>>>>>>>>>>>>>>>>>>>>s)))+ W)))))))))))", +"))))))))))))). .)))L>>>>>>>>>>>>>>>>>>>>,)))))))))))))))))I>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>I))))))))))))))))D>>>>>>>>>>>>>>>>>>>>L))). ))))))))))))", +")))))))))))))= ^)))>>>>>>>>>>>>>>>>>>>>>F))))))))))))))))(>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>())))))))))))))))M>>>>>>>>>>>>>>>>>>>>)))^ #))))))))))))", +")))))))))))))x h)))6>>>>>>>>>>>>>>>>>>>>e)))))))))))))))))r>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>2)))))))))))))))))i>>>>>>>>>>>>>>>>>>>5)))h j))))))))))))", +")))))))))))))E #)))p>>>>>>>>>>>>>>>>>>>><)))))))))))))))))F>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>u)))))))))))))))))8>>>>>>>>>>>>>>>>>>>p)))$ J))))))))))))", +")))))))))))))) .)))T>>>>>>>>>>>>>>>>>>>>>f))))))))))))))))(>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>n)))))))))))))))))<>>>>>>>>>>>>>>>>>>>T))). ^))))))))))))", +"))))))))))))))- K)))1>>>>>>>>>>>>>>>>>>>><)))))))))))))))))r>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>/))))))))))))))))U>>>>>>>>>>>>>>>>>>>1)))K $)))))))))))))", +"))))))))))))))G =)))r>>>>>>>>>>>>>>>>>>>>>7))))))))))))))))D>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>n)))))))))))))))))t>>>>>>>>>>>>>>>>>>>r)))= z)))))))))))))", +"))))))))))))))^ o)))I>>>>>>>>>>>>>>>>>>>>>>5I))))))))))))))/>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>/)))))))))))))))))<>>>>>>>>>>>>>>>>>>>I)))o W)))))))))))))", +")))))))))))))))% W)))2>>>>>>>>>>>>>>>>>>>>>>>6sT))))))))))))6>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>f)))))))))))))))))i>>>>>>>>>>>>>>>>>>>3)))E O))))))))))))))", +")))))))))))))))c *)))p>>>>>>>>>>>>>>>>>>>>>>>>>>,17iS)))))))n>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>!))))))))))))))))U>>>>>>>>>>>>>>>>>>>>p)))= l))))))))))))))", +")))))))))))))))^ X))))>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>r)))))))))))))))))1>>>>>>>>>>>>>>>>>>>>))))X W))))))))))))))", +"))))))))))))))))= x)))9>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>L))))~>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>L)))))))))))))))R1>>>>>>>>>>>>>>>>>>>>0)))x $)))))))))))))))", +"))))))))))))))))J @)))L>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>w))))(>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>())))))))))))(Ry>>>>>>>>>>>>>>>>>>>>>>L)))@ c)))))))))))))))", +")))))))))))))))))X ^)))5>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>i))))>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>i))))))))nq3<>>>>>>>>>>>>>>>>>>>>>>>>>5)))^ ()))))))))))))))", +")))))))))))))))))x &)))Z>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>2u))F>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>S)))))L7>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>Z)))& j))))))))))))))))", +")))))))))))))))))( ))))5>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,)))8>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>!))))q>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>5)))) ^))))))))))))))))", +"))))))))))))))))))j *)))S>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>f))L>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>()))3>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>S)))= ;)))))))))))))))))", +"))))))))))))))))))^ .))))6>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>6)))>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>0)))6>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>7)))) W)))))))))))))))))", +")))))))))))))))))))h &)))R>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>)))s>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>U)))<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>R)))& -))))))))))))))))))", +")))))))))))))))))))^ ^)))t>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>S))U>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>p)))Z>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>t)))^ W))))))))))))))))))", +"))))))))))))))))))))l #))))1>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>e)))1>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>/)))6>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>1))))# h)))))))))))))))))))", +"))))))))))))))))))))( z)))V>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>1)))A>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>I)))S>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>V)))z ^)))))))))))))))))))", +")))))))))))))))))))))G X))))q>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>Z)))8>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>V))))2>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>q))))X z))))))))))))))))))))", +"))))))))))))))))))))))& *))))1>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>5)))~<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>v))))q>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>1))))* @)))))))))))))))))))))", +"))))))))))))))))))))))W G)))F>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>b)))/i>>>>>>>>>>>>>>>>>>>>>>>>>>>>f))))y>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>F)))G K)))))))))))))))))))))", +")))))))))))))))))))))))z o))))a>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>C))))P>>>>>>>>>>>>>>>>>>>>>>>>>>n))))u>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>s))))o h))))))))))))))))))))))", +"))))))))))))))))))))))))% %))))0>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>i))))D>>>>>>>>>>>>>>>>>>>>>>>>V))))r>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>0))))% O())))))))))))))))))))))", +"))))))))))))))))))))))))W h))))5>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>3I)))N>>>>>>>>>>>>>>>>>>>>>>L))))7>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>5))))h E)))))))))))))))))))))))", +")))))))))))))))))))))))))G K))))<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>n)))b>>>>>>>>>>>>>>>>>>>3!)))Y3>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>1))))K z))))))))))))))))))))))))", +"))))))))))))))))))))))))))g X))))U<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>v)))N>>>>>>>>>>>>>>>>>p()))n>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,U))))X -)))))))))))))))))))))))))", +")))))))))))))))))))))))))))$ +))))D>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>s)))/mnMMnvsuw963126S))))r>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>D))))+ O()))))))))))))))))))))))))", +")))))))))))))))))))))))))))^ %))))Z>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>i))))))))))))))))))))))6>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>Z))))$ E))))))))))))))))))))))))))", +"))))))))))))))))))))))))))))K *))))Z>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>5!))))))))))))))))))R1>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,Z))))* J)))))))))))))))))))))))))))", +")))))))))))))))))))))))))))))H -))))D<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>26qtpvMVADIR())))I<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,D))))- x))))))))))))))))))))))))))))", +"))))))))))))))))))))))))))))))c -))))U1>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><1,>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>5)))))- j))))))))))))))))))))))))))))))", +"))))))))))))))))))))))))))))))))z *)))))0>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>0)))))* j)))))))))))))))))))))))))))))))", +")))))))))))))))))))))))))))))))))z $)))))a>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>a)))))$ j))))))))))))))))))))))))))))))))", +"))))))))))))))))))))))))))))))))))x +)))))L1>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>1F)))))+ l)))))))))))))))))))))))))))))))))", +")))))))))))))))))))))))))))))))))))G XK)))))q>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>q)))))KX x))))))))))))))))))))))))))))))))))", +"))))))))))))))))))))))))))))))))))))K h)))))V1>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>t))))))% oE))))))))))))))))))))))))))))))))))))", +")))))))))))))))))))))))))))))))))))))))g oG)))))R7>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>7T)))))Go -()))))))))))))))))))))))))))))))))))))", +"))))))))))))))))))))))))))))))))))))))))c *))))))A5>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>5S))))))* z)))))))))))))))))))))))))))))))))))))))", +")))))))))))))))))))))))))))))))))))))))))W# Xz))))))Z6>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>6V))))))xX OK))))))))))))))))))))))))))))))))))))))))", +")))))))))))))))))))))))))))))))))))))))))))l #^))))))L0>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>9L))))))^# j()))))))))))))))))))))))))))))))))))))))))", +"))))))))))))))))))))))))))))))))))))))))))))E% &))))))))p2>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>1p))))))))& +K)))))))))))))))))))))))))))))))))))))))))))", +"))))))))))))))))))))))))))))))))))))))))))))))c =))))))))Ir1>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>tI))))))))=. z)))))))))))))))))))))))))))))))))))))))))))))", +")))))))))))))))))))))))))))))))))))))))))))))))(j &^))))))))Tp5>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>5sT))))))))^& g^))))))))))))))))))))))))))))))))))))))))))))))", +")))))))))))))))))))))))))))))))))))))))))))))))))^g @x))))))))))Ls8<>>>>>>>>>>>>>>>>>>>>>>19sL))))))))))x@ -W))))))))))))))))))))))))))))))))))))))))))))))))", +")))))))))))))))))))))))))))))))))))))))))))))))))))Wg X*E))))))))))))QZst06>>>>>>>><0tfC!))))))))))))E=. ;W))))))))))))))))))))))))))))))))))))))))))))))))))", +")))))))))))))))))))))))))))))))))))))))))))))))))))))^k o=K))))))))))))))))))))))))))))))))))))))K=X hW))))))))))))))))))))))))))))))))))))))))))))))))))))", +"))))))))))))))))))))))))))))))))))))))))))))))))))))))))H& .$h^))))))))))))))))))))))))))))))^h#. $c)))))))))))))))))))))))))))))))))))))))))))))))))))))))", +"))))))))))))))))))))))))))))))))))))))))))))))))))))))))))^z@ .+=kE))))))))))))))))))))Ek*+ OlW)))))))))))))))))))))))))))))))))))))))))))))))))))))))))", +")))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))Wx% O%*-:ghhh:-*$+. $zW))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))", +"))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))(Kk$ $jJ()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))", +")))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))WHk=+ O=kGW()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))", +")))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))(WEJHcxxxxcGJEW^))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))", +")))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))", +")))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))", +")))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))", +")))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))", +")))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))", +")))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))", +")))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))", +")))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))", +")))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))", +")))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))" +}; diff --git a/lang.qrc b/lang.qrc new file mode 100644 index 0000000..aec7653 --- /dev/null +++ b/lang.qrc @@ -0,0 +1,7 @@ + + + lang/timedsilencer_en.qm + lang/timedsilencer_fr.qm + lang/timedsilencer_zh.qm + + diff --git a/lang/timedsilencer_en.qm b/lang/timedsilencer_en.qm new file mode 100644 index 0000000000000000000000000000000000000000..9dad8dffceb9623e88f8b96d9cd0caf25574c6fa GIT binary patch literal 23 fcmcE7ks@*G{hX<16=n7(EZlpygMop8iIEWihQJ9+ literal 0 HcmV?d00001 diff --git a/lang/timedsilencer_en.ts b/lang/timedsilencer_en.ts new file mode 100644 index 0000000..a4b6c38 --- /dev/null +++ b/lang/timedsilencer_en.ts @@ -0,0 +1,32 @@ + + + + + MainWindow + + + Use silent profile between + + + + + and + + + + + Enabled + + + + + The timed silencer is enabled + + + + + The timed silencer is disabled + + + + diff --git a/lang/timedsilencer_fr.qm b/lang/timedsilencer_fr.qm new file mode 100644 index 0000000000000000000000000000000000000000..fdce28a3c8434f7f72e511a2d52184c7fa613fba GIT binary patch literal 583 zcmb`EFHZwO5XIkdKnZCGk`N$EfU z?s{3qF%F=i&|;2*FcMghYJDJnHB z36(RE*gz6xoC=K_+g9bD+A3~nxws)2k7*Cp{MpeDri4$<@F=vA5KAM+^&6Yvc?Ugu sGNdVeBP5GeCj%I%YA11nSX5oou81v~(j-fyL!Q32e`a~XSx)%gH + + + + AlarmdBackend + + Silent profile + Profil silencieux + + + General profile + Profil général + + + + MainWindow + + + Use silent profile between + Utiliser le profil silencieux entre + + + + and + et + + + + Enabled + Activé + + + + The timed silencer is enabled + La mise en silence automatique est activée + + + + The timed silencer is disabled + La mise en silence automatique est désactivée + + + The Timed Silencer is now enabled + La mise en silence est désormais active + + + The Timed Silencer is now disabled + La mise en silence est désormais inactive + + + diff --git a/lang/timedsilencer_zh.qm b/lang/timedsilencer_zh.qm new file mode 100644 index 0000000000000000000000000000000000000000..702b525d67eedc6a8a64a7392457f49ce15a5591 GIT binary patch literal 370 zcmcE7ks@*G{hX<16=n7(EZlq7iGhJZgMlH#g@J*Qhp}Sr6(C=WHL?lFXDH`!pY#Pt zGw`VhtOHVqGl7Z>n1L*o5dBgO4v-WZ5VO1HB_`#hrmzFqT)v5!dEuFPDf#7$Ae92q zvr@lJkDUHFEF<<)Wh0UK)Nk2a;ogx7El!0vsYIcmC_fG8IEAFtlJeBlJZwH>YWxh>%AA;o G5efhTj%45f literal 0 HcmV?d00001 diff --git a/lang/timedsilencer_zh.ts b/lang/timedsilencer_zh.ts new file mode 100644 index 0000000..8e40105 --- /dev/null +++ b/lang/timedsilencer_zh.ts @@ -0,0 +1,51 @@ + + + + + AlarmdBackend + + Silent profile + 静音模式 + + + General profile + 标准模式 + + + + MainWindow + + + Use silent profile between + 使用静音模式时段 + + + + and + 至 + + + + Enabled + 启用 + + + + The timed silencer is enabled + 定时静音器已启用 + + + + The timed silencer is disabled + 定时静音器已禁用 + + + The Timed Silencer is now enabled + 定时静音器已启用 + + + The Timed Silencer is now disabled + 定时静音器已禁用 + + + diff --git a/main.cpp b/main.cpp new file mode 100644 index 0000000..c80f3ba --- /dev/null +++ b/main.cpp @@ -0,0 +1,43 @@ +/* + * This file is part of TimedSilencer. + * + * TimedSilencer is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * TimedSilencer is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with TimedSilencer. If not, see . + */ + +#include +#include +#include +#include "mainwindow.h" + +int main(int argc, char *argv[]) +{ + QApplication a(argc, argv); + + // Load translation + QTranslator translator; + QString locale = QLocale::system().name(); + qDebug("Detected locale is: %s", qPrintable(locale)); + translator.load(":/lang/timedsilencer_"+locale); + a.installTranslator(&translator); + + // Show Main window + MainWindow w; +#if defined(Q_WS_S60) + w.showMaximized(); +#else + w.show(); +#endif + + return a.exec(); +} diff --git a/mainwindow.cpp b/mainwindow.cpp new file mode 100644 index 0000000..9506049 --- /dev/null +++ b/mainwindow.cpp @@ -0,0 +1,116 @@ +/* + * This file is part of TimedSilencer. + * + * TimedSilencer is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * TimedSilencer is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with TimedSilencer. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "mainwindow.h" +#include "alarmd_backend.h" +#include "dbus_backend.h" + +MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) { + setCentralWidget(new QWidget()); + QVBoxLayout *verticalLayout = new QVBoxLayout(centralWidget()); + QLabel *from_lbl = new QLabel(tr("Use silent profile between")); + from_lbl->setAlignment(Qt::AlignHCenter); + verticalLayout->addWidget(from_lbl); + from_button = new QMaemo5ValueButton(); + from_button->setPickSelector(new QMaemo5TimePickSelector()); + verticalLayout->addWidget(from_button); + QLabel *to_lbl = new QLabel(tr("and")); + to_lbl->setAlignment(Qt::AlignHCenter); + verticalLayout->addWidget(to_lbl); + to_button = new QMaemo5ValueButton(); + to_button->setPickSelector(new QMaemo5TimePickSelector()); + verticalLayout->addWidget(to_button); + verticalLayout->addItem(new QSpacerItem(20, 40, QSizePolicy::Minimum, QSizePolicy::Expanding)); + // Menu actions + active_action = menuBar()->addAction(tr("Enabled")); + active_action->setCheckable(true); + // Load settings + loadSettings(); + connect(active_action, SIGNAL(triggered(bool)), this, SLOT(enableSilencing(bool))); + // Auto rotation + setAttribute(Qt::WA_Maemo5AutoOrientation, true); +} + +MainWindow::~MainWindow() { + if(active_action->isChecked()) { + QMaemo5InformationBox::information(this, tr("The timed silencer is enabled"), 0); + setProfileEvents(); + } else { + QMaemo5InformationBox::information(this, tr("The timed silencer is disabled"), 0); + } + saveSettings(); + delete from_button; + delete to_button; +} + +void MainWindow::saveSettings() { + QSettings settings("TimedSilencer", "TimedSilencer"); + settings.setValue("from_time", static_cast(from_button->pickSelector())->currentTime()); + settings.setValue("to_time", static_cast(to_button->pickSelector())->currentTime()); + settings.setValue("enabled", active_action->isChecked()); +} + +void MainWindow::loadSettings() { + QSettings settings("TimedSilencer", "TimedSilencer"); + QTime from_time = settings.value("from_time", QTime(22, 0)).toTime(); + static_cast(from_button->pickSelector())->setCurrentTime(from_time); + QTime to_time = settings.value("to_time", QTime(8, 0)).toTime(); + static_cast(to_button->pickSelector())->setCurrentTime(to_time); + active_action->setChecked(settings.value("enabled", true).toBool()); +} + +void MainWindow::enableSilencing(bool enabled) { + if(enabled) { + setProfileEvents(); + //QMaemo5InformationBox::information(this, tr("The Timed Silencer is now enabled"), QMaemo5InformationBox::DefaultTimeout); + } else { + AlarmdBackend::deleteEvents(); + //QMaemo5InformationBox::information(this, tr("The Timed Silencer is now disabled"), QMaemo5InformationBox::DefaultTimeout); + } +} + +void MainWindow::setProfileEvents() { + // Set profile events in Alarmd + QTime from_time = static_cast(from_button->pickSelector())->currentTime(); + qDebug("From time: %s", qPrintable(from_time.toString())); + AlarmdBackend::setProfileEvent(SILENT, from_time); + QTime to_time = static_cast(to_button->pickSelector())->currentTime(); + AlarmdBackend::setProfileEvent(GENERAL, to_time); + qDebug("To time: %s", qPrintable(to_time.toString())); + // Update current profile + bool in_silent_mode = false; + QTime ctime = QTime::currentTime(); + if(from_time < to_time) { + in_silent_mode = (ctime > from_time && ctime < to_time); + } else { + // to_time is the next day + in_silent_mode = (ctime > from_time || (ctime < from_time && ctime < to_time)); + } + if(in_silent_mode) + DBusBackend::setProfile(SILENT); + /*else + DBusBackend::setProfile(GENERAL);*/ +} diff --git a/mainwindow.h b/mainwindow.h new file mode 100644 index 0000000..9fbfb39 --- /dev/null +++ b/mainwindow.h @@ -0,0 +1,44 @@ +/* + * This file is part of TimedSilencer. + * + * TimedSilencer is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * TimedSilencer is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with TimedSilencer. If not, see . + */ + +#ifndef MAINWINDOW_H +#define MAINWINDOW_H + +#include + +struct QMaemo5ValueButton; +struct QAction; + +class MainWindow : public QMainWindow { + Q_OBJECT + +public: + explicit MainWindow(QWidget *parent = 0); + ~MainWindow(); + +protected slots: + void saveSettings(); + void loadSettings(); + void enableSilencing(bool enabled); + void setProfileEvents(); + +private: + QMaemo5ValueButton *from_button, *to_button; + QAction *active_action; +}; + +#endif // MAINWINDOW_H diff --git a/phone_profile.h b/phone_profile.h new file mode 100644 index 0000000..b5aac5e --- /dev/null +++ b/phone_profile.h @@ -0,0 +1,23 @@ +/* + * This file is part of TimedSilencer. + * + * TimedSilencer is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * TimedSilencer is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with TimedSilencer. If not, see . + */ + +#ifndef PROFILE_H +#define PROFILE_H + +enum Profile {GENERAL, SILENT}; + +#endif // PROFILE_H -- 1.7.9.5