From 0d02094e2b261de9aadac40f65a574e9fbee66e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sl=C3=A1vek=20Banko?= Date: Sun, 10 Apr 2016 02:08:09 +0200 Subject: [PATCH] Initial import of tastymenu 1.0.8 --- AUTHORS | 7 + COPYING | 341 ++++ COPYING.DOC | 397 +++++ COPYING.LIB | 481 ++++++ ChangeLog | 194 +++ Doxyfile | 275 +++ INSTALL | 167 ++ Makefile.am | 25 + Makefile.cvs | 10 + NEWS | 0 README | 10 + TODO | 2 + configure.in.in | 6 + doc/Makefile.am | 6 + doc/en/Makefile.am | 3 + doc/en/index.docbook | 290 ++++ doc/en/screenshot.png | Bin 0 -> 83208 bytes po/Makefile.am | 3 + po/de.po | 809 +++++++++ po/es.po | 802 +++++++++ po/fi.po | 789 +++++++++ po/fr.po | 806 +++++++++ po/it.po | 778 +++++++++ po/pl.po | 828 +++++++++ po/pt_BR.po | 774 +++++++++ po/ru.po | 831 +++++++++ po/sl.po | 785 +++++++++ po/tastymenu.pot | 738 ++++++++ po/uk.po | 824 +++++++++ src/Makefile.am | 22 + src/appearance.ui | 608 +++++++ src/appearance.ui.h | 23 + src/behaviour.ui | 234 +++ src/create_buttons.sh | 1 + src/dmctl.cpp | 434 +++++ src/dmctl.h | 93 + src/menu.ui | 379 ++++ src/menuhandler.cpp | 1712 +++++++++++++++++++ src/menuhandler.h | 184 ++ src/misc.cpp | 38 + src/misc.h | 24 + src/pics/.svn/all-wcprops | 17 + src/pics/.svn/entries | 42 + src/pics/.svn/format | 1 + src/pics/.svn/prop-base/attach.png.svn-base | 5 + src/pics/.svn/prop-base/detach.png.svn-base | 5 + src/pics/.svn/text-base/attach.png.svn-base | Bin 0 -> 192 bytes src/pics/.svn/text-base/detach.png.svn-base | Bin 0 -> 199 bytes src/pics/attach.png | Bin 0 -> 192 bytes src/pics/detach.png | Bin 0 -> 199 bytes src/prefs.kcfgc | 6 + src/tastybutton.cpp | 116 ++ src/tastybutton.h | 49 + src/tastylistview.cpp | 600 +++++++ src/tastylistview.h | 225 +++ src/tastymenu.cpp | 492 ++++++ src/tastymenu.desktop | 10 + src/tastymenu.h | 165 ++ src/tastymenu.kcfg | 188 ++ src/tastymenu.lsm | 16 + src/tastytooltip.cpp | 100 ++ src/tastytooltip.h | 59 + src/tastytooltipwidget.ui | 109 ++ tastymenu.spec | 211 +++ 64 files changed, 17149 insertions(+) create mode 100644 AUTHORS create mode 100644 COPYING create mode 100644 COPYING.DOC create mode 100644 COPYING.LIB create mode 100644 ChangeLog create mode 100644 Doxyfile create mode 100644 INSTALL create mode 100644 Makefile.am create mode 100644 Makefile.cvs create mode 100644 NEWS create mode 100644 README create mode 100644 TODO create mode 100644 configure.in.in create mode 100644 doc/Makefile.am create mode 100644 doc/en/Makefile.am create mode 100644 doc/en/index.docbook create mode 100644 doc/en/screenshot.png create mode 100644 po/Makefile.am create mode 100644 po/de.po create mode 100644 po/es.po create mode 100644 po/fi.po create mode 100644 po/fr.po create mode 100644 po/it.po create mode 100644 po/pl.po create mode 100644 po/pt_BR.po create mode 100644 po/ru.po create mode 100644 po/sl.po create mode 100644 po/tastymenu.pot create mode 100644 po/uk.po create mode 100644 src/Makefile.am create mode 100644 src/appearance.ui create mode 100644 src/appearance.ui.h create mode 100644 src/behaviour.ui create mode 100644 src/create_buttons.sh create mode 100644 src/dmctl.cpp create mode 100644 src/dmctl.h create mode 100644 src/menu.ui create mode 100644 src/menuhandler.cpp create mode 100644 src/menuhandler.h create mode 100644 src/misc.cpp create mode 100644 src/misc.h create mode 100644 src/pics/.svn/all-wcprops create mode 100644 src/pics/.svn/entries create mode 100644 src/pics/.svn/format create mode 100644 src/pics/.svn/prop-base/attach.png.svn-base create mode 100644 src/pics/.svn/prop-base/detach.png.svn-base create mode 100644 src/pics/.svn/text-base/attach.png.svn-base create mode 100644 src/pics/.svn/text-base/detach.png.svn-base create mode 100644 src/pics/attach.png create mode 100644 src/pics/detach.png create mode 100644 src/prefs.kcfgc create mode 100644 src/tastybutton.cpp create mode 100644 src/tastybutton.h create mode 100644 src/tastylistview.cpp create mode 100644 src/tastylistview.h create mode 100644 src/tastymenu.cpp create mode 100644 src/tastymenu.desktop create mode 100644 src/tastymenu.h create mode 100644 src/tastymenu.kcfg create mode 100644 src/tastymenu.lsm create mode 100644 src/tastytooltip.cpp create mode 100644 src/tastytooltip.h create mode 100644 src/tastytooltipwidget.ui create mode 100644 tastymenu.spec diff --git a/AUTHORS b/AUTHORS new file mode 100644 index 0000000..9886883 --- /dev/null +++ b/AUTHORS @@ -0,0 +1,7 @@ +Marco Martin + +some code from Kbfx Spinx (http://www.kbfx.org) copyright (c) 2006 Kbfx team. + +dmctl.h and dmctl.c Copyright (c) 2004-2006 Oswald Buddenhagen and Stephan Kulow + +some code of the TastyListView from the statistics list view of Amarok (c) 2005-2006 Seb Ruiz diff --git a/COPYING b/COPYING new file mode 100644 index 0000000..5eca674 --- /dev/null +++ b/COPYING @@ -0,0 +1,341 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) 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 +this service 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 make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. 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. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute 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 and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +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 +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the 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 a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, 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. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE 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. + + 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 +convey 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) 19yy + + 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 2 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, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) 19yy name of author + Gnomovision 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, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This 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 Library General +Public License instead of this License. + diff --git a/COPYING.DOC b/COPYING.DOC new file mode 100644 index 0000000..4a0fe1c --- /dev/null +++ b/COPYING.DOC @@ -0,0 +1,397 @@ + GNU Free Documentation License + Version 1.2, November 2002 + + + Copyright (C) 2000,2001,2002 Free Software Foundation, Inc. + 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + +0. PREAMBLE + +The purpose of this License is to make a manual, textbook, or other +functional and useful document "free" in the sense of freedom: to +assure everyone the effective freedom to copy and redistribute it, +with or without modifying it, either commercially or noncommercially. +Secondarily, this License preserves for the author and publisher a way +to get credit for their work, while not being considered responsible +for modifications made by others. + +This License is a kind of "copyleft", which means that derivative +works of the document must themselves be free in the same sense. It +complements the GNU General Public License, which is a copyleft +license designed for free software. + +We have designed this License in order to use it for manuals for free +software, because free software needs free documentation: a free +program should come with manuals providing the same freedoms that the +software does. But this License is not limited to software manuals; +it can be used for any textual work, regardless of subject matter or +whether it is published as a printed book. We recommend this License +principally for works whose purpose is instruction or reference. + + +1. APPLICABILITY AND DEFINITIONS + +This License applies to any manual or other work, in any medium, that +contains a notice placed by the copyright holder saying it can be +distributed under the terms of this License. Such a notice grants a +world-wide, royalty-free license, unlimited in duration, to use that +work under the conditions stated herein. The "Document", below, +refers to any such manual or work. Any member of the public is a +licensee, and is addressed as "you". You accept the license if you +copy, modify or distribute the work in a way requiring permission +under copyright law. + +A "Modified Version" of the Document means any work containing the +Document or a portion of it, either copied verbatim, or with +modifications and/or translated into another language. + +A "Secondary Section" is a named appendix or a front-matter section of +the Document that deals exclusively with the relationship of the +publishers or authors of the Document to the Document's overall subject +(or to related matters) and contains nothing that could fall directly +within that overall subject. (Thus, if the Document is in part a +textbook of mathematics, a Secondary Section may not explain any +mathematics.) The relationship could be a matter of historical +connection with the subject or with related matters, or of legal, +commercial, philosophical, ethical or political position regarding +them. + +The "Invariant Sections" are certain Secondary Sections whose titles +are designated, as being those of Invariant Sections, in the notice +that says that the Document is released under this License. If a +section does not fit the above definition of Secondary then it is not +allowed to be designated as Invariant. The Document may contain zero +Invariant Sections. If the Document does not identify any Invariant +Sections then there are none. + +The "Cover Texts" are certain short passages of text that are listed, +as Front-Cover Texts or Back-Cover Texts, in the notice that says that +the Document is released under this License. A Front-Cover Text may +be at most 5 words, and a Back-Cover Text may be at most 25 words. + +A "Transparent" copy of the Document means a machine-readable copy, +represented in a format whose specification is available to the +general public, that is suitable for revising the document +straightforwardly with generic text editors or (for images composed of +pixels) generic paint programs or (for drawings) some widely available +drawing editor, and that is suitable for input to text formatters or +for automatic translation to a variety of formats suitable for input +to text formatters. A copy made in an otherwise Transparent file +format whose markup, or absence of markup, has been arranged to thwart +or discourage subsequent modification by readers is not Transparent. +An image format is not Transparent if used for any substantial amount +of text. A copy that is not "Transparent" is called "Opaque". + +Examples of suitable formats for Transparent copies include plain +ASCII without markup, Texinfo input format, LaTeX input format, SGML +or XML using a publicly available DTD, and standard-conforming simple +HTML, PostScript or PDF designed for human modification. Examples of +transparent image formats include PNG, XCF and JPG. Opaque formats +include proprietary formats that can be read and edited only by +proprietary word processors, SGML or XML for which the DTD and/or +processing tools are not generally available, and the +machine-generated HTML, PostScript or PDF produced by some word +processors for output purposes only. + +The "Title Page" means, for a printed book, the title page itself, +plus such following pages as are needed to hold, legibly, the material +this License requires to appear in the title page. For works in +formats which do not have any title page as such, "Title Page" means +the text near the most prominent appearance of the work's title, +preceding the beginning of the body of the text. + +A section "Entitled XYZ" means a named subunit of the Document whose +title either is precisely XYZ or contains XYZ in parentheses following +text that translates XYZ in another language. (Here XYZ stands for a +specific section name mentioned below, such as "Acknowledgements", +"Dedications", "Endorsements", or "History".) To "Preserve the Title" +of such a section when you modify the Document means that it remains a +section "Entitled XYZ" according to this definition. + +The Document may include Warranty Disclaimers next to the notice which +states that this License applies to the Document. These Warranty +Disclaimers are considered to be included by reference in this +License, but only as regards disclaiming warranties: any other +implication that these Warranty Disclaimers may have is void and has +no effect on the meaning of this License. + + +2. VERBATIM COPYING + +You may copy and distribute the Document in any medium, either +commercially or noncommercially, provided that this License, the +copyright notices, and the license notice saying this License applies +to the Document are reproduced in all copies, and that you add no other +conditions whatsoever to those of this License. You may not use +technical measures to obstruct or control the reading or further +copying of the copies you make or distribute. However, you may accept +compensation in exchange for copies. If you distribute a large enough +number of copies you must also follow the conditions in section 3. + +You may also lend copies, under the same conditions stated above, and +you may publicly display copies. + + +3. COPYING IN QUANTITY + +If you publish printed copies (or copies in media that commonly have +printed covers) of the Document, numbering more than 100, and the +Document's license notice requires Cover Texts, you must enclose the +copies in covers that carry, clearly and legibly, all these Cover +Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on +the back cover. Both covers must also clearly and legibly identify +you as the publisher of these copies. The front cover must present +the full title with all words of the title equally prominent and +visible. You may add other material on the covers in addition. +Copying with changes limited to the covers, as long as they preserve +the title of the Document and satisfy these conditions, can be treated +as verbatim copying in other respects. + +If the required texts for either cover are too voluminous to fit +legibly, you should put the first ones listed (as many as fit +reasonably) on the actual cover, and continue the rest onto adjacent +pages. + +If you publish or distribute Opaque copies of the Document numbering +more than 100, you must either include a machine-readable Transparent +copy along with each Opaque copy, or state in or with each Opaque copy +a computer-network location from which the general network-using +public has access to download using public-standard network protocols +a complete Transparent copy of the Document, free of added material. +If you use the latter option, you must take reasonably prudent steps, +when you begin distribution of Opaque copies in quantity, to ensure +that this Transparent copy will remain thus accessible at the stated +location until at least one year after the last time you distribute an +Opaque copy (directly or through your agents or retailers) of that +edition to the public. + +It is requested, but not required, that you contact the authors of the +Document well before redistributing any large number of copies, to give +them a chance to provide you with an updated version of the Document. + + +4. MODIFICATIONS + +You may copy and distribute a Modified Version of the Document under +the conditions of sections 2 and 3 above, provided that you release +the Modified Version under precisely this License, with the Modified +Version filling the role of the Document, thus licensing distribution +and modification of the Modified Version to whoever possesses a copy +of it. In addition, you must do these things in the Modified Version: + +A. Use in the Title Page (and on the covers, if any) a title distinct + from that of the Document, and from those of previous versions + (which should, if there were any, be listed in the History section + of the Document). You may use the same title as a previous version + if the original publisher of that version gives permission. +B. List on the Title Page, as authors, one or more persons or entities + responsible for authorship of the modifications in the Modified + Version, together with at least five of the principal authors of the + Document (all of its principal authors, if it has fewer than five), + unless they release you from this requirement. +C. State on the Title page the name of the publisher of the + Modified Version, as the publisher. +D. Preserve all the copyright notices of the Document. +E. Add an appropriate copyright notice for your modifications + adjacent to the other copyright notices. +F. Include, immediately after the copyright notices, a license notice + giving the public permission to use the Modified Version under the + terms of this License, in the form shown in the Addendum below. +G. Preserve in that license notice the full lists of Invariant Sections + and required Cover Texts given in the Document's license notice. +H. Include an unaltered copy of this License. +I. Preserve the section Entitled "History", Preserve its Title, and add + to it an item stating at least the title, year, new authors, and + publisher of the Modified Version as given on the Title Page. If + there is no section Entitled "History" in the Document, create one + stating the title, year, authors, and publisher of the Document as + given on its Title Page, then add an item describing the Modified + Version as stated in the previous sentence. +J. Preserve the network location, if any, given in the Document for + public access to a Transparent copy of the Document, and likewise + the network locations given in the Document for previous versions + it was based on. These may be placed in the "History" section. + You may omit a network location for a work that was published at + least four years before the Document itself, or if the original + publisher of the version it refers to gives permission. +K. For any section Entitled "Acknowledgements" or "Dedications", + Preserve the Title of the section, and preserve in the section all + the substance and tone of each of the contributor acknowledgements + and/or dedications given therein. +L. Preserve all the Invariant Sections of the Document, + unaltered in their text and in their titles. Section numbers + or the equivalent are not considered part of the section titles. +M. Delete any section Entitled "Endorsements". Such a section + may not be included in the Modified Version. +N. Do not retitle any existing section to be Entitled "Endorsements" + or to conflict in title with any Invariant Section. +O. Preserve any Warranty Disclaimers. + +If the Modified Version includes new front-matter sections or +appendices that qualify as Secondary Sections and contain no material +copied from the Document, you may at your option designate some or all +of these sections as invariant. To do this, add their titles to the +list of Invariant Sections in the Modified Version's license notice. +These titles must be distinct from any other section titles. + +You may add a section Entitled "Endorsements", provided it contains +nothing but endorsements of your Modified Version by various +parties--for example, statements of peer review or that the text has +been approved by an organization as the authoritative definition of a +standard. + +You may add a passage of up to five words as a Front-Cover Text, and a +passage of up to 25 words as a Back-Cover Text, to the end of the list +of Cover Texts in the Modified Version. Only one passage of +Front-Cover Text and one of Back-Cover Text may be added by (or +through arrangements made by) any one entity. If the Document already +includes a cover text for the same cover, previously added by you or +by arrangement made by the same entity you are acting on behalf of, +you may not add another; but you may replace the old one, on explicit +permission from the previous publisher that added the old one. + +The author(s) and publisher(s) of the Document do not by this License +give permission to use their names for publicity for or to assert or +imply endorsement of any Modified Version. + + +5. COMBINING DOCUMENTS + +You may combine the Document with other documents released under this +License, under the terms defined in section 4 above for modified +versions, provided that you include in the combination all of the +Invariant Sections of all of the original documents, unmodified, and +list them all as Invariant Sections of your combined work in its +license notice, and that you preserve all their Warranty Disclaimers. + +The combined work need only contain one copy of this License, and +multiple identical Invariant Sections may be replaced with a single +copy. If there are multiple Invariant Sections with the same name but +different contents, make the title of each such section unique by +adding at the end of it, in parentheses, the name of the original +author or publisher of that section if known, or else a unique number. +Make the same adjustment to the section titles in the list of +Invariant Sections in the license notice of the combined work. + +In the combination, you must combine any sections Entitled "History" +in the various original documents, forming one section Entitled +"History"; likewise combine any sections Entitled "Acknowledgements", +and any sections Entitled "Dedications". You must delete all sections +Entitled "Endorsements". + + +6. COLLECTIONS OF DOCUMENTS + +You may make a collection consisting of the Document and other documents +released under this License, and replace the individual copies of this +License in the various documents with a single copy that is included in +the collection, provided that you follow the rules of this License for +verbatim copying of each of the documents in all other respects. + +You may extract a single document from such a collection, and distribute +it individually under this License, provided you insert a copy of this +License into the extracted document, and follow this License in all +other respects regarding verbatim copying of that document. + + +7. AGGREGATION WITH INDEPENDENT WORKS + +A compilation of the Document or its derivatives with other separate +and independent documents or works, in or on a volume of a storage or +distribution medium, is called an "aggregate" if the copyright +resulting from the compilation is not used to limit the legal rights +of the compilation's users beyond what the individual works permit. +When the Document is included in an aggregate, this License does not +apply to the other works in the aggregate which are not themselves +derivative works of the Document. + +If the Cover Text requirement of section 3 is applicable to these +copies of the Document, then if the Document is less than one half of +the entire aggregate, the Document's Cover Texts may be placed on +covers that bracket the Document within the aggregate, or the +electronic equivalent of covers if the Document is in electronic form. +Otherwise they must appear on printed covers that bracket the whole +aggregate. + + +8. TRANSLATION + +Translation is considered a kind of modification, so you may +distribute translations of the Document under the terms of section 4. +Replacing Invariant Sections with translations requires special +permission from their copyright holders, but you may include +translations of some or all Invariant Sections in addition to the +original versions of these Invariant Sections. You may include a +translation of this License, and all the license notices in the +Document, and any Warranty Disclaimers, provided that you also include +the original English version of this License and the original versions +of those notices and disclaimers. In case of a disagreement between +the translation and the original version of this License or a notice +or disclaimer, the original version will prevail. + +If a section in the Document is Entitled "Acknowledgements", +"Dedications", or "History", the requirement (section 4) to Preserve +its Title (section 1) will typically require changing the actual +title. + + +9. TERMINATION + +You may not copy, modify, sublicense, or distribute the Document except +as expressly provided for under this License. Any other attempt to +copy, modify, sublicense or distribute the Document is void, and will +automatically terminate your rights under this License. However, +parties who have received copies, or rights, from you under this +License will not have their licenses terminated so long as such +parties remain in full compliance. + + +10. FUTURE REVISIONS OF THIS LICENSE + +The Free Software Foundation may publish new, revised versions +of the GNU Free Documentation 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. See +http://www.gnu.org/copyleft/. + +Each version of the License is given a distinguishing version number. +If the Document specifies that a particular numbered version of this +License "or any later version" applies to it, you have the option of +following the terms and conditions either of that specified version or +of any later version that has been published (not as a draft) by the +Free Software Foundation. If the Document does not specify a version +number of this License, you may choose any version ever published (not +as a draft) by the Free Software Foundation. + + +ADDENDUM: How to use this License for your documents + +To use this License in a document you have written, include a copy of +the License in the document and put the following copyright and +license notices just after the title page: + + Copyright (c) YEAR YOUR NAME. + Permission is granted to copy, distribute and/or modify this document + under the terms of the GNU Free Documentation License, Version 1.2 + or any later version published by the Free Software Foundation; + with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. + A copy of the license is included in the section entitled "GNU + Free Documentation License". + +If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, +replace the "with...Texts." line with this: + + with the Invariant Sections being LIST THEIR TITLES, with the + Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST. + +If you have Invariant Sections without Cover Texts, or some other +combination of the three, merge those two alternatives to suit the +situation. + +If your document contains nontrivial examples of program code, we +recommend releasing these examples in parallel under your choice of +free software license, such as the GNU General Public License, +to permit their use in free software. diff --git a/COPYING.LIB b/COPYING.LIB new file mode 100644 index 0000000..e38ffa8 --- /dev/null +++ b/COPYING.LIB @@ -0,0 +1,481 @@ + GNU LIBRARY GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1991 Free Software Foundation, Inc. + 59 Temple Place - Suite 330 + Boston, MA 02111-1307, USA. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the library GPL. It is + numbered 2 because it goes with version 2 of the ordinary GPL.] + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Library General Public License, applies to some +specially designated Free Software Foundation software, and to any +other libraries whose authors decide to use it. You can use it for +your libraries, 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 +this service 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 make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if +you distribute copies of the library, or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link a program with the library, you must provide +complete object files to the recipients so that they can relink them +with the library, after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + Our method of protecting your rights has two steps: (1) copyright +the library, and (2) offer you this license which gives you legal +permission to copy, distribute and/or modify the library. + + Also, for each distributor's protection, we want to make certain +that everyone understands that there is no warranty for this free +library. If the library is modified by someone else and passed on, we +want its recipients to know that what they have is not the original +version, so that any problems introduced by others will not reflect on +the original authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that companies distributing free +software will individually obtain patent licenses, thus in effect +transforming the program into proprietary software. To prevent this, +we have made it clear that any patent must be licensed for everyone's +free use or not licensed at all. + + Most GNU software, including some libraries, is covered by the ordinary +GNU General Public License, which was designed for utility programs. This +license, the GNU Library General Public License, applies to certain +designated libraries. This license is quite different from the ordinary +one; be sure to read it in full, and don't assume that anything in it is +the same as in the ordinary license. + + The reason we have a separate public license for some libraries is that +they blur the distinction we usually make between modifying or adding to a +program and simply using it. Linking a program with a library, without +changing the library, is in some sense simply using the library, and is +analogous to running a utility program or application program. However, in +a textual and legal sense, the linked executable is a combined work, a +derivative of the original library, and the ordinary General Public License +treats it as such. + + Because of this blurred distinction, using the ordinary General +Public License for libraries did not effectively promote software +sharing, because most developers did not use the libraries. We +concluded that weaker conditions might promote sharing better. + + However, unrestricted linking of non-free programs would deprive the +users of those programs of all benefit from the free status of the +libraries themselves. This Library General Public License is intended to +permit developers of non-free programs to use free libraries, while +preserving your freedom as a user of such programs to change the free +libraries that are incorporated in them. (We have not seen how to achieve +this as regards changes in header files, but we have achieved it as regards +changes in the actual functions of the Library.) The hope is that this +will lead to faster development of free libraries. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, while the latter only +works together with the library. + + Note that it is possible for a library to be covered by the ordinary +General Public License rather than by this special one. + + GNU LIBRARY GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library which +contains a notice placed by the copyright holder or other authorized +party saying it may be distributed under the terms of this Library +General Public License (also called "this License"). Each licensee is +addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control compilation +and installation of the library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. + + You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. + + 2. You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. + + If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also compile or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + c) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + d) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the source code distributed need not include anything that is normally +distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +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 +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply, +and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License may add +an explicit geographical distribution limitation excluding those countries, +so that distribution is permitted only in or among countries not thus +excluded. In such case, this License incorporates the limitation as if +written in the body of this License. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Library 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 Library +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this. Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + + NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "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 +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY 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 +LIBRARY (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 LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + + END OF TERMS AND CONDITIONS + How to Apply These Terms to Your New Libraries + + If you develop a new library, and you want it to be of the greatest +possible use to the public, we recommend making it free software that +everyone can redistribute and change. You can do so by permitting +redistribution under these terms (or, alternatively, under the terms of the +ordinary General Public License). + + To apply these terms, attach the following notices to the library. It is +safest to attach them to the start of each source file to most effectively +convey 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 library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +Also add information on how to contact you by electronic and paper mail. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the library, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + library `Frob' (a library for tweaking knobs) written by James Random Hacker. + + , 1 April 1990 + Ty Coon, President of Vice + +That's all there is to it! diff --git a/ChangeLog b/ChangeLog new file mode 100644 index 0000000..a8b166a --- /dev/null +++ b/ChangeLog @@ -0,0 +1,194 @@ +1.0.8 +-build with newwer gcc +-fixed a painting glitch + +1.0.7 +-Fixed a typo in the config dialog + +1.0.6 +-Now all the applications should be displayed again +-Brazillian portoguese translation by Ewerton de A. Dutra + +1.0.5 +-fixed the about box +-some fixes in packaging +-now it's installed in the right directory (for example in /usr/lib/kde3 instead of /usr/lib) + +1.0.4 +-updated French translation +-updated Slovenian translation +-fixed a crash on lright mouse button click on search field +-the old memory leak should be somewhat mitigated + +1.0.3 +-Fixed a bug that occurred when clicking on the search result if the menu mode was "recent/most used applications" +-Polish translation by Tomasz Argasiński +-Some fixes in the Slovenian translation +-description text shouldn't become too little + +1.0.2 +-Slovenian translation by Matija Šuklje +-Fixed a little build problem + +1.0.1 +-Menu and tooltip no longer steals mouse and keyboard input +-Better management of the tooltip +-No separators when the list is in alphabetical order +-Finnish translations by Tommi Nieminen + +1.0 +-Not having particular problems, released it as 1.0 +-French translation by Laurent Hilsz + +1.0_rc2 +-Rearranging the items of the left column by drag and drop works again +-the layout should be a little bit more polished +-Updated Ukrainian translation + +1.0_rc1: +-Search field should be a lot faster +-Only strings with at least three characters are being searched (necessary for the speedup) +-Corrected a bug that prevented to search into application descriptions + +0.9.1: +-Ukrainian translation by Motsyo Vitaliy + +0.9: +-"Add to desktop" option in menuitems +-Drag and drop from menu to desktop +-Option to set different icons sizes in the three columns +-the button text label should always be of a visible color +-most used/recently used applications list updates in realtime +-clear most used/recently used applications list + -(warning1: deleting one list deletes also the other) + -(warning2: if you use opensuse you must have kickoff reverted to classic kmenu in order to use the recently used/most used lists) +-updated russian and german translations + +0.8.2 +-Spanish translation by Jesus S Fernandez Prieto +-button background goes highlighted even if kicker doesn't have neither a background pixmap or transparent background +-menu icon (including on mouseover effect) changes immediately when the user sets a new icon +-highlighted button background also when kicker has no transparency or backgound image +-searching should be a little bit faster (still far from optimal) + +0.8.1: +-German translation by Jannick Kuhr +-Drag and drop enabled only in "Favourite applications" mode (otherwise it destroys the favourite list!) + +0.8: +-Favourite applications list can be rearranged via drag and drop +-new installed programs notification should be more reliable (some inspiration from Kickoff :P) + -it finds also programs installed by other users + -old programs shouldn't be no more erroneusly listed +-updated russian and italian translations +-when there is only one search result, pressing enter executes it (and the search terms are cleared) +-added button to clear the recent documents list +-application descriptions can be removed also from the left column +-easier to start a program with a single mouse click when the tree is collapsed +-groups with only one item can be configured to be shown +-items can be ordered alphabetically (with applications after the groups) +-better managing of the button size (especially within a vertical panel) and when the menu text is disabled the button is exactly square +-the button icon is highlighted on mouse over according to the global settings +-in the search results the tree is always open + + +0.7.1: +-Russian translation by Yurkovsky Andrey +-corrected a possible compilation problem +-application descriptions are hidden also from the first column +-button width updated again when the text label is turned off + +0.7: +-configurable button text label +-configurable menu button pixmap +-item descriptions can be turned off +-optional "save session" entry under the user button +-configurable popup text +-the button no longer appears on mouse over, instead the background becomes lighter on mouse over and darker on mouse press +-when the user clicks on an empty area the last item is no longer activated +-Italian translation + +0.6.5.1: +-fixed a build error + +0.6.5: +-fixed menu placement when it's on the right side of the screen +-now both the recent applications list and the most used list works +-some cosmetic improvements in configuration dialog +-don't reopen the current submenu when the user clicks again on an already open category +-now clicking on categories of right column expandes/collapses them +-"always collapsed categories" option available also if "show tree expanders" is off +-fixed compilation issues with autoconf >= 2.60 + +0.6.1 +-fixed a little build problem. + +0.6 +-command to clear the recently installed applications list +-Application categories cand be made collapsable and appear collapsed by default +-left mouse button menu on menuitems that lets to add/remove bookmarks and edit the proper submenu with kmenuedit +-the add bookmark icons should work better +-Fixed a bug that prevented svg-only icon themes to display correctly +-Added a very basic Strigi integration +-When resizing the menu in window mode the size of the three columns are updated correcly +-Fixed a crash when a no longer existent app is in more used / recently used list +-Fixed another probable cause of crash + +0.5.2: +-fixed another crash + +0.5.1: +-Lock session button works again +-fixed the source package, now it should build correctly + +0.5: +-(Hopefully) fixed some other crashes +-the big tooltip is enabled only when also the other kicker's big tooltip are enabled too +-the menu can be made a normal window (the upper right arrow toolbutton) +-the highlighted item in the middle column is always the currently open category +-busy mouse cursor when searching +-corrected a bug that prevented to use the left column after a search in ceratin cases +-added a "Configure global shortcuts..." command in the LMB menu +-user button and "switch user" buttons merged in one button +-added a "Run program..." button +-open submenus on timeout also when the mouse button is not pressed, so now when the mouse button is down the delay is 250ms when is not pressed 1 sec +-clear button on the right: it is dramatically nicer looking now :) + +0.4: +-(Hopefully) fixed some of the many crashes +-The big tooltip notificates like a passive popup when new applications have been installed +-In the menu the icons of the recently installed apps and their categories are highlighted with a color inverse of the selected item (it still needs a lot of work) +-The notifications of recently installed apps lasts for two days or until the user clicks on them +-Now the menu displays also the separators +-Configurable size of the action icons + +0.3: +-Keyboard navigation +-Right-most list doesn't open groups on mouse over +-More evident focus on lists +-Added a left mouse button menu +-Menu size configurable +-A more clear highlight of the currently opened submenu +-Simple integration with Kerry Beagle +-Added a big tooltip like other kicker applets (no it isn't the cool tooltip of kicker, because at the moment it isn't usable by 3rd party applets unless big and ugly code duplication) +-It's possible to override the global shortcut Alt+F1 to make it open Tasty Menu instead of KMenu (default disabled) +-Uses KconfigXT +-The menu button text label can be disabled + +0.2: +-Fixed some crashes at exit of kicker +-Now the behaviour it's similar to the one of a normal popup menu so it's now possible to launch an application with one single mouse click +-Configurable size of icons +-Listviews with a more compact look in order to waste less space +-Kicker button it's a little bit less wide +-Kicker button icon grows with kicker +-Some informative tooltips +-Reverse Layout support restored again +-Beginning of an help page + +0.1.1: +-temporary fix to a build problem +-the menu should always open at the same size + +0.1: +Initial release. \ No newline at end of file diff --git a/Doxyfile b/Doxyfile new file mode 100644 index 0000000..763dddd --- /dev/null +++ b/Doxyfile @@ -0,0 +1,275 @@ +# Doxyfile 1.4.1-KDevelop + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- +PROJECT_NAME = tastymenu.kdevelop +PROJECT_NUMBER = 0.1 +OUTPUT_DIRECTORY = +CREATE_SUBDIRS = NO +OUTPUT_LANGUAGE = English +USE_WINDOWS_ENCODING = NO +BRIEF_MEMBER_DESC = YES +REPEAT_BRIEF = YES +ABBREVIATE_BRIEF = "The $name class" \ + "The $name widget" \ + "The $name file" \ + is \ + provides \ + specifies \ + contains \ + represents \ + a \ + an \ + the +ALWAYS_DETAILED_SEC = NO +INLINE_INHERITED_MEMB = NO +FULL_PATH_NAMES = YES +STRIP_FROM_PATH = /home/diau/ +STRIP_FROM_INC_PATH = +SHORT_NAMES = NO +JAVADOC_AUTOBRIEF = NO +MULTILINE_CPP_IS_BRIEF = NO +DETAILS_AT_TOP = NO +INHERIT_DOCS = YES +DISTRIBUTE_GROUP_DOC = NO +TAB_SIZE = 8 +ALIASES = +OPTIMIZE_OUTPUT_FOR_C = NO +OPTIMIZE_OUTPUT_JAVA = NO +SUBGROUPING = YES +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- +EXTRACT_ALL = NO +EXTRACT_PRIVATE = NO +EXTRACT_STATIC = NO +EXTRACT_LOCAL_CLASSES = YES +EXTRACT_LOCAL_METHODS = NO +HIDE_UNDOC_MEMBERS = NO +HIDE_UNDOC_CLASSES = NO +HIDE_FRIEND_COMPOUNDS = NO +HIDE_IN_BODY_DOCS = NO +INTERNAL_DOCS = NO +CASE_SENSE_NAMES = YES +HIDE_SCOPE_NAMES = NO +SHOW_INCLUDE_FILES = YES +INLINE_INFO = YES +SORT_MEMBER_DOCS = YES +SORT_BRIEF_DOCS = NO +SORT_BY_SCOPE_NAME = NO +GENERATE_TODOLIST = YES +GENERATE_TESTLIST = YES +GENERATE_BUGLIST = YES +GENERATE_DEPRECATEDLIST= YES +ENABLED_SECTIONS = +MAX_INITIALIZER_LINES = 30 +SHOW_USED_FILES = YES +SHOW_DIRECTORIES = YES +FILE_VERSION_FILTER = +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- +QUIET = NO +WARNINGS = YES +WARN_IF_UNDOCUMENTED = YES +WARN_IF_DOC_ERROR = YES +WARN_NO_PARAMDOC = NO +WARN_FORMAT = "$file:$line: $text" +WARN_LOGFILE = +#--------------------------------------------------------------------------- +# configuration options related to the input files +#--------------------------------------------------------------------------- +INPUT = /home/diau/Projects/tastymenu +FILE_PATTERNS = *.c \ + *.cc \ + *.cxx \ + *.cpp \ + *.c++ \ + *.java \ + *.ii \ + *.ixx \ + *.ipp \ + *.i++ \ + *.inl \ + *.h \ + *.hh \ + *.hxx \ + *.hpp \ + *.h++ \ + *.idl \ + *.odl \ + *.cs \ + *.php \ + *.php3 \ + *.inc \ + *.m \ + *.mm \ + *.dox \ + *.C \ + *.CC \ + *.C++ \ + *.II \ + *.I++ \ + *.H \ + *.HH \ + *.H++ \ + *.CS \ + *.PHP \ + *.PHP3 \ + *.M \ + *.MM \ + *.C \ + *.H \ + *.tlh \ + *.diff \ + *.patch \ + *.moc \ + *.xpm \ + *.dox +RECURSIVE = yes +EXCLUDE = +EXCLUDE_SYMLINKS = NO +EXCLUDE_PATTERNS = +EXAMPLE_PATH = +EXAMPLE_PATTERNS = * +EXAMPLE_RECURSIVE = NO +IMAGE_PATH = +INPUT_FILTER = +FILTER_PATTERNS = +FILTER_SOURCE_FILES = NO +#--------------------------------------------------------------------------- +# configuration options related to source browsing +#--------------------------------------------------------------------------- +SOURCE_BROWSER = NO +INLINE_SOURCES = NO +STRIP_CODE_COMMENTS = YES +REFERENCED_BY_RELATION = YES +REFERENCES_RELATION = YES +VERBATIM_HEADERS = YES +#--------------------------------------------------------------------------- +# configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- +ALPHABETICAL_INDEX = NO +COLS_IN_ALPHA_INDEX = 5 +IGNORE_PREFIX = +#--------------------------------------------------------------------------- +# configuration options related to the HTML output +#--------------------------------------------------------------------------- +GENERATE_HTML = YES +HTML_OUTPUT = html +HTML_FILE_EXTENSION = .html +HTML_HEADER = +HTML_FOOTER = +HTML_STYLESHEET = +HTML_ALIGN_MEMBERS = YES +GENERATE_HTMLHELP = NO +CHM_FILE = +HHC_LOCATION = +GENERATE_CHI = NO +BINARY_TOC = NO +TOC_EXPAND = NO +DISABLE_INDEX = NO +ENUM_VALUES_PER_LINE = 4 +GENERATE_TREEVIEW = NO +TREEVIEW_WIDTH = 250 +#--------------------------------------------------------------------------- +# configuration options related to the LaTeX output +#--------------------------------------------------------------------------- +GENERATE_LATEX = YES +LATEX_OUTPUT = latex +LATEX_CMD_NAME = latex +MAKEINDEX_CMD_NAME = makeindex +COMPACT_LATEX = NO +PAPER_TYPE = a4wide +EXTRA_PACKAGES = +LATEX_HEADER = +PDF_HYPERLINKS = NO +USE_PDFLATEX = NO +LATEX_BATCHMODE = NO +LATEX_HIDE_INDICES = NO +#--------------------------------------------------------------------------- +# configuration options related to the RTF output +#--------------------------------------------------------------------------- +GENERATE_RTF = NO +RTF_OUTPUT = rtf +COMPACT_RTF = NO +RTF_HYPERLINKS = NO +RTF_STYLESHEET_FILE = +RTF_EXTENSIONS_FILE = +#--------------------------------------------------------------------------- +# configuration options related to the man page output +#--------------------------------------------------------------------------- +GENERATE_MAN = NO +MAN_OUTPUT = man +MAN_EXTENSION = .3 +MAN_LINKS = NO +#--------------------------------------------------------------------------- +# configuration options related to the XML output +#--------------------------------------------------------------------------- +GENERATE_XML = yes +XML_OUTPUT = xml +XML_SCHEMA = +XML_DTD = +XML_PROGRAMLISTING = YES +#--------------------------------------------------------------------------- +# configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- +GENERATE_AUTOGEN_DEF = NO +#--------------------------------------------------------------------------- +# configuration options related to the Perl module output +#--------------------------------------------------------------------------- +GENERATE_PERLMOD = NO +PERLMOD_LATEX = NO +PERLMOD_PRETTY = YES +PERLMOD_MAKEVAR_PREFIX = +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- +ENABLE_PREPROCESSING = YES +MACRO_EXPANSION = NO +EXPAND_ONLY_PREDEF = NO +SEARCH_INCLUDES = YES +INCLUDE_PATH = +INCLUDE_FILE_PATTERNS = +PREDEFINED = +EXPAND_AS_DEFINED = +SKIP_FUNCTION_MACROS = YES +#--------------------------------------------------------------------------- +# Configuration::additions related to external references +#--------------------------------------------------------------------------- +TAGFILES = +GENERATE_TAGFILE = tastymenu.tag +ALLEXTERNALS = NO +EXTERNAL_GROUPS = YES +PERL_PATH = /usr/bin/perl +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- +CLASS_DIAGRAMS = YES +HIDE_UNDOC_RELATIONS = YES +HAVE_DOT = NO +CLASS_GRAPH = YES +COLLABORATION_GRAPH = YES +GROUP_GRAPHS = YES +UML_LOOK = NO +TEMPLATE_RELATIONS = NO +INCLUDE_GRAPH = YES +INCLUDED_BY_GRAPH = YES +CALL_GRAPH = NO +GRAPHICAL_HIERARCHY = YES +DIRECTORY_GRAPH = YES +DOT_IMAGE_FORMAT = png +DOT_PATH = +DOTFILE_DIRS = +MAX_DOT_GRAPH_WIDTH = 1024 +MAX_DOT_GRAPH_HEIGHT = 1024 +MAX_DOT_GRAPH_DEPTH = 1000 +DOT_TRANSPARENT = NO +DOT_MULTI_TARGETS = NO +GENERATE_LEGEND = YES +DOT_CLEANUP = YES +#--------------------------------------------------------------------------- +# Configuration::additions related to the search engine +#--------------------------------------------------------------------------- +SEARCHENGINE = NO diff --git a/INSTALL b/INSTALL new file mode 100644 index 0000000..02a4a07 --- /dev/null +++ b/INSTALL @@ -0,0 +1,167 @@ +Basic Installation +================== + + These are generic installation instructions. + + The `configure' shell script attempts to guess correct values for +various system-dependent variables used during compilation. It uses +those values to create a `Makefile' in each directory of the package. +It may also create one or more `.h' files containing system-dependent +definitions. Finally, it creates a shell script `config.status' that +you can run in the future to recreate the current configuration, a file +`config.cache' that saves the results of its tests to speed up +reconfiguring, and a file `config.log' containing compiler output +(useful mainly for debugging `configure'). + + If you need to do unusual things to compile the package, please try +to figure out how `configure' could check whether to do them, and mail +diffs or instructions to the address given in the `README' so they can +be considered for the next release. If at some point `config.cache' +contains results you don't want to keep, you may remove or edit it. + + The file `configure.in' is used to create `configure' by a program +called `autoconf'. You only need `configure.in' if you want to change +it or regenerate `configure' using a newer version of `autoconf'. + +The simplest way to compile this package is: + + 1. `cd' to the directory containing the package's source code and type + `./configure' to configure the package for your system. If you're + using `csh' on an old version of System V, you might need to type + `sh ./configure' instead to prevent `csh' from trying to execute + `configure' itself. + + Running `configure' takes a while. While running, it prints some + messages telling which features it is checking for. + + 2. Type `make' to compile the package. + + 3. Type `make install' to install the programs and any data files and + documentation. + + 4. You can remove the program binaries and object files from the + source code directory by typing `make clean'. + +Compilers and Options +===================== + + Some systems require unusual options for compilation or linking that +the `configure' script does not know about. You can give `configure' +initial values for variables by setting them in the environment. Using +a Bourne-compatible shell, you can do that on the command line like +this: + CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure + +Or on systems that have the `env' program, you can do it like this: + env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure + +Compiling For Multiple Architectures +==================================== + + You can compile the package for more than one kind of computer at the +same time, by placing the object files for each architecture in their +own directory. To do this, you must use a version of `make' that +supports the `VPATH' variable, such as GNU `make'. `cd' to the +directory where you want the object files and executables to go and run +the `configure' script. `configure' automatically checks for the +source code in the directory that `configure' is in and in `..'. + + If you have to use a `make' that does not supports the `VPATH' +variable, you have to compile the package for one architecture at a time +in the source code directory. After you have installed the package for +one architecture, use `make distclean' before reconfiguring for another +architecture. + +Installation Names +================== + + By default, `make install' will install the package's files in +`/usr/local/bin', `/usr/local/man', etc. You can specify an +installation prefix other than `/usr/local' by giving `configure' the +option `--prefix=PATH'. + + You can specify separate installation prefixes for +architecture-specific files and architecture-independent files. If you +give `configure' the option `--exec-prefix=PATH', the package will use +PATH as the prefix for installing programs and libraries. +Documentation and other data files will still use the regular prefix. + + If the package supports it, you can cause programs to be installed +with an extra prefix or suffix on their names by giving `configure' the +option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. + +Optional Features +================= + + Some packages pay attention to `--enable-FEATURE' options to +`configure', where FEATURE indicates an optional part of the package. +They may also pay attention to `--with-PACKAGE' options, where PACKAGE +is something like `gnu-as' or `x' (for the X Window System). The +`README' should mention any `--enable-' and `--with-' options that the +package recognizes. + + For packages that use the X Window System, `configure' can usually +find the X include and library files automatically, but if it doesn't, +you can use the `configure' options `--x-includes=DIR' and +`--x-libraries=DIR' to specify their locations. + +Specifying the System Type +========================== + + There may be some features `configure' can not figure out +automatically, but needs to determine by the type of host the package +will run on. Usually `configure' can figure that out, but if it prints +a message saying it can not guess the host type, give it the +`--host=TYPE' option. TYPE can either be a short name for the system +type, such as `sun4', or a canonical name with three fields: + CPU-COMPANY-SYSTEM + +See the file `config.sub' for the possible values of each field. If +`config.sub' isn't included in this package, then this package doesn't +need to know the host type. + + If you are building compiler tools for cross-compiling, you can also +use the `--target=TYPE' option to select the type of system they will +produce code for and the `--build=TYPE' option to select the type of +system on which you are compiling the package. + +Sharing Defaults +================ + + If you want to set default values for `configure' scripts to share, +you can create a site shell script called `config.site' that gives +default values for variables like `CC', `cache_file', and `prefix'. +`configure' looks for `PREFIX/share/config.site' if it exists, then +`PREFIX/etc/config.site' if it exists. Or, you can set the +`CONFIG_SITE' environment variable to the location of the site script. +A warning: not all `configure' scripts look for a site script. + +Operation Controls +================== + + `configure' recognizes the following options to control how it +operates. + +`--cache-file=FILE' + Use and save the results of the tests in FILE instead of + `./config.cache'. Set FILE to `/dev/null' to disable caching, for + debugging `configure'. + +`--help' + Print a summary of the options to `configure', and exit. + +`--quiet' +`--silent' +`-q' + Do not print messages saying which checks are being made. + +`--srcdir=DIR' + Look for the package's source code in directory DIR. Usually + `configure' can determine that directory automatically. + +`--version' + Print the version of Autoconf used to generate the `configure' + script, and exit. + +`configure' also accepts some other, not widely useful, options. + diff --git a/Makefile.am b/Makefile.am new file mode 100644 index 0000000..264c1f9 --- /dev/null +++ b/Makefile.am @@ -0,0 +1,25 @@ +SUBDIRS = $(TOPSUBDIRS) + +$(top_srcdir)/configure.in: configure.in.in $(top_srcdir)/subdirs + cd $(top_srcdir) && $(MAKE) -f admin/Makefile.common configure.in ; + +$(top_srcdir)/subdirs: + cd $(top_srcdir) && $(MAKE) -f admin/Makefile.common subdirs + +$(top_srcdir)/acinclude.m4: $(top_srcdir)/admin/acinclude.m4.in $(top_srcdir)/admin/libtool.m4.in + @cd $(top_srcdir) && cat admin/acinclude.m4.in admin/libtool.m4.in > acinclude.m4 + +MAINTAINERCLEANFILES = subdirs configure.in acinclude.m4 configure.files + +package-messages: + cd $(top_srcdir) && $(MAKE) -f admin/Makefile.common package-messages + $(MAKE) -C po merge + +messages: rc.cpp + $(XGETTEXT) *.cpp *.h -o $(podir)/mypotfile.pot + +EXTRA_DIST = admin COPYING configure.in.in debian/changelog debian/control debian/copyright debian/rules + +dist-hook: + cd $(top_distdir) && perl admin/am_edit -padmin + cd $(top_distdir) && $(MAKE) -f admin/Makefile.common subdirs diff --git a/Makefile.cvs b/Makefile.cvs new file mode 100644 index 0000000..4c0afd1 --- /dev/null +++ b/Makefile.cvs @@ -0,0 +1,10 @@ +all: + @echo "This Makefile is only for the CVS repository" + @echo "This will be deleted before making the distribution" + @echo "" + $(MAKE) -f admin/Makefile.common cvs + +dist: + $(MAKE) -f admin/Makefile.common dist + +.SILENT: diff --git a/NEWS b/NEWS new file mode 100644 index 0000000..e69de29 diff --git a/README b/README new file mode 100644 index 0000000..2dfae6e --- /dev/null +++ b/README @@ -0,0 +1,10 @@ +Tasty Menu is a K-Menu replacement for KDE 3.x series aiming to provide the maximum usability and flexibility. +It provides three columns where you can always have all your favourite applications in handy. + +KEY FEATURES +-One column for all your favourite applications and two columns for browsing all the installed programs +-Search engine for the applications +-Optional integration with Kerry Beagle or Strigi +-Highlighting of recently installed applications +-Fast user switching +-Drag and drop support \ No newline at end of file diff --git a/TODO b/TODO new file mode 100644 index 0000000..f73576c --- /dev/null +++ b/TODO @@ -0,0 +1,2 @@ +-drag 'n drop support in the management of favourite apps +-drag 'n drop between the menu and the desktop \ No newline at end of file diff --git a/configure.in.in b/configure.in.in new file mode 100644 index 0000000..c948a08 --- /dev/null +++ b/configure.in.in @@ -0,0 +1,6 @@ +#MIN_CONFIG(3.2.0) + +AM_INIT_AUTOMAKE(tastymenu, 1.0.8) +AC_C_BIGENDIAN +AC_CHECK_KDEMAXPATHLEN + diff --git a/doc/Makefile.am b/doc/Makefile.am new file mode 100644 index 0000000..a7255a8 --- /dev/null +++ b/doc/Makefile.am @@ -0,0 +1,6 @@ +# the SUBDIRS is filled automatically by am_edit. If files are +# in this directory they are installed into the english dir + +KDE_LANG = en +KDE_DOCS = tastymenu +SUBDIRS = $(AUTODIRS) diff --git a/doc/en/Makefile.am b/doc/en/Makefile.am new file mode 100644 index 0000000..9e59989 --- /dev/null +++ b/doc/en/Makefile.am @@ -0,0 +1,3 @@ +KDE_DOCS = tastymenu +KDE_LANG = en +kde_docs_KDEDOCS = screenshot.png diff --git a/doc/en/index.docbook b/doc/en/index.docbook new file mode 100644 index 0000000..5ff1df7 --- /dev/null +++ b/doc/en/index.docbook @@ -0,0 +1,290 @@ + +TastyMenu 1.0.6"> + + + + + + +]> + + + + + + + + + + + + + +The &tastymenu; Handbook + + + +Marco + +Martin + +
notmart@gmail.com
+
+
+
+ + + + +2006 +Marco Martin + + + +&FDLNotice; + + + +2006-07-09 +0.1 + + + + + +&tastymenu; is a KMenu replacement + + + + + + +KDE +TastyMenu +start menu +usability + + +
+ + + + +Introduction + + + + +&tastymenu; is a KMenu replacement aiming to provide the maximum usability, or at least to be a testbed for usability concepts and ideas for a future kmenu replacement. + + + + +Using &tastymenu; + + + + + + + + +Here's a screenshot of &tastymenu; + + + + + + + + + Screenshot + + + + + + The left part of the menu is very similar to the Novell idea(http://www.novell.com/products/desktop/preview.html): you have a search box that is always selected when the menu is opened (the search result are displayed in the leftmost listview), followed by a combobox that decides what the following listview: favourite applications (default), most used applications, recently used applications and recent documents. + + +The right part contains the whole kmenu and takes the aspect from KBFX, the middle column contains the top level categorization (plus in the current kmenu arrangment there are also the control center, home folder and find files, but i think there should be present only categories). in the left-most listview there is the content of the category currently selected in the middle column. I think in this way even if it has the same number of items it appears less huge than with a popup menu/submenu structure. +Every items have two row, for the name and for the description, in order to make a more it more informative. On each selected item appears an action icon on the right, at the moment they are "add bookmark" on application icons and &remove bookmark &on favourite apps list. + + +The bottom buttons are the usual switch user, lock session and logout. In a first time I didn't want to put them, I tought that these function should be delegate to another applet like http://kde-apps.org/content/show.php?content=26150 , but it seems that the multiple menus concept it's a thing that doesn't work very well in practice, it needs more real-world testing. + + +The left-most btton contains the user name and icon, and clicking on it it opens the kcm used to edit the user's profile. I know it seems silly, but It's only an experiment, probably it will be merged with the switch user button. + + + + +More &tastymenu; features + +To do + + + + + + + + +Command Reference + + +The main &tastymenu; window + + +The search field + + To do + + + + + + + + +Questions and Answers + + + + +To do + + + + + + + + + + + + +Credits and License + + +&tastymenu; + + +Program copyright 2006 Marco Martin notmart@gmail.com + + +Contributors: + +some code from Kbfx Spinx (http://www.kbfx.org) copyright (c) 2006 Kbfx team. + +dmctl.h and dmctl.c Copyright (c) 2004-2006 Oswald Buddenhagen and Stephan Kulow + +some code of the TastyListView from the statistics list view of Amarok (c) 2005-2006 Seb Ruiz + + + + + +Documentation copyright 2006 Marco Martin notmart@gmail.com + + + + +&underFDL; + + + +&underLGPL; + + + + + +Installation + + +How to obtain &tastymenu; + + + + The latest &tastymenu; sources can be found at &homepage; + + + + + +Requirements + + +In order to successfully use &tastymenu;, you need at least &kde; 3.4 (didn't tested it under older &kde; versions, but it could compile anyway). it should suffice a stock &kde; found on most distributions, without special requirements + + + +You can find a list of changes at &homepage;. + + + + +Compilation and Installation + + + + + +&install.compile.documentation; + + + + + +&documentation.index; +
+ + + diff --git a/doc/en/screenshot.png b/doc/en/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..31d87c4fc6b271c272ce8391ed12126ee79ca14c GIT binary patch literal 83208 zcmagFb97{F)VEnNI!UL4j&0j^$F^Z&Og-;A->ms(*3_z6=hVTy zPTko1x39e`TtQ9(5gr>J001CL{t{IJ0KmsVA1qjK&=Eet&l%7L&f%A)GXQ|#`rikP z&Lau51AuXnlof+nf`$CXf&769g$w`?0whI+R6JJCf$ly@VxL3Z@@rk0vQxzz!d`@e z$DJaO#FP<#ONa?6)gTWh-!!K^yi(?rZ;(1ggcN_!x}5w;QGkFu@m1znTT}M;=WW55 zgT*Yn^SiLtufH4jF@N+tOh3BwG0*m_v0d}y_W$H1M23X~4-~w|9~l|hf4Ms%@VN$S zVEDfe5`TSMapPV<{dWZ+@)9^H^Z%Y8jQ{UD=*Dn_|2_4~>36n7Rz44LyyIdPY_6;b?MsUA?;de+Oz-Xf2va zkYWE2!m0x?`f8GC^oJ+?_8xy=!MY#;dRFQ;5OW)vum@xCem~;;*LQ{P1B~aVw~sox z>j}gVeKlJo|B##i4qMpR;PSW`ahyC|tOa93|99oJlouZTzv0Bd7B*3FV`F0_r7u43 zM*u)}4nP?Hix-T5Am{VrO+UU%{M`_X$;d@gk_xbYfcNd&H;90q9%O)pO~oA~eP+>- z&Z0*NE|=4NW%Fm3=bgJPU9NFx%faysNd**Cu%@OnF|kp8!QSB{P+dV`nZ`8I90`0T zdKlT#!a_#s^y?oC!T#Z43=W6gXcCqAR5l$YC8zh}c@mZKU^Gs%^O0POFa`c@?8wQS zxo9f@;Qe&jEw0I3R9jnhBuqqOJsD3TQB6z&e&bC)dcnUWX+o<}b6wSbh=zfIhL)Ad zSJ{s|F}!en|KPiFx* z-0qkDAQ^;&2`wqS-)cDVmOrA0=Eb^jdz+INSSpeCv9Wmv?HxIA@@ngQ9yGSJ{Q2`I z2@$6YJYb{!DGHB=h?SL@nb~bJtCfw7?Rc7`>KEcuO2b9`Fe9dxva)iaQmG7iCdXB_ z@sLyhoyp-ikBA5fg?zT2ni>+IL=KqEYH4L*VPa+VRo(q5Zu4Qi_-=i^3RM_#9Iy6&b05s;rCIou;_2HU5mGem{BxgWo0ccER4lsDX#hNrBJ<8Qd}IN zy;QBw0Ij5~{NTlhf)zH_%Q${GA@Kb6)_psw54L^1gBxP#C!Yf9|MxwDtHYxl|Ie4? z4T&bxms@m+7~GHD$gh;7B>so_dcgI(@>JKyVV~XhvS}lWo2b`M;$gGh2FO#H`igQ>H>$|$MJZ2M=UZW zw;=X7ulIQ4n`5l#ptgM{m-}T$MFrPY*V|_}YOB%y-BkDWw8;0AWOO?1ru%gBY={8U zv24Aj^P7l>S%$9XD`|!gRhi>s|4T(nV_luoRJLx8 z-|I+ka3mNaH}PsD!Y^4oWHdCFTEvNo3ELwYL(IkXb)TDEG5Md6`7~~q>!!@MzjAHKH&NFjN$2gg@!v^ zmRwmq`Q@Y}2h3o#p)@^xj#q#$xVWeYJYdEGGT_f2NI)8^<>}j%e;n}R_4VOwdPZU$ z88}lAp2K2hA_wF?*dIx3ZS`d6s5#9G#m^G>>dML@X?Oo3CeNir0r))|&iQ}V+ua=! z+}=%PPNb@lr15&@t58D)h=d~f-_O8E6*&z?jbpJe4^)n&@X;rZ6w79gGSYH4gt=ix ziwhxh%LUqA7}a7&5BBsZG@Ky=>m2u*0oOM}*8HCy(U|q_S6x3yLiAmK%HQ=l zb{J>c;H><}KH`JBY&G|DbiC>Q`Zx)K`qth~)nD6GBDlu#JO6JJRrj0S-pw9Gll@k$ z>siys+jpPWlkOONz9?+KZiLI=0}lNU)BZT3-#H#eC&jW`UGKN$yI4vJ4sy6nrInT7 z0iJjGu<-Cc$9XUuHqX6@iYl0Z9!DLCdggQlJULNyWJpCNrD;3J{=2yXI$kEu7*xo> zN1S|REiJ9b%MA{*af{le*SD=NXaLCOyzy!Jz26++@wkEY)EJ7i#o9!+_{{`Dz(7EV z3`S?d0va0|0ozAMXOaa9l%mxkb0_zra_P)ifd74ZH^A^{#)9eu3yb+gw(k?3yNTUq z2OQwsjmHWQhO;|$96vlfj7iR~*vn|+=jUf)LJB~@&#E<>=;n%9tJx_BSvY{8qN1Xc zlar6nmiwk>_1xWQK`g%`H&DCT4zy^|xc`J@ham(Jj*dlgPc|T7!p_=V47@-$2t(UI3f&beY&UgN2!Kd)a zobKz(_NyFT&$`Biw0Ndtd;hVRn3%G%GOae3m2?(!koQ@vc=>C;)%EqdwA#G&$rFPr z&)0Zfl=@i>>@I3*db}CR86O*qjEQ*}64*QeS*Ep0qZXX6@osp%J6f8UpL=b#9!u9@ zB>JxwyE$tE{*Nn1H0o7lWz-M-qN4qJZYOCu{+kI|S!h3gWCA;1cR~rQnjiYUe}$)@ zOWgkiR_O-*Y!F_W!BnIdFXS$E1cFNtQB~~N zTq$4zuCVciqW9c-;~8Y{@Kzg#d%SBa?(gr<&pANW4(!4W)Z8=B#JoE`JKOIqEGnw! z2H?Q{MakXJjB42>GC;Bxla!Qne!c+e#G{dN9lk9 z-GKiO(MAmMzj7{rNeETohd<%}(Om?{&DN6_@GN^kB>=^I|piw7wec8C#ZZnli6Wxo45ll zfxL>SxWtK4RJamTkncO!>m$zHfz4W#30s2U98RF|j~fQ{3eaKyPks8Mnm8pYL?H^* zBy-TfzwF9u9;ag3vXNB=v2vvXMKRHyFtd$iS&FsrIuNw0UbnJ9NlwckK!AsXzejSdCzuQo2$lx4!VO2rIvkmMmj1 z*fqF;ozU(zHJ9RK8<6P-DM%=sQ8WLf)p&m1lkWcX>Li5S^6x&_3B|zWNpTh_8*}_> zA7^D>bi>|?1Z|vfyS<+nmWI1DoNJS^NgwA6k2LKlybc(u{rvsI38S&sJ`o3S84LhQ zD5(l*Nj*iR3*n3qfB*$>RJOIfh{AFY2@#jg=Iv}~Xn30ixwh{FlP7Z&hPV4C=;+D7!LTo3)~cnm zqsdMNUS6}~X+@B{ytJsdmF>Th`~`y%{-5s?nH*dDz{$l*ZN({X7KgkQ zI@slIdF(EJ#gV6`CN#)@rdFl=HFUny&xXoJi0Sw|aO%Jm9+W9~36NA5DK=j-m&`8AMtE#E7+AP-`jH!e7RA{n*ga84sNB@83XWsKPO*rZmx*tiC#cw%RtJl+w%OwINR%VWr#puNlWWF=c~f^q$t%h zJBQ7>*dy=b<;Yf3lLZd^KP_D#9!*KjE#Pt-ca)>QB3IEOxQhkR)X?`kqf8TKo**2$WeD?Vs!NNc8uX@5=aAosaPN`Su`6J6}7u-1o#DtE@^2Y z0}>Jv0s;UbhTO$BS!yKWQE^g5eWBm0%gRtxVWchD`vghg;uoq9mtV) zJ#BhR6)B-{;Mp2sK7yJL4GxwhO#n@qNI#5o=*=aB^GRcI(x>Da@#vd`F6b4CwD~u%>4=8z1I%KHQH$ACpY**$GzF_iNRQ(r-FpjKN5bsZ{c?!Y?sfqkkmI-NwWRA@Rn-QXi)?HM zyAn|^k89PD5fS*_=Qp6RN{jYq_L2GI_R+Z<22h=Ea{4a9(?BP1vsXK+S3{5tI4(q-JZ(Y_sV^PaGi>_pl%&W#)fMOW#AS39?vn}8iokFWwXA-_*16mRXpnwEm zu-W0c<^RP8uvu-e1nr}Vxyq2#dED%Vqf%r{95NXX(&}|+M1g=oiC%RMx9e%0=~zEz zsY;vw*QY-y_KlB^$9J47mBk&3jEv*}87%ipotuzDZiG=n`mIbypTq_9<4R5^%B@(p z9P7a3t*lb3+J^|o<^@vD${&XR&;|jvKX9S{*$u$ylm}>3h6fEU78kdT9v-fG`GOpo zqu4@l{^{Hs`23>+P$e%;fARCSh=Kp{K0j!6?(6e4QC;7sZ*KMxxPG%^e#QTJJqNhH z9bGV{h~aiJ?9N-6cILrz{&-nQz0!BE_jBDemZ#IHJ)Z&v5zv75{Mm=~p;h3e-d}-?i ze{p)%Q2u_tqR9=s1ks#W-nwg0aNO~B$<=(xHRl$p-{L?{RhmPwUd7}BA&$&CG0Qq} z_m0tiIv6XpFd9A{_|L{47-`19&d40$;bE2Vrw7d7vapaX6Y0w|TdPtnkyKK_61hl4Zq zy8F(Bfr8Q}z^QN)xsoC)ul(5+j@_^!x|)F=7--N*>3~~9@6Zf>l?2z&-CXzS6TCWB zNSHMJ%Yb%I4CRwwW%SRl=v1w}qM26<25bMlMTV~T^YR?_51$>KyaAt+bM2P%AEheX zT+YN}HGnwh?PKpRFKzNfzQ_As|E~JtP&e*FZnxv-P2d}YZY_u`sCB)sd#@0@gQnM4 zgTrT62k*$oZ4!jicKu@q?A@TNHwG%oRX`ZP&Sy|a#9mI@cFhXW# zCGy0J_13uyx2LPE?m1Sxer}=&*BN^vvzz{56K2Qx-=rf=li4xsYa0lJcKGt*1v4u~ zMUiLYSpav0$ficjha%UXa$Wn~C5u-K?|hf!N@YEgy^9K)^XIHwg-EasinY<~)fwVV z`T2`O5_ms;AmYPHinM4P9L~#87Ge zw{v~}uebJ(SH!UJaPO~=?;w!SGG}7n^)i^v=WT5Cdbp44c~)t|lt`zZ3@l$Gp&=GMVfwY-|Jd4>3Hl~m6TyB zw4Y4f9#1c&VFEzDLz1>PyCO20sK^KKBQx^d02xxZv@=E(;{f7&Fss8Cw73_Y9IY+2VT=>t(c zegiEXYj{Hp1HfPb3ihT=x)zlzb0{bjs#fJd64)S8$x@}jJq-?cMnNFs(VPX~E>O-|Wc9 z$l%!Wah@%d+<0%VviTfL{cR{-@Z+JE12<+52Z8kADgLo~z~}T(w?7esnU&|H^*I#SfKa6{DMkq>sb)waq&- zJ0nb!`x6+GOu*|g-R0YE7dsb{@3kW-5Uw){2R`JOb5uvwX1T-e3kO?b$X3te7bo>DSy-vv;wX{R~1#_x87;y+I%oOis| ze5J1MOGe%fGGjU3m#v_U{QHU}HsJZVAQpu0x|a0)`AA6iB0>0kfrOKUh{*7GI`3@J zwb?{koqdfNBz%B!M^3E@5uQ$-&2x7CXfXSM@~YeA)=K1Q;>>y*P&E8m41t)ssx(NaY!rAb=$4B!-u zxTq(C25VfI=!20{Uk@v9_4vJTMkg$hO+IhRC7ODlYx*ht_w!3C z6cS1emPt}uO`VN_j$raX$?dcN!wO+Tn;BrI0x$*5Z!SDaP8Vs(pRCF)dnYp|rm?f} z)c@{ks$7v89*Z7{6Im1(UfbqTgixS4=;HA)=Po~I@tQz-;!r#0$GVVV(Vl7VT0@^* zuT@DZDYbta(?xF+x7s1L^!fYIk=yEJv=l6%DIaT zI*-b!HK{?F$WYr+rCj>LFjUnf2+xH9?!s!O<3A?P`Kss3T=KXR2pxBCKhI+#P2MeM zKK!*@x-tDsMsik*e)RpzYny22s6%K!DWC9t9R%;$9}nO4fB~$34R^?0xQwIYV?Az6 zZc!fI3w^i|NXQ$x&s0G!D?=)kn|cTbL_!DwP=>&IhEcJo46iDAZZ+MOAAGthBsw1v zXHa$5$CR2!<1br?j|d#1Co`{)m7Tak=0KpmAO==hcbdl{RKex>`j&^nf)(2l`%iPK zix72ZCzcHY!69AI{3ql;0H7$&_!x*3w%LYx-I0psyhA#nuhc0BKq5qiBpc+upr2gi zqzdtOn7pS^#Wbg(|3%5m#7fW2IE%NO%KV&Qs+2sbzrg|Z4PIGLLC!fQ(UpCkjZ#%A zUB)Y#o@~njJtWnFWCiutqMd zoq^l>^6`4aJJB_L>WI5-i-=k~*ZX-R@o4hPL@CPvEO%zKVR0D_7Z$~9fKrlaUBMw6%k3!B~KK|b=zfa$hAptYYeVxOiFXA#p6>CzylN?KQ$ySzlT%O<8IU!0!FY=(q&S*TPc|t|&%`fO zrSgjuO)KZ((ZE00Buq}tCdrGc2vNL*5HI*Ec3t9fi#5ar9GytS9Q`;w6FvB%xKo ze_vVZ{ixdrQ%({lS2rRgVnP|h#;#zJDN^G>063&0>`gns<)`vu;U1NzV5>UWOZ`fy zAG$01p8Ru?0FU))GL#K_;;Icepe?K8Tkx%(#SE(|-vKT#5dhvdgK$+0Rg!Mea7~AV zEhC<|C?UPgNiT%>mQu13Zhf%HqL3yagO1oA_3`#11$C#u5S$Lv`YCTQ&uWIRNF98^1PT%A%QyBzq zw6IMSES~`J3}mWmnyODD=gViv_XTw`5OewP8*?jJ=x@N(82`6w+LF*u1x^AMuw$80 zg7wcdv0>Gc<|1W=b%L3e;riHN9eST5!3r*gow#!0&}>|8eBUI>O*(Soz=g(wl4-k%1v1#1pEDe$-@;q3T-&n61eAN& z(BVZ6%Z^*w(!Q+VSJohMc!z?e{HxB1l{dTnQ!p)Kx37*@u4j|jxEv^tq?WbB6F~TG zThjTL8o@vTlZDfmb2T(fPiXrkgnaCKch(&R&gaW~q2I^r!(v+S8k||E;-S%gnq~wI zTof@QI6x!N5Gn(G-K=?J$7wez$xuUYdnPMq?RV`D8AsW`3A?30uhKuWD?>7ff}>ApVpb!x>0rTea!x%uADUuF-Si3g)HmfGtl^7H)5yK;l+ z5aHE_J+J~%ImJN*J+yuG2vb=b_K$XO@X4=ytn)H}l%2cK8wwCyfB$n5WLxafD>lLzje5>I z29G;+$IHm+z&V&mwAnVDyPX?H*eFgHFXdH-kMTdvIZesl2{)o;wB6R7lZzpYhT zQcz5I`_^QTQu`)aG_&o$s7v4Ga_rttS{moLqaxE6R3F+#Z@rI;Ir|Y&+rbr0qs?2+ zd`sLx-9;m1U#F;lj$KD(e)^rl%$Co0YOxPYJ*m^yTMqUY0WLcdp4a|Jiw*%DEK;O) zaRM?V5Gy zJkgT5x&l3Jbp8VRynx64z@WG=2v5p?Zx*`lWs0pA9zr=IDVk_Rr%kf(3>*~+b*tDyAFUkOpU2W4n1 zAYCX;llJek(5L%u&yANSJ07}cG}IC7fZd6B_aPp+bye9 zO8$9Fv{V?JHuPp4y&IdK$snMc`dRQres@YP)3+UZiz!+u9}AsLmu?~3nv4orlodQ^EQ zd9;vjVfU(=zt75&r9)z-6OuZ-^rv!AML+TIB|m>(hIt#v?d~GWvI72+>Y?Tz$wUK> z%3<4hEW^`^D}O@*(2}fdR2H-P2SDfkl4&vVPjc8QjjvZp-Pnk&KN^X`O0>kT8Y!oj7rB(DoUF58nB3Jf&ZRNHg~ip3o(49r&Np zJ)I4z6Zw6QO!Mg?dMaljxTJYAG&nwXbFvr(D-ub=aA?9&&X_XCyZ&{i9F_b~A2nY^54THA47!7okFiY*;xl0403$%o8a z(J<^cIbJsp3T_W=Mr%n$O+y3vIVi~opZ@KDR|+6&6pGMY?aHghva8Q+nx-Y5I>g6yo(hdnR6tl7bh(fGvrd^SS% z(OzGoudmO6Q|sJG;YP!Xjo;&M5kxg!%3pM_U3Mh~wOZm)4hVSU?G=q(T_0#kquTg_ z+oVJF07gO&mx9Vi!GqZFPY4+3SbmKM762@v4b28}Av^&#_epz@{H$xiX{D-I2n%S` z+Ul~Za8wt)K64KwfZRp~!^^(tnP5F5%a1BHr)6kUYW))nKh`!bD_<0hcd^HLhYbI1 z`m{7#dBNv(ymn~-t`pxTZh%cjukdVnWwsSB{m()Wx~iMooXSZsxHF?`Hco2NkWvnG z;apggRIt2Lci;>zB-p%=Wg_3zY)m~5g^l&3rnfI?>dT)qIlmexbGrC%0dO~&0#tmRcyNKXxxA z-;^X-DXboMF!A>?Rn~o)%FVW_X53^7ltT%smM3q{Uk2Cra}k)-D_eCsd|a&R=adiG z$t@O^{^`wt#da8gGMzW?Lm>?Ydt=Tc+#=V;In=(c9=Vh6yU-$PA$K>H9HqlOj_<;K zBXQe|sbdEYoJfbs{?4l>c=!U$gYw&W4YivlE||2V>pG{~V0RH1^aU(QC=aEtBAg)- zR(oSwQxE~&#LvGbEm_!6e3V>kvp)qUJl+%z^hy~uv!W@X^ zf#eZ*wc-E=cz+!%eU!FR_*1Am-m+Y=o8m0n#0_Jdnf_eTl-XZZKZhywoU?=salYo9 z)1qPi1RAqEih_Y-(n=RcAQs>f^QUidLu=Oz{tsZ+kx99na$Jf*_fP9OosBs%TAF3d zZLo$sBBz|8-}?@Avt5>Jmrze?9=eyo0-!+y6BL>&b!4iS%9w&9bXh%LV_Th^HTbfA zz{~J@VqXKTGn%^JP+(=(!%J$~^1uN!?2B=4+;;yuf8XJ&HB^Wv+{2Bi2bnJ3T7kQR zZXhSLbg^EJmTqlDVkjJx*bySMh@s@c6O@jDgN(RVL+{cW1@URshzPMOc65-`>as2Xf{=pm$a+X zHX%d$)%~+4ei2SpbaF!7jADAW35qZ@K#y6!pkQU6wGbMywGD5k5pwWcSvfm9|`WV9@c&YAI|QRy?j->0lztS{y;d~w(`tnAt$ zE{cK)))#bD+Y5k`?0&p9bDr|ZZdsH|UQ4GYjuPde^6`0uk!uP63JsS1X{?3&;K*N! z86xIM5f$534-C#u3ToNmNANFa^%%#@dG=_PGv~lOcXfSii`6S z)X!Lyn=`ZA{5hgRa8z`YAE-rXx-Jo5CH#=@oCoJWMnx=MD`DtY?|oeFlAYUSkUPYKn?`o-hN zN2TX-Qdc%Qq!O>K^nE%WG~A_3_Z{`45d(`&@!!C}=+KI-%D2nP=*AaBMmDhgkeHR$ z$`ZT!puxoOKnSnpbDm-@#d-!&R5q^5%ShRh7o_Ik?k|X$t-in)F=hMTU9oGF*n#Er<6uUQr{{Z5ET*;mKLlCg{* zJLQ_)(!MCjzZauRrq|k5WpD3c>>vynJLJqhW8=HKO^HM>SAqy#&>WRtAi%}tCi>?u zSYChQalrs2=hyUi_;uXRxz!MK$m=MxZ*ftTmzSuK&9&vitAGv-@O*%Q4wXr}XdXUg z$1mU5`1jlCMG2YXR;9Mx_G^9SNIv!$8mZ8PnVK`rvEBOVYUmfU&orT|0U_YIr0}`8 zNcF?H9TZ);lHIYmW$D<{(Au)A9}XRNvZ64kK{pUO{OO7B*#(z|MId`GV}aBo9`Jw~ zgeT{bcjg`XhG)j%o~3YNV8avHZQ0(qs?zp(|CXxdeWwXn)^)N3pB^Zl!^o72-03Y= zzFxD;vyJvJT7|N)yNk(>)>V~6@CFU14DoO0_H{F*L*`jph8o-{C-9*gS_X#>0CzGqk`KDEWgI~rbb#thEY7L_JTRMDRO*q_~1@s^@!j(Zl^Y1+IuYQODiJ0RjG=9G= z177X`UKdUuY8TJu#U?iPwFe{Zi?WsGiCLy-V3QrgEBw&4#g=Gdd82NXosAp9dJ3nH z>S3aJ&x8Xzk98Acr8w8bZcvAke?>CSARJ1`z(E66pSHF}#t}_bBHCH$a80HTlQ1{U z0a-kXz5Nv*hSb>!V@Za~uObu%vJES1rdH1oL#)LCNzQ+!PBq}rfSy`hA-6iweDin& zfQ2LLdF8X-z12C@*1Re+)437e8;w7*u@ZPFKoD58&O)xV>V*$DZxCZ$E(Kmn3#~h> zYu}v&5jU@#vu0AY;sSgM^4F08IFe=$*MYsreo_vvt=&cBRayCcXttZ(CoGed}0`skYyp$Dv-o0J~jpE5j% zSpbASW6Z*bP=?#{#ZN0LC^!0mz0)x3?)A^>VX8bmMN&DC>X)E#&nKVnI+B@g%;qXk z@PeaHHK-3NRsCB{44mxi`yLZDVdilb-uBP|2t`Vk?}6lS1M2n8E64BH6j^dfD<(BJ zH>aki0t;}>21A?c*wv7G)Jx#!lrW?bj=o`E*mV?bo~J0S5)y1)ba}+fN~z`c#kPQ3 z$zTf31wwf8Zuy@mUBw{-VCAH4ZR}|oru6GW_}yf{1=Vq?hnxJngPcka z@&~U=IQ=(0-*p-n99-6sx%~vk*=`YCu10G1b+RsrUHm-{waSG|w6m$y#* z+@%K(SKw0zRFs6A9Km;-LTsgWH6;bjlrZx_`?az** zNlOLom)|0VT5TQ4DBW1aH~nx_Q#`Wd79`A33k&1ns0q79$%JtZ1NJn1j`dLAN^?f_13zZ{}^p|HXS#73p=n20%h1f)u)DH}fZunCey$%TfH zW_Yp@V(wI>qp4dt$Vf+4_BUnMjTX{cQ>8Jjlk+xf>=Vn zAF{4L$qEXA^_}7(44Vo|x0K{q!)04~&PDHoz_4=Y#_U%&eF=a*R<1^*f5ksBdx*Pe`~rha;p* z84;DqrAy--TvA$&K67eH7K{lG^&&_7sO62XFhziU@|Lur*U z@X*>8p=7bFS8Lx8Ye>cEgTqbSCXF#Nk>l+RcPZ?HhRR_bhLe3f7X7oaWK^ z0jjBg21K(GDe0-}e4KE+kwCx`_%V)CFy3gTu60uMnM#NIBeR^LUBLlq(443m>_ zGL|n4{GdmIe_$ll)vVCR6-m|vN0^cjc+(qreYkqx+bqe!L`Th8<|w_E5z~$jY?<_! zz*@Y{;WLa9k+^~Ucd@=rLNW+#q-drd31s_4C0tY(^4a<|gJL|9$HFp%)DkWV4fwU6 zBq~?xd(b#kPV(Crt>t&Bi1F{>1Vx*_kJc&skTs|KjnM{{b>Ha0k|KDN9D#D?xo5tn z!>)nHjz>7fpagh{OiH7l?|y)EiO|SSUk0cWbXfy{>G8B7SCXh#BUq~DytAoJYXqCM z&6(e&I@CC?g(oJSKRuLL2pfbZ&;rkhW1Na5OGWL@Z%kvuM5Dr7Bu379)xbx5sdC)3mzgF>puNmbQxPhfs1zENj~xXmUmG8P=5)_4#N zi9m09_HSmk(*Tq~PkQB`uf!N>laa9YAu47zX4Q@ANHTNj`>X}5wPT9z{Z524uo4=f z1o-GjT?tR&fIBn|CVUU?yH}&T=8u(RCwH8)d_v;E(Vw_OYcJ)s8_Iv<*Y;@{lk)T9 zU;RT$M@#$A2WHJdFh}>9z(^J+ZPzuLf5^I|f$`b8E4j3_)%-MM;MZp-Vq&6lFNv$J z=A$yS*bC`7)yBG-NLZ@*6vU?bP1wowb$EW$HKdpDSKN;4;jOQ!fapvAf9y}Y{>uGg z_U}o)O2l;x4lchR2vyk|v@3~2PumN0T(maM6^#~}39KF7$!ZoN$p3Iij3UOAdv=jt z+5ao#t7Kotg@unjwc6M5_WbgqNt<$Xbv^dkHLAJN?^LMVd)J`pa7UjhEz1(m{~q}r zp?2-!hhcoNFa(YPS?N}mn5#T+cC*^i-x7wVF+qjF|g4%a_L z2m9Dmxk3E_1vPw*2%0RqB?549P>x{iSz{lXqij1Mp^(yMOb9sj7Rknd)r~EgKsV)&C!d}I<7!w9EZ}c>c{`}2c4K5T|EGGg?&A8cOKX}z5i6U< z=G0VGg5toyfK<`!+M2dd8O|y8JF!2D(d_v&45bLQEJmm4XE0p}DD;I83?Ob<(Zl!) zkAusM4~UsRM^oR&Md4=pg`Tb5+&rl@V>wVZK?bVqSk=i-@X)oG#6#o#2>`8K+Zt8# z0RdwAo#gVZB?gD(!$@lp)|ozG3P*5tWBQ4OD{J-qp-F~=t-Px1kX$T0b^ofA(TR;N z12FGf69ZLr=m0PTF5fn%PajJwD?z!*Y^IU6axY&vz_wEpFcNG98f-J@ul1zBGJ}bT( znvoex%LeU~Q8)iJGbfp+?g&Gz-zIkQE~WGSdK-#i()t#S*O+=J4?0#sKFdRj6ov6s zmz}MIOxvxM$)6ZLjapUYKT$QcyK9>RN!fyHklGAYFagYc!Gl|Ry{3ghJL`aLGoX_c zm3YL+<*$}6hXXfUl6+qjFN;duk8aL~%kT_e5Q{1;TGf>Nj#st}4UlbW1KrMpLa?m= zXbj?p_ggNko3H}kum4XifcCLCg{2blWY?3(Ofy&1oUSS3_wMSgDT-5J9bcFj>8@>)grW7MXpHBOkdU@E?p)3|Csb(2KgYt_+S;JM0*{W3QAOmNkoL8Ea+ud@oSvOY za#i7!+L)J(=%wxpAP+edi54`gAxua2GVuyxIpuM=yYxpDu<<}4zn+O-(!Z(ABQG2# z_zCs#L?Af!7uLMY!j~o&M^3nX>@Ryeojn?2rc~jyR+@B1*IJqS0k+8=YMFilej#Ei z*_ZR{y?yJO1H|F8*6D`lb=| zz;#}LhX6Pr6i_PdRjOHe0OCf;P^iR^J=WBZ<46Nv45b>gOgXc9ikL@SHSAymTWYfr zFyJ}{z=H@Wh+Yg@&r^d0BjT4YwjH)H&pvMcK^Kr%Jm&tb0T@xdMQ)w+hxMdMj<8e6 zB6~b!e{=tyG5zA3Tgy31v8kefCSfvu~ zbzlvb)~P74Wlk2IGx)y(_1gMf&Xl%$}9bc2+nB3;rTh;&JpNC*PbNC-%` zv`BY%Nq31LDV-AE;(6Y8&iUs2arQV4Dzf)o*R|HKR$+5doA%6kumJTaQ+BxikIDSlgLS%H}*X67BLuW%#*Zb~D=ikm7gcMVBEVwk$u)+lOZMDaLns&uGk~bDzP7>n8 zo@UDo5G1A&`*qLZaf&~e5nWLI=~~omoY8OMU}pAhXgpnJDO%h30JU~Dy+VMw;THOj z*2MRM)<{i0W1opCKi_vPtyRkj!WFe;=Z$Hzv{F@{xtxEUkJc0&U1R9cP`&#(QAHs% zDR#k;96@Sbj*KoNGh$Y}XH+t>D*H%c)iQ?#Vf*dfX4j{6uJfyP(J@7qu=6n5AZH~n zN5ef5icZWBzDk~yJPzp%Vq{l3sntHIgQVnNITs$iSFc5tK2GaQd64Gn{)*4~AbN36 zh=lO6#R4bgU@xZ?T~|iHSmj51x2lG^q#1YMJjTM84t&bLc1Fk4S)(H-^9NUrmE~ETt20-0DHnc|zSNpAQm^FK#9yi=I&AxTiq>ZFGWX9;$fv}}m*o=T zUH;GIHW)Q>I^6GLwu*C}e?%afs8W=1y>3m<5C&tCck*;EI>)uFklHD|*e?FY#$H_@ zCnp!8kmI1PtvXMPK%vPudz=xIS2HZ%@9dFi^L1zn1tDqbpx@}3e$dpc89uRX{%?cR z%NYH`J>KcrGp{DvWOb$oQi6teRQ-{>lS+`ilPV-F{tYM2=&WiOFry&ItmpN97&x|3 zP`Bi~tv=Q2#QWS*C7l|rGH0WKHIbg=BdW`#D7hFM?@syFR(%2uw@MaQj$HTfV6Rl5 z@BAH!f4Qx=Q&}S${B#utx4rJ#&7+Qsi<(o->+efQbAn4OZa3JbrG@_tW8fk}i00?#7V9^1E~6s&=4@Rx zCynrOWONP&c^=&IMlY^=NJP{ z=m{+*@loYpw%v%iZ|K(gcjWwQbAPcK*iwq;oHz)j3p%#GVaxZ{-(@KDlyo zku9p(WZ5V0!(DZMk*bq)fyU`+jr*KjNs$*jEopa;$5HiHIqbuA>1|lxmp7~b^BNK+ z^UC#^3!dcNbYo8eo zc?osbXbINM(G4orm+uFpUq5}OI{vPq;OI#>Z&HDX>yN9{Kc<7S&%on6GZ}@1z^kUQ zTO#&e$h@~{*WV*fr9x0^(uXn{^|a#T}b47H*?eO@?355PK3g(qR*J{jiP5O zWSKIrb~_mmh_taGu4JS6dcoJbuP3=8SkY8Dsgmx%ZxEPc*5{FzS2!Y6HQ?bnv^Irm zD3@eMTbN`Fx+`K#G#@HvqRor5gYR4qx5a#;OffP!%Zs80@5W$CnIgwvqN5-Xv!)*j z|6X_h7)YLzIO zeOZ$v7I}V_rs|RL*H${+-Xq2HIs@eOyL6!;L&sc8Jl>85YeZk>Q~Jh|L=@r#2{0^W z(NLKo^W!OMYildRUEgU*TpBQCzz=o#JF8XWxW3#O&ce*xaJHJ@cCh*o9h`NI1)3$l zAV6ej-EniGSW!j>>c$IvhDSz5Mo5T?h=b1vK`m;GW2Pw{$3rhDn`K96AKIo%=KbLK zGh25xsgmKTdiRZ&my!yT``jNtBD74d53RJgT?;?c9MOV?*AF%5^Kq=CB8?zALR`EB zOm9Da`~Y9>w?nuZ?D2gNUE}BPKWxTrf!rIzqyeVvBT6wph1&?LxtgOJ&GhMVct%FX z!NI}O^YwH|G(9Hehlo2k$BYHhiB+GMSGI{$)D1p#y%B#$!l6IWO2SBj`^`v{%En&< z-AgWK1a6_jiuS$bP6mmGG&Jy_fr;%m9ME|mGf}VrYUpvJ2D%t7n2c$pBWZGn%n*p7 zp&>A+mRDA$aGMVgid3aQhY<7ZR z8lg>$Yj*R#2)|z<&BXC?*)mxcrnzv_X_cBNJNwVyAwWb#MUB+D*y!so$S3fYzmjd0T1t92;` zqflM#`~v~W&k_iPcaYW#L?jgwM#TM5D-)CKi3of=JPZsBa9a}*5R|=c_NjLGqp}_d zwvdy*@`{Q!g;fS{Jw;q+m%&l3l&kvp?_Y#>YHI5COeKIAVU!|Qe&LPZzq9w$isz3F zuRGS`uYvCdv|oV+lQ}7#@8HScwK(1Dq=ZY|zho;UBn06E$cR&rW3LXTP~N-u!GPHK zhiFY^q_Q4$wG>MC@nws@$ImH=W%QGBjkYfA zFH2_==>kCuzWH4DuBAs$z=%m0cEYr?nxOL*E{31`v7_xz{{S3HI=Jx9o)MFg$z~11 zhyJs&(p;O*L{Eb56M;f?C$h~cuP*rOMby_EhOdubaEIf3+xOJq9sR{OpZxB4Yl@lx zqta#}j7rMc`MAO3-*0<9XpBcN9#x`kE4&nsJgDX=s9n3aOBnb98j{=(8DQC(%f&gqvJ)P20A%x355IlSTRY zP{s>kVPS+fgr|Tb6s6Oy731Nnfv%=8#`0%(W!k>_XdjJ`t}HX2`P#47M|K1da-xRO zkCEo8>S?Jn;|0z~NACSuYSX*A^p$AEyq5eZ$35O7LQIjTxVOH%;QSQqnwLkL6P0i0 zrX`cXZw;wLT=8-rM0X)ZNW~@|G5`el_}GatWtf>67)aP(duL^>3?vC2i6B~9T3B_f z5Qr+%i`pri5O5ceq&+O)QS{ z9+pfL-Z#A0+93*@#PkX6zrGj9uh9`VtEem57fg}hxBPMWJ*qC#ohlc)n$myvdiFGs z>ksLb{8tK+f33wGHIg1d^)D-V2dX^&9S;u=!#jbM>6A+iCuaE9M`nWOunI**Mdjvd zf(4QC$y;45EiHNZ(1yI--QAHK#aoDhM1C&2Uv0+|Xm0MIn4vPkQB@@+C832_y_0eC zrte?L7pgoQW7w4T`-B!fPUmK%;8T|U150o@fYOtmiOGF;@x#*TNv3oZob%fVFz~-O zGoz2Ga$FyVl~G+)^(J#`uEuHihuGCafh33}>eu%?qYdwjlF4!dbGM@X{((KL+tQJJ z0|O17EG$o-Ucyh}jF)@#8J0ZL&M*oTv8Ezl$GFdF)UH+`)_n$KrPu#De>};W87e;_ zR7=)WzCga7T$B1B`m^LuR>+;6QM0S5Xmw8-(gYn&%`NBTlBy~`R#wp2d{iO0dRc;` zDg(>9f`S5s#gv(k9BLnZ<*}T!a@N!&<{{i1&XUbnF9d%noP+bc*||ACaWLn(?94-M zgO!(cMCE7~m9#gNx21)6Bu!9ycD62A&fC=rJ<>vJweqNE1!LV7=AtH@Lg7YMk!nO6 zjx|KvA#hb7nJVPL(`nnb>9Mhx{j$NnK63Wgh#1%N!}ZzOS;)T|On9RB=yOvq+F3xC z(T~n>%2Le&c;!?pVx+9ZXhctZ+F-pryRY(+?OrgF&!Rw~dd3%-EOPA5j*eA$inmYD z{6zK86>x>HldM}z$Q&j+$X_^^=)Y7stkYFLUJGWQsk+wry}9{MQRvZ(I_I=vu(hk> z3inV0k{zO{=v6HO0pTxTdp0El&=vp3*Deux-m8C#sM|N@?VWjI|MEuOt{Dp>T$-r% z%#ro;1f1u}Xi;LOBfWl+EpG}7N|0;{(#siE^bT)2F0D2U%X#9ClKAan~85 zVUx$j#Z8u)Dqe1LT2FHer%)0S9>KpgS)!f&iJ+O9oa{;+dG)FW?oJEGkE)C=4Ypp< zVO*v9KfO2I$`$YWjqxB0x?c;|E1`^zS4?!GBbygTepn`=ldIs+X)+8g%gB{wDgu{Z zyGFw4(Fg7QLS;p4;#HxQ$fn{D0kZLsg z<^FY<)w>hnTk4bzO-5w(Te%v=di8LK<6$cJKcG%KhkHgl`SkR3baXULB7jxDA+h=O z+DKATlKasH5BUCXj-3~dUEvXZo)SI%U5PZM(TNFgUh^if>gQ*C?OgE*mRE@g%U(P-pU@nwcoSs7QgHz@n_mkMR2XYUg^= zig!yuDnP3S~-(dzb9-vR})Qa6Rh^Owrd{`8h%77yIzkkVR589Xf)WFI=HG9 zQKl>1ax*aWB}SyGGGZkO=;RyxOcev?z8PzTQmwUI*RYMCfWSO>?Y@2cmX_8$Gc&_J z2rCz4Rp{mMcIlWJMWEy==iBLa8gU{aMhOHV675Y1l%&3gcUQu>XtTtL9yXI=h8MZbV>#BzYaG~m|!QLGk2L_`e(#FJ}#%Z=chO9s>c>g%(46TC?DZ%qs~V5=Z~|k z;_T+zi$s10SE1yRl07IB-!C>Hx!$k8tegFwB9kG;@lhdXWZkh`TYk<9nxp4KFHR_B zf)u8!_Ivl4bkA_s%$^QQAv0h-w&tPn{rL7Qq7nzQ^$Uv*uVF`s)8=^0moGgl`~LoD zC}O(0x==AIB=QY4dR@cX2hV;}gO4MhF7>J@W%%~RL4*AkUZ~0y&E*?6`R%cn4B7Vg zHin~Q6r}}hX^%3Sh8V0?>n7$-eQ)Em25+^Hgw>4+SBm2$b*SUNNu`J;ao(6@6(n|mM{(Tn? zJG$HG&Ye4OTEBZyy$Xr_!7jDiNZa&JG0tvhbjR!M_2KFW9@6d2okdiH>+$cso!g!! zKQtF;E-cnGdW>zG202!!cC;>VL7_kk)q$_BOV^{LW7 zu;F1-3co*G8&bNN6Y$LM4~`PlvT|egrCRd7OeonWG>V zRX%e1qn}i!!5o+jL-8l?67<<|(c42vxJ>%ukp3Y-i+Z^uE1_}E?$!2~gXzCrzC)cpn|5qoV_y7wvEE zp(yVbgs6QUK=YP(e3x^Ku$og>TUJ$=CQs%Q<2^04oG7L-3#=_mND6Z!iw@CX($rSn zHSj+9+pmAPHlvtAOe}QXx~p}R{gpzOIps?E z_SHfH0s=fdW8K~Bi_N~!Rczz*yxU!DhK{r8?)5yfMu?vy(wbv|Lo{Zj_9A=$Z@(CM zqrMHY*a7LbBY(Fy!VA%E2k*|?OBn(@ty@nH{?65cvk&%$OZ|RCW@hHcfB;Kw($==h zh}~UV#-@Ep04f14#m5KP72o-LBod;Dy>G1C{drcze)mr^ZpN6r)I~Q5UpdP+;SBMZ zqK+rSRhYJ&d89y^K11p*D87H1e>xx1_|FJ|fLu`n@;Y$PFR0{}Nhgmp`?ED(*h2+k zY-|jhC&b(<*V{ z)yB-)U;`$xP-giL=tXlW3=8As;V~}Jym#+jbRCCDA2DQp)T^tg zsJIHvLzTfWbxSOw+;W1Hgv5I42Q4ROWWUMFsp+CN+(LEPc8O#NUdeb7uFX92ivcS5 z|784%y?ZCX&8Y`EMBZ_A;tm4!2_+&)*pB~>Fyg=bxP70w5`Bmh%}3LvJ-XGq=8ouS1dnh>l*8Mf>l8o1c%5Z*p?7FGYm1?19BmTOdB9-J}kg zK_#~E!#Fr?9|=)qzY>&l^ZEk~SZ*6&5HpjLi2_bRJqYS5ajJ-uFUL$IsMY*5(!%bM zmz8aGy1AJKX9dziviaQ(t6W-%9(D^wpN#ysm%}abGFxuwJ`N@(bQ+qCo|jNy!^$9MY*`yQ zt}VrKHdbd9obxFx4C+{6=dH>8mEN?^dvAy_Yr?}d+}yIn(*X1I^IPGT>wm))Dpy7K zfs3%>-m{E5E$rED)sK)FUK1gV)9mJ`-?igY%(q1LLD0+DMt(5@k-%$BD&Re3?BVkH(_ItyCM4K&9CWl%iQSp;QKo>m28}xc&tmP zA4F3lhmx(_rf?=$F>G$m@UY!2v3*7R5;6?X1T?&ANsGm8oLP-_}!!`*t`f zkBq($4NV(_MN)nG`BTZGqJqi1(65juwf!Xl0RbinB-bo9M_=td*thT1phACRZqQTd zz{>Ehhi65Yt*C zZUFEC#1^x{W(`{{!W*ilwzjs!#Kejhs|AIHkOp`9zCo9Dq0&Y_>Rv>8dU}arrwSc< z3?4bT91AI03R}c|;YC$OLf>Xcj_I_k)*Ue7)M6&m-NfI&q9-|<3V*9tefsZ1ig?a| zP~AyDsjCE#>pu zxWa82%(RhpNO3eUFgQnh!Uj(q92Oov{t?nzTIAjvcFY4?hmN(x^cK93j-|WIHBJuB z&dwFEyMHhHjh&)_dY;p%U-wSR<0x}zjC=VofSe_4Lp$ho_nQ(loCkGp+Jl;!L>ZBH zAbiPWFqwjkY{r=kI_i_%C5b}yTFZ$d_{GD&vAAdpumuo@)6>&LI|-`;l(^^!M5kSh zjGBtdqo{6MavLkFzMdXN78VZ!v$B^t3Q!e8z6bOTx()Bo#s=o!6X1kxI$4*YRH7kZ1Kce|&JcPAkMELw_2zh?uZ*NS#|o)im3!V;Tuv>|L|a?O z_&Aga7`<aBpFg2Jd?6`W zG3Pxf{EwND(E@U-php3)OFr!F)DL55;4%E(H2a{E@miVLb5l_@jg6Jp)Q}1DyiCXu8=4WFp|Iuf97M8-ZA!qgBHu53G4{5FjS{BsY+^X~h z4TC3V`32^m4B~1NmUnS3tP2YJ`}*SKvgfs*aYVNp#m6V;Xz6IpXu|5NsiUK%bwegs zoFZP8nJG(1w6^%&&5ed#Qkk9rB6zE}>CLjUvmsh2K#5*XRyKpkledo_iW-0x_xJ64 zT7KTo;k^NcSTLm=xJg4H*(rAvMY{72sSjs7GyYv!q&wfIrv*YKN2c-FIXUfj=Ia6a zL3m3?(Y1GWLaLauKpSMu&|6Xid=5b>uyiCRCj(xW9hRMw1Dymc(opBeP)MLep^75mT6R3$B^!Q53$}ll8>zp=;>YR59>?IL}73a+_$z&4> z&DC6jEEe!+Gwyze*f9u{9!Pk?#>$F4Z@!cK842;agc!LY#y7*aJd`J@dsJ2j-RCto zY!h8QJu#_sR$ONNo> zo+x=jz6?NfIOKe<=~oN2%X>OIbD+d79Te87ab!SH!M(aMnhQ4|5E^MJR6CDQ6h@`g zcvlk>CMb2xc~CJ1G)ysiHVAEWyVsEAl7*^arG+r={omcY3hs|XG0`)7MI$p6a+sL% zn|Lt1L>|AKW(eb*dgd{i?3PzM7K&8glzNqXvLj+<72RN)MOAt&z8yxw<=<~|3!#uA zoRp9t2!WD-;jL@jf;?f9(kUo%Zd^wy>IIt3Z%V`^B(RdAM}~*Lot@x6R>*V=1~d_F zpCaAr;r@OWE-rk%W|#49%h=j=EAtW1@3& zQbjzuRW!m=NeJL!?w!`?m|z~yZY06UMFiR9T-=onz6tW(DX~s34h|FCk45cwWE=&O zNaqj;$YZCWrCqOIVQ?`)GyxuU`rcDjbrf#sG&YEKLPDU3DP76=pIwhHnkb9}6R}J; zdNqntK}Oa%q`zYnuh-@qsRqZCtH^u$p*(I5@YOXc|JCDzLEH1n{bH&_=XtUDUhj!m zx3?(uEo3*Y(cq7fJ$3#)v#>sdN=nqXC=&p5om7O~%xGrypua23WH!{~m-rt|Lpcgj zrZQ3n>0d1G>L~ea0b)muPD*n@wvK%K{{}OXgzexafcQR0mj>Y2CZqYohYx#udoo#Y z6{Fw@KzJkFLW83$&@N|$`(Y$oe)nrb{xPcp`lgW+hP6R?$T=5>!9S;EH3ALU_8zA8 z)0X;^zrUU82C4qTwqZFV{jN{{u|^_shWT)elS?G_@4RFOogAhiXMAX+z_1in$eFh= z27=5x4%r)_gdxhHp#Ef3BlS~?=L(?&Tw&O-$w)|Y$1K(z1$g>1rIY`QM%-)t4n5Z8 z)xRCpUsZO?$jHbLwSKZ3E>bbH2r;V6+GS?IaR3u>4N2_?1mNO9VPVN4Uc&wc{aB=3 zf|*9q6J3RqQg%srVhAcEWL$)IHA6sFb4twEBkuDrqcVdDehDTgHhc5#6f$U-e{Z>Q zNlG59Kg8{t2^4>5xolS4O!-^rH>lDXb8GY;ssagtcB{OkqQK@SyB(_D6=vyc`8`{tQsKrY(3--_pn*#Uqua9bZFN3BVUfY_k)85y2;hj3;Inst}+d-D_c4 zJ2O4)oEnMrLXJuaZWq0~>FHJiJ~LB-GX@0~pXKPHWZFpS#F58=`5J-h{XA0glLCW=Ia$7>U>pK&HoPH_IaAG^Dmne5)t1ue$$NyZvQoo_1Or z<44_O)P?S$?&kRi&J>x3&3Ak{)AHpeqeBgzcNU_r)OW66o*gK5xT2tjt&56a0(Y1C z8R>%~TD^&9kt!3RMW~$ECkqQ)@!TwGMxK3k#dOu)=xLdfkfLVmXlbA^pxkU*lzJ2p% z|9oJkTgD$MAH7OhDJgn-`pF9G1egXOAt4dfL<@8t@%yLf>3MYp4SeC@7Ot2mk8M+< z$JHhDlN1yc6tH31M}JEK39J2UP3eQV z``KjstvDi93k~&oc^0GJlp%4xvaHNXQRJh)|Hg!rcO5=)ybhO>0CnM)eDwrkhf#}i z$qcnT+j4B>+&g|j-(t-O8IyE#V;EG$srl2Qetu`<_01mR*l06JZNeZWiNNOMM7Lxe z>5YH&S^wSc>0IjH8pSuA(^FIRe-9cMXbk}ngRNtx(&qLx1*?$DU-CMv)Xzi6>0d3R z#VSHMqITA?L;8?HKRl$Tx|8tY#JVUY%IKBb#$peJ;7m!aj=RN7i6K-0v!$ltX;`2C zORHyQ()0|trUmZeNXyC10!Idj%hvYx6RSy>Z9qxJ`gIg7M={0!15|ou>=R6< zu%MtIfFXgx0lpOy38&!r`}&x9d5-~Xc=Y*OyZKUti(jl>$flbfE6daJS{381rwC2{ zC@cKP0UC2hyeuRKGIk@MsV*tX>Mwg9eHl!D^vuX%V899NdJ8p9mQjbGDuC_)$RCZ< z*q)vqe@v1VBTiTDVt^LkS=PhS~ObO!Im!f$av0+qb%O@zI}DsEDi~v!f#j56(+Z|HJa-Cf^^9PR~lMc)c}dc#Sym}guz?}B})cm1YpYFQeU!+`=*=0 zz@e#9QxIcFM~>pOmBmfX&p$xxem^0G`?2};q#&P;)}9pJPc!Dp#}U}gA6qpKhIR); z*s_e2vLz1&H#Ro@os`0Dd-fhF2$|ryG+qP^1JM(RIQsfk8yzK#nF#VnVJHSsaP#Y* zxG49~x1Oh;A09GcV;`RzA00)1`QrI+8?xw+f2K(Q-eEJJ2~AkiQ}-{^$QwV<_d*3g8oCOd`z1&rX84@QzBu8hU?Q3TSwBR37B%AmDh_gN)BdkK z@~cUP#FDtrqQ2@B-29oDsP`wrg8BgH#mP6^7+r# zE!3kJd$I4wxSd`kCN4$ORH{+A=OC*<2Z`21o3rJX_YtpGdSZZ?wz>*al$JL4EUmch zLuFxMK|iFJF+}{p;z4B4BR;-UKrYW;S@5?LZJKX4c;)uNe1!dMSA#7)6fsvJF5rw5 z74`4mfAZvs;{DjaCMLR=64K<4V=(qHn&*&u{4+YbKZ-TJq(Ik7ZT=@YcC!RPcpY>`V>#6!472yZC8GIMec&MsgM&PM0s%-)~# zOOfa4x`GatcwBS@7=S|k8Y&O*ZfbbBIyE!1SPX4e13#w>rq3AP+i*r+yLxpYwL2?XKMd|j&RDIl@%Un zhJkV*&Hi_KdQ$)bVFjtyz~ceIVqN>-DHOPW4$c5`eH#A|7yY-j5~tof=R49qiR6%d zu`=>FQ@dXjSKEyruktRtJ~J;F>)V+|FE5K}#+Yx{*6Ukavql1z2TH;btZ$9biTOBI zC45Bp&fm?|>kOid4@h*9XcND)Y_hSM^qs@08Z(ZQa6y@{t8qi@DcgC}v!q;~BpiEH zw4{ppzMZWa`ieB95P*4E6dZh4P3OQ0X34;dMV$v`+rY{~mR+VC?)eXj!|iTNH+S!} zE2>xC6&VQUPmu=b+NxceKcu2!^Sx@)v`#)p;{7bWT}Kpge^zL_&s5|9$`ScL|NPT1sn<0{eQTpAX23BZpt<+BV30Wc1CTT;jS16d6XX`;|es+e4-q++8wT_hB<+qcad76Lua zcuY5Wmnpr{ur3j)Y!s2=l*O3`9RJvWK!Xm+l4B6|cPnda2L}iJmt>$4gks`0;&i)m zAu%awZf*|LY%pjpTcDv)#y{6|p(BKgt~#bIcSK70o_4qWCxxQ7 zFK=0s7iz7Ne~srb=~#+HNsf7?`uIz!CMKJyo_zhUw{NF9=I%dX#`4TP7i4#R5Yjq9 z+kG!r8t;s@bl^*NBGF=qv&veeMo>$Tff1!wLAc1Ve$-bgsZh!MF$*QQNqy2agB$r5 z9(;5APC`Ng4XmY|`2oN!w{By*y1CV7qv=-J8vO41jJUz)wnlSbGR9bd{t%!-KpQ}b z_(2BE*71PZCc;qXjd}dZdMF-g$M5K+>;!ca4?>5_6W^2K#74V|uDMraYBRi=gr7p< z$!k<)Vr9ra67s+OD~xnGtw{sTJGBu3ciS_}Q-hM6#{3f6`=uPF5ePSJ1~ww|JVHz! zg-K1@OLxcMBoV89^qq8-61iMUok7>~MK^g2-a#8p!c3+Q%P2oB@+pOQxHxpYIN6>S zZ?LFwUbzR~LU|~iszje6!q(t^a$KnMgo~3C1~fTrjweB-XJRyKsmPP^em~IH*Ecj2 z>nQsP7gum#pq;aGb_*xBh=AL^5h!>z)?jlNdV2GM|0{2f^X1DIfQnV+%IRL{crK;U zm(Myx^_iHMXcsz<7ih6O_$uOcb(`}2PocT*))PgqHm6E+N=qGJ-wY0|cHMhqY_xlJ z0i~C>xA(=xdzm>mU(!JxBO@Ta{;tK3v1U7JvD7Q~M9ajZgcg=N?viZ1erv>7^xZi9 zxEUYyK;2fJB|bE?uR}7uh&MEBx7C!NU$Amv9RG&fqI&vtZg;Q#bu;pV@E1>g9!7X6 z>{pX>ag`3E8LQj*YQOkuN8DcCb78Tv%-PeU_O#}=84WDW!U zo8c@x8!yVKj!$mWmj9UWn6HSz1W83K6DcW;MLAlh9rM!HHaTo};wpx+Gh;0KH?;-Lg+NUU7vi+W^H zq#PWbyx6br*1h%HUKSAjiS%LQy~mK}hfF_OX*_fUz0affFZMUorgyxkyrq_Z(w2Vt z7>54#fx*~MZ}!>H|8QCzFpo|^fQ##8$^$$+PSE1Oy|n>pXrfnlyykLucb%6=Gm0uC znFZA8Rk-uIWO2yKwS9greN=cHMJ!Fq81MLuZbHWR>up7*$g6kUZ_RX6HkfV?TB>{x zMfZv*GB#Q)$0J0J*nM5xBGVm6#;-RYwr5UA^of}+GxlE8@z;Tw<1IXB`(k8b;@!d_ zw(n*x2RlJ4ZkCFPLG!_$9n1_&A2REg$3K9fMo+|SXmhf&=^(@R_wTirfQ?E=8kw7$ z2fu&^<{nB~11U69hMi$qo`=W?n0E)&r~>~JOk(!b?jbsW#(uA?uz&z35`VgD_TuMv zgH|O1>*TkS6`)@P=`km92nfMeV{}1WOGV|aa(MRM6Z91@q6WT`-n`WEzA*J5opDva=JlN(poo7-MO5tBek}s(E>Ntry$~ zM&F8wHN(XNuI2)!c(z(C13ANQZ)9i3@t$4mir)fj{#zT1e2LiGRSc|TeU?sXCEbju zJSjhn*nB5Wo+4DtYLyomX*5(4BD+Dda$dWcTl;e@ym=lgH_J}Ny(OIC_UI6ck{{}M z-Ng}$G^e%^!3FBNT1rEoN@Ho}MI3ofcmg%p4!ggXmfpoAAI(w3(bv}iC`4cXq`|`- z^>+B$L@{N`pv@lPJlb1W%BQ9P`vBA(;f;Ei2;%<*d3n`SmVkoP+o%!CkB^>43 zw*x?U$;-_>IzEn!07*?U(A%$@yrFXC7MUi;!3hV-0-D^0?Y@2-W}TxW;Y_nLDDSRG%vA9oX3)F4|BEG+b+)&!@w^m}j+FPjs|QpSlw?4`?KY#F z{n-+B9_%0J3u>pQ*U;-Fv~;9Vhp3CmzFYNZ{}ftQlv5}M z+TF|d?i;cmT6!$5dIuNhH%rU^uh@Ei>5p}|B3hCHv=)`6rKJ$QQC<#NZJ21wW8}VX z-n>QqX;cmcyPJwO@I&$U@EjD!FY6L6Fr zaNjnZZ!jT5MMb@@#-pvO1UKDvOCGJGbSb`%@ETLiTEY-vGO}@sH&<)i>GOVp#jv~xzA9< z=oAuNVda9N{^q$8PN1^RQ0l6%nyRy!8Xo`qJN0>hNGRsvNg2Oe--PPd`G{{>f++!;h`h& zl&Y%SPe-Q6bMQ=zl>4LUUH1w?vJwtMfEj2+5i7s%Mw4D> zsZon(+#=XE$en3e^QAj)zH76u@iyk!qxC)ob}la8y}@}rA}@*|n=Fr`QZ%TUeQ0bW zrp;-zd6hn$*HYfcMgZn)>r zBY&4k-Mqf2L@Y4g!TR24egerMgZ|KFTL}|t%X})tBaIVt_hhguoGC93>saD7y zA7YnN*Anqk5t+1!2vhz4pv^}{5^aeOF81nq=K!BAJgyr6w+>WU}~Ey>`75}h7M61{I6hDj?L8h zx#zkK!-=G8T0%qO*5cxB&EQOhpMix11{)R%DG9WTw7i_(RbACzG8x%Z7?J+|4Q_S0 z#~OK-vIi>|esU6P=-!rg%E~dm9Dn-QD4QSnIx^FUp<9wF>b^I6j{o;+f?h362%CMiE=+zIBsI5{~bnNx%Z}=BmfWZVQ zsB>c89|#W)?j0OlsCR!7l+LD$VBqGC#&}_+c`MW5`$?JoKH-`R%eLIBOA7r$#v5M{ zZkKyof(j?diyjhS!0h6YfeQe~vw2hf_9R`ezWdNzO&p+-WT|dN#unc8dvynQ88qTVMQ(;VQ%1hbe81XmSrVi?Xue1pTJ;j5 zw72#>hq}e+9!5+cC56@7Yk}y>&kIn+fQlmF8SmAg%^QOL!9fxCV=ItpNM?MfY~IYc zMImx?gTv=eiWHl|?-#*hU}c?$VnRtNA|_@mPc0v~ZlDICJYpum0G8mjsp)-O-0uJi zLvdCys0l?l=)Ljq_HSlde|Zeo=<(ynFa#Z@ixobX*C{o@O6Uh(WyGRqvNK*d1D^qmPGIU; zUtc%3wg!+xA*Zyg%+bMN6KWNx0>L4t3p%)0uYjqLm66ddfa%$<5Z+KQ!wHX~`b2a9 z$eVTf9~NUud_dUGz5f$mcBlS(7FIXs;#Mc zJ6*;A%^W>Fx-)jBB|VAt42j6q=`wS^n%n-gLH+Kvz7Y~nJ2Wg($K?(z z#vxpUD44pTiIbwyE_s6*V-J(Xdsf}V@NxdoQ~!BH1<*L zP@{+?LdOikeE_iG-QNpe!$E@t@b5(N0!Wb(ftFq1ZbA=j@-c{!57wLt8?R?S8iAlPo$EGO*y9;MWPax)AycQDQ89v z{1d13RmjoN)C5-}p%^Y^E5ux&Be$}nh&c*S+~@#5(*!Q_1*Ovm{o+%IGy;RxV*0;V zfnnNv_>3eGC!fdiHB60+K!^wZ4RBvzGXUI@gP#6dSsCacGi0(jnVFeEV*}J8JWneJ zXN6kC1pl|us;XKkZGl&n>M*4dM#|UMUxIo&F(RVr&q1ylHWMRbM;L{rwKd2EcR?VF z5H&Yn|E8P)#K`r-eD=Qdx^8g;-e_*={10s7wkK*rUQKB<#oNd_!_>}(V24(ZLKGZs4)*qRa&hd29hj~j3wO{HzkRl_?&E(_EK>0+ zo`_zKEs-HkP;{|rxlW5V;}*X?%^kh9Fxp3N)c+)+3wVlC6^G^Im_p|l+j|7!V;2`3 zbo9l8Gvp7c8$24a#zBwJ9fLf@rA zLQi-zw;mo+5TXMH7JVSnzCMxzqw`=mU7u4Ai%ZW4_^ff4uEZs4k;0+qJjv zd~xJSt)cPbb(LVihx+UTXOpc+1$S!kd2QG#-6*^J`w4^F;Z`9;M}f(pAi#?Sbl$-M zR>NqSEV$9RNef{mpbruTKmyddKnKD$W0BDUum|j zTEoLCDR5txcZlK_R|3TevqWuxU3o7oLPdqpn{|=u{zk-P{vUY_Vt0uu_BLvIj|Kl+ zyYu#*sYDWS)a{x&Y!NJCKSJ1#Q!u;!ebQwG0emS4FS*SlB{P(BRWJXYqyV$2q@?uf z6$Olz0j3DHEdWQsP7TX8=s;J9he)I7yD)YXDXyLrGB);6I!M(iL_=m^t{94(%oI<@I%Sm@8OaGdN-REdp9e;yRiv z8CP<0lb&;~gzaN0CHpcQ4YoV=f^IDnX-1A$BA}!TqLQ+(*dW{51zTR$Hl}~6h5oVG zzx8kLZpxFo`tMU#J%Rh6;DaT2_v8ddVloD$!wQ<0pPwM?Q4<@hp{zUvYF7}QJ))-0 z&(AmJ)FLAU?B*P7w!|FbDfVzO0W6)bcPG;Ze&?ZtzpJZj-FH9G2TCa_0-XXp)~HV) z%pa`Fra{%-T6j@-B^S&_x|JeC*W3;tVifVW2iF{{lSD2ouuEnaJkYHaB zLPBU&Z8Mik-5^5@_7BWMeBtP&PMjluI_PPF@SE3*ywb_Jx1_`Ezrf zn|*J?d^7&1Pd#9}glggeJW_BR;MM!WrhnCZn-Zkq*MKX)vz#-#uJi9QEtVFH-t9}a zhc|9eVB^77$jBHZlO_yXoARqyg$rZ%ZGJ3mZM}zm7v`qHee~|#JMav@_XHRXOv^Cr z$zTf9IyWyOBA|{@6f8V)LNIj;RbeIodznvVU@pBqn0i51026%UfbvaBs<&J20JSKbVK{ZQcki=;pU4o9R~40E zSTn%;@)fK^iHWn?*0AafLj4CWKY&u~>`Inw&H+W)broXFWAvc{VJqmhpuz){BCN)v z?{{EaR)7}P<5}eubU%t>0T*+s{r}IlfTYpXMOC=Zo2_wt= z)AejL;ubxEIg(r4QKnjEMw4e+nS#U9wR7H+O%*l)PLMHx-jxvJxrqrK!nk@#16R5)jsph3Sn3%790Dhf15*cZeQ|LggQk;+h=@D*bOpNAk=kh7 zuw?;T33h?WMlTUDT!1%jI5+qKU_r4Z7jfOCQVZ$+3>)gICu_#a<-iHj|?;G!PW#VT{BS6mYRZ3^W}bxsPlrCQY8I=7V?@ zQ??(ZD%V$+z^uc<8u!$_LihkmKiB~iqNAZ#OS@4ZX@TG8rbdIp!1dyE4+{$mjuCJk z4>E4QIudG$7rP){Y()|+PKhES4(nR+YgcQS{Tgn94U|8uE}rkI^ry z1{)aElx+G9vox==RKU>ISXA^DD0&3q?%f-uPVa!W=FPkf0!6{rx;w z*DtRlJ0=59RymK)%~94JEb@86Rs&iK6R7%)j3#Gh zg4_QOUH<`&bsP7O<5yOQQg##xAuDA|2xW$>jG|;Fk<~&(MG}&%tjNeHdnH*3*_53< zibRq5dtKena~$8}`5*u5=;*F)<+?tf^K+i>_iMdJ>grUH(b3~Izx)5EV`lv|8UJX3 zlA3)ny1VdZVwf{(!P3%FqqMIdJ|x{3!NY{l@rwBXwx96WSV)b`?3dxFka~zg@y2U;?exxm5KC=RvY*0*Bcuf*~INT;XILbm!ctdz^2;*lTO~> zd0CW2DG{R@7^+1-{l3esb^@hBF;X?~-MH zhkLx-4WjgRC`;lbv1}T8Q&>nrKxhdnWG5%5Q>RX$--druU*O00@2A7^3ko6{$D!70 zXh<(PBu(~f*O70c-M5dGFSe|G=4btv4>HdJ#2Q@$P~qh6g>|&LV=gz&pWpAsP@RiA z$r&SWchiJA=7hnXx-_npIi!vU#0c-_9pnCQ@4CA zMmaV>j_4C2)R40e4?A98c0E}RE)=49s7z8u*?#x^7apR(VE=+@Qm)dVDb%SqDn-S` z{o@EXdUW}$a?F?>M<~e9Lx4#HE6Dx{hVc`6NIw27!Ayoo!%sq*uJ7ct-ANoEr4lA) z_xua+nFp>@UY<0gHkbFke^1n&@rBp7{<_n5WnPbGf+g9mz@+%+&X==o|7k6~WHA5} zXaKj`Uf#k0FaE35;w1;>*@>`D$gotl4xhe2uwJ?zp8+?gR&#NkD*L6K#~0-*)W0Mc z@;5hYWxakaO5-;`KCSNhAnZWsX^3plESqGZak~)SdRgc#S_Y!e_)29-|BUl3<91;(<=WuDTYCD+-?l5g zd3=+bviv)jd~uVqWIGN|m6^Sm~VD1~Q&)3f6R4)1;P zcOMiEVGVChX{pI2YSB>byaG zl;>|Q-O@MO{&Cz(ef%YeJISlIxRugZp2K}B?2LWV-`^iKblS3DGrUl!d4TF*7mj@L z1Z@E=0ZPwO!oKFJs&BAI)-7x!dM6;my7-3JK*`JR7Z>FgqkG_uU?~P_9C~gyZWL%{ zC-A++lUZK=I$`*-^~6EDU}Hlg0|8;RmSQg`(tLe=A)qXCcT`tbM=sO->S+K4p!cvT z(h^t#?2bjFaI|Exrb~^lM%w{bIMz=Evpa+fL+|cLvpg)0CunVkb=DdrR zzRpX4BpR=-&Q55*_yh!~2hx}KhjBK(R5#tRS3=GPXW15X0(_k3bOL*FUd^-VK_wiR}TDC@YXpROZov)Pm z9R6$oWgN7#OG=x+&1l1#8X6L_f&euJWYmwlumy6^)8{$#2!qCiv}W#W-uC~w`#w!g zuk7q1(fPU?FsjheP_vM!!42=rSzwZ-m(C|F{LW)`eRTU|bMw!$>6J)c`TqSYZ(ZDU z$jxf!a_N0s(5V6$X+h16x4p8maEVatxo{D|Cn5E0083HQwZ_?#bNM~#lKDV^=-y$d3ceka_W&R-fS*hDHGV(BpUjDVvXX$vU ze9loRf*``f9wjG#yRVlSy!diJ*2u_6L?j1=e2?i>1%>zBS*BFJ#6u9&^OU};$V1^) z&)Wb?W@hY5*)AhyDDCb6;`2=^C0kZpQc~bFKZm%`Q2opPOKxf@CRq}aMNlx$Ks-Is zaY*FCWoAakaxbCm?DSg;Tt_!<&vY$q8J_+`ne^hoUexKuxBtGKb3`+Sz9RZ{fU_aD z+OvoVT?Q51r={<l(yZeZ65tuTp-h=^?X$k#0(hoTrsXQ8L_uY46-rTjON4-6%ru^>}W zZP;nECLgf2UnW6z<0uhR(ev=n=(YnchzRb5MvR~TucvrTA_i`)WtHI=|YSN`TyAj)847lUU z4yn1hFuqA0Iy8y)v$po{;NXuE_7JunCqsiCsV}BW-zTm*CPnnv?rZkHbf4leZBR-l z@mXw$;E5^O0K;&4)q={SJXdP>0$_c5H%&DZvdqEajPssO~87u??S3i^R zkDU7I2DIUsuk{?%)HR-%_;OL|Y3PxuZS((j&m@!Q{9$#(^#1tq!?d-*R?lW>?uV02 z5x>a1H`mEjaW#>BUj}9ZzGSvMY9q~X;ZP5{zAfQor5B^eobhz8bddj?Ao1hOs$?0S zxD);N=Qq+f#bks?^;zm2K{ewM)~Rx5w*{#P2x>O1Z>+-RaU?$i6CVo8X>ZqAc$T>^>U0B$}B|_#etF&`FA2{P2KD zpQW{&@x&3D>#k!H~hcp1uoLNE2cpAs+yV}CGllFBfJOam_lBe9As*`eet}aUw~HNjg6lS z=>l|>#d^fFQmcO6fkCCLWi4Yu7}SXu(?;CB6bU-^x^eC;|y$}Q8z@e4VA(d-5Je1|q5 z=k&NTutv3S_14#=iC%jM&E z@n<5=w^6z!^-o@m+||_d^y!$xMN!%TDJf5?p0Kv`rt*a}$Mk5%8kgF2@DBXB3)3b- zA%8^2uD`Osc=f9G85X1yyhp1FkTjt$E~570kHLzV7u*+fFJ~@9vpU^JGo=+TUm?x0 z9V20ret)?5ro6nI(l_n(Yq^CEwLL#)_S)H1(O>?1mMN8qT1zPI=Gz(?F9SNnn8L5E%%M?O6?jc@^AY6I=@ zTLB#N5GoxL7Nh&^+ufj$FQd$*3p@{Y=5HN|q>%@2o9jh6&yCeCzKXXQ7bDx54 zb598I(b)bGe$AlbEVUdLyR*1#p8d#3XU~PaxdBtRKi?-nyG)(oe*~0KMq2u7Z|`SR zY%5pb!$AH6IKcYN(FbiXk@GGqNJvV?AGLWL6r^EqFR(!rdIDQGqoJ_~gz48W8ShQG zEFTys6yxXU{Fgxy_BO z4e^6{X}+B#MVIQc@2o9BffNuI2OwTCa%Y>~((J_gPc`k4dxceZPFPgbM#VR~iXna^ z-#+3Tv`hQtZ%cvyt~BdMNE|-QB9QQ_1EoLuOFD+HAV3bN{IuoE;8`kj_MzEqOW zuk!9!Y`DZo^O9DJq96(5-kMl?cGTwccW_Urng@^HQH9_WSR$lTrT7NHR_!_-4RE6I z2evy#fD3yx>Iw1dwQIR^o{EawHVh*JA6uKf0m45FK5z_s#&lfxtWYPXHz|Z~(pSES z5)$fv?2S~4+(|$oZvT>jxCeXePt=(j?YP@A`R0pYiCMNDzqkN-3N8w55$k;=lz=(f6KCm)|9 z`yx8Jm;GFPXedlonVE+-o@Hm`61fR!BqaP4ib=~K3Kj2(B{16(5z&Oz-@@t19Q zZ0u=R*vS0+P;0%@+kfwHc{|o51kO;;0USq-B7i_$2Zz#KU7tQtn{(8xojMvvbLh}3 z=)rXu#GOZmqIDVf?v=rE0q+sORa{nvkiO3#{CIfCz2;dHZ6c>ej&+*9#dnh`|<%ba8LUfg;HLssda1#T}lf>B8MEnI-1;~SiNn3+EJP*9tJI#G< z-O@6D88GHB@QCDh9u0ol*(pXvTQ%aWX;x~w@)$<&EGv7~B)9h7I;($Eu?P2?M7_+O zdM3D4cx*oO;pm;DfX=5!3&ixQCv>9s1hj@8%pEqC5+$EFZO=KVvDb*j)__I1(YI8C zE^Eiv#z$|CHx4445SKt2WI-X@{I#1$X zXJu_2fY_3+U!`Sah!HV(a-zhe!hdjd@N>d>5LK-|Y@5r|xTM$zcYPJxk#t-CknFl6t4&%C*@A?kHbs(~Zur`1 zL&Nk?QjYCP{7-bVyJBBZzc|E0m+L5+xWm#exzn&b?Y4W?Of7A&9vJ*lR^)XexYNH8 z>d=0)p6%2JMMa;S&wd5C0!Rn?E<|5}Q9wclAKw%jiq#ky;C{Oh@5jA|mPM5F(4qVC z@4UA*(fzfl%=Q!zH7LFFPw_ixoo{CdlNBTL_4 zyAJK%+@~&g1e(`+p8wX1D%r!tRDArZeE9 z2UTC2mpvQoXC)9DT5MG$?*ZnY3f^05C6=6&gg@kC3Zkc{9~~W?=HFbJ{XfWy!sL5v z;({-5?31vunVf&OHg`ry8Tkdn7s}SZs3w07U96OeJ8R5;O8dX5>EN%%+3yGfPn?h23$E(-oyoXbHdSD&alqR>wC=-8QrG>NKco_-es`JE>$RWQn4TU# zG@=?{i~OPqVC;b4L8Pg}f?VbyLI7p|4Sz)9gKOM2%LBq?9V7^xnae+a0&dFo+6klq zbi>=cJjj}QQPoWOLD&TF;yQ{k?6Y_ct!3>sP5H>lEv_zP5x%`(IhVe_BHHdS!(55c z+K;a`ztFmm3dyprRsEOC?cYA$=v+>d2Nm{my)Fu zhBvEiYi>h;j4T6lya8_unC+&H8&aPinGbP1anl z`?#d}hU16isOs|)qTaW_-6Am&7=ZyF!&2xj`IX_7g;By!Yzkf&J}1a@7-W~QaCT~{ zbz71Oyppc@c$Q$Qh$AL0t^koDMxY@fdmE>OggZizKpxfVI=qvTYj*k_zT?8|NkZ8u`54{}StLyj;`|x%G#ZT6IuZr?_MJ?8J zOJ5l4-6uFFr+fUC{*AeJE5jq3tE}!bop#tJ>&QVlpv)U+Xn5!~J2~mGIH9#c3D@{b zQoLh|j&nnK6)$$vN^cWL$p~mLFibDtPT@H%q_~?bormA|rO$_JN?Bcdc-oa7)--?q zoJ}70NdAtmUApCZhM_=+zkf6hdxu9m_w`Up!kC`jAHVG)*=7>n&IJ{WbMB+(ZUqPx z7jNre8r!RLRKdE+s@HX=ZP|~N1r`pD(LIa5e&Hg$G|Yth6RhkN0_Bb!F`||q0PTlx zoOp+AlZYTDU8ROFCyDgnsmFMRT|IGq!TldOqRYK!+xzjxNR;Ju<1W~SA^Ia&z>bSp z+**_xfXS95O-~WGpz`Awnvi>qmOj&3A&!QOiIagOk4}N~J?SthpMn`Vqn@?D=G6De z$LC^p_(v~k1=p(Gw1NK%81Q;KME^f{fp`JW$v6YcWQzQR z4?d}NR!_L4Tg@$E)`~9g zLOcQu0hJX9nRi|rtAJ+YLCqr)ptEk1Heqg$@?nPssm~Gx+bvBWJ{8gZYGkkFz)#be zkWF%#mal+tB`v!u=u`7zdUiLLjmP1;Av)C(mPa(3y9Dnlr(U&I1XPU+uFTBdHr!J3 zEPw2XC-3bSRP)OxuCg6{c2MK2?ow}r=R2A5>i((RX9g^-O-EQ=ax>mIzOo(7u$xVD z9eMieeL_4PY3^mk?Gmn*3X)X$>7?aVcQckwpYiZm-nma^il!VaFtiUS=T;qcbXuXN zqxAg(`G|!@f-^6C=LlXfDRCJ`#1A0>Ru5<-jRYbPCIH@FlCZL}qHkb;fPZdb;j18D zfax9ro?$~*O3U5(I?~A7>elZp{@ePY*ZW$+(w_Q-?XaL0ewNTQsxK<{R))9qXI89q z@dGXMvqz7KDV@vwka2m6gv*4?ms{wsV9Jy23c>boMzHyR1 zXtVo!SRvt3zh&A9vej({v@?5kGOM&{ny6>&7#ZBJ$`MniW1l}qTW3so4nZD%%ML?U zytxT8XaRSE%L6h7dk06Ifb*4xtJw6(cG$VF2GXB>!~ zBP@?_FB1NvC|cfo%zempA9vfI!j&-BAa5|2%;j<84|zCqh#*Jo+g*-Z-^;C+?lfAe zJW6yy?R97{tZmP>|-G7)7|fqsVFItL(Xq+L@dX)L}{4rU;0q?_Y-%Y#3xQd;AMCMKKb`APh_<8TAsm4QpzZ!|H zFU=3B`>VYeYVX}H;NN{&P^v{-m$ErRNrP7P(-=XM+L+r`T1U@TcdgeyMVXndjZ267 zoQdIDN6s#x1Y0fFN(i$m;tVpPUH@wz9x%1C(opzKcb>PHx9sMrIhVZKfKSeG_61Wn z)6?-vf!!zE6B7bRWA}=l^|3LM%gc^Dc&R~Wm+NmjA*K1xJ452%J>s}Z&%lxqlmC~= zGlqJ!HIZ~mwMfv?^6bBMhNqy)O6-Q*{`=K-jT0tOJ7f#RE5gm2`Lb`BJ!{TxyBXzs zbX(=-HJ4oR?v}25FHYT8Sif`cw);raHmAydrt4ySgd^MBxcU5Bwf}gnb8$UEi)3PK z)hgrn!dqlmmx))9_U`CyCPV(}6lK}{)sOua#{w0MuAkXXzdz)@@ZOQQ2`7FUlHoUG z>Q8l+_g*`yW2cZsZhFc>>_{KAtK;svf9=$JXC!(fR~tmaxQlFIUhJ0+XRQmbTGnK> ze_WRR*fSACb^c^o-wmm##lN>*OX%j0X=R67ri%Jq*aq2Z4vFW^C)7{KM0Z)tsYq?I z|H|-Lza)0U?*dW&f%ts%JH%-c{~iI}6z}l(51cJ0)@<9F{E%dg+EhYH3e6qD94E%E zjnq)>4_Sr+0NoGWgQ0|a`)g9{cNKiHDUujvSg#1NJ>JGnYC*^)93vCJqeaaa(xS$Fv5GNS5RXOo_^uF6KY&2 zK~N_Wd=OS~^ypFHNH!)W)p%MeDnvgnohvPdf-%=v5Tho}%HfOU_J=%9J}5803BIwt zVgqTba7*Jz#0%}V(j*h)@d(H#Q104Q1beBGc&(^ra@!*|$(;nO@5?qeHcn1w=Jj62 zll_Cf{G*~+ODP|C>?VtMq&DA$6WiX zGs}gJYf;Zz*8*&hMfcR!9{==drunFl&<{v(h!L9b8Sn*u5Pf}K#PZt*e-KXknOzW? z5qw|9?ND?h)jIujDm@d!i&GRc66)y?bz9C92PxPDbQ zHPQG86O>g|QEx`pk7`AU@dyfD!S}-A>fQqT^mzcuD{5gJUMrS>E`+J}uo4xAo?3d`2(kM;)#fL$f9XKO5QWFs zmT?!mONFUYTMcJ!9e0$Xp-|OT2p#J%35YU%CA@JG=SX?SF=^gv6Yl6Yo<~%KGP1K% zjh;^bUVbJG0QLBdUoRn7n>$olSlHd!`Ly<8oRqU~^|#jT5G(>)aINf@+wX+v6QT-N z{&w+#%xv9_^TpTha#DJDco3cgB89I!BO}B5bF5mtIFl+WWNos*b>*AjhHg z4=t26Xbqc*l{rNkC>Y~lICb-#r=2`U6a_m&-vP7JO9Wng=$B8K zdAM#SFfp4Y%_J*T+r+?bo%7;4OxgNdS(}+v{K}asS~{<;zjPCTFFB{7H#NKX z_|BhcayPlIPILmF3=#bOLMdNKtkHnM|3|T@Wxc-U%(QQ%Q1joNKOXZ&sK>C<--&sG zBVzq9C#5g9nlC4!J25E-MkeA;qJXuT(vC+iMO}rCENw>N7fZ&AljHPhx5?gK%*ei{ z*R6E)`~90nBtAotqLNYu#>QVj?C-okIyo5`5kXGCxqx;+kg2h!ho~i;dR9@X6-pMY zx;|V|(t3MZL?pYM4((ux%{WY$f>QL-?HwF4GcwTXg)-QV z=|qqhl<0($7Kq%{AtX`++HRgSs0cBvdj;_nUJ#ix37II1P&52L?dsWqFP=4P+tr?2 z)=SAE-|8K&@3!wcNF})XP4V5!IjzW`KQ~U5Yw37UC3Pk0rDJHof+wsT$!%#}_F0BO zqwvY;3Pk+*<9=J1{u;%#CZC6-&q*wNNLABCU#OhS@GazVy*qIo8I+x!`ZAjH%M}0! zF#hZ!^w5y?=NH}eJflK!AYJz&QB5Mh?AF|n8TCU}%1K?M@Waf+qbaW8@^tUdLWMgH zlYoXJvGj?F>B9*N6rrq4Rs{-;HivDy$qq0DT`2cF!Xx-vaGBhIXB)lId(i}OQVIqB zyLMDhtFm=0?Cr5#*j>I%PJlMb+r67ZEeyXv;a++W?*o!eDD5!&sGnHt)6@IS^{&kj z5hhI{!bCw(r6`sE$nP!m?2Xxvkw1fMBmC=}#Tzj!uiA<~q@|}T7E!eM68p8;4`6X> zYVI|Tg8{gCn*u?8=Z%b@e~yTV@T;g$;IqnId0#+o$tG$?%Il~wb?;4mYH9O z{sP5|$X$qwa1vaECxYN(X^c?d3Pw>WMvO4CtcJA9eXd{4>BHFQ=vf1U0tCx})dyXX zWcufw5}lQuin+g8_~Gp2t$Ru@oManE)@xW@qFsxw961KCKL*GDvCvpUk7;8+t){`P_}d5VY1lHvmbDa%yTX7DswIT{@rE2Rn*C^qKn5z zgrDEeI$(7@otl%lzm@YG@+0N}YMOgcg*UvmA$6emY&~qo`*}3inLUf-v8@_qSpHbv zQ>Fbn1cHR%hXDP4FS8mWMz14<*SCh%oIXmdLG-iX0GM{8Ck(Y9#P&#iCRMn0?V5>6 z^i`331RJ6dJl2t$c-Z3V)xoCd^>ONh|F%}QP{b@_aL@hfZ`Y(CYLYm*#F2GuFRh9$ zepCGo3CF&it!^jtU;gWOcedP{v}oA({i8l3!-aRQZc3+`2e+Eo50K} zAuEd%x0?Xna}rB={z*&O2!PS)+1W9OuDqh6a%=NeoP?O9Pv$`Jc_-|=w zmeo7+hVw_LW1w363GeI^luuQ8!;jzk(}Xw@C;}SCZ+dzn_6}Q3vc`Q|=}^T$P3eQ? zH-0dLZ47PA)OflLH!idtO?@66{jSZ$?mt~=@cWTox2aA)Zm~>(&lgtQ?kslIK@|!K zIVz@v82$0->4%oay1Kgwh%!N)<~q|!MZgy@v$LB))5*Ya%xO@LV2nk8$O(`EC^7eP za180}hGcx{$qXPE_*~#O0>nv-3Z@uZ1?vbYge+wL;*~`dGdRyx+5DJ@o@4BoVo^Us8bwX}Mle*&U1B1| zCbCtpdWCWC{u-Ze`z!Crj_vYY{ge1$)s70iB?4!_r61ed3|k9>?%CUO zqf_efqNkj>O`u_BO8vEj%=@7Zq2rnD(`9MhL-ZIl3JAV#wddyz zaya-l>A@(2vw}$!*R#$_yBXA4b|D8aiuC;EP69DP8j}rtIj;`AJC3zDbgyT=Z?(1h z&9;Q7fv5Q&{sqY+w(yjS%D&?_^An|rWak6PuT#!u>H3Jqf=2)hE)I#-9Q4ska|Z|t zIgeGsP&Tsfe3h2=vAetQvdtbY6Y2lxd)oahuN~Z+?(>$Zq@`}Y&0B2zltJaYNnS+| zCB(kW*!$^8_ZbL;F?I~Zb@x6FO!on2L`q8PMsiqG^cosA^%NIq65&lDU@f7Ap2Ue8^QO);TA)C%oxA}FRD*SY_ zd{>}swv}tU!TJ)V4pL@2dR8$PvMr<^0>go@;$!&dRwqtXe4V)u=M-Mk*UZdf=dPSw z*iG!_gmzVoOoDvh8-iXxAe)gynsrr%)Z*b?EDR%&Mv~PZ-em*w|4V?2B&!`tPMs*) ze&_o2#j)naFYMRxJ_rQW%8RQxVg!Pe(Z+7V)5wGO2}B8#+a=LV+Pj|2mTy?RrGLb` zi1ikEkXtO=K+I0Y3QfKVO|?(e`_p@>MOP|FFB{!(uV^?Ezezsu`q|}`pP|GzM@cqv zK|NfXVsY6`WQJg2K|**+O6etAum8f$F|s)dIWVz9nzpvJ&d|1Y^hP_DdclSmv}t%Ng8fF z5EV>I_(;GMvQ;UnYgY|wzIGgb%$^~A^X15r2uGZpd|sj^rWP$sO+&D7I;GvZyKv!h z<6*Ym3;7hulQ!cifRh>e3_)==B=Fy|6QT!cE zj}&cbCLhdT!YaBH2=+Vo5tApd4gjZ~xV0Nwg4HVZ{PJP zRXbwaFxl7CU^Q9h#QSAY_wPrQl})cS)U%!2a~$e^012f<#GD7%Isb{Hk}5^O^8#OU zcXq}`Mne!ZD{cjk3O|2Qq8fry(K=3biMci#R1WOrJ_4bYxPu{ZXykH(a=$~sexnE< z_}(pvHnm52Nf+Q;b#idfa2mRabO8u{ot)+o-8A(|MJw|>u_Vb%hNnxAN%DkzOfyod z+J}<6R-ErArGbPLI$us?#I`=(huQQ0s1GtdE?gPVJ6%e+X?RjwwIYp-gja>?L-l1A z)v~>%XRWPiG&BMV@SypWn(z?x4aC0$;$X!rW_WBd02L%+&ObUS@5Z8a7&l0vc>n^> zpJUjPI>Ms>HbG5r1tvqtXOP@#0QC>5Vk!c#I1X$HAfAB5pLg0_r-rNr>}24U3bFr# zbHrw4gB>8)`@9TQWTW`UKwi}Uux*Hmy)7@l4NMETU7a)W7mz}g=BL>a*$5xx*kN24 ztXJRW>Bw{q3{>duZ7SZ;7wAgS(2`rXWRbvC1%pbWfLIGa35dx+O$-n2luaD?0C;Xm z73}RZfTSSz1q=!5qHPJFVlllJiimwO`QT3;SHkZAItA!K>#j3Ex{x%$^iUaH$&mL} zg)=$q{Rpi30L_Kj986(${+2rQ1DB$N6SnMiE?QcCL*OfLd&Fo?N!5v;DzAqC`y(=Z z;!oYZOI_b3mHol__ds7rbkiZ|p>W~y_aYPGb4$yvojd1-D!rl1BET23bHCh|p`m#9 zeZ+CEPyp#Bt4>R3uwk$RRuC#0H`W>VbIC`vF|nv=+~ttwbIi>3M^_2l6Jz||EU32= z*A(k9+b37ox^Y2v;x3`KlBs;69Td$(1m74Kp+Nh>#}GIlviWxFr-b`YZR^72w_xzcb_!sbGcmX(kTr#8~hVOxO_oCna%ZXlym zzr+5IkYk(0VEGL&vncUk6(-_KKVlw^5?w+Sw>)q@5Mblb6ubUCI5q(&K_@4Nf)d{XABCv+J9Eav-JOB}83`U{6y_M? z6=BGY3t*aW8!G%4aV)~;%co{$s0pB=A)~RFb{^%uX3%ECVy>>X4 z559Iiv%54Gqqni9p*%o8>}8@{@vjF}$}$Y+F1fz7VB)o$J@^MH-e#-Kt%(~9)G8JV zB2FSL94&+S?sMv43~GAZD(1y;M>9%G7aWU`vI3p7i%XKE_ot5^rI6KjN4==Z`t)ha zjn{d%|NerqtQi_LWEcXWBM_q;02(=$^kXMN%4yreWK&f2xQpAaGni-73$rKmNGPTC z=Wkxb^haVI1vW0C)Diq9fYjZ)b)B^Ken_an#XzJpiZa~OEF|s?Mjss1Jv5q=C74Z5 zFCj6paerT8HPeKa$c{P-Q6vbQSpQiK6)1(@8<+7gXgA=3+%g)k%EjR zSJx$!3WIqQma}ai{PNL+<_q%$>ZR+uM5OwKJiMRBqlm#c({1#xDE{o=Eg3aKw;9W2jFzo@DUb z_(X2|sr-msFvWr$uU7OiTrD3T0`w3866FwRK*50*3bQFxX3EOS72{TO;~H9F`nxz!{FjV>zur+hM@> zvw+A1OwQ2lMdH3@d*;h?0G7d+I8UhvsYQ@m3zuRuF7KgAtlR$`Xp^=ASQA zth|mLt;wk&R;duY@-w*E3xjnQq&Uerti#atAl&lGGnhc8cpvPoUszo1xDZ200Aph# z`b6u5{JzJ*!ClhSh>))v{~yVTR`(d}Hx%1O6%$;G!EnK<*kOAN9dFX9K$af%yI30k zkjY)z0VY}5p`WO!cYvwtEn0>czLb&SdCaX}e{ZwbM`>C!pIKXaC8_e*T|n{F*|YMB zbYzP8g*zD8*kIy6S7J7ZeFDr}rwb7dAR^w!wyA}o_pg_fj`8Yg>g=qqM~~Oo*0!5K z>5JzZ&i6C(@89j*qMDiZnra_sPL2O2HCPTgk{L*LQTq6=&JJ4_3D-!1ji1NWxjr>W^9 z6AB2lHAlsuZ)oT~^QEo!sjK9x{$_rW!~ONoe#~;y?3kW%{N3B%U0qWb?)3FBejLsh zDK67UKf=~t*|&IM^4KxKlf2>0vC2ZBJU5nx|u_+hUu1d4BfUE#*-;3;}3FxlYu7VpT!O+?F*qK#83I^%vUWJ3EA# zPuoO9N2|{>{(aSs9^VEdNYic*zq11H@P#546eW<>W4p$wydS9~yLVgK*|8!>O6+3( zrAoJ=yu{&eYUwNdr)-ff|F$r{^rvdokGSW#nLN%aDSE6np76gDvCgO_oDv97q9%aQ z0@sS|5HjpDeH8zB2vUwyfJh5gJqorUF8N7x^vuY}9yYej%A*2Pj-f>THfn1C&uy3q z-PdPYL>_$v7mS7rQNJdprkM3M^XCew&(o(*Rf3qNneELMaa01aJyyR@k@HYB%SP=A z0^{hInR~!`B_$0#%K|8P5iBk|J%*qwMfHK=GqOT zKW4{VAQ+c>E&wJ%3PWE_%}{IzRuZ<{b`58?9Pa{%!ifM2>(SIi^?>{L;}P`yUwJ%; zTZDqBeQZ+fK{;vyML!BerI;0c`h~mXwehyBS=>2E{P0 z6sHhc74#xK>0|$qYqLymkW8a`?Pq-UAZ{gw_U5CBN9+dr^*iee^|W>)-4eU^{Szhz za8iN+gGm(c9fL67_#M1MK@)VQEJ~%~vwCFU(UR1iB!`XeMw~Lx4R}6fnH$6se41O} z@L^Iyl;%IR;m7~C;N52fUR5Tf>NzqGWZrEmZWJ^ji5cZJhOFMl_%ArBkYdGqB3f~b zIMQJZX7QUdo0U1|@>ID(S-$Hznl0jhovl>iJTzMLM=dRe<1buLCAa^IRj}D#yCyn7 zIXg3hwOoPSALdS=m~kIJ0;!^=9=Rq3D-WvgSNk5|I1x54B`5%XfnEw0CZG`0O*jxL zP#$0^Cghrkt-$8nMn1j9!Pk|d2#1^j{%s5fB0f8_bJc$i z79JP0FnVUi*gwc4bVtwp&&Z(0)%PD;W}2-~jqc)*$0$kkc^C*tAXcLYXh^|iLRs0_ ztq=!FBcmRGwHlFLYx6A^-{_q^`@3iFs}!IAr_xkAc`hY2wViD*t1?1L$}sn|vT_SC z?FqLYOihLJzmk=kD2AZBJ@czO6LZZbrvPA}y<=ZRbdydY_6<+`o!&nP?C zfc=y)@=M|ykn8%h&uc@P=R=7^P>p&)cQwTsbBCX;IinqCP6P)AM#Bvh8QFtIZX0om z3!EfUkC6*iBJH*U9W%&n);)Wan2C8(XiZQZ_}OL}WkBk!Jv6D{$Tc+~KDh}oF~1LojSdv2pqLFu5h!{=Qj;L_jSSw`aG zE`$Vv56R53FaPJ-DUJ!P6ktR>ds&3E6hqtx`-f`v?Kp`Y96DLTUq`Q z1Dz_bAg4b1^|ppars^Jq9!|%aM&sr{u{>Zp@G~fY1aC&(ZRV*m7leV-gnI!25Xq3d z$M^qz@czAf$BwCVdp-+P97Cs!)j!DjE$;knVW~m%4cO`cfMbjmBLOLz=aB3f8~c57a{JALhX4W2nWoRC*N8rvQ|nX# z7-OocS_eTrzS_Xt96s2AOe2vEYGChs_4%cxr4Ju=Krq?V<4QYFrX+38zteq{7S9$n zxd;3K#XAB7+QQEwrh#t6!(UNPVSWD-`OW^WYz7}L{$GmDIb!uEtxs}XU+ur0vB{TH zLq?D?3&`p4i%y!YV{L!ui~Ji@U{gQ5u~`xOAcXLl$HM**BER}z|L?Cj4RO&9M|=Y5 z@dxcLXA$;i9B(t&UD5o!3L(Z82n){vgkI_lo0_sUiOVy74gCgc2<_*hRSHY!Sf%*+ zsRkT~sIy@evJ!z1Y~iE_8nBTm(Cypk$vH@6J3BJtR&H*Z7!%Z*9M{^>)!EnF>5E9w zZ5HRo_ubfb%Ja`%hG7Q37LWMzucyz1=oaQpc1OfIa4!;LrvPi^6Dy!qu1lExc|{_I zi4_L}*5i?*N6VlUc0MtHg9)m2IZOqQtA{@`7rim^{3y0>U-T>o%kRBV%S^b2;vT<- z@rkXe4_cxSK)zGw8IPs^*7Ac-hiDKg`$!1n=09{Z@tYLl7#H?XE}5` znMF&;R2p{&z9ftqKVcYVp@n{2H>qJwtrWzfk;1mGH*^P_q$U9sgl{GZNf#fFp5;(X;*`n?x#f1-F# zu}S)qV<7Y`)o9daNYrB`f|>Byqxarz1%z1iH~13EOJJp2`QeJD%*Ssr24$Y6K26OR zC`LI&aW5kyFG@P-&hZkTBZO+Fp`O)8?7`W@Q$TsP7LcPkSxwnvv-8UnVm+p0*++!q zd%xMZCpg#;Vrf}M{~S~eZKyZ@Lb4%+g`*&ud6{ZQ%>RI*g9em=0>T2+Q-kRXwmt41 zb6+2lJR)aVtUH<7dr3&Q$*aeE_kW)v!t-^0YQOfrut#nbOLi zLU+ummYZK#vh_V8+vZ;TEY~*n$we)F59^g%%!E3UShsoqs80^GpRaQ!l9`_%BVHeZ zk5c08CBC!oi-vcsfMxk>cKtei;*&FB30+}(9u~iRxsHX5R!UKZv@QA=#S@0#Xhs$e zQiwB58X7))!oMw+oMqIq@SJ&H0ZY$g&UDq)b41t*F`p<2iEg8<6~v`M;qQme-vi66 zL5+hYU?c9~0dJwdLxM|Z#=GBM{>N5a0!Rm|W$o~DO9p1Xoov@4^v@oSFn&&TMfn-l zW|f8O_o=A3jhWtpn2K9#$%g}MwYW%S+@}AOCn!m(by=*uO5!?O6LI{LSY96Qtfg_I}4K^S-bNF6ZEkv|RlZy|WCIWU*HVZqLjN&vdZ`pNO6!)%xL|s?imzx%u>A zSY+hn$jHT5gYcBCub|c?$<*2!1L+~zp{yVzrrk_uH|y9mPW^L|d^|z6>&Zt?V5P{3 zE`kCHKxlcn+=k(+Hd|uXEF1RZiG{T_6!_I2KG?>?t3&1gAuWwhMhOXXA@#DbiV!ft zCJ`MkcIp#b>v_%~3!rwxZg~Sy5kO^u>g+4sc+46 z@}s^0q>-PW&+9-=`1b7^T#`$lUX{)d+*&7BhDp5i$!USj7IWHXeJL0yd7q>i?}?y0$fTL{rk1-d zCdPQrrBn1f_LeQweM#a?<11v@@rQ&@<>}y8`J+P|m;RV~SSlu~j<4^JzhiAPC?=aH zX4CT2Xu>Sj3i2v98IzRuU!GQ(hTHu8Gl1YluPxXRUM%UJ*eVar&p$SI_o1rRfhDP^ zN2gx!YO`@4EvDz9sn+Y>e0@5*q|DFoneR!C085S+hwX;f3IR{SW8#yPhM$R*L%`6D z0;^&jI|OoAjI_N8WGd_2YH8{1~_U!@WbO2C7 zlMV=@|G5nq35ca`%U1#`#M@U@46qAGMw*pUq9`{vx1?mxwRdf+&)t>jY7mW9eBsJ( z_rUWNe14Y30hV@ko+De=*}ewdy!m5#yrACj`V+=4CukJ+ezZ!{&p?H&6(PtDCg5Pk&czG<19fQE9ljx9s{V$A~-2k1JG8hZz|v)Kz?BofQXVMfBS zQbT+d7BW6Ug;Yx#F}j-z|G2rY-lAsfB?_ouJSe_8LL0AP3YLMUj>h83DuR zKy9pG;XoLB?ZzlkSc~Y?6umotzS_)JEWglwV%e#WK^>l+o{$XL+S*>cnDp*k$L}LQ zCN+v^d4ne61z7Gh>=%Lh^Ta}4gP)vu_ z2tCwsSUyM)>r*&ASRvA~vYhAbP3P`Mc-EiN{=fw))%!A_ zbwLNTa>`>3@N$8{y)mS&Qb@HV(~-8a+bv2)<4l&xdJ{?=wWIu84Ma@)EDdf`p0f=X zCwZ_doK!*}0YpdsN?df}Sg}!nYK~r+`HjN|e0%!wg{7-V1eXlm!6&u%M!@yjlXyYmvwB$ic|CR z!|vUJc8xM46k3K`{6hkMkKi&q(7bnNH9sS;fXKv5;-`*pbeMe!?JeWL@b|?teu2ZG zqF3QT{5Jjkkw_AD1B5w9M%^G4fqs#YW-IJ4&~W*Xxq?iwm-|r>I)DRGQP}|t@CbND z0qyoXAPit;ta??-@OXmpRxqkmd?BooV0i(F?&xwgic15hvzOhN80STGPuwPHFamG_ zsT^J3X%8$uleJ;Zux6FHX4Tw|{?WRzhajImKM2G6*hN*9iTF(wO~C1)dJRY=ya1^x zdHF6lGU~iJz~w{tik<*UF*(@paS_m$ItF}skk~AA$g25F{lg%~0qp@$e5ZzG4l;#* z?~{0D5?$ci7w!t^mImMm_BO^vR4w`5zO@O{qPE;429#iQ;YS=eDo^sBxdaIc-;R;3 zB1D%#K^QS;SR{PsuDc(Z2<5*3jJWE`yB>m+t<&y;OiKpT88Bk5nZ0#Be@#Ad_uxRt z>35jLeCFEo@pnd6$dAM~<-|YXe#QjSx-}rCo9wm z-o4`pCAmC?yRjFv^(snAeh<9cU`5T__!y+&=7X4i{rTI~hvXiw^=#H7@B%r0h%S@S zVWcS}j?l~G4h#DDxW$?rdkRauW5M^V=uz+*^DD{9zc#+@$m}#yBK&;k8=V-2(3P{n z*9kk7DfCRCC1vlmw4{$bsUG1smT0;v{;>&JFl;ESI;NnF(G_?-CXi>Lan+VB5Z^=Z zL%V1&&g^0C z77i9{oR$)nP7an9U%4zJZI|(noq4sGVubiVOXD_=a>~6gu)jUSw0*eG={-tTF6nhI zF-K!Zf9*r_Gv#|)8CdUSvkOpTLN#(ka}Yr#I_Yc!miK>%l0urH^mDx9;%sm1c+X7h zkCA2o1!a<)MIZl-qBN3dhoLx{ve*Kivf|ua@&KHD)$gP@d2D%4?=e#o#--%t4{3~| z6rd(WcpXKe2b(fQy?v!l_XzjOl}Jr$?x#n6DgoDUBNwMOCrhj*f>Ye6#-EM%2li7J zXf==`#@(IkqkJ|k3NE=UEBHQ<(O|mEDzSd2K}~I&otxX;{A%Zv9v4rCA(j&+w7VDD zv7fZ4nke`n`ySq9!>71t#jNh0I$hP=_ZV08$9;9=RD49*HGO;@bfOfi#uoGN(fq3M ze%batNyYB^Tj@J4<)OGDwjJ#~1(hlDAxeU8hDRU1x$%AeY8+zEJ7*!UGwb>x!$pQD zD*M^vZXgfFaf`ALPmGWMq2|w-^pQ>dWYYQI3PAU&TKnW)6!-UA8-0l~;(qq7aiDo* zxWB1oSY>l|W^r?Qqy5}z`;YVfJAq@5>Z1+?U3b>Bt(AR|D>Kd~@djSh5x!2xbHi2H zZUQIHTcb?R4trltxI6!j!krut0ud)1ude}a+p_^uS3Yff_h(nOIq$Csvv?S9CJ7cU zuur&Nt6Z*gIgbdps&K|!Zja#}WI5E))B1R%sA|?g)$cV`xJc&bssBActU>Mx@Wak860s-_Qc6N1 zE2gL$a%d>^U78H#??WHc38&bZ*xV_N(eBKbiJHScB90}#u6R8Y_c6|TZ^q4m$dBs} zY2GIuA20B2DTRr=6!1Dek=ScEOP1qWj>bK%K6Is;-2K&2of4LaiMUMSv0Kh=%Cfs9 z_krW&O^%_12^xxbM+Ei5qKV(XXZh_`p6JQ!b)z);n04cs&-$FHu71v$7fIo~hRD3@ z^~b|{At-;4T3+_Zv%|+e1l3muyTNcIXPBHSa{Ps?%-XV#2@l8l8+@@MUNNb?J!%fk z*svIN8bSgzhl}1fl|^Q;Bu^ykgc@~BGt?QMuh7V4=K+(QyXR#6 ze8UXYHD8g!K>|Nz=^+5^v%BbAb}k0eBJa-fPe>!1!+i~0J%tan7PS-ncA1k)QB6!F zR6b|Km?(E53M60tS-8BuF1#>fYQ6LA zb?ctT{h=7OH8KAkXY+OX^^4xFgooqSaWjf*K4YI%b5-$f&8EHm;4PkeFRxABlihY< zCIee@X6kZ-c??_nVZ7+KEDRJ&?c|26wGxH6l*@#tZ~b7!(CB1nE=;LSzWkJvJ(M$~ zQ=Y(1{D$STV5pSJ`;3^3q=2OGx_p`j(X7F0k1F)C?YL79KHl*?@~Sr-!@qcnGkl~| zHc$AdyFc)njs<=g4KA}D^iLe*`7AdbapOSq^4V0DPm=KHPZ8t6@d87(qb}q@uP-^7 zB@4L}zU=HHnl4EAx^NHiVQ<5%efn~&zw$KAE;hlgmaj@zQTvtku2bl_UOvK?4l|a< znLvi8%COF1i?0YLne7oq>Jx>Pezms_3f>JY;Yt|(o~%ifWh|^EB{RA@+gAaZFZDK1 zi>}12?5=c4W=-bjZ2C_@4dLPP^u#+?zmxE;vDfHT&R=WcyFEq0KUbGJ`SIQJVARHh zf_6!b{lU#-TMD;=yh`o#*OG}YE^gWldr~c#<1Ut8PnUbErmy&#yuQgtr=ss7jV(ol z%YrQ!h31PDygKro>&5A7qS9Z`ZLCy`VZ}jb! z+!?JVBt53vM}iq*E984AC%A0*DyRK{$%=<`QGHnHKn*urr|~(t{v{$CCRAi@zPa$%ex=E z+AjJv{8Dpz>_BaEgJQCL^EZr%&-a1d1%QO+lKgc$=%+(UJ{ZS6q)4n`4Cl<7 zu^CpWs;V;|?l?L)nUYn|G<=$w3K&n|FHme-rS1(fc)*;%nEj>x#iF8KLx_@%iQl3M z-X5_Df3En;(~odJ&zB*48q zJ)z?@`7IPGz2>c!yl<6Orz3VaZ_(Y#o@<>>q9j_yXK2QfM-5n(xwwQ*%bpc_CatgsoZd(l_8Ek#316ZRdO`J)ZT)Plt&Ws0940(m!*_MhEd8o=n(6 z2?hYA1dyQXKU-d21|S9i3`Cm9iGhhJDG9zLf7V9X@7?RrRv_T{9AaL226RXwrA&(t3fZx+&Y}(R^MB)V&dSD(l)JN>Q)+z=xZ-8PC>&DX%?)i8f65oQRwB@2$fuOlOu2AC(U>Vkk10)yKft36Iy-@7w% z`K&~-s*;T)(P%~{k9J=GIMIu~eCF$K_&1VS|^SiiD zy1eLED*x^FYgeHO?cn{{5 zOXq@8vX5I&Gw$^KjI+jMTKkPj&hzq8m=&KRS0|I+Fe`u7#3b4c`!(?f+Qrn&Q?;iM=FGOZjk)!7^0)i zP{%A_d4Y1JHQim1N=C&~IMT!~O`0mDjRU73-6D8ag|IapxYoEwoU5~{abB0TnUY2= zC7i-*&)Z5WaOS&FIyonMvl|S(K7P>j+kj+ydF8pbrolFFT<^5Aiu1QQpM9wxNV zH5Uy$ZZxKHhP;lCoa{%*M-t=ntdG9-5X!uLv~gxUFpalifAFWgxR}Gn38>QuP;LnX zgaW|oqC6KuW&nSbY~6P=*a%u>K&Vn6!3+{B^zGlF;pW~4plwrA)8quSZ(M*OGv!K- zMNXB+;j#0M^{m5jD~2$3jBi}-Gl8FPFUdAjC`!PoI#Xz~!wZAgKcWttN>PeEzSR3w zJy$MO)w1us&5r$T#9E(KUq8KW`^iovglq=VZye|h-IdReZd9qus$r$aVN5?U z7;3(h^{osqKt?rp!Kg-&)8*qPd8nFm_c#OAKWcaQt1vp7n1pt=DV1*w{0^T5M#TwE zV0vk3%iDeudSZWntLu(@hK%$W13bLz1Afy(`T^A}Vs$XCu0NW419P~e)A!d>dO?nV z_IG3Y;im^40qxKZ1?QGE2nygvWc%y3(tVilgR+wxC>4W@k_oQ}BcnOcr-57tL=dR% z0Vx+6c4`!n3&V5F*y0#h$drujW*3S36>-|RBs8TyaN)S~9BD#Q>GDfaXP-@$zz z1oD;+hyEiJqTD{IePXV2c^+E~tl_UJD-l8omo zPnU)Z0-h(*WT=9rAGwDyuNbmKBpkz(4rVuYN6}$1((pdq@^FiJNg+XcD^>clGp_o= zBtgyb+s3zauiy9PF|zVtL5ua>J37zeJRCfoai6v~2BEGI9)m6Rp@(mvW8w zLFHO3w%NsFBPzO2I*V~SOGKjtUjtY6Y*Yj#lNeu&9lOi;lc}T%Dh?`PX9-I?34Sg) zmx%_^B1;Z9+i0?wYHO;f-Sy^P+L^F>>F_2k_^|};*^?8SjVa8B!XA33Gc@RA80Tsx z8pA!7SEY>+XjW^#we~*crZs=5=c3_Hil}jqYG?UGJ+$rRX-<+=l1qM^j@N%u89|33 z^ksj)%%D!pLEzI8Dr6JC?z>?I62H9)Y{OrBK+)K5%F(H1jB=T*fK%Hr&-sWfP`K20# z;0?X3L4A>TnOfX!s<-D#S+sTKV&kS6nMzjrG?-&R8N>a#WgTk91CxFAz~spNeeOw& zVvtKyu?KC7_SY;7$xmz-&(3QRKOA~$M{c!E~;>}!5ur-Uw?Qp!Po0!{oUi!L7 z%=yw=0hjtyN$y!mgI(lx%5Fh=)YLc>Q_jAWUDNiDV8 z#_j}30ZONRh$k;eT!JFQgOrBwE05YWNB%UgS{k|VsA+n$1Fn4WVbUgpDg(2kA%NK3Lo4E$9P=NpUmayzR^b_raX9u3?Me2$$ zj%dHWH_gA=wpL$}$scDGj&}IXqKfb7R5E=1W4y7h9ZQRl_NUhq{8`356_JAZbl_WU z6fNfYX4t;V_w!xjgUFVL?u|hZfNN1m-&$%D46Wq zc60lMn3Yw#z!qaZ{V6M2bvnTbF6Aa{3YkqE4Gwm|3cg83#s|!IXq}P~W8>j%!AKLl zRW?!f#mqQ+l7q%bUwKnT+_ETJFMqQnLd92AQadRh4@V&^B$PxU+s8-&k>~J8$Dan+ z-$Ot{N@uzHP#?H~5S)nL07K&PWR2anUrFQ~0Ce>D7|@3gdPxk4gaIKSHL)o_ov|Dr zrhfV9C|4drnW3?ZsVS=B>5s@rn;WQ(wg{NbQmeZ-1TMk^1 zd4j$~6%3jH9zI#h&LF7opJ4a#Mqg&q8_%YVAJ}9hmw{Ieb#|GOzo}}g>1t-F?>>Iu zS0I+zv%A0R;qTY81oEmN3=<@FA83StL0((R`urKlha=|dT!G0>4Czmbl-Y(jysjef zv5bCaad>cdoe+)`1dQusZ)GwgK3V*VqmCHP)+i;hi{VyAM*s^1wC*zd%|Ssz#CDR` zHuJ(+2E6ouq9}Z_d>etpF^XUQ0(rSwAl89p79fEjxA>6A2L_E_w2-~)VM~YJXK(%b zu)%k(M6FkNm91%5L&N0G9oZl;u_%L)5l#vU_(O&%xo7-SS^zMCd6fdT^;9icC7;I) zPO{%`>E#pA(uFZH!{QWC^*eFVIG-zU}eNFxMvo-Rr>(`X64YiN< z_V)B#-_n#QvSdi#5p!|ja3K%7g(=`B*78t1iT~u73-B}! zN>QObf(|$=_9B4J1gOYta$>`<5)fOqJrN7HV4g^s_xWU!~^i2>mi;E`i535v;Jt!U{i&uP)CQdR}*S8Ls-p5x- z(bLiz2h|!Dbec>;7ghqo*o02=eR0uxckJhvPAPRd zYuw6OSi_)t>W(Wf=dnfGFHvK(OsTR>j}Mzub$K*vz5R& zyd>C2E5Q^COJgyH+)L)6S-FZD&{&$24xDi*{#=KcNE>LN9B#@vwZ1i8nRj%w)xczF zb^2IRpt|ZxUv8sR?giLu3~OHC*`5JmsiP-Omu9ql2IZ-SX

o7!HL-UNoSY0MU)a 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

gDUofqLON!;4r~`vb*(Uz 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

, 2007. +# Jannick Kuhr , 2007. +msgid "" +msgstr "" +"Project-Id-Version: de\n" +"POT-Creation-Date: 2007-11-21 19:16+0100\n" +"PO-Revision-Date: 2007-08-02 19:25+0200\n" +"Last-Translator: Jannick Kuhr \n" +"Language-Team: Deutsch \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Report-Msgid-Bugs-To: \n" +"X-Generator: KBabel 1.11.4\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#: _translatorinfo.cpp:1 +msgid "" +"_: NAME OF TRANSLATORS\n" +"Your names" +msgstr "Jannick Kuhr" + +#: _translatorinfo.cpp:3 +msgid "" +"_: EMAIL OF TRANSLATORS\n" +"Your emails" +msgstr "jakuhr-linux@gmx.de" + +#. i18n: file ./behaviour.ui line 16 +#: appearance.cpp:273 behaviour.cpp:114 rc.cpp:87 rc.cpp:172 +#, no-c-format +msgid "Form1" +msgstr "Form1" + +#. i18n: file ./appearance.ui line 32 +#: appearance.cpp:274 appearance.cpp:285 rc.cpp:175 rc.cpp:206 +#, no-c-format +msgid "Applications list" +msgstr "Anwendungsliste" + +#. i18n: file ./appearance.ui line 43 +#: appearance.cpp:275 rc.cpp:178 +#, no-c-format +msgid "Show tree e&xpanders" +msgstr "Baum-Aufkla&ppzeichen anzeigen" + +#. i18n: file ./appearance.ui line 46 +#: appearance.cpp:276 rc.cpp:181 +#, no-c-format +msgid "Alt+X" +msgstr "Alt+P" + +#. i18n: file ./appearance.ui line 57 +#: appearance.cpp:277 rc.cpp:184 +#, no-c-format +msgid "Alwa&ys collapsed categories" +msgstr "Kategorien &immer einklappen" + +#. i18n: file ./behaviour.ui line 94 +#: appearance.cpp:278 behaviour.cpp:120 rc.cpp:105 rc.cpp:187 +#, no-c-format +msgid "Alt+Y" +msgstr "Alt+I" + +#. i18n: file ./appearance.ui line 68 +#: appearance.cpp:279 rc.cpp:190 +#, no-c-format +msgid "Hei&ght:" +msgstr "&Höhe:" + +#. i18n: file ./appearance.ui line 82 +#: appearance.cpp:280 rc.cpp:193 +#, no-c-format +msgid "Button label:" +msgstr "Knopfbeschriftung:" + +#. i18n: file ./appearance.ui line 111 +#: appearance.cpp:281 rc.cpp:196 +#, no-c-format +msgid "" +"What text should be displayed in the Kicker button tooltip instead of " +"\"Tasty Menu\".\n" +"Empty means default." +msgstr "" +"Welcher Text soll im Kurztipp des Kicker-Knopfs anstelle von \"Tasty-Menü\" " +"angezeigt werden?\n" +"Kein Eintrag bedeutet Standard." + +#. i18n: file ./appearance.ui line 119 +#: appearance.cpp:283 rc.cpp:200 +#, no-c-format +msgid "Wi&dth:" +msgstr "&Breite:" + +#. i18n: file ./appearance.ui line 133 +#: appearance.cpp:284 rc.cpp:203 +#, no-c-format +msgid "Tootip title:" +msgstr "Kurztipp-Titel:" + +#. i18n: file ./appearance.ui line 160 +#: appearance.cpp:286 rc.cpp:209 +#, no-c-format +msgid "of the screen width" +msgstr "der Bildschirmbreite" + +#. i18n: file ./appearance.ui line 173 +#: appearance.cpp:287 rc.cpp:212 +#, no-c-format +msgid "Menu button" +msgstr "Menüknopf" + +#. i18n: file ./appearance.ui line 184 +#: appearance.cpp:288 rc.cpp:215 +#, no-c-format +msgid "of the screen height" +msgstr "der Bildschirmhöhe" + +#. i18n: file ./appearance.ui line 220 +#: appearance.cpp:290 rc.cpp:219 +#, no-c-format +msgid "&Icon:" +msgstr "&Symbol:" + +#. i18n: file ./appearance.ui line 223 +#: appearance.cpp:291 rc.cpp:222 +#, no-c-format +msgid "Alt+I" +msgstr "Alt+S" + +#. i18n: file ./appearance.ui line 246 +#: appearance.cpp:293 rc.cpp:226 +#, no-c-format +msgid "" +"What icon should be displayed in the kicker button instead of the KMenu " +"one.\n" +"Empty means default." +msgstr "" +"Welches Symbol soll als Kicker-Knopf anstelle des KMenu-Symbols angezeigt " +"werden?\n" +"Kein Eintrag bedeutet Standard." + +#. i18n: file ./appearance.ui line 262 +#: appearance.cpp:295 rc.cpp:230 +#, no-c-format +msgid "N&one" +msgstr "K&eins" + +#. i18n: file ./menu.ui line 308 +#: appearance.cpp:296 behaviour.cpp:117 menu.cpp:189 rc.cpp:72 rc.cpp:96 +#: rc.cpp:233 +#, no-c-format +msgid "Alt+O" +msgstr "Alt+E" + +#. i18n: file ./appearance.ui line 280 +#: appearance.cpp:297 rc.cpp:236 +#, no-c-format +msgid "Menu size" +msgstr "Menügröße" + +#. i18n: file ./appearance.ui line 291 +#: appearance.cpp:298 rc.cpp:239 +#, no-c-format +msgid "&Action icons size:" +msgstr "&Aktionssymbolgröße:" + +#. i18n: file ./appearance.ui line 305 +#: appearance.cpp:299 rc.cpp:242 +#, no-c-format +msgid "&Display applications descriptions" +msgstr "Anwendungsbeschreibungen an&zeigen" + +#. i18n: file ./appearance.ui line 308 +#: appearance.cpp:300 rc.cpp:245 +#, no-c-format +msgid "Alt+D" +msgstr "Alt+Z" + +#. i18n: file ./appearance.ui line 344 +#: appearance.cpp:302 rc.cpp:249 +#, no-c-format +msgid "&Text:" +msgstr "&Text:" + +#. i18n: file ./appearance.ui line 347 +#: appearance.cpp:303 rc.cpp:252 +#, no-c-format +msgid "Alt+T" +msgstr "Alt+T" + +#. i18n: file ./appearance.ui line 362 +#: appearance.cpp:305 rc.cpp:256 +#, no-c-format +msgid "" +"What label instead of \"Menu\" should be shown for the Kicker button.\n" +"Empty means default." +msgstr "" +"Welche Beschriftung soll anstelle von \"Menü\"für den Kicker-Knopf " +"angezeigt werden?\n" +"Kein Eintrag bedeutet Standard." + +#. i18n: file ./appearance.ui line 370 +#: appearance.cpp:307 rc.cpp:260 +#, no-c-format +msgid "&None" +msgstr "&Keine" + +#. i18n: file ./menu.ui line 280 +#: appearance.cpp:308 behaviour.cpp:144 menu.cpp:183 rc.cpp:58 rc.cpp:169 +#: rc.cpp:263 +#, no-c-format +msgid "Alt+N" +msgstr "Alt+K" + +#. i18n: file ./appearance.ui line 383 +#: appearance.cpp:309 appearance.cpp:310 rc.cpp:266 rc.cpp:269 +#, no-c-format +msgid "%" +msgstr "%" + +#. i18n: file ./appearance.ui line 417 +#: appearance.cpp:311 rc.cpp:272 +#, no-c-format +msgid "Button icon:" +msgstr "Knopfsymbol:" + +#. i18n: file ./appearance.ui line 453 +#: appearance.cpp:312 rc.cpp:275 +#, no-c-format +msgid "third column:" +msgstr "Dritte Spalte:" + +#. i18n: file ./appearance.ui line 461 +#: appearance.cpp:313 rc.cpp:278 +#, no-c-format +msgid "second column:" +msgstr "Zweite Spalte:" + +#. i18n: file ./appearance.ui line 469 +#: appearance.cpp:314 appearance.cpp:315 appearance.cpp:316 appearance.cpp:319 +#: rc.cpp:281 rc.cpp:284 rc.cpp:287 rc.cpp:296 +#, no-c-format +msgid " pixels" +msgstr " Pixel" + +#. i18n: file ./appearance.ui line 520 +#: appearance.cpp:317 rc.cpp:290 +#, no-c-format +msgid "first column:" +msgstr "Erste Spalte:" + +#. i18n: file ./appearance.ui line 538 +#: appearance.cpp:318 rc.cpp:293 +#, no-c-format +msgid "Icons si&zes:" +msgstr "S&ymbolgrößen:" + +#. i18n: file ./behaviour.ui line 32 +#: behaviour.cpp:115 rc.cpp:90 +#, no-c-format +msgid "General behaviour" +msgstr "Allgemeines Verhalten" + +#. i18n: file ./behaviour.ui line 60 +#: behaviour.cpp:116 rc.cpp:93 +#, no-c-format +msgid "&Override alt+F1 keyboard shortcut (requires kicker restart)" +msgstr "Alt + F1 Tastenkürzel &überschreiben (erfordert Kicker-Neustart)" + +#. i18n: file ./behaviour.ui line 66 +#: behaviour.cpp:118 rc.cpp:99 +#, no-c-format +msgid "" +"Pops up Tasty Menu instead of KMenu when the shortcut sequence Alt+F1 is " +"pressed" +msgstr "" +"Öffnet das Tasty-Menü anstelle des K-Menüs, wenn das Tastenkürzel Alt + " +"F1 gedrückt wird" + +#. i18n: file ./behaviour.ui line 91 +#: behaviour.cpp:119 rc.cpp:102 +#, no-c-format +msgid "Show save session functionalit&y" +msgstr "\"Sitzung speichern\"-&Funktionalität anzeigen" + +#. i18n: file ./behaviour.ui line 98 +#: behaviour.cpp:121 rc.cpp:108 +#, no-c-format +msgid "" +"Under the menu that pops up when the button with user name is pressed a new " +"item \"Save current session\" is added.\n" +"It saves the current session informations like open applications and windows " +"position. In order to use it you must set \"Restore manually saved session\" " +"in the Session Manager Kcontrol module." +msgstr "" +"Unter dem Menü, das sich öffnet, wenn der Knopf mit dem Benutzernamen " +"gedrückt wird, erscheint zusätzlich das Element \"Aktuelle Sitzung " +"speichern\".\n" +"Dieses speichert die aktuellen Sitzungsinformationen wie geöffnete " +"Programme und Fensterpositionen. Um die Informationen zu verwenden, muss in " +"der Sitzungsverwaltung im Kontrollzentrum die Option \"Manuell gespeicherte " +"Sitzung wiederherstellen\" ausgewählt werden." + +#. i18n: file ./behaviour.ui line 106 +#: behaviour.cpp:123 rc.cpp:112 +#, no-c-format +msgid "&Hide groups with only one application" +msgstr "Gruppen mit nur einer Anwendung au&sblenden" + +#. i18n: file ./behaviour.ui line 109 +#: behaviour.cpp:124 rc.cpp:115 +#, no-c-format +msgid "Alt+H" +msgstr "Alt+S" + +#. i18n: file ./behaviour.ui line 120 +#: behaviour.cpp:125 rc.cpp:118 +#, no-c-format +msgid "Show items in alpha&betical order" +msgstr "Elemente in alpha&betischer Reihenfolge anzeigen" + +#. i18n: file ./behaviour.ui line 123 +#: behaviour.cpp:126 rc.cpp:121 +#, no-c-format +msgid "Alt+B" +msgstr "Alt+B" + +#. i18n: file ./behaviour.ui line 136 +#: behaviour.cpp:127 rc.cpp:124 +#, no-c-format +msgid "Search field behaviour" +msgstr "Suchfeld-Verhalten" + +#. i18n: file ./behaviour.ui line 164 +#: behaviour.cpp:129 rc.cpp:128 +#, no-c-format +msgid "Si&mple searches" +msgstr "&Einfaches Suchen" + +#. i18n: file ./behaviour.ui line 167 +#: behaviour.cpp:130 rc.cpp:131 +#, no-c-format +msgid "Alt+M" +msgstr "Alt+E" + +#. i18n: file ./behaviour.ui line 173 +#: behaviour.cpp:131 rc.cpp:134 +#, no-c-format +msgid "Filters the applications list" +msgstr "Anwendungsliste filtern" + +#. i18n: file ./behaviour.ui line 176 +#: behaviour.cpp:132 rc.cpp:137 +#, no-c-format +msgid "" +"It displays in the first column all the applications whose name or " +"description matches with the query you entered" +msgstr "" +"In der ersten Spalte werden alle Programme angezeigt, die mit der eingebenen " +"Anfrage übereinstimmen." + +#. i18n: file ./behaviour.ui line 184 +#: behaviour.cpp:133 rc.cpp:140 +#, no-c-format +msgid "&Kerry Beagle integration" +msgstr "Integration von &Kerry Beagle" + +#. i18n: file ./behaviour.ui line 187 +#: behaviour.cpp:134 rc.cpp:143 +#, no-c-format +msgid "Alt+K" +msgstr "Alt+K" + +#. i18n: file ./behaviour.ui line 190 +#: behaviour.cpp:135 rc.cpp:146 +#, no-c-format +msgid "Perform queries with Kerry Beagle" +msgstr "Suchanfragen mit Kerry Beagle durchführen" + +#. i18n: file ./behaviour.ui line 194 +#: behaviour.cpp:136 rc.cpp:149 +#, no-c-format +msgid "" +"Perform queries with Kerry Beagle instead of using the first column.\n" +"It needs Kerry Beagle up and running." +msgstr "" +"Anfragen mit Kerry Beagle durchführen, anstatt die erste Spalte zu " +"verwenden.\n" +"Dies erfordert, dass Kerry Beagle aktiv ist." + +#. i18n: file ./behaviour.ui line 202 +#: behaviour.cpp:138 rc.cpp:153 +#, no-c-format +msgid "Stri&gi Integration" +msgstr "Integration von Stri&gi" + +#. i18n: file ./menu.ui line 322 +#: behaviour.cpp:139 menu.cpp:192 rc.cpp:81 rc.cpp:156 +#, no-c-format +msgid "Alt+G" +msgstr "Alt+G" + +#. i18n: file ./behaviour.ui line 208 +#: behaviour.cpp:140 rc.cpp:159 +#, no-c-format +msgid "Perform queries with Strigi" +msgstr "Suchanfragen mit Strigi durchführen" + +#. i18n: file ./behaviour.ui line 212 +#: behaviour.cpp:141 rc.cpp:162 +#, no-c-format +msgid "" +"Perform queries with Strigi instead of using the first column.\n" +"It needs the Strigi Daemon up and running" +msgstr "" +"Anfragen mit Strigi durchführen, anstatt die erste Spalte zu verwenden.\n" +"Dies erfordert, dass der Strigi-Daemon aktiv ist." + +#. i18n: file ./behaviour.ui line 222 +#: behaviour.cpp:143 rc.cpp:166 +#, no-c-format +msgid "&Notify recently installed applications (requires kicker restart)" +msgstr "" +"Über zuletzt installierte Programme be&nachrichtigen (erfordert " +"Kicker-Neustart)" + +#: dmctl.cpp:345 +msgid "" +"_: user: ...\n" +"%1: TTY login" +msgstr "" + +#: dmctl.cpp:351 +msgid "Unused" +msgstr "Unbenutzt" + +#: dmctl.cpp:353 +msgid "X login on remote host" +msgstr "X-Anmeldung auf entferntem Rechner" + +#: dmctl.cpp:354 +#, c-format +msgid "" +"_: ... host\n" +"X login on %1" +msgstr "" + +#: dmctl.cpp:357 +#, fuzzy +msgid "" +"_: user: session type\n" +"%1: %2" +msgstr "Benutzer: Sitzungsart" + +#: dmctl.cpp:372 +#, fuzzy +msgid "" +"_: session (location)\n" +"%1 (%2)" +msgstr "Sitzung (Adresse)" + +#. i18n: file ./tastytooltipwidget.ui line 16 +#: menu.cpp:167 rc.cpp:3 rc.cpp:13 tastymenu.cpp:184 tastytooltipwidget.cpp:79 +#, no-c-format +msgid "Tasty Menu" +msgstr "Tasty-Menü" + +#. i18n: file ./menu.ui line 84 +#: menu.cpp:168 rc.cpp:16 +#, no-c-format +msgid "&Clear list" +msgstr "Liste &leeren" + +#. i18n: file ./menu.ui line 87 +#: menu.cpp:169 rc.cpp:19 +#, no-c-format +msgid "Alt+C" +msgstr "Alt+L" + +#. i18n: file ./menu.ui line 95 +#: menu.cpp:170 rc.cpp:22 +#, no-c-format +msgid "Se&arch:" +msgstr "&Suchen:" + +#. i18n: file ./menu.ui line 107 +#: menu.cpp:172 rc.cpp:25 +#, no-c-format +msgid "Favourite applications" +msgstr "Bevorzugte Programme" + +#. i18n: file ./menu.ui line 112 +#: menu.cpp:173 rc.cpp:28 +#, no-c-format +msgid "Most used applications" +msgstr "Meistbenutzte Programme" + +#. i18n: file ./menu.ui line 117 +#: menu.cpp:174 rc.cpp:31 +#, no-c-format +msgid "Recent applications" +msgstr "Letztgeöffnete Programme" + +#. i18n: file ./menu.ui line 122 +#: menu.cpp:175 rc.cpp:34 +#, no-c-format +msgid "Recent documents" +msgstr "Letztgeöffnete Dokumente" + +#. i18n: file ./menu.ui line 137 +#: menu.cpp:176 rc.cpp:37 +#, no-c-format +msgid "Use this dropdown menu to change the behaviour of the list below" +msgstr "" +"Verwenden Sie dieses Ausklappmenü, um das Verhalten der untenstehenden " +"Liste zu ändern" + +#. i18n: file ./menu.ui line 161 +#: menu.cpp:177 menu.cpp:180 rc.cpp:40 rc.cpp:49 +#, no-c-format +msgid "..." +msgstr "..." + +#. i18n: file ./menu.ui line 169 +#: menu.cpp:178 rc.cpp:43 +#, no-c-format +msgid "&Show:" +msgstr "&Anzeigen:" + +#. i18n: file ./menu.ui line 234 +#: menu.cpp:179 rc.cpp:46 +#, no-c-format +msgid "All Applications" +msgstr "Alle Programme" + +#. i18n: file ./menu.ui line 259 +#: menu.cpp:181 menuhandler.cpp:463 rc.cpp:52 +#, no-c-format +msgid "Make this menu a normal window" +msgstr "Dieses Menü zum normalen Fester machen" + +#. i18n: file ./menu.ui line 277 +#: menu.cpp:182 rc.cpp:55 +#, no-c-format +msgid "Ru&n program..." +msgstr "Pro&gramm ausführen ..." + +#. i18n: file ./menu.ui line 283 +#: menu.cpp:184 rc.cpp:61 +#, no-c-format +msgid "" +"If you know exatly how a program is named you can directly enter the " +"application name" +msgstr "" +"Wenn Sie exakt wissen, wie ein Programm heißt, können Sie direkt den " +"Anwendungsnamen eingeben" + +#. i18n: file ./menu.ui line 297 +#: menu.cpp:187 rc.cpp:66 +#, no-c-format +msgid "Start a new session, switch the active user or edit your user profile" +msgstr "" +"Eine neue Sitzung starten, den aktiven Benutzer wechseln oder Ihr " +"Benutzerprofil bearbeiten" + +#. i18n: file ./menu.ui line 305 +#: menu.cpp:188 rc.cpp:69 +#, no-c-format +msgid "L&ock Session" +msgstr "Sitzung s&perren" + +#. i18n: file ./menu.ui line 311 +#: menu.cpp:190 rc.cpp:75 +#, no-c-format +msgid "Lock the pc with a password if you are going away for a while" +msgstr "" +"Den Rechner mit einem Passwort sperren, wenn Sie für eine Weile abwesend " +"sind" + +#. i18n: file ./menu.ui line 319 +#: menu.cpp:191 rc.cpp:78 +#, no-c-format +msgid "Lo&g Out..." +msgstr "A&bmelden ..." + +#. i18n: file ./menu.ui line 325 +#: menu.cpp:193 rc.cpp:84 +#, no-c-format +msgid "Logout, reboot or shoutdown the computer" +msgstr "Abmelden, neu starten oder den Rechner herunterfahren" + +#: menuhandler.cpp:458 +msgid "Make this window a popup menu" +msgstr "Dieses Fenster zum Aufklappmenü machen" + +#: menuhandler.cpp:1426 +msgid "&Edit submenu..." +msgstr "Untermenü &bearbeiten ..." + +#: menuhandler.cpp:1429 +msgid "&Edit item..." +msgstr "Element &bearbeiten ..." + +#: menuhandler.cpp:1430 +msgid "&Add to desktop" +msgstr "Zu Arbeitsfläche &hinzufügen" + +#: menuhandler.cpp:1435 +msgid "&Add to favourite applications" +msgstr "Zu den bevorzugten Programmen &hinzufügen" + +#: menuhandler.cpp:1437 +msgid "&Remove from favourite applications" +msgstr "Aus den bevorzugten Programmen &entfernen" + +#: menuhandler.cpp:1501 +msgid "Edit user profile..." +msgstr "Benutzerprofil bearbeiten ..." + +#: menuhandler.cpp:1507 +msgid "Save current session" +msgstr "Aktuelle Sitzung speichern" + +#: menuhandler.cpp:1513 +msgid "Lock session and start a new one" +msgstr "Sitzung sperren und eine neue starten" + +#: menuhandler.cpp:1514 +msgid "Start New Session" +msgstr "Neue Sitzung starten" + +#: menuhandler.cpp:1567 +msgid "" +"

You have chosen to open another desktop session.
The current session " +"will be hidden and a new login screen will be displayed.
An F-key is " +"assigned to each session; F%1 is usually assigned to the first session, F%2 " +"to the second session and so on. You can switch between sessions by pressing " +"Ctrl, Alt and the appropriate F-key at the same time. Additionally, the KDE " +"Panel and Desktop menus have actions for switching between sessions.

" +msgstr "" +"

Sie haben sich dafür entschieden, eine Sitzung in einer neuen " +"Arbeitsumgebung zu starten.
Die aktuelle Sitzung wird ausgeblendet, und " +"es erscheint ein neues Anmeldungsfenster.
Jeder Sitzung ist eine F-Taste " +"zugeordnet; auf F%1 liegt normalerweise die erste Sitzung, auf F%2 die " +"zweite usw. Sie können zwischen den Sitzungen umschalten, indem Sie " +"gleichzeitig die Strg-, Alt- und die entsprechende F-Taste drücken. " +"Darüberhinaus können Sie über das Menü der Kontrollleiste und der " +"Arbeitsfläche zwischen den Sitzungen umschalten.

" + +#: menuhandler.cpp:1578 +msgid "Warning - New Session" +msgstr "Warnung - Neue Sitzung" + +#: menuhandler.cpp:1579 +msgid "&Start New Session" +msgstr "Neue Sitzung &starten" + +#. i18n: file ./tastytooltipwidget.ui line 83 +#: rc.cpp:6 tastytooltipwidget.cpp:80 +#, no-c-format +msgid "Tasty Menu" +msgstr "Tasty-Menü" + +#. i18n: file ./tastytooltipwidget.ui line 91 +#: rc.cpp:9 tastytooltipwidget.cpp:81 +#, no-c-format +msgid "Applications, tasks and desktop sessions" +msgstr "Anwendungen, Aufgaben und Desktop-Sitzungen" + +#: tastylistview.cpp:288 +msgid "to your favourite applications" +msgstr "zu Ihren bevorzugten Programmen" + +#: tastylistview.cpp:292 +msgid "from your favourite applications" +msgstr "aus Ihren bevorzugten Programmen" + +#: tastylistview.cpp:296 tastylistview.cpp:313 +msgid "Browse" +msgstr "Durchsuchen" + +#: tastylistview.cpp:300 +msgid "Expand" +msgstr "Ausklappen" + +#: tastylistview.cpp:304 +msgid "Collapse" +msgstr "Einklappen" + +#: tastymenu.cpp:69 tastymenu.cpp:318 +msgid "Menu" +msgstr "Menü" + +#: tastymenu.cpp:186 +msgid "KMenu replacement" +msgstr "Alternative zu KMenü" + +#: tastymenu.cpp:191 +msgid "Maintainer" +msgstr "Betreuer" + +#: tastymenu.cpp:195 +msgid "_: NAME OF TRANSLATORS\\nYour names" +msgstr "Jannick Kuhr" + +#: tastymenu.cpp:196 +msgid "_: EMAIL OF TRANSLATORS\\nYour emails" +msgstr "jakuhr-linux@gmx.de" + +#: tastymenu.cpp:199 +msgid "For the Russian translation" +msgstr "Für die russische Übersetzung" + +#: tastymenu.cpp:202 +msgid "For the German translation" +msgstr "Für die deutsche Übersetzung" + +#: tastymenu.cpp:205 +msgid "For the Spanish translation" +msgstr "Für die spanische Übersetzung" + +#: tastymenu.cpp:208 +#, fuzzy +msgid "For the Ukrainian translation" +msgstr "Für die deutsche Übersetzung" + +#: tastymenu.cpp:211 +#, fuzzy +msgid "For the French translation" +msgstr "Für die deutsche Übersetzung" + +#: tastymenu.cpp:214 +#, fuzzy +msgid "For the Finnish translation" +msgstr "Für die spanische Übersetzung" + +#: tastymenu.cpp:217 +#, fuzzy +msgid "For the Slovenian translation" +msgstr "Für die deutsche Übersetzung" + +#: tastymenu.cpp:220 +#, fuzzy +msgid "For the Polish translation" +msgstr "Für die spanische Übersetzung" + +#: tastymenu.cpp:225 +msgid "For the Switch user code from KDM" +msgstr "Für den \"Benutzer wechseln-\"Code aus KDM" + +#: tastymenu.cpp:229 +msgid "For some inspirations here and there." +msgstr "Für einige Anregungen hier und da" + +#: tastymenu.cpp:233 +msgid "For some code taken from Amarok's statistics list view" +msgstr "Für ein bisschen Code aus Amaroks Statistikansicht" + +#: tastymenu.cpp:265 +msgid "Behaviour" +msgstr "Verhalten" + +#: tastymenu.cpp:274 tastymenu.cpp:275 +msgid "Toggle Tasty Menu" +msgstr "Tasty-Menü an-/ausschalten" + +#: tastymenu.cpp:343 +#, fuzzy, c-format +msgid "" +"_n: There is one new installed application\n" +"There are %n new installed applications" +msgstr "" +"Es ist ein neu installiertes Programm vorhanden\n" +"Es sind %n neu installierte Programme vorhanden" + +#: tastymenu.cpp:416 +msgid "&Edit Menu" +msgstr "Menü &bearbeiten" + +#: tastymenu.cpp:418 +msgid "&Clear recently installed applications list" +msgstr "Liste der zuletzt installierten Programme leeren" + +#: tastymenu.cpp:420 +msgid "&Configure Global Shortcuts..." +msgstr "Globale K&urzbefehle einrichten ..." + +#: tastymenu.cpp:421 +msgid "&Configure..." +msgstr "&Einrichten ..." + +#~ msgid "Icons size:" +#~ msgstr "Symbolgröße:" + +#~ msgid "user: ..." +#~ msgstr "Benutzer: ..." + +#~ msgid "... host" +#~ msgstr "... Rechner" + +#~ msgid "There are" +#~ msgstr "Es sind" + +#~ msgid "new installed applications" +#~ msgstr "neu installierte Programme vorhanden" diff --git a/po/es.po b/po/es.po new file mode 100644 index 0000000..637d81f --- /dev/null +++ b/po/es.po @@ -0,0 +1,802 @@ +# translation of es.po to Español +# This file is put in the public domain. +# +# Jesus S Fernandez Prieto , 2007. +msgid "" +msgstr "" +"Project-Id-Version: es\n" +"POT-Creation-Date: 2007-11-21 19:16+0100\n" +"PO-Revision-Date: 2007-05-03 23:46+0200\n" +"Last-Translator: Jesus S Fernandez Prieto \n" +"Language-Team: Español \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Report-Msgid-Bugs-To: \n" +"X-Generator: KBabel 1.11.4\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: _translatorinfo.cpp:1 +msgid "" +"_: NAME OF TRANSLATORS\n" +"Your names" +msgstr "" +"_: NOMBRE DE LOS TRADUCTORES\n" +"Jesús S Fernández Prieto (xgoan)" + +#: _translatorinfo.cpp:3 +msgid "" +"_: EMAIL OF TRANSLATORS\n" +"Your emails" +msgstr "" +"_: EMAIL DE LOS TRADUCTORES\n" +"jesus@infodps.com" + +#. i18n: file ./behaviour.ui line 16 +#: appearance.cpp:273 behaviour.cpp:114 rc.cpp:87 rc.cpp:172 +#, no-c-format +msgid "Form1" +msgstr "" + +#. i18n: file ./appearance.ui line 32 +#: appearance.cpp:274 appearance.cpp:285 rc.cpp:175 rc.cpp:206 +#, no-c-format +msgid "Applications list" +msgstr "Lista de aplicaciones" + +#. i18n: file ./appearance.ui line 43 +#: appearance.cpp:275 rc.cpp:178 +#, no-c-format +msgid "Show tree e&xpanders" +msgstr "Mostrar botones de e&xpansión de categorías" + +#. i18n: file ./appearance.ui line 46 +#: appearance.cpp:276 rc.cpp:181 +#, no-c-format +msgid "Alt+X" +msgstr "" + +#. i18n: file ./appearance.ui line 57 +#: appearance.cpp:277 rc.cpp:184 +#, no-c-format +msgid "Alwa&ys collapsed categories" +msgstr "Categorías s&in expandir" + +#. i18n: file ./behaviour.ui line 94 +#: appearance.cpp:278 behaviour.cpp:120 rc.cpp:105 rc.cpp:187 +#, no-c-format +msgid "Alt+Y" +msgstr "" + +#. i18n: file ./appearance.ui line 68 +#: appearance.cpp:279 rc.cpp:190 +#, no-c-format +msgid "Hei&ght:" +msgstr "&Altura:" + +#. i18n: file ./appearance.ui line 82 +#: appearance.cpp:280 rc.cpp:193 +#, no-c-format +msgid "Button label:" +msgstr "Etiqueta del botón:" + +#. i18n: file ./appearance.ui line 111 +#: appearance.cpp:281 rc.cpp:196 +#, no-c-format +msgid "" +"What text should be displayed in the Kicker button tooltip instead of " +"\"Tasty Menu\".\n" +"Empty means default." +msgstr "" +"Texto que debe ser mostrado en el botón Kicker en lugar de \"Tasty " +"Menu\".
Vacio pone el texto por defecto." + +#. i18n: file ./appearance.ui line 119 +#: appearance.cpp:283 rc.cpp:200 +#, no-c-format +msgid "Wi&dth:" +msgstr "An&cho:" + +#. i18n: file ./appearance.ui line 133 +#: appearance.cpp:284 rc.cpp:203 +#, no-c-format +msgid "Tootip title:" +msgstr "Título del consejo:" + +#. i18n: file ./appearance.ui line 160 +#: appearance.cpp:286 rc.cpp:209 +#, no-c-format +msgid "of the screen width" +msgstr "del ancho de la pantalla" + +#. i18n: file ./appearance.ui line 173 +#: appearance.cpp:287 rc.cpp:212 +#, no-c-format +msgid "Menu button" +msgstr "Botón de menú" + +#. i18n: file ./appearance.ui line 184 +#: appearance.cpp:288 rc.cpp:215 +#, no-c-format +msgid "of the screen height" +msgstr "del alto de la pantalla" + +#. i18n: file ./appearance.ui line 220 +#: appearance.cpp:290 rc.cpp:219 +#, no-c-format +msgid "&Icon:" +msgstr "&Icono:" + +#. i18n: file ./appearance.ui line 223 +#: appearance.cpp:291 rc.cpp:222 +#, no-c-format +msgid "Alt+I" +msgstr "" + +#. i18n: file ./appearance.ui line 246 +#: appearance.cpp:293 rc.cpp:226 +#, no-c-format +msgid "" +"What icon should be displayed in the kicker button instead of the KMenu " +"one.\n" +"Empty means default." +msgstr "" +"Icono que debe de ser mostrado en Kicker en lugar del botón por defecto de " +"KMenu.
Vacio pone el botón por defecto." + +#. i18n: file ./appearance.ui line 262 +#: appearance.cpp:295 rc.cpp:230 +#, no-c-format +msgid "N&one" +msgstr "&Ninguno" + +#. i18n: file ./menu.ui line 308 +#: appearance.cpp:296 behaviour.cpp:117 menu.cpp:189 rc.cpp:72 rc.cpp:96 +#: rc.cpp:233 +#, no-c-format +msgid "Alt+O" +msgstr "" + +#. i18n: file ./appearance.ui line 280 +#: appearance.cpp:297 rc.cpp:236 +#, no-c-format +msgid "Menu size" +msgstr "Tamaño de menú" + +#. i18n: file ./appearance.ui line 291 +#: appearance.cpp:298 rc.cpp:239 +#, no-c-format +msgid "&Action icons size:" +msgstr "Tamaño de iconos de &acción:" + +#. i18n: file ./appearance.ui line 305 +#: appearance.cpp:299 rc.cpp:242 +#, no-c-format +msgid "&Display applications descriptions" +msgstr "Mostrar &descripción de aplicaciones" + +#. i18n: file ./appearance.ui line 308 +#: appearance.cpp:300 rc.cpp:245 +#, no-c-format +msgid "Alt+D" +msgstr "" + +#. i18n: file ./appearance.ui line 344 +#: appearance.cpp:302 rc.cpp:249 +#, no-c-format +msgid "&Text:" +msgstr "&Texto:" + +#. i18n: file ./appearance.ui line 347 +#: appearance.cpp:303 rc.cpp:252 +#, no-c-format +msgid "Alt+T" +msgstr "" + +#. i18n: file ./appearance.ui line 362 +#: appearance.cpp:305 rc.cpp:256 +#, no-c-format +msgid "" +"What label instead of \"Menu\" should be shown for the Kicker button.\n" +"Empty means default." +msgstr "" +"Etiqueta de \"Menú\" que deberá ser mostrada para el botón de Kicker\n" +"Vacio pone la etiqueta por defecto." + +#. i18n: file ./appearance.ui line 370 +#: appearance.cpp:307 rc.cpp:260 +#, no-c-format +msgid "&None" +msgstr "&Ninguno" + +#. i18n: file ./menu.ui line 280 +#: appearance.cpp:308 behaviour.cpp:144 menu.cpp:183 rc.cpp:58 rc.cpp:169 +#: rc.cpp:263 +#, no-c-format +msgid "Alt+N" +msgstr "" + +#. i18n: file ./appearance.ui line 383 +#: appearance.cpp:309 appearance.cpp:310 rc.cpp:266 rc.cpp:269 +#, no-c-format +msgid "%" +msgstr "" + +#. i18n: file ./appearance.ui line 417 +#: appearance.cpp:311 rc.cpp:272 +#, no-c-format +msgid "Button icon:" +msgstr "Icono de botón:" + +#. i18n: file ./appearance.ui line 453 +#: appearance.cpp:312 rc.cpp:275 +#, no-c-format +msgid "third column:" +msgstr "" + +#. i18n: file ./appearance.ui line 461 +#: appearance.cpp:313 rc.cpp:278 +#, no-c-format +msgid "second column:" +msgstr "" + +#. i18n: file ./appearance.ui line 469 +#: appearance.cpp:314 appearance.cpp:315 appearance.cpp:316 appearance.cpp:319 +#: rc.cpp:281 rc.cpp:284 rc.cpp:287 rc.cpp:296 +#, no-c-format +msgid " pixels" +msgstr "" + +#. i18n: file ./appearance.ui line 520 +#: appearance.cpp:317 rc.cpp:290 +#, no-c-format +msgid "first column:" +msgstr "" + +#. i18n: file ./appearance.ui line 538 +#: appearance.cpp:318 rc.cpp:293 +#, fuzzy, no-c-format +msgid "Icons si&zes:" +msgstr "&Tamaño de icono:" + +#. i18n: file ./behaviour.ui line 32 +#: behaviour.cpp:115 rc.cpp:90 +#, no-c-format +msgid "General behaviour" +msgstr "Comportamiento general" + +#. i18n: file ./behaviour.ui line 60 +#: behaviour.cpp:116 rc.cpp:93 +#, no-c-format +msgid "&Override alt+F1 keyboard shortcut (requires kicker restart)" +msgstr "&Capturar el acceso rápido Alt+F1 (necesita reiniciar kicker)" + +#. i18n: file ./behaviour.ui line 66 +#: behaviour.cpp:118 rc.cpp:99 +#, no-c-format +msgid "" +"Pops up Tasty Menu instead of KMenu when the shortcut sequence Alt+F1 is " +"pressed" +msgstr "" +"Muestra Tasty Menu en lugar del KMenu cuando el acceso rápido Alt+F1 es " +"pulsada" + +#. i18n: file ./behaviour.ui line 91 +#: behaviour.cpp:119 rc.cpp:102 +#, no-c-format +msgid "Show save session functionalit&y" +msgstr "Mostrar opción de salvar sesión" + +#. i18n: file ./behaviour.ui line 98 +#: behaviour.cpp:121 rc.cpp:108 +#, no-c-format +msgid "" +"Under the menu that pops up when the button with user name is pressed a new " +"item \"Save current session\" is added.\n" +"It saves the current session informations like open applications and windows " +"position. In order to use it you must set \"Restore manually saved session\" " +"in the Session Manager Kcontrol module." +msgstr "" +"Vajo el menú que se muestra cuando el botón con el nombre de usuario es " +"pulsado un nuevo elemento llamado \"Salvar sesión actual\" es " +"añadido.
Esto salva la información de la sesión actual como " +"aplicaciones abiertas y posiciones de ventanas. Para usarlo debes poner " +"\"Restaurar sesión guardada manualmente\" en el modulo llamado " +"Administrador de sesiones de KControl" + +#. i18n: file ./behaviour.ui line 106 +#: behaviour.cpp:123 rc.cpp:112 +#, no-c-format +msgid "&Hide groups with only one application" +msgstr "Oculta &grupos con una sola aplicación" + +#. i18n: file ./behaviour.ui line 109 +#: behaviour.cpp:124 rc.cpp:115 +#, no-c-format +msgid "Alt+H" +msgstr "" + +#. i18n: file ./behaviour.ui line 120 +#: behaviour.cpp:125 rc.cpp:118 +#, no-c-format +msgid "Show items in alpha&betical order" +msgstr "Muestra elementos en orden &alfabético" + +#. i18n: file ./behaviour.ui line 123 +#: behaviour.cpp:126 rc.cpp:121 +#, no-c-format +msgid "Alt+B" +msgstr "" + +#. i18n: file ./behaviour.ui line 136 +#: behaviour.cpp:127 rc.cpp:124 +#, no-c-format +msgid "Search field behaviour" +msgstr "Comportamiento del campo de &búsqueda" + +#. i18n: file ./behaviour.ui line 164 +#: behaviour.cpp:129 rc.cpp:128 +#, no-c-format +msgid "Si&mple searches" +msgstr "Búsqueda &simple" + +#. i18n: file ./behaviour.ui line 167 +#: behaviour.cpp:130 rc.cpp:131 +#, no-c-format +msgid "Alt+M" +msgstr "" + +#. i18n: file ./behaviour.ui line 173 +#: behaviour.cpp:131 rc.cpp:134 +#, no-c-format +msgid "Filters the applications list" +msgstr "Filtros de la lista de aplicaciones" + +#. i18n: file ./behaviour.ui line 176 +#: behaviour.cpp:132 rc.cpp:137 +#, no-c-format +msgid "" +"It displays in the first column all the applications whose name or " +"description matches with the query you entered" +msgstr "" +"Muestra en la primera columna todas las aplicaciones cuyo nombre o " +"descripción coincide con la consulta realizada" + +#. i18n: file ./behaviour.ui line 184 +#: behaviour.cpp:133 rc.cpp:140 +#, no-c-format +msgid "&Kerry Beagle integration" +msgstr "Integración con Kerry Beagle" + +#. i18n: file ./behaviour.ui line 187 +#: behaviour.cpp:134 rc.cpp:143 +#, no-c-format +msgid "Alt+K" +msgstr "" + +#. i18n: file ./behaviour.ui line 190 +#: behaviour.cpp:135 rc.cpp:146 +#, no-c-format +msgid "Perform queries with Kerry Beagle" +msgstr "Ejecuta consultas con Kerry Beagle" + +#. i18n: file ./behaviour.ui line 194 +#: behaviour.cpp:136 rc.cpp:149 +#, no-c-format +msgid "" +"Perform queries with Kerry Beagle instead of using the first column.\n" +"It needs Kerry Beagle up and running." +msgstr "" +"Ejecuta consultas con Kerry Beagle en lugar de usar la primera " +"columna.
Necesita Kerry Beagle instalado y en ejecución." + +#. i18n: file ./behaviour.ui line 202 +#: behaviour.cpp:138 rc.cpp:153 +#, no-c-format +msgid "Stri&gi Integration" +msgstr "Integración con &Strigi" + +#. i18n: file ./menu.ui line 322 +#: behaviour.cpp:139 menu.cpp:192 rc.cpp:81 rc.cpp:156 +#, no-c-format +msgid "Alt+G" +msgstr "" + +#. i18n: file ./behaviour.ui line 208 +#: behaviour.cpp:140 rc.cpp:159 +#, no-c-format +msgid "Perform queries with Strigi" +msgstr "Ejecutar consultas con Strigi" + +#. i18n: file ./behaviour.ui line 212 +#: behaviour.cpp:141 rc.cpp:162 +#, no-c-format +msgid "" +"Perform queries with Strigi instead of using the first column.\n" +"It needs the Strigi Daemon up and running" +msgstr "" +"Ejecuta consultas con Strigi en lugar de usar la primera " +"columna.
Necesita el demonio Strigi instalado y en ejecución." + +#. i18n: file ./behaviour.ui line 222 +#: behaviour.cpp:143 rc.cpp:166 +#, fuzzy, no-c-format +msgid "&Notify recently installed applications (requires kicker restart)" +msgstr "Borrar lista de aplicaciones &instaladas recientemente" + +#: dmctl.cpp:345 +msgid "" +"_: user: ...\n" +"%1: TTY login" +msgstr "" + +#: dmctl.cpp:351 +msgid "Unused" +msgstr "Sin usar" + +#: dmctl.cpp:353 +msgid "X login on remote host" +msgstr "Login en ordenador remoto" + +#: dmctl.cpp:354 +#, c-format +msgid "" +"_: ... host\n" +"X login on %1" +msgstr "" + +#: dmctl.cpp:357 +#, fuzzy +msgid "" +"_: user: session type\n" +"%1: %2" +msgstr "usuario: tipo de sesión" + +#: dmctl.cpp:372 +#, fuzzy +msgid "" +"_: session (location)\n" +"%1 (%2)" +msgstr "sesión (ubicación)" + +#. i18n: file ./tastytooltipwidget.ui line 16 +#: menu.cpp:167 rc.cpp:3 rc.cpp:13 tastymenu.cpp:184 tastytooltipwidget.cpp:79 +#, no-c-format +msgid "Tasty Menu" +msgstr "" + +#. i18n: file ./menu.ui line 84 +#: menu.cpp:168 rc.cpp:16 +#, no-c-format +msgid "&Clear list" +msgstr "&Borrar lista" + +#. i18n: file ./menu.ui line 87 +#: menu.cpp:169 rc.cpp:19 +#, no-c-format +msgid "Alt+C" +msgstr "" + +#. i18n: file ./menu.ui line 95 +#: menu.cpp:170 rc.cpp:22 +#, no-c-format +msgid "Se&arch:" +msgstr "&Búsqueda" + +#. i18n: file ./menu.ui line 107 +#: menu.cpp:172 rc.cpp:25 +#, no-c-format +msgid "Favourite applications" +msgstr "Aplicaciones favoritas" + +#. i18n: file ./menu.ui line 112 +#: menu.cpp:173 rc.cpp:28 +#, no-c-format +msgid "Most used applications" +msgstr "Aplicaciones más usadas" + +#. i18n: file ./menu.ui line 117 +#: menu.cpp:174 rc.cpp:31 +#, no-c-format +msgid "Recent applications" +msgstr "Aplicaciones recientes" + +#. i18n: file ./menu.ui line 122 +#: menu.cpp:175 rc.cpp:34 +#, no-c-format +msgid "Recent documents" +msgstr "Documentos recientes" + +#. i18n: file ./menu.ui line 137 +#: menu.cpp:176 rc.cpp:37 +#, no-c-format +msgid "Use this dropdown menu to change the behaviour of the list below" +msgstr "" +"Use esta lista desplegable para cambiar el comportamiento de la lista " +"inferior" + +#. i18n: file ./menu.ui line 161 +#: menu.cpp:177 menu.cpp:180 rc.cpp:40 rc.cpp:49 +#, no-c-format +msgid "..." +msgstr "" + +#. i18n: file ./menu.ui line 169 +#: menu.cpp:178 rc.cpp:43 +#, no-c-format +msgid "&Show:" +msgstr "&Mostrar:" + +#. i18n: file ./menu.ui line 234 +#: menu.cpp:179 rc.cpp:46 +#, no-c-format +msgid "All Applications" +msgstr "Todas las aplicaciones" + +#. i18n: file ./menu.ui line 259 +#: menu.cpp:181 menuhandler.cpp:463 rc.cpp:52 +#, no-c-format +msgid "Make this menu a normal window" +msgstr "Hacer de este menu una ventana normal" + +#. i18n: file ./menu.ui line 277 +#: menu.cpp:182 rc.cpp:55 +#, no-c-format +msgid "Ru&n program..." +msgstr "Ejecuta&r programa..." + +#. i18n: file ./menu.ui line 283 +#: menu.cpp:184 rc.cpp:61 +#, no-c-format +msgid "" +"If you know exatly how a program is named you can directly enter the " +"application name" +msgstr "" +"Si sabe exactamente como se llama un programa puede introducir su nombre " +"directamente" + +#. i18n: file ./menu.ui line 297 +#: menu.cpp:187 rc.cpp:66 +#, no-c-format +msgid "Start a new session, switch the active user or edit your user profile" +msgstr "" +"Inicia una nueva sesión, cambia el usuario activo o edita su perfil de " +"usuario" + +#. i18n: file ./menu.ui line 305 +#: menu.cpp:188 rc.cpp:69 +#, no-c-format +msgid "L&ock Session" +msgstr "&Bloquear sesión" + +#. i18n: file ./menu.ui line 311 +#: menu.cpp:190 rc.cpp:75 +#, no-c-format +msgid "Lock the pc with a password if you are going away for a while" +msgstr "" +"Bloquea el ordenador con una contraseña si estas ausente por un tiempo" + +#. i18n: file ./menu.ui line 319 +#: menu.cpp:191 rc.cpp:78 +#, no-c-format +msgid "Lo&g Out..." +msgstr "&Cerrar sesión" + +#. i18n: file ./menu.ui line 325 +#: menu.cpp:193 rc.cpp:84 +#, no-c-format +msgid "Logout, reboot or shoutdown the computer" +msgstr "Cierra sesión, reinicia o apaga el ordenador" + +#: menuhandler.cpp:458 +msgid "Make this window a popup menu" +msgstr "Hace de esta ventana un menú desplegable" + +#: menuhandler.cpp:1426 +msgid "&Edit submenu..." +msgstr "Editar &submenú..." + +#: menuhandler.cpp:1429 +msgid "&Edit item..." +msgstr "&Editar elemento..." + +#: menuhandler.cpp:1430 +msgid "&Add to desktop" +msgstr "" + +#: menuhandler.cpp:1435 +msgid "&Add to favourite applications" +msgstr "Añadir a aplicaciones &favoritas" + +#: menuhandler.cpp:1437 +msgid "&Remove from favourite applications" +msgstr "Elimina&r de aplicaciones favoritas" + +#: menuhandler.cpp:1501 +msgid "Edit user profile..." +msgstr "Editar perfil de usuario..." + +#: menuhandler.cpp:1507 +msgid "Save current session" +msgstr "Salvar sesión actual" + +#: menuhandler.cpp:1513 +msgid "Lock session and start a new one" +msgstr "Bloquear sesión e iniciar una nueva" + +#: menuhandler.cpp:1514 +msgid "Start New Session" +msgstr "Iniciar nueva sesión" + +#: menuhandler.cpp:1567 +msgid "" +"

You have chosen to open another desktop session.
The current session " +"will be hidden and a new login screen will be displayed.
An F-key is " +"assigned to each session; F%1 is usually assigned to the first session, F%2 " +"to the second session and so on. You can switch between sessions by pressing " +"Ctrl, Alt and the appropriate F-key at the same time. Additionally, the KDE " +"Panel and Desktop menus have actions for switching between sessions.

" +msgstr "" +"

Has elegido abrir otra sesión.
La sesión actual será ocultada y una " +"nueva ventana de inicio de sesión será mostrada.
Un tecla de función " +"es asignada a cada sesión; F%1 es normalmente asignada a la primera " +"sesión, F%2 a la segunda sesión, etcétera. Puedes cambiar entre las " +"sesiones pulsando Control, Alt y la tecla de función al mismo tiempo. " +"Adicionalmente, el Panel de KDE y los menús de Escritorio tienen acciones " +"para cambiar entre las diferentes sesiones.

" + +#: menuhandler.cpp:1578 +msgid "Warning - New Session" +msgstr "Peligro - Nueva sesión" + +#: menuhandler.cpp:1579 +msgid "&Start New Session" +msgstr "Iniciar nueva &sesión" + +#. i18n: file ./tastytooltipwidget.ui line 83 +#: rc.cpp:6 tastytooltipwidget.cpp:80 +#, no-c-format +msgid "Tasty Menu" +msgstr "" + +#. i18n: file ./tastytooltipwidget.ui line 91 +#: rc.cpp:9 tastytooltipwidget.cpp:81 +#, no-c-format +msgid "Applications, tasks and desktop sessions" +msgstr "Aplicaciones, tareas y sesiones" + +#: tastylistview.cpp:288 +msgid "to your favourite applications" +msgstr "a tus aplicaciones favoritas" + +#: tastylistview.cpp:292 +msgid "from your favourite applications" +msgstr "de tus aplicaciones favoritas" + +#: tastylistview.cpp:296 tastylistview.cpp:313 +msgid "Browse" +msgstr "Buscar" + +#: tastylistview.cpp:300 +msgid "Expand" +msgstr "Expandir" + +#: tastylistview.cpp:304 +msgid "Collapse" +msgstr "Contraer" + +#: tastymenu.cpp:69 tastymenu.cpp:318 +msgid "Menu" +msgstr "Menú" + +#: tastymenu.cpp:186 +msgid "KMenu replacement" +msgstr "Reemplazo del KMenu" + +#: tastymenu.cpp:191 +msgid "Maintainer" +msgstr "Mantenimiento" + +#: tastymenu.cpp:195 +msgid "_: NAME OF TRANSLATORS\\nYour names" +msgstr "_: NOMBRE DE LOS TRADUCTORES\\nJesús S Fernández Prieto" + +#: tastymenu.cpp:196 +msgid "_: EMAIL OF TRANSLATORS\\nYour emails" +msgstr "_: EMAIL DE LOS TRADUCTORES\\njesus@infodps.com" + +#: tastymenu.cpp:199 +msgid "For the Russian translation" +msgstr "Por la traducción al Ruso" + +#: tastymenu.cpp:202 +#, fuzzy +msgid "For the German translation" +msgstr "Por la traducción al Ruso" + +#: tastymenu.cpp:205 +#, fuzzy +msgid "For the Spanish translation" +msgstr "Por la traducción al Ruso" + +#: tastymenu.cpp:208 +#, fuzzy +msgid "For the Ukrainian translation" +msgstr "Por la traducción al Ruso" + +#: tastymenu.cpp:211 +#, fuzzy +msgid "For the French translation" +msgstr "Por la traducción al Ruso" + +#: tastymenu.cpp:214 +#, fuzzy +msgid "For the Finnish translation" +msgstr "Por la traducción al Ruso" + +#: tastymenu.cpp:217 +#, fuzzy +msgid "For the Slovenian translation" +msgstr "Por la traducción al Ruso" + +#: tastymenu.cpp:220 +#, fuzzy +msgid "For the Polish translation" +msgstr "Por la traducción al Ruso" + +#: tastymenu.cpp:225 +msgid "For the Switch user code from KDM" +msgstr "Por el código de cambiar usuario del KDM" + +#: tastymenu.cpp:229 +msgid "For some inspirations here and there." +msgstr "Por la inspiración aquí y allá" + +#: tastymenu.cpp:233 +msgid "For some code taken from Amarok's statistics list view" +msgstr "Por el código tomado de la ListView de estadísticas de Amarok" + +#: tastymenu.cpp:265 +msgid "Behaviour" +msgstr "Comportamiento" + +#: tastymenu.cpp:274 tastymenu.cpp:275 +msgid "Toggle Tasty Menu" +msgstr "Activar/desactivar Tasty Menu" + +#: tastymenu.cpp:343 +#, fuzzy, c-format +msgid "" +"_n: There is one new installed application\n" +"There are %n new installed applications" +msgstr "" +"Hay una nueva aplicación instalada\n" +"Hay %n nuevas aplicaciones instaladas" + +#: tastymenu.cpp:416 +msgid "&Edit Menu" +msgstr "&Editar menú" + +#: tastymenu.cpp:418 +msgid "&Clear recently installed applications list" +msgstr "Borrar lista de aplicaciones &instaladas recientemente" + +#: tastymenu.cpp:420 +msgid "&Configure Global Shortcuts..." +msgstr "Configurar accesos rápidos &globales" + +#: tastymenu.cpp:421 +msgid "&Configure..." +msgstr "&Configurar..." + +#~ msgid "Icons size:" +#~ msgstr "Tamaño de icono:" + +#~ msgid "user: ..." +#~ msgstr "usuario: ..." + +#~ msgid "There are" +#~ msgstr "Hay" + +#~ msgid "new installed applications" +#~ msgstr "nuevas aplicaciones instaladas" diff --git a/po/fi.po b/po/fi.po new file mode 100644 index 0000000..d24023a --- /dev/null +++ b/po/fi.po @@ -0,0 +1,789 @@ +# # translation of tastymenu.po to Finnish (suomi) +# This file is put in the public domain. +# +# Tommi Nieminen , 2007. +msgid "" +msgstr "" +"Project-Id-Version: tastymenu\n" +"POT-Creation-Date: 2007-11-21 19:16+0100\n" +"PO-Revision-Date: 2007-08-20 19:08+0300\n" +"Last-Translator: Tommi Nieminen \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Report-Msgid-Bugs-To: \n" +"X-Generator: KBabel 1.11.4\n" + +#: _translatorinfo.cpp:1 +msgid "" +"_: NAME OF TRANSLATORS\n" +"Your names" +msgstr "Tommi Nieminen" + +#: _translatorinfo.cpp:3 +msgid "" +"_: EMAIL OF TRANSLATORS\n" +"Your emails" +msgstr "translator@legisign.org" + +#. i18n: file ./behaviour.ui line 16 +#: appearance.cpp:273 behaviour.cpp:114 rc.cpp:87 rc.cpp:172 +#, no-c-format +msgid "Form1" +msgstr "Lomake1" + +#. i18n: file ./appearance.ui line 32 +#: appearance.cpp:274 appearance.cpp:285 rc.cpp:175 rc.cpp:206 +#, no-c-format +msgid "Applications list" +msgstr "Sovellusluettelo" + +#. i18n: file ./appearance.ui line 43 +#: appearance.cpp:275 rc.cpp:178 +#, no-c-format +msgid "Show tree e&xpanders" +msgstr "Näytä puun &laajentimet" + +#. i18n: file ./appearance.ui line 46 +#: appearance.cpp:276 rc.cpp:181 +#, no-c-format +msgid "Alt+X" +msgstr "Alt-X" + +#. i18n: file ./appearance.ui line 57 +#: appearance.cpp:277 rc.cpp:184 +#, no-c-format +msgid "Alwa&ys collapsed categories" +msgstr "S&ulje aina luokat" + +#. i18n: file ./behaviour.ui line 94 +#: appearance.cpp:278 behaviour.cpp:120 rc.cpp:105 rc.cpp:187 +#, no-c-format +msgid "Alt+Y" +msgstr "Alt-Y" + +#. i18n: file ./appearance.ui line 68 +#: appearance.cpp:279 rc.cpp:190 +#, no-c-format +msgid "Hei&ght:" +msgstr "&Korkeus:" + +#. i18n: file ./appearance.ui line 82 +#: appearance.cpp:280 rc.cpp:193 +#, no-c-format +msgid "Button label:" +msgstr "Painikkeen otsikko:" + +#. i18n: file ./appearance.ui line 111 +#: appearance.cpp:281 rc.cpp:196 +#, no-c-format +msgid "" +"What text should be displayed in the Kicker button tooltip instead of " +"\"Tasty Menu\".\n" +"Empty means default." +msgstr "" +"Mikä teksti näytetään Kicker-painikkeen työkaluvihjeessä Tasty " +"Menu-tekstin sijaan.\n" +"Tyhjä tarkoittaa käytä oletusta." + +#. i18n: file ./appearance.ui line 119 +#: appearance.cpp:283 rc.cpp:200 +#, no-c-format +msgid "Wi&dth:" +msgstr "&Leveys:" + +#. i18n: file ./appearance.ui line 133 +#: appearance.cpp:284 rc.cpp:203 +#, no-c-format +msgid "Tootip title:" +msgstr "Työkaluvihje:" + +#. i18n: file ./appearance.ui line 160 +#: appearance.cpp:286 rc.cpp:209 +#, no-c-format +msgid "of the screen width" +msgstr "näytön leveydestä" + +#. i18n: file ./appearance.ui line 173 +#: appearance.cpp:287 rc.cpp:212 +#, no-c-format +msgid "Menu button" +msgstr "Valikkopainike" + +#. i18n: file ./appearance.ui line 184 +#: appearance.cpp:288 rc.cpp:215 +#, no-c-format +msgid "of the screen height" +msgstr "näytön korkeudesta" + +#. i18n: file ./appearance.ui line 220 +#: appearance.cpp:290 rc.cpp:219 +#, no-c-format +msgid "&Icon:" +msgstr "&Kuvake:" + +#. i18n: file ./appearance.ui line 223 +#: appearance.cpp:291 rc.cpp:222 +#, no-c-format +msgid "Alt+I" +msgstr "Alt-I" + +#. i18n: file ./appearance.ui line 246 +#: appearance.cpp:293 rc.cpp:226 +#, no-c-format +msgid "" +"What icon should be displayed in the kicker button instead of the KMenu " +"one.\n" +"Empty means default." +msgstr "" +"Mikä kuvake näytetään Kicker-painikkeessa KMenun sijaan.\n" +"Tyhjä tarkoittaa käytä oletusta." + +#. i18n: file ./appearance.ui line 262 +#: appearance.cpp:295 rc.cpp:230 +#, no-c-format +msgid "N&one" +msgstr "&Ei mitään" + +#. i18n: file ./menu.ui line 308 +#: appearance.cpp:296 behaviour.cpp:117 menu.cpp:189 rc.cpp:72 rc.cpp:96 +#: rc.cpp:233 +#, no-c-format +msgid "Alt+O" +msgstr "Alt-O" + +#. i18n: file ./appearance.ui line 280 +#: appearance.cpp:297 rc.cpp:236 +#, no-c-format +msgid "Menu size" +msgstr "Valikon koko" + +#. i18n: file ./appearance.ui line 291 +#: appearance.cpp:298 rc.cpp:239 +#, no-c-format +msgid "&Action icons size:" +msgstr "T&oimintokuvakkeiden koko" + +#. i18n: file ./appearance.ui line 305 +#: appearance.cpp:299 rc.cpp:242 +#, no-c-format +msgid "&Display applications descriptions" +msgstr "&Näytä sovellusten kuvaukset" + +#. i18n: file ./appearance.ui line 308 +#: appearance.cpp:300 rc.cpp:245 +#, no-c-format +msgid "Alt+D" +msgstr "Alt-D" + +#. i18n: file ./appearance.ui line 344 +#: appearance.cpp:302 rc.cpp:249 +#, no-c-format +msgid "&Text:" +msgstr "&Teksti" + +#. i18n: file ./appearance.ui line 347 +#: appearance.cpp:303 rc.cpp:252 +#, no-c-format +msgid "Alt+T" +msgstr "Alt-T" + +#. i18n: file ./appearance.ui line 362 +#: appearance.cpp:305 rc.cpp:256 +#, no-c-format +msgid "" +"What label instead of \"Menu\" should be shown for the Kicker button.\n" +"Empty means default." +msgstr "" +"Mikä otsikko näytetään tekstin \"Menu\" sijaan Kicker-painikkeessa.\n" +"Tyhjä tarkoittaa käytä oletusta." + +#. i18n: file ./appearance.ui line 370 +#: appearance.cpp:307 rc.cpp:260 +#, no-c-format +msgid "&None" +msgstr "&Ei mitään" + +#. i18n: file ./menu.ui line 280 +#: appearance.cpp:308 behaviour.cpp:144 menu.cpp:183 rc.cpp:58 rc.cpp:169 +#: rc.cpp:263 +#, no-c-format +msgid "Alt+N" +msgstr "Alt-N" + +#. i18n: file ./appearance.ui line 383 +#: appearance.cpp:309 appearance.cpp:310 rc.cpp:266 rc.cpp:269 +#, no-c-format +msgid "%" +msgstr " %" + +#. i18n: file ./appearance.ui line 417 +#: appearance.cpp:311 rc.cpp:272 +#, no-c-format +msgid "Button icon:" +msgstr "Painikkeen kuvake:" + +#. i18n: file ./appearance.ui line 453 +#: appearance.cpp:312 rc.cpp:275 +#, no-c-format +msgid "third column:" +msgstr "kolmas sarake:" + +#. i18n: file ./appearance.ui line 461 +#: appearance.cpp:313 rc.cpp:278 +#, no-c-format +msgid "second column:" +msgstr "toinen sarake:" + +#. i18n: file ./appearance.ui line 469 +#: appearance.cpp:314 appearance.cpp:315 appearance.cpp:316 appearance.cpp:319 +#: rc.cpp:281 rc.cpp:284 rc.cpp:287 rc.cpp:296 +#, no-c-format +msgid " pixels" +msgstr " kuvapistettä" + +#. i18n: file ./appearance.ui line 520 +#: appearance.cpp:317 rc.cpp:290 +#, no-c-format +msgid "first column:" +msgstr "ensimmäinen sarake:" + +#. i18n: file ./appearance.ui line 538 +#: appearance.cpp:318 rc.cpp:293 +#, no-c-format +msgid "Icons si&zes:" +msgstr "Kuvakkeen koko:" + +#. i18n: file ./behaviour.ui line 32 +#: behaviour.cpp:115 rc.cpp:90 +#, no-c-format +msgid "General behaviour" +msgstr "Toiminta" + +#. i18n: file ./behaviour.ui line 60 +#: behaviour.cpp:116 rc.cpp:93 +#, no-c-format +msgid "&Override alt+F1 keyboard shortcut (requires kicker restart)" +msgstr "&Ohita Alt-F1-pikanäppäin (vaatii Kickerin uudelleenkäynnistystä)" + +#. i18n: file ./behaviour.ui line 66 +#: behaviour.cpp:118 rc.cpp:99 +#, no-c-format +msgid "" +"Pops up Tasty Menu instead of KMenu when the shortcut sequence Alt+F1 is " +"pressed" +msgstr "" +"Näyttää Tasty Menun KMenun sijaan Alt-F1-pikanäppäintä painettaessa" + +#. i18n: file ./behaviour.ui line 91 +#: behaviour.cpp:119 rc.cpp:102 +#, no-c-format +msgid "Show save session functionalit&y" +msgstr "Näytä istunnon t&allennustoiminto" + +#. i18n: file ./behaviour.ui line 98 +#: behaviour.cpp:121 rc.cpp:108 +#, no-c-format +msgid "" +"Under the menu that pops up when the button with user name is pressed a new " +"item \"Save current session\" is added.\n" +"It saves the current session informations like open applications and windows " +"position. In order to use it you must set \"Restore manually saved session\" " +"in the Session Manager Kcontrol module." +msgstr "" +"Käyttäjän nimellä otsikoidusta painikkeesta saatavaan valikkoon " +"lisätään uusi kohta \"Tallenna nykyinen istunto\".\n" +"Se tallentaa nykyisen istunnon tiedon kuten avoimet sovellukset ja " +"ikkunoiden sijainnit. Käyttääksesi sitä sinun on sallittava \"Palauta " +"käsin tallennettu istunto\" istunnonhallinnan moduulissa." + +#. i18n: file ./behaviour.ui line 106 +#: behaviour.cpp:123 rc.cpp:112 +#, no-c-format +msgid "&Hide groups with only one application" +msgstr "P&iilota vain yhden sovelluksen ryhmät" + +#. i18n: file ./behaviour.ui line 109 +#: behaviour.cpp:124 rc.cpp:115 +#, no-c-format +msgid "Alt+H" +msgstr "Alt-H" + +#. i18n: file ./behaviour.ui line 120 +#: behaviour.cpp:125 rc.cpp:118 +#, no-c-format +msgid "Show items in alpha&betical order" +msgstr "&Lajittele valikot" + +#. i18n: file ./behaviour.ui line 123 +#: behaviour.cpp:126 rc.cpp:121 +#, no-c-format +msgid "Alt+B" +msgstr "Alt-B" + +#. i18n: file ./behaviour.ui line 136 +#: behaviour.cpp:127 rc.cpp:124 +#, no-c-format +msgid "Search field behaviour" +msgstr "Hakukentän toiminta" + +#. i18n: file ./behaviour.ui line 164 +#: behaviour.cpp:129 rc.cpp:128 +#, no-c-format +msgid "Si&mple searches" +msgstr "&Yksinkertainen haku" + +#. i18n: file ./behaviour.ui line 167 +#: behaviour.cpp:130 rc.cpp:131 +#, no-c-format +msgid "Alt+M" +msgstr "Alt-M" + +#. i18n: file ./behaviour.ui line 173 +#: behaviour.cpp:131 rc.cpp:134 +#, no-c-format +msgid "Filters the applications list" +msgstr "Suodattaa sovellusluetteloa" + +#. i18n: file ./behaviour.ui line 176 +#: behaviour.cpp:132 rc.cpp:137 +#, no-c-format +msgid "" +"It displays in the first column all the applications whose name or " +"description matches with the query you entered" +msgstr "" +"Näyttää ensimmäisessä sarakkeessa sovellukset, joiden nimi tai kuvaus " +"vastaa annettua hakulausetta" + +#. i18n: file ./behaviour.ui line 184 +#: behaviour.cpp:133 rc.cpp:140 +#, no-c-format +msgid "&Kerry Beagle integration" +msgstr "&Kerry Beagle -haku" + +#. i18n: file ./behaviour.ui line 187 +#: behaviour.cpp:134 rc.cpp:143 +#, no-c-format +msgid "Alt+K" +msgstr "Alt-K" + +#. i18n: file ./behaviour.ui line 190 +#: behaviour.cpp:135 rc.cpp:146 +#, no-c-format +msgid "Perform queries with Kerry Beagle" +msgstr "Hakee Kerry Beaglellä" + +#. i18n: file ./behaviour.ui line 194 +#: behaviour.cpp:136 rc.cpp:149 +#, no-c-format +msgid "" +"Perform queries with Kerry Beagle instead of using the first column.\n" +"It needs Kerry Beagle up and running." +msgstr "" +"Suorittaa haut Kerry Beaglelle ensisarakkeen käyttämisen sijaan.\n" +"Vaatii Kerryn Beaglen olevan toiminnassa." + +#. i18n: file ./behaviour.ui line 202 +#: behaviour.cpp:138 rc.cpp:153 +#, no-c-format +msgid "Stri&gi Integration" +msgstr "Stri&gi-haku" + +#. i18n: file ./menu.ui line 322 +#: behaviour.cpp:139 menu.cpp:192 rc.cpp:81 rc.cpp:156 +#, no-c-format +msgid "Alt+G" +msgstr "Alt-G" + +#. i18n: file ./behaviour.ui line 208 +#: behaviour.cpp:140 rc.cpp:159 +#, no-c-format +msgid "Perform queries with Strigi" +msgstr "Hae Strigillä" + +#. i18n: file ./behaviour.ui line 212 +#: behaviour.cpp:141 rc.cpp:162 +#, no-c-format +msgid "" +"Perform queries with Strigi instead of using the first column.\n" +"It needs the Strigi Daemon up and running" +msgstr "" +"Suorittaa haun Strigillä ensisarakkeen käyttämisen sijaan.\n" +"Vaatii Strigi-palvelun olevan toiminnassa." + +#. i18n: file ./behaviour.ui line 222 +#: behaviour.cpp:143 rc.cpp:166 +#, no-c-format +msgid "&Notify recently installed applications (requires kicker restart)" +msgstr "" +"&Huomauta vastikään asennetuista sovelluksista (vaatii Kickerin " +"uudelleenkäynnistyksen)" + +#: dmctl.cpp:345 +msgid "" +"_: user: ...\n" +"%1: TTY login" +msgstr "" + +#: dmctl.cpp:351 +msgid "Unused" +msgstr "Ei käytössä" + +#: dmctl.cpp:353 +msgid "X login on remote host" +msgstr "X-kirjautuminen etäpäätteelle" + +#: dmctl.cpp:354 +#, c-format +msgid "" +"_: ... host\n" +"X login on %1" +msgstr "" + +#: dmctl.cpp:357 +#, fuzzy +msgid "" +"_: user: session type\n" +"%1: %2" +msgstr "käyttäjä: istunnon tyyppi" + +#: dmctl.cpp:372 +#, fuzzy +msgid "" +"_: session (location)\n" +"%1 (%2)" +msgstr "istunto (sijainti)" + +#. i18n: file ./tastytooltipwidget.ui line 16 +#: menu.cpp:167 rc.cpp:3 rc.cpp:13 tastymenu.cpp:184 tastytooltipwidget.cpp:79 +#, no-c-format +msgid "Tasty Menu" +msgstr "Tasty Menu" + +#. i18n: file ./menu.ui line 84 +#: menu.cpp:168 rc.cpp:16 +#, no-c-format +msgid "&Clear list" +msgstr "T&yhjennä luettelo" + +#. i18n: file ./menu.ui line 87 +#: menu.cpp:169 rc.cpp:19 +#, no-c-format +msgid "Alt+C" +msgstr "Alt-C" + +#. i18n: file ./menu.ui line 95 +#: menu.cpp:170 rc.cpp:22 +#, no-c-format +msgid "Se&arch:" +msgstr "&Etsi:" + +#. i18n: file ./menu.ui line 107 +#: menu.cpp:172 rc.cpp:25 +#, no-c-format +msgid "Favourite applications" +msgstr "Suosikkisovellukset" + +#. i18n: file ./menu.ui line 112 +#: menu.cpp:173 rc.cpp:28 +#, no-c-format +msgid "Most used applications" +msgstr "Käytetyimmät sovellukset" + +#. i18n: file ./menu.ui line 117 +#: menu.cpp:174 rc.cpp:31 +#, no-c-format +msgid "Recent applications" +msgstr "Viimeaikaiset sovellukset" + +#. i18n: file ./menu.ui line 122 +#: menu.cpp:175 rc.cpp:34 +#, no-c-format +msgid "Recent documents" +msgstr "Viimeaikaiset asiakirjat" + +#. i18n: file ./menu.ui line 137 +#: menu.cpp:176 rc.cpp:37 +#, no-c-format +msgid "Use this dropdown menu to change the behaviour of the list below" +msgstr "Muuta tästä pudotusvalikosta alla olevan luettelon toimintatapaa" + +#. i18n: file ./menu.ui line 161 +#: menu.cpp:177 menu.cpp:180 rc.cpp:40 rc.cpp:49 +#, no-c-format +msgid "..." +msgstr "..." + +#. i18n: file ./menu.ui line 169 +#: menu.cpp:178 rc.cpp:43 +#, no-c-format +msgid "&Show:" +msgstr "&Näytä:" + +#. i18n: file ./menu.ui line 234 +#: menu.cpp:179 rc.cpp:46 +#, no-c-format +msgid "All Applications" +msgstr "Kaikki sovellukset" + +#. i18n: file ./menu.ui line 259 +#: menu.cpp:181 menuhandler.cpp:463 rc.cpp:52 +#, no-c-format +msgid "Make this menu a normal window" +msgstr "Muuta valikko tavalliseksi ikkunaksi" + +#. i18n: file ./menu.ui line 277 +#: menu.cpp:182 rc.cpp:55 +#, no-c-format +msgid "Ru&n program..." +msgstr "A&ja ohjelma..." + +#. i18n: file ./menu.ui line 283 +#: menu.cpp:184 rc.cpp:61 +#, no-c-format +msgid "" +"If you know exatly how a program is named you can directly enter the " +"application name" +msgstr "" +"Jos tiedät täsmälleen ohjelman nimen, voit kirjoittaa sen suoraan tähän" + +#. i18n: file ./menu.ui line 297 +#: menu.cpp:187 rc.cpp:66 +#, no-c-format +msgid "Start a new session, switch the active user or edit your user profile" +msgstr "" +"Aloita uusi istunto, vaihda käyttäjää tai muokkaa käyttäjätietojasi" + +#. i18n: file ./menu.ui line 305 +#: menu.cpp:188 rc.cpp:69 +#, no-c-format +msgid "L&ock Session" +msgstr "Lu&kitse istunto" + +#. i18n: file ./menu.ui line 311 +#: menu.cpp:190 rc.cpp:75 +#, no-c-format +msgid "Lock the pc with a password if you are going away for a while" +msgstr "Lukitse tietokone salasanalla, jos poistut sen ääreltä hetkeksi" + +#. i18n: file ./menu.ui line 319 +#: menu.cpp:191 rc.cpp:78 +#, no-c-format +msgid "Lo&g Out..." +msgstr "Kirjaudu &ulos..." + +#. i18n: file ./menu.ui line 325 +#: menu.cpp:193 rc.cpp:84 +#, no-c-format +msgid "Logout, reboot or shoutdown the computer" +msgstr "Kirjaudu ulos, käynnistä uudelleen tai sammuta tietokone" + +#: menuhandler.cpp:458 +msgid "Make this window a popup menu" +msgstr "Tee tästä ikkunasta ponnahdusvalikko" + +#: menuhandler.cpp:1426 +msgid "&Edit submenu..." +msgstr "&Muokkaa alivalikko..." + +#: menuhandler.cpp:1429 +msgid "&Edit item..." +msgstr "Muokkaa ko&htaa..." + +#: menuhandler.cpp:1430 +msgid "&Add to desktop" +msgstr "Lisää &työpöydälle" + +#: menuhandler.cpp:1435 +msgid "&Add to favourite applications" +msgstr "Lisää &suosikeihin" + +#: menuhandler.cpp:1437 +msgid "&Remove from favourite applications" +msgstr "&Poista suosikeista" + +#: menuhandler.cpp:1501 +msgid "Edit user profile..." +msgstr "Muokkaa käyttäjätietoja..." + +#: menuhandler.cpp:1507 +msgid "Save current session" +msgstr "Tallenna nykyinen istunto" + +#: menuhandler.cpp:1513 +msgid "Lock session and start a new one" +msgstr "Lukitse istunto ja aloita uusi" + +#: menuhandler.cpp:1514 +msgid "Start New Session" +msgstr "Aloita uusi istunto" + +#: menuhandler.cpp:1567 +msgid "" +"

You have chosen to open another desktop session.
The current session " +"will be hidden and a new login screen will be displayed.
An F-key is " +"assigned to each session; F%1 is usually assigned to the first session, F%2 " +"to the second session and so on. You can switch between sessions by pressing " +"Ctrl, Alt and the appropriate F-key at the same time. Additionally, the KDE " +"Panel and Desktop menus have actions for switching between sessions.

" +msgstr "" +"

Olet avaamassa uutta työpöytäistuntoa.
Nykyinen istunto piilotetaan " +"ja kirjautumisikkuna näytetään.
Jokaiselle istunnolle määrätään " +"F-näppäin; F%1 on yleensä ensimmäinen, F%2 toinen istunto jne. Voit " +"vaihtaa istuntojen välillä painamalla Ctrl-, Alt- ja oikeaa F-näppäintä " +"yhtä aikaa. Lisäksi KDE:n paneelissa ja työpöytävalikossa on istuntojen " +"vaihtamisen toiminnot.

" + +#: menuhandler.cpp:1578 +msgid "Warning - New Session" +msgstr "Varoitus – uusi istunto" + +#: menuhandler.cpp:1579 +msgid "&Start New Session" +msgstr "&Aloita uusi istunto" + +#. i18n: file ./tastytooltipwidget.ui line 83 +#: rc.cpp:6 tastytooltipwidget.cpp:80 +#, no-c-format +msgid "Tasty Menu" +msgstr "Tasty Menu" + +#. i18n: file ./tastytooltipwidget.ui line 91 +#: rc.cpp:9 tastytooltipwidget.cpp:81 +#, no-c-format +msgid "Applications, tasks and desktop sessions" +msgstr "Sovellukset, tehtävät ja työpöytäistunnot" + +#: tastylistview.cpp:288 +msgid "to your favourite applications" +msgstr "suosikkisovelluksiisi" + +#: tastylistview.cpp:292 +msgid "from your favourite applications" +msgstr "suosikkisovelluksistasi" + +#: tastylistview.cpp:296 tastylistview.cpp:313 +msgid "Browse" +msgstr "Selaa" + +#: tastylistview.cpp:300 +msgid "Expand" +msgstr "Laajenna" + +#: tastylistview.cpp:304 +msgid "Collapse" +msgstr "Supista" + +#: tastymenu.cpp:69 tastymenu.cpp:318 +msgid "Menu" +msgstr "Valikko" + +#: tastymenu.cpp:186 +msgid "KMenu replacement" +msgstr "KMenun korvaaja" + +#: tastymenu.cpp:191 +msgid "Maintainer" +msgstr "Ylläpitäjä" + +#: tastymenu.cpp:195 +msgid "_: NAME OF TRANSLATORS\\nYour names" +msgstr "Tommi Nieminen" + +#: tastymenu.cpp:196 +msgid "_: EMAIL OF TRANSLATORS\\nYour emails" +msgstr "translator@legisign.org" + +#: tastymenu.cpp:199 +msgid "For the Russian translation" +msgstr "Venäjännöksestä" + +#: tastymenu.cpp:202 +msgid "For the German translation" +msgstr "Saksannoksesta" + +#: tastymenu.cpp:205 +msgid "For the Spanish translation" +msgstr "Espanjannoksesta" + +#: tastymenu.cpp:208 +#, fuzzy +msgid "For the Ukrainian translation" +msgstr "Saksannoksesta" + +#: tastymenu.cpp:211 +#, fuzzy +msgid "For the French translation" +msgstr "Saksannoksesta" + +#: tastymenu.cpp:214 +#, fuzzy +msgid "For the Finnish translation" +msgstr "Espanjannoksesta" + +#: tastymenu.cpp:217 +#, fuzzy +msgid "For the Slovenian translation" +msgstr "Saksannoksesta" + +#: tastymenu.cpp:220 +#, fuzzy +msgid "For the Polish translation" +msgstr "Espanjannoksesta" + +#: tastymenu.cpp:225 +msgid "For the Switch user code from KDM" +msgstr "KDM:n käyttäjänvaihtokoodista" + +#: tastymenu.cpp:229 +msgid "For some inspirations here and there." +msgstr "Sieltä täältä saaduista vaikutteista." + +#: tastymenu.cpp:233 +msgid "For some code taken from Amarok's statistics list view" +msgstr "Amarokin tilastoluettelonäkymän koodikatkelmista" + +#: tastymenu.cpp:265 +msgid "Behaviour" +msgstr "Toiminta" + +#: tastymenu.cpp:274 tastymenu.cpp:275 +msgid "Toggle Tasty Menu" +msgstr "Vaihda Tasty Menu" + +#: tastymenu.cpp:343 +#, fuzzy, c-format +msgid "" +"_n: There is one new installed application\n" +"There are %n new installed applications" +msgstr "" +"Yksi uusi asennettu sovellus\n" +"%n uutta asennettua sovellusta" + +#: tastymenu.cpp:416 +msgid "&Edit Menu" +msgstr "&Muokkaa valikkoa" + +#: tastymenu.cpp:418 +msgid "&Clear recently installed applications list" +msgstr "T&yhjennä vastikään asennettujen sovellusten luettelo" + +#: tastymenu.cpp:420 +msgid "&Configure Global Shortcuts..." +msgstr "Muo&kkaa yleisiä pikanäppäimiä..." + +#: tastymenu.cpp:421 +msgid "&Configure..." +msgstr "&Asetukset..." + +#~ msgid "Icons size:" +#~ msgstr "Kuvakkeen koko:" + +#~ msgid "user: ..." +#~ msgstr "käyttäjä: ..." + +#~ msgid "... host" +#~ msgstr "... palvelin" + +#~ msgid "new installed applications" +#~ msgstr "uutta asennettua sovellusta" diff --git a/po/fr.po b/po/fr.po new file mode 100644 index 0000000..50dab6e --- /dev/null +++ b/po/fr.po @@ -0,0 +1,806 @@ +# translation of fr.po to Français +# translation of fr.po to +# translation of es.po to +# This file is put in the public domain. +# +# Jesus S Fernandez Prieto , 2007. +# lolo , 2007. +# Lolo , 2007. +msgid "" +msgstr "" +"Project-Id-Version: fr\n" +"POT-Creation-Date: 2007-11-21 19:16+0100\n" +"PO-Revision-Date: 2007-10-27 14:49+0200\n" +"Last-Translator: Lolo \n" +"Language-Team: Français \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Report-Msgid-Bugs-To: \n" +"X-Generator: KBabel 1.11.4\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: _translatorinfo.cpp:1 +msgid "" +"_: NAME OF TRANSLATORS\n" +"Your names" +msgstr "Laurent Hilsz" + +#: _translatorinfo.cpp:3 +msgid "" +"_: EMAIL OF TRANSLATORS\n" +"Your emails" +msgstr "laurent.hilsz at gmail.com" + +#. i18n: file ./behaviour.ui line 16 +#: appearance.cpp:273 behaviour.cpp:114 rc.cpp:87 rc.cpp:172 +#, no-c-format +msgid "Form1" +msgstr "Form1" + +#. i18n: file ./appearance.ui line 32 +#: appearance.cpp:274 appearance.cpp:285 rc.cpp:175 rc.cpp:206 +#, no-c-format +msgid "Applications list" +msgstr "Liste des applications" + +#. i18n: file ./appearance.ui line 43 +#: appearance.cpp:275 rc.cpp:178 +#, no-c-format +msgid "Show tree e&xpanders" +msgstr "Montrer les boutons d'e&xpansion de catégories" + +#. i18n: file ./appearance.ui line 46 +#: appearance.cpp:276 rc.cpp:181 +#, no-c-format +msgid "Alt+X" +msgstr "Alt+X" + +#. i18n: file ./appearance.ui line 57 +#: appearance.cpp:277 rc.cpp:184 +#, no-c-format +msgid "Alwa&ys collapsed categories" +msgstr "Ne pas développer les catégories" + +#. i18n: file ./behaviour.ui line 94 +#: appearance.cpp:278 behaviour.cpp:120 rc.cpp:105 rc.cpp:187 +#, no-c-format +msgid "Alt+Y" +msgstr "Alt+Y" + +#. i18n: file ./appearance.ui line 68 +#: appearance.cpp:279 rc.cpp:190 +#, no-c-format +msgid "Hei&ght:" +msgstr "H&auteur :" + +#. i18n: file ./appearance.ui line 82 +#: appearance.cpp:280 rc.cpp:193 +#, no-c-format +msgid "Button label:" +msgstr "Étiquette du bouton :" + +#. i18n: file ./appearance.ui line 111 +#: appearance.cpp:281 rc.cpp:196 +#, no-c-format +msgid "" +"What text should be displayed in the Kicker button tooltip instead of " +"\"Tasty Menu\".\n" +"Empty means default." +msgstr "" +"Texte qui doit être montré dans le bouton Kicker au lieu \"Tasty " +"Menu\".
Vide met le texte par défaut." + +#. i18n: file ./appearance.ui line 119 +#: appearance.cpp:283 rc.cpp:200 +#, no-c-format +msgid "Wi&dth:" +msgstr "Largeur :" + +#. i18n: file ./appearance.ui line 133 +#: appearance.cpp:284 rc.cpp:203 +#, no-c-format +msgid "Tootip title:" +msgstr "Titre du tooltip :" + +#. i18n: file ./appearance.ui line 160 +#: appearance.cpp:286 rc.cpp:209 +#, no-c-format +msgid "of the screen width" +msgstr "de la largeur de l'écran" + +#. i18n: file ./appearance.ui line 173 +#: appearance.cpp:287 rc.cpp:212 +#, no-c-format +msgid "Menu button" +msgstr "Bouton du menu" + +#. i18n: file ./appearance.ui line 184 +#: appearance.cpp:288 rc.cpp:215 +#, no-c-format +msgid "of the screen height" +msgstr "de la hauteur de l'écran" + +#. i18n: file ./appearance.ui line 220 +#: appearance.cpp:290 rc.cpp:219 +#, no-c-format +msgid "&Icon:" +msgstr "&Icône:" + +#. i18n: file ./appearance.ui line 223 +#: appearance.cpp:291 rc.cpp:222 +#, no-c-format +msgid "Alt+I" +msgstr "Alt+I" + +#. i18n: file ./appearance.ui line 246 +#: appearance.cpp:293 rc.cpp:226 +#, no-c-format +msgid "" +"What icon should be displayed in the kicker button instead of the KMenu " +"one.\n" +"Empty means default." +msgstr "" +"Icône Kicker qui doit être montrée au lieu du bouton par défaut " +"deKMenu.
Vide met le bouton par défaut." + +#. i18n: file ./appearance.ui line 262 +#: appearance.cpp:295 rc.cpp:230 +#, no-c-format +msgid "N&one" +msgstr "Aucun&n" + +#. i18n: file ./menu.ui line 308 +#: appearance.cpp:296 behaviour.cpp:117 menu.cpp:189 rc.cpp:72 rc.cpp:96 +#: rc.cpp:233 +#, no-c-format +msgid "Alt+O" +msgstr "Alt+O" + +#. i18n: file ./appearance.ui line 280 +#: appearance.cpp:297 rc.cpp:236 +#, no-c-format +msgid "Menu size" +msgstr "Dimension du menu" + +#. i18n: file ./appearance.ui line 291 +#: appearance.cpp:298 rc.cpp:239 +#, no-c-format +msgid "&Action icons size:" +msgstr "Dimension des bouton d'&action :" + +#. i18n: file ./appearance.ui line 305 +#: appearance.cpp:299 rc.cpp:242 +#, no-c-format +msgid "&Display applications descriptions" +msgstr "Afficher la description des applications" + +#. i18n: file ./appearance.ui line 308 +#: appearance.cpp:300 rc.cpp:245 +#, no-c-format +msgid "Alt+D" +msgstr "Alt+D" + +#. i18n: file ./appearance.ui line 344 +#: appearance.cpp:302 rc.cpp:249 +#, no-c-format +msgid "&Text:" +msgstr "&Texte :" + +#. i18n: file ./appearance.ui line 347 +#: appearance.cpp:303 rc.cpp:252 +#, no-c-format +msgid "Alt+T" +msgstr "Alt+T" + +#. i18n: file ./appearance.ui line 362 +#: appearance.cpp:305 rc.cpp:256 +#, no-c-format +msgid "" +"What label instead of \"Menu\" should be shown for the Kicker button.\n" +"Empty means default." +msgstr "" +"Etiquette qui doit remplacer \"Menu\" pour bouton Kicker\n" +"Vacio pone la etiqueta por defecto." + +#. i18n: file ./appearance.ui line 370 +#: appearance.cpp:307 rc.cpp:260 +#, no-c-format +msgid "&None" +msgstr "Aucu&ne" + +#. i18n: file ./menu.ui line 280 +#: appearance.cpp:308 behaviour.cpp:144 menu.cpp:183 rc.cpp:58 rc.cpp:169 +#: rc.cpp:263 +#, no-c-format +msgid "Alt+N" +msgstr "Alt+N" + +#. i18n: file ./appearance.ui line 383 +#: appearance.cpp:309 appearance.cpp:310 rc.cpp:266 rc.cpp:269 +#, no-c-format +msgid "%" +msgstr "%" + +#. i18n: file ./appearance.ui line 417 +#: appearance.cpp:311 rc.cpp:272 +#, no-c-format +msgid "Button icon:" +msgstr "Icône du bouton :" + +#. i18n: file ./appearance.ui line 453 +#: appearance.cpp:312 rc.cpp:275 +#, no-c-format +msgid "third column:" +msgstr "3ème colonne :" + +#. i18n: file ./appearance.ui line 461 +#: appearance.cpp:313 rc.cpp:278 +#, no-c-format +msgid "second column:" +msgstr "2ème colonne :" + +#. i18n: file ./appearance.ui line 469 +#: appearance.cpp:314 appearance.cpp:315 appearance.cpp:316 appearance.cpp:319 +#: rc.cpp:281 rc.cpp:284 rc.cpp:287 rc.cpp:296 +#, no-c-format +msgid " pixels" +msgstr " pixels" + +#. i18n: file ./appearance.ui line 520 +#: appearance.cpp:317 rc.cpp:290 +#, no-c-format +msgid "first column:" +msgstr "1ère colonne :" + +#. i18n: file ./appearance.ui line 538 +#: appearance.cpp:318 rc.cpp:293 +#, no-c-format +msgid "Icons si&zes:" +msgstr "Tailles des icônes :" + +#. i18n: file ./behaviour.ui line 32 +#: behaviour.cpp:115 rc.cpp:90 +#, no-c-format +msgid "General behaviour" +msgstr "Comportement général" + +#. i18n: file ./behaviour.ui line 60 +#: behaviour.cpp:116 rc.cpp:93 +#, no-c-format +msgid "&Override alt+F1 keyboard shortcut (requires kicker restart)" +msgstr "" +"Changer le raccourci clavier alt+F1 (redémarrage de Kicker nécessaire)" + +#. i18n: file ./behaviour.ui line 66 +#: behaviour.cpp:118 rc.cpp:99 +#, no-c-format +msgid "" +"Pops up Tasty Menu instead of KMenu when the shortcut sequence Alt+F1 is " +"pressed" +msgstr "" +"Afficher le menu contextuel de Tasty Menu au lieu de KMenu lorsque Alt+F1 " +"est pressé " + +#. i18n: file ./behaviour.ui line 91 +#: behaviour.cpp:119 rc.cpp:102 +#, no-c-format +msgid "Show save session functionalit&y" +msgstr "Afficher la fonction de sauvegarde de session" + +#. i18n: file ./behaviour.ui line 98 +#: behaviour.cpp:121 rc.cpp:108 +#, no-c-format +msgid "" +"Under the menu that pops up when the button with user name is pressed a new " +"item \"Save current session\" is added.\n" +"It saves the current session informations like open applications and windows " +"position. In order to use it you must set \"Restore manually saved session\" " +"in the Session Manager Kcontrol module." +msgstr "" +"Lorsque le bouton, montrant le nom de l'utilisateur, est pressé, un " +"nouvelle intitulé \"Sauver la session courante\" est ajouté au menu qui " +"apparait.\n" +"Il permet de sauvegarder les informations de la session courante " +"(applications ouvertes et positions des fenêtres). Pour utiliser cette " +"fonctionnalité, l'option \"Restaurer manuellement la session sauvegardée\" " +"doit être activée dans le module KControl de gestion de session." + +#. i18n: file ./behaviour.ui line 106 +#: behaviour.cpp:123 rc.cpp:112 +#, no-c-format +msgid "&Hide groups with only one application" +msgstr "Cac&her les groupes avec seulement une application" + +#. i18n: file ./behaviour.ui line 109 +#: behaviour.cpp:124 rc.cpp:115 +#, no-c-format +msgid "Alt+H" +msgstr "Alt+H" + +#. i18n: file ./behaviour.ui line 120 +#: behaviour.cpp:125 rc.cpp:118 +#, no-c-format +msgid "Show items in alpha&betical order" +msgstr "Afficher les éléments dans l'ordre alpha&bétique" + +#. i18n: file ./behaviour.ui line 123 +#: behaviour.cpp:126 rc.cpp:121 +#, no-c-format +msgid "Alt+B" +msgstr "Alt+B" + +#. i18n: file ./behaviour.ui line 136 +#: behaviour.cpp:127 rc.cpp:124 +#, no-c-format +msgid "Search field behaviour" +msgstr "Comportement de la recherche de champs" + +#. i18n: file ./behaviour.ui line 164 +#: behaviour.cpp:129 rc.cpp:128 +#, no-c-format +msgid "Si&mple searches" +msgstr "Recherche si&mple" + +#. i18n: file ./behaviour.ui line 167 +#: behaviour.cpp:130 rc.cpp:131 +#, no-c-format +msgid "Alt+M" +msgstr "Alt+M" + +#. i18n: file ./behaviour.ui line 173 +#: behaviour.cpp:131 rc.cpp:134 +#, no-c-format +msgid "Filters the applications list" +msgstr "Filtre la liste des applications" + +#. i18n: file ./behaviour.ui line 176 +#: behaviour.cpp:132 rc.cpp:137 +#, no-c-format +msgid "" +"It displays in the first column all the applications whose name or " +"description matches with the query you entered" +msgstr "" +"Montre dans la première colonne toutes les applications dont le nom ou la " +"description correspondent à la recherche demandée" + +#. i18n: file ./behaviour.ui line 184 +#: behaviour.cpp:133 rc.cpp:140 +#, no-c-format +msgid "&Kerry Beagle integration" +msgstr "Intégration avec &Kerry Beagle" + +#. i18n: file ./behaviour.ui line 187 +#: behaviour.cpp:134 rc.cpp:143 +#, no-c-format +msgid "Alt+K" +msgstr "Alt+K" + +#. i18n: file ./behaviour.ui line 190 +#: behaviour.cpp:135 rc.cpp:146 +#, no-c-format +msgid "Perform queries with Kerry Beagle" +msgstr "Rechercher avec Kerry Beagle" + +#. i18n: file ./behaviour.ui line 194 +#: behaviour.cpp:136 rc.cpp:149 +#, no-c-format +msgid "" +"Perform queries with Kerry Beagle instead of using the first column.\n" +"It needs Kerry Beagle up and running." +msgstr "" +"Rechercher avec Kerry Beagle au lieu d'utiliser la première colonne.\n" +"Kerry et Beagle doivent être chargés." + +#. i18n: file ./behaviour.ui line 202 +#: behaviour.cpp:138 rc.cpp:153 +#, no-c-format +msgid "Stri&gi Integration" +msgstr "Intégration avec Stri&gi" + +#. i18n: file ./menu.ui line 322 +#: behaviour.cpp:139 menu.cpp:192 rc.cpp:81 rc.cpp:156 +#, no-c-format +msgid "Alt+G" +msgstr "Alt+G" + +#. i18n: file ./behaviour.ui line 208 +#: behaviour.cpp:140 rc.cpp:159 +#, no-c-format +msgid "Perform queries with Strigi" +msgstr "Rechercher avec Strigi" + +#. i18n: file ./behaviour.ui line 212 +#: behaviour.cpp:141 rc.cpp:162 +#, no-c-format +msgid "" +"Perform queries with Strigi instead of using the first column.\n" +"It needs the Strigi Daemon up and running" +msgstr "" +"Rechercher avec Strigi au lieu d'utiliser la première colonne.\n" +"Le démon Strigi doit être chargé." + +#. i18n: file ./behaviour.ui line 222 +#: behaviour.cpp:143 rc.cpp:166 +#, no-c-format +msgid "&Notify recently installed applications (requires kicker restart)" +msgstr "" +"&Notifier les applications récemment installées (redémarrage de Kicker " +"nécessaire)." + +#: dmctl.cpp:345 +msgid "" +"_: user: ...\n" +"%1: TTY login" +msgstr "" + +#: dmctl.cpp:351 +msgid "Unused" +msgstr "Inutilisé" + +#: dmctl.cpp:353 +msgid "X login on remote host" +msgstr "Identification sur un serveur X distant" + +#: dmctl.cpp:354 +#, c-format +msgid "" +"_: ... host\n" +"X login on %1" +msgstr "" + +#: dmctl.cpp:357 +#, fuzzy +msgid "" +"_: user: session type\n" +"%1: %2" +msgstr "utilisateur : type de session" + +#: dmctl.cpp:372 +#, fuzzy +msgid "" +"_: session (location)\n" +"%1 (%2)" +msgstr "session (emplacement)" + +#. i18n: file ./tastytooltipwidget.ui line 16 +#: menu.cpp:167 rc.cpp:3 rc.cpp:13 tastymenu.cpp:184 tastytooltipwidget.cpp:79 +#, no-c-format +msgid "Tasty Menu" +msgstr "Tasty Menu" + +#. i18n: file ./menu.ui line 84 +#: menu.cpp:168 rc.cpp:16 +#, no-c-format +msgid "&Clear list" +msgstr "Effa&cer la liste" + +#. i18n: file ./menu.ui line 87 +#: menu.cpp:169 rc.cpp:19 +#, no-c-format +msgid "Alt+C" +msgstr "Alt+C" + +#. i18n: file ./menu.ui line 95 +#: menu.cpp:170 rc.cpp:22 +#, no-c-format +msgid "Se&arch:" +msgstr "Recherche" + +#. i18n: file ./menu.ui line 107 +#: menu.cpp:172 rc.cpp:25 +#, no-c-format +msgid "Favourite applications" +msgstr "Applications favorites" + +#. i18n: file ./menu.ui line 112 +#: menu.cpp:173 rc.cpp:28 +#, no-c-format +msgid "Most used applications" +msgstr "Applications les plus utilisées" + +#. i18n: file ./menu.ui line 117 +#: menu.cpp:174 rc.cpp:31 +#, no-c-format +msgid "Recent applications" +msgstr "Applications récentes" + +#. i18n: file ./menu.ui line 122 +#: menu.cpp:175 rc.cpp:34 +#, no-c-format +msgid "Recent documents" +msgstr "Documents récents" + +#. i18n: file ./menu.ui line 137 +#: menu.cpp:176 rc.cpp:37 +#, no-c-format +msgid "Use this dropdown menu to change the behaviour of the list below" +msgstr "" +"Employer ce menu déroulant pour changer le comportement de la liste " +"ci-dessous" + +#. i18n: file ./menu.ui line 161 +#: menu.cpp:177 menu.cpp:180 rc.cpp:40 rc.cpp:49 +#, no-c-format +msgid "..." +msgstr "..." + +#. i18n: file ./menu.ui line 169 +#: menu.cpp:178 rc.cpp:43 +#, no-c-format +msgid "&Show:" +msgstr "Montrer :" + +#. i18n: file ./menu.ui line 234 +#: menu.cpp:179 rc.cpp:46 +#, no-c-format +msgid "All Applications" +msgstr "Toutes les applications" + +#. i18n: file ./menu.ui line 259 +#: menu.cpp:181 menuhandler.cpp:463 rc.cpp:52 +#, no-c-format +msgid "Make this menu a normal window" +msgstr "Faire de ce menu une fenêtre normale" + +#. i18n: file ./menu.ui line 277 +#: menu.cpp:182 rc.cpp:55 +#, no-c-format +msgid "Ru&n program..." +msgstr "La&ncer une application..." + +#. i18n: file ./menu.ui line 283 +#: menu.cpp:184 rc.cpp:61 +#, no-c-format +msgid "" +"If you know exatly how a program is named you can directly enter the " +"application name" +msgstr "" +"Si vous connaissez exactement le nom d'un programme, vous pouvez directement " +"entrer ce nom" + +#. i18n: file ./menu.ui line 297 +#: menu.cpp:187 rc.cpp:66 +#, no-c-format +msgid "Start a new session, switch the active user or edit your user profile" +msgstr "" +"Commencer une nouvelle session, commuter l'utilisateur actif ou éditer " +"votre profil d'utilisateur" + +#. i18n: file ./menu.ui line 305 +#: menu.cpp:188 rc.cpp:69 +#, no-c-format +msgid "L&ock Session" +msgstr "Verrouiller la session" + +#. i18n: file ./menu.ui line 311 +#: menu.cpp:190 rc.cpp:75 +#, no-c-format +msgid "Lock the pc with a password if you are going away for a while" +msgstr "Verrouiller l'ordinateur avec un mot de passe si vous partez un moment" + +#. i18n: file ./menu.ui line 319 +#: menu.cpp:191 rc.cpp:78 +#, no-c-format +msgid "Lo&g Out..." +msgstr "Fermer la session ..." + +#. i18n: file ./menu.ui line 325 +#: menu.cpp:193 rc.cpp:84 +#, no-c-format +msgid "Logout, reboot or shoutdown the computer" +msgstr "Clore la session, redémarrer ou éteindre l'ordinateur" + +#: menuhandler.cpp:458 +msgid "Make this window a popup menu" +msgstr "Transformer cette fenêtre en menu contextuel" + +#: menuhandler.cpp:1426 +msgid "&Edit submenu..." +msgstr "&Editer le sous-menu" + +#: menuhandler.cpp:1429 +msgid "&Edit item..." +msgstr "&Editer l'élément..." + +#: menuhandler.cpp:1430 +msgid "&Add to desktop" +msgstr "&Ajouter au bureau" + +#: menuhandler.cpp:1435 +msgid "&Add to favourite applications" +msgstr "&Ajouter à vos applications favorites" + +#: menuhandler.cpp:1437 +msgid "&Remove from favourite applications" +msgstr "Supp&rimer de vos applications favorites" + +#: menuhandler.cpp:1501 +msgid "Edit user profile..." +msgstr "Editer le profile utilisateur ..." + +#: menuhandler.cpp:1507 +msgid "Save current session" +msgstr "Sauvegarder la session en cours" + +#: menuhandler.cpp:1513 +msgid "Lock session and start a new one" +msgstr "Verrouiller la session et ouvrir une nouvelle" + +#: menuhandler.cpp:1514 +msgid "Start New Session" +msgstr "Ouvrir une nouvelle session" + +#: menuhandler.cpp:1567 +msgid "" +"

You have chosen to open another desktop session.
The current session " +"will be hidden and a new login screen will be displayed.
An F-key is " +"assigned to each session; F%1 is usually assigned to the first session, F%2 " +"to the second session and so on. You can switch between sessions by pressing " +"Ctrl, Alt and the appropriate F-key at the same time. Additionally, the KDE " +"Panel and Desktop menus have actions for switching between sessions.

" +msgstr "" +"

Vous avez choisi d'ouvrir une nouvelle session.
La session en cours va " +"être cachée et un nouvelle écran de connexion va apparaître.
Une " +"touche F est associée à chaque session; F%1 est normalement associé à la " +"première session, F%2 à la seconde et ainsi de suite. Le basculement entre " +"sessions s'effectue à l'aide de la combinaison des touches Ctrl, Alt et " +"F%x. De plus, le tableau de bord KDE et le bureau offrent des menus " +"permettant la bascule rapide entre session.

" + +#: menuhandler.cpp:1578 +msgid "Warning - New Session" +msgstr "Avertissement - Nouvelle session" + +#: menuhandler.cpp:1579 +msgid "&Start New Session" +msgstr "Démarrer une nouvelle session" + +#. i18n: file ./tastytooltipwidget.ui line 83 +#: rc.cpp:6 tastytooltipwidget.cpp:80 +#, no-c-format +msgid "Tasty Menu" +msgstr "Tasty Menu" + +#. i18n: file ./tastytooltipwidget.ui line 91 +#: rc.cpp:9 tastytooltipwidget.cpp:81 +#, no-c-format +msgid "Applications, tasks and desktop sessions" +msgstr "Applications, tâches et sessions du bureau" + +#: tastylistview.cpp:288 +msgid "to your favourite applications" +msgstr "à vos applications favorites" + +#: tastylistview.cpp:292 +msgid "from your favourite applications" +msgstr "de vos applications favorites" + +#: tastylistview.cpp:296 tastylistview.cpp:313 +msgid "Browse" +msgstr "Parcourir" + +#: tastylistview.cpp:300 +msgid "Expand" +msgstr "Développer" + +#: tastylistview.cpp:304 +msgid "Collapse" +msgstr "Réduire" + +#: tastymenu.cpp:69 tastymenu.cpp:318 +msgid "Menu" +msgstr "Menu" + +#: tastymenu.cpp:186 +msgid "KMenu replacement" +msgstr "Remplacement de KMenu" + +#: tastymenu.cpp:191 +msgid "Maintainer" +msgstr "Mainteneur" + +#: tastymenu.cpp:195 +msgid "_: NAME OF TRANSLATORS\\nYour names" +msgstr "_: NOM DU TRADUCTEUR\\nLaurent Hilsz" + +#: tastymenu.cpp:196 +msgid "_: EMAIL OF TRANSLATORS\\nYour emails" +msgstr "_: EMAIL DU TRADUCTEUR\\nlaurent.hilsz@gmail.com" + +#: tastymenu.cpp:199 +msgid "For the Russian translation" +msgstr "Pour la traduction russe" + +#: tastymenu.cpp:202 +msgid "For the German translation" +msgstr "Pour la traduction allemande" + +#: tastymenu.cpp:205 +msgid "For the Spanish translation" +msgstr "Pour la traduction espagnole" + +#: tastymenu.cpp:208 +#, fuzzy +msgid "For the Ukrainian translation" +msgstr "Pour la traduction allemande" + +#: tastymenu.cpp:211 +#, fuzzy +msgid "For the French translation" +msgstr "Pour la traduction allemande" + +#: tastymenu.cpp:214 +#, fuzzy +msgid "For the Finnish translation" +msgstr "Pour la traduction espagnole" + +#: tastymenu.cpp:217 +#, fuzzy +msgid "For the Slovenian translation" +msgstr "Pour la traduction allemande" + +#: tastymenu.cpp:220 +#, fuzzy +msgid "For the Polish translation" +msgstr "Pour la traduction espagnole" + +#: tastymenu.cpp:225 +msgid "For the Switch user code from KDM" +msgstr "Pour la codage du changement d'utilisateur via KDM" + +#: tastymenu.cpp:229 +msgid "For some inspirations here and there." +msgstr "Pour quelques inspirations ici et là." + +#: tastymenu.cpp:233 +msgid "For some code taken from Amarok's statistics list view" +msgstr "" +"Pour quelques bouts de code empruntés de la vue en liste des statistiques " +"d'Amarok" + +#: tastymenu.cpp:265 +msgid "Behaviour" +msgstr "Comportement" + +#: tastymenu.cpp:274 tastymenu.cpp:275 +msgid "Toggle Tasty Menu" +msgstr "Activer/désactiver Tasty Menu" + +#: tastymenu.cpp:343 +#, fuzzy, c-format +msgid "" +"_n: There is one new installed application\n" +"There are %n new installed applications" +msgstr "Une nouvelle application a été installée" + +#: tastymenu.cpp:416 +msgid "&Edit Menu" +msgstr "&Editer le menu" + +#: tastymenu.cpp:418 +msgid "&Clear recently installed applications list" +msgstr "Effa&cer la liste des applications récemment installées" + +#: tastymenu.cpp:420 +msgid "&Configure Global Shortcuts..." +msgstr "&Configurer les raccourcis clavier globaux ..." + +#: tastymenu.cpp:421 +msgid "&Configure..." +msgstr "&Configurer ..." + +#~ msgid "Icons size:" +#~ msgstr "Taille des icônes :" + +#~ msgid "user: ..." +#~ msgstr "utilisateur : ..." + +#~ msgid "... host" +#~ msgstr "... hôte" + +#~ msgid "There are" +#~ msgstr "Il y a " + +#~ msgid "new installed applications" +#~ msgstr "de nouvelles applications installées" diff --git a/po/it.po b/po/it.po new file mode 100644 index 0000000..afb8a13 --- /dev/null +++ b/po/it.po @@ -0,0 +1,778 @@ +# translation of it.po to italian +# Marco Martin , 2007. +# Tasty Menu italian translation +# (c) 2007 Marco Martin +msgid "" +msgstr "" +"Project-Id-Version: it\n" +"POT-Creation-Date: 2007-11-21 19:16+0100\n" +"PO-Revision-Date: 2007-10-15 20:55+0200\n" +"Last-Translator: Marco Martin \n" +"Language-Team: italian\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Report-Msgid-Bugs-To: \n" +"X-Generator: KBabel 1.11.4\n" + +#: _translatorinfo.cpp:1 +msgid "" +"_: NAME OF TRANSLATORS\n" +"Your names" +msgstr "Marco Martin" + +#: _translatorinfo.cpp:3 +msgid "" +"_: EMAIL OF TRANSLATORS\n" +"Your emails" +msgstr "notmart@gmail.com" + +#. i18n: file ./behaviour.ui line 16 +#: appearance.cpp:273 behaviour.cpp:114 rc.cpp:87 rc.cpp:172 +#, no-c-format +msgid "Form1" +msgstr "Form1" + +#. i18n: file ./appearance.ui line 32 +#: appearance.cpp:274 appearance.cpp:285 rc.cpp:175 rc.cpp:206 +#, no-c-format +msgid "Applications list" +msgstr "Lista delle applicazioni" + +#. i18n: file ./appearance.ui line 43 +#: appearance.cpp:275 rc.cpp:178 +#, no-c-format +msgid "Show tree e&xpanders" +msgstr "Mostra le icone di espansione dell'albero" + +#. i18n: file ./appearance.ui line 46 +#: appearance.cpp:276 rc.cpp:181 +#, no-c-format +msgid "Alt+X" +msgstr "Alt+X" + +#. i18n: file ./appearance.ui line 57 +#: appearance.cpp:277 rc.cpp:184 +#, no-c-format +msgid "Alwa&ys collapsed categories" +msgstr "&Categorie sempre chiuse" + +#. i18n: file ./behaviour.ui line 94 +#: appearance.cpp:278 behaviour.cpp:120 rc.cpp:105 rc.cpp:187 +#, no-c-format +msgid "Alt+Y" +msgstr "Alt+Y" + +#. i18n: file ./appearance.ui line 68 +#: appearance.cpp:279 rc.cpp:190 +#, no-c-format +msgid "Hei&ght:" +msgstr "&Altezza" + +#. i18n: file ./appearance.ui line 82 +#: appearance.cpp:280 rc.cpp:193 +#, no-c-format +msgid "Button label:" +msgstr "Etichetta del pulsante:" + +#. i18n: file ./appearance.ui line 111 +#: appearance.cpp:281 rc.cpp:196 +#, no-c-format +msgid "" +"What text should be displayed in the Kicker button tooltip instead of " +"\"Tasty Menu\".\n" +"Empty means default." +msgstr "" +"Quale testo dovrebbe essere mostrato nel tooltip anzichè \"Tasty Menu\"" + +#. i18n: file ./appearance.ui line 119 +#: appearance.cpp:283 rc.cpp:200 +#, no-c-format +msgid "Wi&dth:" +msgstr "&Larghezza" + +#. i18n: file ./appearance.ui line 133 +#: appearance.cpp:284 rc.cpp:203 +#, no-c-format +msgid "Tootip title:" +msgstr "Titolo del tooltip:" + +#. i18n: file ./appearance.ui line 160 +#: appearance.cpp:286 rc.cpp:209 +#, no-c-format +msgid "of the screen width" +msgstr "della larghezza dello schermo" + +#. i18n: file ./appearance.ui line 173 +#: appearance.cpp:287 rc.cpp:212 +#, no-c-format +msgid "Menu button" +msgstr "Pulsante del menu" + +#. i18n: file ./appearance.ui line 184 +#: appearance.cpp:288 rc.cpp:215 +#, no-c-format +msgid "of the screen height" +msgstr "dell'altezza dello schermo" + +#. i18n: file ./appearance.ui line 220 +#: appearance.cpp:290 rc.cpp:219 +#, no-c-format +msgid "&Icon:" +msgstr "&Icona:" + +#. i18n: file ./appearance.ui line 223 +#: appearance.cpp:291 rc.cpp:222 +#, no-c-format +msgid "Alt+I" +msgstr "Alt+I" + +#. i18n: file ./appearance.ui line 246 +#: appearance.cpp:293 rc.cpp:226 +#, no-c-format +msgid "" +"What icon should be displayed in the kicker button instead of the KMenu " +"one.\n" +"Empty means default." +msgstr "" +"Quale icona dovrebbe essere mostrata nel pulsante di Kicker invece che " +"quella di Kmenu. Vuoto significa quella predefinita" + +#. i18n: file ./appearance.ui line 262 +#: appearance.cpp:295 rc.cpp:230 +#, no-c-format +msgid "N&one" +msgstr "&Nessuno" + +#. i18n: file ./menu.ui line 308 +#: appearance.cpp:296 behaviour.cpp:117 menu.cpp:189 rc.cpp:72 rc.cpp:96 +#: rc.cpp:233 +#, no-c-format +msgid "Alt+O" +msgstr "Alt+O" + +#. i18n: file ./appearance.ui line 280 +#: appearance.cpp:297 rc.cpp:236 +#, no-c-format +msgid "Menu size" +msgstr "Dimensioni del menu" + +#. i18n: file ./appearance.ui line 291 +#: appearance.cpp:298 rc.cpp:239 +#, no-c-format +msgid "&Action icons size:" +msgstr "dimensione delle icone delle &azioni" + +#. i18n: file ./appearance.ui line 305 +#: appearance.cpp:299 rc.cpp:242 +#, no-c-format +msgid "&Display applications descriptions" +msgstr "&Mostra le descrizioni delle applicazioni" + +#. i18n: file ./appearance.ui line 308 +#: appearance.cpp:300 rc.cpp:245 +#, no-c-format +msgid "Alt+D" +msgstr "Alt+D" + +#. i18n: file ./appearance.ui line 344 +#: appearance.cpp:302 rc.cpp:249 +#, no-c-format +msgid "&Text:" +msgstr "&Testo:" + +#. i18n: file ./appearance.ui line 347 +#: appearance.cpp:303 rc.cpp:252 +#, no-c-format +msgid "Alt+T" +msgstr "Alt+T" + +#. i18n: file ./appearance.ui line 362 +#: appearance.cpp:305 rc.cpp:256 +#, no-c-format +msgid "" +"What label instead of \"Menu\" should be shown for the Kicker button.\n" +"Empty means default." +msgstr "" +"L'etichetta che si vuole mostrare nel pulsante di Kicker anzichè \"Menu\"" + +#. i18n: file ./appearance.ui line 370 +#: appearance.cpp:307 rc.cpp:260 +#, no-c-format +msgid "&None" +msgstr "&Nessuno" + +#. i18n: file ./menu.ui line 280 +#: appearance.cpp:308 behaviour.cpp:144 menu.cpp:183 rc.cpp:58 rc.cpp:169 +#: rc.cpp:263 +#, no-c-format +msgid "Alt+N" +msgstr "Alt+N" + +#. i18n: file ./appearance.ui line 383 +#: appearance.cpp:309 appearance.cpp:310 rc.cpp:266 rc.cpp:269 +#, no-c-format +msgid "%" +msgstr "%" + +#. i18n: file ./appearance.ui line 417 +#: appearance.cpp:311 rc.cpp:272 +#, no-c-format +msgid "Button icon:" +msgstr "Icona del pulsante" + +#. i18n: file ./appearance.ui line 453 +#: appearance.cpp:312 rc.cpp:275 +#, no-c-format +msgid "third column:" +msgstr "terza colonna:" + +#. i18n: file ./appearance.ui line 461 +#: appearance.cpp:313 rc.cpp:278 +#, no-c-format +msgid "second column:" +msgstr "seconda colonna:" + +#. i18n: file ./appearance.ui line 469 +#: appearance.cpp:314 appearance.cpp:315 appearance.cpp:316 appearance.cpp:319 +#: rc.cpp:281 rc.cpp:284 rc.cpp:287 rc.cpp:296 +#, no-c-format +msgid " pixels" +msgstr "pixel" + +#. i18n: file ./appearance.ui line 520 +#: appearance.cpp:317 rc.cpp:290 +#, no-c-format +msgid "first column:" +msgstr "prima colonna:" + +#. i18n: file ./appearance.ui line 538 +#: appearance.cpp:318 rc.cpp:293 +#, no-c-format +msgid "Icons si&zes:" +msgstr "dimensione ic&one" + +#. i18n: file ./behaviour.ui line 32 +#: behaviour.cpp:115 rc.cpp:90 +#, no-c-format +msgid "General behaviour" +msgstr "Comportamento generale" + +#. i18n: file ./behaviour.ui line 60 +#: behaviour.cpp:116 rc.cpp:93 +#, no-c-format +msgid "&Override alt+F1 keyboard shortcut (requires kicker restart)" +msgstr "&Riassegna la scorciatoia alt+F1 (richiede il riavvio di kicker)" + +#. i18n: file ./behaviour.ui line 66 +#: behaviour.cpp:118 rc.cpp:99 +#, no-c-format +msgid "" +"Pops up Tasty Menu instead of KMenu when the shortcut sequence Alt+F1 is " +"pressed" +msgstr "Mostra Tasty Menu invece di KMenu quando si preme Alt+F1" + +#. i18n: file ./behaviour.ui line 91 +#: behaviour.cpp:119 rc.cpp:102 +#, no-c-format +msgid "Show save session functionalit&y" +msgstr "Mostra la funzione per il salvataggio della sesisone" + +#. i18n: file ./behaviour.ui line 98 +#: behaviour.cpp:121 rc.cpp:108 +#, no-c-format +msgid "" +"Under the menu that pops up when the button with user name is pressed a new " +"item \"Save current session\" is added.\n" +"It saves the current session informations like open applications and windows " +"position. In order to use it you must set \"Restore manually saved session\" " +"in the Session Manager Kcontrol module." +msgstr "" +"Viene aggiunta la nuova voce \"Salva la sessione corrente\" nel menu " +"dell'utente. Questa funzione salva le informazioni sulla sessione come le " +"finestre aperte e la loro posizione. Per poterlo usare devi settare " +"\"Ripristina la sessione salvata manualmente\" nel modulo per la gestione " +"delle sessioni di Kcontrol." + +#. i18n: file ./behaviour.ui line 106 +#: behaviour.cpp:123 rc.cpp:112 +#, no-c-format +msgid "&Hide groups with only one application" +msgstr "&Nascondi i gruppi che contengono una nuova applicazione" + +#. i18n: file ./behaviour.ui line 109 +#: behaviour.cpp:124 rc.cpp:115 +#, no-c-format +msgid "Alt+H" +msgstr "Alt+H" + +#. i18n: file ./behaviour.ui line 120 +#: behaviour.cpp:125 rc.cpp:118 +#, no-c-format +msgid "Show items in alpha&betical order" +msgstr "Mostra gli elementi in ordine alfa&betico" + +#. i18n: file ./behaviour.ui line 123 +#: behaviour.cpp:126 rc.cpp:121 +#, no-c-format +msgid "Alt+B" +msgstr "Alt+D" + +#. i18n: file ./behaviour.ui line 136 +#: behaviour.cpp:127 rc.cpp:124 +#, no-c-format +msgid "Search field behaviour" +msgstr "Comportamento del campo di ricerca" + +#. i18n: file ./behaviour.ui line 164 +#: behaviour.cpp:129 rc.cpp:128 +#, no-c-format +msgid "Si&mple searches" +msgstr "&Ricerca Semplice" + +#. i18n: file ./behaviour.ui line 167 +#: behaviour.cpp:130 rc.cpp:131 +#, no-c-format +msgid "Alt+M" +msgstr "Alt+M" + +#. i18n: file ./behaviour.ui line 173 +#: behaviour.cpp:131 rc.cpp:134 +#, no-c-format +msgid "Filters the applications list" +msgstr "Filtra la lista delle applicazioni" + +#. i18n: file ./behaviour.ui line 176 +#: behaviour.cpp:132 rc.cpp:137 +#, no-c-format +msgid "" +"It displays in the first column all the applications whose name or " +"description matches with the query you entered" +msgstr "" +"Mostra nella prima colonna tutte le applicazioni il cui nome o la cui " +"descrizione corrisponde alla ricerca" + +#. i18n: file ./behaviour.ui line 184 +#: behaviour.cpp:133 rc.cpp:140 +#, no-c-format +msgid "&Kerry Beagle integration" +msgstr "Integrazione con &Kerry Beagle" + +#. i18n: file ./behaviour.ui line 187 +#: behaviour.cpp:134 rc.cpp:143 +#, no-c-format +msgid "Alt+K" +msgstr "Alt+K" + +#. i18n: file ./behaviour.ui line 190 +#: behaviour.cpp:135 rc.cpp:146 +#, no-c-format +msgid "Perform queries with Kerry Beagle" +msgstr "Esegue le ricerche con Kerry Beagle" + +#. i18n: file ./behaviour.ui line 194 +#: behaviour.cpp:136 rc.cpp:149 +#, no-c-format +msgid "" +"Perform queries with Kerry Beagle instead of using the first column.\n" +"It needs Kerry Beagle up and running." +msgstr "" +"Esegue le ricerche con Kerry Beagle invece di usare la prima colonna.
" +"È necessario che Kerry sia installato e in esecuzione" + +#. i18n: file ./behaviour.ui line 202 +#: behaviour.cpp:138 rc.cpp:153 +#, no-c-format +msgid "Stri&gi Integration" +msgstr "I&ntegrazione con Strigi" + +#. i18n: file ./menu.ui line 322 +#: behaviour.cpp:139 menu.cpp:192 rc.cpp:81 rc.cpp:156 +#, no-c-format +msgid "Alt+G" +msgstr "Alt+G" + +#. i18n: file ./behaviour.ui line 208 +#: behaviour.cpp:140 rc.cpp:159 +#, no-c-format +msgid "Perform queries with Strigi" +msgstr "Esegue le ricerche con Strigi" + +#. i18n: file ./behaviour.ui line 212 +#: behaviour.cpp:141 rc.cpp:162 +#, no-c-format +msgid "" +"Perform queries with Strigi instead of using the first column.\n" +"It needs the Strigi Daemon up and running" +msgstr "" +"Esegue le ricerche con Strigi invece di usare la prima colonna.\n" +"Ha bisogno che Strigi sia installato e in esecuzione" + +#. i18n: file ./behaviour.ui line 222 +#: behaviour.cpp:143 rc.cpp:166 +#, no-c-format +msgid "&Notify recently installed applications (requires kicker restart)" +msgstr "" +"&Avvisa quando ci sono applicazioni installate di recente (richiede il " +"riavvio di kicker)" + +#: dmctl.cpp:345 +msgid "" +"_: user: ...\n" +"%1: TTY login" +msgstr "" + +#: dmctl.cpp:351 +msgid "Unused" +msgstr "Non usato" + +#: dmctl.cpp:353 +msgid "X login on remote host" +msgstr "Login X su un host remoto" + +#: dmctl.cpp:354 +#, c-format +msgid "" +"_: ... host\n" +"X login on %1" +msgstr "" + +#: dmctl.cpp:357 +#, fuzzy +msgid "" +"_: user: session type\n" +"%1: %2" +msgstr "utente: tipo di sessione" + +#: dmctl.cpp:372 +#, fuzzy +msgid "" +"_: session (location)\n" +"%1 (%2)" +msgstr "sessione (posizione)" + +#. i18n: file ./tastytooltipwidget.ui line 16 +#: menu.cpp:167 rc.cpp:3 rc.cpp:13 tastymenu.cpp:184 tastytooltipwidget.cpp:79 +#, no-c-format +msgid "Tasty Menu" +msgstr "Tasty Menu" + +#. i18n: file ./menu.ui line 84 +#: menu.cpp:168 rc.cpp:16 +#, no-c-format +msgid "&Clear list" +msgstr "&Cancella la lista" + +#. i18n: file ./menu.ui line 87 +#: menu.cpp:169 rc.cpp:19 +#, no-c-format +msgid "Alt+C" +msgstr "Alt+D" + +#. i18n: file ./menu.ui line 95 +#: menu.cpp:170 rc.cpp:22 +#, no-c-format +msgid "Se&arch:" +msgstr "&Cerca:" + +#. i18n: file ./menu.ui line 107 +#: menu.cpp:172 rc.cpp:25 +#, no-c-format +msgid "Favourite applications" +msgstr "Applicazioni preferite" + +#. i18n: file ./menu.ui line 112 +#: menu.cpp:173 rc.cpp:28 +#, no-c-format +msgid "Most used applications" +msgstr "Applicazioni più utilizzate" + +#. i18n: file ./menu.ui line 117 +#: menu.cpp:174 rc.cpp:31 +#, no-c-format +msgid "Recent applications" +msgstr "Applicazioni recenti" + +#. i18n: file ./menu.ui line 122 +#: menu.cpp:175 rc.cpp:34 +#, no-c-format +msgid "Recent documents" +msgstr "Documenti recenti" + +#. i18n: file ./menu.ui line 137 +#: menu.cpp:176 rc.cpp:37 +#, no-c-format +msgid "Use this dropdown menu to change the behaviour of the list below" +msgstr "" +"Utilizza questo menu per cambiare il comportamento della lista sottostante" + +#. i18n: file ./menu.ui line 161 +#: menu.cpp:177 menu.cpp:180 rc.cpp:40 rc.cpp:49 +#, no-c-format +msgid "..." +msgstr "..." + +#. i18n: file ./menu.ui line 169 +#: menu.cpp:178 rc.cpp:43 +#, no-c-format +msgid "&Show:" +msgstr "&Mostra:" + +#. i18n: file ./menu.ui line 234 +#: menu.cpp:179 rc.cpp:46 +#, no-c-format +msgid "All Applications" +msgstr "Tutte le applicazioni" + +#. i18n: file ./menu.ui line 259 +#: menu.cpp:181 menuhandler.cpp:463 rc.cpp:52 +#, no-c-format +msgid "Make this menu a normal window" +msgstr "Rendi questo menu una finestra normale" + +#. i18n: file ./menu.ui line 277 +#: menu.cpp:182 rc.cpp:55 +#, no-c-format +msgid "Ru&n program..." +msgstr "&Esegui un programma..." + +#. i18n: file ./menu.ui line 283 +#: menu.cpp:184 rc.cpp:61 +#, no-c-format +msgid "" +"If you know exatly how a program is named you can directly enter the " +"application name" +msgstr "" +"Se sai esattamente qual'è il nome di un programma puoi scriverlo " +"direttamente" + +#. i18n: file ./menu.ui line 297 +#: menu.cpp:187 rc.cpp:66 +#, no-c-format +msgid "Start a new session, switch the active user or edit your user profile" +msgstr "Avvia una nuova sessione, cambia utente oppure modifica il tuo profilo" + +#. i18n: file ./menu.ui line 305 +#: menu.cpp:188 rc.cpp:69 +#, no-c-format +msgid "L&ock Session" +msgstr "&Blocca la sessione" + +#. i18n: file ./menu.ui line 311 +#: menu.cpp:190 rc.cpp:75 +#, no-c-format +msgid "Lock the pc with a password if you are going away for a while" +msgstr "Blocca il pc con una password se stai andando via un attimo" + +#. i18n: file ./menu.ui line 319 +#: menu.cpp:191 rc.cpp:78 +#, no-c-format +msgid "Lo&g Out..." +msgstr "&Disconnettiti" + +#. i18n: file ./menu.ui line 325 +#: menu.cpp:193 rc.cpp:84 +#, no-c-format +msgid "Logout, reboot or shoutdown the computer" +msgstr "Disconnettiti, riavvia oppure spegni il computer" + +#: menuhandler.cpp:458 +msgid "Make this window a popup menu" +msgstr "Rendi questa finestra un menu di popup" + +#: menuhandler.cpp:1426 +msgid "&Edit submenu..." +msgstr "&Modifica il sottomenu" + +#: menuhandler.cpp:1429 +msgid "&Edit item..." +msgstr "&Modifica elemento..." + +#: menuhandler.cpp:1430 +msgid "&Add to desktop" +msgstr "&Aggiungi al desktop" + +#: menuhandler.cpp:1435 +msgid "&Add to favourite applications" +msgstr "&Aggiungi alle tue applicazioni preferite" + +#: menuhandler.cpp:1437 +msgid "&Remove from favourite applications" +msgstr "&Rimuovi dalle tue applicazioni preferite" + +#: menuhandler.cpp:1501 +msgid "Edit user profile..." +msgstr "Modifica il profilo dell'utente" + +#: menuhandler.cpp:1507 +msgid "Save current session" +msgstr "Salva la sessione corrente" + +#: menuhandler.cpp:1513 +msgid "Lock session and start a new one" +msgstr "Blocca la sessione e lanciane una nuova" + +#: menuhandler.cpp:1514 +msgid "Start New Session" +msgstr "Lancia una nuova sessione" + +#: menuhandler.cpp:1567 +msgid "" +"

You have chosen to open another desktop session.
The current session " +"will be hidden and a new login screen will be displayed.
An F-key is " +"assigned to each session; F%1 is usually assigned to the first session, F%2 " +"to the second session and so on. You can switch between sessions by pressing " +"Ctrl, Alt and the appropriate F-key at the same time. Additionally, the KDE " +"Panel and Desktop menus have actions for switching between sessions.

" +msgstr "" +"

Hai scelto di aprire un'altra sessione.
La sessione corrente sarà " +"nascosta e sarà mostrato una nuova schermata di login.
Un tasto \"F\" è " +"assegnato ad ogni sessione; F%1 alla prima, F%2 alla seconda e così via. " +"Puoi cambiare la sessione premendo contemporaneamente Ctrl, Alt e il tasto F " +"appropriato. In più, il deskop e il pannello di KDE hanno degli appositi " +"comandi per cambiare tra le sessioni attive.

" + +#: menuhandler.cpp:1578 +msgid "Warning - New Session" +msgstr "Attenzione - Nuova sessione" + +#: menuhandler.cpp:1579 +msgid "&Start New Session" +msgstr "&Lancia una nuova sessione" + +#. i18n: file ./tastytooltipwidget.ui line 83 +#: rc.cpp:6 tastytooltipwidget.cpp:80 +#, no-c-format +msgid "Tasty Menu" +msgstr "Tasty Menu" + +#. i18n: file ./tastytooltipwidget.ui line 91 +#: rc.cpp:9 tastytooltipwidget.cpp:81 +#, no-c-format +msgid "Applications, tasks and desktop sessions" +msgstr "Applicazioni, task e sessioni del desktop" + +#: tastylistview.cpp:288 +msgid "to your favourite applications" +msgstr "alle tue applicazioni preferite" + +#: tastylistview.cpp:292 +msgid "from your favourite applications" +msgstr "dalle tue applicazioni preferite" + +#: tastylistview.cpp:296 tastylistview.cpp:313 +msgid "Browse" +msgstr "Sfoglia" + +#: tastylistview.cpp:300 +msgid "Expand" +msgstr "Espandi" + +#: tastylistview.cpp:304 +msgid "Collapse" +msgstr "Restringi" + +#: tastymenu.cpp:69 tastymenu.cpp:318 +msgid "Menu" +msgstr "Menu" + +#: tastymenu.cpp:186 +msgid "KMenu replacement" +msgstr "Sostituto di KMenu" + +#: tastymenu.cpp:191 +msgid "Maintainer" +msgstr "Maintainer" + +#: tastymenu.cpp:195 +msgid "_: NAME OF TRANSLATORS\\nYour names" +msgstr "Marco Martin" + +#: tastymenu.cpp:196 +msgid "_: EMAIL OF TRANSLATORS\\nYour emails" +msgstr "notmart@gmail.com" + +#: tastymenu.cpp:199 +msgid "For the Russian translation" +msgstr "Per la traduzione in Russo" + +#: tastymenu.cpp:202 +msgid "For the German translation" +msgstr "Per la traduzione in Russo" + +#: tastymenu.cpp:205 +msgid "For the Spanish translation" +msgstr "Per la traduzione in Spagnolo" + +#: tastymenu.cpp:208 +#, fuzzy +msgid "For the Ukrainian translation" +msgstr "Per la traduzione in Russo" + +#: tastymenu.cpp:211 +#, fuzzy +msgid "For the French translation" +msgstr "Per la traduzione in Russo" + +#: tastymenu.cpp:214 +#, fuzzy +msgid "For the Finnish translation" +msgstr "Per la traduzione in Spagnolo" + +#: tastymenu.cpp:217 +#, fuzzy +msgid "For the Slovenian translation" +msgstr "Per la traduzione in Russo" + +#: tastymenu.cpp:220 +#, fuzzy +msgid "For the Polish translation" +msgstr "Per la traduzione in Spagnolo" + +#: tastymenu.cpp:225 +msgid "For the Switch user code from KDM" +msgstr "Per il codice che realizza lo switch fra utenti del KDM" + +#: tastymenu.cpp:229 +msgid "For some inspirations here and there." +msgstr "Per alcune ispirazioni qua e là" + +#: tastymenu.cpp:233 +msgid "For some code taken from Amarok's statistics list view" +msgstr "Per codice ispirato alla visualizzazione delle statistiche di Amarok" + +#: tastymenu.cpp:265 +msgid "Behaviour" +msgstr "Comportamento" + +#: tastymenu.cpp:274 tastymenu.cpp:275 +msgid "Toggle Tasty Menu" +msgstr "Attiva/Disattiva Tasty Menu" + +#: tastymenu.cpp:343 +#, c-format +msgid "" +"_n: There is one new installed application\n" +"There are %n new installed applications" +msgstr "" +"C'è una nuova applicazione installata\n" +"Ci sono %n nuove applicazioni installate" + +#: tastymenu.cpp:416 +msgid "&Edit Menu" +msgstr "&Modifica il menu" + +#: tastymenu.cpp:418 +msgid "&Clear recently installed applications list" +msgstr "&Pulisci la lista delle applicazioni installate di recente" + +#: tastymenu.cpp:420 +msgid "&Configure Global Shortcuts..." +msgstr "Configura le scorciatoie &globali..." + +#: tastymenu.cpp:421 +msgid "&Configure..." +msgstr "&Configura..." + +#~ msgid "Icons size:" +#~ msgstr "Dimensione delle icone" diff --git a/po/pl.po b/po/pl.po new file mode 100644 index 0000000..5250c1d --- /dev/null +++ b/po/pl.po @@ -0,0 +1,828 @@ +# translation of pl.po to Polish +# This file is put in the public domain. +# +# Tomasz Argasiński , 2007. +msgid "" +msgstr "" +"Project-Id-Version: pl\n" +"Report-Msgid-Bugs-To: http://www.kde-apps.org/content/show.php?content=41866\n" +"POT-Creation-Date: 2007-12-02 02:45+0100\n" +"PO-Revision-Date: 2007-12-02 12:50+0100\n" +"Last-Translator: Tomasz Argasiński \n" +"Language-Team: Polish \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.11.4\n" + +#. i18n: file ./src/appearance.ui line 16 +#. i18n: file ./src/behaviour.ui line 16 +#. i18n: file ./src/appearance.ui line 16 +#. i18n: file ./src/behaviour.ui line 16 +#: po/extractedrc.cpp:3 po/extractedrc.cpp:130 src/appearance.cpp:272 +#: src/behaviour.cpp:114 extractedrc.cpp:3 extractedrc.cpp:130 +#, no-c-format +msgid "Form1" +msgstr "Forma1" + +#. i18n: file ./src/appearance.ui line 32 +#. i18n: file ./src/appearance.ui line 149 +#. i18n: file ./src/appearance.ui line 32 +#. i18n: file ./src/appearance.ui line 149 +#: po/extractedrc.cpp:6 po/extractedrc.cpp:37 src/appearance.cpp:273 +#: src/appearance.cpp:284 extractedrc.cpp:6 extractedrc.cpp:37 +#, no-c-format +msgid "Applications list" +msgstr "Lista programów" + +#. i18n: file ./src/appearance.ui line 43 +#: po/extractedrc.cpp:9 src/appearance.cpp:274 extractedrc.cpp:9 +#, no-c-format +msgid "Show tree e&xpanders" +msgstr "Pokaż elementy &rozwijające drzewo" + +#. i18n: file ./src/appearance.ui line 46 +#: po/extractedrc.cpp:12 src/appearance.cpp:275 extractedrc.cpp:12 +#, no-c-format +msgid "Alt+X" +msgstr "Alt+T" + +#. i18n: file ./src/appearance.ui line 57 +#: po/extractedrc.cpp:15 src/appearance.cpp:276 extractedrc.cpp:15 +#, no-c-format +msgid "Alwa&ys collapsed categories" +msgstr "Ka&tegorie zawsze zwinięte" + +#. i18n: file ./src/appearance.ui line 60 +#. i18n: file ./src/behaviour.ui line 94 +#. i18n: file ./src/appearance.ui line 60 +#. i18n: file ./src/behaviour.ui line 94 +#: po/extractedrc.cpp:18 po/extractedrc.cpp:148 src/appearance.cpp:277 +#: src/behaviour.cpp:120 extractedrc.cpp:18 extractedrc.cpp:148 +#, no-c-format +msgid "Alt+Y" +msgstr "Alt+T" + +#. i18n: file ./src/appearance.ui line 68 +#: po/extractedrc.cpp:21 src/appearance.cpp:278 extractedrc.cpp:21 +#, no-c-format +msgid "Hei&ght:" +msgstr "&Wysokość:" + +#. i18n: file ./src/appearance.ui line 82 +#: po/extractedrc.cpp:24 src/appearance.cpp:279 extractedrc.cpp:24 +#, no-c-format +msgid "Button label:" +msgstr "Tekst przycisku:" + +#. i18n: file ./src/appearance.ui line 111 +#: po/extractedrc.cpp:27 src/appearance.cpp:280 extractedrc.cpp:27 +#, no-c-format +msgid "" +"What text should be displayed in the Kicker button tooltip instead of " +"\"Tasty Menu\".\n" +"Empty means default." +msgstr "" +"Tekst, który powinien być wyświetlany jako podpowiedź dla przycisku \"Tasty " +"Menu\", umieszczonego na pasku Kicker.\n" +"Pusty oznacza domyślny." + +#. i18n: file ./src/appearance.ui line 119 +#: po/extractedrc.cpp:31 src/appearance.cpp:282 extractedrc.cpp:31 +#, no-c-format +msgid "Wi&dth:" +msgstr "&Szerokość:" + +#. i18n: file ./src/appearance.ui line 133 +#: po/extractedrc.cpp:34 src/appearance.cpp:283 extractedrc.cpp:34 +#, no-c-format +msgid "Tootip title:" +msgstr "Tytuł podpowiedzi:" + +#. i18n: file ./src/appearance.ui line 160 +#: po/extractedrc.cpp:40 src/appearance.cpp:285 extractedrc.cpp:40 +#, no-c-format +msgid "of the screen width" +msgstr "szerokości ekranu" + +#. i18n: file ./src/appearance.ui line 173 +#: po/extractedrc.cpp:43 src/appearance.cpp:286 extractedrc.cpp:43 +#, no-c-format +msgid "Menu button" +msgstr "Przycisk menu" + +#. i18n: file ./src/appearance.ui line 184 +#: po/extractedrc.cpp:46 src/appearance.cpp:287 extractedrc.cpp:46 +#, no-c-format +msgid "of the screen height" +msgstr "wysokości ekranu" + +#. i18n: file ./src/appearance.ui line 220 +#: po/extractedrc.cpp:50 src/appearance.cpp:289 extractedrc.cpp:50 +#, no-c-format +msgid "&Icon:" +msgstr "&Ikona:" + +#. i18n: file ./src/appearance.ui line 223 +#: po/extractedrc.cpp:53 src/appearance.cpp:290 extractedrc.cpp:53 +#, no-c-format +msgid "Alt+I" +msgstr "Alt+I" + +#. i18n: file ./src/appearance.ui line 246 +#: po/extractedrc.cpp:57 src/appearance.cpp:292 extractedrc.cpp:57 +#, no-c-format +msgid "" +"What icon should be displayed in the kicker button instead of the KMenu " +"one.\n" +"Empty means default." +msgstr "" +"Ikona, która powinna być wyświetlana, zamiast ikony KMenu, na pasku Kicker.\n" +"Puste oznacza domyślna." + +#. i18n: file ./src/appearance.ui line 262 +#: po/extractedrc.cpp:61 src/appearance.cpp:294 extractedrc.cpp:61 +#, no-c-format +msgid "N&one" +msgstr "&Brak" + +#. i18n: file ./src/appearance.ui line 265 +#. i18n: file ./src/behaviour.ui line 63 +#. i18n: file ./src/menu.ui line 308 +#. i18n: file ./src/appearance.ui line 265 +#. i18n: file ./src/behaviour.ui line 63 +#. i18n: file ./src/menu.ui line 308 +#: po/extractedrc.cpp:64 po/extractedrc.cpp:139 po/extractedrc.cpp:274 +#: src/appearance.cpp:295 src/behaviour.cpp:117 src/menu.cpp:187 +#: extractedrc.cpp:64 extractedrc.cpp:139 extractedrc.cpp:274 +#, no-c-format +msgid "Alt+O" +msgstr "Alt+B" + +#. i18n: file ./src/appearance.ui line 280 +#: po/extractedrc.cpp:67 src/appearance.cpp:296 extractedrc.cpp:67 +#, no-c-format +msgid "Menu size" +msgstr "Rozmiar menu" + +#. i18n: file ./src/appearance.ui line 291 +#: po/extractedrc.cpp:70 src/appearance.cpp:297 extractedrc.cpp:70 +#, no-c-format +msgid "&Action icons size:" +msgstr "Rozmiar ikon &działań:" + +#. i18n: file ./src/appearance.ui line 305 +#: po/extractedrc.cpp:73 src/appearance.cpp:298 extractedrc.cpp:73 +#, no-c-format +msgid "&Display applications descriptions" +msgstr "&Wyświetlaj opisy programów" + +#. i18n: file ./src/appearance.ui line 308 +#: po/extractedrc.cpp:76 src/appearance.cpp:299 extractedrc.cpp:76 +#, no-c-format +msgid "Alt+D" +msgstr "Alt+W" + +#. i18n: file ./src/appearance.ui line 344 +#: po/extractedrc.cpp:80 src/appearance.cpp:301 extractedrc.cpp:80 +#, no-c-format +msgid "&Text:" +msgstr "&Tekst:" + +#. i18n: file ./src/appearance.ui line 347 +#: po/extractedrc.cpp:83 src/appearance.cpp:302 extractedrc.cpp:83 +#, no-c-format +msgid "Alt+T" +msgstr "Alt+T" + +#. i18n: file ./src/appearance.ui line 362 +#: po/extractedrc.cpp:87 src/appearance.cpp:304 extractedrc.cpp:87 +#, no-c-format +msgid "" +"What label instead of \"Menu\" should be shown for the Kicker button.\n" +"Empty means default." +msgstr "" +"Etykieta, która powinna być pokazywana zamiast \"Menu\" dla przycisku na " +"pasku Kicker.\n" +"Puste oznacza domyślna." + +#. i18n: file ./src/appearance.ui line 370 +#: po/extractedrc.cpp:91 src/appearance.cpp:306 extractedrc.cpp:91 +#, no-c-format +msgid "&None" +msgstr "B&rak" + +#. i18n: file ./src/appearance.ui line 373 +#. i18n: file ./src/behaviour.ui line 225 +#. i18n: file ./src/menu.ui line 280 +#. i18n: file ./src/appearance.ui line 373 +#. i18n: file ./src/behaviour.ui line 225 +#. i18n: file ./src/menu.ui line 280 +#: po/extractedrc.cpp:94 po/extractedrc.cpp:212 po/extractedrc.cpp:260 +#: src/appearance.cpp:307 src/behaviour.cpp:144 src/menu.cpp:181 +#: extractedrc.cpp:94 extractedrc.cpp:212 extractedrc.cpp:260 +#, no-c-format +msgid "Alt+N" +msgstr "Alt+R" + +#. i18n: file ./src/appearance.ui line 383 +#. i18n: file ./src/appearance.ui line 400 +#. i18n: file ./src/appearance.ui line 383 +#. i18n: file ./src/appearance.ui line 400 +#: po/extractedrc.cpp:97 po/extractedrc.cpp:100 src/appearance.cpp:308 +#: src/appearance.cpp:309 extractedrc.cpp:97 extractedrc.cpp:100 +#, no-c-format +msgid "%" +msgstr "%" + +#. i18n: file ./src/appearance.ui line 417 +#: po/extractedrc.cpp:103 src/appearance.cpp:310 extractedrc.cpp:103 +#, no-c-format +msgid "Button icon:" +msgstr "Ikona przycisku:" + +#. i18n: file ./src/appearance.ui line 453 +#: po/extractedrc.cpp:106 src/appearance.cpp:311 extractedrc.cpp:106 +#, no-c-format +msgid "third column:" +msgstr "Trzecia kolumna:" + +#. i18n: file ./src/appearance.ui line 461 +#: po/extractedrc.cpp:109 src/appearance.cpp:312 extractedrc.cpp:109 +#, no-c-format +msgid "second column:" +msgstr "Druga kolumna:" + +#. i18n: file ./src/appearance.ui line 469 +#. i18n: file ./src/appearance.ui line 486 +#. i18n: file ./src/appearance.ui line 503 +#. i18n: file ./src/appearance.ui line 552 +#. i18n: file ./src/appearance.ui line 469 +#. i18n: file ./src/appearance.ui line 486 +#. i18n: file ./src/appearance.ui line 503 +#. i18n: file ./src/appearance.ui line 552 +#: po/extractedrc.cpp:112 po/extractedrc.cpp:115 po/extractedrc.cpp:118 +#: po/extractedrc.cpp:127 src/appearance.cpp:313 src/appearance.cpp:314 +#: src/appearance.cpp:315 src/appearance.cpp:318 extractedrc.cpp:112 +#: extractedrc.cpp:115 extractedrc.cpp:118 extractedrc.cpp:127 +#, no-c-format +msgid " pixels" +msgstr "pikseli" + +#. i18n: file ./src/appearance.ui line 520 +#: po/extractedrc.cpp:121 src/appearance.cpp:316 extractedrc.cpp:121 +#, no-c-format +msgid "first column:" +msgstr "Pierwsza kolumna:" + +#. i18n: file ./src/appearance.ui line 538 +#: po/extractedrc.cpp:124 src/appearance.cpp:317 extractedrc.cpp:124 +#, no-c-format +msgid "Icons si&zes:" +msgstr "Rozmiar ikon:" + +#. i18n: file ./src/behaviour.ui line 32 +#: po/extractedrc.cpp:133 src/behaviour.cpp:115 extractedrc.cpp:133 +#, no-c-format +msgid "General behaviour" +msgstr "Ogólne zachowanie" + +#. i18n: file ./src/behaviour.ui line 60 +#: po/extractedrc.cpp:136 src/behaviour.cpp:116 extractedrc.cpp:136 +#, no-c-format +msgid "&Override alt+F1 keyboard shortcut (requires kicker restart)" +msgstr "&Zastąp skrót klawiaturowy Alt+F1 (wymaga ponownego uruchomienia Kickera)" + +#. i18n: file ./src/behaviour.ui line 66 +#: po/extractedrc.cpp:142 src/behaviour.cpp:118 extractedrc.cpp:142 +#, no-c-format +msgid "" +"Pops up Tasty Menu instead of KMenu when the shortcut sequence Alt+F1 is " +"pressed" +msgstr "Pokazuj Tasty Menu zamiast Kmenu po naciśnięciu kombinacji klawiszy Alt+F1." + +#. i18n: file ./src/behaviour.ui line 91 +#: po/extractedrc.cpp:145 src/behaviour.cpp:119 extractedrc.cpp:145 +#, no-c-format +msgid "Show save session functionalit&y" +msgstr "Pokaż funkcje zapisywania &sesji" + +#. i18n: file ./src/behaviour.ui line 98 +#: po/extractedrc.cpp:151 src/behaviour.cpp:121 extractedrc.cpp:151 +#, no-c-format +msgid "" +"Under the menu that pops up when the button with user name is pressed a new " +"item \"Save current session\" is added.\n" +"It saves the current session informations like open applications and windows " +"position. In order to use it you must set \"Restore manually saved session\" " +"in the Session Manager Kcontrol module." +msgstr "" +"Dodaje element \"Zapisz bieżącą sesję\" poniżej menu pokazywanego po " +"naciśnięciu przycisku z nazwą użytkownika. Opcja ta pozwala zapisać " +"informacje o bieżącej sesji, takie jak otwarte programy i pozycja okien. Aby " +"jej użyć należy ustawić \"Przywróć zapisaną sesję\" w module Menadżer sesji " +"w programie Kcontrol." + +#. i18n: file ./src/behaviour.ui line 106 +#: po/extractedrc.cpp:155 src/behaviour.cpp:123 extractedrc.cpp:155 +#, no-c-format +msgid "&Hide groups with only one application" +msgstr "&Ukryj grupy zawierające tylko jeden program" + +#. i18n: file ./src/behaviour.ui line 109 +#: po/extractedrc.cpp:158 src/behaviour.cpp:124 extractedrc.cpp:158 +#, no-c-format +msgid "Alt+H" +msgstr "Alt+U" + +#. i18n: file ./src/behaviour.ui line 120 +#: po/extractedrc.cpp:161 src/behaviour.cpp:125 extractedrc.cpp:161 +#, no-c-format +msgid "Show items in alpha&betical order" +msgstr "Pokaż elementy w porządku alfa&betycznym" + +#. i18n: file ./src/behaviour.ui line 123 +#: po/extractedrc.cpp:164 src/behaviour.cpp:126 extractedrc.cpp:164 +#, no-c-format +msgid "Alt+B" +msgstr "Alt+B" + +#. i18n: file ./src/behaviour.ui line 136 +#: po/extractedrc.cpp:167 src/behaviour.cpp:127 extractedrc.cpp:167 +#, no-c-format +msgid "Search field behaviour" +msgstr "Zachowanie pola wyszukiwania" + +#. i18n: file ./src/behaviour.ui line 164 +#: po/extractedrc.cpp:171 src/behaviour.cpp:129 extractedrc.cpp:171 +#, no-c-format +msgid "Si&mple searches" +msgstr "&Proste wyszukiwanie" + +#. i18n: file ./src/behaviour.ui line 167 +#: po/extractedrc.cpp:174 src/behaviour.cpp:130 extractedrc.cpp:174 +#, no-c-format +msgid "Alt+M" +msgstr "Alt+P" + +#. i18n: file ./src/behaviour.ui line 173 +#: po/extractedrc.cpp:177 src/behaviour.cpp:131 extractedrc.cpp:177 +#, no-c-format +msgid "Filters the applications list" +msgstr "Filtruje listę programów" + +#. i18n: file ./src/behaviour.ui line 176 +#: po/extractedrc.cpp:180 src/behaviour.cpp:132 extractedrc.cpp:180 +#, no-c-format +msgid "" +"It displays in the first column all the applications whose name or " +"description matches with the query you entered" +msgstr "" +"Pokazuje w pierwszej kolumnie wszystkie programy, których opis pasuje do " +"wprowadzonego zapytania" + +#. i18n: file ./src/behaviour.ui line 184 +#: po/extractedrc.cpp:183 src/behaviour.cpp:133 extractedrc.cpp:183 +#, no-c-format +msgid "&Kerry Beagle integration" +msgstr "Integracja z &Kerry Beagle" + +#. i18n: file ./src/behaviour.ui line 187 +#: po/extractedrc.cpp:186 src/behaviour.cpp:134 extractedrc.cpp:186 +#, no-c-format +msgid "Alt+K" +msgstr "Alt+K" + +#. i18n: file ./src/behaviour.ui line 190 +#: po/extractedrc.cpp:189 src/behaviour.cpp:135 extractedrc.cpp:189 +#, no-c-format +msgid "Perform queries with Kerry Beagle" +msgstr "Wykonuje zapytania przy pomocy Kerry Beagle" + +#. i18n: file ./src/behaviour.ui line 194 +#: po/extractedrc.cpp:192 src/behaviour.cpp:136 extractedrc.cpp:192 +#, no-c-format +msgid "" +"Perform queries with Kerry Beagle instead of using the first column.\n" +"It needs Kerry Beagle up and running." +msgstr "" +"Wykonuje zapytania przy pomocy Kerry Beagle zamiast używać pierwszej " +"kolumny.\n" +"Wymaga zainstalowanego i uruchomionego programu Kerry Beagle." + +#. i18n: file ./src/behaviour.ui line 202 +#: po/extractedrc.cpp:196 src/behaviour.cpp:138 extractedrc.cpp:196 +#, no-c-format +msgid "Stri&gi Integration" +msgstr "Inte&gracja ze Strigi" + +#. i18n: file ./src/behaviour.ui line 205 +#. i18n: file ./src/menu.ui line 322 +#. i18n: file ./src/behaviour.ui line 205 +#. i18n: file ./src/menu.ui line 322 +#: po/extractedrc.cpp:199 po/extractedrc.cpp:283 src/behaviour.cpp:139 +#: src/menu.cpp:190 extractedrc.cpp:199 extractedrc.cpp:283 +#, no-c-format +msgid "Alt+G" +msgstr "Alt+G" + +#. i18n: file ./src/behaviour.ui line 208 +#: po/extractedrc.cpp:202 src/behaviour.cpp:140 extractedrc.cpp:202 +#, no-c-format +msgid "Perform queries with Strigi" +msgstr "Wykonuje zapytania przy pomocy Strigi" + +#. i18n: file ./src/behaviour.ui line 212 +#: po/extractedrc.cpp:205 src/behaviour.cpp:141 extractedrc.cpp:205 +#, no-c-format +msgid "" +"Perform queries with Strigi instead of using the first column.\n" +"It needs the Strigi Daemon up and running" +msgstr "" +"Wykonuje zapytania przy pomocy Strigi zamiast używać pierwszej kolumny.\n" +"Wymaga zainstalowanego i uruchomionego demona Strigi." + +#. i18n: file ./src/behaviour.ui line 222 +#: po/extractedrc.cpp:209 src/behaviour.cpp:143 extractedrc.cpp:209 +#, no-c-format +msgid "&Notify recently installed applications (requires kicker restart)" +msgstr "" +"Powiadamiaj o ostatnio zainstalowanych programach (wymaga ponownego " +"uruchomienia Kickera)" + +#. i18n: file ./src/menu.ui line 16 +#. i18n: file ./src/tastytooltipwidget.ui line 16 +#. i18n: file ./src/menu.ui line 16 +#. i18n: file ./src/tastytooltipwidget.ui line 16 +#: po/extractedrc.cpp:215 po/extractedrc.cpp:401 src/menu.cpp:165 +#: src/tastymenu.cpp:184 src/tastytooltipwidget.cpp:79 extractedrc.cpp:215 +#: extractedrc.cpp:401 +#, no-c-format +msgid "Tasty Menu" +msgstr "Tasty Menu" + +#. i18n: file ./src/menu.ui line 84 +#: po/extractedrc.cpp:218 src/menu.cpp:166 extractedrc.cpp:218 +#, no-c-format +msgid "&Clear list" +msgstr "&Wyczyść listę" + +#. i18n: file ./src/menu.ui line 87 +#: po/extractedrc.cpp:221 src/menu.cpp:167 extractedrc.cpp:221 +#, no-c-format +msgid "Alt+C" +msgstr "Alt+W" + +#. i18n: file ./src/menu.ui line 95 +#: po/extractedrc.cpp:224 src/menu.cpp:168 extractedrc.cpp:224 +#, no-c-format +msgid "Se&arch:" +msgstr "&Szukaj:" + +#. i18n: file ./src/menu.ui line 107 +#: po/extractedrc.cpp:227 src/menu.cpp:170 extractedrc.cpp:227 +#, no-c-format +msgid "Favourite applications" +msgstr "Ulubione programy" + +#. i18n: file ./src/menu.ui line 112 +#: po/extractedrc.cpp:230 src/menu.cpp:171 extractedrc.cpp:230 +#, no-c-format +msgid "Most used applications" +msgstr "Najczęściej używane programy" + +#. i18n: file ./src/menu.ui line 117 +#: po/extractedrc.cpp:233 src/menu.cpp:172 extractedrc.cpp:233 +#, no-c-format +msgid "Recent applications" +msgstr "Ostatnio używane programy" + +#. i18n: file ./src/menu.ui line 122 +#: po/extractedrc.cpp:236 src/menu.cpp:173 extractedrc.cpp:236 +#, no-c-format +msgid "Recent documents" +msgstr "Ostatnio używane dokumenty" + +#. i18n: file ./src/menu.ui line 137 +#: po/extractedrc.cpp:239 src/menu.cpp:174 extractedrc.cpp:239 +#, no-c-format +msgid "Use this dropdown menu to change the behaviour of the list below" +msgstr "Użyj tego menu rozwijalnego aby zmienić zachowanie poniższej listy" + +#. i18n: file ./src/menu.ui line 161 +#. i18n: file ./src/menu.ui line 253 +#. i18n: file ./src/menu.ui line 161 +#. i18n: file ./src/menu.ui line 253 +#: po/extractedrc.cpp:242 po/extractedrc.cpp:251 src/menu.cpp:175 +#: src/menu.cpp:178 extractedrc.cpp:242 extractedrc.cpp:251 +#, no-c-format +msgid "..." +msgstr "..." + +#. i18n: file ./src/menu.ui line 169 +#: po/extractedrc.cpp:245 src/menu.cpp:176 extractedrc.cpp:245 +#, no-c-format +msgid "&Show:" +msgstr "P&okaż" + +#. i18n: file ./src/menu.ui line 234 +#: po/extractedrc.cpp:248 src/menu.cpp:177 extractedrc.cpp:248 +#, no-c-format +msgid "All Applications" +msgstr "Wszystkie programy" + +#. i18n: file ./src/menu.ui line 259 +#: po/extractedrc.cpp:254 src/menu.cpp:179 src/menuhandler.cpp:463 +#: extractedrc.cpp:254 +#, no-c-format +msgid "Make this menu a normal window" +msgstr "Wyświetlaj to menu jako zwykłe okno" + +#. i18n: file ./src/menu.ui line 277 +#: po/extractedrc.cpp:257 src/menu.cpp:180 extractedrc.cpp:257 +#, no-c-format +msgid "Ru&n program..." +msgstr "&Uruchom program..." + +#. i18n: file ./src/menu.ui line 283 +#: po/extractedrc.cpp:263 src/menu.cpp:182 extractedrc.cpp:263 +#, no-c-format +msgid "" +"If you know exatly how a program is named you can directly enter the " +"application name" +msgstr "" +"Jeżeli wiesz, jak dokładnie nazywa się program, to możesz wpisać " +"bezpośrednio jego nazwę" + +#. i18n: file ./src/menu.ui line 297 +#: po/extractedrc.cpp:268 src/menu.cpp:185 extractedrc.cpp:268 +#, no-c-format +msgid "Start a new session, switch the active user or edit your user profile" +msgstr "Rozpocznij nową sesję, przełącz użytkownika lub edytuj profil użytkownika" + +#. i18n: file ./src/menu.ui line 305 +#: po/extractedrc.cpp:271 src/menu.cpp:186 extractedrc.cpp:271 +#, no-c-format +msgid "L&ock Session" +msgstr "Za&blokuj sesję" + +#. i18n: file ./src/menu.ui line 311 +#: po/extractedrc.cpp:277 src/menu.cpp:188 extractedrc.cpp:277 +#, no-c-format +msgid "Lock the pc with a password if you are going away for a while" +msgstr "Zablokuj komputer hasłem, jeżeli odchodzisz od niego na dłużej" + +#. i18n: file ./src/menu.ui line 319 +#: po/extractedrc.cpp:280 src/menu.cpp:189 extractedrc.cpp:280 +#, no-c-format +msgid "Lo&g Out..." +msgstr "Wy&loguj" + +#. i18n: file ./src/menu.ui line 325 +#: po/extractedrc.cpp:286 src/menu.cpp:191 extractedrc.cpp:286 +#, no-c-format +msgid "Logout, reboot or shoutdown the computer" +msgstr "Wyloguj, uruchom ponownie lub wyłącz komputer" + +#. i18n: file ./src/tastytooltipwidget.ui line 83 +#: po/extractedrc.cpp:404 src/tastytooltipwidget.cpp:80 extractedrc.cpp:404 +#, no-c-format +msgid "Tasty Menu" +msgstr "Tasty Menu" + +#. i18n: file ./src/tastytooltipwidget.ui line 91 +#: po/extractedrc.cpp:407 src/tastytooltipwidget.cpp:81 extractedrc.cpp:407 +#, no-c-format +msgid "Applications, tasks and desktop sessions" +msgstr "Programy, zadania i sesje pulpitu" + +#: po/extractedrc.cpp:409 extractedrc.cpp:409 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Tomasz Argasiński" + +#: po/extractedrc.cpp:410 extractedrc.cpp:410 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "targasinski@o2.pl" + +#: src/dmctl.cpp:345 +msgid "user: ..." +msgstr "użytkownik: ..." + +#: src/dmctl.cpp:351 +msgid "Unused" +msgstr "Nieużywany" + +#: src/dmctl.cpp:353 +msgid "X login on remote host" +msgstr "Logowanie do X na maszynie zdalnej" + +#: src/dmctl.cpp:354 +msgid "... host" +msgstr "... host" + +#: src/dmctl.cpp:357 +msgid "user: session type" +msgstr "użytkownik: typ sesji" + +#: src/dmctl.cpp:372 +msgid "session (location)" +msgstr "sesja (lokalizacja)" + +#: src/menuhandler.cpp:458 +msgid "Make this window a popup menu" +msgstr "Wyświetlaj to okno jako menu." + +#: src/menuhandler.cpp:1426 +msgid "&Edit submenu..." +msgstr "&Edytuj podmenu..." + +#: src/menuhandler.cpp:1429 +msgid "&Edit item..." +msgstr "&Edytuj element..." + +#: src/menuhandler.cpp:1430 +msgid "&Add to desktop" +msgstr "&Dodaj do pulpitu" + +#: src/menuhandler.cpp:1435 +msgid "&Add to favourite applications" +msgstr "&Dodaj do ulubionych programów" + +#: src/menuhandler.cpp:1437 +msgid "&Remove from favourite applications" +msgstr "&Usuń z ulubionych programów" + +#: src/menuhandler.cpp:1501 +msgid "Edit user profile..." +msgstr "Edytuj profil użytkownika..." + +#: src/menuhandler.cpp:1507 +msgid "Save current session" +msgstr "Zapisz bieżącą sesję" + +#: src/menuhandler.cpp:1513 +msgid "Lock session and start a new one" +msgstr "Zablokuj sesję i rozpocznij nową" + +#: src/menuhandler.cpp:1514 +msgid "Start New Session" +msgstr "Rozpocznij nową sesję" + +#: src/menuhandler.cpp:1567 +msgid "" +"

You have chosen to open another desktop session.
The current session " +"will be hidden and a new login screen will be displayed.
An F-key is " +"assigned to each session; F%1 is usually assigned to the first session, F%2 " +"to the second session and so on. You can switch between sessions by pressing " +"Ctrl, Alt and the appropriate F-key at the same time. Additionally, the KDE " +"Panel and Desktop menus have actions for switching between sessions.

" +msgstr "" +"

Masz zamiar rozpocząć kolejną sesję.

Bieżąca sesja zostanie ukryta i " +"pojawi się nowy ekran logowania.
Do każdej sesji przypisane są klawisze " +"funkcyjne; F%1 jest zazwyczaj przypisany do pierwszej, F%2 do drugiej itd. " +"Możesz przełączać się pomiędzy sesjami naciskając jednocześnie Ctrl, Alt i " +"odpowiedni klawisz funkcyjny. W menu panelu i pulpitu KDE pojawią się " +"dodatkowe opcje przełączania pomiędzy sesjami.

" + +#: src/menuhandler.cpp:1578 +msgid "Warning - New Session" +msgstr "Ostrzeżenie - nowa sesja" + +#: src/menuhandler.cpp:1579 +msgid "&Start New Session" +msgstr "&Rozpocznij nową sesję" + +#: src/tastylistview.cpp:288 +msgid "Add" +msgstr "Dodaj" + +#: src/tastylistview.cpp:288 +msgid "to your favourite applications" +msgstr "do ulubionych programów" + +#: src/tastylistview.cpp:292 +msgid "Remove" +msgstr "Usuń" + +#: src/tastylistview.cpp:292 +msgid "from your favourite applications" +msgstr "z ulubionych programów" + +#: src/tastylistview.cpp:296 src/tastylistview.cpp:313 +msgid "Browse" +msgstr "Przeglądaj" + +#: src/tastylistview.cpp:300 +msgid "Expand" +msgstr "Rozwiń" + +#: src/tastylistview.cpp:304 +msgid "Collapse" +msgstr "Zwiń" + +#: src/tastymenu.cpp:69 src/tastymenu.cpp:318 +msgid "Menu" +msgstr "Menu" + +#: src/tastymenu.cpp:186 +msgid "KMenu replacement" +msgstr "Program zastępujący Kmenu" + +#: src/tastymenu.cpp:191 +msgid "Maintainer" +msgstr "Opiekun" + +#: src/tastymenu.cpp:195 +msgid "_: NAME OF TRANSLATORS\\nYour names" +msgstr "Tomasz Argasiński" + +#: src/tastymenu.cpp:196 +msgid "_: EMAIL OF TRANSLATORS\\nYour emails" +msgstr "targsinski@o2.pl" + +#: src/tastymenu.cpp:199 +msgid "For the Russian translation" +msgstr "za tłumaczenie na język rosyjski" + +#: src/tastymenu.cpp:202 +msgid "For the German translation" +msgstr "za tłumaczenie na język niemiecki" + +#: src/tastymenu.cpp:205 +msgid "For the Spanish translation" +msgstr "za tłumaczenie na język hiszpański" + +#: src/tastymenu.cpp:208 +msgid "For the Ukrainian translation" +msgstr "za tłumaczenie na język ukraiński" + +#: src/tastymenu.cpp:211 +msgid "For the French translation" +msgstr "za tłumaczenie na język francuski" + +#: src/tastymenu.cpp:214 +msgid "For the Finnish translation" +msgstr "za tłumaczenie na język fiński" + +#: src/tastymenu.cpp:217 +msgid "For the Slovenian translation" +msgstr "za tłumaczenie na język słoweński" + +#: src/tastymenu.cpp:220 +msgid "For the Polish translation" +msgstr "za tłumaczenie na język polski" + +#: src/tastymenu.cpp:225 +msgid "For the Switch user code from KDM" +msgstr "za kod przełączania użytkownika z KDM" + +#: src/tastymenu.cpp:229 +msgid "For some inspirations here and there." +msgstr "za wzajemne inspiracje" + +#: src/tastymenu.cpp:233 +msgid "For some code taken from Amarok's statistics list view" +msgstr "za kod wzięty z listy statystyk Amaroka" + +#: src/tastymenu.cpp:264 +msgid "Appearance" +msgstr "Wygląd" + +#: src/tastymenu.cpp:265 +msgid "Behaviour" +msgstr "Zachowanie" + +#: src/tastymenu.cpp:274 src/tastymenu.cpp:275 +msgid "Toggle Tasty Menu" +msgstr "Przełącz Tasty Menu" + +#: src/tastymenu.cpp:342 +msgid "There is one new installed application" +msgstr "Jest jeden nowo zainstalowany program" + +#: src/tastymenu.cpp:414 +msgid "&About" +msgstr "&O programie Tasty Menu" + +#: src/tastymenu.cpp:415 +msgid "&Help" +msgstr "Pomo&c" + +#: src/tastymenu.cpp:416 +msgid "&Edit Menu" +msgstr "&Edytuj menu" + +#: src/tastymenu.cpp:418 +msgid "&Clear recently installed applications list" +msgstr "&Wyczyść listę ostatnio zainstalowanych programów" + +#: src/tastymenu.cpp:420 +msgid "&Configure Global Shortcuts..." +msgstr "&Konfiguracja skrótów globalnych" + +#: src/tastymenu.cpp:421 +msgid "&Configure..." +msgstr "&Konfiguracja..." + diff --git a/po/pt_BR.po b/po/pt_BR.po new file mode 100644 index 0000000..a344b58 --- /dev/null +++ b/po/pt_BR.po @@ -0,0 +1,774 @@ +# translation of es.po to +# translation of pt_BR.po to +# This file is put in the public domain. +# +# Ewerton de Almeida Dutra , 2007. +msgid "" +msgstr "" +"Project-Id-Version: pt_BR\n" +"POT-Creation-Date: 2007-12-06 17:00+0100\n" +"PO-Revision-Date: 2007-12-06 17:38-0200\n" +"Last-Translator: Ewerton de Almeida Dutra\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Report-Msgid-Bugs-To: \n" +"X-Generator: KBabel 1.11.4\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: _translatorinfo.cpp:1 +msgid "" +"_: NAME OF TRANSLATORS\n" +"Your names" +msgstr "Ewerton de Almeida Dutra" + +#: _translatorinfo.cpp:3 +msgid "" +"_: EMAIL OF TRANSLATORS\n" +"Your emails" +msgstr "ea.dutra@gmail.com" + +#. i18n: file ./behaviour.ui line 16 +#: appearance.cpp:273 behaviour.cpp:114 rc.cpp:87 rc.cpp:172 +#, no-c-format +msgid "Form1" +msgstr "Form1" + +#. i18n: file ./appearance.ui line 32 +#: appearance.cpp:274 appearance.cpp:285 rc.cpp:175 rc.cpp:206 +#, no-c-format +msgid "Applications list" +msgstr "Lista de Aplicativos" + +#. i18n: file ./appearance.ui line 43 +#: appearance.cpp:275 rc.cpp:178 +#, no-c-format +msgid "Show tree e&xpanders" +msgstr "Mostrar botões de e&xpansão de categorias" + +#. i18n: file ./appearance.ui line 46 +#: appearance.cpp:276 rc.cpp:181 +#, no-c-format +msgid "Alt+X" +msgstr "Alt+X" + +#. i18n: file ./appearance.ui line 57 +#: appearance.cpp:277 rc.cpp:184 +#, no-c-format +msgid "Alwa&ys collapsed categories" +msgstr "Não expand&ir categorias" + +#. i18n: file ./behaviour.ui line 94 +#: appearance.cpp:278 behaviour.cpp:120 rc.cpp:105 rc.cpp:187 +#, no-c-format +msgid "Alt+Y" +msgstr "Alt+Y" + +#. i18n: file ./appearance.ui line 68 +#: appearance.cpp:279 rc.cpp:190 +#, no-c-format +msgid "Hei&ght:" +msgstr "&Altura:" + +#. i18n: file ./appearance.ui line 82 +#: appearance.cpp:280 rc.cpp:193 +#, no-c-format +msgid "Button label:" +msgstr "Rótulo do botão:" + +#. i18n: file ./appearance.ui line 111 +#: appearance.cpp:281 rc.cpp:196 +#, no-c-format +msgid "" +"What text should be displayed in the Kicker button tooltip instead of " +"\"Tasty Menu\".\n" +"Empty means default." +msgstr "" +"Dica que deve ser mostrada no botão Kicker no lugar de " +"\"Tasty Menu\".\n" +"Vazio por padrão." + +#. i18n: file ./appearance.ui line 119 +#: appearance.cpp:283 rc.cpp:200 +#, no-c-format +msgid "Wi&dth:" +msgstr "Lar&gura:" + +#. i18n: file ./appearance.ui line 133 +#: appearance.cpp:284 rc.cpp:203 +#, no-c-format +msgid "Tootip title:" +msgstr "Título da dica:" + +#. i18n: file ./appearance.ui line 160 +#: appearance.cpp:286 rc.cpp:209 +#, no-c-format +msgid "of the screen width" +msgstr "da largura da tela" + +#. i18n: file ./appearance.ui line 173 +#: appearance.cpp:287 rc.cpp:212 +#, no-c-format +msgid "Menu button" +msgstr "da altura da tela" + +#. i18n: file ./appearance.ui line 184 +#: appearance.cpp:288 rc.cpp:215 +#, no-c-format +msgid "of the screen height" +msgstr "da altura da tela" + +#. i18n: file ./appearance.ui line 220 +#: appearance.cpp:290 rc.cpp:219 +#, no-c-format +msgid "&Icon:" +msgstr "&Icone:" + +#. i18n: file ./appearance.ui line 223 +#: appearance.cpp:291 rc.cpp:222 +#, no-c-format +msgid "Alt+I" +msgstr "Alt+I" + +#. i18n: file ./appearance.ui line 246 +#: appearance.cpp:293 rc.cpp:226 +#, no-c-format +msgid "" +"What icon should be displayed in the kicker button instead of the KMenu " +"one.\n" +"Empty means default." +msgstr "" +"Icone que deve ser mostrado no botão Kicker no lugar de KMenu " +"one.\n" +"Vazio por padrão." + +#. i18n: file ./appearance.ui line 262 +#: appearance.cpp:295 rc.cpp:230 +#, no-c-format +msgid "N&one" +msgstr "&Nenhum" + +#. i18n: file ./menu.ui line 308 +#: appearance.cpp:296 behaviour.cpp:117 menu.cpp:189 rc.cpp:72 rc.cpp:96 +#: rc.cpp:233 +#, no-c-format +msgid "Alt+O" +msgstr "Alt+O" + +#. i18n: file ./appearance.ui line 280 +#: appearance.cpp:297 rc.cpp:236 +#, no-c-format +msgid "Menu size" +msgstr "Tamanho do menu" + +#. i18n: file ./appearance.ui line 291 +#: appearance.cpp:298 rc.cpp:239 +#, no-c-format +msgid "&Action icons size:" +msgstr "Tamanho dos ícones de &ações:" + +#. i18n: file ./appearance.ui line 305 +#: appearance.cpp:299 rc.cpp:242 +#, no-c-format +msgid "&Display applications descriptions" +msgstr "Mostrar a &descrição dos aplicativo" + +#. i18n: file ./appearance.ui line 308 +#: appearance.cpp:300 rc.cpp:245 +#, no-c-format +msgid "Alt+D" +msgstr "Alt+D" + +#. i18n: file ./appearance.ui line 344 +#: appearance.cpp:302 rc.cpp:249 +#, no-c-format +msgid "&Text:" +msgstr "&Texto:" + +#. i18n: file ./appearance.ui line 347 +#: appearance.cpp:303 rc.cpp:252 +#, no-c-format +msgid "Alt+T" +msgstr "Alt+T" + +#. i18n: file ./appearance.ui line 362 +#: appearance.cpp:305 rc.cpp:256 +#, no-c-format +msgid "" +"What label instead of \"Menu\" should be shown for the Kicker button.\n" +"Empty means default." +msgstr "" +"Rótulo de \"Menú\" que deverá ser mostrado para o botão Kicker.\n" +"Vazio por padrão." + +#. i18n: file ./appearance.ui line 370 +#: appearance.cpp:307 rc.cpp:260 +#, no-c-format +msgid "&None" +msgstr "&Nenhum" + +#. i18n: file ./menu.ui line 280 +#: appearance.cpp:308 behaviour.cpp:144 menu.cpp:183 rc.cpp:58 rc.cpp:169 +#: rc.cpp:263 +#, no-c-format +msgid "Alt+N" +msgstr "Alt+N" + +#. i18n: file ./appearance.ui line 383 +#: appearance.cpp:309 appearance.cpp:310 rc.cpp:266 rc.cpp:269 +#, no-c-format +msgid "%" +msgstr "%" + +#. i18n: file ./appearance.ui line 417 +#: appearance.cpp:311 rc.cpp:272 +#, no-c-format +msgid "Button icon:" +msgstr "Ícone do botão:" + +#. i18n: file ./appearance.ui line 453 +#: appearance.cpp:312 rc.cpp:275 +#, no-c-format +msgid "third column:" +msgstr "terceira coluna" + +#. i18n: file ./appearance.ui line 461 +#: appearance.cpp:313 rc.cpp:278 +#, no-c-format +msgid "second column:" +msgstr "segunda coluna" + +#. i18n: file ./appearance.ui line 469 +#: appearance.cpp:314 appearance.cpp:315 appearance.cpp:316 appearance.cpp:319 +#: rc.cpp:281 rc.cpp:284 rc.cpp:287 rc.cpp:296 +#, no-c-format +msgid " pixels" +msgstr " pixels" + +#. i18n: file ./appearance.ui line 520 +#: appearance.cpp:317 rc.cpp:290 +#, no-c-format +msgid "first column:" +msgstr "primeira coluna" + +#. i18n: file ./appearance.ui line 538 +#: appearance.cpp:318 rc.cpp:293 +#, no-c-format +msgid "Icons si&zes:" +msgstr "&Tamanho dos ícones:" + +#. i18n: file ./behaviour.ui line 32 +#: behaviour.cpp:115 rc.cpp:90 +#, no-c-format +msgid "General behaviour" +msgstr "Comportamento geral" + +#. i18n: file ./behaviour.ui line 60 +#: behaviour.cpp:116 rc.cpp:93 +#, no-c-format +msgid "&Override alt+F1 keyboard shortcut (requires kicker restart)" +msgstr "&Capturar o accesso rápido Alt+F1 (necessita reiniciar o kicker)" + +#. i18n: file ./behaviour.ui line 66 +#: behaviour.cpp:118 rc.cpp:99 +#, no-c-format +msgid "" +"Pops up Tasty Menu instead of KMenu when the shortcut sequence Alt+F1 is " +"pressed" +msgstr "Mostra o Tasty Menu no lugar do KMenu quando o acesso rápido ALT+F1 é pressionado" + +#. i18n: file ./behaviour.ui line 91 +#: behaviour.cpp:119 rc.cpp:102 +#, no-c-format +msgid "Show save session functionalit&y" +msgstr "Mostrar a opção de salvar a sessão" + +#. i18n: file ./behaviour.ui line 98 +#: behaviour.cpp:121 rc.cpp:108 +#, no-c-format +msgid "" +"Under the menu that pops up when the button with user name is pressed a new " +"item \"Save current session\" is added.\n" +"It saves the current session informations like open applications and windows " +"position. In order to use it you must set \"Restore manually saved session\" " +"in the Session Manager Kcontrol module." +msgstr "" +"Sob o menu que se mostra quando o botão com o nome do usuário é pressionado um novo " +"item chamado \"Salvar a sessão atual\" é adiocionado.\n " +"Isto salva as informações da sessão atual, como aplicativos abertos e posição das janelas " +"Para usar, você deve selecionar \"Restaurar sessão salva manualmente\" " +"no módulo Gerenciador de Sessão do Painel de Controle do KDE." + +#. i18n: file ./behaviour.ui line 106 +#: behaviour.cpp:123 rc.cpp:112 +#, no-c-format +msgid "&Hide groups with only one application" +msgstr "Ocultar &grupos com somente uma aplicação" + +#. i18n: file ./behaviour.ui line 109 +#: behaviour.cpp:124 rc.cpp:115 +#, no-c-format +msgid "Alt+H" +msgstr "Alt+H" + +#. i18n: file ./behaviour.ui line 120 +#: behaviour.cpp:125 rc.cpp:118 +#, no-c-format +msgid "Show items in alpha&betical order" +msgstr "Mostrar elementos em ordem &alfabética" + +#. i18n: file ./behaviour.ui line 123 +#: behaviour.cpp:126 rc.cpp:121 +#, no-c-format +msgid "Alt+B" +msgstr "Alt+B" + +#. i18n: file ./behaviour.ui line 136 +#: behaviour.cpp:127 rc.cpp:124 +#, no-c-format +msgid "Search field behaviour" +msgstr "Comportamento do campo de &busca" + +#. i18n: file ./behaviour.ui line 164 +#: behaviour.cpp:129 rc.cpp:128 +#, no-c-format +msgid "Si&mple searches" +msgstr "Busca &simples" + +#. i18n: file ./behaviour.ui line 167 +#: behaviour.cpp:130 rc.cpp:131 +#, no-c-format +msgid "Alt+M" +msgstr "Alt+M" + +#. i18n: file ./behaviour.ui line 173 +#: behaviour.cpp:131 rc.cpp:134 +#, no-c-format +msgid "Filters the applications list" +msgstr "Busca &simples" + +#. i18n: file ./behaviour.ui line 176 +#: behaviour.cpp:132 rc.cpp:137 +#, no-c-format +msgid "" +"It displays in the first column all the applications whose name or " +"description matches with the query you entered" +msgstr "" +"Mostra na primeira coluna todos os aplicativos cujo nome ou " +"descrição coincide com a consulta desejada" + +#. i18n: file ./behaviour.ui line 184 +#: behaviour.cpp:133 rc.cpp:140 +#, no-c-format +msgid "&Kerry Beagle integration" +msgstr "Integração com o Kerry Beagle" + +#. i18n: file ./behaviour.ui line 187 +#: behaviour.cpp:134 rc.cpp:143 +#, no-c-format +msgid "Alt+K" +msgstr "Alt+K" + +#. i18n: file ./behaviour.ui line 190 +#: behaviour.cpp:135 rc.cpp:146 +#, no-c-format +msgid "Perform queries with Kerry Beagle" +msgstr "Consultar com o Kerry Beagle" + +#. i18n: file ./behaviour.ui line 194 +#: behaviour.cpp:136 rc.cpp:149 +#, no-c-format +msgid "" +"Perform queries with Kerry Beagle instead of using the first column.\n" +"It needs Kerry Beagle up and running." +msgstr "" +"Consultar com o Kerry Beagle ao invés de usar a primeira coluna.\n" +"Necessita do Kerry Beagle instalado e em execução." + +#. i18n: file ./behaviour.ui line 202 +#: behaviour.cpp:138 rc.cpp:153 +#, no-c-format +msgid "Stri&gi Integration" +msgstr "Integração com o &Strigi" + +#. i18n: file ./menu.ui line 322 +#: behaviour.cpp:139 menu.cpp:192 rc.cpp:81 rc.cpp:156 +#, no-c-format +msgid "Alt+G" +msgstr "Alt+G" + +#. i18n: file ./behaviour.ui line 208 +#: behaviour.cpp:140 rc.cpp:159 +#, no-c-format +msgid "Perform queries with Strigi" +msgstr "Consultar com o Strigi" + +#. i18n: file ./behaviour.ui line 212 +#: behaviour.cpp:141 rc.cpp:162 +#, no-c-format +msgid "" +"Perform queries with Strigi instead of using the first column.\n" +"It needs the Strigi Daemon up and running" +msgstr "" +"Consultar com o Strigi ao invés de usar a primeira coluna.\n" +"Necessita do Strigi instalado e em execução." + +#. i18n: file ./behaviour.ui line 222 +#: behaviour.cpp:143 rc.cpp:166 +#, no-c-format +msgid "&Notify recently installed applications (requires kicker restart)" +msgstr "Apagar lista de aplicativos &instalados recentemente" + +#: dmctl.cpp:345 +msgid "" +"_: user: ...\n" +"%1: TTY login" +msgstr "" +"_: user: ...\n" +"%1: TTY login" + +#: dmctl.cpp:351 +msgid "Unused" +msgstr "Sem uso" + +#: dmctl.cpp:353 +msgid "X login on remote host" +msgstr "Login gráfico no host remoto" + +#: dmctl.cpp:354 +#, c-format +msgid "" +"_: ... host\n" +"X login on %1" +msgstr "" +"_: ... host\n" +"X login on %1" + +#: dmctl.cpp:357 +msgid "" +"_: user: session type\n" +"%1: %2" +msgstr "usuário: tipo de sessão" + +#: dmctl.cpp:372 +msgid "" +"_: session (location)\n" +"%1 (%2)" +msgstr "sessão (localização)" + +#. i18n: file ./tastytooltipwidget.ui line 16 +#: menu.cpp:167 rc.cpp:3 rc.cpp:13 tastymenu.cpp:184 tastytooltipwidget.cpp:79 +#, no-c-format +msgid "Tasty Menu" +msgstr "Tasty Menu" + +#. i18n: file ./menu.ui line 84 +#: menu.cpp:168 rc.cpp:16 +#, no-c-format +msgid "&Clear list" +msgstr "&Apagar lista" + +#. i18n: file ./menu.ui line 87 +#: menu.cpp:169 rc.cpp:19 +#, no-c-format +msgid "Alt+C" +msgstr "Alt+C" + +#. i18n: file ./menu.ui line 95 +#: menu.cpp:170 rc.cpp:22 +#, no-c-format +msgid "Se&arch:" +msgstr "&Buscar" + +#. i18n: file ./menu.ui line 107 +#: menu.cpp:172 rc.cpp:25 +#, no-c-format +msgid "Favourite applications" +msgstr "Aplicativos favoritos" + +#. i18n: file ./menu.ui line 112 +#: menu.cpp:173 rc.cpp:28 +#, no-c-format +msgid "Most used applications" +msgstr "Aplicativos mais usados" + +#. i18n: file ./menu.ui line 117 +#: menu.cpp:174 rc.cpp:31 +#, no-c-format +msgid "Recent applications" +msgstr "Aplicativos recentes" + +#. i18n: file ./menu.ui line 122 +#: menu.cpp:175 rc.cpp:34 +#, no-c-format +msgid "Recent documents" +msgstr "Documentos recentes" + +#. i18n: file ./menu.ui line 137 +#: menu.cpp:176 rc.cpp:37 +#, no-c-format +msgid "Use this dropdown menu to change the behaviour of the list below" +msgstr "Use este menu de arrastar e soltar para mudar o comportamento da lista inferior" + +#. i18n: file ./menu.ui line 161 +#: menu.cpp:177 menu.cpp:180 rc.cpp:40 rc.cpp:49 +#, no-c-format +msgid "..." +msgstr "..." + +#. i18n: file ./menu.ui line 169 +#: menu.cpp:178 rc.cpp:43 +#, no-c-format +msgid "&Show:" +msgstr "&Exibir:" + +#. i18n: file ./menu.ui line 234 +#: menu.cpp:179 rc.cpp:46 +#, no-c-format +msgid "All Applications" +msgstr "Todos os aplicativos" + +#. i18n: file ./menu.ui line 259 +#: menu.cpp:181 menuhandler.cpp:463 rc.cpp:52 +#, no-c-format +msgid "Make this menu a normal window" +msgstr "Fazer deste menu uma janela normal" + +#. i18n: file ./menu.ui line 277 +#: menu.cpp:182 rc.cpp:55 +#, no-c-format +msgid "Ru&n program..." +msgstr "Executa&r programa..." + +#. i18n: file ./menu.ui line 283 +#: menu.cpp:184 rc.cpp:61 +#, no-c-format +msgid "" +"If you know exatly how a program is named you can directly enter the " +"application name" +msgstr "Caso você saiba exatamente qual o nome do programa você pode introduzí-lo aqui diretamente" + +#. i18n: file ./menu.ui line 297 +#: menu.cpp:187 rc.cpp:66 +#, no-c-format +msgid "Start a new session, switch the active user or edit your user profile" +msgstr "Inicia uma nova sessão, troca o usuário ativo ou edita seu perfil de usuário" + +#. i18n: file ./menu.ui line 305 +#: menu.cpp:188 rc.cpp:69 +#, no-c-format +msgid "L&ock Session" +msgstr "&Travar sessão" + +#. i18n: file ./menu.ui line 311 +#: menu.cpp:190 rc.cpp:75 +#, no-c-format +msgid "Lock the pc with a password if you are going away for a while" +msgstr "Travar o computador com uma senha enquanto você está ausente" + +#. i18n: file ./menu.ui line 319 +#: menu.cpp:191 rc.cpp:78 +#, no-c-format +msgid "Lo&g Out..." +msgstr "&Finalizar sessão" + +#. i18n: file ./menu.ui line 325 +#: menu.cpp:193 rc.cpp:84 +#, no-c-format +msgid "Logout, reboot or shoutdown the computer" +msgstr "Finalizar sessão, reiniciar ou desligar o computador" + +#: menuhandler.cpp:458 +msgid "Make this window a popup menu" +msgstr "Fazer desta janela um menu popup" + +#: menuhandler.cpp:1426 +msgid "&Edit submenu..." +msgstr "Editar &submenu..." + +#: menuhandler.cpp:1429 +msgid "&Edit item..." +msgstr "&Editar item..." + +#: menuhandler.cpp:1430 +msgid "&Add to desktop" +msgstr "&Adicionar a àrea de trabalho" + +#: menuhandler.cpp:1435 +msgid "&Add to favourite applications" +msgstr "Adicionar a &favoritos" + +#: menuhandler.cpp:1437 +msgid "&Remove from favourite applications" +msgstr "Exclui&r de favoritos" + +#: menuhandler.cpp:1501 +msgid "Edit user profile..." +msgstr "Editar perfil de usuário..." + +#: menuhandler.cpp:1507 +msgid "Save current session" +msgstr "Salvar a sessão atual" + +#: menuhandler.cpp:1513 +msgid "Lock session and start a new one" +msgstr "Travar a sessão atual e iniciar uma nova sessão" + +#: menuhandler.cpp:1514 +msgid "Start New Session" +msgstr "Iniciar uma nova sessão" + +#: menuhandler.cpp:1567 +msgid "" +"

You have chosen to open another desktop session.
The current session " +"will be hidden and a new login screen will be displayed.
An F-key is " +"assigned to each session; F%1 is usually assigned to the first session, F%2 " +"to the second session and so on. You can switch between sessions by pressing " +"Ctrl, Alt and the appropriate F-key at the same time. Additionally, the KDE " +"Panel and Desktop menus have actions for switching between sessions.

" +msgstr "" +"

Você decidiu abrir outra sessão.
A sessão atual será ocultada e uma " +"nova tela de login será exibida.
Uma tecla de função será associada a cada sessão; " +"F%1 para a primeira sessão,F%2 para a segunda, etc. Você pode alternar entre elas " +"pressionando Ctrl, Alt e a tecla de função desejada ao mesmo tempo. " +"Adicionalmente, o painel do KDE e os menus da Área de Trabalho terão ações para " +"alternar entre as diferentes sessões.

" + +#: menuhandler.cpp:1578 +msgid "Warning - New Session" +msgstr "Cuidado - Nova Sessão" + +#: menuhandler.cpp:1579 +msgid "&Start New Session" +msgstr "Iniciar Nova &Sessão" + +#. i18n: file ./tastytooltipwidget.ui line 83 +#: rc.cpp:6 tastytooltipwidget.cpp:80 +#, no-c-format +msgid "Tasty Menu" +msgstr "Tasty Menu" + +#. i18n: file ./tastytooltipwidget.ui line 91 +#: rc.cpp:9 tastytooltipwidget.cpp:81 +#, no-c-format +msgid "Applications, tasks and desktop sessions" +msgstr "Aplicativos, tarefas e sessões" + +#: tastylistview.cpp:288 +msgid "to your favourite applications" +msgstr "para seus aplicativos favoritos" + +#: tastylistview.cpp:292 +msgid "from your favourite applications" +msgstr "de seus aplicativos favoritos" + +#: tastylistview.cpp:296 tastylistview.cpp:313 +msgid "Browse" +msgstr "Buscar" + +#: tastylistview.cpp:300 +msgid "Expand" +msgstr "Expandir" + +#: tastylistview.cpp:304 +msgid "Collapse" +msgstr "Contrair" + +#: tastymenu.cpp:69 tastymenu.cpp:318 +msgid "Menu" +msgstr "Menu" + +#: tastymenu.cpp:186 +msgid "KMenu replacement" +msgstr "Substituir o KMenu" + +#: tastymenu.cpp:191 +msgid "Maintainer" +msgstr "Manutenção" + +#: tastymenu.cpp:195 +msgid "_: NAME OF TRANSLATORS\\nYour names" +msgstr "_: NOME DOS TRADUTORES\\nEwerton de Almeida Dutra" + +#: tastymenu.cpp:196 +msgid "_: EMAIL OF TRANSLATORS\\nYour emails" +msgstr "_: EMAIL DOS TRADUTORES\\ea.dutra@gmail.com" + +#: tastymenu.cpp:199 +msgid "For the Russian translation" +msgstr "Pela tradução para o Russo" + +#: tastymenu.cpp:202 +msgid "For the German translation" +msgstr "Pela tradução para o Alemão" + +#: tastymenu.cpp:205 +msgid "For the Spanish translation" +msgstr "Pela tradução para o Espanhol" + +#: tastymenu.cpp:208 +msgid "For the Ukrainian translation" +msgstr "Pela tradução para o Ucraniano" + +#: tastymenu.cpp:211 +msgid "For the French translation" +msgstr "Pela tradução para o Francês" + +#: tastymenu.cpp:214 +msgid "For the Finnish translation" +msgstr "Pela tradução para o Finlandês" + +#: tastymenu.cpp:217 +msgid "For the Slovenian translation" +msgstr "Pela tradução para o Eslovaco" + +#: tastymenu.cpp:220 +msgid "For the Polish translation" +msgstr "Pela tradução para o Polonês" + +#: tastymenu.cpp:225 +msgid "For the Switch user code from KDM" +msgstr "Pelo código para trocar usuários KDM" + +#: tastymenu.cpp:229 +msgid "For some inspirations here and there." +msgstr "Pelas inspirações aqui e ali." + +#: tastymenu.cpp:233 +msgid "For some code taken from Amarok's statistics list view" +msgstr "Pelo código da lista de estatísticas do Amarok" + +#: tastymenu.cpp:265 +msgid "Behaviour" +msgstr "Comportamento" + +#: tastymenu.cpp:274 tastymenu.cpp:275 +msgid "Toggle Tasty Menu" +msgstr "Ativar/desativar o Tasty Menu" + +#: tastymenu.cpp:343 +#, c-format +msgid "" +"_n: There is one new installed application\n" +"There are %n new installed applications" +msgstr "" +"Aqui está um novo aplicativo instalado\n" +"Aqui está(ão) %n novos aplicativos instalados" + +#: tastymenu.cpp:416 +msgid "&Edit Menu" +msgstr "&Editar menu" + +#: tastymenu.cpp:418 +msgid "&Clear recently installed applications list" +msgstr "Apagar lista de aplicativos &instalados recentemente" + +#: tastymenu.cpp:420 +msgid "&Configure Global Shortcuts..." +msgstr "Configurar accessos rápidos &globais" + +#: tastymenu.cpp:421 +msgid "&Configure..." +msgstr "&Configurar..." + diff --git a/po/ru.po b/po/ru.po new file mode 100644 index 0000000..77c7000 --- /dev/null +++ b/po/ru.po @@ -0,0 +1,831 @@ +# translation of ru.po to Русский +# translation of ru.po to +# translation of tastymenu.po to +# This file is put in the public domain. +# +# Yurkovsky Andrey , 2007. +msgid "" +msgstr "" +"Project-Id-Version: ru\n" +"POT-Creation-Date: 2007-11-21 19:16+0100\n" +"PO-Revision-Date: 2007-08-03 20:10+0300\n" +"Last-Translator: Yurkovsky Andrey \n" +"Language-Team: Русский \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Report-Msgid-Bugs-To: \n" +"X-Generator: KBabel 1.11.4\n" + +#: _translatorinfo.cpp:1 +msgid "" +"_: NAME OF TRANSLATORS\n" +"Your names" +msgstr "Yurkovsky Andrey" + +#: _translatorinfo.cpp:3 +msgid "" +"_: EMAIL OF TRANSLATORS\n" +"Your emails" +msgstr "anyr@tut.by" + +#. i18n: file ./behaviour.ui line 16 +#: appearance.cpp:273 behaviour.cpp:114 rc.cpp:87 rc.cpp:172 +#, no-c-format +msgid "Form1" +msgstr "Form1" + +#. i18n: file ./appearance.ui line 32 +#: appearance.cpp:274 appearance.cpp:285 rc.cpp:175 rc.cpp:206 +#, no-c-format +msgid "Applications list" +msgstr "Список приложений" + +#. i18n: file ./appearance.ui line 43 +#: appearance.cpp:275 rc.cpp:178 +#, no-c-format +msgid "Show tree e&xpanders" +msgstr "Показывать &дерево" + +#. i18n: file ./appearance.ui line 46 +#: appearance.cpp:276 rc.cpp:181 +#, no-c-format +msgid "Alt+X" +msgstr "Alt+X" + +#. i18n: file ./appearance.ui line 57 +#: appearance.cpp:277 rc.cpp:184 +#, no-c-format +msgid "Alwa&ys collapsed categories" +msgstr "Всегда &свернутые категории" + +#. i18n: file ./behaviour.ui line 94 +#: appearance.cpp:278 behaviour.cpp:120 rc.cpp:105 rc.cpp:187 +#, no-c-format +msgid "Alt+Y" +msgstr "Alt+Y" + +#. i18n: file ./appearance.ui line 68 +#: appearance.cpp:279 rc.cpp:190 +#, no-c-format +msgid "Hei&ght:" +msgstr "&Высота" + +#. i18n: file ./appearance.ui line 82 +#: appearance.cpp:280 rc.cpp:193 +#, no-c-format +msgid "Button label:" +msgstr "Надпись" + +#. i18n: file ./appearance.ui line 111 +#: appearance.cpp:281 rc.cpp:196 +#, no-c-format +msgid "" +"What text should be displayed in the Kicker button tooltip instead of " +"\"Tasty Menu\".\n" +"Empty means default." +msgstr "" +"Название всплывающего окна, показываемое " +"вместо \"Tasty Menu\".\n" +"В другом случае - стандартное." + +#. i18n: file ./appearance.ui line 119 +#: appearance.cpp:283 rc.cpp:200 +#, no-c-format +msgid "Wi&dth:" +msgstr "&Ширина" + +#. i18n: file ./appearance.ui line 133 +#: appearance.cpp:284 rc.cpp:203 +#, no-c-format +msgid "Tootip title:" +msgstr "Название всплывающего окна:" + +#. i18n: file ./appearance.ui line 160 +#: appearance.cpp:286 rc.cpp:209 +#, no-c-format +msgid "of the screen width" +msgstr "от ширины экрана" + +#. i18n: file ./appearance.ui line 173 +#: appearance.cpp:287 rc.cpp:212 +#, no-c-format +msgid "Menu button" +msgstr "Кнопка меню" + +#. i18n: file ./appearance.ui line 184 +#: appearance.cpp:288 rc.cpp:215 +#, no-c-format +msgid "of the screen height" +msgstr "от высоты экрана" + +#. i18n: file ./appearance.ui line 220 +#: appearance.cpp:290 rc.cpp:219 +#, no-c-format +msgid "&Icon:" +msgstr "&Пиктограмма" + +#. i18n: file ./appearance.ui line 223 +#: appearance.cpp:291 rc.cpp:222 +#, no-c-format +msgid "Alt+I" +msgstr "Alt+I" + +#. i18n: file ./appearance.ui line 246 +#: appearance.cpp:293 rc.cpp:226 +#, no-c-format +msgid "" +"What icon should be displayed in the kicker button instead of the KMenu " +"one.\n" +"Empty means default." +msgstr "" +"Эта пиктограмма будет отображаться " +"вместо KMenu.\n" +"В другом случае - стандартная пиктограмма." + +#. i18n: file ./appearance.ui line 262 +#: appearance.cpp:295 rc.cpp:230 +#, no-c-format +msgid "N&one" +msgstr "Н&ичего" + +#. i18n: file ./menu.ui line 308 +#: appearance.cpp:296 behaviour.cpp:117 menu.cpp:189 rc.cpp:72 rc.cpp:96 +#: rc.cpp:233 +#, no-c-format +msgid "Alt+O" +msgstr "Alt+O" + +#. i18n: file ./appearance.ui line 280 +#: appearance.cpp:297 rc.cpp:236 +#, no-c-format +msgid "Menu size" +msgstr "Размер меню" + +#. i18n: file ./appearance.ui line 291 +#: appearance.cpp:298 rc.cpp:239 +#, no-c-format +msgid "&Action icons size:" +msgstr "Размер пиктограмм &функций" + +#. i18n: file ./appearance.ui line 305 +#: appearance.cpp:299 rc.cpp:242 +#, no-c-format +msgid "&Display applications descriptions" +msgstr "По&казывать описания" + +#. i18n: file ./appearance.ui line 308 +#: appearance.cpp:300 rc.cpp:245 +#, no-c-format +msgid "Alt+D" +msgstr "Alt+D" + +#. i18n: file ./appearance.ui line 344 +#: appearance.cpp:302 rc.cpp:249 +#, no-c-format +msgid "&Text:" +msgstr "&Текст" + +#. i18n: file ./appearance.ui line 347 +#: appearance.cpp:303 rc.cpp:252 +#, no-c-format +msgid "Alt+T" +msgstr "Alt+T" + +#. i18n: file ./appearance.ui line 362 +#: appearance.cpp:305 rc.cpp:256 +#, no-c-format +msgid "" +"What label instead of \"Menu\" should be shown for the Kicker button.\n" +"Empty means default." +msgstr "" +"Надпись вместо \"Меню\" рядом с кнопкой.\n" +"В другом случае - стандартная надпись." + +#. i18n: file ./appearance.ui line 370 +#: appearance.cpp:307 rc.cpp:260 +#, no-c-format +msgid "&None" +msgstr "&Ничего" + +#. i18n: file ./menu.ui line 280 +#: appearance.cpp:308 behaviour.cpp:144 menu.cpp:183 rc.cpp:58 rc.cpp:169 +#: rc.cpp:263 +#, no-c-format +msgid "Alt+N" +msgstr "Alt+N" + +#. i18n: file ./appearance.ui line 383 +#: appearance.cpp:309 appearance.cpp:310 rc.cpp:266 rc.cpp:269 +#, no-c-format +msgid "%" +msgstr "%" + +#. i18n: file ./appearance.ui line 417 +#: appearance.cpp:311 rc.cpp:272 +#, no-c-format +msgid "Button icon:" +msgstr "Пиктограмма" + +#. i18n: file ./appearance.ui line 453 +#: appearance.cpp:312 rc.cpp:275 +#, no-c-format +msgid "third column:" +msgstr "третья колонка:" + +#. i18n: file ./appearance.ui line 461 +#: appearance.cpp:313 rc.cpp:278 +#, no-c-format +msgid "second column:" +msgstr "вторая колонка:" + +#. i18n: file ./appearance.ui line 469 +#: appearance.cpp:314 appearance.cpp:315 appearance.cpp:316 appearance.cpp:319 +#: rc.cpp:281 rc.cpp:284 rc.cpp:287 rc.cpp:296 +#, no-c-format +msgid " pixels" +msgstr " точки" + +#. i18n: file ./appearance.ui line 520 +#: appearance.cpp:317 rc.cpp:290 +#, no-c-format +msgid "first column:" +msgstr "первая колонка:" + +#. i18n: file ./appearance.ui line 538 +#: appearance.cpp:318 rc.cpp:293 +#, fuzzy, no-c-format +msgid "Icons si&zes:" +msgstr "Размер &пиктограмм" + +#. i18n: file ./behaviour.ui line 32 +#: behaviour.cpp:115 rc.cpp:90 +#, no-c-format +msgid "General behaviour" +msgstr "Основное" + +#. i18n: file ./behaviour.ui line 60 +#: behaviour.cpp:116 rc.cpp:93 +#, no-c-format +msgid "&Override alt+F1 keyboard shortcut (requires kicker restart)" +msgstr "" +"Перехватить сочетание &клавиш Alt+F1 " +"(потребуется перезапуск панели)" + +#. i18n: file ./behaviour.ui line 66 +#: behaviour.cpp:118 rc.cpp:99 +#, no-c-format +msgid "" +"Pops up Tasty Menu instead of KMenu when the shortcut sequence Alt+F1 is " +"pressed" +msgstr "" +"Показывать Tasty Menu вместо KMenu при нажатии " +"Alt+F1" + +#. i18n: file ./behaviour.ui line 91 +#: behaviour.cpp:119 rc.cpp:102 +#, no-c-format +msgid "Show save session functionalit&y" +msgstr "" +"Показвать параметры работы с &сеансами" + +#. i18n: file ./behaviour.ui line 98 +#: behaviour.cpp:121 rc.cpp:108 +#, no-c-format +msgid "" +"Under the menu that pops up when the button with user name is pressed a new " +"item \"Save current session\" is added.\n" +"It saves the current session informations like open applications and windows " +"position. In order to use it you must set \"Restore manually saved session\" " +"in the Session Manager Kcontrol module." +msgstr "" +"Под меню, которые появляется при нажатии " +"кнопки с именем пользователя пункт " +"\"Сохранить сеанс\".\n" +"Это позволяет сохранить информацию об " +"открытых окнах и приложения и их " +"положении. Чтобы воспользоваться " +"сохраненной сессией, необходимо " +"установить \"Восстанавливать сеанс, " +"сохраненный вручную\" в менеджере сеансов " +"Центра управления." + +#. i18n: file ./behaviour.ui line 106 +#: behaviour.cpp:123 rc.cpp:112 +#, no-c-format +msgid "&Hide groups with only one application" +msgstr "" +"Спр&ятать группы, содержащие только одно " +"приложение" + +#. i18n: file ./behaviour.ui line 109 +#: behaviour.cpp:124 rc.cpp:115 +#, no-c-format +msgid "Alt+H" +msgstr "Alt+Y" + +#. i18n: file ./behaviour.ui line 120 +#: behaviour.cpp:125 rc.cpp:118 +#, no-c-format +msgid "Show items in alpha&betical order" +msgstr "" +"Сортировать список приложений по " +"ал&фавиту" + +#. i18n: file ./behaviour.ui line 123 +#: behaviour.cpp:126 rc.cpp:121 +#, no-c-format +msgid "Alt+B" +msgstr "Alt+Y" + +#. i18n: file ./behaviour.ui line 136 +#: behaviour.cpp:127 rc.cpp:124 +#, no-c-format +msgid "Search field behaviour" +msgstr "Способ поиска приложений" + +#. i18n: file ./behaviour.ui line 164 +#: behaviour.cpp:129 rc.cpp:128 +#, no-c-format +msgid "Si&mple searches" +msgstr "&Простой поиск" + +#. i18n: file ./behaviour.ui line 167 +#: behaviour.cpp:130 rc.cpp:131 +#, no-c-format +msgid "Alt+M" +msgstr "Alt+M" + +#. i18n: file ./behaviour.ui line 173 +#: behaviour.cpp:131 rc.cpp:134 +#, no-c-format +msgid "Filters the applications list" +msgstr "Фильтровать список приложений" + +#. i18n: file ./behaviour.ui line 176 +#: behaviour.cpp:132 rc.cpp:137 +#, no-c-format +msgid "" +"It displays in the first column all the applications whose name or " +"description matches with the query you entered" +msgstr "" +"В первой колонке отображаются все " +"приложения, названия или описания " +"которых соответствуют введенному запросу" + +#. i18n: file ./behaviour.ui line 184 +#: behaviour.cpp:133 rc.cpp:140 +#, no-c-format +msgid "&Kerry Beagle integration" +msgstr "Интеграция &Kerry Beagle" + +#. i18n: file ./behaviour.ui line 187 +#: behaviour.cpp:134 rc.cpp:143 +#, no-c-format +msgid "Alt+K" +msgstr "Alt+K" + +#. i18n: file ./behaviour.ui line 190 +#: behaviour.cpp:135 rc.cpp:146 +#, no-c-format +msgid "Perform queries with Kerry Beagle" +msgstr "Поиск с помощью Kerry Beagle" + +#. i18n: file ./behaviour.ui line 194 +#: behaviour.cpp:136 rc.cpp:149 +#, no-c-format +msgid "" +"Perform queries with Kerry Beagle instead of using the first column.\n" +"It needs Kerry Beagle up and running." +msgstr "" +"Результаты поиска с помощью Kerry Beagle " +"отобразятся в первой колонке.\n" +"Необходимо, чтобы Kerry Beagle был запущен." + +#. i18n: file ./behaviour.ui line 202 +#: behaviour.cpp:138 rc.cpp:153 +#, no-c-format +msgid "Stri&gi Integration" +msgstr "Интеграция &Strigi" + +#. i18n: file ./menu.ui line 322 +#: behaviour.cpp:139 menu.cpp:192 rc.cpp:81 rc.cpp:156 +#, no-c-format +msgid "Alt+G" +msgstr "Alt+G" + +#. i18n: file ./behaviour.ui line 208 +#: behaviour.cpp:140 rc.cpp:159 +#, no-c-format +msgid "Perform queries with Strigi" +msgstr "Поиск с помощью Strigi" + +#. i18n: file ./behaviour.ui line 212 +#: behaviour.cpp:141 rc.cpp:162 +#, no-c-format +msgid "" +"Perform queries with Strigi instead of using the first column.\n" +"It needs the Strigi Daemon up and running" +msgstr "" +"Результаты поиска с помощью Strigi " +"отобразятся в первой колонке.\n" +"Необходимо, чтобы сервис Strigi был запущен." + +#. i18n: file ./behaviour.ui line 222 +#: behaviour.cpp:143 rc.cpp:166 +#, fuzzy, no-c-format +msgid "&Notify recently installed applications (requires kicker restart)" +msgstr "" +"О&чистить список недавно установленных " +"приложений" + +#: dmctl.cpp:345 +msgid "" +"_: user: ...\n" +"%1: TTY login" +msgstr "" + +#: dmctl.cpp:351 +msgid "Unused" +msgstr "Не используется" + +#: dmctl.cpp:353 +msgid "X login on remote host" +msgstr "X вход в систему на удаленной машине" + +#: dmctl.cpp:354 +#, c-format +msgid "" +"_: ... host\n" +"X login on %1" +msgstr "" + +#: dmctl.cpp:357 +#, fuzzy +msgid "" +"_: user: session type\n" +"%1: %2" +msgstr "пользователь: тип сеанса" + +#: dmctl.cpp:372 +#, fuzzy +msgid "" +"_: session (location)\n" +"%1 (%2)" +msgstr "сеанс" + +#. i18n: file ./tastytooltipwidget.ui line 16 +#: menu.cpp:167 rc.cpp:3 rc.cpp:13 tastymenu.cpp:184 tastytooltipwidget.cpp:79 +#, no-c-format +msgid "Tasty Menu" +msgstr "Tasty Menu" + +#. i18n: file ./menu.ui line 84 +#: menu.cpp:168 rc.cpp:16 +#, no-c-format +msgid "&Clear list" +msgstr "О&чистить список" + +#. i18n: file ./menu.ui line 87 +#: menu.cpp:169 rc.cpp:19 +#, no-c-format +msgid "Alt+C" +msgstr "Alt+Y" + +#. i18n: file ./menu.ui line 95 +#: menu.cpp:170 rc.cpp:22 +#, no-c-format +msgid "Se&arch:" +msgstr "&Поиск" + +#. i18n: file ./menu.ui line 107 +#: menu.cpp:172 rc.cpp:25 +#, no-c-format +msgid "Favourite applications" +msgstr "Избранные приложения" + +#. i18n: file ./menu.ui line 112 +#: menu.cpp:173 rc.cpp:28 +#, no-c-format +msgid "Most used applications" +msgstr "Часто используемые приложения" + +#. i18n: file ./menu.ui line 117 +#: menu.cpp:174 rc.cpp:31 +#, no-c-format +msgid "Recent applications" +msgstr "Последние приложения" + +#. i18n: file ./menu.ui line 122 +#: menu.cpp:175 rc.cpp:34 +#, no-c-format +msgid "Recent documents" +msgstr "Последние документы" + +#. i18n: file ./menu.ui line 137 +#: menu.cpp:176 rc.cpp:37 +#, no-c-format +msgid "Use this dropdown menu to change the behaviour of the list below" +msgstr "Тип содержимого первой колонки" + +#. i18n: file ./menu.ui line 161 +#: menu.cpp:177 menu.cpp:180 rc.cpp:40 rc.cpp:49 +#, no-c-format +msgid "..." +msgstr "..." + +#. i18n: file ./menu.ui line 169 +#: menu.cpp:178 rc.cpp:43 +#, no-c-format +msgid "&Show:" +msgstr "П&оказать" + +#. i18n: file ./menu.ui line 234 +#: menu.cpp:179 rc.cpp:46 +#, no-c-format +msgid "All Applications" +msgstr "Все приложения" + +#. i18n: file ./menu.ui line 259 +#: menu.cpp:181 menuhandler.cpp:463 rc.cpp:52 +#, no-c-format +msgid "Make this menu a normal window" +msgstr "Режим окна" + +#. i18n: file ./menu.ui line 277 +#: menu.cpp:182 rc.cpp:55 +#, no-c-format +msgid "Ru&n program..." +msgstr "&Запустить программу" + +#. i18n: file ./menu.ui line 283 +#: menu.cpp:184 rc.cpp:61 +#, no-c-format +msgid "" +"If you know exatly how a program is named you can directly enter the " +"application name" +msgstr "" +"Если вы точно знаете как называется " +"программа, вы можете просто набрать ее " +"название" + +#. i18n: file ./menu.ui line 297 +#: menu.cpp:187 rc.cpp:66 +#, no-c-format +msgid "Start a new session, switch the active user or edit your user profile" +msgstr "" +"Начать новый сеанс, переключить " +"активного пользователя или изменить " +"профиль пользователя" + +#. i18n: file ./menu.ui line 305 +#: menu.cpp:188 rc.cpp:69 +#, no-c-format +msgid "L&ock Session" +msgstr "З&аблокировать сессию" + +#. i18n: file ./menu.ui line 311 +#: menu.cpp:190 rc.cpp:75 +#, no-c-format +msgid "Lock the pc with a password if you are going away for a while" +msgstr "" +"Заблокируйте компьютер с помощью пароля, " +"если вы уходите надолго" + +#. i18n: file ./menu.ui line 319 +#: menu.cpp:191 rc.cpp:78 +#, no-c-format +msgid "Lo&g Out..." +msgstr "&Выход" + +#. i18n: file ./menu.ui line 325 +#: menu.cpp:193 rc.cpp:84 +#, no-c-format +msgid "Logout, reboot or shoutdown the computer" +msgstr "" +"Выход, перезагрузка или выключение " +"компьютера" + +#: menuhandler.cpp:458 +msgid "Make this window a popup menu" +msgstr "Режим меню" + +#: menuhandler.cpp:1426 +msgid "&Edit submenu..." +msgstr "&Редактировать подменю" + +#: menuhandler.cpp:1429 +msgid "&Edit item..." +msgstr "Р&едактировать запись" + +#: menuhandler.cpp:1430 +msgid "&Add to desktop" +msgstr "&Добавить приложение" + +#: menuhandler.cpp:1435 +msgid "&Add to favourite applications" +msgstr "" +"&Добавить в список избранных приложений" + +#: menuhandler.cpp:1437 +msgid "&Remove from favourite applications" +msgstr "" +"&Убрать из списка избранных приложений" + +#: menuhandler.cpp:1501 +msgid "Edit user profile..." +msgstr "Изменить профиль пользователя" + +#: menuhandler.cpp:1507 +msgid "Save current session" +msgstr "Сохранить текущий сеанс" + +#: menuhandler.cpp:1513 +msgid "Lock session and start a new one" +msgstr "Заблокировать сеанс и начать новый" + +#: menuhandler.cpp:1514 +msgid "Start New Session" +msgstr "Начать новый сеанс" + +#: menuhandler.cpp:1567 +msgid "" +"

You have chosen to open another desktop session.
The current session " +"will be hidden and a new login screen will be displayed.
An F-key is " +"assigned to each session; F%1 is usually assigned to the first session, F%2 " +"to the second session and so on. You can switch between sessions by pressing " +"Ctrl, Alt and the appropriate F-key at the same time. Additionally, the KDE " +"Panel and Desktop menus have actions for switching between sessions.

" +msgstr "" +"

Запуск нового сеанса.
Текущий сеанс " +"будет скрыт и показано новое окно " +"запуска.
Посредством сочетания клавиш " +"Ctrl, Alt + F можно переключаться между " +"различными сессиями. F%1 обычно " +"соответствует первой сессии, F%2 второй и " +"так далее.

" + +#: menuhandler.cpp:1578 +msgid "Warning - New Session" +msgstr "Внимание - Новый сеанс" + +#: menuhandler.cpp:1579 +msgid "&Start New Session" +msgstr "&Начать новый сеанс" + +#. i18n: file ./tastytooltipwidget.ui line 83 +#: rc.cpp:6 tastytooltipwidget.cpp:80 +#, no-c-format +msgid "Tasty Menu" +msgstr "Tasty Menu" + +#. i18n: file ./tastytooltipwidget.ui line 91 +#: rc.cpp:9 tastytooltipwidget.cpp:81 +#, no-c-format +msgid "Applications, tasks and desktop sessions" +msgstr "Приложения, задачи и сеансы" + +#: tastylistview.cpp:288 +msgid "to your favourite applications" +msgstr "в список избранных приложений" + +#: tastylistview.cpp:292 +msgid "from your favourite applications" +msgstr "из списка избранных приложений" + +#: tastylistview.cpp:296 tastylistview.cpp:313 +msgid "Browse" +msgstr "Обзор" + +#: tastylistview.cpp:300 +msgid "Expand" +msgstr "Раскрыть" + +#: tastylistview.cpp:304 +msgid "Collapse" +msgstr "Скрыть" + +#: tastymenu.cpp:69 tastymenu.cpp:318 +msgid "Menu" +msgstr "Меню" + +#: tastymenu.cpp:186 +msgid "KMenu replacement" +msgstr "Замена KMenu" + +#: tastymenu.cpp:191 +msgid "Maintainer" +msgstr "Мантейнер" + +#: tastymenu.cpp:195 +msgid "_: NAME OF TRANSLATORS\\nYour names" +msgstr "Yurkovsky Andrey" + +#: tastymenu.cpp:196 +msgid "_: EMAIL OF TRANSLATORS\\nYour emails" +msgstr "anyr@tut.by" + +#: tastymenu.cpp:199 +msgid "For the Russian translation" +msgstr "Для русского перевода" + +#: tastymenu.cpp:202 +#, fuzzy +msgid "For the German translation" +msgstr "Для русского перевода" + +#: tastymenu.cpp:205 +#, fuzzy +msgid "For the Spanish translation" +msgstr "Для русского перевода" + +#: tastymenu.cpp:208 +#, fuzzy +msgid "For the Ukrainian translation" +msgstr "Для русского перевода" + +#: tastymenu.cpp:211 +#, fuzzy +msgid "For the French translation" +msgstr "Для русского перевода" + +#: tastymenu.cpp:214 +#, fuzzy +msgid "For the Finnish translation" +msgstr "Для русского перевода" + +#: tastymenu.cpp:217 +#, fuzzy +msgid "For the Slovenian translation" +msgstr "Для русского перевода" + +#: tastymenu.cpp:220 +#, fuzzy +msgid "For the Polish translation" +msgstr "Для русского перевода" + +#: tastymenu.cpp:225 +msgid "For the Switch user code from KDM" +msgstr "" +"За код из KDM, отвечающий за переключение " +"пользователей" + +#: tastymenu.cpp:229 +msgid "For some inspirations here and there." +msgstr "За вдохновение время от времени" + +#: tastymenu.cpp:233 +msgid "For some code taken from Amarok's statistics list view" +msgstr "" +"За код из Amarok, отвечающий за статистику" + +#: tastymenu.cpp:265 +msgid "Behaviour" +msgstr "Поведение" + +#: tastymenu.cpp:274 tastymenu.cpp:275 +msgid "Toggle Tasty Menu" +msgstr "Toggle Tasty Menu" + +#: tastymenu.cpp:343 +#, fuzzy, c-format +msgid "" +"_n: There is one new installed application\n" +"There are %n new installed applications" +msgstr "" +"Новые приложения\n" +"Установлено %n новых приложения" + +#: tastymenu.cpp:416 +msgid "&Edit Menu" +msgstr "&Редактировать меню" + +#: tastymenu.cpp:418 +msgid "&Clear recently installed applications list" +msgstr "" +"О&чистить список недавно установленных " +"приложений" + +#: tastymenu.cpp:420 +msgid "&Configure Global Shortcuts..." +msgstr "" +"Настройка &глобальных сочетаний клавиш" + +#: tastymenu.cpp:421 +msgid "&Configure..." +msgstr "&Настройка" + +#~ msgid "Icons size:" +#~ msgstr "Размер пиктограмм" + +#~ msgid "user: ..." +#~ msgstr "пользователь: ..." + +#~ msgid "... host" +#~ msgstr "... удаленные машины" + +#~ msgid "There are" +#~ msgstr "Установлено" + +#~ msgid "new installed applications" +#~ msgstr "новых приложения" diff --git a/po/sl.po b/po/sl.po new file mode 100644 index 0000000..fe51639 --- /dev/null +++ b/po/sl.po @@ -0,0 +1,785 @@ +# translation of tastymenu.po to +# This file is put in the public domain. +# +# Matija Šuklje , 2007. +msgid "" +msgstr "" +"Project-Id-Version: tastymenu\n" +"POT-Creation-Date: 2007-11-21 19:16+0100\n" +"PO-Revision-Date: 2007-10-24 15:34+0200\n" +"Last-Translator: Matija Šuklje \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.11.4\n" + +#: _translatorinfo.cpp:1 +msgid "" +"_: NAME OF TRANSLATORS\n" +"Your names" +msgstr "Matija Šuklje" + +#: _translatorinfo.cpp:3 +msgid "" +"_: EMAIL OF TRANSLATORS\n" +"Your emails" +msgstr "matija.suklje@rutka.net" + +#. i18n: file ./behaviour.ui line 16 +#: appearance.cpp:273 behaviour.cpp:114 rc.cpp:87 rc.cpp:172 +#, fuzzy, no-c-format +msgid "Form1" +msgstr "Obrazec1" + +#. i18n: file ./appearance.ui line 32 +#: appearance.cpp:274 appearance.cpp:285 rc.cpp:175 rc.cpp:206 +#, no-c-format +msgid "Applications list" +msgstr "Spisek programov" + +#. i18n: file ./appearance.ui line 43 +#: appearance.cpp:275 rc.cpp:178 +#, no-c-format +msgid "Show tree e&xpanders" +msgstr "Prikaži &oznake drevesne strukture" + +#. i18n: file ./appearance.ui line 46 +#: appearance.cpp:276 rc.cpp:181 +#, no-c-format +msgid "Alt+X" +msgstr "Alt+O" + +#. i18n: file ./appearance.ui line 57 +#: appearance.cpp:277 rc.cpp:184 +#, no-c-format +msgid "Alwa&ys collapsed categories" +msgstr "Ve&dno zložene kategorije" + +#. i18n: file ./behaviour.ui line 94 +#: appearance.cpp:278 behaviour.cpp:120 rc.cpp:105 rc.cpp:187 +#, no-c-format +msgid "Alt+Y" +msgstr "Alt+D" + +#. i18n: file ./appearance.ui line 68 +#: appearance.cpp:279 rc.cpp:190 +#, no-c-format +msgid "Hei&ght:" +msgstr "&Višina:" + +#. i18n: file ./appearance.ui line 82 +#: appearance.cpp:280 rc.cpp:193 +#, no-c-format +msgid "Button label:" +msgstr "Oznaka gumba:" + +#. i18n: file ./appearance.ui line 111 +#: appearance.cpp:281 rc.cpp:196 +#, no-c-format +msgid "" +"What text should be displayed in the Kicker button tooltip instead of " +"\"Tasty Menu\".\n" +"Empty means default." +msgstr "" +"Besedilo, ki naj bo prikazano kot namig gumba namesto »Meni Tasty« v " +"Kicker vrstici.\n" +"Prazno pomeni privzeto." + +#. i18n: file ./appearance.ui line 119 +#: appearance.cpp:283 rc.cpp:200 +#, no-c-format +msgid "Wi&dth:" +msgstr "&Širina:" + +#. i18n: file ./appearance.ui line 133 +#: appearance.cpp:284 rc.cpp:203 +#, no-c-format +msgid "Tootip title:" +msgstr "Naslov namiga:" + +#. i18n: file ./appearance.ui line 160 +#: appearance.cpp:286 rc.cpp:209 +#, no-c-format +msgid "of the screen width" +msgstr "širine ekrana" + +#. i18n: file ./appearance.ui line 173 +#: appearance.cpp:287 rc.cpp:212 +#, no-c-format +msgid "Menu button" +msgstr "Menijski gumb" + +#. i18n: file ./appearance.ui line 184 +#: appearance.cpp:288 rc.cpp:215 +#, no-c-format +msgid "of the screen height" +msgstr "višine ekrana" + +#. i18n: file ./appearance.ui line 220 +#: appearance.cpp:290 rc.cpp:219 +#, no-c-format +msgid "&Icon:" +msgstr "&Ikona:" + +#. i18n: file ./appearance.ui line 223 +#: appearance.cpp:291 rc.cpp:222 +#, no-c-format +msgid "Alt+I" +msgstr "Alt+I" + +#. i18n: file ./appearance.ui line 246 +#: appearance.cpp:293 rc.cpp:226 +#, no-c-format +msgid "" +"What icon should be displayed in the kicker button instead of the KMenu " +"one.\n" +"Empty means default." +msgstr "" +"Katera ikona naj bo prikazana v Kicker vrstici namesto prizete za Meni K.\n" +"Prazno pomeni privzeto." + +#. i18n: file ./appearance.ui line 262 +#: appearance.cpp:295 rc.cpp:230 +#, no-c-format +msgid "N&one" +msgstr "I&zključen" + +#. i18n: file ./menu.ui line 308 +#: appearance.cpp:296 behaviour.cpp:117 menu.cpp:189 rc.cpp:72 rc.cpp:96 +#: rc.cpp:233 +#, no-c-format +msgid "Alt+O" +msgstr "Alt+Z" + +#. i18n: file ./appearance.ui line 280 +#: appearance.cpp:297 rc.cpp:236 +#, no-c-format +msgid "Menu size" +msgstr "Velikost menija" + +#. i18n: file ./appearance.ui line 291 +#: appearance.cpp:298 rc.cpp:239 +#, no-c-format +msgid "&Action icons size:" +msgstr "Velikost ikon &dejanj:" + +#. i18n: file ./appearance.ui line 305 +#: appearance.cpp:299 rc.cpp:242 +#, no-c-format +msgid "&Display applications descriptions" +msgstr "&Prikaži opise programov" + +#. i18n: file ./appearance.ui line 308 +#: appearance.cpp:300 rc.cpp:245 +#, no-c-format +msgid "Alt+D" +msgstr "Alt+P" + +#. i18n: file ./appearance.ui line 344 +#: appearance.cpp:302 rc.cpp:249 +#, no-c-format +msgid "&Text:" +msgstr "Bes&edilo:" + +#. i18n: file ./appearance.ui line 347 +#: appearance.cpp:303 rc.cpp:252 +#, no-c-format +msgid "Alt+T" +msgstr "Alt+E" + +#. i18n: file ./appearance.ui line 362 +#: appearance.cpp:305 rc.cpp:256 +#, no-c-format +msgid "" +"What label instead of \"Menu\" should be shown for the Kicker button.\n" +"Empty means default." +msgstr "" +"Katera oznaka naj bo prikazana v Kicker vrstici namesto »Meni«.\n" +"Prazno pomeni privzeto." + +#. i18n: file ./appearance.ui line 370 +#: appearance.cpp:307 rc.cpp:260 +#, no-c-format +msgid "&None" +msgstr "&Brez" + +#. i18n: file ./menu.ui line 280 +#: appearance.cpp:308 behaviour.cpp:144 menu.cpp:183 rc.cpp:58 rc.cpp:169 +#: rc.cpp:263 +#, no-c-format +msgid "Alt+N" +msgstr "Alt+B" + +#. i18n: file ./appearance.ui line 383 +#: appearance.cpp:309 appearance.cpp:310 rc.cpp:266 rc.cpp:269 +#, no-c-format +msgid "%" +msgstr "%" + +#. i18n: file ./appearance.ui line 417 +#: appearance.cpp:311 rc.cpp:272 +#, no-c-format +msgid "Button icon:" +msgstr "Ikona gumba:" + +#. i18n: file ./appearance.ui line 453 +#: appearance.cpp:312 rc.cpp:275 +#, no-c-format +msgid "third column:" +msgstr "tretji stolpec:" + +#. i18n: file ./appearance.ui line 461 +#: appearance.cpp:313 rc.cpp:278 +#, no-c-format +msgid "second column:" +msgstr "drugi stolpec:" + +#. i18n: file ./appearance.ui line 469 +#: appearance.cpp:314 appearance.cpp:315 appearance.cpp:316 appearance.cpp:319 +#: rc.cpp:281 rc.cpp:284 rc.cpp:287 rc.cpp:296 +#, no-c-format +msgid " pixels" +msgstr " točk" + +#. i18n: file ./appearance.ui line 520 +#: appearance.cpp:317 rc.cpp:290 +#, no-c-format +msgid "first column:" +msgstr "prvi stolpec:" + +#. i18n: file ./appearance.ui line 538 +#: appearance.cpp:318 rc.cpp:293 +#, no-c-format +msgid "Icons si&zes:" +msgstr "Velikost &ikon:" + +#. i18n: file ./behaviour.ui line 32 +#: behaviour.cpp:115 rc.cpp:90 +#, no-c-format +msgid "General behaviour" +msgstr "Splošno obnašanje" + +#. i18n: file ./behaviour.ui line 60 +#: behaviour.cpp:116 rc.cpp:93 +#, no-c-format +msgid "&Override alt+F1 keyboard shortcut (requires kicker restart)" +msgstr "Povo&zi Alt+F1 bližnjico (zahteva ponovni zagon kickerja)" + +#. i18n: file ./behaviour.ui line 66 +#: behaviour.cpp:118 rc.cpp:99 +#, no-c-format +msgid "" +"Pops up Tasty Menu instead of KMenu when the shortcut sequence Alt+F1 is " +"pressed" +msgstr "" +"Prikaže Tasty Menu namesto Menija K, ko je pritisnjena kombinacija tipk " +"Alt+F1" + +#. i18n: file ./behaviour.ui line 91 +#: behaviour.cpp:119 rc.cpp:102 +#, no-c-format +msgid "Show save session functionalit&y" +msgstr "Prikaži funkcijo za &shranitev seje" + +#. i18n: file ./behaviour.ui line 98 +#: behaviour.cpp:121 rc.cpp:108 +#, no-c-format +msgid "" +"Under the menu that pops up when the button with user name is pressed a new " +"item \"Save current session\" is added.\n" +"It saves the current session informations like open applications and windows " +"position. In order to use it you must set \"Restore manually saved session\" " +"in the Session Manager Kcontrol module." +msgstr "" +"V meniju, ki se prikaže ob pritisku na gumb z uporabnikovim imenom, se " +"pojavi nov vnos »Shrani trenutno sejo«.\n" +"Ta shrani podatke trenutne seje, kot so odprti programi in položaji oken. " +"Da bi lahko uporabljali to funkcijo, morate izbrati možnost »Obnovi ročno " +"shranjeno sejo« v modulu Upravitelja sej v Nadzornem središču." + +#. i18n: file ./behaviour.ui line 106 +#: behaviour.cpp:123 rc.cpp:112 +#, no-c-format +msgid "&Hide groups with only one application" +msgstr "S&krij skupine s samo enim programom" + +#. i18n: file ./behaviour.ui line 109 +#: behaviour.cpp:124 rc.cpp:115 +#, no-c-format +msgid "Alt+H" +msgstr "Alt+K" + +#. i18n: file ./behaviour.ui line 120 +#: behaviour.cpp:125 rc.cpp:118 +#, no-c-format +msgid "Show items in alpha&betical order" +msgstr "Prikaži vnose v &abecednem vrstnem redu" + +#. i18n: file ./behaviour.ui line 123 +#: behaviour.cpp:126 rc.cpp:121 +#, no-c-format +msgid "Alt+B" +msgstr "Alt+A" + +#. i18n: file ./behaviour.ui line 136 +#: behaviour.cpp:127 rc.cpp:124 +#, no-c-format +msgid "Search field behaviour" +msgstr "Obnašanje iskalnega polja" + +#. i18n: file ./behaviour.ui line 164 +#: behaviour.cpp:129 rc.cpp:128 +#, no-c-format +msgid "Si&mple searches" +msgstr "&Enostavno iskanje" + +#. i18n: file ./behaviour.ui line 167 +#: behaviour.cpp:130 rc.cpp:131 +#, no-c-format +msgid "Alt+M" +msgstr "Alt+E" + +#. i18n: file ./behaviour.ui line 173 +#: behaviour.cpp:131 rc.cpp:134 +#, no-c-format +msgid "Filters the applications list" +msgstr "Filtrira spisek programov" + +#. i18n: file ./behaviour.ui line 176 +#: behaviour.cpp:132 rc.cpp:137 +#, no-c-format +msgid "" +"It displays in the first column all the applications whose name or " +"description matches with the query you entered" +msgstr "" +"V prvi vrstici prikaže vse programe katerih ime ali opis sovpadata z iskano " +"frazo" + +#. i18n: file ./behaviour.ui line 184 +#: behaviour.cpp:133 rc.cpp:140 +#, no-c-format +msgid "&Kerry Beagle integration" +msgstr "&Kerry Beagle integracija" + +#. i18n: file ./behaviour.ui line 187 +#: behaviour.cpp:134 rc.cpp:143 +#, no-c-format +msgid "Alt+K" +msgstr "Alt+K" + +#. i18n: file ./behaviour.ui line 190 +#: behaviour.cpp:135 rc.cpp:146 +#, no-c-format +msgid "Perform queries with Kerry Beagle" +msgstr "Išči s pomočjo Kerry Beagle" + +#. i18n: file ./behaviour.ui line 194 +#: behaviour.cpp:136 rc.cpp:149 +#, no-c-format +msgid "" +"Perform queries with Kerry Beagle instead of using the first column.\n" +"It needs Kerry Beagle up and running." +msgstr "" +"Za iskanje se uporablja Kerry Beagle namesto prvega stolpca.\n" +"Potrebuje, da je Kerry Beagle nameščen in zagnan." + +#. i18n: file ./behaviour.ui line 202 +#: behaviour.cpp:138 rc.cpp:153 +#, no-c-format +msgid "Stri&gi Integration" +msgstr "Stri&gi integracija" + +#. i18n: file ./menu.ui line 322 +#: behaviour.cpp:139 menu.cpp:192 rc.cpp:81 rc.cpp:156 +#, no-c-format +msgid "Alt+G" +msgstr "Alt+G" + +#. i18n: file ./behaviour.ui line 208 +#: behaviour.cpp:140 rc.cpp:159 +#, no-c-format +msgid "Perform queries with Strigi" +msgstr "Išče s pomočjo Strigi" + +#. i18n: file ./behaviour.ui line 212 +#: behaviour.cpp:141 rc.cpp:162 +#, no-c-format +msgid "" +"Perform queries with Strigi instead of using the first column.\n" +"It needs the Strigi Daemon up and running" +msgstr "" +"Za iskanje se uporablja Strigi namesto prvega stolpca.\n" +"Potrebuje, da je Strigi demon nameščen in zagnan." + +#. i18n: file ./behaviour.ui line 222 +#: behaviour.cpp:143 rc.cpp:166 +#, no-c-format +msgid "&Notify recently installed applications (requires kicker restart)" +msgstr "" +"O&pomni ob nedavno nameščenih programih (zahteva ponovni zagon kickerja)" + +#: dmctl.cpp:345 +msgid "" +"_: user: ...\n" +"%1: TTY login" +msgstr "" +"_: uporabnik: ...\n" +"%1: TTY prijava" + +#: dmctl.cpp:351 +msgid "Unused" +msgstr "Neuporabljeno" + +#: dmctl.cpp:353 +msgid "X login on remote host" +msgstr "Prijava v X na oddaljenem gostitelju" + +#: dmctl.cpp:354 +#, c-format +msgid "" +"_: ... host\n" +"X login on %1" +msgstr "" +"_: ... gostitelj\n" +"X prijava na %1" + +#: dmctl.cpp:357 +msgid "" +"_: user: session type\n" +"%1: %2" +msgstr "" +"_: uporabnik: vrsta seje\n" +"%1: %2" + +#: dmctl.cpp:372 +msgid "" +"_: session (location)\n" +"%1 (%2)" +msgstr "" +"seja (lokacija)\n" +"%1 (%2)" + +#. i18n: file ./tastytooltipwidget.ui line 16 +#: menu.cpp:167 rc.cpp:3 rc.cpp:13 tastymenu.cpp:184 tastytooltipwidget.cpp:79 +#, no-c-format +msgid "Tasty Menu" +msgstr "Meni Tasty" + +#. i18n: file ./menu.ui line 84 +#: menu.cpp:168 rc.cpp:16 +#, no-c-format +msgid "&Clear list" +msgstr "Po&čisti seznam" + +#. i18n: file ./menu.ui line 87 +#: menu.cpp:169 rc.cpp:19 +#, no-c-format +msgid "Alt+C" +msgstr "Alt+Č" + +#. i18n: file ./menu.ui line 95 +#: menu.cpp:170 rc.cpp:22 +#, no-c-format +msgid "Se&arch:" +msgstr "Po&išči" + +#. i18n: file ./menu.ui line 107 +#: menu.cpp:172 rc.cpp:25 +#, no-c-format +msgid "Favourite applications" +msgstr "Priljubljeni programi" + +#. i18n: file ./menu.ui line 112 +#: menu.cpp:173 rc.cpp:28 +#, no-c-format +msgid "Most used applications" +msgstr "Najpogosteje uporabljani programi" + +#. i18n: file ./menu.ui line 117 +#: menu.cpp:174 rc.cpp:31 +#, no-c-format +msgid "Recent applications" +msgstr "Nedavni programi" + +#. i18n: file ./menu.ui line 122 +#: menu.cpp:175 rc.cpp:34 +#, no-c-format +msgid "Recent documents" +msgstr "Nedavni dokumenti" + +#. i18n: file ./menu.ui line 137 +#: menu.cpp:176 rc.cpp:37 +#, no-c-format +msgid "Use this dropdown menu to change the behaviour of the list below" +msgstr "Uporabite ta spustni meni za spreminjanje spiska pod njim" + +#. i18n: file ./menu.ui line 161 +#: menu.cpp:177 menu.cpp:180 rc.cpp:40 rc.cpp:49 +#, no-c-format +msgid "..." +msgstr "..." + +#. i18n: file ./menu.ui line 169 +#: menu.cpp:178 rc.cpp:43 +#, no-c-format +msgid "&Show:" +msgstr "Prika&ži" + +#. i18n: file ./menu.ui line 234 +#: menu.cpp:179 rc.cpp:46 +#, no-c-format +msgid "All Applications" +msgstr "Vsi programi" + +#. i18n: file ./menu.ui line 259 +#: menu.cpp:181 menuhandler.cpp:463 rc.cpp:52 +#, no-c-format +msgid "Make this menu a normal window" +msgstr "Naredi ta meni kot navadno okno" + +#. i18n: file ./menu.ui line 277 +#: menu.cpp:182 rc.cpp:55 +#, no-c-format +msgid "Ru&n program..." +msgstr "Pože&ni program" + +#. i18n: file ./menu.ui line 283 +#: menu.cpp:184 rc.cpp:61 +#, no-c-format +msgid "" +"If you know exatly how a program is named you can directly enter the " +"application name" +msgstr "" +"Če veste točno kako je programu ime, lahko njegovo direktno vpišete sem" + +#. i18n: file ./menu.ui line 297 +#: menu.cpp:187 rc.cpp:66 +#, no-c-format +msgid "Start a new session, switch the active user or edit your user profile" +msgstr "" +"Začni novo sejo, zamenjaj aktivnega uporabnika ali uredi uporabniški profil" + +#. i18n: file ./menu.ui line 305 +#: menu.cpp:188 rc.cpp:69 +#, no-c-format +msgid "L&ock Session" +msgstr "Za&kleni sejo" + +#. i18n: file ./menu.ui line 311 +#: menu.cpp:190 rc.cpp:75 +#, no-c-format +msgid "Lock the pc with a password if you are going away for a while" +msgstr "Zaklenite računalnik z geslom, če ga zapuščate za dlje časa" + +#. i18n: file ./menu.ui line 319 +#: menu.cpp:191 rc.cpp:78 +#, no-c-format +msgid "Lo&g Out..." +msgstr "O&djava" + +#. i18n: file ./menu.ui line 325 +#: menu.cpp:193 rc.cpp:84 +#, no-c-format +msgid "Logout, reboot or shoutdown the computer" +msgstr "Odjavi se, znova zaženi ali ugasni računalnik" + +#: menuhandler.cpp:458 +msgid "Make this window a popup menu" +msgstr "Naredi to okno pojavni meni" + +#: menuhandler.cpp:1426 +msgid "&Edit submenu..." +msgstr "&Uredi podmeni ..." + +#: menuhandler.cpp:1429 +msgid "&Edit item..." +msgstr "&Uredi vnos ..." + +#: menuhandler.cpp:1430 +msgid "&Add to desktop" +msgstr "&Dodaj na namizje" + +#: menuhandler.cpp:1435 +msgid "&Add to favourite applications" +msgstr "&Dodaj med priljubljene programe" + +#: menuhandler.cpp:1437 +msgid "&Remove from favourite applications" +msgstr "&Odstrani iz priljubljenih programov" + +#: menuhandler.cpp:1501 +msgid "Edit user profile..." +msgstr "Uredi uporabniški profil ..." + +#: menuhandler.cpp:1507 +msgid "Save current session" +msgstr "Shrani trenutno sejo" + +#: menuhandler.cpp:1513 +msgid "Lock session and start a new one" +msgstr "Zakleni sejo in začni novo" + +#: menuhandler.cpp:1514 +msgid "Start New Session" +msgstr "Začni novo sejo" + +#: menuhandler.cpp:1567 +msgid "" +"

You have chosen to open another desktop session.
The current session " +"will be hidden and a new login screen will be displayed.
An F-key is " +"assigned to each session; F%1 is usually assigned to the first session, F%2 " +"to the second session and so on. You can switch between sessions by pressing " +"Ctrl, Alt and the appropriate F-key at the same time. Additionally, the KDE " +"Panel and Desktop menus have actions for switching between sessions.

" +msgstr "" +"

Izbrali ste odprtje še ene seje namizja.
Trenutna seja bo skrita in " +"prikazal se bo nov prijavni zaslon.
Funkcijska tipka se dodeli vsaki " +"seji; F%1 se običajno dodeli prvi seji, F%2 drugi itd. Med sejami lahko " +"preklapljate s skupnim pritiskom na Ctrl, Alt in primerno fukcijsko tipko. " +"Poleg tega imata menija Pulta KDE in Namizja dodana dejanja za preklapljanje " +"med sejami.

" + +#: menuhandler.cpp:1578 +msgid "Warning - New Session" +msgstr "Opozorilo - Nova seja" + +#: menuhandler.cpp:1579 +msgid "&Start New Session" +msgstr "&Začni novo sejo" + +#. i18n: file ./tastytooltipwidget.ui line 83 +#: rc.cpp:6 tastytooltipwidget.cpp:80 +#, no-c-format +msgid "Tasty Menu" +msgstr "Meni Tasty" + +#. i18n: file ./tastytooltipwidget.ui line 91 +#: rc.cpp:9 tastytooltipwidget.cpp:81 +#, no-c-format +msgid "Applications, tasks and desktop sessions" +msgstr "Programi, opravila in namizne seje" + +#: tastylistview.cpp:288 +msgid "to your favourite applications" +msgstr "med vaše priljubljene programe" + +#: tastylistview.cpp:292 +msgid "from your favourite applications" +msgstr "iz vaših priljubljenih programov" + +#: tastylistview.cpp:296 tastylistview.cpp:313 +msgid "Browse" +msgstr "Brskaj" + +#: tastylistview.cpp:300 +msgid "Expand" +msgstr "Razširi" + +#: tastylistview.cpp:304 +msgid "Collapse" +msgstr "Skrči" + +#: tastymenu.cpp:69 tastymenu.cpp:318 +msgid "Menu" +msgstr "Meni" + +#: tastymenu.cpp:186 +msgid "KMenu replacement" +msgstr "Zamenjava za Meni K" + +#: tastymenu.cpp:191 +msgid "Maintainer" +msgstr "Vzdrževalec" + +#: tastymenu.cpp:195 +msgid "_: NAME OF TRANSLATORS\\nYour names" +msgstr "Matija Šuklje" + +#: tastymenu.cpp:196 +msgid "_: EMAIL OF TRANSLATORS\\nYour emails" +msgstr "matija.suklje@rutka.net" + +#: tastymenu.cpp:199 +msgid "For the Russian translation" +msgstr "Za ruski prevod" + +#: tastymenu.cpp:202 +msgid "For the German translation" +msgstr "Za nemški prevod" + +#: tastymenu.cpp:205 +msgid "For the Spanish translation" +msgstr "Za španski prevod" + +#: tastymenu.cpp:208 +msgid "For the Ukrainian translation" +msgstr "Za ukrajinski prevod" + +#: tastymenu.cpp:211 +msgid "For the French translation" +msgstr "Za francoski prevod" + +#: tastymenu.cpp:214 +msgid "For the Finnish translation" +msgstr "Za finski prevod" + +#: tastymenu.cpp:217 +#, fuzzy +msgid "For the Slovenian translation" +msgstr "Za nemški prevod" + +#: tastymenu.cpp:220 +#, fuzzy +msgid "For the Polish translation" +msgstr "Za španski prevod" + +#: tastymenu.cpp:225 +msgid "For the Switch user code from KDM" +msgstr "Za kodo iz KDM za Zamenjaj uporabnika" + +#: tastymenu.cpp:229 +msgid "For some inspirations here and there." +msgstr "Za nekaj inspiracije tu in tam" + +#: tastymenu.cpp:233 +msgid "For some code taken from Amarok's statistics list view" +msgstr "Za nekaj kode vzete iz pogleda seznama statistike iz Amaroka" + +#: tastymenu.cpp:265 +msgid "Behaviour" +msgstr "Obnašanje" + +#: tastymenu.cpp:274 tastymenu.cpp:275 +msgid "Toggle Tasty Menu" +msgstr "Preklopi Meni Tasty" + +#: tastymenu.cpp:343 +#, c-format +msgid "" +"_n: There is one new installed application\n" +"There are %n new installed applications" +msgstr "" +"Obstaja %n novih programov\n" +"Obstaja %n nov program\n" +"Obstajata %n nova programa\n" +"Obstajajo %n novi programi" + +#: tastymenu.cpp:416 +msgid "&Edit Menu" +msgstr "&Uredi meni" + +#: tastymenu.cpp:418 +msgid "&Clear recently installed applications list" +msgstr "Po&čisti spisek nedavno nameščenih programov" + +#: tastymenu.cpp:420 +msgid "&Configure Global Shortcuts..." +msgstr "&Nastavi splošne bližnjice" + +#: tastymenu.cpp:421 +msgid "&Configure..." +msgstr "&Nastavi ..." + +#~ msgid "Icons size:" +#~ msgstr "Velikost ikon" diff --git a/po/tastymenu.pot b/po/tastymenu.pot new file mode 100644 index 0000000..cc99b36 --- /dev/null +++ b/po/tastymenu.pot @@ -0,0 +1,738 @@ +# SOME DESCRIPTIVE TITLE. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"POT-Creation-Date: 2007-11-21 19:16+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: ENCODING\n" + +#: _translatorinfo.cpp:1 +msgid "" +"_: NAME OF TRANSLATORS\n" +"Your names" +msgstr "" + +#: _translatorinfo.cpp:3 +msgid "" +"_: EMAIL OF TRANSLATORS\n" +"Your emails" +msgstr "" + +#. i18n: file ./behaviour.ui line 16 +#: appearance.cpp:273 behaviour.cpp:114 rc.cpp:87 rc.cpp:172 +#, no-c-format +msgid "Form1" +msgstr "" + +#. i18n: file ./appearance.ui line 32 +#: appearance.cpp:274 appearance.cpp:285 rc.cpp:175 rc.cpp:206 +#, no-c-format +msgid "Applications list" +msgstr "" + +#. i18n: file ./appearance.ui line 43 +#: appearance.cpp:275 rc.cpp:178 +#, no-c-format +msgid "Show tree e&xpanders" +msgstr "" + +#. i18n: file ./appearance.ui line 46 +#: appearance.cpp:276 rc.cpp:181 +#, no-c-format +msgid "Alt+X" +msgstr "" + +#. i18n: file ./appearance.ui line 57 +#: appearance.cpp:277 rc.cpp:184 +#, no-c-format +msgid "Alwa&ys collapsed categories" +msgstr "" + +#. i18n: file ./behaviour.ui line 94 +#: appearance.cpp:278 behaviour.cpp:120 rc.cpp:105 rc.cpp:187 +#, no-c-format +msgid "Alt+Y" +msgstr "" + +#. i18n: file ./appearance.ui line 68 +#: appearance.cpp:279 rc.cpp:190 +#, no-c-format +msgid "Hei&ght:" +msgstr "" + +#. i18n: file ./appearance.ui line 82 +#: appearance.cpp:280 rc.cpp:193 +#, no-c-format +msgid "Button label:" +msgstr "" + +#. i18n: file ./appearance.ui line 111 +#: appearance.cpp:281 rc.cpp:196 +#, no-c-format +msgid "" +"What text should be displayed in the Kicker button tooltip instead of " +"\"Tasty Menu\".\n" +"Empty means default." +msgstr "" + +#. i18n: file ./appearance.ui line 119 +#: appearance.cpp:283 rc.cpp:200 +#, no-c-format +msgid "Wi&dth:" +msgstr "" + +#. i18n: file ./appearance.ui line 133 +#: appearance.cpp:284 rc.cpp:203 +#, no-c-format +msgid "Tootip title:" +msgstr "" + +#. i18n: file ./appearance.ui line 160 +#: appearance.cpp:286 rc.cpp:209 +#, no-c-format +msgid "of the screen width" +msgstr "" + +#. i18n: file ./appearance.ui line 173 +#: appearance.cpp:287 rc.cpp:212 +#, no-c-format +msgid "Menu button" +msgstr "" + +#. i18n: file ./appearance.ui line 184 +#: appearance.cpp:288 rc.cpp:215 +#, no-c-format +msgid "of the screen height" +msgstr "" + +#. i18n: file ./appearance.ui line 220 +#: appearance.cpp:290 rc.cpp:219 +#, no-c-format +msgid "&Icon:" +msgstr "" + +#. i18n: file ./appearance.ui line 223 +#: appearance.cpp:291 rc.cpp:222 +#, no-c-format +msgid "Alt+I" +msgstr "" + +#. i18n: file ./appearance.ui line 246 +#: appearance.cpp:293 rc.cpp:226 +#, no-c-format +msgid "" +"What icon should be displayed in the kicker button instead of the KMenu " +"one.\n" +"Empty means default." +msgstr "" + +#. i18n: file ./appearance.ui line 262 +#: appearance.cpp:295 rc.cpp:230 +#, no-c-format +msgid "N&one" +msgstr "" + +#. i18n: file ./menu.ui line 308 +#: appearance.cpp:296 behaviour.cpp:117 menu.cpp:189 rc.cpp:72 rc.cpp:96 +#: rc.cpp:233 +#, no-c-format +msgid "Alt+O" +msgstr "" + +#. i18n: file ./appearance.ui line 280 +#: appearance.cpp:297 rc.cpp:236 +#, no-c-format +msgid "Menu size" +msgstr "" + +#. i18n: file ./appearance.ui line 291 +#: appearance.cpp:298 rc.cpp:239 +#, no-c-format +msgid "&Action icons size:" +msgstr "" + +#. i18n: file ./appearance.ui line 305 +#: appearance.cpp:299 rc.cpp:242 +#, no-c-format +msgid "&Display applications descriptions" +msgstr "" + +#. i18n: file ./appearance.ui line 308 +#: appearance.cpp:300 rc.cpp:245 +#, no-c-format +msgid "Alt+D" +msgstr "" + +#. i18n: file ./appearance.ui line 344 +#: appearance.cpp:302 rc.cpp:249 +#, no-c-format +msgid "&Text:" +msgstr "" + +#. i18n: file ./appearance.ui line 347 +#: appearance.cpp:303 rc.cpp:252 +#, no-c-format +msgid "Alt+T" +msgstr "" + +#. i18n: file ./appearance.ui line 362 +#: appearance.cpp:305 rc.cpp:256 +#, no-c-format +msgid "" +"What label instead of \"Menu\" should be shown for the Kicker button.\n" +"Empty means default." +msgstr "" + +#. i18n: file ./appearance.ui line 370 +#: appearance.cpp:307 rc.cpp:260 +#, no-c-format +msgid "&None" +msgstr "" + +#. i18n: file ./menu.ui line 280 +#: appearance.cpp:308 behaviour.cpp:144 menu.cpp:183 rc.cpp:58 rc.cpp:169 +#: rc.cpp:263 +#, no-c-format +msgid "Alt+N" +msgstr "" + +#. i18n: file ./appearance.ui line 383 +#: appearance.cpp:309 appearance.cpp:310 rc.cpp:266 rc.cpp:269 +#, no-c-format +msgid "%" +msgstr "" + +#. i18n: file ./appearance.ui line 417 +#: appearance.cpp:311 rc.cpp:272 +#, no-c-format +msgid "Button icon:" +msgstr "" + +#. i18n: file ./appearance.ui line 453 +#: appearance.cpp:312 rc.cpp:275 +#, no-c-format +msgid "third column:" +msgstr "" + +#. i18n: file ./appearance.ui line 461 +#: appearance.cpp:313 rc.cpp:278 +#, no-c-format +msgid "second column:" +msgstr "" + +#. i18n: file ./appearance.ui line 469 +#: appearance.cpp:314 appearance.cpp:315 appearance.cpp:316 appearance.cpp:319 +#: rc.cpp:281 rc.cpp:284 rc.cpp:287 rc.cpp:296 +#, no-c-format +msgid " pixels" +msgstr "" + +#. i18n: file ./appearance.ui line 520 +#: appearance.cpp:317 rc.cpp:290 +#, no-c-format +msgid "first column:" +msgstr "" + +#. i18n: file ./appearance.ui line 538 +#: appearance.cpp:318 rc.cpp:293 +#, no-c-format +msgid "Icons si&zes:" +msgstr "" + +#. i18n: file ./behaviour.ui line 32 +#: behaviour.cpp:115 rc.cpp:90 +#, no-c-format +msgid "General behaviour" +msgstr "" + +#. i18n: file ./behaviour.ui line 60 +#: behaviour.cpp:116 rc.cpp:93 +#, no-c-format +msgid "&Override alt+F1 keyboard shortcut (requires kicker restart)" +msgstr "" + +#. i18n: file ./behaviour.ui line 66 +#: behaviour.cpp:118 rc.cpp:99 +#, no-c-format +msgid "" +"Pops up Tasty Menu instead of KMenu when the shortcut sequence Alt+F1 is " +"pressed" +msgstr "" + +#. i18n: file ./behaviour.ui line 91 +#: behaviour.cpp:119 rc.cpp:102 +#, no-c-format +msgid "Show save session functionalit&y" +msgstr "" + +#. i18n: file ./behaviour.ui line 98 +#: behaviour.cpp:121 rc.cpp:108 +#, no-c-format +msgid "" +"Under the menu that pops up when the button with user name is pressed a new " +"item \"Save current session\" is added.\n" +"It saves the current session informations like open applications and windows " +"position. In order to use it you must set \"Restore manually saved session\" " +"in the Session Manager Kcontrol module." +msgstr "" + +#. i18n: file ./behaviour.ui line 106 +#: behaviour.cpp:123 rc.cpp:112 +#, no-c-format +msgid "&Hide groups with only one application" +msgstr "" + +#. i18n: file ./behaviour.ui line 109 +#: behaviour.cpp:124 rc.cpp:115 +#, no-c-format +msgid "Alt+H" +msgstr "" + +#. i18n: file ./behaviour.ui line 120 +#: behaviour.cpp:125 rc.cpp:118 +#, no-c-format +msgid "Show items in alpha&betical order" +msgstr "" + +#. i18n: file ./behaviour.ui line 123 +#: behaviour.cpp:126 rc.cpp:121 +#, no-c-format +msgid "Alt+B" +msgstr "" + +#. i18n: file ./behaviour.ui line 136 +#: behaviour.cpp:127 rc.cpp:124 +#, no-c-format +msgid "Search field behaviour" +msgstr "" + +#. i18n: file ./behaviour.ui line 164 +#: behaviour.cpp:129 rc.cpp:128 +#, no-c-format +msgid "Si&mple searches" +msgstr "" + +#. i18n: file ./behaviour.ui line 167 +#: behaviour.cpp:130 rc.cpp:131 +#, no-c-format +msgid "Alt+M" +msgstr "" + +#. i18n: file ./behaviour.ui line 173 +#: behaviour.cpp:131 rc.cpp:134 +#, no-c-format +msgid "Filters the applications list" +msgstr "" + +#. i18n: file ./behaviour.ui line 176 +#: behaviour.cpp:132 rc.cpp:137 +#, no-c-format +msgid "" +"It displays in the first column all the applications whose name or " +"description matches with the query you entered" +msgstr "" + +#. i18n: file ./behaviour.ui line 184 +#: behaviour.cpp:133 rc.cpp:140 +#, no-c-format +msgid "&Kerry Beagle integration" +msgstr "" + +#. i18n: file ./behaviour.ui line 187 +#: behaviour.cpp:134 rc.cpp:143 +#, no-c-format +msgid "Alt+K" +msgstr "" + +#. i18n: file ./behaviour.ui line 190 +#: behaviour.cpp:135 rc.cpp:146 +#, no-c-format +msgid "Perform queries with Kerry Beagle" +msgstr "" + +#. i18n: file ./behaviour.ui line 194 +#: behaviour.cpp:136 rc.cpp:149 +#, no-c-format +msgid "" +"Perform queries with Kerry Beagle instead of using the first column.\n" +"It needs Kerry Beagle up and running." +msgstr "" + +#. i18n: file ./behaviour.ui line 202 +#: behaviour.cpp:138 rc.cpp:153 +#, no-c-format +msgid "Stri&gi Integration" +msgstr "" + +#. i18n: file ./menu.ui line 322 +#: behaviour.cpp:139 menu.cpp:192 rc.cpp:81 rc.cpp:156 +#, no-c-format +msgid "Alt+G" +msgstr "" + +#. i18n: file ./behaviour.ui line 208 +#: behaviour.cpp:140 rc.cpp:159 +#, no-c-format +msgid "Perform queries with Strigi" +msgstr "" + +#. i18n: file ./behaviour.ui line 212 +#: behaviour.cpp:141 rc.cpp:162 +#, no-c-format +msgid "" +"Perform queries with Strigi instead of using the first column.\n" +"It needs the Strigi Daemon up and running" +msgstr "" + +#. i18n: file ./behaviour.ui line 222 +#: behaviour.cpp:143 rc.cpp:166 +#, no-c-format +msgid "&Notify recently installed applications (requires kicker restart)" +msgstr "" + +#: dmctl.cpp:345 +msgid "" +"_: user: ...\n" +"%1: TTY login" +msgstr "" + +#: dmctl.cpp:351 +msgid "Unused" +msgstr "" + +#: dmctl.cpp:353 +msgid "X login on remote host" +msgstr "" + +#: dmctl.cpp:354 +#, c-format +msgid "" +"_: ... host\n" +"X login on %1" +msgstr "" + +#: dmctl.cpp:357 +msgid "" +"_: user: session type\n" +"%1: %2" +msgstr "" + +#: dmctl.cpp:372 +msgid "" +"_: session (location)\n" +"%1 (%2)" +msgstr "" + +#. i18n: file ./tastytooltipwidget.ui line 16 +#: menu.cpp:167 rc.cpp:3 rc.cpp:13 tastymenu.cpp:184 tastytooltipwidget.cpp:79 +#, no-c-format +msgid "Tasty Menu" +msgstr "" + +#. i18n: file ./menu.ui line 84 +#: menu.cpp:168 rc.cpp:16 +#, no-c-format +msgid "&Clear list" +msgstr "" + +#. i18n: file ./menu.ui line 87 +#: menu.cpp:169 rc.cpp:19 +#, no-c-format +msgid "Alt+C" +msgstr "" + +#. i18n: file ./menu.ui line 95 +#: menu.cpp:170 rc.cpp:22 +#, no-c-format +msgid "Se&arch:" +msgstr "" + +#. i18n: file ./menu.ui line 107 +#: menu.cpp:172 rc.cpp:25 +#, no-c-format +msgid "Favourite applications" +msgstr "" + +#. i18n: file ./menu.ui line 112 +#: menu.cpp:173 rc.cpp:28 +#, no-c-format +msgid "Most used applications" +msgstr "" + +#. i18n: file ./menu.ui line 117 +#: menu.cpp:174 rc.cpp:31 +#, no-c-format +msgid "Recent applications" +msgstr "" + +#. i18n: file ./menu.ui line 122 +#: menu.cpp:175 rc.cpp:34 +#, no-c-format +msgid "Recent documents" +msgstr "" + +#. i18n: file ./menu.ui line 137 +#: menu.cpp:176 rc.cpp:37 +#, no-c-format +msgid "Use this dropdown menu to change the behaviour of the list below" +msgstr "" + +#. i18n: file ./menu.ui line 161 +#: menu.cpp:177 menu.cpp:180 rc.cpp:40 rc.cpp:49 +#, no-c-format +msgid "..." +msgstr "" + +#. i18n: file ./menu.ui line 169 +#: menu.cpp:178 rc.cpp:43 +#, no-c-format +msgid "&Show:" +msgstr "" + +#. i18n: file ./menu.ui line 234 +#: menu.cpp:179 rc.cpp:46 +#, no-c-format +msgid "All Applications" +msgstr "" + +#. i18n: file ./menu.ui line 259 +#: menu.cpp:181 menuhandler.cpp:463 rc.cpp:52 +#, no-c-format +msgid "Make this menu a normal window" +msgstr "" + +#. i18n: file ./menu.ui line 277 +#: menu.cpp:182 rc.cpp:55 +#, no-c-format +msgid "Ru&n program..." +msgstr "" + +#. i18n: file ./menu.ui line 283 +#: menu.cpp:184 rc.cpp:61 +#, no-c-format +msgid "" +"If you know exatly how a program is named you can directly enter the " +"application name" +msgstr "" + +#. i18n: file ./menu.ui line 297 +#: menu.cpp:187 rc.cpp:66 +#, no-c-format +msgid "Start a new session, switch the active user or edit your user profile" +msgstr "" + +#. i18n: file ./menu.ui line 305 +#: menu.cpp:188 rc.cpp:69 +#, no-c-format +msgid "L&ock Session" +msgstr "" + +#. i18n: file ./menu.ui line 311 +#: menu.cpp:190 rc.cpp:75 +#, no-c-format +msgid "Lock the pc with a password if you are going away for a while" +msgstr "" + +#. i18n: file ./menu.ui line 319 +#: menu.cpp:191 rc.cpp:78 +#, no-c-format +msgid "Lo&g Out..." +msgstr "" + +#. i18n: file ./menu.ui line 325 +#: menu.cpp:193 rc.cpp:84 +#, no-c-format +msgid "Logout, reboot or shoutdown the computer" +msgstr "" + +#: menuhandler.cpp:458 +msgid "Make this window a popup menu" +msgstr "" + +#: menuhandler.cpp:1426 +msgid "&Edit submenu..." +msgstr "" + +#: menuhandler.cpp:1429 +msgid "&Edit item..." +msgstr "" + +#: menuhandler.cpp:1430 +msgid "&Add to desktop" +msgstr "" + +#: menuhandler.cpp:1435 +msgid "&Add to favourite applications" +msgstr "" + +#: menuhandler.cpp:1437 +msgid "&Remove from favourite applications" +msgstr "" + +#: menuhandler.cpp:1501 +msgid "Edit user profile..." +msgstr "" + +#: menuhandler.cpp:1507 +msgid "Save current session" +msgstr "" + +#: menuhandler.cpp:1513 +msgid "Lock session and start a new one" +msgstr "" + +#: menuhandler.cpp:1514 +msgid "Start New Session" +msgstr "" + +#: menuhandler.cpp:1567 +msgid "" +"

You have chosen to open another desktop session.
The current session " +"will be hidden and a new login screen will be displayed.
An F-key is " +"assigned to each session; F%1 is usually assigned to the first session, F%2 " +"to the second session and so on. You can switch between sessions by pressing " +"Ctrl, Alt and the appropriate F-key at the same time. Additionally, the KDE " +"Panel and Desktop menus have actions for switching between sessions.

" +msgstr "" + +#: menuhandler.cpp:1578 +msgid "Warning - New Session" +msgstr "" + +#: menuhandler.cpp:1579 +msgid "&Start New Session" +msgstr "" + +#. i18n: file ./tastytooltipwidget.ui line 83 +#: rc.cpp:6 tastytooltipwidget.cpp:80 +#, no-c-format +msgid "Tasty Menu" +msgstr "" + +#. i18n: file ./tastytooltipwidget.ui line 91 +#: rc.cpp:9 tastytooltipwidget.cpp:81 +#, no-c-format +msgid "Applications, tasks and desktop sessions" +msgstr "" + +#: tastylistview.cpp:288 +msgid "to your favourite applications" +msgstr "" + +#: tastylistview.cpp:292 +msgid "from your favourite applications" +msgstr "" + +#: tastylistview.cpp:296 tastylistview.cpp:313 +msgid "Browse" +msgstr "" + +#: tastylistview.cpp:300 +msgid "Expand" +msgstr "" + +#: tastylistview.cpp:304 +msgid "Collapse" +msgstr "" + +#: tastymenu.cpp:69 tastymenu.cpp:318 +msgid "Menu" +msgstr "" + +#: tastymenu.cpp:186 +msgid "KMenu replacement" +msgstr "" + +#: tastymenu.cpp:191 +msgid "Maintainer" +msgstr "" + +#: tastymenu.cpp:195 +msgid "_: NAME OF TRANSLATORS\\nYour names" +msgstr "" + +#: tastymenu.cpp:196 +msgid "_: EMAIL OF TRANSLATORS\\nYour emails" +msgstr "" + +#: tastymenu.cpp:199 +msgid "For the Russian translation" +msgstr "" + +#: tastymenu.cpp:202 +msgid "For the German translation" +msgstr "" + +#: tastymenu.cpp:205 +msgid "For the Spanish translation" +msgstr "" + +#: tastymenu.cpp:208 +msgid "For the Ukrainian translation" +msgstr "" + +#: tastymenu.cpp:211 +msgid "For the French translation" +msgstr "" + +#: tastymenu.cpp:214 +msgid "For the Finnish translation" +msgstr "" + +#: tastymenu.cpp:217 +msgid "For the Slovenian translation" +msgstr "" + +#: tastymenu.cpp:220 +msgid "For the Polish translation" +msgstr "" + +#: tastymenu.cpp:225 +msgid "For the Switch user code from KDM" +msgstr "" + +#: tastymenu.cpp:229 +msgid "For some inspirations here and there." +msgstr "" + +#: tastymenu.cpp:233 +msgid "For some code taken from Amarok's statistics list view" +msgstr "" + +#: tastymenu.cpp:265 +msgid "Behaviour" +msgstr "" + +#: tastymenu.cpp:274 tastymenu.cpp:275 +msgid "Toggle Tasty Menu" +msgstr "" + +#: tastymenu.cpp:343 +#, c-format +msgid "" +"_n: There is one new installed application\n" +"There are %n new installed applications" +msgstr "" + +#: tastymenu.cpp:416 +msgid "&Edit Menu" +msgstr "" + +#: tastymenu.cpp:418 +msgid "&Clear recently installed applications list" +msgstr "" + +#: tastymenu.cpp:420 +msgid "&Configure Global Shortcuts..." +msgstr "" + +#: tastymenu.cpp:421 +msgid "&Configure..." +msgstr "" diff --git a/po/uk.po b/po/uk.po new file mode 100644 index 0000000..3188e35 --- /dev/null +++ b/po/uk.po @@ -0,0 +1,824 @@ +# translation of tastymenu.po to Україна +# This file is put in the public domain. +# +# Motsyo Vitaliy , 2007. +msgid "" +msgstr "" +"Project-Id-Version: tastymenu\n" +"POT-Creation-Date: 2007-11-21 19:16+0100\n" +"PO-Revision-Date: 2007-08-20 19:08+0300\n" +"Last-Translator: Motsyo Vitaliy \n" +"Language-Team: Україна \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Report-Msgid-Bugs-To: \n" +"X-Generator: KBabel 1.11.4\n" + +#: _translatorinfo.cpp:1 +msgid "" +"_: NAME OF TRANSLATORS\n" +"Your names" +msgstr "Vitalik Motsyo" + +#: _translatorinfo.cpp:3 +msgid "" +"_: EMAIL OF TRANSLATORS\n" +"Your emails" +msgstr "vitalikmotsyo@gmail.com" + +#. i18n: file ./behaviour.ui line 16 +#: appearance.cpp:273 behaviour.cpp:114 rc.cpp:87 rc.cpp:172 +#, no-c-format +msgid "Form1" +msgstr "Form1" + +#. i18n: file ./appearance.ui line 32 +#: appearance.cpp:274 appearance.cpp:285 rc.cpp:175 rc.cpp:206 +#, no-c-format +msgid "Applications list" +msgstr "Список додатків" + +#. i18n: file ./appearance.ui line 43 +#: appearance.cpp:275 rc.cpp:178 +#, no-c-format +msgid "Show tree e&xpanders" +msgstr "Показувати &дерево" + +#. i18n: file ./appearance.ui line 46 +#: appearance.cpp:276 rc.cpp:181 +#, no-c-format +msgid "Alt+X" +msgstr "Alt+X" + +#. i18n: file ./appearance.ui line 57 +#: appearance.cpp:277 rc.cpp:184 +#, no-c-format +msgid "Alwa&ys collapsed categories" +msgstr "Завжди &згорнуті категорії" + +#. i18n: file ./behaviour.ui line 94 +#: appearance.cpp:278 behaviour.cpp:120 rc.cpp:105 rc.cpp:187 +#, no-c-format +msgid "Alt+Y" +msgstr "Alt+Y" + +#. i18n: file ./appearance.ui line 68 +#: appearance.cpp:279 rc.cpp:190 +#, no-c-format +msgid "Hei&ght:" +msgstr "&Висота" + +#. i18n: file ./appearance.ui line 82 +#: appearance.cpp:280 rc.cpp:193 +#, no-c-format +msgid "Button label:" +msgstr "Напис" + +#. i18n: file ./appearance.ui line 111 +#: appearance.cpp:281 rc.cpp:196 +#, no-c-format +msgid "" +"What text should be displayed in the Kicker button tooltip instead of " +"\"Tasty Menu\".\n" +"Empty means default." +msgstr "" +"Назва спливаючого вікна, показане " +"замість\"Tasty Menu\".\n" +"В іншому випадку - стандартне" + +#. i18n: file ./appearance.ui line 119 +#: appearance.cpp:283 rc.cpp:200 +#, no-c-format +msgid "Wi&dth:" +msgstr "&Ширина:" + +#. i18n: file ./appearance.ui line 133 +#: appearance.cpp:284 rc.cpp:203 +#, no-c-format +msgid "Tootip title:" +msgstr "Назва спливаючого вікна:" + +#. i18n: file ./appearance.ui line 160 +#: appearance.cpp:286 rc.cpp:209 +#, no-c-format +msgid "of the screen width" +msgstr "від ширини екрану" + +#. i18n: file ./appearance.ui line 173 +#: appearance.cpp:287 rc.cpp:212 +#, no-c-format +msgid "Menu button" +msgstr "Кнопка меню" + +#. i18n: file ./appearance.ui line 184 +#: appearance.cpp:288 rc.cpp:215 +#, no-c-format +msgid "of the screen height" +msgstr "від висоти екрану" + +#. i18n: file ./appearance.ui line 220 +#: appearance.cpp:290 rc.cpp:219 +#, no-c-format +msgid "&Icon:" +msgstr "&Піктограма:" + +#. i18n: file ./appearance.ui line 223 +#: appearance.cpp:291 rc.cpp:222 +#, no-c-format +msgid "Alt+I" +msgstr "Alt+I" + +#. i18n: file ./appearance.ui line 246 +#: appearance.cpp:293 rc.cpp:226 +#, no-c-format +msgid "" +"What icon should be displayed in the kicker button instead of the KMenu " +"one.\n" +"Empty means default." +msgstr "" +"Ця піктограма буде відображатися замість " +"KMenu.\n" +"В іншому випадку - стандартна іконка." + +#. i18n: file ./appearance.ui line 262 +#: appearance.cpp:295 rc.cpp:230 +#, no-c-format +msgid "N&one" +msgstr "Н&ічого" + +#. i18n: file ./menu.ui line 308 +#: appearance.cpp:296 behaviour.cpp:117 menu.cpp:189 rc.cpp:72 rc.cpp:96 +#: rc.cpp:233 +#, no-c-format +msgid "Alt+O" +msgstr "Alt+O" + +#. i18n: file ./appearance.ui line 280 +#: appearance.cpp:297 rc.cpp:236 +#, no-c-format +msgid "Menu size" +msgstr "Розмір меню" + +#. i18n: file ./appearance.ui line 291 +#: appearance.cpp:298 rc.cpp:239 +#, no-c-format +msgid "&Action icons size:" +msgstr "Розміри піктограм &функцій:" + +#. i18n: file ./appearance.ui line 305 +#: appearance.cpp:299 rc.cpp:242 +#, no-c-format +msgid "&Display applications descriptions" +msgstr "По&казувати описи" + +#. i18n: file ./appearance.ui line 308 +#: appearance.cpp:300 rc.cpp:245 +#, no-c-format +msgid "Alt+D" +msgstr "Alt+D" + +#. i18n: file ./appearance.ui line 344 +#: appearance.cpp:302 rc.cpp:249 +#, no-c-format +msgid "&Text:" +msgstr "&Текст:" + +#. i18n: file ./appearance.ui line 347 +#: appearance.cpp:303 rc.cpp:252 +#, no-c-format +msgid "Alt+T" +msgstr "Alt+T" + +#. i18n: file ./appearance.ui line 362 +#: appearance.cpp:305 rc.cpp:256 +#, no-c-format +msgid "" +"What label instead of \"Menu\" should be shown for the Kicker button.\n" +"Empty means default." +msgstr "" +"Напис замість\"Меню\" поряд з кнопкою.\n" +"В іншому випадку - стандартний напис." + +#. i18n: file ./appearance.ui line 370 +#: appearance.cpp:307 rc.cpp:260 +#, no-c-format +msgid "&None" +msgstr "&Нічого" + +#. i18n: file ./menu.ui line 280 +#: appearance.cpp:308 behaviour.cpp:144 menu.cpp:183 rc.cpp:58 rc.cpp:169 +#: rc.cpp:263 +#, no-c-format +msgid "Alt+N" +msgstr "Alt+N" + +#. i18n: file ./appearance.ui line 383 +#: appearance.cpp:309 appearance.cpp:310 rc.cpp:266 rc.cpp:269 +#, no-c-format +msgid "%" +msgstr "%" + +#. i18n: file ./appearance.ui line 417 +#: appearance.cpp:311 rc.cpp:272 +#, no-c-format +msgid "Button icon:" +msgstr "Піктограма:" + +#. i18n: file ./appearance.ui line 453 +#: appearance.cpp:312 rc.cpp:275 +#, no-c-format +msgid "third column:" +msgstr "третій стовпчик:" + +#. i18n: file ./appearance.ui line 461 +#: appearance.cpp:313 rc.cpp:278 +#, no-c-format +msgid "second column:" +msgstr "другий стовпчик:" + +#. i18n: file ./appearance.ui line 469 +#: appearance.cpp:314 appearance.cpp:315 appearance.cpp:316 appearance.cpp:319 +#: rc.cpp:281 rc.cpp:284 rc.cpp:287 rc.cpp:296 +#, no-c-format +msgid " pixels" +msgstr " крапки" + +#. i18n: file ./appearance.ui line 520 +#: appearance.cpp:317 rc.cpp:290 +#, no-c-format +msgid "first column:" +msgstr "перший стовпчик:" + +#. i18n: file ./appearance.ui line 538 +#: appearance.cpp:318 rc.cpp:293 +#, no-c-format +msgid "Icons si&zes:" +msgstr "Розмір &піктограми:" + +#. i18n: file ./behaviour.ui line 32 +#: behaviour.cpp:115 rc.cpp:90 +#, no-c-format +msgid "General behaviour" +msgstr "Головне" + +#. i18n: file ./behaviour.ui line 60 +#: behaviour.cpp:116 rc.cpp:93 +#, no-c-format +msgid "&Override alt+F1 keyboard shortcut (requires kicker restart)" +msgstr "" +"Перехоплювати комбінацію &клавіш Alt+F1 " +"(знадобиться перезавантаження панелі)" + +#. i18n: file ./behaviour.ui line 66 +#: behaviour.cpp:118 rc.cpp:99 +#, no-c-format +msgid "" +"Pops up Tasty Menu instead of KMenu when the shortcut sequence Alt+F1 is " +"pressed" +msgstr "" +"Показувати Tasty Menu замість KMenu при " +"натисненні Alt+F1" + +#. i18n: file ./behaviour.ui line 91 +#: behaviour.cpp:119 rc.cpp:102 +#, no-c-format +msgid "Show save session functionalit&y" +msgstr "" +"Показувати параметри роботи з &сеансами" + +#. i18n: file ./behaviour.ui line 98 +#: behaviour.cpp:121 rc.cpp:108 +#, no-c-format +msgid "" +"Under the menu that pops up when the button with user name is pressed a new " +"item \"Save current session\" is added.\n" +"It saves the current session informations like open applications and windows " +"position. In order to use it you must set \"Restore manually saved session\" " +"in the Session Manager Kcontrol module." +msgstr "" +"Під меню, котре з'являється при " +"натисненні кнопки з ім'ям користувача " +"пункт \"Зберегти сеанс\".\n" +"Це дозволяє зберегти інформацію про " +"відкриті вікна, додатки та їх стан. Щоб " +"скористатися збереженою сесією, слід " +"встановити \"Восстанавливать сеанс, " +"сохраненный вручную\" в менеджері сеансів " +"Центру керування." + +#. i18n: file ./behaviour.ui line 106 +#: behaviour.cpp:123 rc.cpp:112 +#, no-c-format +msgid "&Hide groups with only one application" +msgstr "" +"Схо&вати групи, утримуючі тільки один " +"додаток" + +#. i18n: file ./behaviour.ui line 109 +#: behaviour.cpp:124 rc.cpp:115 +#, no-c-format +msgid "Alt+H" +msgstr "Alt+H" + +#. i18n: file ./behaviour.ui line 120 +#: behaviour.cpp:125 rc.cpp:118 +#, no-c-format +msgid "Show items in alpha&betical order" +msgstr "" +"Упорядкувати перелік програм за " +"ал&фавітом" + +#. i18n: file ./behaviour.ui line 123 +#: behaviour.cpp:126 rc.cpp:121 +#, no-c-format +msgid "Alt+B" +msgstr "Alt+B" + +#. i18n: file ./behaviour.ui line 136 +#: behaviour.cpp:127 rc.cpp:124 +#, no-c-format +msgid "Search field behaviour" +msgstr "Метод пошуку додатків" + +#. i18n: file ./behaviour.ui line 164 +#: behaviour.cpp:129 rc.cpp:128 +#, no-c-format +msgid "Si&mple searches" +msgstr "&Простий пошук" + +#. i18n: file ./behaviour.ui line 167 +#: behaviour.cpp:130 rc.cpp:131 +#, no-c-format +msgid "Alt+M" +msgstr "Alt+M" + +#. i18n: file ./behaviour.ui line 173 +#: behaviour.cpp:131 rc.cpp:134 +#, no-c-format +msgid "Filters the applications list" +msgstr "Фільтрувати перелік додатків" + +#. i18n: file ./behaviour.ui line 176 +#: behaviour.cpp:132 rc.cpp:137 +#, no-c-format +msgid "" +"It displays in the first column all the applications whose name or " +"description matches with the query you entered" +msgstr "" +"В першому стовпчику відображаються всі " +"додатки, назви чи опис яких відповідають " +"поставленому запиту" + +#. i18n: file ./behaviour.ui line 184 +#: behaviour.cpp:133 rc.cpp:140 +#, no-c-format +msgid "&Kerry Beagle integration" +msgstr "Інтеграція &Kerry Beagle" + +#. i18n: file ./behaviour.ui line 187 +#: behaviour.cpp:134 rc.cpp:143 +#, no-c-format +msgid "Alt+K" +msgstr "Alt+K" + +#. i18n: file ./behaviour.ui line 190 +#: behaviour.cpp:135 rc.cpp:146 +#, no-c-format +msgid "Perform queries with Kerry Beagle" +msgstr "Пошук за допомогою Kerry Beagle" + +#. i18n: file ./behaviour.ui line 194 +#: behaviour.cpp:136 rc.cpp:149 +#, no-c-format +msgid "" +"Perform queries with Kerry Beagle instead of using the first column.\n" +"It needs Kerry Beagle up and running." +msgstr "" +"Результати пошуку за допомогою Kerry Beagle " +"з'являться в першому стовпчику.\n" +"Потрібно, щоб Kerry Beagle був увімкнений." + +#. i18n: file ./behaviour.ui line 202 +#: behaviour.cpp:138 rc.cpp:153 +#, no-c-format +msgid "Stri&gi Integration" +msgstr "Інтеграція &Strigi" + +#. i18n: file ./menu.ui line 322 +#: behaviour.cpp:139 menu.cpp:192 rc.cpp:81 rc.cpp:156 +#, no-c-format +msgid "Alt+G" +msgstr "Alt+G" + +#. i18n: file ./behaviour.ui line 208 +#: behaviour.cpp:140 rc.cpp:159 +#, no-c-format +msgid "Perform queries with Strigi" +msgstr "Пошук за допомогою Strigi" + +#. i18n: file ./behaviour.ui line 212 +#: behaviour.cpp:141 rc.cpp:162 +#, no-c-format +msgid "" +"Perform queries with Strigi instead of using the first column.\n" +"It needs the Strigi Daemon up and running" +msgstr "" +"Результати пошуку за допомогою Strig " +"з'являться в першому стовпчику.\n" +"Потрібно, щоб Strigi був увімкнений." + +#. i18n: file ./behaviour.ui line 222 +#: behaviour.cpp:143 rc.cpp:166 +#, no-c-format +msgid "&Notify recently installed applications (requires kicker restart)" +msgstr "" +"О&чистити перелік нещодавно встановлених " +"програм (Прохання перезавантажити)" + +#: dmctl.cpp:345 +msgid "" +"_: user: ...\n" +"%1: TTY login" +msgstr "" + +#: dmctl.cpp:351 +msgid "Unused" +msgstr "Не використовується" + +#: dmctl.cpp:353 +msgid "X login on remote host" +msgstr "X вхід в систему на віддаленій машині" + +#: dmctl.cpp:354 +#, c-format +msgid "" +"_: ... host\n" +"X login on %1" +msgstr "" + +#: dmctl.cpp:357 +#, fuzzy +msgid "" +"_: user: session type\n" +"%1: %2" +msgstr "користувач: тип сеансу" + +#: dmctl.cpp:372 +#, fuzzy +msgid "" +"_: session (location)\n" +"%1 (%2)" +msgstr "сеанс" + +#. i18n: file ./tastytooltipwidget.ui line 16 +#: menu.cpp:167 rc.cpp:3 rc.cpp:13 tastymenu.cpp:184 tastytooltipwidget.cpp:79 +#, no-c-format +msgid "Tasty Menu" +msgstr "Tasty Menu" + +#. i18n: file ./menu.ui line 84 +#: menu.cpp:168 rc.cpp:16 +#, no-c-format +msgid "&Clear list" +msgstr "О&чистіть перелік" + +#. i18n: file ./menu.ui line 87 +#: menu.cpp:169 rc.cpp:19 +#, no-c-format +msgid "Alt+C" +msgstr "Alt+C" + +#. i18n: file ./menu.ui line 95 +#: menu.cpp:170 rc.cpp:22 +#, no-c-format +msgid "Se&arch:" +msgstr "&Пошук:" + +#. i18n: file ./menu.ui line 107 +#: menu.cpp:172 rc.cpp:25 +#, no-c-format +msgid "Favourite applications" +msgstr "Улюблені програми" + +#. i18n: file ./menu.ui line 112 +#: menu.cpp:173 rc.cpp:28 +#, no-c-format +msgid "Most used applications" +msgstr "Часто використовувані програми" + +#. i18n: file ./menu.ui line 117 +#: menu.cpp:174 rc.cpp:31 +#, no-c-format +msgid "Recent applications" +msgstr "Останні програми" + +#. i18n: file ./menu.ui line 122 +#: menu.cpp:175 rc.cpp:34 +#, no-c-format +msgid "Recent documents" +msgstr "Останні документи" + +#. i18n: file ./menu.ui line 137 +#: menu.cpp:176 rc.cpp:37 +#, no-c-format +msgid "Use this dropdown menu to change the behaviour of the list below" +msgstr "Тип вмісту першого стовпчика" + +#. i18n: file ./menu.ui line 161 +#: menu.cpp:177 menu.cpp:180 rc.cpp:40 rc.cpp:49 +#, no-c-format +msgid "..." +msgstr "..." + +#. i18n: file ./menu.ui line 169 +#: menu.cpp:178 rc.cpp:43 +#, fuzzy, no-c-format +msgid "&Show:" +msgstr "П&оказати:" + +#. i18n: file ./menu.ui line 234 +#: menu.cpp:179 rc.cpp:46 +#, no-c-format +msgid "All Applications" +msgstr "Всі програми" + +#. i18n: file ./menu.ui line 259 +#: menu.cpp:181 menuhandler.cpp:463 rc.cpp:52 +#, no-c-format +msgid "Make this menu a normal window" +msgstr "Меню у звичайному вікні" + +#. i18n: file ./menu.ui line 277 +#: menu.cpp:182 rc.cpp:55 +#, no-c-format +msgid "Ru&n program..." +msgstr "&Запустити програму..." + +#. i18n: file ./menu.ui line 283 +#: menu.cpp:184 rc.cpp:61 +#, no-c-format +msgid "" +"If you know exatly how a program is named you can directly enter the " +"application name" +msgstr "" +"Якщо ви точно знаєте як називається " +"програма, ви можете просто набрати її ім'я" + +#. i18n: file ./menu.ui line 297 +#: menu.cpp:187 rc.cpp:66 +#, no-c-format +msgid "Start a new session, switch the active user or edit your user profile" +msgstr "" +"Розпочати новий сеанс, перемкнути " +"діючого користувача або змінити профіль " +"користувача" + +#. i18n: file ./menu.ui line 305 +#: menu.cpp:188 rc.cpp:69 +#, no-c-format +msgid "L&ock Session" +msgstr "З&аблокувати сесію" + +#. i18n: file ./menu.ui line 311 +#: menu.cpp:190 rc.cpp:75 +#, no-c-format +msgid "Lock the pc with a password if you are going away for a while" +msgstr "" +"Заблокуйте комп'ютер за допомогою пароля, " +"якщо ви відходите" + +#. i18n: file ./menu.ui line 319 +#: menu.cpp:191 rc.cpp:78 +#, no-c-format +msgid "Lo&g Out..." +msgstr "&Вихід..." + +#. i18n: file ./menu.ui line 325 +#: menu.cpp:193 rc.cpp:84 +#, no-c-format +msgid "Logout, reboot or shoutdown the computer" +msgstr "" +"Вихід, перезавантаження або вимкнення " +"комп'ютера" + +#: menuhandler.cpp:458 +msgid "Make this window a popup menu" +msgstr "Режим меню" + +#: menuhandler.cpp:1426 +msgid "&Edit submenu..." +msgstr "&Редагувати підменю..." + +#: menuhandler.cpp:1429 +msgid "&Edit item..." +msgstr "Р&едагувати запис..." + +#: menuhandler.cpp:1430 +msgid "&Add to desktop" +msgstr "&Додати програму" + +#: menuhandler.cpp:1435 +msgid "&Add to favourite applications" +msgstr "&Додати в перелік обраних програм" + +#: menuhandler.cpp:1437 +msgid "&Remove from favourite applications" +msgstr "&Прибрати з переліку обраних програм" + +#: menuhandler.cpp:1501 +msgid "Edit user profile..." +msgstr "Змінити профіль користувача..." + +#: menuhandler.cpp:1507 +msgid "Save current session" +msgstr "Зберегти поточний сеанс" + +#: menuhandler.cpp:1513 +msgid "Lock session and start a new one" +msgstr "Заблокувати сеанс і почати новий" + +#: menuhandler.cpp:1514 +msgid "Start New Session" +msgstr "Почати новий сеанс" + +#: menuhandler.cpp:1567 +msgid "" +"

You have chosen to open another desktop session.
The current session " +"will be hidden and a new login screen will be displayed.
An F-key is " +"assigned to each session; F%1 is usually assigned to the first session, F%2 " +"to the second session and so on. You can switch between sessions by pressing " +"Ctrl, Alt and the appropriate F-key at the same time. Additionally, the KDE " +"Panel and Desktop menus have actions for switching between sessions.

" +msgstr "" +"

Запуск нового сеансу.
Поточний сеанс " +"буде схований і показано нове вікно " +"запуску.
За допомогою співвідношенням " +"клавіш Ctrl, Alt + F можна перемикати різні " +"сесії. F%1 взагалі відповідає першій сесії, " +"F%2 другій і так далі.

" + +#: menuhandler.cpp:1578 +msgid "Warning - New Session" +msgstr "Увага - Новий сеанс" + +#: menuhandler.cpp:1579 +msgid "&Start New Session" +msgstr "&Розпочати новий сеанс" + +#. i18n: file ./tastytooltipwidget.ui line 83 +#: rc.cpp:6 tastytooltipwidget.cpp:80 +#, no-c-format +msgid "Tasty Menu" +msgstr "Tasty Menu" + +#. i18n: file ./tastytooltipwidget.ui line 91 +#: rc.cpp:9 tastytooltipwidget.cpp:81 +#, no-c-format +msgid "Applications, tasks and desktop sessions" +msgstr "Програми, завдання і сеанси" + +#: tastylistview.cpp:288 +msgid "to your favourite applications" +msgstr "в перелік обраних програм" + +#: tastylistview.cpp:292 +msgid "from your favourite applications" +msgstr "з переліку обраних програм" + +#: tastylistview.cpp:296 tastylistview.cpp:313 +msgid "Browse" +msgstr "Огляд" + +#: tastylistview.cpp:300 +msgid "Expand" +msgstr "Розкрити" + +#: tastylistview.cpp:304 +msgid "Collapse" +msgstr "Сховати" + +#: tastymenu.cpp:69 tastymenu.cpp:318 +msgid "Menu" +msgstr "Меню" + +#: tastymenu.cpp:186 +msgid "KMenu replacement" +msgstr "Заміна KMenu" + +#: tastymenu.cpp:191 +msgid "Maintainer" +msgstr "Мантейнер" + +#: tastymenu.cpp:195 +msgid "_: NAME OF TRANSLATORS\\nYour names" +msgstr "Віталій Моцьо" + +#: tastymenu.cpp:196 +msgid "_: EMAIL OF TRANSLATORS\\nYour emails" +msgstr "vitalikmotsyo.gmail.com" + +#: tastymenu.cpp:199 +msgid "For the Russian translation" +msgstr "Для Російського перекладу" + +#: tastymenu.cpp:202 +msgid "For the German translation" +msgstr "Для Германського перекладу" + +#: tastymenu.cpp:205 +msgid "For the Spanish translation" +msgstr "Для Іспанського перекладу" + +#: tastymenu.cpp:208 +#, fuzzy +msgid "For the Ukrainian translation" +msgstr "Для Германського перекладу" + +#: tastymenu.cpp:211 +#, fuzzy +msgid "For the French translation" +msgstr "Для Германського перекладу" + +#: tastymenu.cpp:214 +#, fuzzy +msgid "For the Finnish translation" +msgstr "Для Іспанського перекладу" + +#: tastymenu.cpp:217 +#, fuzzy +msgid "For the Slovenian translation" +msgstr "Для Германського перекладу" + +#: tastymenu.cpp:220 +#, fuzzy +msgid "For the Polish translation" +msgstr "Для Іспанського перекладу" + +#: tastymenu.cpp:225 +msgid "For the Switch user code from KDM" +msgstr "" +"За код із KDM, відповідальний за " +"переключення користувачів" + +#: tastymenu.cpp:229 +msgid "For some inspirations here and there." +msgstr "За натхнення час від часу" + +#: tastymenu.cpp:233 +msgid "For some code taken from Amarok's statistics list view" +msgstr "" +"За код із Amarok, відповідальний за " +"статистику" + +#: tastymenu.cpp:265 +msgid "Behaviour" +msgstr "Поведінка" + +#: tastymenu.cpp:274 tastymenu.cpp:275 +msgid "Toggle Tasty Menu" +msgstr "Переключити Tasty Menu" + +#: tastymenu.cpp:343 +#, fuzzy, c-format +msgid "" +"_n: There is one new installed application\n" +"There are %n new installed applications" +msgstr "" +"Нові програми\n" +"Встановлено %n нових програм" + +#: tastymenu.cpp:416 +msgid "&Edit Menu" +msgstr "&Редагувати меню" + +#: tastymenu.cpp:418 +msgid "&Clear recently installed applications list" +msgstr "" +"О&чистити перелік нещодавно встановлених " +"програм" + +#: tastymenu.cpp:420 +msgid "&Configure Global Shortcuts..." +msgstr "" +"Налаштування &глобальний комбінацій " +"клавіш" + +#: tastymenu.cpp:421 +msgid "&Configure..." +msgstr "&Налаштування..." + +#~ msgid "Icons size:" +#~ msgstr "Розмір піктограм:" + +#~ msgid "user: ..." +#~ msgstr "користувач: ..." + +#~ msgid "... host" +#~ msgstr "... віддалені машини" + +#~ msgid "There are" +#~ msgstr "Встановлено" + +#~ msgid "new installed applications" +#~ msgstr "нових програм" diff --git a/src/Makefile.am b/src/Makefile.am new file mode 100644 index 0000000..75007d3 --- /dev/null +++ b/src/Makefile.am @@ -0,0 +1,22 @@ +INCLUDES= $(all_includes) +METASOURCES = AUTO + +kde_module_LTLIBRARIES = tastymenu_panelapplet.la + +tastymenu_panelapplet_la_SOURCES = tastymenu.cpp menu.ui menuhandler.cpp \ + dmctl.cpp dmctl.h tastylistview.cpp misc.cpp misc.h appearance.ui prefs.kcfgc \ + behaviour.ui tastytooltip.cpp tastytooltipwidget.ui tastybutton.cpp +tastymenu_panelapplet_la_LDFLAGS = -version-info 0:0:0 -module $(KDE_PLUGIN) $(all_libraries) +tastymenu_panelapplet_la_LIBADD = $(LIB_KDEUI) $(LIB_KIO) + +tastymenu_DATA = tastymenu.desktop +tastymenudir = $(kde_datadir)/kicker/applets +kde_kcfg_DATA = tastymenu.kcfg + +EXTRA_DIST = pics + +messages: rc.cpp + $(EXTRACTRC) `find . -name \*.ui -o -name \*.rc` > rc.cpp + $(XGETTEXT) *.cpp -o $(podir)/tastymenu.pot +noinst_HEADERS = menuhandler.h tastylistview.h tastytooltip.h buttons.h \ + tastybutton.h diff --git a/src/appearance.ui b/src/appearance.ui new file mode 100644 index 0000000..6e8c409 --- /dev/null +++ b/src/appearance.ui @@ -0,0 +1,608 @@ + +Appearance + + + Appearance + + + + 0 + 0 + 520 + 465 + + + + Form1 + + + + unnamed + + + + Icons + + + + 1 + + + + Applications list + + + AlignBottom + + + + + kcfg_ShowExpander + + + Show tree e&xpanders + + + Alt+X + + + + + kcfg_AlwaysCollapsed + + + true + + + Alwa&ys collapsed categories + + + Alt+Y + + + + + textLabel2 + + + Hei&ght: + + + AlignVCenter|AlignRight + + + kcfg_MenuHeight + + + + + textLabel1_4 + + + Button label: + + + AlignVCenter|AlignRight + + + + + spacer6 + + + Horizontal + + + Expanding + + + + 79 + 20 + + + + + + kcfg_ToolTipTitle + + + What text should be displayed in the Kicker button tooltip instead of "Tasty Menu". +Empty means default. + + + + + textLabel1_2 + + + Wi&dth: + + + AlignVCenter|AlignRight + + + kcfg_MenuWidth + + + + + textLabel5 + + + Tootip title: + + + AlignVCenter|AlignRight + + + + + ApplicationsList + + + + 1 + + + + Applications list + + + AlignBottom + + + + + textLabel3 + + + of the screen width + + + + + MenuButton + + + + 1 + + + + Menu button + + + AlignBottom + + + + + textLabel4 + + + of the screen height + + + + + kcfg_MenuButtonIconType + + + + 5 + 0 + 0 + 0 + + + + NoFrame + + + Plain + + + + + + + unnamed + + + 0 + + + + kcfg_Icon + + + &Icon: + + + Alt+I + + + true + + + + + MenuButtonIcon + + + + 7 + 0 + 0 + 0 + + + + + + + What icon should be displayed in the kicker button instead of the KMenu one. +Empty means default. + + + + + kcfg_MenuButtonIcon + + + false + + + + + kcfg_IconNone + + + N&one + + + Alt+O + + + + + + + menuSize + + + + 1 + + + + Menu size + + + AlignBottom + + + + + textLabel1_3 + + + &Action icons size: + + + AlignVCenter|AlignRight + + + kcfg_ActionIconSize + + + + + kcfg_DisplaySubText + + + &Display applications descriptions + + + Alt+D + + + + + kcfg_MenuButtonLabelType + + + + 5 + 0 + 0 + 0 + + + + NoFrame + + + Plain + + + + + + + unnamed + + + 0 + + + + kcfg_MenuButtonText + + + &Text: + + + Alt+T + + + true + + + + + kcfg_MenuButtonLabel + + + + + + What label instead of "Menu" should be shown for the Kicker button. +Empty means default. + + + + + kcfg_MenuButtonNone + + + &None + + + Alt+N + + + + + + + kcfg_MenuWidth + + + % + + + 90 + + + 10 + + + 70 + + + + + kcfg_MenuHeight + + + % + + + 90 + + + 10 + + + 70 + + + + + textLabel2_2 + + + Button icon: + + + AlignVCenter|AlignRight + + + + + spacer4 + + + Horizontal + + + Expanding + + + + 78 + 21 + + + + + + layout1 + + + + unnamed + + + + textLabel1_5_3 + + + third column: + + + + + textLabel1_5_2 + + + second column: + + + + + kcfg_IconSize1 + + + pixels + + + 48 + + + 16 + + + 22 + + + + + kcfg_IconSize3 + + + pixels + + + 48 + + + 16 + + + 22 + + + + + kcfg_IconSize2 + + + pixels + + + 48 + + + 16 + + + 22 + + + + + textLabel1_5 + + + first column: + + + + + + + textLabel1 + + + + 7 + 5 + 0 + 0 + + + + Icons sizes: + + + AlignVCenter|AlignRight + + + kcfg_IconSize + + + + + kcfg_ActionIconSize + + + pixels + + + 48 + + + 16 + + + + + + + + + kcfg_MenuButtonText + toggled(bool) + kcfg_IconNone + setEnabled(bool) + + + kcfg_Icon + toggled(bool) + kcfg_MenuButtonNone + setEnabled(bool) + + + kcfg_MenuButtonText + toggled(bool) + kcfg_MenuButtonLabel + setEnabled(bool) + + + kcfg_Icon + toggled(bool) + MenuButtonIcon + setEnabled(bool) + + + MenuButtonIcon + iconChanged(QString) + Appearance + iconChanged(QString) + + + + appearance.ui.h + + + kcfg_ShowExpander_toggled( bool status ) + iconChanged( QString icon ) + + + + kicondialog.h + + diff --git a/src/appearance.ui.h b/src/appearance.ui.h new file mode 100644 index 0000000..938c41a --- /dev/null +++ b/src/appearance.ui.h @@ -0,0 +1,23 @@ +/**************************************************************************** +** ui.h extension file, included from the uic-generated form implementation. +** +** If you want to add, delete, or rename functions or slots, use +** Qt Designer to update this file, preserving your code. +** +** You should not define a constructor or destructor in this file. +** Instead, write your code in functions called init() and destroy(). +** These will automatically be called by the form's constructor and +** destructor. +*****************************************************************************/ + + +void Appearance::kcfg_ShowExpander_toggled( bool status ) +{ + kcfg_AlwaysCollapsed->setEnabled( status ); +} + + +void Appearance::iconChanged( QString icon ) +{ + kcfg_MenuButtonIcon->setText(icon); +} diff --git a/src/behaviour.ui b/src/behaviour.ui new file mode 100644 index 0000000..b65cd3c --- /dev/null +++ b/src/behaviour.ui @@ -0,0 +1,234 @@ + +Behaviour + + + Behaviour + + + + 0 + 0 + 516 + 400 + + + + Form1 + + + + unnamed + + + + GeneralBehaviour + + + + 1 + + + + General behaviour + + + AlignBottom + + + + + spacer8 + + + Horizontal + + + Expanding + + + + 31 + 21 + + + + + + kcfg_OverrideAltF1 + + + &Override alt+F1 keyboard shortcut (requires kicker restart) + + + Alt+O + + + Pops up Tasty Menu instead of KMenu when the shortcut sequence Alt+F1 is pressed + + + + + spacer7 + + + Horizontal + + + Expanding + + + + 81 + 20 + + + + + + kcfg_ShowSaveSession + + + Show save session functionalit&y + + + Alt+Y + + + Under the menu that pops up when the button with user name is pressed a new item "Save current session" is added. +It saves the current session informations like open applications and windows position. In order to use it you must set "Restore manually saved session" in the Session Manager Kcontrol module. + + + + + kcfg_HideOneChild + + + &Hide groups with only one application + + + Alt+H + + + true + + + + + kcfg_Alphabetical + + + Show items in alpha&betical order + + + Alt+B + + + + + SearchFieldBehaviour + + + + 1 + + + + Search field behaviour + + + AlignBottom + + + + + buttonGroup1 + + + NoFrame + + + + + + + unnamed + + + 0 + + + + simpleSearch + + + Si&mple searches + + + Alt+M + + + true + + + Filters the applications list + + + It displays in the first column all the applications whose name or description matches with the query you entered + + + + + kcfg_KerryIntegration + + + &Kerry Beagle integration + + + Alt+K + + + Perform queries with Kerry Beagle + + + Perform queries with Kerry Beagle instead of using the first column. +It needs Kerry Beagle up and running. + + + + + kcfg_StrigiIntegration + + + Stri&gi Integration + + + Alt+G + + + Perform queries with Strigi + + + Perform queries with Strigi instead of using the first column. +It needs the Strigi Daemon up and running + + + + + + + kcfg_NewAppsNotification + + + &Notify recently installed applications (requires kicker restart) + + + Alt+N + + + true + + + + + + diff --git a/src/create_buttons.sh b/src/create_buttons.sh new file mode 100644 index 0000000..7f787b2 --- /dev/null +++ b/src/create_buttons.sh @@ -0,0 +1 @@ +uic -o buttons.h -embed buttons pics/attach.png pics/detach.png diff --git a/src/dmctl.cpp b/src/dmctl.cpp new file mode 100644 index 0000000..9f24a52 --- /dev/null +++ b/src/dmctl.cpp @@ -0,0 +1,434 @@ +/* + Copyright (C) 2004 Oswald Buddenhagen + + This program is free software; you can redistribute it and/or + modify it under the terms of the Lesser GNU General Public + License as published by the Free Software Foundation; either + version 2 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 Lesser GNU General Public License + along with this program; see the file COPYING. If not, write to + the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. +*/ + +#include "dmctl.h" + +#ifdef Q_WS_X11 + +#include +#include + +#include + +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +static enum { Dunno, NoDM, NewKDM, OldKDM, GDM } DMType = Dunno; +static const char *ctl, *dpy; + +DM::DM() : fd( -1 ) +{ + const char *ptr; + struct sockaddr_un sa; + + if (DMType == Dunno) { + if (!(dpy = ::getenv( "DISPLAY" ))) + DMType = NoDM; + else if ((ctl = ::getenv( "DM_CONTROL" ))) + DMType = NewKDM; + else if ((ctl = ::getenv( "XDM_MANAGED" )) && ctl[0] == '/') + DMType = OldKDM; + else if (::getenv( "GDMSESSION" )) + DMType = GDM; + else + DMType = NoDM; + } + switch (DMType) { + default: + return; + case NewKDM: + case GDM: + if ((fd = ::socket( PF_UNIX, SOCK_STREAM, 0 )) < 0) + return; + sa.sun_family = AF_UNIX; + if (DMType == GDM) + strcpy( sa.sun_path, "/tmp/.gdm_socket" ); + else { + if ((ptr = strchr( dpy, ':' ))) + ptr = strchr( ptr, '.' ); + snprintf( sa.sun_path, sizeof(sa.sun_path), + "%s/dmctl-%.*s/socket", + ctl, ptr ? ptr - dpy : 512, dpy ); + } + if (::connect( fd, (struct sockaddr *)&sa, sizeof(sa) )) { + ::close( fd ); + fd = -1; + } + if (DMType == GDM) + GDMAuthenticate(); + break; + case OldKDM: + { + QString tf( ctl ); + tf.truncate( tf.find( ',' ) ); + fd = ::open( tf.latin1(), O_WRONLY ); + } + break; + } +} + +DM::~DM() +{ + if (fd >= 0) + close( fd ); +} + +bool +DM::exec( const char *cmd ) +{ + QCString buf; + + return exec( cmd, buf ); +} + +/** + * Execute a KDM/GDM remote control command. + * @param cmd the command to execute. FIXME: undocumented yet. + * @param buf the result buffer. + * @return result: + * @li If true, the command was successfully executed. + * @p ret might contain addional results. + * @li If false and @p ret is empty, a communication error occurred + * (most probably KDM is not running). + * @li If false and @p ret is non-empty, it contains the error message + * from KDM. + */ +bool +DM::exec( const char *cmd, QCString &buf ) +{ + bool ret = false; + int tl; + unsigned len = 0; + + if (fd < 0) + goto busted; + + if (::write( fd, cmd, (tl = strlen( cmd )) ) != tl) { + bust: + ::close( fd ); + fd = -1; + busted: + buf.resize( 0 ); + return false; + } + if (DMType == OldKDM) { + buf.resize( 0 ); + return true; + } + for (;;) { + if (buf.size() < 128) + buf.resize( 128 ); + else if (buf.size() < len * 2) + buf.resize( len * 2 ); + if ((tl = ::read( fd, buf.data() + len, buf.size() - len)) <= 0) { + if (tl < 0 && errno == EINTR) + continue; + goto bust; + } + len += tl; + if (buf[len - 1] == '\n') { + buf[len - 1] = 0; + if (len > 2 && (buf[0] == 'o' || buf[0] == 'O') && + (buf[1] == 'k' || buf[1] == 'K') && buf[2] <= 32) + ret = true; + break; + } + } + return ret; +} + +bool +DM::canShutdown() +{ + if (DMType == OldKDM) + return strstr( ctl, ",maysd" ) != 0; + + QCString re; + + if (DMType == GDM) + return exec( "QUERY_LOGOUT_ACTION\n", re ) && re.find("HALT") >= 0; + + return exec( "caps\n", re ) && re.find( "\tshutdown" ) >= 0; +} + +void +DM::shutdown( KApplication::ShutdownType shutdownType, + KApplication::ShutdownMode shutdownMode, /* NOT Default */ + const QString &bootOption ) +{ + if (shutdownType == KApplication::ShutdownTypeNone) + return; + + bool cap_ask; + if (DMType == NewKDM) { + QCString re; + cap_ask = exec( "caps\n", re ) && re.find( "\tshutdown ask" ) >= 0; + } else { + if (!bootOption.isEmpty()) + return; + cap_ask = false; + } + if (!cap_ask && shutdownMode == KApplication::ShutdownModeInteractive) + shutdownMode = KApplication::ShutdownModeForceNow; + + QCString cmd; + if (DMType == GDM) { + cmd.append( shutdownMode == KApplication::ShutdownModeForceNow ? + "SET_LOGOUT_ACTION " : "SET_SAFE_LOGOUT_ACTION " ); + cmd.append( shutdownType == KApplication::ShutdownTypeReboot ? + "REBOOT\n" : "HALT\n" ); + } else { + cmd.append( "shutdown\t" ); + cmd.append( shutdownType == KApplication::ShutdownTypeReboot ? + "reboot\t" : "halt\t" ); + if (!bootOption.isNull()) + cmd.append( "=" ).append( bootOption.local8Bit() ).append( "\t" ); + cmd.append( shutdownMode == KApplication::ShutdownModeInteractive ? + "ask\n" : + shutdownMode == KApplication::ShutdownModeForceNow ? + "forcenow\n" : + shutdownMode == KApplication::ShutdownModeTryNow ? + "trynow\n" : "schedule\n" ); + } + exec( cmd.data() ); +} + +bool +DM::bootOptions( QStringList &opts, int &defopt, int ¤t ) +{ + if (DMType != NewKDM) + return false; + + QCString re; + if (!exec( "listbootoptions\n", re )) + return false; + + opts = QStringList::split( '\t', QString::fromLocal8Bit( re.data() ) ); + if (opts.size() < 4) + return false; + + bool ok; + defopt = opts[2].toInt( &ok ); + if (!ok) + return false; + current = opts[3].toInt( &ok ); + if (!ok) + return false; + + opts = QStringList::split( ' ', opts[1] ); + for (QStringList::Iterator it = opts.begin(); it != opts.end(); ++it) + (*it).replace( "\\s", " " ); + + return true; +} + +void +DM::setLock( bool on ) +{ + if (DMType != GDM) + exec( on ? "lock\n" : "unlock\n" ); +} + +bool +DM::isSwitchable() +{ + if (DMType == OldKDM) + return dpy[0] == ':'; + + if (DMType == GDM) + return exec( "QUERY_VT\n" ); + + QCString re; + + return exec( "caps\n", re ) && re.find( "\tlocal" ) >= 0; +} + +int +DM::numReserve() +{ + if (DMType == GDM) + return 1; /* Bleh */ + + if (DMType == OldKDM) + return strstr( ctl, ",rsvd" ) ? 1 : -1; + + QCString re; + int p; + + if (!(exec( "caps\n", re ) && (p = re.find( "\treserve " )) >= 0)) + return -1; + return atoi( re.data() + p + 9 ); +} + +void +DM::startReserve() +{ + if (DMType == GDM) + exec("FLEXI_XSERVER\n"); + else + exec("reserve\n"); +} + +bool +DM::localSessions( SessList &list ) +{ + if (DMType == OldKDM) + return false; + + QCString re; + + if (DMType == GDM) { + if (!exec( "CONSOLE_SERVERS\n", re )) + return false; + QStringList sess = QStringList::split( QChar(';'), re.data() + 3 ); + for (QStringList::ConstIterator it = sess.begin(); it != sess.end(); ++it) { + QStringList ts = QStringList::split( QChar(','), *it, true ); + SessEnt se; + se.display = ts[0]; + se.user = ts[1]; + se.vt = ts[2].toInt(); + se.session = ""; + se.self = ts[0] == ::getenv( "DISPLAY" ); /* Bleh */ + se.tty = false; + list.append( se ); + } + } else { + if (!exec( "list\talllocal\n", re )) + return false; + QStringList sess = QStringList::split( QChar('\t'), re.data() + 3 ); + for (QStringList::ConstIterator it = sess.begin(); it != sess.end(); ++it) { + QStringList ts = QStringList::split( QChar(','), *it, true ); + SessEnt se; + se.display = ts[0]; + if (ts[1][0] == '@') + se.from = ts[1].mid( 1 ), se.vt = 0; + else + se.vt = ts[1].mid( 2 ).toInt(); + se.user = ts[2]; + se.session = ts[3]; + se.self = (ts[4].find( '*' ) >= 0); + se.tty = (ts[4].find( 't' ) >= 0); + list.append( se ); + } + } + return true; +} + +void +DM::sess2Str2( const SessEnt &se, QString &user, QString &loc ) +{ + if (se.tty) { + user = i18n("user: ...", "%1: TTY login").arg( se.user ); + loc = se.vt ? QString("vt%1").arg( se.vt ) : se.display ; + } else { + user = + se.user.isEmpty() ? + se.session.isEmpty() ? + i18n("Unused") : + se.session == "" ? + i18n("X login on remote host") : + i18n("... host", "X login on %1").arg( se.session ) : + se.session == "" ? + se.user : + i18n("user: session type", "%1: %2") + .arg( se.user ).arg( se.session ); + loc = + se.vt ? + QString("%1, vt%2").arg( se.display ).arg( se.vt ) : + se.display; + } +} + +QString +DM::sess2Str( const SessEnt &se ) +{ + QString user, loc; + + sess2Str2( se, user, loc ); + return i18n("session (location)", "%1 (%2)").arg( user ).arg( loc ); +} + +bool +DM::switchVT( int vt ) +{ + if (DMType == GDM) + return exec( QString("SET_VT %1\n").arg(vt).latin1() ); + + return exec( QString("activate\tvt%1\n").arg(vt).latin1() ); +} + +void +DM::lockSwitchVT( int vt ) +{ + if (switchVT( vt )) + kapp->dcopClient()->send( "kdesktop", "KScreensaverIface", "lock()", "" ); +} + +void +DM::GDMAuthenticate() +{ + FILE *fp; + const char *dpy, *dnum, *dne; + int dnl; + Xauth *xau; + + dpy = DisplayString( QPaintDevice::x11AppDisplay() ); + if (!dpy) { + dpy = ::getenv( "DISPLAY" ); + if (!dpy) + return; + } + dnum = strchr( dpy, ':' ) + 1; + dne = strchr( dpy, '.' ); + dnl = dne ? dne - dnum : strlen( dnum ); + + /* XXX should do locking */ + if (!(fp = fopen( XauFileName(), "r" ))) + return; + + while ((xau = XauReadAuth( fp ))) { + if (xau->family == FamilyLocal && + xau->number_length == dnl && !memcmp( xau->number, dnum, dnl ) && + xau->data_length == 16 && + xau->name_length == 18 && !memcmp( xau->name, "MIT-MAGIC-COOKIE-1", 18 )) + { + QString cmd( "AUTH_LOCAL " ); + for (int i = 0; i < 16; i++) + cmd += QString::number( (uchar)xau->data[i], 16 ).rightJustify( 2, '0'); + cmd += "\n"; + if (exec( cmd.latin1() )) { + XauDisposeAuth( xau ); + break; + } + } + XauDisposeAuth( xau ); + } + + fclose (fp); +} + +#endif // Q_WS_X11 diff --git a/src/dmctl.h b/src/dmctl.h new file mode 100644 index 0000000..aadc89b --- /dev/null +++ b/src/dmctl.h @@ -0,0 +1,93 @@ +/* + Copyright (C) 2004,2005 Oswald Buddenhagen + Copyright (C) 2005 Stephan Kulow + + This program is free software; you can redistribute it and/or + modify it under the terms of the Lesser GNU General Public + License as published by the Free Software Foundation; either + version 2 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 Lesser GNU General Public License + along with this program; see the file COPYING. If not, write to + the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. +*/ + +#ifndef DMCTL_H +#define DMCTL_H + +#include + +struct SessEnt { + QString display, from, user, session; + int vt; + bool self:1, tty:1; +}; + +typedef QValueList SessList; + +class DM { + +#ifdef Q_WS_X11 + +public: + DM(); + ~DM(); + + bool canShutdown(); + void shutdown( KApplication::ShutdownType shutdownType, + KApplication::ShutdownMode shutdownMode, + const QString &bootOption = QString::null ); + + void setLock( bool on ); + + bool isSwitchable(); + int numReserve(); + void startReserve(); + bool localSessions( SessList &list ); + bool switchVT( int vt ); + void lockSwitchVT( int vt ); + + bool bootOptions( QStringList &opts, int &dflt, int &curr ); + + static QString sess2Str( const SessEnt &se ); + static void sess2Str2( const SessEnt &se, QString &user, QString &loc ); + +private: + int fd; + + bool exec( const char *cmd, QCString &ret ); + bool exec( const char *cmd ); + + void GDMAuthenticate(); + +#else // Q_WS_X11 + +public: + DM() {} + + bool canShutdown() { return false; } + void shutdown( KApplication::ShutdownType shutdownType, + KApplication::ShutdownMode shutdownMode, + const QString &bootOption = QString::null ) {} + + void setLock( bool ) {} + + bool isSwitchable() { return false; } + int numReserve() { return -1; } + void startReserve() {} + bool localSessions( SessList &list ) { return false; } + void switchVT( int vt ) {} + + bool bootOptions( QStringList &opts, int &dflt, int &curr ); + +#endif // Q_WS_X11 + +}; // class DM + +#endif // DMCTL_H diff --git a/src/menu.ui b/src/menu.ui new file mode 100644 index 0000000..f666fd2 --- /dev/null +++ b/src/menu.ui @@ -0,0 +1,379 @@ + +Menu + + + Menu + + + + 0 + 0 + 538 + 428 + + + + Tasty Menu + + + + unnamed + + + 0 + + + 0 + + + + frame9 + + + PopupPanel + + + Raised + + + + unnamed + + + + leftFrame + + + + 200 + 32767 + + + + StyledPanel + + + Plain + + + 0 + + + 0 + + + 0 + + + + unnamed + + + 0 + + + + dynamicList + + + + + clearRecentButton + + + &Clear list + + + Alt+C + + + + + searchLabel + + + Se&arch: + + + AutoText + + + searchLine + + + + + + Favourite applications + + + + + Most used applications + + + + + Recent applications + + + + + Recent documents + + + + menuModes + + + + 7 + 0 + 0 + 0 + + + + Use this dropdown menu to change the behaviour of the list below + + + + + searchLine + + + true + + + + 7 + 5 + 0 + 0 + + + + + + clearButton + + + ... + + + + + showLabel + + + &Show: + + + menuModes + + + + + + + rootList + + + + 0 + 0 + + + + + + childList + + + + 0 + 0 + + + + + + allAppsFrame + + + + 7 + 5 + 0 + 0 + + + + StyledPanel + + + Sunken + + + + unnamed + + + 2 + + + + textLabel1 + + + + 1 + + + + All Applications + + + AlignCenter + + + + + detachButton + + + + 0 + 0 + 0 + 0 + + + + ... + + + true + + + Make this menu a normal window + + + + + + + layout6 + + + + unnamed + + + + runButton + + + Ru&n program... + + + Alt+N + + + If you know exatly how a program is named you can directly enter the application name + + + + + switchButton + + + + + + + + + Start a new session, switch the active user or edit your user profile + + + + + lockButton + + + L&ock Session + + + Alt+O + + + Lock the pc with a password if you are going away for a while + + + + + logoutButton + + + Lo&g Out... + + + Alt+G + + + Logout, reboot or shoutdown the computer + + + + + + + + + + + TastyListView +
tastylistview.h
+ + -1 + -1 + + 0 + + 7 + 7 + 0 + 0 + + image0 +
+
+ + + 789c534e494dcbcc4b554829cdcdad8c2fcf4c29c95030e0524611cd48cd4ccf28010a1797249664262b2467241641a592324b8aa363156c15aab914146aadb90067111b1f + + + + searchLine + menuModes + dynamicList + rootList + childList + runButton + switchButton + lockButton + logoutButton + + + + tastylistview.h + klistviewsearchline.h + tastylistview.h + tastylistview.h + kpushbutton.h + kpushbutton.h + kpushbutton.h + kpushbutton.h + +
diff --git a/src/menuhandler.cpp b/src/menuhandler.cpp new file mode 100644 index 0000000..06ca863 --- /dev/null +++ b/src/menuhandler.cpp @@ -0,0 +1,1712 @@ + +/*************************************************************************** + * Copyright (C) 2006-2007 by Marco Martin * + * notmart@gmail.com * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the Lesser GNU General Public * + * License as published by the Free Software Foundation; * + * either version 2 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, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +#include "menuhandler.h" +#include "buttons.h" + +MenuHandler::MenuHandler( QWidget *parent, Prefs *prefs, char *name, WFlags fl) + :QFrame(parent, name, fl ), searchMode(false) +{ + + prefSkel = prefs; + + //make a KServiceGroup to iterate the menu entries + KServiceGroup::Ptr service = KServiceGroup::root(); + + //Kicker config + QString kickerConfPath = locate("config", "kickerrc"); + kickerConf = new KConfig(kickerConfPath); + + kickerConfWatch = new KDirWatch( this ); + kickerConfWatch->addFile(kickerConfPath); + connect( kickerConfWatch, SIGNAL(dirty(const QString&)), this, + SLOT(slotModKickerConf()) ); + connect( kickerConfWatch, SIGNAL(dirty(const QString&)), this, + SIGNAL(kickerConfChanged()) ); + + if( _newAppsNotification = prefSkel->newAppsNotification() ) + { + //init the old and new installed list + oldInstalledList = prefSkel->oldInstalledApps(); + loadNewInstalledApps(); + initOldInstalledApps(service); + //save the creation time + prefSkel->setOldInstalledAppsAge(time(0)); + initNewInstalledApps(service); + if( newInstalledList.count() > 0 ) + emit(newApplications(newInstalledList.count())); + prefSkel->setOldInstalledApps(oldInstalledList); + prefSkel->setNewInstalledApps( newInstalledList ); + prefSkel->setNewInstalledAppsTimeStamps( newInstalledTimeStamps ); + } + + + //Main widget initialization + menu = new Menu(this, "tastyMenu"); + + MenuHandlerLayout = new QVBoxLayout( this, 0, 0, "MenuHandlerLayout"); + MenuHandlerLayout->addWidget(menu); + + readConfig(); + setupColumns(); + + //Searchline... + iconLoader = KGlobal::iconLoader(); + QPixmap icon; + if( QApplication::reverseLayout() ) + icon = iconLoader->loadIcon("locationbar_erase", KIcon::Small); + else + icon = iconLoader->loadIcon("clear_left", KIcon::Small); + menu->clearButton->setIconSet(icon); + + connect(menu->clearButton, SIGNAL(clicked()), menu->searchLine, SLOT (clear()) ); + + menu->detachButton->setIconSet(QPixmap(uic_findImage("detach.png"))); + connect(menu->detachButton, SIGNAL(clicked()), this, SLOT (switchWindowMode()) ); + + menu->searchLine->setContextMenuEnabled(false); + + //event filters for keyboard navigation + menu->clearButton->installEventFilter(this); + menu->searchLine->installEventFilter(this); + menu->menuModes->installEventFilter(this); + menu->runButton->installEventFilter(this); + menu->switchButton->installEventFilter(this); + menu->lockButton->installEventFilter(this); + menu->logoutButton->installEventFilter(this); + + //action buttons + icon = iconLoader->loadIcon("exit", KIcon::Toolbar); + menu->logoutButton->setIconSet(icon); + + icon = iconLoader->loadIcon("lock", KIcon::Toolbar); + menu->lockButton->setIconSet(icon); + + icon = iconLoader->loadIcon("run", KIcon::Toolbar); + menu->runButton->setIconSet(icon); + + icon = iconLoader->loadIcon("locationbar_erase", KIcon::Toolbar); + menu->clearRecentButton->setIconSet(icon); + + setCaption("Tasty Menu"); + setIcon(iconLoader->loadIcon("kmenu", KIcon::Panel)); + + //user icon and login + KUser *user = new KUser (); + QString loginName (user->loginName ()); + QImage + userImage (locate + ("data", "/home/" + loginName + "/.face.icon")); + if( !userImage.isNull() ) + { + userImage = userImage.smoothScale (KIcon::SizeSmallMedium, KIcon::SizeSmallMedium); + menu->switchButton->setIconSet(QPixmap(userImage)); + } + menu->switchButton->setText(loginName); + sessionsMenu = new QPopupMenu(); + menu->switchButton->setPopup(sessionsMenu); + + + initializeRecentlyUsed( ); + + populateList( service, menu->rootList, NULL, false ); + + //left/middle mouse button + connect (menu->dynamicList, + SIGNAL (activated(QListViewItem *, const QPoint & , int )), this, + SLOT (dynListClicked(QListViewItem *, const QPoint &, int))); + connect (menu->rootList, + SIGNAL (activated(QListViewItem *, const QPoint & , int )), this, + SLOT (rootListClicked(QListViewItem *, const QPoint &, int))); + connect (menu->childList, + SIGNAL (activated(QListViewItem *, const QPoint & , int )), this, + SLOT (childListClicked(QListViewItem *, const QPoint &, int))); + + //right mouse button + connect (menu->dynamicList, + SIGNAL (contextMenuRequested(QListViewItem *, const QPoint & , int )), this, + SLOT (slotContextMenu(QListViewItem *, const QPoint &, int))); + connect (menu->rootList, + SIGNAL (contextMenuRequested(QListViewItem *, const QPoint & , int )), this, + SLOT (slotContextMenu(QListViewItem *, const QPoint &, int))); + connect (menu->childList, + SIGNAL (contextMenuRequested(QListViewItem *, const QPoint & , int )), this, + SLOT (slotContextMenu(QListViewItem *, const QPoint &, int))); + + //don't open categories on mouseover on childlist + //menu->childList->setEasyOpen( true ); + + connect (menu->clearRecentButton, SIGNAL (clicked()), this, SLOT (clearDynList())); + connect (menu->logoutButton, SIGNAL (clicked()), this, SLOT (doLogout())); + connect (menu->lockButton, SIGNAL (clicked()), this, SLOT (doLock())); + connect (menu->runButton, SIGNAL (clicked()), this, SLOT (runDialog())); + + connect( sessionsMenu, SIGNAL(aboutToShow()), SLOT(slotPopulateSessions()) ); + connect( sessionsMenu, SIGNAL(activated(int)), SLOT(slotSessionActivated(int)) ); + + + connect( menu->menuModes, SIGNAL(activated(int)), SLOT(menuModeChanged(int)) ); + menuModeChanged(_menuMode); +} + + +MenuHandler::~MenuHandler() +{ +} + +void MenuHandler::loadNewInstalledApps() +{ + //Notification for newly installed apps + xdgMenuLister = new KDirLister( ); + KStandardDirs *standardDir=new KStandardDirs(); + QStringList appDirs = standardDir->findDirs("xdgdata-apps", "."); + firstListing = 0; + for(QStringList::Iterator it = appDirs.begin(); it != appDirs.end(); ++it) + { + xdgMenuLister->openURL(*it, true); + /*HACK: links to kde programs are often installed in a kde subdirectory + of one of these, so i duplicate all the entries with entry+"kde/"*/ + QString appDirWithKde = (*it)+"kde/"; + if( QFile::exists(appDirWithKde) ) + { + xdgMenuLister->openURL(appDirWithKde, true); + firstListing++; + } + } + + firstListing += appDirs.count(); + connect( xdgMenuLister, SIGNAL(newItems(const KFileItemList &)), this, + SLOT(slotApplicationsAdded(const KFileItemList &)) ); + connect( xdgMenuLister, SIGNAL(deleteItem( KFileItem *)), this, + SLOT(slotApplicationRemoved()) ); + + xdgMenuWatch = new KDirWatch(this); + xdgMenuWatch->addFile(locateLocal("xdgconf-menu", "applications-kmenuedit.menu")); + //connect with slotApplicationRemoved() because we need to wait a while... + connect( xdgMenuWatch, SIGNAL(dirty(const QString&)), this, + SLOT(slotApplicationRemoved()) ); + + newInstalledList = prefSkel->newInstalledApps(); + newInstalledTimeStamps = prefSkel->newInstalledAppsTimeStamps(); + + //expire old apps + for(uint i=0; i 127800 ) + { + newInstalledTimeStamps.remove(newInstalledTimeStamps.at(i)); + newInstalledList.remove(newInstalledList.at(i)); + } + } +} + +void MenuHandler::setupColumns() +{ + menu->dynamicList->header()->hide(); + menu->dynamicList->setResizeMode(QListView::AllColumns); + menu->dynamicList->addColumn("name"); + menu->dynamicList->setShowToolTips(true); + menu->dynamicList->setSortColumn(-1); + menu->dynamicList->header()->setResizeEnabled(false); + menu->dynamicList->setHScrollBarMode(QScrollView::AlwaysOff); + menu->dynamicList->setActionIconSize( _actionIconSize ); + menu->dynamicList->setRootIsDecorated( _showExpander ); + //manage drag'n drop + menu->dynamicList->setAcceptDrops(true); + menu->dynamicList->setDragEnabled(true); + connect( menu->dynamicList, SIGNAL(moved()), + this, SLOT(dynListElemMoved()) ); + + menu->rootList->header()->hide(); + menu->rootList->setResizeMode(QListView::AllColumns); + menu->rootList->addColumn("name"); + menu->rootList->setSortColumn(-1); + menu->rootList->header()->setResizeEnabled(false); + menu->rootList->setHScrollBarMode(QScrollView::AlwaysOff); + menu->rootList->setHighLightGroups( false ); + menu->rootList->setActionIconSize( _actionIconSize ); + menu->rootList->setDragEnabled(true); + + menu->childList->header()->hide(); + menu->childList->setResizeMode(QListView::AllColumns); + menu->childList->addColumn("name"); + menu->childList->setSortColumn(_alphabetical?0:-1); + menu->childList->header()->setResizeEnabled(false); + menu->childList->setHScrollBarMode(QScrollView::AlwaysOff); + menu->childList->setActionIconSize( _actionIconSize ); + menu->childList->setRootIsDecorated( _showExpander ); + menu->childList->setDragEnabled(true); +} + + +void MenuHandler::dynListElemMoved( ) +{ + //very stupid: iterate the entire list and rewrite the favouriteList + favouriteList.clear(); + QListViewItemIterator it( menu->dynamicList ); + + while ( it.current() ) + { + TastyListViewItem *li = dynamic_cast(it.current()); + + if( !li ) + return; + + favouriteList.append( li->getDeskopEntryPath() ); + it++; + } + + prefSkel->setFavouriteApps(favouriteList); + prefSkel->writeConfig(); +} + + +bool MenuHandler::eventFilter( QObject *o, QEvent * e ) +{ + if ( e->type() == QEvent::KeyPress ) + { + QKeyEvent *keyEvent = (QKeyEvent *)e; + QFocusData *fData = focusData(); + fData->home(); + + switch( keyEvent->key() ) + { + + case Qt::Key_Up: + if( dynamic_cast(o) ) + return false; + fData->prev()->setFocus(); + break; + + case Qt::Key_Down: + { + if( dynamic_cast(o) ) + return false; + + //this is a workaround in order to set the focus on the + //right widget when the combobox is disabled + QWidget *nextWidget = fData->next(); + if( nextWidget->isEnabled() ) + nextWidget->setFocus(); + else + fData->next()->setFocus(); + } + break; + + case Qt::Key_Right: + if( dynamic_cast(o) ) + return false; + fData->next()->setFocus(); + break; + + case Qt::Key_Left: + if( dynamic_cast(o) ) + return false; + fData->prev()->setFocus(); + break; + + case Qt::Key_Enter: + case Qt::Key_Return: + { + //only filter enter on search line + if( o != menu->searchLine ) + return false; + + QListViewItem *listItem = NULL; + //execute the only list item when there is exactly one + QListViewItemIterator it( menu->dynamicList, + QListViewItemIterator::Visible); + //listItem = it.current(); + int count = 0; + //ensure the first level have only one result + while ( it.current() ) + { + if( it.current()->childCount() == 0 ) + { + count++; + listItem = it.current(); + } + kdDebug() << "current: " << count << " " << it.current()->text(0); + if( count > 1 ) + return false; + it++; + } + + if( listItem ) + { + dynListClicked(listItem, QPoint(0,0), 0); + menu->searchLine->clear(); + } + + break; + } + + default: + return false; + break; + } + return true; + } + //for some reasons clicking with the right mouse button on the searchline everything crashes... +/* else if( e->type() == QEvent::MouseButtonPress && o == menu->searchLine ) + {return true; + QMouseEvent *mouseEvent = (QMouseEvent *)e; + + if( mouseEvent->button() != QMouseEvent::RightButton ) + return true; + + if( menu->searchLine->text().length() < 4 ) + return true; + else + return false; + }*/ + else + return false; +} + + +void MenuHandler::readConfig() +{ + _menuMode = prefSkel->menuMode(); + if( _menuMode < 0 ) + _menuMode = 0; + menu->menuModes->setCurrentItem(_menuMode); + + _currentCategory = prefSkel->currentCategory(); + + kickerConf->setGroup("menus"); + _numRecentEntries = kickerConf->readNumEntry("NumVisibleEntries", 5); + + _hideOneChild = prefSkel->hideOneChild(); + _alphabetical = prefSkel->alphabetical(); + + favouriteList = prefSkel->favouriteApps(); + if( favouriteList.isEmpty() ) + { + favouriteList.append(locate("xdgdata-apps","kde/konqbrowser.desktop")); + favouriteList.append(locate("xdgdata-apps","kde/KMail.desktop")); + favouriteList.append(locate("xdgdata-apps","kde/Help.desktop")); + } + + _showExpander = prefSkel->showExpander(); + _alwaysCollapsed = prefSkel->alwaysCollapsed(); + + _displaySubText = prefSkel->displaySubText(); + + _iconSize1 = prefSkel->iconSize1(); + if( _iconSize1 < 16 || _iconSize1 > 64 ) + _iconSize1 = 22; + _iconSize2 = prefSkel->iconSize2(); + if( _iconSize2 < 16 || _iconSize2 > 64 ) + _iconSize2 = 22; + _iconSize3 = prefSkel->iconSize3(); + if( _iconSize3 < 16 || _iconSize3 > 64 ) + _iconSize3 = 22; + + _actionIconSize = prefSkel->actionIconSize(); + if( _actionIconSize > _iconSize1 ) + _actionIconSize = _iconSize1; + + //menu size + _menuWidth = 100.0/prefSkel->menuWidth(); + _menuHeight = 100.0/prefSkel->menuHeight(); + QRect r = QDesktopWidget().screenGeometry(this); + int w = (int)(r.width()/_menuWidth); + int h = (int)(r.height()/_menuHeight); + resize(w,h); + + _kerryIntegration = prefSkel->kerryIntegration(); + _strigiIntegration = prefSkel->strigiIntegration(); + + _isNormalWindow = prefSkel->isNormalWindow(); + if( _isNormalWindow ) + { + menu->detachButton->setIconSet(QPixmap(uic_findImage("attach.png"))); + QToolTip::add( menu->detachButton, tr2i18n( "Make this window a popup menu" ) ); + } + else + { + menu->detachButton->setIconSet(QPixmap(uic_findImage("detach.png"))); + QToolTip::add( menu->detachButton, tr2i18n( "Make this menu a normal window" ) ); + } + + // disconnect(menu->searchLine, 0, 0, 0); + if( !_kerryIntegration && !_strigiIntegration ) + { + //menu->searchLine->setListView((KListView *)(menu->dynamicList)); + disconnect(menu->searchLine, SIGNAL(returnPressed( const QString &)), + this, SLOT (kerrySearch( const QString &)) ); + disconnect(menu->searchLine, SIGNAL(returnPressed( const QString &)), + this, SLOT (strigiSearch( const QString &)) ); + connect(menu->searchLine, SIGNAL(textChanged( const QString &)), + this, SLOT (initializeSearch( const QString &)) ); + } + else if( _kerryIntegration ) + { + menu->searchLine->setListView(NULL); + menu->searchLine->setEnabled(true); + disconnect(menu->searchLine, SIGNAL(textChanged( const QString &)), + this, SLOT (initializeSearch( const QString &)) ); + disconnect(menu->searchLine, SIGNAL(returnPressed( const QString &)), + this, SLOT (strigiSearch( const QString &)) ); + connect(menu->searchLine, SIGNAL(returnPressed( const QString &)), + this, SLOT (kerrySearch( const QString &)) ); + menu->searchLine->setContextMenuEnabled(false); + } + else //strigi + { + menu->searchLine->setListView(NULL); + menu->searchLine->setEnabled(true); + disconnect(menu->searchLine, SIGNAL(textChanged( const QString &)), + this, SLOT (initializeSearch( const QString &)) ); + disconnect(menu->searchLine, SIGNAL(returnPressed( const QString &)), + this, SLOT (kerrySearch( const QString &)) ); + connect(menu->searchLine, SIGNAL(returnPressed( const QString &)), + this, SLOT (strigiSearch( const QString &)) ); + menu->searchLine->setContextMenuEnabled(false); + } +} + +void MenuHandler::updateConfig() +{ + readConfig(); + + menu->dynamicList->setActionIconSize( _actionIconSize ); + menu->rootList->setActionIconSize( _actionIconSize ); + menu->childList->setActionIconSize( _actionIconSize ); + + menu->dynamicList->setRootIsDecorated( _showExpander ); + menu->childList->setRootIsDecorated( _showExpander ); + + menuModeChanged( _menuMode ); + KServiceGroup::Ptr service = KServiceGroup::root(); + menu->rootList->clear(); + populateList( service, menu->rootList, NULL, false ); +} + + +void MenuHandler::mousePressEvent( QMouseEvent *e) +{ + if(static_cast(parent())->hasMouse()) + { + close(); + } + else if(!_isNormalWindow && !(rect().contains(e->pos())) ) + { + hide(); + QTimer::singleShot(200, this,SLOT(close())); + } +} + +void MenuHandler::closeEvent ( QCloseEvent *e) +{ + e=e; + + if( _isNormalWindow ) + { + prefSkel->setNormalWindowWidth(width()); + prefSkel->setNormalWindowHeight(height()); + prefSkel->setNormalWindowX(x()); + prefSkel->setNormalWindowY(y()); + prefSkel->writeConfig(); + } + + //HACK: I wait a little bit to permit closing the menu + // when user clicks on the menu button again + QTimer::singleShot(50, this, SLOT(hide())); + emit(hidden()); +} + +void MenuHandler::popup(QPoint pos) +{ + if(isVisible()) + { + close(); + return; + } + + menu->searchLine->setFocus(); + + int w; + int h; + if( !_isNormalWindow ) + { + QRect r = QDesktopWidget().screenGeometry(this); + w = (int)(r.width()/_menuWidth); + h = (int)(r.height()/_menuHeight); + } + else + { + w = prefSkel->normalWindowWidth(); + h = prefSkel->normalWindowHeight(); + } + + //the only way to make things proportioned + menu->leftFrame->setMaximumWidth( (int)((w-24)/3) ); + menu->allAppsFrame->setMaximumHeight(menu->clearButton->height()); + + if( !_isNormalWindow ) + move(pos); + else + move(prefSkel->normalWindowX(), prefSkel->normalWindowY()); + + resize(w,h); + + show(); +} + +void MenuHandler::initOldInstalledApps(KServiceGroup::Ptr group) +{ + if( !group || !group->isValid() ) + return; + + //expires at 639000 seconds = 10 days + if( !prefSkel->oldInstalledApps().empty() || + (time(0) - (uint)prefSkel->oldInstalledAppsAge() < 639000 ) + ) + return; + + KServiceGroup::List list = group->entries(true, true, true, false); + for (KServiceGroup::List::ConstIterator it = list.begin (); + it != list.end (); it++) + { + KSycocaEntry *p = (*it); + if( p->isType( KST_KServiceGroup ) ) + { + KServiceGroup *g = static_cast < KServiceGroup * > ( p ); + if( g ->childCount() > 0 ) + initOldInstalledApps(g); + } + else + { + KService *s = static_cast < KService * >(p); + + oldInstalledList.append(s->desktopEntryPath()); + } + } +} + +void MenuHandler::initNewInstalledApps(KServiceGroup::Ptr group) +{ + if( !group || !group->isValid() ) + return; + if( oldInstalledList.empty() ) + return; + + KServiceGroup::List list = group->entries(true, true, true, false); + for (KServiceGroup::List::ConstIterator it = list.begin (); + it != list.end (); it++) + { + KSycocaEntry *p = (*it); + if( p->isType( KST_KServiceGroup ) ) + { + KServiceGroup *g = static_cast < KServiceGroup * > ( p ); + if( g ->childCount()>0 ) + initNewInstalledApps(g); + } + else + { + KService *s = static_cast < KService * > ( p ); + + + QString path(s->desktopEntryPath()); + if( oldInstalledList.findIndex(path) == -1 && + newInstalledList.findIndex(path) == -1 ) + { + newInstalledList.append(path); + newInstalledTimeStamps.append(time(0)); + oldInstalledList.append(path); + } + } + } +} + + +bool MenuHandler::searchNewItems(KServiceGroup::Ptr group) +{ + if( !group || !group->isValid() ) + return false; + + if( newInstalledList.count() <= 0 ) + return false; + + KServiceGroup::List list = group->entries(true, true, true, false); + for (KServiceGroup::List::ConstIterator it = list.begin (); + it != list.end (); it++) + { + KSycocaEntry *p = (*it); + if( p->isType( KST_KServiceGroup ) ) + { + KServiceGroup *g = static_cast < KServiceGroup * > ( p ); + if( g ->childCount()<=0 ) + continue; + + if(searchNewItems(g)) + return true; + } + else + { + KService *s = static_cast < KService * >(p); + + + /*kdDebug() << group->relPath() << ": "<< s->desktopEntryPath() + <<(( newInstalledList.findIndex(s->desktopEntryPath()) != -1 ) + ?" present":" not present")<< endl;*/ + if( newInstalledList.findIndex(s->desktopEntryPath()) != -1 ) + return true; + } + } + + return false; +} + +/*KServiceGroup::List MenuHandler::getServiceGroupList( KServiceGroup *serviceGroup ) +{ + QString key(serviceGroup->directoryEntryPath()); + + if( sListMap.contains(key) ) + return sListMap[key]; + else + { + KServiceGroup::List list = serviceGroup->entries(true, true, true, false); + sListMap[key] = list; + return list; + } +}*/ + +void MenuHandler::populateList( KServiceGroup *serviceGroup, TastyListView *listView, + TastyListViewItem *listItemFather, + bool recursive, const QString & query ) +{ + if( !serviceGroup || !serviceGroup->isValid() ) + return; + serviceGroup->setShowEmptyMenu(false); + //KServiceGroup::List list = serviceGroup->entries(true, true, true, false); + + KServiceGroup::List list = serviceGroup->entries(true, true, true, false); + + TastyListViewItem *prevListItem = NULL; + + for (KServiceGroup::List::ConstIterator it = list.begin (); + it != list.end (); it++) + { + KSycocaEntry *p = (*it); + + int iconSize; + if( listView && listView == menu->rootList + || listItemFather && listItemFather->listView() == menu->rootList ) + iconSize = _iconSize2; + else if( listView && listView == menu->childList + || listItemFather && listItemFather->listView() == menu->childList) + iconSize = _iconSize3; + else + iconSize = _iconSize1; + + if( p->isType( KST_KServiceGroup ) ) + { + //KServiceGroup::Ptr g (static_cast < KServiceGroup * >(p)); + KServiceGroup *g = static_cast < KServiceGroup * > ( p ); + if( g ->childCount()<=0 || (g->name().at(0) == '.') ) + continue; + + g->setShowEmptyMenu(false); + + int numChilds = g->childCount(); + //FIXME: useless? + if(numChilds == 0) + continue; + + QPixmap iconPix = iconLoader->loadIcon(g->icon(), KIcon::Toolbar,iconSize); + + if ( iconPix.height () != iconSize) + { + QImage img = iconPix.convertToImage(); + if( !img.isNull() ) + { + img = img.smoothScale ( iconSize, iconSize); + iconPix = QPixmap (img); + } + } + + TastyListViewItem *listItem; + if( listView ) + listItem = new TastyListViewItem( listView, prevListItem, + !g->caption().isEmpty()?g->caption() + :g->name().section('/', -2)); + else + listItem = new TastyListViewItem( listItemFather, prevListItem, + !g->caption().isEmpty()?g->caption() + :g->name().section('/', -2)); + + listItem->setPath( g->relPath() ); + listItem->setType( TastyListViewItem::ServiceGroup ); + //OpenGrup only on menu->rootList + if( listView == menu->rootList ) + listItem->setActionType( TastyListViewItem::OpenGroup ); + else + listItem->setActionType( TastyListViewItem::Collapse ); + + prevListItem = listItem; + + listItem->setPixmap(0, iconPix); + + //avoiding to display empty categories or with only one child (very common in SUSE) + if( (!_hideOneChild && numChilds > 0) || numChilds > 1 ) + { + if( listView ) + { + listView->insertItem( listItem ); + if( _currentCategory == listItem->text(0) && listView == menu->rootList ) + { + listView->setCurrentItem(listItem); + listView->setOpenItem(static_cast(listItem)); + rootListClicked(listItem, QPoint(0,0), 0); + } + if(searchNewItems(g)) + listItem->setHighLight(true); + } + else if(listItemFather) + listItemFather->insertItem( listItem ); + + if( recursive ) + populateList( g, NULL, listItem, true, query); + + //the left column is always open + if( listView == menu->dynamicList || + (listItemFather && listItemFather->listView()==menu->dynamicList)) + listItem->setOpen( true ); + else + listItem->setOpen( !_alwaysCollapsed ); + + if( listItem->getActionType() == TastyListViewItem::Expand && + listItem->isOpen() ) + listItem->setActionType( TastyListViewItem::Collapse ); + else if( listItem->getActionType() == TastyListViewItem::Collapse && + !listItem->isOpen() ) + listItem->setActionType( TastyListViewItem::Expand ); + } + else if( recursive ) + { + if( listView ) + populateList( g, listView, NULL, true, query); + + else if(listItemFather) + populateList( g, NULL, listItemFather, true, query); + + delete listItem; + } + + } + else //The entry is a Service + { + KService *s = static_cast < KService * >(p); + + if( s->name().at(0) == '.' ) + continue; + + const bool isSeparator = s->name() == "separator"; + + + //Name and comment + QString itemName = s->name(); + QString subText= QString(); + if( !isSeparator ) + { + if( s->comment() != NULL && !s->comment().isEmpty() ) + subText = s->comment(); + else if( s->genericName() && !s->genericName().isEmpty() ) + subText = s->genericName(); + } + + //Have we done a query? (this improves query speed) + if( query != NULL + && !itemName.contains(query, false) + && !subText.contains(query, false) ) + continue; + + TastyListViewItem *listItem; + + if( isSeparator ) + { + if( _alphabetical ) + continue; + + if(listView) + { + listItem = new TastyListViewItem( listView, prevListItem, "separator" ); + listView->insertItem( listItem ); + } + else if(listItemFather) + { + listItem = new TastyListViewItem( listItemFather, prevListItem, "separator" ); + listItemFather->insertItem( listItem ); + } + else + return; + + prevListItem = listItem; + listItem->setSelectable(false); + continue; + } + + if( listView ) + listItem = new TastyListViewItem( listView, prevListItem, itemName ); + else + listItem = new TastyListViewItem( listItemFather, prevListItem, itemName ); + + listItem->setDisplaySubText(_displaySubText); + listItem->setPath( serviceGroup->relPath() ); + listItem->setDeskopEntryPath( s->desktopEntryPath() ); + listItem->setMenuId( s->menuId() ); + listItem->setType( TastyListViewItem::Service ); + listItem->setActionType( TastyListViewItem::AddBookMark ); + + listItem->setText(0,itemName); + listItem->setSubText(subText); + + prevListItem = listItem; + + QPixmap iconPix = s->pixmap( KIcon::Toolbar, iconSize ); + if ( iconPix.height () != iconSize) + { + QImage img = iconPix.convertToImage(); + if( !img.isNull() ) + { + img = img.smoothScale ( iconSize, iconSize); + iconPix = QPixmap (img); + } + } + listItem->setPixmap(0, iconPix); + + if( listView ) + { + listView->insertItem( listItem ); + } + else if(listItemFather) + { + listItemFather->insertItem( listItem ); + } + if( newInstalledList.findIndex(s->desktopEntryPath()) != -1 ) + listItem->setHighLight(true); + } + + } + +} + + +void MenuHandler::initializeRecentlyUsed( ) +{ + + recentlyUsedMap.clear(); + moreUsedList.clear(); + + kickerConf->reparseConfiguration(); + kickerConf->setGroup("menus"); + QStringList recentUsedList = QStringList::split(',',kickerConf->readEntry("RecentAppsStat")); + + for (QStringList::ConstIterator it = recentUsedList.begin(); + it != recentUsedList.end(); ++it ) + { + QString item = (*it); + + QString desktopPath = item.section(' ',2,2); + if(desktopPath.isEmpty() || !QFile::exists(desktopPath)) + continue; + + recentlyUsedMap[-item.section(' ',1,1).toULong()] = desktopPath; + moreUsedList.append(desktopPath); + + } + +} + +void MenuHandler::setupDynList( MenuMode mode ) +{ + /*( mode == RecentDocuments + || mode == MoreUsed + || mode == RecentlyUsed )*/ + if( mode != Favourites ) + menu->clearRecentButton->show(); + else + menu->clearRecentButton->hide(); + + currentMenuMode = mode; + menu->dynamicList->setAcceptDrops( mode == Favourites ); +} + +void MenuHandler::fillRecentDocuments( ) +{ + menu->dynamicList->clear(); + setupDynList( RecentDocuments ); + + QStringList recentDocsList = KRecentDocument::recentDocuments(); + + TastyListViewItem *listItem = NULL; + + if( recentDocsList.isEmpty() ) + return; + + for (QStringList::Iterator it = recentDocsList.begin(); + it != recentDocsList.end(); ++it ) + { + KDesktopFile *f= new KDesktopFile(*it, true /* read only */); + + if( !f ) + continue; + + listItem = new TastyListViewItem( menu->dynamicList, listItem, f->readName() ); + listItem->setMultiLinesEnabled(false); + + listItem->setDeskopEntryPath(*it); + listItem->setType( TastyListViewItem::DesktopFile ); + + QPixmap iconPix = iconLoader->loadIcon(f->readIcon(), KIcon::Panel, _iconSize1); + if ( iconPix.height () > _iconSize1) + { + QImage img = iconPix.convertToImage(); + if( !img.isNull() ) + { + img = img.smoothScale ( _iconSize1, _iconSize1); + iconPix = QPixmap (img); + } + } + listItem->setPixmap(0, iconPix); + + menu->dynamicList->insertItem( listItem ); + } + +} + + +void MenuHandler::fillMoreUsed( ) +{ + menu->dynamicList->clear(); + setupDynList( MoreUsed ); + + int iteration = 0; + + TastyListViewItem *listItem = NULL; + + for (QStringList::Iterator it = moreUsedList.begin(); + it != moreUsedList.end(); ++it ) + { + //FIXME: yeah, I know, this is U G L Y :-) + if( iteration++ >= _numRecentEntries ) + break; + + KService::Ptr s = KService::serviceByDesktopPath(*it); + if( !s ) + continue; + + listItem = new TastyListViewItem( menu->dynamicList, listItem, s->name()); + listItem->setSubText(!(s->comment().isEmpty())?s->comment():s->genericName() ); + + listItem->setDeskopEntryPath( s->desktopEntryPath() ); + listItem->setType( TastyListViewItem::Service ); + listItem->setActionType( TastyListViewItem::AddBookMark ); + listItem->setDisplaySubText(_displaySubText); + + + QPixmap iconPix = s->pixmap( KIcon::Toolbar, _iconSize1 ); + if( !iconPix.isNull() ) + { + if ( iconPix.height () != _iconSize1) + { + QImage img = iconPix.convertToImage(); + if( !img.isNull() ) + { + img = img.smoothScale ( _iconSize1, _iconSize1); + iconPix = QPixmap (img); + } + } + listItem->setPixmap(0, iconPix); + } + + menu->dynamicList->insertItem( listItem ); + } + +} + +//FIXME: avoid the ugly code duplication +void MenuHandler::fillRecentlyUsed( ) +{ + menu->dynamicList->clear(); + setupDynList( RecentlyUsed ); + + int iteration = 0; + TastyListViewItem *listItem = NULL; + + for (RecentlyUsedMap::Iterator it = recentlyUsedMap.begin(); + it != recentlyUsedMap.end(); ++it ) + { + //FIXME: yeah, I know, this is U G L Y :-) + if( iteration++ >= _numRecentEntries ) + break; + + KService::Ptr s = KService::serviceByDesktopPath(it.data()); + if( !s ) + continue; + + listItem = new TastyListViewItem( menu->dynamicList, listItem, s->name()); + listItem->setSubText(!(s->comment().isEmpty())?s->comment():s->genericName() ); + + listItem->setDeskopEntryPath( s->desktopEntryPath() ); + listItem->setType( TastyListViewItem::Service ); + listItem->setActionType( TastyListViewItem::AddBookMark ); + listItem->setDisplaySubText(_displaySubText); + + + QPixmap iconPix = s->pixmap( KIcon::Toolbar, _iconSize1 ); + if( !iconPix.isNull() ) + { + if ( iconPix.height () != _iconSize1) + { + QImage img = iconPix.convertToImage(); + if( !img.isNull() ) + { + img = img.smoothScale ( _iconSize1, _iconSize1); + iconPix = QPixmap (img); + } + } + listItem->setPixmap(0, iconPix); + } + + menu->dynamicList->insertItem( listItem ); + } + +} + + +//FIXME: avoid the ugly code duplication +void MenuHandler::fillFavourites( ) +{ + menu->dynamicList->clear(); + setupDynList( Favourites ); + + TastyListViewItem *listItem = NULL; + + for (QStringList::Iterator it = favouriteList.begin(); + it != favouriteList.end(); ++it ) + { + + KService::Ptr s = KService::serviceByDesktopPath(*it); + if( !s ) + continue; + listItem = new TastyListViewItem( menu->dynamicList, listItem, s->name()); + listItem->setSubText(!(s->comment().isEmpty())?s->comment():s->genericName() ); + + listItem->setDeskopEntryPath( s->desktopEntryPath() ); + listItem->setType( TastyListViewItem::Service ); + listItem->setActionType( TastyListViewItem::RemoveBookMark ); + listItem->setDisplaySubText(_displaySubText); + + + QPixmap iconPix = s->pixmap( KIcon::Toolbar, _iconSize1 ); + if ( iconPix.height () > _iconSize1) + { + QImage img = iconPix.convertToImage(); + if( !img.isNull() ) + { + img = img.smoothScale ( _iconSize1, _iconSize1); + iconPix = QPixmap (img); + } + } + listItem->setPixmap(0, iconPix); + + menu->dynamicList->insertItem( listItem ); + } + +} + + + +void MenuHandler::slotModKickerConf() +{ + kickerConf->reparseConfiguration(); + initializeRecentlyUsed( ); + if( currentMenuMode == MoreUsed ) + fillMoreUsed(); + else if( currentMenuMode == RecentlyUsed ) + fillRecentlyUsed(); +} + + +void MenuHandler::slotApplicationsAdded(const KFileItemList & newItems) +{ + + if( firstListing > 0 ) + { + firstListing--; + return; + } + + //avoiding to build a mammoth list... + if( newItems.count() > 15 ) + return; + + for(KFileItemListIterator it(newItems); it.current(); ++it) + { + KFileItem *item = (*it); + QString path(item->url().path()); + + kdDebug() << "new item: " << item->name() << endl; + //ignore items already here + if( oldInstalledList.findIndex(path) == -1 ) + { + newInstalledList.append(path); + newInstalledTimeStamps.append( time(0) ); + oldInstalledList.append(path); + } + } + + prefSkel->setNewInstalledApps( newInstalledList ); + prefSkel->setNewInstalledAppsTimeStamps( newInstalledTimeStamps ); + prefSkel->setOldInstalledApps( oldInstalledList ); + + emit(newApplications(newInstalledList.count())); + + //It's necessary to wait some seconds, otherwise apps won't be listed + //I do it two times for being sure, because I still haven't the clear idea + //where the right files to watch are... + QTimer::singleShot(15000, this, SLOT(slotUpdateApplications())); +} + + +void MenuHandler::slotApplicationRemoved() +{ + QTimer::singleShot(15000, this, SLOT(slotUpdateApplications())); + slotUpdateApplications(); +} + +void MenuHandler::slotUpdateApplications() +{ + KRun::runCommand ("kbuildsycoca"); + prefSkel->writeConfig(); + menu->rootList->clear(); + KServiceGroup::Ptr service = KServiceGroup::root(); + + populateList( service, menu->rootList, NULL, false ); +} + +void MenuHandler::listClicked( TastyListViewItem * listItem, const QPoint & coord ) +{ + if( !listItem ) + return; + + //exit if the user clicked on an empty area + if( coord.y() != 0 && + (listItem->itemPos( )+ listItem->height()) < coord.y() ) + return; + + int x = coord.x(); + + QString servicePath = listItem->getDeskopEntryPath(); + + switch( listItem->getType() ) + { + case TastyListViewItem::Service: + { + //These paranoid checks seems to be needed + if( !listItem->listView() ) + return; + TastyListView *lv = dynamic_cast(listItem->listView()); + if( !lv ) + return; + if( x >= (lv->visibleWidth() - lv->getActionIconSpace()) ) + { + switch( listItem->getActionType() ) + { + case TastyListViewItem::AddBookMark: + favouriteList.remove(servicePath); + favouriteList.append(servicePath); + prefSkel->setFavouriteApps(favouriteList); + prefSkel->writeConfig(); + if( menu->menuModes->currentItem() == 0 ) + fillFavourites( ); + return; + + case TastyListViewItem::RemoveBookMark: + favouriteList.remove(servicePath); + prefSkel->setFavouriteApps(favouriteList); + prefSkel->writeConfig(); + if( menu->menuModes->currentItem() == 0 ) + fillFavourites( ); + return; + + default: + break; + } + } + + //if the item was highlighted get it back to normal and remove it from recently installed + listItem->setHighLight(false); + int index=newInstalledList.findIndex(servicePath); + if( index != -1 ) + { + newInstalledList.remove(newInstalledList.at(index)); + newInstalledTimeStamps.remove(newInstalledTimeStamps.at(index)); + prefSkel->setNewInstalledApps( newInstalledList ); + prefSkel->setNewInstalledAppsTimeStamps( newInstalledTimeStamps ); + emit(newApplications(newInstalledList.count())); + //remove the highlight from the rootList, at the moment very costly + slotUpdateApplications(); + } + + int started = KApplication::startServiceByDesktopPath( servicePath ); + if( !started ) + { + DCOPRef kickerKMenuIface ("kicker", "KMenu"); + + kickerKMenuIface.call("slotServiceStartedByStorageId(QString,QString)", "tastymenu", servicePath); + if( (currentMenuMode == MoreUsed + || currentMenuMode == RecentlyUsed) + && !searchMode) + slotModKickerConf(); + if( !_isNormalWindow ) + close(); + } + break; + } + + case TastyListViewItem::ServiceGroup: + { + //open, collapse or expand? + switch( listItem->getActionType() ) + { + case TastyListViewItem::Expand: + //avoiding setOpen when the user clicks on the three handle + if( !listItem->xOnDecoration(x) ) + listItem->setOpen(true); + if(listItem->isOpen()) + listItem->setActionType( TastyListViewItem::Collapse ); + break; + case TastyListViewItem::Collapse: + if( !listItem->xOnDecoration(x) ) + listItem->setOpen(false); + if(!listItem->isOpen()) + listItem->setActionType( TastyListViewItem::Expand ); + break; + case TastyListViewItem::OpenGroup: + default: + { + KServiceGroup::Ptr serviceGroup = KServiceGroup::group( listItem->getPath() ); + if( serviceGroup ) + { + menu->childList->clear(); + populateList( serviceGroup, menu->childList, NULL, true ); + } + break; + } + } + break; + } + + case TastyListViewItem::DesktopFile: + { + KDEDesktopMimeType::run(servicePath, true); + if( !_isNormalWindow ) + close(); + break; + } + + default: + return; + } + +} + +void MenuHandler::dynListClicked( QListViewItem * listItem, const QPoint & coord, int c ) +{ + c=c; + if( !listItem ) + return; + + TastyListViewItem *tastyListItem = dynamic_cast(listItem); + if( !tastyListItem ) + return; + + listClicked( static_cast(listItem), coord ); +} + +void MenuHandler::childListClicked( QListViewItem * listItem, const QPoint & coord, int c ) +{ + c=c; + if( !listItem ) + return; + + TastyListViewItem *tastyListItem = dynamic_cast(listItem); + if( !tastyListItem ) + return; + + /*if( _showExpander && (tastyListItem->getType() == TastyListViewItem::ServiceGroup) ) + { + //FIXME: get the REAL size of the expander + if( coord.x() > 16 ) + listItem->setOpen( !listItem->isOpen() ); + } + else*/ + listClicked( static_cast(listItem), coord ); +} + +void MenuHandler::rootListClicked( QListViewItem * listItem, const QPoint & coord, int c ) +{ + c=c; + if( !listItem ) + return; + + TastyListViewItem *tastyListItem = dynamic_cast(listItem); + if( !tastyListItem ) + return; + + //don't reload when the current category is clicked (except for the first run) + if( menu->childList->childCount() > 0 && + prefSkel->currentCategory( ) == tastyListItem->text(0) ) + return; + + if( tastyListItem->getType() == TastyListViewItem::ServiceGroup ) + { + prefSkel->setCurrentCategory( tastyListItem->text(0) ); + prefSkel->writeConfig(); + } + + listClicked( tastyListItem, coord ); + if( _alphabetical ) + menu->childList->setSorting(0); +} + +void MenuHandler::slotContextMenu(QListViewItem *listItem, const QPoint &coord, int c) +{ + + if( !listItem ) + return; + TastyListViewItem *tastyListItem = dynamic_cast(listItem); + if( !tastyListItem ) + return; + + KPopupMenu menu(this); + + menu.insertTitle(tastyListItem->text(c)); + if( tastyListItem->getPath() != "" ) + { + if( tastyListItem->getType() == TastyListViewItem::ServiceGroup ) + menu.insertItem(SmallIcon("kmenuedit"), i18n("&Edit submenu..."), 1); + else if( tastyListItem->getType() == TastyListViewItem::Service ) + { + menu.insertItem(SmallIcon("kmenuedit"), i18n("&Edit item..."), 1); + menu.insertItem(SmallIcon("desktop"), i18n("&Add to desktop"), 3); + } + } + + if( tastyListItem->getActionType() == TastyListViewItem::AddBookMark ) + menu.insertItem(SmallIcon("bookmark_add"), i18n("&Add to favourite applications"), 2); + else if( tastyListItem->getActionType() == TastyListViewItem::RemoveBookMark ) + menu.insertItem(SmallIcon("remove"), i18n("&Remove from favourite applications"), 2); + + int choice; + if( menu.count() > 1 ) + choice = menu.exec(coord); + else + return; + + switch( choice ) + { + case 1: + KRun::runCommand ("kmenuedit /" + + tastyListItem->getPath() + + " " + + tastyListItem->getMenuId()); + if( !_isNormalWindow ) + close(); + break; + + case 2: + listClicked( tastyListItem, QPoint(tastyListItem->listView()->width(), 0) ); + break; + + case 3: + KRun::runCommand( "cp " + tastyListItem->getDeskopEntryPath() + " ~/Desktop" ); + break; + + default: + break; + } + +} + +void MenuHandler::doLogout() +{ + close(); + DCOPRef kdesktopKDesktopIface ("kdesktop", "KDesktopIface"); + kdesktopKDesktopIface.call ("logout()"); +} + +void MenuHandler::doLock() +{ + hide(); + DCOPRef kdesktopKScreensaverIface ("kdesktop", "KScreensaverIface"); + kdesktopKScreensaverIface.call ("lock()"); + close(); +} + +void MenuHandler::runDialog() +{ + close(); + DCOPRef kdesktopKDesktopIface ("kdesktop", "KDesktopIface"); + kdesktopKDesktopIface.call ("popupExecuteCommand()"); +} + +/*Following functions are from official KDE Kmenu, Copyright 1996-2006 the kicker authors*/ + +void MenuHandler::slotPopulateSessions() +{ + int p = 0; + DM dm; + + sessionsMenu->clear(); + + sessionsMenu->insertItem(SmallIconSet("personal"), i18n("Edit user profile..."), 100 ); + sessionsMenu->insertSeparator(); + + //optional save/restore session entries + if(prefSkel->showSaveSession()) + { + sessionsMenu->insertItem( i18n("Save current session"), 101 ); + } + + if (kapp->authorize("start_new_session") && (p = dm.numReserve()) >= 0) + { + if( kapp->authorize("lock_screen") ) + sessionsMenu->insertItem( i18n("Lock session and start a new one"), 102 ); + sessionsMenu->insertItem(SmallIconSet("fork"), i18n("Start New Session"), 103 ); + if (!p) { + sessionsMenu->setItemEnabled( 101, false ); + sessionsMenu->setItemEnabled( 102, false ); + } + sessionsMenu->insertSeparator(); + } + + SessList sess; + if (dm.localSessions( sess )) + for (SessList::ConstIterator it = sess.begin(); it != sess.end(); ++it) { + int id = sessionsMenu->insertItem( DM::sess2Str( *it ), (*it).vt ); + if (!(*it).vt) + sessionsMenu->setItemEnabled( id, false ); + if ((*it).self) + sessionsMenu->setItemChecked( id, true ); + } +} + +void MenuHandler::slotSessionActivated( int ent ) +{ + close(); + + switch(ent) + { + case 100: + close(); + KRun::runCommand ("kcmshell kcm_useraccount"); + break; + case 101: + { + close(); + DCOPRef ksmserverKsmserver ("ksmserver", "ksmserver"); + ksmserverKsmserver.call ("saveCurrentSession()"); + break; + } + case 102: + doNewSession( true ); + break; + case 103: + doNewSession( false ); + break; + } + + //switch on an other session + if (!sessionsMenu->isItemChecked( ent )) + DM().lockSwitchVT( ent ); +} + +void MenuHandler::doNewSession( bool lock ) +{ + int result = KMessageBox::warningContinueCancel( + kapp->desktop()->screen(kapp->desktop()->screenNumber(menu)), + i18n("

You have chosen to open another desktop session.
" + "The current session will be hidden " + "and a new login screen will be displayed.
" + "An F-key is assigned to each session; " + "F%1 is usually assigned to the first session, " + "F%2 to the second session and so on. " + "You can switch between sessions by pressing " + "Ctrl, Alt and the appropriate F-key at the same time. " + "Additionally, the KDE Panel and Desktop menus have " + "actions for switching between sessions.

") + .arg(7).arg(8), + i18n("Warning - New Session"), + KGuiItem(i18n("&Start New Session"), "fork"), + ":confirmNewSession", + KMessageBox::PlainCaption | KMessageBox::Notify); + + if (result==KMessageBox::Cancel) + return; + + if (lock) + doLock(); + + DM().startReserve(); +} + + +void MenuHandler::initializeSearch( const QString & query ) +{ + if( !searchMode && query.length() > 2 ) + { + if( !menu->searchLine->listView() ) + menu->searchLine->setListView((KListView *)(menu->dynamicList)); + searchMode = true; + menu->menuModes->setEnabled(false); + KServiceGroup::Ptr service = KServiceGroup::root(); + menu->dynamicList->clear(); + setCursor(QCursor(Qt::BusyCursor)); + populateList( service, menu->dynamicList, NULL, true, query ); + setCursor(QCursor(Qt::ArrowCursor)); + } + else if( query.length() < 3 ) + { + if( menu->searchLine->listView() ) + { + menu->searchLine->setListView(NULL); + menu->searchLine->setEnabled(true); + menu->searchLine->setFocus(); + menu->searchLine->setContextMenuEnabled(false); + } + searchMode = false; + menu->menuModes->setEnabled(true); + menu->dynamicList->clear(); + menuModeChanged(_menuMode); + } +} + +void MenuHandler::kerrySearch( const QString & query ) +{ + close(); + DCOPRef kdesktopKScreensaverIface ("kerry", "search"); + kdesktopKScreensaverIface.call ("search(QString)", query); +} + +void MenuHandler::strigiSearch( const QString & query ) +{ + close(); + KRun::runCommand ("konqueror strigi:/?q="+query); +} + +void MenuHandler::clearDynList( ) +{ + menu->dynamicList->clear(); + switch( currentMenuMode ) + { + case MoreUsed: + case RecentlyUsed: + { + DCOPRef kickerKMenuIface ("kicker", "kicker"); + kickerKMenuIface.call("clearQuickStartMenu()"); + slotModKickerConf(); + break; + } + case RecentDocuments: + KRecentDocument::clear(); + break; + default: + break; + } +} + +void MenuHandler::menuModeChanged( int index ) +{ + _menuMode = index; + prefSkel->setMenuMode(_menuMode); + + switch(index) + { + case Favourites: + fillFavourites(); + break; + + case MoreUsed: + fillMoreUsed(); + break; + + case RecentlyUsed: + fillRecentlyUsed(); + break; + + case RecentDocuments: + fillRecentDocuments(); + break; + + default: + break; + } +} + + +void MenuHandler::switchWindowMode() +{ + if( !_isNormalWindow /*testWFlags(Qt::WType_Popup)*/ ) + { + _isNormalWindow = true; + hide(); + reparent(static_cast(parent()),Qt::WType_Dialog, pos(), true); + + menu->detachButton->setIconSet(QPixmap(uic_findImage("attach.png"))); + prefSkel->setIsNormalWindow(true); + } + else + { + hide(); + reparent(static_cast(parent()), + Qt::WType_Popup|Qt::WNoAutoErase, + pos(), true); + + menu->detachButton->setIconSet(QPixmap(uic_findImage("detach.png"))); + prefSkel->setIsNormalWindow(false); + _isNormalWindow = false; + } + + prefSkel->writeConfig(); +} + +//EOF diff --git a/src/menuhandler.h b/src/menuhandler.h new file mode 100644 index 0000000..9fdf33f --- /dev/null +++ b/src/menuhandler.h @@ -0,0 +1,184 @@ +/*************************************************************************** + * Copyright (C) 2006 by Marco Martin * + * notmart@gmail.com * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the Lesser GNU General Public * + * License as published by the Free Software Foundation; * + * either version 2 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, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#ifndef MENUHANDLER_H +#define MENUHANDLER_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "dmctl.h" +#include "menu.h" +#include "prefs.h" +#include "tastylistview.h" + +/** + @author Marco Martin +*/ +class MenuHandler : public QFrame{ + Q_OBJECT + +public: + MenuHandler( QWidget *parent, Prefs *prefs, char *name=0, WFlags fl=WType_TopLevel ); + + ~MenuHandler(); + + void readConfig(); + void popup(QPoint pos); + void updateConfig(); + void focusNextChild(){focusNextPrevChild(true);} + void focusPrevChild(){focusNextPrevChild(false);} + void clearNewInstalledApplications() + {newInstalledList.clear();newInstalledTimeStamps.clear(); + prefSkel->setNewInstalledApps( newInstalledList ); + prefSkel->setNewInstalledAppsTimeStamps( newInstalledTimeStamps );} + +signals: + void newApplications(int); + void kickerConfChanged(); + void hidden(); + +protected: + virtual bool eventFilter( QObject *o, QEvent * e ); + + virtual void closeEvent ( QCloseEvent *e); + virtual void resizeEvent ( QResizeEvent *e) + { QWidget::resizeEvent(e); menu->leftFrame->setMaximumWidth( (int)((width()-24)/3) ); } + virtual void mousePressEvent( QMouseEvent *e); + +private: + typedef QMap RecentlyUsedMap; + typedef enum + { + Favourites = 0, + MoreUsed = 1, + RecentlyUsed = 2, + RecentDocuments = 3 + } MenuMode; + + RecentlyUsedMap recentlyUsedMap; + + QStringList moreUsedList, favouriteList; + + Menu * menu; + MenuMode currentMenuMode; + KIconLoader *iconLoader; + QPopupMenu *sessionsMenu; + bool searchMode; + Prefs *prefSkel; + KConfig *kickerConf; + KDirWatch *kickerConfWatch; + //xdgMenuWatch for applications-kmenuedit.menu xdgMenuLister for all the desktop files + KDirWatch *xdgMenuWatch; + KDirLister *xdgMenuLister; + int firstListing; + QStringList oldInstalledList, newInstalledList; + QValueList newInstalledTimeStamps; + + QPixmap bookMarkPix; + QVBoxLayout * MenuHandlerLayout; + +//configuration items + int _menuMode; + QString _currentCategory; + int _numRecentEntries; + int _iconSize1; + int _iconSize2; + int _iconSize3; + int _actionIconSize; + bool _displaySubText; + bool _newAppsNotification; + bool _kerryIntegration; + bool _strigiIntegration; + double _menuWidth; + double _menuHeight; + bool _isNormalWindow; + bool _showExpander; + bool _alwaysCollapsed; + bool _hideOneChild; + bool _alphabetical; + + typedef QMap SListMap; + SListMap sListMap; + //KServiceGroup::List getServiceGroupList( KServiceGroup *serviceGroup ); + void setupColumns(); + void loadNewInstalledApps(); + void initOldInstalledApps(KServiceGroup::Ptr group); + void initNewInstalledApps(KServiceGroup::Ptr group); + void populateList( KServiceGroup *serviceGroup, + TastyListView *listView, + TastyListViewItem *listItemFather, + bool recursive, const QString & query = NULL ); + + void listClicked( TastyListViewItem * listItem, const QPoint & coord ); + void fillRecentDocuments( ); + void fillMoreUsed( ); + void fillRecentlyUsed( ); + void fillFavourites( ); + void setupDynList( MenuMode mode ); + //FIXME: this thing is UBER HEAVY + bool searchNewItems(KServiceGroup::Ptr group); + +public slots: + void slotUpdateApplications(); + +private slots: + void dynListElemMoved( ); + void dynListClicked( QListViewItem * listItem, const QPoint & coord, int c ); + void slotContextMenu(QListViewItem *listItem, const QPoint &coord, int c ); + void initializeRecentlyUsed( ); + void slotModKickerConf(); + void slotApplicationsAdded(const KFileItemList & newItems); + void slotApplicationRemoved(); + void childListClicked( QListViewItem * listItem, const QPoint & coord, int c ); + void rootListClicked( QListViewItem * listItem, const QPoint & coord, int c ); + void doLogout(); + void doLock(); + void slotPopulateSessions(); + void slotSessionActivated( int ent ); + void doNewSession( bool lock ); + void runDialog(); + void initializeSearch( const QString & query ); + void kerrySearch( const QString & query ); + void strigiSearch( const QString & query ); + void clearDynList(); + void menuModeChanged( int index ); + void switchWindowMode(); +}; + +#endif diff --git a/src/misc.cpp b/src/misc.cpp new file mode 100644 index 0000000..2f1d30c --- /dev/null +++ b/src/misc.cpp @@ -0,0 +1,38 @@ +/* + * Copyright 2003, Sandro Giessl + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License version 2 as published by the Free Software Foundation. + * + * This library 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 + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public License + * along with this library; see the file COPYING.LIB. If not, write to + * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#include +#include "misc.h" + +QColor alphaBlendColors(const QColor &bgColor, const QColor &fgColor, const int a) +{ + + // normal button... + QRgb rgb = bgColor.rgb(); + QRgb rgb_b = fgColor.rgb(); + int alpha = a; + if(alpha>255) alpha = 255; + if(alpha<0) alpha = 0; + int inv_alpha = 255 - alpha; + + QColor result = QColor( qRgb(qRed(rgb_b)*inv_alpha/255 + qRed(rgb)*alpha/255, + qGreen(rgb_b)*inv_alpha/255 + qGreen(rgb)*alpha/255, + qBlue(rgb_b)*inv_alpha/255 + qBlue(rgb)*alpha/255) ); + + return result; +} diff --git a/src/misc.h b/src/misc.h new file mode 100644 index 0000000..835c277 --- /dev/null +++ b/src/misc.h @@ -0,0 +1,24 @@ +/* + * Copyright 2003, Sandro Giessl + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License version 2 as published by the Free Software Foundation. + * + * This library 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 + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public License + * along with this library; see the file COPYING.LIB. If not, write to + * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#ifndef __MISC_H +#define __MISC_H + +QColor alphaBlendColors(const QColor &backgroundColor, const QColor &foregroundColor, const int alpha); + +#endif // __MISC_H diff --git a/src/pics/.svn/all-wcprops b/src/pics/.svn/all-wcprops new file mode 100644 index 0000000..771d36b --- /dev/null +++ b/src/pics/.svn/all-wcprops @@ -0,0 +1,17 @@ +K 25 +svn:wc:ra_dav:version-url +V 30 +/svn/!svn/ver/2/trunk/src/pics +END +attach.png +K 25 +svn:wc:ra_dav:version-url +V 41 +/svn/!svn/ver/2/trunk/src/pics/attach.png +END +detach.png +K 25 +svn:wc:ra_dav:version-url +V 41 +/svn/!svn/ver/2/trunk/src/pics/detach.png +END diff --git a/src/pics/.svn/entries b/src/pics/.svn/entries new file mode 100644 index 0000000..257243f --- /dev/null +++ b/src/pics/.svn/entries @@ -0,0 +1,42 @@ +9 + +dir +2 +https://tastymenu.googlecode.com/svn/trunk/src/pics +https://tastymenu.googlecode.com/svn + + + +2007-05-27T14:44:26.685461Z +2 +notmart + + +svn:special svn:externals svn:needs-lock + +attach.png +file + + + + +2006-07-28T13:14:20.000000Z +ed780d9ddd2ed20aaa4b9fa7a5c9ecec +2007-05-27T14:44:26.685461Z +2 +notmart +has-props + +detach.png +file + + + + +2006-07-28T13:14:01.000000Z +f7ea9ad2adbf18c94d8fa4badc7e07db +2007-05-27T14:44:26.685461Z +2 +notmart +has-props + diff --git a/src/pics/.svn/format b/src/pics/.svn/format new file mode 100644 index 0000000..ec63514 --- /dev/null +++ b/src/pics/.svn/format @@ -0,0 +1 @@ +9 diff --git a/src/pics/.svn/prop-base/attach.png.svn-base b/src/pics/.svn/prop-base/attach.png.svn-base new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/src/pics/.svn/prop-base/attach.png.svn-base @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/src/pics/.svn/prop-base/detach.png.svn-base b/src/pics/.svn/prop-base/detach.png.svn-base new file mode 100644 index 0000000..5e9587e --- /dev/null +++ b/src/pics/.svn/prop-base/detach.png.svn-base @@ -0,0 +1,5 @@ +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/src/pics/.svn/text-base/attach.png.svn-base b/src/pics/.svn/text-base/attach.png.svn-base new file mode 100644 index 0000000000000000000000000000000000000000..9a2382fe164274a457321be51365b1094f7c9b0e GIT binary patch literal 192 zcmeAS@N?(olHy`uVBq!ia0vp^93afW1|*O0@9PFqY)RhkE)4%caKYZ?lYt_f1s;*b z3=G`DAk4@xYmNj^kiEpy*OmPmy9_U%h|XPZR-lk66r>mdKI;Vst041(D;Q#;t literal 0 HcmV?d00001 diff --git a/src/pics/attach.png b/src/pics/attach.png new file mode 100644 index 0000000000000000000000000000000000000000..9a2382fe164274a457321be51365b1094f7c9b0e GIT binary patch literal 192 zcmeAS@N?(olHy`uVBq!ia0vp^93afW1|*O0@9PFqY)RhkE)4%caKYZ?lYt_f1s;*b z3=G`DAk4@xYmNj^kiEpy*OmPmy9_U%h|XPZR-lk66r>mdKI;Vst041(D;Q#;t literal 0 HcmV?d00001 diff --git a/src/prefs.kcfgc b/src/prefs.kcfgc new file mode 100644 index 0000000..b996f04 --- /dev/null +++ b/src/prefs.kcfgc @@ -0,0 +1,6 @@ +# Code generation options for kconfig_compiler +File=tastymenu.kcfg +ClassName=Prefs +Singleton=false +Mutators=true + diff --git a/src/tastybutton.cpp b/src/tastybutton.cpp new file mode 100644 index 0000000..9f89c05 --- /dev/null +++ b/src/tastybutton.cpp @@ -0,0 +1,116 @@ +/*************************************************************************** + * Copyright (C) 2006 by Marco Martin * + * notmart@gmail.com * + * * + * 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 2 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, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#include "tastybutton.h" + +#include +#include +#include +#include +#include + +TastyButton::TastyButton(QWidget *parent) + : QToolButton(parent) +{ + iconEffect = new KIconEffect(); + iconEffect->init(); +} + + +TastyButton::~TastyButton() +{ +} + +void TastyButton::drawButton( QPainter * p ) +{ + //background image or pseudo transparency + if( parentWidget()->erasePixmap() ) + { + const QPixmap erasePix(size()); + QPainter buffPainter(&erasePix); + buffPainter.drawPixmap(QPoint(0, 0), *parentWidget()->erasePixmap(), geometry()); + buffPainter.end(); + + QImage eraseImg = erasePix.convertToImage(); + if( isDown() ) + { + KImageEffect::fade(eraseImg, 0.25, black); + p->drawPixmap(rect(), eraseImg ); + } + else if( uses3D() ) + { + KImageEffect::fade(eraseImg, 0.4, white); + p->drawPixmap(rect(), eraseImg ); + } + else + p->drawPixmap(rect(), erasePix ); + + //lightScore = 0 grey, >0 lighter <0 darker + int lightScore = 0; + //chacks the brightness of 10 pixels of the diagonal + //we won't be 100% sure if this reflects the global brightess of the image + //but it seems to work well + int x = 0; + int y = 0; + while( x < eraseImg.width() && y < eraseImg.height() && x < 10 ) + { + x=++y; + //deciding the text color to use + int h,s,v; + QColor(eraseImg.pixel(x,y)).getHsv( h, s, v ); + // is purely empirical :) + if( v > 140) lightScore++; + else lightScore--; + } + if( lightScore < 0 ) + setPaletteForegroundColor(white); + else + setPaletteForegroundColor(black); + } + //simple background color + else + { + if( isDown() ) + { + p->fillRect(rect(), colorGroup().background().dark(120)); + } + else if( uses3D() ) + { + p->fillRect(rect(), colorGroup().background().light(120)); + } + else + { + p->fillRect(rect(), colorGroup().background()); + } + } + + drawButtonLabel(p); +} + +void TastyButton::setIconSet( QIconSet is ) +{ + is.setPixmap(iconEffect->apply(is.pixmap(), + (int)KIcon::Panel, + (int)KIcon::ActiveState), + QIconSet::Automatic, + QIconSet::Active); + + QToolButton::setIconSet( is ); +} + diff --git a/src/tastybutton.h b/src/tastybutton.h new file mode 100644 index 0000000..4fa0d89 --- /dev/null +++ b/src/tastybutton.h @@ -0,0 +1,49 @@ +/*************************************************************************** + * Copyright (C) 2006 by Marco Martin * + * notmart@gmail.com * + * * + * 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 2 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, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#ifndef TASTYBUTTON_H +#define TASTYBUTTON_H + +#include +#include +#include +#include + +/** + @author Marco Martin +*/ +class TastyButton : public QToolButton +{ +public: + TastyButton(QWidget *parent); + + ~TastyButton(); + + void setIconSet( QIconSet is ); + +protected: + void drawButton( QPainter * p ); + + private: + QPixmap highLightedIcon; + KIconEffect *iconEffect; + +}; + +#endif diff --git a/src/tastylistview.cpp b/src/tastylistview.cpp new file mode 100644 index 0000000..ed5e2a7 --- /dev/null +++ b/src/tastylistview.cpp @@ -0,0 +1,600 @@ +/*************************************************************************** + * Copyright (C) 2006 by Marco Martin * + * notmart@gmail.com * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the Lesser GNU General Public * + * License as published by the Free Software Foundation; * + * either version 2 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, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ + +#include "tastylistview.h" +#include "misc.h" + +#include +#include +#include +#include +#include +#include +#include +#include + + +TastyListView::TastyListView( QWidget * parent, const char * name) + : KListView(parent, name), highLightGroups(true), easyOpen(true) +{ + + onItemTimer = new QTimer(this, "onItemTimer"); + underCursorItem = openItem = NULL; + mouseDown = false; + actionIconSize = 16; + actionIconSpace = 32; + + listItemTip = new TastyListViewToolTip(viewport(), this); + + connect(this, SIGNAL(onItem(QListViewItem *) ), SLOT(slotOnItem(QListViewItem *) ) ); + connect(onItemTimer, SIGNAL(timeout()), this, SLOT(slotTimeout()) ); +} + + +TastyListView::~TastyListView() +{ +} + +void TastyListView::startDrag() +{ + if( !currentItem() ) + return; + TastyListViewItem *item = dynamic_cast(currentItem()); + if( !item ) + return; + + QDragObject *d = new KURLDrag( KURL(item->getDeskopEntryPath()) , viewport() ); + if(!d) + return; + + if (d->drag() && d->target() != viewport()) + emit moved(); +} + +void TastyListView::contentsMouseReleaseEvent( QMouseEvent * e ) +{ + int x = e->x(); + if( x > width() || x < 0) + return; + + if( !currentItem() ) + return; + TastyListViewItem *item = dynamic_cast(currentItem()); + if( !item ) + return; + + if( e->button() == RightButton ) + emit(contextMenuRequested( currentItem(), e->globalPos(), 0) ); + else + emit(activated( currentItem(), QPoint(x, e->y()), 0) ); + + if(item && (item->getType() == TastyListViewItem::ServiceGroup)) + { + if( !openItem ) + { + openItem = currentItem(); + return; + } + + TastyListViewItem *oldOpenItem = dynamic_cast(openItem); + openItem = currentItem(); + if( !oldOpenItem || !oldOpenItem->listView() ) + return; + + oldOpenItem->repaint(); + } + KListView::contentsMouseReleaseEvent(e); +} + +void TastyListView::contentsMouseMoveEvent( QMouseEvent * e ) +{ + KListView::contentsMouseMoveEvent(e); + mouseDown = (e->state() & Qt::LeftButton); + + if( itemAt( contentsToViewport(QPoint(e->x(), e->y()))) == 0 ) + underCursorItem = NULL; +} + +void TastyListView::leaveEvent( QEvent * e ) +{ + KListView::leaveEvent( e ); + onItemTimer->stop(); + if( openItem ) + setCurrentItem( openItem ); +} + + +void TastyListView::keyPressEvent( QKeyEvent * e ) +{ + + switch(e->key()) + { + case Qt::Key_Enter: + case Qt::Key_Return: + case Qt::Key_Space: + { + emit(activated(currentItem(), QPoint(0,0), 0)); + if(!currentItem()) + return; + TastyListViewItem *item = dynamic_cast(currentItem()); + if(item && item->getType() == TastyListViewItem::ServiceGroup) + { + if( !openItem ) + { + openItem = currentItem(); + return; + } + TastyListViewItem *oldOpenItem = dynamic_cast(openItem); + openItem = currentItem(); + if( !oldOpenItem || !oldOpenItem->listView() ) + return; + + oldOpenItem->repaint(); + } + } + break; + + case Qt::Key_Up: + case Qt::Key_Down: + KListView::keyPressEvent( e ); + break; + + case Qt::Key_Right: + { + if(!currentItem()) + return; + TastyListViewItem *item = dynamic_cast(currentItem()); + if(item && easyOpen && !QApplication::reverseLayout() && item->getType() == TastyListViewItem::ServiceGroup) + { + emit( activated( currentItem(), QPoint(0,0), 0)); + if( !openItem ) + { + openItem = currentItem(); + return; + } + TastyListViewItem *oldOpenItem = dynamic_cast(openItem); + openItem = currentItem(); + if( !oldOpenItem || !oldOpenItem->listView() ) + return; + + oldOpenItem->repaint(); + } + focusNextPrevChild(!QApplication::reverseLayout()); + break; + } + case Qt::Key_Left: + { + if( !currentItem() ) + return; + TastyListViewItem *item = dynamic_cast(currentItem()); + if(item && easyOpen && QApplication::reverseLayout() && item->getType() == TastyListViewItem::ServiceGroup) + { + emit( activated( currentItem(), QPoint(0,0), 0)); + if( !openItem ) + { + openItem = currentItem(); + return; + } + TastyListViewItem *oldOpenItem = dynamic_cast(openItem); + openItem = currentItem(); + if( !oldOpenItem || !oldOpenItem->listView() ) + return; + + oldOpenItem->repaint(); + } + focusNextPrevChild(QApplication::reverseLayout()); + break; + } + case Qt::Key_Tab: + KListView::keyPressEvent( e ); + break; + + default: + break; + } +} + + +void TastyListView::slotOnItem( QListViewItem * listItem ) +{ + if( !listItem || listItem->listView() != this ) + return; + + if( listItem != underCursorItem ) + { + underCursorItem = listItem; + setCurrentItem(listItem); + if(mouseDown) + onItemTimer->start(250, true); + else + onItemTimer->start(1000, true); + } +} + +void TastyListView::slotTimeout( ) +{ + if( !underCursorItem /*|| !openItem*/ ) + return; + + TastyListViewItem *tastyUnderCursorItem = dynamic_cast(underCursorItem); + + if( easyOpen && tastyUnderCursorItem && + tastyUnderCursorItem->getType() == TastyListViewItem::ServiceGroup ) + { + emit(activated(underCursorItem, QPoint(underCursorItem->listView()->width()/2,1), 0)); + TastyListViewItem *oldOpenItem = dynamic_cast(openItem); + openItem = currentItem(); + if( !oldOpenItem || !oldOpenItem->listView() ) + return; + + oldOpenItem->repaint(); + } +} + +///////////TASTYLISTVIEWTOOLTIP +TastyListViewToolTip::TastyListViewToolTip( QWidget *parent, TastyListView *tListView ) + : QToolTip( parent ), listView( tListView ) +{ +} + +void TastyListViewToolTip::maybeTip( const QPoint &pos ) +{ + if( !parentWidget() || !listView || !listView->showToolTips() ) + return; + + TastyListViewItem *item = static_cast(listView->itemAt( pos )); + QPoint contentsPos = listView->viewportToContents( pos ); + if( !item || !listView->columns() ) + return; + + int actionWidth = 0; + TastyListViewItem::ActionType actionType = item->getActionType(); + if( actionType != TastyListViewItem::NoAction ) + actionWidth = listView->getActionIconSpace(); + + int column = listView->header()->sectionAt( contentsPos.x() ); + + + QRect r = listView->itemRect( item ); + int headerPos = listView->header()->sectionPos( column ); + r.setLeft( headerPos ); + r.setRight( headerPos + listView->header()->sectionSize( column ) ); + + int actionLeft = r.right()-actionWidth; + if( pos.x() >= actionLeft ) + { + r.setLeft( actionLeft ); + switch( actionType ) + { + case TastyListViewItem::AddBookMark: + tip( r, i18n( "Add" )+" \""+item->text( column )+"\" "+i18n( "to your favourite applications" ) ); + return; + + case TastyListViewItem::RemoveBookMark: + tip( r, i18n( "Remove" )+" \""+item->text( column )+"\" "+i18n( "from your favourite applications" ) ); + return; + + case TastyListViewItem::OpenGroup: + tip( r, i18n( "Browse" )+" \""+item->text( column )+"\"" ); + return; + + case TastyListViewItem::Expand: + tip( r, i18n( "Expand" )+" \""+item->text( column )+"\"" ); + return; + + case TastyListViewItem::Collapse: + tip( r, i18n( "Collapse" )+" \""+item->text( column )+"\"" ); + return; + + default: + break; + } + } + else if( actionType == TastyListViewItem::OpenGroup && !item->hasEllipsis() ) + { + tip( r, i18n( "Browse" )+" \""+item->text( column )+"\"" ); + return; + } + + if( !item->hasEllipsis() ) + return; + tip( r, item->text( column )+"\n"+item->getSubText() ); +} + + +///////////TASTYLISTVIEWITEM + +TastyListViewItem::TastyListViewItem( TastyListView * parent ) + : KListViewItem(parent) +{commonConstructor();} + +TastyListViewItem::TastyListViewItem( TastyListViewItem * parent ) + : KListViewItem(parent) +{commonConstructor();} + +TastyListViewItem::TastyListViewItem( TastyListView * parent, TastyListViewItem * after, QString label1 ) + : KListViewItem(parent, after, label1) +{commonConstructor();cellText = label1;} + +TastyListViewItem::TastyListViewItem( TastyListViewItem * parent, TastyListViewItem * after, QString label1 ) + : KListViewItem(parent, after, label1) +{commonConstructor();cellText = label1;} + +TastyListViewItem::TastyListViewItem( TastyListView * parent, QString label1 ) + : KListViewItem(parent, label1) +{commonConstructor();cellText = label1;} + +TastyListViewItem::TastyListViewItem( TastyListViewItem * parent, QString label1 ) + : KListViewItem(parent, label1) +{commonConstructor();cellText = label1;} + +TastyListViewItem::~TastyListViewItem() +{ +} + +void TastyListViewItem::commonConstructor() +{ + + subText="";cellText=""; + + actionType = NoAction; + + actionPix = QPixmap(); + + menuId = QString(); + desktopEntryPath = QString(); + path = QString(); + + ellipsis = false; + highLight = false; + displaySubText = true; + +} + +void TastyListViewItem::loadPixmap() +{ + QString iconFile = ""; + iconLoader = KGlobal::iconLoader(); + + if( !listView() ) + return; + + TastyListView *lv = dynamic_cast(listView()); + if( !lv ) + return; + + switch( actionType ) + { + case AddBookMark: + actionPix = iconLoader->loadIcon("bookmark_add", KIcon::Small, lv->getActionIconSize()); + break; + + case RemoveBookMark: + actionPix = iconLoader->loadIcon("remove", KIcon::Small, lv->getActionIconSize()); + break; + + case OpenGroup: + if( QApplication::reverseLayout() ) + actionPix = iconLoader->loadIcon("1leftarrow", KIcon::Small, lv->getActionIconSize()); + else + actionPix = iconLoader->loadIcon("1rightarrow", KIcon::Small, lv->getActionIconSize()); + break; + + case Expand: + actionPix = iconLoader->loadIcon("1downarrow", KIcon::Small, lv->getActionIconSize()); + break; + + case Collapse: + actionPix = iconLoader->loadIcon("1uparrow", KIcon::Small, lv->getActionIconSize()); + break; + + default: + return; + } + + + if ( actionPix.height () > lv->getActionIconSize()) + { + QImage img = actionPix.convertToImage(); + if( !img.isNull() ) + { + img = img.smoothScale ( lv->getActionIconSize(), lv->getActionIconSize()); + actionPix = QPixmap (img); + } + } +} + +QString TastyListViewItem::key( int column, bool ascending ) const +{ + ascending = ascending; + QString prefix; + + //ensure all the categories are before the leaf items + if( itemType == ServiceGroup ) + prefix = "0"; + else + prefix = "1"; + return prefix.append(text( column )); +} + +void TastyListViewItem::setup ( ) +{ + //KListViewItem::setup(); + + //calculate listitem height + QFontMetrics fm( listView()->font() ); + + int pixmapHeight = 5; + if( pixmap(0) ) + pixmapHeight = pixmap(0)->height()+4; + + if( displaySubText && !subText.isEmpty() ) + { + int textHeight = (int)(fm.height()*2.5); + setHeight( (pixmapHeight > textHeight) ? pixmapHeight : textHeight ); + } + else + setHeight( pixmapHeight ); +} + + +/*Adapted from Amarok's Statistic listView Copyright (c) 2006 Seb Ruiz*/ +void TastyListViewItem::paintCell ( QPainter * p, const QColorGroup & cg, int column, int width, int align ) +{ + int textHeight = height(); + QString name = cellText; + + int textX = 0; + + QColor fillColor, textColor; + +# if KDE_VERSION < KDE_MAKE_VERSION(3,3,91) +# define BackgroundColor backgroundColor() +# else +# define BackgroundColor backgroundColor(0) +# endif + + + fillColor = isSelected() ? cg.highlight() : BackgroundColor; + + textColor = isSelected() ? cg.highlightedText() : cg.text(); + + if( !listView() ) + return; + TastyListView *lv = dynamic_cast( listView() ); + if( !lv ) + return; + + QFont font( lv->font() ); + + if( !isSelected() && (lv->getOpenItem() == this|| + (lv->getHighLightGroups() && itemType == ServiceGroup)) ) + fillColor = alphaBlendColors( fillColor, cg.highlight(), 200); + + else if( !isSelected() && highLight ) + { + int hue, saturation, value; + cg.highlight().getHsv(&hue, &saturation, &value); + //calculate the inverse color 128 means rotating the spectral value by 180 degrees + fillColor.setHsv( (hue+128)%256, saturation/2, value ); + } + + else if( isSelected() && !lv->hasFocus() ) + fillColor = alphaBlendColors( fillColor, BackgroundColor, 150); + + QFontMetrics fm( font ); + widthChanged(column); + + QPixmap buffer(width*2, textHeight); + + if( buffer.isNull() ) + return; + + buffer.fill( fillColor ); + + QPainter pBuf(&buffer); + + + if( pixmap( column ) ) + { + int y = (textHeight - pixmap(column)->height())/2; + pBuf.drawPixmap( 0, y, *pixmap(column) ); + textX += pixmap(column)->width() + 4; + } + + //Calculate the ellipsis for the MAIN text + int extraSpace = fm.width("...") + textX + lv->getActionIconSpace(); + ellipsis = false; + while( (fm.width(name)+extraSpace) > width && name.length() > 4) + { + name.truncate(name.length()-1); + ellipsis = true; + } + if( ellipsis ) + name.append("..."); + + + if( name == "separator" ) + { + int y = textHeight/2; + pBuf.setPen(cg.background().dark(140)); + pBuf.drawLine(textX, y, width, y); + pBuf.setPen(textColor); + pBuf.end(); + p->drawPixmap( 0, 0, buffer ); + return; + } + + if( fm.width( name ) + textX + lv->itemMargin()*2 > width ) + { + const int _width = width - textX - lv->itemMargin()*2; + name = KStringHandler::rPixelSqueeze( name, pBuf.fontMetrics(), _width ); + } + + pBuf.setPen(textColor); + pBuf.drawText( textX, 3, width, textHeight, AlignTop, name ); + + if( displaySubText && !subText.isEmpty() ) + { + font.setPointSize( max((int)(font.pointSize()/1.2), 7) ); + pBuf.setFont( font ); + + QString subTextCopy = subText; + QFontMetrics sfm( font ); + + //Calculate the ellipsis for the subtext + int extraSpace = fm.width("...") + textX + lv->getActionIconSpace(); + bool ellipsisSubText = false; + while( (sfm.width(subTextCopy)+extraSpace) > width && subTextCopy.length() > 4) + { + subTextCopy.truncate(subTextCopy.length()-1); + ellipsisSubText = true; + } + if( ellipsisSubText ) + { + subTextCopy.append("..."); + ellipsis = true; + } + + pBuf.setPen(cg.background().dark(140)); + pBuf.drawLine(textX, fm.height() + 3, width-textX-5, fm.height() + 3); + pBuf.setPen(textColor.light(130)); + pBuf.drawText( textX, fm.height() + 4, width, fm.height(), AlignTop, subTextCopy ); + } + + if( !actionPix.isNull() && + (actionType == OpenGroup || + actionType == Expand || + actionType == Collapse || + lv->currentItem() == this) ) + { + int y = (textHeight - actionPix.height())/2; + pBuf.drawPixmap( width-(actionPix.width()+5), y, actionPix ); + } + + + pBuf.end(); + p->drawPixmap( 0, 0, buffer ); +} + + + +//EOF diff --git a/src/tastylistview.h b/src/tastylistview.h new file mode 100644 index 0000000..fae9d02 --- /dev/null +++ b/src/tastylistview.h @@ -0,0 +1,225 @@ +/*************************************************************************** + * Copyright (C) 2006 by Marco Martin * + * notmart@gmail.com * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the Lesser GNU General Public * + * License as published by the Free Software Foundation; * + * either version 2 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, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ + +#ifndef TASTYLISTVIEW_H +#define TASTYLISTVIEW_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +class TastyListView; + +//the space reserved for the action icon (bookmark, remove bookmark etc + +/** + @author Marco Martin + */ +class TastyListViewToolTip: public QToolTip +{ + public: + TastyListViewToolTip( QWidget *parent, TastyListView *tListView ); + + void maybeTip( const QPoint &pos ); + + private: + TastyListView *listView; +}; + +/** + @author Marco Martin +*/ +class TastyListView : public KListView +{ + Q_OBJECT +private: + bool highLightGroups; + QTimer *onItemTimer; + QListViewItem *underCursorItem; + QListViewItem *openItem; + bool mouseDown; + bool easyOpen; + int actionIconSize; + int actionIconSpace; + + TastyListViewToolTip *listItemTip; + +public: + TastyListView( QWidget * parent = 0, const char * name = 0); + + ~TastyListView(); + + bool getHighLightGroups(){ return highLightGroups;} + void setHighLightGroups(bool highLight){highLightGroups = highLight;} + + bool getEasyOpen(){ return easyOpen;} + void setEasyOpen(bool easy){easyOpen = easy;} + void startDrag(); + + void setActionIconSize(int newSize){ actionIconSize = newSize; actionIconSpace = newSize*2; } + int getActionIconSize(){return actionIconSize;} + int getActionIconSpace(){return actionIconSpace;} + + QListViewItem * getOpenItem(){ return openItem;} + void setOpenItem( QListViewItem * listItem ){openItem = listItem;} + +public slots: + virtual void clear(){openItem = underCursorItem = NULL; KListView::clear();} + + +protected: + virtual void leaveEvent( QEvent * e ); + virtual void contentsMouseMoveEvent( QMouseEvent * e ); + virtual void contentsMouseReleaseEvent( QMouseEvent * e ); + virtual void keyPressEvent( QKeyEvent * e ); + + +private slots: + void slotOnItem( QListViewItem * listItem ); + void slotTimeout(); + +signals: + //Using own signal instead of clicked() in order to avoid launching two times the same app :-) + void activated(QListViewItem *, const QPoint &, int ); + +}; + + +/** + @author Marco Martin +*/ +class TastyListViewItem : public KListViewItem +{ + //Q_OBJECT +friend class TastyListView; + public: + typedef enum + { + Service, + ServiceGroup, + DesktopFile, + Empty + }Type; + + typedef enum + { + AddBookMark, + RemoveBookMark, + OpenGroup, + Expand, + Collapse, + NoAction + }ActionType; + + TastyListViewItem( TastyListView * parent ); + TastyListViewItem( TastyListViewItem * parent ); + TastyListViewItem( TastyListView * parent, TastyListViewItem * after, QString label1 ); + TastyListViewItem( TastyListViewItem * parent, TastyListViewItem * after, QString label1 ); + TastyListViewItem( TastyListView * parent, TastyListViewItem * after ); + TastyListViewItem( TastyListViewItem * parent, TastyListViewItem * after ); + TastyListViewItem( TastyListView * parent, QString label1 ); + TastyListViewItem( TastyListViewItem * parent, QString label1 ); + + ~TastyListViewItem(); + + //QString text(int column) const {return cellText;} + QString getCellText(int column) const {return cellText;} + + //TastyListViewItem *parent(); + void paintCell ( QPainter * p, const QColorGroup & cg, int column, int width, int align ); + + Type getType(){return itemType;} + void setType( Type newItemType ){itemType = newItemType;} + + ActionType getActionType(){return actionType;} + void setActionType( ActionType newActionType ){ actionType = newActionType;loadPixmap();} + void loadPixmap(); + + void setPath( QString newPath){ path = newPath;} + QString getPath(){return path;} + + void setDeskopEntryPath( QString newPath){ desktopEntryPath = newPath;} + QString getDeskopEntryPath(){return desktopEntryPath;} + + QString getSubText(){return subText;} + bool xOnDecoration( int x ) + { QListView *lv = listView(); + if( !lv ) return false; + return !( x > lv->header()->sectionPos( lv->header()->mapToIndex( 0 ) ) + + lv->treeStepSize() * ( depth() + ( lv->rootIsDecorated() ? 1 : 0) ) + lv->itemMargin() || + x < lv->header()->sectionPos( lv->header()->mapToIndex( 0 ) ) );} + + void setSubText(QString text) //FIXME: add the column + {if(cellText.isEmpty())cellText=KListViewItem::text(0); + KListViewItem::setText(0,cellText+text);subText = QString(text);} + void setText(int column, const QString & text ) + {KListViewItem::setText(column, cellText+text); cellText = text;} + void setDisplaySubText( bool display ){ displaySubText = display; } + + bool hasEllipsis(){return ellipsis;} + void setHighLight( bool newHighLight ){highLight=newHighLight;} + bool isHighLight(){return highLight;} + + void setMenuId( QString newMenuId ){ menuId = newMenuId;} + QString getMenuId(){ return menuId; } + + QString key( int column, bool ascending ) const; + + int width( const QFontMetrics & fm, const QListView * lv, int c ) + { TastyListView *tlv = dynamic_cast( listView() ); + if( tlv ) + return KListViewItem::width(fm, lv, c) + tlv->getActionIconSpace(); + else + return KListViewItem::width(fm, lv, c); + } + +protected: + virtual void setup(); + +private: + + Type itemType; + ActionType actionType; + QString path; + QString desktopEntryPath; + QString cellText; + QString subText; + QString menuId; + + bool ellipsis; + bool highLight; + bool displaySubText; + QPixmap actionPix; + KIconLoader *iconLoader; + + void commonConstructor(); + //a tiny reimplementation of max... + int max(int a, int b){return (a>b?a:b);} +}; + + +#endif diff --git a/src/tastymenu.cpp b/src/tastymenu.cpp new file mode 100644 index 0000000..1ec371e --- /dev/null +++ b/src/tastymenu.cpp @@ -0,0 +1,492 @@ +/*************************************************************************** + * Copyright (C) 2006 by Marco Martin * + * notmart@gmail.com * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the Lesser GNU General Public * + * License as published by the Free Software Foundation; * + * either version 2 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, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ + + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +#include "tastymenu.h" +#include "appearance.h" +#include "behaviour.h" + + + +TastyMenu::TastyMenu(const QString& configFile, Type type, int actions, QWidget *parent, const char *name) + : KPanelApplet(configFile, type, actions, parent, name), numNewApplications(0) +{ + + // Get the current application configuration handle + kConfig = sharedConfig(); + prefSkel = new Prefs(kConfig); + prefSkel->readConfig(); + + kickerConf = KGlobal::config(); + kickerConf->setGroup("buttons"); + _showBigToolTip = kickerConf->readBoolEntry("EnableIconZoom", true); + + button = new TastyButton(this); + + menuHandler = new MenuHandler(this, prefSkel, "MenuHandler", + prefSkel->isNormalWindow() ? + Qt::WType_Dialog : + Qt::WType_Popup|Qt::WNoAutoErase); + + connect (button, SIGNAL (pressed()), this, SLOT (clickSlot ())); + connect (menuHandler, SIGNAL(hidden()), this, SLOT(setButtonUp())); + _menuButtonLabel = prefSkel->menuButtonLabel(); + if(_menuButtonLabel.isEmpty()) + button -> setTextLabel(i18n("Menu"), false); + else + button -> setTextLabel(_menuButtonLabel, false); + + button -> setUsesTextLabel(prefSkel->menuButtonLabelType() + != Prefs::EnumMenuButtonLabelType::MenuButtonNone); + button -> setTextPosition(QToolButton::BesideIcon); + menuTip = new TastyToolTip(button); + + _toolTipTitle = prefSkel->toolTipTitle(); + + if( !_toolTipTitle.isEmpty() ) + menuTip->setTitle(_toolTipTitle); + + if( height() >= KIcon::SizeMedium ) + button->setUsesBigPixmap(true); + else + button->setUsesBigPixmap(false); + + iconLoader = KGlobal::iconLoader(); + + loadMenuButtonIcon(); + + button->setAutoRaise(true); + + _newAppsNotification = prefSkel->newAppsNotification(); + if( _newAppsNotification ) + { + setNewApplicationsMessage(prefSkel->newInstalledApps().count()); + connect( menuHandler, SIGNAL(newApplications(int)), + this, SLOT(setNewApplicationsMessage(int))); + } + setGlobalAccel( prefSkel->overrideAltF1()); + + connect( menuHandler, SIGNAL(kickerConfChanged()), + this, SLOT(updateConfiguration()) ); +} + + +TastyMenu::~TastyMenu() +{ + //delete prefSkel; + KGlobal::locale()->removeCatalogue("tastymenu"); +} + +void TastyMenu::loadMenuButtonIcon() +{ + _menuButtonIcon = prefSkel->menuButtonIcon(); + //the tooltip has the same icon as the button + menuTip->loadIcon( _menuButtonIcon ); + + if( prefSkel->menuButtonIconType() + == Prefs::EnumMenuButtonIconType::IconNone ) + { + button->setIconSet(QIconSet()); + return; + } + + if( position() == pTop || position() == pBottom ) + _iconsize = height(); + else if(position() == pLeft || position() == pRight) + _iconsize = width(); + + QPixmap btnPixmap(iconLoader->loadIcon(_menuButtonIcon, KIcon::Panel, _iconsize)); + if( !btnPixmap.isNull() ) + button->setIconSet(btnPixmap); + else + { + kdDebug() << "Failed to load custom icon" << endl; + button->setIconSet(iconLoader->loadIcon("kmenu", KIcon::Panel, height())); + } +} + +QPoint TastyMenu::menupos(QWidget *widget) +{ + //now should look decent on all positions + switch( position() ) + { + case pLeft: + { + return QPoint( this->mapToGlobal( this->geometry().topRight() )); + break; + } + case pRight: + { + QPoint buttonCoord = this->mapToGlobal(this->geometry().topLeft()); + return QPoint( buttonCoord.x()-widget->width(), buttonCoord.y() ); + break; + } + case pTop: + { + return QPoint( this->mapToGlobal( this->geometry().bottomLeft() )); + break; + } + default: //pBottom or floating + { + QPoint buttonCoord = this->mapToGlobal(this->geometry().topLeft()); + return QPoint( buttonCoord.x(), buttonCoord.y()-widget->height() ); + break; + } + } +} + +void TastyMenu::clickSlot() +{ + menuTip->hideTip(); + + menuHandler->popup(menupos(menuHandler)); + + //QTimer::singleShot( 10000, this, SLOT(setButtonUp()) ); +} + +void TastyMenu::about() +{ + KAboutData data("tastymenu", + I18N_NOOP("Tasty Menu"), + "1.0.6", + I18N_NOOP("KMenu replacement"), + KAboutData::License_LGPL_V2, + "(c) 2006-2007, Marco Martin",0,0,"mart@notmart.org"); + + data.addAuthor("Marco Martin", + I18N_NOOP("Maintainer"), + "mart@notmart.org", + "http://www.notmart.org"); + + data.setTranslator(I18N_NOOP("_: NAME OF TRANSLATORS\\nYour names") + ,I18N_NOOP("_: EMAIL OF TRANSLATORS\\nYour emails")); + + data.addCredit("Yurkovsky Andrey", + I18N_NOOP("For the Russian translation"), + "anyr@tut.by"); + data.addCredit("Jannick Kuhr", + I18N_NOOP("For the German translation"), + "jannick.kuhr@kdemail.net"); + data.addCredit("Jesús S Fernández Prieto (xgoan)", + I18N_NOOP("For the Spanish translation"), + "jesus@infodps.com"); + data.addCredit("Motsyo Vitaliy", + I18N_NOOP("For the Ukrainian translation"), + "vitalikmotsyo@gmail.com"); + data.addCredit("Laurent Hilsz", + I18N_NOOP("For the French translation"), + "laurent.hilsz@gmail.com"); + data.addCredit("Tommi Nieminen", + I18N_NOOP("For the Finnish translation"), + "translator@legisign.org"); + data.addCredit("Matija Šuklje", + I18N_NOOP("For the Slovenian translation"), + "matija.suklje@rutka.net"); + data.addCredit("Tomasz Argasiński", + I18N_NOOP("For the Polish translation"), + "targasinski@o2.pl"); + data.addCredit("Ewerton de A. Dutra" + I18N_NOOP("For the Polish translation"), + "ea.dutra@gmail.com"); + + + data.addCredit("Oswald Buddenhagen and Stephan Kulow", + I18N_NOOP("For the Switch user code from KDM"), + "ossi@kde.org and coolo@kde.org"); + + data.addCredit("The whole KBFX team", + I18N_NOOP("For some inspirations here and there."), + "http://www.kbfx.org"); + + data.addCredit("Seb Ruiz", + I18N_NOOP("For some code taken from Amarok's statistics list view"), + "me@sebruiz.net"); + + KIconLoader *iconLoader = KGlobal::iconLoader(); + data.setProgramLogo(iconLoader->loadIcon("kmenu", KIcon::Panel).convertToImage()); + + KAboutApplication dialog(&data); + dialog.exec(); +} + + +void TastyMenu::help() +{ + KApplication::kdeinitExec("khelpcenter", "help:/tastymenu"); +} + + +void TastyMenu::preferences() +{ + if(KConfigDialog::showDialog("settings")) + return; + + Appearance *appearanceDialog = new Appearance(0, "appearance" ); + Behaviour *behaviourDialog = new Behaviour(0, "behaviour" ); + + KConfigDialog *dialog = new KConfigDialog(this, "settings", prefSkel, + KDialogBase::Tabbed, + KConfigDialog::Default| + KConfigDialog::Ok| + KConfigDialog::Apply| + KConfigDialog::Cancel ); + dialog->addPage(appearanceDialog, i18n("Appearance"), "appearance" ); + dialog->addPage(behaviourDialog, i18n("Behaviour"), "behaviour" ); + connect( dialog, SIGNAL(settingsChanged()), + this, SLOT(updateConfiguration()) ); + dialog->show(); +} + +void TastyMenu::setGlobalAccel( bool global ) +{ + globalAccel = new KGlobalAccel(this); + globalAccel->insert("Toggle Tasty Menu", i18n("Toggle Tasty Menu"), + i18n("Toggle Tasty Menu"), + 0, 0, this, SLOT(clickSlot())); + globalAccel->readSettings(); + globalAccel->updateConnections(); + + //deactivate or reactivate the global alt+f1 shotcut for kmenu + if( global ) + { + if( !kickerConf ) + kickerConf = KGlobal::config(); + + kickerConf->setGroup("Global Shortcuts"); + QString kmenuShortcut = kickerConf->readEntry("Popup Launch Menu", "default(Alt+F1)"); + if( kmenuShortcut=="none" ) + return; + QString tastyMenuShortcut = kickerConf->readEntry("Toggle Tasty Menu", ""); + KShortcut shortCutKey(tastyMenuShortcut); + kickerConf->writeEntry("Popup Launch Menu", "none"); + kickerConf->writeEntry("Toggle Tasty Menu", kmenuShortcut); + kickerConf->sync(); + + } + else + { + if( !kickerConf ) + kickerConf = KGlobal::config(); + kickerConf->setGroup("Global Shortcuts"); + kickerConf->deleteEntry("Popup Launch Menu"); + kickerConf->sync(); + } +} + + +void TastyMenu::updateConfiguration() +{ + kickerConf->setGroup("buttons"); + _showBigToolTip = kickerConf->readBoolEntry("EnableIconZoom", true); + + menuHandler->updateConfig(); + setGlobalAccel(prefSkel->overrideAltF1()); + _menuButtonLabel = prefSkel->menuButtonLabel(); + + if(_menuButtonLabel.isEmpty()) + button -> setTextLabel(i18n("Menu"), false); + else + button -> setTextLabel(_menuButtonLabel, false); + + button -> setUsesTextLabel(prefSkel->menuButtonLabelType() + != Prefs::EnumMenuButtonLabelType::MenuButtonNone); + loadMenuButtonIcon(); + + _newAppsNotification = prefSkel->newAppsNotification(); + + _toolTipTitle = prefSkel->toolTipTitle(); + + if( !_toolTipTitle.isEmpty() ) + menuTip->setTitle(_toolTipTitle); +} + + +void TastyMenu::setNewApplicationsMessage( int number ) +{ + if( number <= 0 ) + { + menuTip ->setMessage(""); + } + else + menuTip ->setMessage(i18n("There is one new installed application", + "There are %n new installed applications", number)); + /*else if( number == 1) + menuTip ->setMessage(i18n("There is one new installed application")); + else + menuTip ->setMessage(i18n("There are")+" " + QString().setNum(number) +" "+ i18n("new installed applications"));*/ + + if( _showBigToolTip && number > numNewApplications ) + menuTip->notify( menupos( menuTip ) ); + + numNewApplications = number; +} + + +int TastyMenu::widthForHeight(int height) const +{ + int buttonWidth = width(); + if( position() == pTop || position() == pBottom ) + { + button -> setTextPosition(QToolButton::BesideIcon); + if( prefSkel->menuButtonLabelType() + != Prefs::EnumMenuButtonLabelType::MenuButtonNone ) + return ((button->fontMetrics()).width(button->textLabel())) + _iconsize + 10; + else + return height; + } + else + return buttonWidth; +} + +int TastyMenu::heightForWidth(int width) const +{ + int buttonHeight = height(); + if( position() == pLeft || position() == pRight ) + { + if( prefSkel->menuButtonLabelType() + != Prefs::EnumMenuButtonLabelType::MenuButtonNone ) + { + button -> setTextPosition(QToolButton::BelowIcon); + return ((button->fontMetrics()).height()) + _iconsize + 10; + } + else + return width; + } + else + return buttonHeight; +} + +void TastyMenu::resizeEvent(QResizeEvent *e) +{ + int newHeight = e->size().height(); + button->setFixedHeight(newHeight); + button->setFixedWidth(e->size().width()); + + if( newHeight >= KIcon::SizeMedium ) + button->setUsesBigPixmap(true); + else + button->setUsesBigPixmap(false); + + + loadMenuButtonIcon(); +} + +void TastyMenu::mousePressEvent(QMouseEvent *e) +{ + menuTip->hideTip(); + + if(e->button()==RightButton) + { + KPopupMenu menu(this); + + menu.insertTitle("Tasty Menu"); + menu.insertItem(SmallIcon("kmenu"), i18n("&About"), 1); + menu.insertItem(SmallIcon("help"), i18n("&Help"), 2); + menu.insertItem(SmallIcon("kmenuedit"), i18n("&Edit Menu"), 3); + if( _newAppsNotification ) + menu.insertItem(SmallIcon("locationbar_erase"), i18n("&Clear recently installed applications list"), 4); + menu.insertSeparator(); + menu.insertItem(SmallIcon("configure_shortcuts"), i18n("&Configure Global Shortcuts..."), 5); + menu.insertItem(SmallIcon("configure"), i18n("&Configure..."), 6); + + int choice = menu.exec(this->mapToGlobal(e->pos())); + + switch( choice ) + { + case 1: + about(); + break; + + case 2: + help(); + break; + + case 3: + KRun::runCommand ("kmenuedit"); + break; + + case 4: + menuHandler->clearNewInstalledApplications(); + setNewApplicationsMessage(0); + menuHandler->slotUpdateApplications(); + break; + case 5: + { + kickerConf->sync(); + KKeyDialog::configure(globalAccel); + globalAccel->writeSettings(kickerConf); + globalAccel->updateConnections(); + kickerConf->sync(); + break; + } + case 6: + preferences(); + break; + + default: + break; + } + } +} + +void TastyMenu::enterEvent( QEvent * e ) +{ + e=e; + if( _showBigToolTip && !menuHandler->isVisible() ) + menuTip->showTip(menupos(menuTip)); + + KPanelApplet::enterEvent(e); +} + +void TastyMenu::leaveEvent( QEvent * e ) +{ + e=e; + menuTip->hideTip(); + + KPanelApplet::leaveEvent(e); +} + +extern "C" +{ + KPanelApplet* init( QWidget *parent, const QString& configFile) + { + KGlobal::locale()->insertCatalogue("tastymenu"); + return new TastyMenu(configFile, KPanelApplet::Normal, + KPanelApplet::About | KPanelApplet::Help | KPanelApplet::Preferences, + parent, "tastymenu"); + } +} diff --git a/src/tastymenu.desktop b/src/tastymenu.desktop new file mode 100644 index 0000000..475d8c0 --- /dev/null +++ b/src/tastymenu.desktop @@ -0,0 +1,10 @@ +[Desktop Entry] +Type=Plugin +Encoding=UTF-8 +Comment=A KMenu replacement + +Name=Tasty Menu + +Icon=kmenu +X-KDE-Library=tastymenu_panelapplet +X-KDE-UniqueApplet = false diff --git a/src/tastymenu.h b/src/tastymenu.h new file mode 100644 index 0000000..66900fe --- /dev/null +++ b/src/tastymenu.h @@ -0,0 +1,165 @@ +/*************************************************************************** + * Copyright (C) 2006 by Marco Martin * + * notmart@gmail.com * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the Lesser GNU General Public * + * License as published by the Free Software Foundation; * + * either version 2 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, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ + + +#ifndef TASTYMENU_H +#define TASTYMENU_H + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "menuhandler.h" +#include "prefs.h" +#include "tastytooltip.h" +#include "tastybutton.h" + +class TastyMenu : public KPanelApplet +{ + Q_OBJECT + +public: + /** + * Construct a @ref KPanelApplet just like any other widget. + * + * @param configFile The configFile handed over in the factory function. + * @param Type The applet @ref type(). + * @param actions Standard RMB menu actions supported by the applet (see @ref action() ). + * @param parent The pointer to the parent widget handed over in the factory function. + * @param name A Qt object name for your applet. + **/ + TastyMenu(const QString& configFile, Type t = Normal, int actions = 0, + QWidget *parent = 0, const char *name = 0); + /** destructor */ + ~TastyMenu(); + + /** + * Retrieve a suggested width for a given height. + * + * Every applet should reimplement this function. + * + * Depending on the panel orientation the height (horizontal panel) or the + * width (vertical panel) of the applets is fixed. + * The exact values of the fixed size component depend on the panel size. + * + * On a horizontal panel the applet height is fixed, the panel will + * call @ref widthForHeight(int height) with @p height + * equal to 'the fixed applet height' + * when laying out the applets. + * + * The applet can now choose the other size component (width) + * based on the given height. + * + * The width you return is granted. + **/ + virtual int widthForHeight(int height) const; + /** + * @return A suggested height for a given width. + * + * Every applet should reimplement this function. + * + * Depending on the panel orientation the height (horizontal panel) or the + * width (vertical panel) of the applets is fixed. + * The exact values of the fixed size component depend on the panel size. + * + * On a vertical panel the applet width is fixed, the panel will + * call @ref heightForWidth(int width) with @p width + * equal to 'the fixed applet width' + * when laying out the applets. + * + * The applet can now choose the other size component (height) + * based on the given width. + * + * The height you return is granted. + **/ + virtual int heightForWidth(int width) const; + /** + * Is called when the user selects "About" from the applets RMB menu. + * Reimplement this function to launch a about dialog. + * + * Note that this is called only when your applet supports the About action. + * See @ref Action and @ref KPanelApplet(). + **/ + virtual void about(); + /** + * Is called when the user selects "Help" from the applets RMB menu. + * Reimplement this function to launch a manual or help page. + * + * Note that this is called only when your applet supports the Help action. + * See @ref Action and @ref KPanelApplet(). + **/ + virtual void help(); + /** + * Is called when the user selects "Preferences" from the applets RMB menu. + * Reimplement this function to launch a preferences dialog or kcontrol module. + * + * Note that this is called only when your applet supports the preferences action. + * See @ref Action and @ref KPanelApplet(). + **/ + virtual void preferences(); + +protected: + virtual void resizeEvent(QResizeEvent *); + virtual void mousePressEvent(QMouseEvent *e); + virtual void enterEvent( QEvent * e ); + virtual void leaveEvent( QEvent * e ); + +private: + KSharedConfig *kConfig; + Prefs *prefSkel; + KConfig *kickerConf; + MenuHandler *menuHandler; + TastyButton *button; + TastyToolTip *menuTip; + QPoint menupos(QWidget *widget); + KGlobalAccel *globalAccel; + KIconLoader *iconLoader; + int numNewApplications; + + + QString _menuButtonLabel; + QString _menuButtonIcon; + QString _toolTipTitle; + bool _newAppsNotification; + int _iconsize; + bool _showBigToolTip; + + void setGlobalAccel( bool global ); + void loadMenuButtonIcon(); + +private slots: + + void clickSlot(); + void updateConfiguration(); + void setNewApplicationsMessage( int number ); + void setButtonUp(){ button->setDown(false); } +}; + +#endif diff --git a/src/tastymenu.kcfg b/src/tastymenu.kcfg new file mode 100644 index 0000000..792bbe7 --- /dev/null +++ b/src/tastymenu.kcfg @@ -0,0 +1,188 @@ + + + + + + + + + 22 + 16 + 64 + + + + 22 + 16 + 64 + + + + 22 + 16 + 64 + + + + 16 + 16 + 48 + + + + + + + + + + + + MenuButtonText + + + + + + + + + + + + + + + + + Icon + + + + + + kmenu + + + + + true + + + + + + + + + 70 + 10 + 90 + + + + + 70 + 10 + 90 + + + + + false + + + + + false + + + + + + + false + + + + false + + + + + false + + + + + true + + + + + true + + + + + false + + + + + false + + + + + + + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + false + + + + 400 + + + + 300 + + + + 0 + + + + 0 + + + \ No newline at end of file diff --git a/src/tastymenu.lsm b/src/tastymenu.lsm new file mode 100644 index 0000000..44d525c --- /dev/null +++ b/src/tastymenu.lsm @@ -0,0 +1,16 @@ +Begin3 +Title: TastyMenu -- Some description +Version: 0.1 +Entered-date: +Description: +Keywords: KDE Qt +Author: Marco Martin +Maintained-by: Marco Martin +Home-page: +Alternate-site: +Primary-site: ftp://ftp.kde.org/pub/kde/unstable/apps/utils + xxxxxx tastymenu-0.1.tar.gz + xxx tastymenu-0.1.lsm +Platform: Linux. Needs KDE +Copying-policy: GPL +End diff --git a/src/tastytooltip.cpp b/src/tastytooltip.cpp new file mode 100644 index 0000000..27f6a12 --- /dev/null +++ b/src/tastytooltip.cpp @@ -0,0 +1,100 @@ +/*************************************************************************** + * Copyright (C) 2006 by Marco Martin * + * notmart@gmail.com * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU Library General Public License as published by * + * the Free Software Foundation; either version 2 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, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#include "tastytooltip.h" + +#include +#include +#include +#include +#include + + +TastyToolTip::TastyToolTip( QWidget * parent,const char * name, WFlags fl) + : QWidget(parent, name, fl|WX11BypassWM ) +{ + iconName = "kmenu"; + tastyToolTipLayout = new QVBoxLayout( this, 0, 0, "tastyToolTipLayout"); + toolTipWidget = new TastyToolTipWidget(this); + tastyToolTipLayout->addWidget(toolTipWidget); +} + + +void TastyToolTip::loadIcon( QString icon ) +{ + iconName = icon; + KIconLoader *iconLoader = KGlobal::iconLoader(); + QPixmap btnPixmap(iconLoader->loadIcon(icon, KIcon::Panel, KIcon::SizeHuge)); + + if( !btnPixmap.isNull() ) + toolTipWidget->iconPixmap->setPixmap(btnPixmap); + else + { + kdDebug() << "Failed to load custom icon" << endl; + toolTipWidget->iconPixmap->setPixmap(iconLoader->loadIcon("kmenu", KIcon::Panel, KIcon::SizeHuge)); + } +} + +TastyToolTip::~TastyToolTip() +{ +} + + +void TastyToolTip::showTip(const QPoint & point) +{ + move(point); + QTimer::singleShot(250, this, SLOT(show())); +} + +void TastyToolTip::show() +{ + QButton *button = dynamic_cast(parent()); + if(button && button->hasMouse() && !button->isDown()) + QWidget::show(); +} + +void TastyToolTip::hideTip( ) +{ + QTimer::singleShot(250, this, SLOT(hide())); +} + +void TastyToolTip::notify(const QPoint & point ) +{ + move(point); + show(); + QTimer::singleShot(5000, this, SLOT(hide())); +} + +void TastyToolTip::setMessage( QString message ) +{ + KIconLoader *iconLoader = KGlobal::iconLoader(); + toolTipWidget->MessageLabel->setText(message); + + if( message.length() > 0 ) + toolTipWidget->iconPixmap->setPixmap(iconLoader->loadIcon("messagebox_info", KIcon::Panel, KIcon::SizeHuge)); + else + loadIcon(iconName); +} + +void TastyToolTip::setTitle( QString title ) +{ + if( !title.isEmpty() ) + toolTipWidget->appNameLabel->setText( title ); +} + diff --git a/src/tastytooltip.h b/src/tastytooltip.h new file mode 100644 index 0000000..aea0838 --- /dev/null +++ b/src/tastytooltip.h @@ -0,0 +1,59 @@ +/*************************************************************************** + * Copyright (C) 2006 by Marco Martin * + * notmart@gmail.com * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU Library General Public License as published by * + * the Free Software Foundation; either version 2 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, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#ifndef TASTYTOOLTIP_H +#define TASTYTOOLTIP_H + +#include +#include + +#include "tastytooltipwidget.h" + +/** + @author Marco Martin +*/ +class TastyToolTip : public QWidget +{ +public: + TastyToolTip( QWidget * parent=0,const char * name=0, WFlags fl=WType_TopLevel); + + ~TastyToolTip(); + + void showTip(const QPoint & point); + void hideTip( ); + void loadIcon( QString iconName ); + void notify(const QPoint & point ); + void setMessage( QString message ); + void setTitle( QString title ); + +protected: + virtual void mousePressEvent( QMouseEvent * e ){e=e;hide();} + +private: + + QString iconName; + TastyToolTipWidget * toolTipWidget; + QVBoxLayout *tastyToolTipLayout; + +public slots: + virtual void show(); + +}; + +#endif diff --git a/src/tastytooltipwidget.ui b/src/tastytooltipwidget.ui new file mode 100644 index 0000000..faacb2e --- /dev/null +++ b/src/tastytooltipwidget.ui @@ -0,0 +1,109 @@ + +TastyToolTipWidget + + + TastyToolTipWidget + + + + 0 + 0 + 391 + 127 + + + + Tasty Menu + + + + unnamed + + + 0 + + + 0 + + + + frame5 + + + StyledPanel + + + Raised + + + + unnamed + + + + iconPixmap + + + + 0 + 0 + 0 + 0 + + + + + 64 + 64 + + + + true + + + + + layout2 + + + + unnamed + + + + appNameLabel + + + + 14 + 1 + + + + <b>Tasty Menu</b> + + + + + DescLabel + + + Applications, tasks and desktop sessions + + + + + MessageLabel + + + + + + + + + + + + + diff --git a/tastymenu.spec b/tastymenu.spec new file mode 100644 index 0000000..6833ed0 --- /dev/null +++ b/tastymenu.spec @@ -0,0 +1,211 @@ +%define version 1.0.7 +%define name tastymenu +%define prefix %(kde-config --prefix) + +Name: %{name} +Version: %{version} +Release: 1 +Vendor: notmart@gmail.com +Url: http://kdelook.org/content/show.php?content=27968 +License: GPL +Summary: A Kmenu replacement +Group: System/GUI/KDE +Packager: Marco Martin +BuildRoot: %{_tmppath}/%{name}-root +Source: %{name}-%{version}.tar.bz2 + +%description +Tasty Menu is a KMenu replacement aiming to provide the maximum usability, or at least to be a testbed for usability concepts and ideas for a future KDE menu. + +%prep +%setup + + +%build +./configure --enable-final --disable-debug --prefix=%{prefix} +make + +%install +make install DESTDIR=%{buildroot} +cd %{buildroot} +find . -type d | sed '1,2d;s,^\.,\%attr(-\,root\,root) \%dir ,' > /var/tmp/file.list.%{name} +find . -type f | sed 's,^\.,\%attr(-\,root\,root) ,' >> /var/tmp/file.list.%{name} +find . -type l | sed 's,^\.,\%attr(-\,root\,root) ,' >> /var/tmp/file.list.%{name} + + +%clean +rm -rf %{buildroot} +rm -rf /var/tmp/file.list.%{name} + +%post -p /sbin/ldconfig +%postun -p /sbin/ldconfig +%files -f /var/tmp/file.list.%{name} +%defattr(0644, root, root) + + +%changelog +*Wed Feb 6 2008 notmart@gmail.com +1.0.7 +-Fixed a typo in the config dialog + +*Thu Dec 13 2007 notmart@gmail.com +Tasty Menu 1.0.6 +-Now all the applications should be displayed again +-Brazillian portoguese translation by Ewerton de A. Dutra + +*Thu Nov 22 2007 notmart@gmail.com +Tasty Menu 1.0.5 +-fixed the about box +-some fixes in packaging +-now it's installed in the right directory (for example in /usr/lib/kde3 instead of /usr/lib) + +*Sat Nov 17 2007 notmart@gmail.com +Tasty Menu 1.0.4 +-updated French translation +-updated Slovenian translation +-fixed a crash on lright mouse button click on search field +-the old memory leak should be somewhat mitigated + +*Wed Oct 24 2007 notmart@gmail.com +Tasty Menu 1.0.3 +-Fixed a bug that occurred when clicking on the search result if the menu mode was "recent/most used applications" +-Polish translation by Tomasz Argasiński +-Some fixes in the Slovenian translation +-description text shouldn't become too little + +*Wed Oct 17 2007 notmart@gmail.com +Tasty Menu 1.0.2 +-Slovenian translation by Matija Šuklje +-Fixed a little build problem + +*Thu Oct 11 2007 notmart@gmail.com +Tasty Menu 1.0.1 +-Menu and tooltip no longer steals mouse and keyboard input +-Better management of the tooltip +-No separators when the list is in alphabetical order +-Finnish translations by Tommi Nieminen + +*Wed Sep 19 2007 notmart@gmail.com +Tasty Menu 1.0 +-Not having particular problems, released it as 1.0 +-French translation by Laurent Hilsz + +*Sun Sep 09 2007 notmart@gmail.com +Tasty Menu 1.0_rc2 +-Rearranging the items of the left column by drag and drop works again +-the layout should be a little bit more polished +-Updated Ukrainian translation + +*Wed Aug 22 2007 notmart@gmail.com +Tasty Menu 1.0_rc1: +-Search field should be a lot faster +-Only strings with at least three characters are being searched (necessary for the speedup) +-Corrected a bug that prevented to search into application descriptions + +*Tue Aug 21 2007 notmart@gmail.com +Tasty Menu 0.9.1: +-Ukrainian translation by Motsyo Vitaliy + +*Sat Aug 04 2007 notmart@gmail.com +Tasty Menu 0.9: +-"Add to desktop" option in menuitems +-Drag and drop from menu to desktop +-Option to set different icons sizes in the three columns +-the button text label should always be of a visible color +-most used/recently used applications list updates in realtime +-clear most used/recently used applications list + -(warning1: deleting one list deletes also the other) + -(warning2: if you use opensuse you must have kickoff reverted to classic kmenu in order to use the recently used/most used lists) +-updated russian and german translations + +*Sun May 13 2007 notmart@gmail.com +Tasty Menu 0.8.2: +-Spanish translation by Jesus S Fernandez Prieto +-button background goes highlighted even if kicker doesn't have neither a background pixmap or transparent background +-menu icon (including on mouseover effect) changes immediately when the user sets a new icon +-highlighted button background also when kicker has no transparency or backgound image +-searching should be a little bit faster (still far from optimal) + +*Thu May 03 2007 notmart@gmail.com +Tasty Menu 0.8.1: +-German translation by Jannick Kuhr +-Drag and drop enabled only in "Favourite applications" mode (otherwise it destroys the favourite list!) + +*Sun Apr 29 2007 notmart@gmail.com +Tasty Menu 0.8: +-Favourite applications list can be rearranged via drag and drop +-new installed programs notification should be more reliable (some inspiration from Kickoff :P) + -it finds also programs installed by other users + -old programs shouldn't be no more erroneusly listed +-updated russian and italian translations +-when there is only one search result, pressing enter executes it (and the search terms are cleared) +-added button to clear the recent documents list +-application descriptions can be removed also from the left column +-easier to start a program with a single mouse click when the tree is collapsed +-groups with only one item can be configured to be shown +-items can be ordered alphabetically (with applications after the groups) +-better managing of the button size (especially within a vertical panel) and when the menu text is disabled the button is exactly square +-the button icon is highlighted on mouse over according to the global settins +-in the search results the tree is always open + +*Sat Apr 06 2007 notmart@gmail.com +Tasty Menu 0.7.1: +-Russian translation by Yurkovsky Andrey +-corrected a possible compilation problem +-application descriptions are hidden also from the first column +-button width updated again when the text label is turned off + +*Mon Apr 02 2007 notmart@gmail.com +Tasty Menu 0.7: +-configurable button text label +-configurable menu button pixmap +-item descriptions can be turned off +-optional "save session" entry under the user button +-configurable popup text +-the button no longer appears on mouse over, instead the background becomes lighter on mouse over and darker on mouse press +-when the user clicks on an empty area the last item is no longer activated +-Italian translation + +*Tue Feb 20 2007 notmart@gmail.com +Tasty Menu 0.6.5: +-fixed menu placement when it's on the right side of the screen +-now both the recent applications list and the most used list works +-some cosmetic improvements in configuration dialog +-don't reopen the current submenu when the user clicks again on an already open category +-now clicking on categories of right column expandes/collapses them +-"always collapsed categories" option available also if "show tree expanders" is off +-fixed compilation issues with autoconf >= 2.60 + +*Mon Sep 25 2006 notmart@gmail.com +Tasty Menu 0.6: +-command to clear the recently installed applications list +-Application categories cand be made collapsable and appear collapsed by default +-left mouse button menu on menuitems that lets to add/remove bookmarks and edit the proper submenu with kmenuedit +-the add bookmark icons should work better +-Fixed a bug that prevented svg-only icon themes to display correctly +-Added a very basic Strigi integration +-When resizing the menu in window mode the size of the three columns are updated correcly +-Fixed a crash when a no longer existent app is in more used / recently used list +-Fixed another probable cause of crash + +*Mon Aug 7 2006 notmart@gmail.com +-fixed another crash + +*Wed Aug 2 2006 notmart@gmail.com +-Lock session button works again + +*Tue Aug 1 2006 notmart@gmail.com +Tasty Menu 0.5: +-First RPM release +-(Hopefully) fixed some other crashes +-the big tooltip is enabled only when also the other kicker's big tooltip are enabled too +-the menu can be made a normal window (the upper right arrow toolbutton) +-the highlighted item in the middle column is always the currently open category +-busy mouse cursor when searching +-corrected a bug that prevented to use the left column after a search in ceratin cases +-added a "Configure global shortcuts..." command in the LMB menu +-user button and "switch user" buttons merged in one button +-added a "Run program..." button +-open submenus on timeout also when the mouse button is not pressed, so now when the mouse button is down the delay is 250ms when is not pressed 1 sec +-clear button on the right: it is dramatically nicer looking now :) +