tuxcards/000755 000765 000024 00000000000 11420350116 013000 5ustar00alexstaff000000 000000 tuxcards/AUTHORS000444 000765 000024 00000000045 11420350116 014045 0ustar00alexstaff000000 000000 Alexander Theel tuxcards/COPYING000444 000765 000024 00000035433 11420350116 014041 0ustar00alexstaff000000 000000 GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 675 Mass Ave, Cambridge, MA 02139, 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 tuxcards/greetings.tux000444 000765 000024 00000033003 11420350116 015526 0ustar00alexstaff000000 000000 TuxCards - News TuxCards - News

Welcome to TuxCards Version 1.2

Finally, it is time to release version 1.2 of TuxCards - The Notebook for TuxFreaks.

What has happened in between?

Besides the development of new features, TuxCards did appear within several magazines:

  • linux User, (German Edition), Sep. 2003
  • Linux Magazine (English Edition - Canada), Oct. 2003
  • Linux Magazine, "World Freesoft Collection" (Japanese Edition), Dec. 2003
  • easy Linux, (German Edition), Feb. 2004
  • Linux Format, issue no. 54 (UK magazine), June 2004

The development of this release took much more time than was planned. I believe stability and reliability are two of the most important goals for software production, hence a lot of time was spent improving the code underneath the visible application.
Now, I am proud to present a good featured and stable TuxCards 1.2.

Thank you to everyone who has reported ideas or hints on how to simplify the usage of TuxCards. Even though "picture import" is not done, most of the wanted features are included.
I am especially grateful for the people who showed me on how to encrypt data.

Every week at least two dozen messages arrive with suggestions, bug reports and gratitude. I am very sorry that not every email could be answered, yet.

Now, what is new in 1.2?

A lot of minor changes provide an easier overall usage of TuxCards. For details look at "Improvments in Detail"; here are some key features:

  • Entry History. It does work like a history within a web browser; the last visited entries are remembered.
  • Encryption using MD5 and BlowFish. The encrypted data is stored using Base64 encoding.
  • Selection of information format (rtf, txt) for newly created entries.
  • Inplace renaming of entries within the tree.
  • Customized line break mode. Keys for creating a new line or new paragraph within the editor may be selected.
  • Much better paste algorithm for pasting text within the editor.
  • Improved HTML export.
  • Several new keyboard shortcuts.
  • Nice Look & Feel (supporting keramic style and customizable icons)
    An alternative set of icons may already be downloaded from www.tuxcards.de.
  • Increased overall stability.

If you come up with an idea on who to make the usage of TuxCards even easier, if you know of a feature that you would like to see within a further version or if you created a wonderful iconset for TuxCards don't hesitate to mail to tuxcards@gmx.net.

Enjoy TuxCards,
Alexander Theel

]]>
Improvements in Detail (V 1.2)

Detailed Feature List and bugs that have been removed:

  • Entries
    • The information format (rtf, txt) of new entries can be selected at creation time.
    • If a new entry with an empty name is created, a dialog box asks wether the user really wants to asign an empty name.
    • History function which remembers the last selected entries.
      Keyboard shortcuts: ALT+Cursor Left, ALT+Cursor Right.
    • Encryption of entries with secure algorithms: MD5 and BlowFish. The encrypted data is stored using Base64 encoding.
    • Bug removal within expired notes dialog. In a certain case an endless loop was executed.

  • Tree
    • Inplace renaming of entries with F2.
    • Accessing context menu via keyboard.

  • Editor
    • Improved paste algorithm. Text that is selected with the mouse (i.e. within another program, xterm, etc.) may be inserted into the editor.
    • Shortcuts for bold (CTRL+B), italic (CTRL+I), underline (CTRL+U), select all (CTRL+A).
    • Customized line break mode. Keys for creating a new line or new paragraph within the editor may be adapted in the options dialog.
      Thus CTRL+Enter may be used for generating a new paragraph or a new line within an existing paragraph.

  • I/O
    • Size of file written to disk is decreased by usage of CDATA sections within the XML output.
    • HTML export does write the files of the individual entries within a separat directory.
    • HTML export: If entries with identical names exist, files with the same name were produced, thus one file was overwritten by another one. This does not happen any more.
    • HTML export: Indentation within the tree-html-file has been decreased. Now, the view of trees with large entry names is much more beautyful and easier to read.
    • HTML export: If an entry name did include the character '/' which is not valid within filenames, then the HTML export of that entry did not work properly.

  • GUI
    • Included support for keramic style.
    • Customizable icons. The toolbar and menu icons may be exchanged at will. Simply, enter a directory within the options-dialog where your icons are located and restart TuxCards. Doing so, one icon or all icons may be exchanged.
      The following formats are supported: xpm, png, jpg/jpeg, bmp, xbm, pnm, mng.
      Icons with the following file-names and one of the file-endings above are searched for:
      "fileopen", "filenew", "filesave", "fileprint", "exit", "addTreeElement", "changeProperty", "delete", "lock", "unlock", "find", "redo", "undo", "editcut", "editcopy", "editpaste", "text_bold", "text_italic", "text_under", "text_color", "text_left", "text_center", "text_right", "text_block", "upArrow", "downArrow", "back", "forward".

  • Misc
    • Stability improvement, a great number of NULLPTR checks has been inserted.
    • Before searching, the currently edited entry is saved within the internal database. Thus, changes within that entry that would result in different results when searching are recognized.
    • Shortcuts - for word count (CTRL+W), date insertion (CTRL+D), time insertion (CTRL+T), searching (CTRL+F), switching between tree and editor (F5) - are added.
    • The toolbars may be hidden. This reduces screen footprint.
]]>
Keyboard Actions

Hotkeys within TuxCards

CTRL+S Save
F5 Change Keyboard Input between 'tree' and 'editor'

ALT + Cursor LEFT History Backwards
ALT + Cursor RIGHT History Forward

CTRL+W Word Count
CTRL+D Date Insertion
CTRL+T Time Insertion

CTRL+F Find / Search


Within the tree (left side):
INSERT Insert a new Entry
DELETE Removes an Entry
F2 Inplace Renaming of the current active Entry
MENU (The menu key is located just left to the right CTRL-key.)
Pops up the context menu.


Within the editor (right side):
MENU (The menu key is located just left to the right CTRL-key.)
Pops up the context menu.

CTRL+ENTER / RETURN - classical mode for inserting a simple linebreak
- modern mode for inserting a new paragraph

ENTER / RETURN - classical mode for inserting a new paragraph
- modern mode for inserting a simple linebreak

CTRL+X Cut
CTRL+C Copy
CTRL+V Paste

CTRL+Z Undo
CTRL+Y Redo

CTRL+A Select All

CTRL+K Kill whole Line

CTRL+B Bold
CTRL+I Italic
CTRL+U Underline

]]>
Requirements

Requirements:

You certainly need to use qt3.x.x. If you want to use RTF, I personally recommend to install qt3.0.5, at least. Since qt3.0.4 does have a bug in formating linebreaks.

I strongly recommend to use qt3.1.1 or above since the copying of text between notes has improved a lot.

]]>
To come in Version 1.3

What is planned for version 1.3?

  • Be surprised!

If you want to stay up to date, I can inform you as soon as the next release is available. Just send an email with the subject "subscribe" to tuxcards@gmx.net.

]]>
Donations

TuxCards 1.2 is published as Donationware

You may use it freely and without charge as stated within the GPL.

Do you like TuxCards and you want to enable the development of new features? Or do you want to ensure a high quality of future releases or simply compensate for ftp-server costs? Then you are welcome to donate EUR 5 to the author. (At your wish US$ 5 or an equivalent amount in your currency.)

Please, use www.tuxcards.de/donations.html for a secure donation via internet.

Or simply send a letter with your amount to

Alexander Theel
Am Trommlerbusch 24 d
02708 Loebau
Germany

]]>
tuxcards/INSTALL000444 000765 000024 00000004011 11420350116 014023 0ustar00alexstaff000000 000000 Installation ============ These are generic installation instructions. You must have qt4.x.x installed. Preferable qt4.4.3 or above. To compile a qt-application make sure that the variables QTDIR, QT_LIBRARY_PATH and QMAKESPEC are set. QTDIR pointing to the qt directory and QT_LIBRARY_PATH to the qt library path. QMAKESPEC must be set to the platform and compiler combination that you are using on your system. For example, if you are using Solaris and g++, you would set this environment variable to "solaris-g++". See your "../qt/mkspecs/" directory for a suitable combination. For more detailed instructions see the qt installation guide and the qmake documentation. The simplest way to compile this package is: 1. `cd' to the directory containing the package's source code and type `qmake tuxcards.pro' to configure the package for your system. This will create the 'Makefile'. 2. Type `make' to compile the package. 3. Type `make install' to install the program, the flower files and the documentation. It might be the case that 'make install' prints an error. Don't worry about it and try to start the program. 4. You can remove the program binaries and object files from the source code directory by typing `make clean' or 'make distclean'. What do I do when ... 1. the program 'qmake' is not found? Solution: After a successfull installation of qt you need to add the qt bin-directory to your path. On most systems, the qt directory is located at '/usr/local/qt' or '/usr/lib/qt'. If your qt dir is at '/usr/lib/qt' you have to type > export QTDIR=/usr/lib/qt > export PATH=$PATH:$QTDIR/bin 2. the make process fails with a message like this: > /usr/bin/ld: cannot find -lqt >collect2: ld returned 1 exit status >make: *** [tuxcards] Error 1 ? Solution: Open the Makefile with an editor and edit it by hand. Exchange '-lqt' with '-lqt-mt'. Save your changes and start over the compilation process with 'make'. tuxcards/macOS_tuxcards.icns000444 000765 000024 00000007237 11420350116 016604 0ustar00alexstaff000000 000000 icnsis32[l JL$Wmp4UL8 )?8@3"&Z*JC@ jKX`d%6M}UEr sp܍ ФYۀ>P)3UA8$%\[l JK #Wqu$;8 8^״)08a '="&Z*y ? GW_'(3M[li]3RL}lQe%F-O+ <.9%(C[l JI Wz&  9+0s:6 .zC/y\3%~`m`\ 8J   s0   +K2  ?;%,Ns8mk L GJ?>EZ c.2yG`Igil32سؖ@@@@@@@@hh@@ ؑ hoh؏ ꍍh؍h@@hh؀س@؋@؄سhh@ ؉ h@hh‹@ŒŒ@h@o@@@@oo€@@oo@؀oo؅ سoӃ͂ͅ hhoӃ̈́ooӁ͆Ӝooo͉͜oooͅسؖ@@@@@@@@hh@k@kk kkؑ ̝hMh؏ h؍h@@hh؀س@؋@؄سhh@ ؉ h@hh@ @h @̑M@@ ̲@@M̅̀M؁@@M̂M@؀̲̄MM̂؅ سM hhMثMMثkMMMثkkMMMسؖ@@@@@@@@hh@ @   ؑ   h h؏  h؍h@@hh؀س@؋@؄سhh@ ؉ h@hh@ @h @@@  @@ ؁@@  @؀   ؅ س cc hh c  ccc  cc cl8mkicnV Btuxcards/README000444 000765 000024 00000000055 11420350116 013656 0ustar00alexstaff000000 000000 See file INSTALL for installing information. tuxcards/src/000755 000765 000024 00000000000 11420350116 013567 5ustar00alexstaff000000 000000 tuxcards/tuxcards.pro000555 000765 000024 00000012641 11420350116 015364 0ustar00alexstaff000000 000000 # TEMPLATE = app #lib QT += xml CONFIG += qt debug #warn_on release #release #staticlib #exists( $(QTDIR)/lib/libqt-mt* ) { # message( "Configuring for multi-threaded Qt..." ) # CONFIG += thread #} TARGET = tuxcards OBJECTS_DIR = ./output/bin MOC_DIR = ./output/moc UI_DIR = ./output/ui ICON = macOS_tuxcards.icns HEADERS += src/global.h \ src/version.h \ src/CCommandLineOptions.h \ src/utilities/crypt/BlowFish.h \ src/utilities/crypt/BlowFish2.h \ src/utilities/crypt/MD5.h \ src/utilities/crypt/StringCrypter.h \ src/utilities/strings.h \ src/utilities/base64/CBase64Coder.h \ src/utilities/CIconManager.h \ src/fontsettings.h \ src/CTuxCardsConfiguration.h \ src/information/IRemoveElementListener.h \ src/information/IParent.h \ src/information/CInformationElement.h \ src/information/CTreeInformationElement.h \ src/information/Path.h \ src/information/IView.h \ src/information/CInformationCollection.h \ src/information/xmlpersister.h \ src/information/htmlwriter.h \ src/information/IHistoryListener.h \ src/information/CInformationElementHistory.h \ src/informationExt/CCollectionModel.h \ src/gui/colorbar/CColorBar.h \ src/gui/cactusbar/cactus.h \ src/gui/cactusbar/cactusshoot.h \ src/gui/cactusbar/cactustools.h \ src/gui/cactusbar/imagemanager.h \ src/gui/cactusbar/CCactusBar.h \ src/gui/CTree.h \ src/gui/editor/CEditor.h \ src/gui/editor/CSingleEntryView.h \ src/gui/recentFileList/CRecentFileList.h \ src/gui/CMainWindow.h \ src/gui/dialogs/dateInputDialog/CDateInputDialog.h \ src/gui/dialogs/iconselectordialog/CIconSelectorItem.h \ src/gui/dialogs/iconselectordialog/CIconSelectorDialog.h \ src/gui/dialogs/propertyDialog/CPropertyDialog.h \ src/gui/dialogs/configurationDialog/CConfigurationDialog.h \ src/gui/dialogs/searchDialog/CSearchDialog.h \ src/gui/dialogs/searchDialog/CSearchPosition.h \ src/gui/dialogs/searchDialog/CSearchListItem.h \ src/gui/dialogs/searchDialog/CSearchListItemDelegate.h \ src/gui/dialogs/passwdDialog/CPasswdDialog.h \ src/gui/editor/CEncryptedEntryView.h SOURCES += src/main.cpp \ src/CCommandLineOptions.cpp \ src/utilities/crypt/BlowFish.cpp \ src/utilities/crypt/MD5.cpp \ src/utilities/crypt/StringCrypter.cpp \ src/utilities/strings.cpp \ src/utilities/base64/CBase64Coder.cpp \ src/utilities/CIconManager.cpp \ src/fontsettings.cpp \ src/CTuxCardsConfiguration.cpp \ src/information/informationformat.cpp \ src/information/CInformationElement.cpp \ src/information/CTreeInformationElement.cpp \ src/information/Path.cpp \ src/information/CInformationCollection.cpp \ src/information/xmlpersister.cpp \ src/information/htmlwriter.cpp \ src/information/CInformationElementHistory.cpp \ src/informationExt/CCollectionModel.cpp \ src/gui/colorbar/CColorBar.cpp \ src/gui/cactusbar/cactus.cpp \ src/gui/cactusbar/cactusshoot.cpp \ src/gui/cactusbar/cactustools.cpp \ src/gui/cactusbar/imagemanager.cpp \ src/gui/cactusbar/CCactusBar.cpp \ src/gui/CTree.cpp \ src/gui/editor/CEditor.cpp \ src/gui/editor/CSingleEntryView.cpp \ src/gui/recentFileList/CRecentFileList.cpp \ src/gui/CMainWindow.cpp \ src/gui/dialogs/dateInputDialog/CDateInputDialog.cpp \ src/gui/dialogs/iconselectordialog/CIconSelectorItem.cpp \ src/gui/dialogs/iconselectordialog/CIconSelectorDialog.cpp \ src/gui/dialogs/propertyDialog/CPropertyDialog.cpp \ src/gui/dialogs/configurationDialog/CConfigurationDialog.cpp \ src/gui/dialogs/searchDialog/CSearchDialog.cpp \ src/gui/dialogs/searchDialog/CSearchPosition.cpp \ src/gui/dialogs/searchDialog/CSearchListItem.cpp \ src/gui/dialogs/searchDialog/CSearchListItemDelegate.cpp \ src/gui/dialogs/passwdDialog/CPasswdDialog.cpp \ src/gui/editor/CEncryptedEntryView.cpp #FORMS = src/gui/dialogs/expiredElementsDialog/ExpiredElementsDialogInterface.ui \ FORMS = src/gui/dialogs/propertyDialog/IPropertyDialog.ui \ src/gui/dialogs/dateInputDialog/IDateInputDialog.ui \ src/gui/dialogs/iconselectordialog/ISelectorDialog.ui \ src/gui/dialogs/configurationDialog/IConfigurationDialog.ui \ src/gui/dialogs/searchDialog/ISearchDialog.ui \ src/gui/dialogs/passwdDialog/IPasswdDialog.ui RESOURCES += src/icons/icons.qrc RESOURCES += src/translations/translations.qrc TRANSLATIONS = src/translations/tuxcards_de.ts #target.path = /usr/local/bin/ #INSTALLS += target #documentation.path = /usr/local/doc/tuxcards/ #documentation.files = docs/* #documentation.files = src/gui/cactusbar/flowers/ #INSTALLS += documentation tuxcards/src/CCommandLineOptions.cpp000555 000765 000024 00000013032 11420350116 020140 0ustar00alexstaff000000 000000 /*************************************************************************** CCommandLineOptions.cpp - description ------------------- begin : Don Sep 19 2002 copyright : (C) 2002 by alex email : alex@rsh-318 ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #include #include "CCommandLineOptions.h" #include #include "CTuxCardsConfiguration.h" #include "./information/xmlpersister.h" #include "./information/htmlwriter.h" #include "version.h" // ------------------------------------------------------------------------------- CCommandLineOptions::CCommandLineOptions( int argc, char** argv ) // ------------------------------------------------------------------------------- { this->argc=argc; this->argv=argv; QString option = argv[1]; if ( option == "-e" ) { if ( (argc > 2) && (QString( argv[2] ) == "html") ) { if ( argc <= 4 ) htmlExport( argc==4 ? argv[3] : "" ); else if ( argc == 5 ) htmlExport( argv[3], argv[4] ); else printUsage(); } else { printUsage(); } exit(0); } else if ( option == "-v" ) { std::cout << "Tuxcards - The Notebook for Tuxfreaks" << std::endl << TUX_VERSION << std::endl << "www.tuxcards.de" << std::endl << "written by Alexander Theel" << std::endl; exit(0); } else if ( option == "-h" ) { printUsage(); exit(0); } } /** * export to default directory */ // ------------------------------------------------------------------------------- void CCommandLineOptions::htmlExport( QString fileName ) // ------------------------------------------------------------------------------- { // Verzeichnis erstellen QDir dir( QDir::homePath() ); dir.mkdir( "tuxcardsHTML" ); dir.cd( "tuxcardsHTML" ); htmlExport( fileName, dir.absolutePath() ); } // ------------------------------------------------------------------------------- void CCommandLineOptions::htmlExport( QString fileName, QString dirPath ) // ------------------------------------------------------------------------------- { QApplication app( argc, argv ); if (fileName=="") { CTuxCardsConfiguration& refConfig = CTuxCardsConfiguration::getInstance(); fileName = refConfig.getStringValue( CTuxCardsConfiguration::S_DATA_FILE_NAME ); } if (!QFile::exists(fileName)) { std::cout<<"No file specified or given file does not exist."< # starts the application using \n" <<" tuxcards -e html # exports to html using the datafile found\n" <<" in .tuxcards\n" <<" tuxcards -e html # exports to html using the as input\n" <<" tuxcards -e html # exports to html using the as input\n" <<" and the specified as export directory\n" <<"\n" <<"Options:\n" <<" -e html HTML export; An optional file name and directory may be given.\n" <<" If no file is specified the file name is extracted from the\n" <<" configuration file '~/.tuxcards'. If no directory is given, the\n" <<" the html export will be done to the default export directory\n" <<" '~/tuxcardsHTML'.\n" <<" -v Print TuxCards version.\n" <<" -h Shows these usage information.\n" <<"\n" <<"For questions or bugs write to Alexander Theel ." < /** *@author Alexander Theel */ class CCommandLineOptions { public: CCommandLineOptions(int argc, char** argv); static void printUsage(); void htmlExport(QString fileName); void htmlExport(QString fileName, QString dirPath); public: int argc; char** argv; }; #endif tuxcards/src/CTuxCardsConfiguration.cpp000555 000765 000024 00000042225 11420350116 020671 0ustar00alexstaff000000 000000 /*************************************************************************** CTuxCardsConfiguration.cpp - description ------------------- begin : Sam Aug 17 2002 copyright : (C) 2002 by Alexander Theel email : alex.theel@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #include "CTuxCardsConfiguration.h" #include "version.h" #include "global.h" #include #include #include // ------------------------------------------------------------------------------- CTuxCardsConfiguration::CTuxCardsConfiguration() // ------------------------------------------------------------------------------- : mBoolMap() , mStringMap() , mIntMap() { readConfigurationFile(); } // ------------------------------------------------------------------------------- CTuxCardsConfiguration& CTuxCardsConfiguration::getInstance() // ------------------------------------------------------------------------------- { static CTuxCardsConfiguration static_Instance; return static_Instance; } // ------------------------------------------------------------------------------- void CTuxCardsConfiguration::readConfigurationFile() // ------------------------------------------------------------------------------- { // set default options just to be sure; if the config-file // might not be there or version 0.4 was used before QSettings settings( TUX_CONFIG_FILE, QSettings::IniFormat ); // Do not use a group "General" because in newer Qt-Versions this would be treated as // group "%General". All set keys without a group are automatically put into "General". //settings.beginGroup("General"); QString version = settings.value("Version", QString("TuxCards_") + TUX_VERSION).toString(); mStringMap[S_DATA_FILE_NAME] = settings.value("Data_File", "").toString(); //QDir::homePath()+"/"+TUX_GREETING_FILE).toString(); mBoolMap [B_AUTOSAVE] = settings.value("Autosave", 1).toInt(); mIntMap [I_SAVE_ALL_MINUTES] = settings.value("Save_All_Minutes", 15).toInt(); mBoolMap [B_SAVE_WHEN_LEAVING] = settings.value("Save_when_Leaving", 1).toInt(); mBoolMap [B_CREATE_BACKUP_FILE] = settings.value("Create_Backupfile", 1).toInt(); mStringMap[S_EXECUTE_STATEMENT] = settings.value("Execution_Statement", "").toString(); mStringMap[S_RECENT_FILES] = settings.value("Recent_Files", "").toString(); mBoolMap [B_ENCRYPTION_USED] = settings.value("Encryption_Used", 0).toInt(); mBoolMap [B_AUTOENCRYPT_ENTRY] = settings.value("AutoEncrypt_Entry", 0).toInt(); int colorR = settings.value("Color_Top_R" ,0).toInt(); int colorG = settings.value("Color_Top_G" ,0).toInt(); int colorB = settings.value("Color_Top_B" ,0).toInt(); topColor = QColor(colorR, colorG, colorB); colorR = settings.value("Color_Bottom_R" ,33).toInt(); colorG = settings.value("Color_Bottom_G" ,72).toInt(); colorB = settings.value("Color_Bottom_B" ,170).toInt(); bottomColor = QColor(colorR, colorG, colorB); mBoolMap [B_IS_HTEXT_ENABLED] = settings.value("Enable_H_Text", 1).toInt(); mStringMap[S_TEXT_ONE] = settings.value("Text_One", "Tux").toString(); mStringMap[S_TEXT_TWO] = settings.value("Text_Two", "Cards").toString(); colorR = settings.value("Color_Font_R" ,255).toInt(); colorG = settings.value("Color_Font_G" ,255).toInt(); colorB = settings.value("Color_Font_B" ,255).toInt(); fontColor = QColor(colorR, colorG, colorB); mBoolMap [B_IS_VTEXT_ENABLED] = settings.value("Enable_V_Text", 0).toInt(); mStringMap[S_VERTICAL_TEXT] = settings.value("Vertical_Text", "").toString(); mBoolMap [B_ALIGN_VTEXT] = settings.value("Align_Vertical_Text", 0).toInt(); mBoolMap [B_IS_CACTUSBAR_ENABLED] = settings.value("Enable_CactusBar", 0).toInt(); mStringMap[S_FLOWER_DIR] = settings.value("Flower_Dir", "/usr/local/doc/tuxcards/flowers/").toString(); mStringMap[S_ICON_DIR] = settings.value("Icon_Dir", "").toString();; QString FONT_family = settings.value("Font_Family", "Lucida Grande").toString(); int FONT_size = settings.value("Font_Size", 13).toInt(); bool FONT_bold = settings.value("Font_Bold", 0).toInt(); bool FONT_italic = settings.value("Font_Italic", 0).toInt(); bool FONT_underline = settings.value("Font_Underline", 0).toInt(); bool FONT_strikeout = settings.value("Font_Strikeout", 0).toInt(); editorFont = FontSettings( FONT_family, FONT_size, FONT_bold, FONT_italic, FONT_underline, FONT_strikeout ); FONT_family = settings.value("Tree_Font_Family", "Lucida Grande").toString(); FONT_size = settings.value("Tree_Font_Size", 13).toInt(); FONT_bold = settings.value("Tree_Font_Bold", 0).toInt(); FONT_italic = settings.value("Tree_Font_Italic", 0).toInt(); FONT_underline = settings.value("Tree_Font_Underline", 0).toInt(); FONT_strikeout = settings.value("Tree_Font_Strikeout", 0).toInt(); treeFont = FontSettings( FONT_family, FONT_size, FONT_bold, FONT_italic, FONT_underline, FONT_strikeout ); mIntMap [I_TAB_SIZE] = settings.value("TabSize", 8).toInt(); mIntMap [I_WORD_WRAP] = settings.value("WordWrap", 1).toInt(); mBoolMap [B_LINEBREAK_WITH_CTRL_SHIFT] = settings.value("Linebreak_WithCtrlShift", 1).toInt(); mBoolMap [B_SHOW_MAIN_TOOLBAR] = settings.value("Show_Main_Toolbar", 1).toInt(); mBoolMap [B_SHOW_ENTRY_TOOLBAR] = settings.value("Show_Entry_Toolbar", 1).toInt(); mBoolMap [B_SHOW_EDITOR_TOOLBAR]= settings.value("Show_Editor_Toolbar", 1).toInt(); mBoolMap [B_SHOW_RECENTFILES_TOOLBAR]= settings.value("Show_RecentFiles_Toolbar", 0).toInt(); //settings.endGroup(); settings.beginGroup("WindowGeometry"); mIntMap [I_WINDOW_WIDTH] = settings.value("WindowWidth", 750).toInt(); mIntMap [I_WINDOW_HEIGHT] = settings.value("WindowHeight", 550).toInt(); mIntMap [I_TREE_WIDTH] = settings.value("TreeWidth", 240).toInt(); mIntMap [I_EDITOR_WIDTH] = settings.value("EditorWidth", 500).toInt(); mIntMap [I_TREE_VSCROLLBAR_VALUE] = settings.value("Tree_VScrollBar", 0).toInt(); mIntMap [I_WINDOW_XPOS] = settings.value("WindowXPos", 10).toInt(); mIntMap [I_WINDOW_YPOS] = settings.value("WindowYPos", 10).toInt(); settings.endGroup(); settings.beginGroup("Donation"); mBoolMap [B_SHOW_DONATION_MSG_2] = settings.value("ShowDonation2", 0).toInt(); settings.endGroup(); } // ------------------------------------------------------------------------------- void CTuxCardsConfiguration::saveToFile() // ------------------------------------------------------------------------------- { // -- write to config-file ".tuxcards" --------------------------- // "Version" is the version of this program (not the version of a datafile) QSettings settings( TUX_CONFIG_FILE, QSettings::IniFormat ); // Do not use a group "General" because in newer Qt-Versions this would be treated as // group "%General". All set keys without a group are automatically put into "General". //settings.beginGroup("General"); settings.setValue("Version", QString("TuxCards_") + TUX_VERSION ); settings.setValue("Data_File", mStringMap[S_DATA_FILE_NAME] ); settings.setValue("Autosave", (int)mBoolMap [B_AUTOSAVE] ); settings.setValue("Save_All_Minutes", mIntMap [I_SAVE_ALL_MINUTES] ); settings.setValue("Save_when_Leaving", (int)mBoolMap [B_SAVE_WHEN_LEAVING] ); settings.setValue("Create_Backupfile", (int)mBoolMap [B_CREATE_BACKUP_FILE]); settings.setValue("Execution_Statement", mStringMap[S_EXECUTE_STATEMENT] ); settings.setValue("Recent_Files", mStringMap[S_RECENT_FILES] ); settings.setValue("Encryption_Used", (int)mBoolMap [B_ENCRYPTION_USED] ); settings.setValue("AutoEncrypt_Entry", (int)mBoolMap [B_AUTOENCRYPT_ENTRY] ); settings.setValue("Color_Top_R", topColor.red()); settings.setValue("Color_Top_G", topColor.green()); settings.setValue("Color_Top_B", topColor.blue()); settings.setValue("Color_Bottom_R", bottomColor.red()); settings.setValue("Color_Bottom_G", bottomColor.green()); settings.setValue("Color_Bottom_B", bottomColor.blue()); settings.setValue("Enable_H_Text", (int)mBoolMap [B_IS_HTEXT_ENABLED] ); settings.setValue("Text_One", mStringMap[S_TEXT_ONE] ); settings.setValue("Text_Two", mStringMap[S_TEXT_TWO] ); settings.setValue("Color_Font_R", fontColor.red()); settings.setValue("Color_Font_G", fontColor.green()); settings.setValue("Color_Font_B", fontColor.blue()); settings.setValue("Enable_V_Text", (int)mBoolMap [B_IS_VTEXT_ENABLED] ); settings.setValue("Vertical_Text", mStringMap[S_VERTICAL_TEXT] ); settings.setValue("Align_Vertical_Text", (int)mBoolMap [B_ALIGN_VTEXT] ); settings.setValue("Enable_CactusBar", (int)mBoolMap [B_IS_CACTUSBAR_ENABLED]); settings.setValue("Flower_Dir", mStringMap[S_FLOWER_DIR] ); settings.setValue("Icon_Dir", mStringMap[S_ICON_DIR] ); settings.setValue("Font_Family", editorFont.getFamily()); settings.setValue("Font_Size", editorFont.getSize()); settings.setValue("Font_Bold", editorFont.isBold()); settings.setValue("Font_Italic", editorFont.isItalic()); settings.setValue("Font_Underline", editorFont.isUnderlined()); settings.setValue("Font_Strikeout", editorFont.isStrikeout()); settings.setValue("Tree_Font_Family", treeFont.getFamily()); settings.setValue("Tree_Font_Size", treeFont.getSize()); settings.setValue("Tree_Font_Bold", treeFont.isBold()); settings.setValue("Tree_Font_Italic", treeFont.isItalic()); settings.setValue("Tree_Font_Underline", treeFont.isUnderlined()); settings.setValue("Tree_Font_Strikeout", treeFont.isStrikeout()); settings.setValue("TabSize", mIntMap[I_TAB_SIZE] ); settings.setValue("WordWrap", mIntMap[I_WORD_WRAP] ); settings.setValue("Linebreak_WithCtrlShift", (int)mBoolMap[B_LINEBREAK_WITH_CTRL_SHIFT]); settings.setValue("Show_Main_Toolbar", (int)mBoolMap[B_SHOW_MAIN_TOOLBAR] ); settings.setValue("Show_Entry_Toolbar", (int)mBoolMap[B_SHOW_ENTRY_TOOLBAR] ); settings.setValue("Show_Editor_Toolbar", (int)mBoolMap[B_SHOW_EDITOR_TOOLBAR] ); settings.setValue("Show_RecentFiles_Toolbar", (int)mBoolMap[B_SHOW_RECENTFILES_TOOLBAR]); //settings.endGroup(); settings.beginGroup("WindowGeometry"); settings.setValue("WindowWidth", mIntMap[I_WINDOW_WIDTH] ); settings.setValue("WindowHeight", mIntMap[I_WINDOW_HEIGHT] ); settings.setValue("TreeWidth", mIntMap[I_TREE_WIDTH] ); settings.setValue("EditorWidth", mIntMap[I_EDITOR_WIDTH] ); settings.setValue("Tree_VScrollBar", mIntMap[I_TREE_VSCROLLBAR_VALUE]); settings.setValue("WindowXPos", mIntMap[I_WINDOW_XPOS] ); settings.setValue("WindowYPos", mIntMap[I_WINDOW_YPOS] ); settings.endGroup(); settings.beginGroup("Donation"); settings.setValue("ShowDonation2", (int)mBoolMap[B_SHOW_DONATION_MSG_2] ); settings.endGroup(); } /****** getter *************************/ QColor CTuxCardsConfiguration::getTopColor() const { return topColor; } QColor CTuxCardsConfiguration::getBottomColor() const { return bottomColor; } QColor CTuxCardsConfiguration::getFontColor() const { return fontColor; } FontSettings CTuxCardsConfiguration::getEditorFont() const { return editorFont; } FontSettings CTuxCardsConfiguration::getTreeFont() const { return treeFont; } /****** setter *************************/ void CTuxCardsConfiguration::setTopColor(QColor c){ this->topColor=c; } void CTuxCardsConfiguration::setBottomColor(QColor c){ this->bottomColor=c; } void CTuxCardsConfiguration::setFontColor(QColor c){ this->fontColor=c; } void CTuxCardsConfiguration::setEditorFont(FontSettings f){ this->editorFont=f; } void CTuxCardsConfiguration::setTreeFont(FontSettings f){ this->treeFont=f; } // ------------------------------------------------------------------------------- bool CTuxCardsConfiguration::getBoolValue( eBoolValue eKey ) const // ------------------------------------------------------------------------------- { return mBoolMap[eKey]; } // ------------------------------------------------------------------------------- void CTuxCardsConfiguration::setBoolValue( eBoolValue eKey, bool bValue ) // ------------------------------------------------------------------------------- { mBoolMap[eKey] = bValue; } // ------------------------------------------------------------------------------- QString CTuxCardsConfiguration::getStringValue( eStringValue eKey ) const // ------------------------------------------------------------------------------- { return mStringMap[eKey]; } // ------------------------------------------------------------------------------- void CTuxCardsConfiguration::setStringValue( eStringValue eKey, const QString& sValue ) // ------------------------------------------------------------------------------- { mStringMap[eKey] = sValue; } // ------------------------------------------------------------------------------- int CTuxCardsConfiguration::getIntValue( eIntValue eKey ) const // ------------------------------------------------------------------------------- { return mIntMap[eKey]; } // ------------------------------------------------------------------------------- void CTuxCardsConfiguration::setIntValue( eIntValue eKey, int iValue ) // ------------------------------------------------------------------------------- { mIntMap[eKey] = iValue; } // ------------------------------------------------------------------------------- bool CTuxCardsConfiguration::askForUsingEncryption() // ------------------------------------------------------------------------------- { if ( getBoolValue(B_ENCRYPTION_USED) ) { return true; } int iUseEncryption = QMessageBox::warning( 0, "TuxCards", "You are about to use encryption " "for the first time.

" "The encryption algorithm was written " "with the best intents nevertheless " "err is human.

" "Therefore, you are solely responsible for " "using this feature. This includes possible " "errors within the algorithm, loss " "of data, forgotten passwords, etc.

" "Are you sure that you want to use the " "encryption feature?", QMessageBox::Yes, QMessageBox::No ); if ( QMessageBox::Yes == iUseEncryption ) { setBoolValue( B_ENCRYPTION_USED, true ); saveToFile(); return true; } return false; } tuxcards/src/CTuxCardsConfiguration.h000555 000765 000024 00000006567 11420350116 020347 0ustar00alexstaff000000 000000 /*************************************************************************** CTuxCardsConfiguration.h - description ------------------- begin : Sam Aug 17 2002 copyright : (C) 2002 by Alexander Theel email : alex.theel@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #ifndef CTUXCARDS_CONFIGURATION_H #define CTUXCARDS_CONFIGURATION_H #include #include #include "fontsettings.h" #include class CTuxCardsConfiguration { public: static CTuxCardsConfiguration& getInstance(); void saveToFile(); enum eBoolValue { B_AUTOSAVE, B_SAVE_WHEN_LEAVING, B_CREATE_BACKUP_FILE, B_IS_HTEXT_ENABLED, B_IS_VTEXT_ENABLED, B_ALIGN_VTEXT, B_IS_CACTUSBAR_ENABLED, B_SHOW_MAIN_TOOLBAR, B_SHOW_ENTRY_TOOLBAR, B_SHOW_EDITOR_TOOLBAR, B_SHOW_RECENTFILES_TOOLBAR, B_LINEBREAK_WITH_CTRL_SHIFT, B_ENCRYPTION_USED, B_AUTOENCRYPT_ENTRY, B_SHOW_DONATION_MSG_2 }; bool getBoolValue( eBoolValue eKey ) const; void setBoolValue( eBoolValue eKey, bool bValue ); enum eStringValue { S_DATA_FILE_NAME, S_RECENT_FILES, S_EXECUTE_STATEMENT, S_TEXT_ONE, S_TEXT_TWO, S_VERTICAL_TEXT, S_FLOWER_DIR, S_ICON_DIR }; QString getStringValue( eStringValue eKey ) const; void setStringValue( eStringValue eKey, const QString& sValue ); enum eIntValue { I_SAVE_ALL_MINUTES, I_TAB_SIZE, I_WORD_WRAP, I_WINDOW_WIDTH, I_WINDOW_HEIGHT, I_TREE_WIDTH, I_EDITOR_WIDTH, I_TREE_VSCROLLBAR_VALUE, I_WINDOW_XPOS, I_WINDOW_YPOS }; int getIntValue( eIntValue eKey ) const; void setIntValue( eIntValue eKey, int iValue ); bool askForUsingEncryption(); /****** getter *************************/ QColor getTopColor() const; QColor getBottomColor() const; QColor getFontColor() const; FontSettings getEditorFont() const; FontSettings getTreeFont() const; /****** setter *************************/ void setTopColor(QColor c); void setBottomColor(QColor c); void setFontColor(QColor c); void setEditorFont(FontSettings f); void setTreeFont(FontSettings f); private: CTuxCardsConfiguration(); void readConfigurationFile(); QColor topColor; QColor bottomColor; QColor fontColor; FontSettings editorFont; FontSettings treeFont; typedef QMap BoolMap; BoolMap mBoolMap; typedef QMap StringMap; StringMap mStringMap; typedef QMap IntMap; IntMap mIntMap; }; #endif tuxcards/src/fontsettings.cpp000555 000765 000024 00000004517 11420350116 017032 0ustar00alexstaff000000 000000 /*************************************************************************** fontsettings.cpp - description ------------------- begin : Sam Aug 17 2002 copyright : (C) 2002 by Alexander Theel email : alex.theel@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #include "fontsettings.h" FontSettings::FontSettings(){ family="Helvetica"; size=12; bold=false; italic=false; underline=false; strikeout=false; } FontSettings::FontSettings(QString family, int size, bool bold, bool italic, bool underline, bool strikeout) { this->family=family; this->size=size; this->bold=bold; this->italic=italic; this->underline=underline; this->strikeout=strikeout; } QFont FontSettings::toFont(){ QFont font=QFont(family, size); font.setBold(bold); font.setItalic(italic); font.setUnderline(underline); font.setStrikeOut(strikeout); return font; } QString FontSettings::getFamily(){ return family; } int FontSettings::getSize(){ return size; } bool FontSettings::isBold(){ return bold; } bool FontSettings::isItalic(){ return italic; } bool FontSettings::isUnderlined(){ return underline; } bool FontSettings::isStrikeout(){ return strikeout; } void FontSettings::setFamily(QString family){ this->family=family; } void FontSettings::setSize(int size){ this->size=size; } void FontSettings::setBold(bool bold){ this->bold=bold; } void FontSettings::setItalic(bool italic){ this->italic=italic; } void FontSettings::setUnderlined(bool underlined){ this->underline=underlined; } void FontSettings::setStrikeout(bool strikeout){ this->strikeout=strikeout; } tuxcards/src/fontsettings.h000555 000765 000024 00000003354 11420350116 016475 0ustar00alexstaff000000 000000 /*************************************************************************** fontsettings.h - description ------------------- begin : Sam Aug 17 2002 copyright : (C) 2002 by Alexander Theel email : alex.theel@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #ifndef FONTSETTINGS_H #define FONTSETTINGS_H #include #include class FontSettings { public: FontSettings(); FontSettings(QString family, int size, bool bold, bool italic, bool underline, bool strikeout); QFont toFont(); QString getFamily(); int getSize(); bool isBold(); bool isItalic(); bool isUnderlined(); bool isStrikeout(); void setFamily(QString family); void setSize(int size); void setBold(bool bold); void setItalic(bool italic); void setUnderlined(bool underlined); void setStrikeout(bool strikeout); private: QString family; int size; bool bold; bool italic; bool underline; bool strikeout; }; #endif tuxcards/src/global.h000555 000765 000024 00000002743 11420350116 015207 0ustar00alexstaff000000 000000 /*************************************************************************** global.h - description ------------------- begin : Wed Sep 24 2003 copyright : (C) 2003 by Alexander Theel email : alex.theel@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #ifndef GLOBAL_H #define GLOBAL_H #ifdef NULL #undef NULL #endif #define NULL 0 #define NULLPTR 0 #define DELETE(x) delete (x); (x) = NULLPTR #define ARRAYLEN(x) (sizeof(x)/sizeof(x[0])) #define TUX_CONFIG_FILE ".tuxcards" #define TUX_GREETING_FILE "tuxcards_greeting.tux" #define INFORMATION_COLLECTION_DESC "##INFORMATION##COLLECTION##DESCRIPTION##" #define TUXCARDS_DRAGDROP_TYPE "application/x-tuxcards_entry.xml" #endif tuxcards/src/Greetings.h000444 000765 000024 00000036426 11420350116 015700 0ustar00alexstaff000000 000000 /*************************************************************************** Greetings.h - description ------------------- begin : Sam May 29 2004 copyright : (C) 2004 by Alexander Theel email : alex.theel@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #ifndef GREETINGS_H #define GREETINGS_H #include QString sGreetingsText = "\n" "" "" "TuxCards - News" "" "TuxCards - News" "" "

" "

Welcome to TuxCards Version 1.2

" "

Finally, it is time to release version 1.2 of TuxCards - The Notebook for TuxFreaks.

What has happened in between?

" "

Besides the development of new features, TuxCards did appear within several magazines:

" "
  • linux User, (German Edition), Sep. 2003
  • " "
  • Linux Magazine (English Edition - Canada), Oct. 2003
  • " "
  • Linux Magazine, "World Freesoft Collection" (Japanese Edition), Dec. 2003
  • " "
  • easy Linux, (German Edition), Feb. 2004
  • " "
  • Linux Format, issue no. 54 (UK magazine), June 2004
" "

The development of this release took much more time than was planned. I believe stability and reliability are two of the most important goals for software production, hence a lot of time was spent improving the code underneath the visible application.
Now, I am proud to present a good featured and stable TuxCards 1.2.

" "

Thank you to everyone who has reported ideas or hints on how to simplify the usage of TuxCards. Even though "picture import" is not done, most of the wanted features are included.
I am especially grateful for the people who showed me on how to encrypt data.

Every week at least two dozen messages arrive with suggestions, bug reports and gratitude. I am very sorry that not every email could be answered, yet.

" "

" "

Now, what is new in 1.2?

" "

A lot of minor changes provide an easier overall usage of TuxCards. For details look at "Improvments in Detail"; here are some key features:

" "
  • Entry History. It does work like a history within a web browser; the last visited entries are remembered.
  • " "
  • Encryption using MD5 and BlowFish. The encrypted data is stored using Base64 encoding.
  • " "
  • Selection of information format (rtf, txt) for newly created entries.
  • " "
  • Inplace renaming of entries within the tree.
  • " "
  • Customized line break mode. Keys for creating a new line or new paragraph within the editor may be selected.
  • " "
  • Much better paste algorithm for pasting text within the editor.
  • " "
  • Improved HTML export.
  • " "
  • Several new keyboard shortcuts.
  • " "
  • Nice Look & Feel (supporting keramic style and customizable icons)
    An alternative set of icons may already be downloaded from www.tuxcards.de.
  • " "
  • Increased overall stability.
" "

If you come up with an idea on who to make the usage of TuxCards even easier, if you know of a feature that you would like to see within a further version or if you created a wonderful iconset for TuxCards don't hesitate to mail to tuxcards@gmx.net.

" "

Enjoy TuxCards,
Alexander Theel

" "" "]]>" "" "Improvements in Detail (V 1.2)" "" "

" "

Detailed Feature List and bugs that have been removed:

" "
  • Entries
  • " "
    • The information format (rtf, txt) of new entries can be selected at creation time.
    • " "
    • If a new entry with an empty name is created, a dialog box asks wether the user really wants to asign an empty name.
    • " "
    • History function which remembers the last selected entries.
      Keyboard shortcuts: ALT+Cursor Left, ALT+Cursor Right.
    • " "
    • Encryption of entries with secure algorithms: MD5 and BlowFish. The encrypted data is stored using Base64 encoding.
    • " "
    • Bug removal within expired notes dialog. In a certain case an endless loop was executed.
" "

" "
  • Tree
  • " "
    • Inplace renaming of entries with F2.
    • " "
    • Accessing context menu via keyboard.
" "

" "
  • Editor
  • " "
    • Improved paste algorithm. Text that is selected with the mouse (i.e. within another program, xterm, etc.) may be inserted into the editor.
    • " "
    • Shortcuts for bold (CTRL+B), italic (CTRL+I), underline (CTRL+U), select all (CTRL+A).
    • " "
    • Customized line break mode. Keys for creating a new line or new paragraph within the editor may be adapted in the options dialog.
      Thus CTRL+Enter may be used for generating a new paragraph or a new line within an existing paragraph.
" "

" "
  • I/O
  • " "
    • Size of file written to disk is decreased by usage of CDATA sections within the XML output.
    • " "
    • HTML export does write the files of the individual entries within a separat directory.
    • " "
    • HTML export: If entries with identical names exist, files with the same name were produced, thus one file was overwritten by another one. This does not happen any more.
    • " "
    • HTML export: Indentation within the tree-html-file has been decreased. Now, the view of trees with large entry names is much more beautyful and easier to read.
    • " "
    • HTML export: If an entry name did include the character '/' which is not valid within filenames, then the HTML export of that entry did not work properly.
" "

" "
  • GUI
  • " "
    • Included support for keramic style.
    • " "
    • Customizable icons. The toolbar and menu icons may be exchanged at will. Simply, enter a directory within the options-dialog where your icons are located and restart TuxCards. Doing so, one icon or all icons may be exchanged.
      The following formats are supported: xpm, png, jpg/jpeg, bmp, xbm, pnm, mng.
      Icons with the following file-names and one of the file-endings above are searched for:
      "fileopen", "filenew", "filesave", "fileprint", "exit", "addTreeElement", "changeProperty", "delete", "lock", "unlock", "find", "redo", "undo", "editcut", "editcopy", "editpaste", "text_bold", "text_italic", "text_under", "text_color", "text_left", "text_center", "text_right", "text_block", "upArrow", "downArrow", "back", "forward".
" "

" "
  • Misc
  • " "
    • Stability improvement, a great number of NULLPTR checks has been inserted.
    • " "
    • Before searching, the currently edited entry is saved within the internal database. Thus, changes within that entry that would result in different results when searching are recognized.
    • " "
    • Shortcuts - for word count (CTRL+W), date insertion (CTRL+D), time insertion (CTRL+T), searching (CTRL+F), switching between tree and editor (F5) - are added.
    • " "
    • The toolbars may be hidden. This reduces screen footprint.
" "" "]]>
" "
" "" "Keyboard Actions" "" "

" "

Hotkeys within TuxCards

" "

CTRL+S Save
F5 Change Keyboard Input between 'tree' and 'editor'

ALT + Cursor LEFT History Backwards
ALT + Cursor RIGHT History Forward

CTRL+W Word Count
CTRL+D Date Insertion
CTRL+T Time Insertion

CTRL+F Find / Search


Within the tree (left side):
INSERT Insert a new Entry
DELETE Removes an Entry
F2 Inplace Renaming of the current active Entry
MENU (The menu key is located just left to the right CTRL-key.)
Pops up the context menu.

" "


Within the editor (right side):
MENU (The menu key is located just left to the right CTRL-key.)
Pops up the context menu.

CTRL+ENTER / RETURN - classical mode for inserting a simple linebreak
- modern mode for inserting a new paragraph

ENTER / RETURN - classical mode for inserting a new paragraph
- modern mode for inserting a simple linebreak

" "

CTRL+X Cut
CTRL+C Copy
CTRL+V Paste

CTRL+Z Undo
CTRL+Y Redo

CTRL+A Select All

" "

CTRL+K Kill whole Line

CTRL+B Bold
CTRL+I Italic
CTRL+U Underline

" "" "]]>
" "
" "" "Requirements" "" "

" "

Requirements:

" "

You certainly need to use qt3.x.x. If you want to use RTF, I personally recommend to install qt3.0.5, at least. Since qt3.0.4 does have a bug in formating linebreaks.

" "

I strongly recommend to use qt3.1.1 or above since the copying of text between notes has improved a lot.

" "

" "" "]]>
" "
" "" "To come in Version 1.3" "" "

" "

What is planned for version 1.3?

" "
  • Be surprised!
" "

If you want to stay up to date, I can inform you as soon as the next release is available. Just send an email with the subject "subscribe" to tuxcards@gmx.net.

" "

" "" "]]>
" "
" "" "Donations" "" "

" "

TuxCards 1.2 is published as Donationware

" "

You may use it freely and without charge as stated within the GPL.

" "

Do you like TuxCards and you want to enable the development of new features? Or do you want to ensure a high quality of future releases or simply compensate for ftp-server costs? Then you are welcome to donate EUR 5 to the author. (At your wish US$ 5 or an equivalent amount in your currency.)

Please, use www.tuxcards.de/donations.html for a secure donation via internet.

" "

Or simply send a letter with your amount to

Alexander Theel
Am Trommlerbusch 24 d
02708 Loebau
Germany

" "" "]]>
" "
" "" "\n"; #endif tuxcards/src/gui/000755 000765 000024 00000000000 11420350116 014353 5ustar00alexstaff000000 000000 tuxcards/src/icons/000755 000765 000024 00000000000 11420350116 014702 5ustar00alexstaff000000 000000 tuxcards/src/information/000755 000765 000024 00000000000 11420350116 016114 5ustar00alexstaff000000 000000 tuxcards/src/informationExt/000755 000765 000024 00000000000 11420350116 016575 5ustar00alexstaff000000 000000 tuxcards/src/main.cpp000555 000765 000024 00000004113 11420350116 015217 0ustar00alexstaff000000 000000 /*************************************************************************** main.cpp - description ------------------- begin : Son Mar 26 23:04:15 CEST 2000 copyright : (C) 2000 by Alexander Theel email : alex.theel@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #include #include #include #include "./gui/CMainWindow.h" #include "./CCommandLineOptions.h" int main( int argc, char* argv[] ) { // (1) Take care of potential command line options. if ( argc > 1 ) CCommandLineOptions( argc, argv ); // (2) Initiate QApplication. QApplication app( argc, argv ); // (3) Takes care of translation - load them from resources instead of a local directory. QTranslator qtTranslator; //qtTranslator.load( "qt_" + QLocale::system().name(), QLibraryInfo::location(QLibraryInfo::TranslationsPath) ); qtTranslator.load( ":/qt_" + QLocale::system().name() ); app.installTranslator( &qtTranslator ); QTranslator myappTranslator; //myappTranslator.load( "/Users/alex/c++/Qt4/tuxcards/tuxcards_" + QLocale::system().name() ); myappTranslator.load( ":/tuxcards_" + QLocale::system().name() ); app.installTranslator( &myappTranslator ); // (4) Set up mainwindow and start the application. CMainWindow mainwindow( argc > 1 ? argv[1] : "" ); return app.exec(); } tuxcards/src/persister.cpp000555 000765 000024 00000017423 11420350116 016323 0ustar00alexstaff000000 000000 /*************************************************************************** persister.cpp - description ------------------- begin : Fri Jul 19 2002 copyright : (C) 2002 by Alexander Theel email : alex.theel@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #include "persister.h" #include //Added by qt3to4: #include CInformationCollection* Persister::createInformationCollection(QString s){ return unpack(s); } /** * checks for Version and decides whether to use * unpackWithoutIcons(..) Version 0.4 * unpackWithIcons(..) Version 0.5 * * if 'x' is specified, then we do not clear the tree and * unpack the String using 'x' as parent; otherwise, the * complete tree is erased and rebuild from 's' */ CInformationCollection* Persister::unpack(QString s){ CTreeInformationElement* e = new CTreeInformationElement(); QString decide=s.mid(0, 12); if (decide=="TuxCardsV0.5"){ s=s.mid(12); // remove VersionString from front unpackWithIcons(s, true, e); } return new CInformationCollection(e); } // *** old method *** //void Tree::interface(QString s, Knoten* x){ // QString decide=s.mid(0, 12); // // if (decide=="TuxCardsV0.5"){ // s=s.mid(12); // remove VersionString from front // if (x) unpackWithIcons(s, false, x); // else unpackWithIcons(s, true, 0); // }else // if (x) unpackWithoutIcons(s, false, x); // else unpackWithoutIcons(s, true, 0); //} void Persister::unpackWithIcons(QString s, bool root, CTreeInformationElement* parent){ // --- exactly the same routines as in 'unpack(..)' // only that here the very first (root-) QListViewItem // is created & that the root-CTreeInformationElement is altered, while all childs are // inserted // (Therefor, changes done here must be done in 'unpack(..)' too!) // declares necessary variables int i; QString name; int l1; // l1=l�ge von 'name' QString text; int l2; // l2=l�ge von 'text' QString iconFile; bool isOpen; // whether this Knoten is open or not int amountOfChilds; //packe Paket aus s=s.mid(3); // remove "***" from front i=s.indexOf("*"); int l=s.mid(0, i).toInt(); // l= verbleibende L�ge d. gesamten // Knotens (inkl. Kinder) QString knoten=s.mid(i+1, l); s=s.mid(l+1); i=knoten.indexOf("*"); l1=knoten.mid(0, i).toInt(); name=knoten.mid(i+1, l1); knoten=knoten.mid(i+1+l1); i=knoten.indexOf("*"); l2=knoten.mid(0, i).toInt(); text=knoten.mid(i+1, l2); knoten=knoten.mid(i+1+l2); // check whether this Knoten was opened or closed isOpen = (knoten.left(1)=="+" ? FALSE : TRUE ); knoten=knoten.mid(1); // extract icon file i=knoten.indexOf("*"); iconFile=knoten.mid(0, i); knoten=knoten.mid(i+1); // check for # of children i=knoten.indexOf("*"); amountOfChilds=knoten.mid(0, i).toInt(); knoten=knoten.mid(i); /*cerr<<"UNPACKED"<<"\n l="< now we don't need to have two methods doing exactly the same (i.e. // * unpacking) // * if 'root'='true', then 'parent' is ignored, otherwise 'parent' is the // * actual parent // */ //void Tree::unpackWithoutIcons(QString s, bool root, Knoten* parent){ // // if (root) clearTree(); // // // --- exactly the same routines as in 'unpack(..)' // // only that here the very first (root-) QListViewItem // // is created & that the root-Knoten is altered, while all childs are // // inserted // // (Therefor, changes done here must be done in 'unpack(..)' too!) // // // declares necessary variables // int i; // QString name; int l1; // l1=l�ge von 'name' // QString text; int l2; // l2=l�ge von 'text' // bool isOpen; // whether this Knoten is open or not // int amountOfChilds; // // //packe Paket aus // s=s.mid(3); // remove "***" from front // i=s.find("*"); // int l=s.mid(0, i).toInt(); // l= verbleibende L�ge d. gesamten // // Knotens (inkl. Kinder) // // QString knoten=s.mid(i+1, l); s=s.mid(l+1); // i=knoten.find("*"); // l1=knoten.mid(0, i).toInt(); // name=knoten.mid(i+1, l1); // // knoten=knoten.mid(i+1+l1); // i=knoten.find("*"); // l2=knoten.mid(0, i).toInt(); // text=knoten.mid(i+1, l2); // // knoten=knoten.mid(i+1+l2); // // // check whether this Knoten was opened or closed // isOpen = (knoten.left(1)=="+" ? FALSE : TRUE ); // knoten=knoten.mid(1); // // i=knoten.find("*"); // amountOfChilds=knoten.mid(0, i).toInt(); // // knoten=knoten.mid(i); // // //cout<<"UNPACKED"<<"\n l="<setOpen(isOpen); // // root=false; // "switch mode" // // we actually don't need // // to do this // }else{ // self=new Knoten(parent, name, text, "none"); // self->setOpen(isOpen); // } // // for (i=1; i<=amountOfChilds; i++){ // knoten=knoten.mid(3); // cutting "***" off // int i=knoten.find("*"); //get length of child // int l=knoten.mid(0, i).toInt(); // // unpackWithoutIcons("***"+knoten.mid(0, l+i), false, self); // knoten=knoten.mid(l+i); // } // // //cout<<"done..all\n"; //} void Persister::save(CInformationCollection* collection, QString filename) { CTreeInformationElement* pRootElem = (CTreeInformationElement*)collection->getRootElement(); if ( NULLPTR == pRootElem ) return; QString s= "TuxCardsV0.5" + pRootElem->toStringObsoleted(); QFile f(filename); if ( f.open(QIODevice::WriteOnly) ) { // file opened successfully QTextStream t( &f ); // use a text stream t< #include #include "./information/CInformationCollection.h" #include "./information/CTreeInformationElement.h" class Persister{ public: // loading static CInformationCollection* createInformationCollection(QString s); // saving static void save(CInformationCollection*, QString filename); private: // loading static CInformationCollection* unpack(QString s); static void unpackWithIcons(QString s, bool root, CTreeInformationElement* parent); // static void unpackWithoutIcons(QString s, bool root, CTreeInformationElement* parent); }; #endif tuxcards/src/translations/000755 000765 000024 00000000000 11420350116 016310 5ustar00alexstaff000000 000000 tuxcards/src/utilities/000755 000765 000024 00000000000 11420350116 015602 5ustar00alexstaff000000 000000 tuxcards/src/version.h000555 000765 000024 00000002410 11420350116 015423 0ustar00alexstaff000000 000000 /*************************************************************************** version.h - description ------------------- begin : Don Sep 19 2002 copyright : (C) 2002 by alex email : alex@rsh-318 ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #ifndef VERSION_H #define VERSION_H #define TUX_VERSION "Version 2.2.1 - Qt4" #define TUX_SHORT_VERSION "V2.2.1" // *** new features *** // displays the recently used files within a toolbar #define FEATURE_RECENTFILELIST_TOOLBAR #endif tuxcards/src/utilities/base64/000755 000765 000024 00000000000 11420350116 016666 5ustar00alexstaff000000 000000 tuxcards/src/utilities/CIconManager.cpp000444 000765 000024 00000016012 11420350116 020572 0ustar00alexstaff000000 000000 /*************************************************************************** CIconManager.cpp - description ------------------- begin : Tue May 01 2004 copyright : (C) 2004 by Alexander Theel email : alex.theel@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #include "CIconManager.h" #include "../global.h" #include #include #include #include #include "../icons/exit.xpm" #include "../icons/addTreeElement.xpm" #include "../icons/changeProperty.xpm" #include "../icons/delete.xpm" #include "../icons/lock.xpm" #include "../icons/unlock.xpm" #include "../icons/text_color.xpm" #include "../icons/upArrow.xpm" #include "../icons/downArrow.xpm" #include "../icons/back.xpm" // leftArrow #include "../icons/forward.xpm" // rightArrow // ------------------------------------------------------------------------------- CIconManager::CIconManager() // ------------------------------------------------------------------------------- : mStyleIconMap() , mDefaultIconMap() , mAlternativeIconMap() , msIconDirectory() , mFileEndingList() { buildupStyleIconMap(); buildupDefaultIconMap(); buildupListWithPossibleFileEndings(); } // ------------------------------------------------------------------------------- CIconManager& CIconManager::getInstance() // ------------------------------------------------------------------------------- { static CIconManager instance; return instance; } // ------------------------------------------------------------------------------- void CIconManager::buildupStyleIconMap() // ------------------------------------------------------------------------------- { mStyleIconMap["back"] = QApplication::style()->standardIcon( QStyle::SP_ArrowBack ); mStyleIconMap["forward"] = QApplication::style()->standardIcon( QStyle::SP_ArrowForward ); } // ------------------------------------------------------------------------------- void CIconManager::buildupDefaultIconMap() // ------------------------------------------------------------------------------- { Q_INIT_RESOURCE(icons); mDefaultIconMap["lo32-app-tuxcards"] = QIcon( ":/lo32-app-tuxcards.png" ); mDefaultIconMap["fileopen"] = QIcon( ":/fileopen.png" ); mDefaultIconMap["filenew"] = QIcon( ":/filenew.png" ); mDefaultIconMap["filesave"] = QIcon( ":/filesave.png" ); mDefaultIconMap["fileprint"] = QIcon( ":/fileprint.png" ); mDefaultIconMap["exit"] = QPixmap(exit_xpm); mDefaultIconMap["addTreeElement"] = QPixmap(addTreeElement_xpm); mDefaultIconMap["changeProperty"] = QPixmap(changeProperty_xpm); mDefaultIconMap["delete"] = QPixmap(delete_xpm); mDefaultIconMap["lock"] = QPixmap(lock_xpm); mDefaultIconMap["unlock"] = QPixmap(unlock_xpm); mDefaultIconMap["find"] = QIcon( ":/find.png" ); mDefaultIconMap["redo"] = QIcon( ":/editredo.png" ); mDefaultIconMap["undo"] = QIcon( ":/editundo.png" ); mDefaultIconMap["editcut"] = QIcon( ":/editcut.png" ); mDefaultIconMap["editcopy"] = QIcon( ":/editcopy.png" ); mDefaultIconMap["editpaste"] = QIcon( ":/editpaste.png" ); mDefaultIconMap["text_bold"] = QIcon( ":/textbold.png" ); mDefaultIconMap["text_italic"] = QIcon( ":/textitalic.png" ); mDefaultIconMap["text_under"] = QIcon( ":/textunder.png" ); mDefaultIconMap["text_color"] = QPixmap(text_color_xpm); mDefaultIconMap["text_left"] = QIcon( ":/textleft.png" ); mDefaultIconMap["text_center"] = QIcon( ":/textcenter.png" ); mDefaultIconMap["text_right"] = QIcon( ":/textright.png" ); mDefaultIconMap["text_block"] = QIcon( ":/textjustify.png" ); mDefaultIconMap["upArrow"] = QPixmap(upArrow_xpm); mDefaultIconMap["downArrow"] = QPixmap(downArrow_xpm); mDefaultIconMap["back"] = QPixmap(back_xpm); mDefaultIconMap["forward"] = QPixmap(forward_xpm); } // ------------------------------------------------------------------------------- void CIconManager::buildupListWithPossibleFileEndings() // ------------------------------------------------------------------------------- { mFileEndingList.append(".xpm"); mFileEndingList.append(".png"); mFileEndingList.append(".gif"); mFileEndingList.append(".jpg"); mFileEndingList.append(".bmp"); mFileEndingList.append(".xbm"); mFileEndingList.append(".pnm"); mFileEndingList.append(".mng"); mFileEndingList.append(".jpeg"); } // ------------------------------------------------------------------------------- // Sets the directory where to get the icons from. // ------------------------------------------------------------------------------- void CIconManager::setIconDirectory( const QString& sDir ) // ------------------------------------------------------------------------------- { msIconDirectory = sDir; } // ------------------------------------------------------------------------------- QString CIconManager::testExistenceOfFile( const QString& sFileName ) const // ------------------------------------------------------------------------------- { for ( int i = 0; i < mFileEndingList.size(); i++ ) { if( QFile(sFileName + mFileEndingList[i]).exists() ) { return sFileName + mFileEndingList[i]; } } return ""; } // ------------------------------------------------------------------------------- const QIcon& CIconManager::getIcon( const QString& sFileName ) // ------------------------------------------------------------------------------- { // If an icon is already loaded, return that one. if ( !mAlternativeIconMap[sFileName].isNull() ) { return mAlternativeIconMap[sFileName]; } // Get icon from current style if possible. QStyle only supports "back" and "forward". if ( mStyleIconMap.contains(sFileName) ) return mStyleIconMap[sFileName]; // Otherwise, look whether a valid file for the icons does exist. QString sResult = testExistenceOfFile( msIconDirectory + "/" + sFileName ); if ( !sResult.isEmpty() ) { mAlternativeIconMap[sFileName] = QPixmap(sResult); return mAlternativeIconMap[sFileName]; } // return default icon return mDefaultIconMap[sFileName]; } tuxcards/src/utilities/CIconManager.h000444 000765 000024 00000003474 11420350116 020247 0ustar00alexstaff000000 000000 /*************************************************************************** CIconManager.h - description ------------------- begin : Tue May 01 2004 copyright : (C) 2004 by Alexander Theel email : alex.theel@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #ifndef CICON_MANAGER_H #define CICON_MANAGER_H #include #include #include class CIconManager { public: static CIconManager& getInstance(); void setIconDirectory( const QString& sDir ); const QIcon& getIcon( const QString& sFileName ); private: CIconManager(); void buildupStyleIconMap(); void buildupDefaultIconMap(); void buildupListWithPossibleFileEndings(); QString testExistenceOfFile( const QString& sFileName ) const; typedef QMap IconMap; IconMap mStyleIconMap; // from the current desktop style IconMap mDefaultIconMap; IconMap mAlternativeIconMap; QString msIconDirectory; QStringList mFileEndingList; }; #endif tuxcards/src/utilities/crypt/000755 000765 000024 00000000000 11420350116 016743 5ustar00alexstaff000000 000000 tuxcards/src/utilities/integers.cpp000555 000765 000024 00000002266 11420350116 020135 0ustar00alexstaff000000 000000 /*************************************************************************** integers.cpp - description ------------------- begin : Tue Jul 23 2002 copyright : (C) 2002 by Alexander Theel email : alex.theel@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #include "integers.h" /** * auxiliary function; otherwise some systems get an undefined reference error * while compiling */ int Integers::abs(int i){ return ((i>=0) ? i : -i); } tuxcards/src/utilities/integers.h000555 000765 000024 00000002134 11420350116 017574 0ustar00alexstaff000000 000000 /*************************************************************************** integers.h - description ------------------- begin : Tue Jul 23 2002 copyright : (C) 2002 by Alexander Theel email : alex.theel@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #ifndef INTEGERS_H #define INTEGERS_H class Integers{ public: static int abs(int); }; #endif tuxcards/src/utilities/strings.cpp000555 000765 000024 00000007272 11420350116 020010 0ustar00alexstaff000000 000000 /*************************************************************************** strings.cpp - description ------------------- begin : Fri Jul 19 2002 copyright : (C) 2002 by Alexander Theel email : alex.theel@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #include "strings.h" #include #include /** * returns a string that has length 'n' and is filled with spaces */ // ------------------------------------------------------------------------------- QString Strings::spaces(int n) // ------------------------------------------------------------------------------- { QString result=""; for (int i=0; i 0 ) { iWords++; } iWords++; return iWords; } /** * Removes the first line from the given string and returns that line. * Notice, the given string *is* changed. */ // ------------------------------------------------------------------------------- QString Strings::removeAndReturnFirstLine(QString& s) // ------------------------------------------------------------------------------- { int i = s.indexOf("\n"); if (i < 0 ) return 0; QString retVal = s.left(i); s = s.mid(i+1); return retVal; } /** * Removes all html tags within the given string. * Any '
' will be replaced by a ' ' (Space). * Any '
  • ' will be replaced by a '
  • ' (additional Space); in * order to count the words within a list correctly. */ // ------------------------------------------------------------------------------- QString Strings::removeHTMLTags(const QString sText) // ------------------------------------------------------------------------------- { QString sRetVal = sText; sRetVal.replace(QRegExp("
    "), " "); sRetVal.replace(QRegExp("= 0 ) { iTagEnd = sRetVal.indexOf(">", iTagStart); sRetVal = sRetVal.remove(iTagStart, iTagEnd-iTagStart+1); // prepare next turn iTagStart = sRetVal.indexOf("<"); } sRetVal = sRetVal.mid(1); // kill first '\n' which // does not belong to the // real information text // replace existing encoded tags sRetVal.replace(QRegExp("<"), "<"); sRetVal.replace(QRegExp(">"), ">"); //std::cout<<"___"< class Strings{ public: static QString spaces(int n=0); static int wordCount( QString sText="" ); static QString removeAndReturnFirstLine(QString& s); static QString removeHTMLTags(const QString sText=""); }; #endif tuxcards/src/utilities/crypt/BlowFish.cpp000555 000765 000024 00000013526 11420350116 021174 0ustar00alexstaff000000 000000 // blowfish.cpp C++ class implementation of the BLOWFISH encryption algorithm // _THE BLOWFISH ENCRYPTION ALGORITHM_ // by Bruce Schneier // Revised code--3/20/94 // Converted to C++ class 5/96, Jim Conger //#include "stdafx.h" #include "../../global.h" #include "BlowFish.h" #include "BlowFish2.h" // holds the random digit tables #define S(x,i) (SBoxes[i][x.w.byte##i]) #define bf_F(x) (((S(x,0) + S(x,1)) ^ S(x,2)) + S(x,3)) #define ROUND(a,b,n) (a.dword ^= bf_F(b) ^ PArray[n]) CBlowFish::CBlowFish () { PArray = new DWORD [18] ; SBoxes = new DWORD [4][256] ; } CBlowFish::~CBlowFish () { DELETE( PArray ); delete [] SBoxes; } // the low level (private) encryption function void CBlowFish::Blowfish_encipher (DWORD *xl, DWORD *xr) { union aword Xl, Xr ; Xl.dword = *xl ; Xr.dword = *xr ; Xl.dword ^= PArray [0]; ROUND (Xr, Xl, 1) ; ROUND (Xl, Xr, 2) ; ROUND (Xr, Xl, 3) ; ROUND (Xl, Xr, 4) ; ROUND (Xr, Xl, 5) ; ROUND (Xl, Xr, 6) ; ROUND (Xr, Xl, 7) ; ROUND (Xl, Xr, 8) ; ROUND (Xr, Xl, 9) ; ROUND (Xl, Xr, 10) ; ROUND (Xr, Xl, 11) ; ROUND (Xl, Xr, 12) ; ROUND (Xr, Xl, 13) ; ROUND (Xl, Xr, 14) ; ROUND (Xr, Xl, 15) ; ROUND (Xl, Xr, 16) ; Xr.dword ^= PArray [17] ; *xr = Xl.dword ; *xl = Xr.dword ; } // the low level (private) decryption function void CBlowFish::Blowfish_decipher (DWORD *xl, DWORD *xr) { union aword Xl ; union aword Xr ; Xl.dword = *xl ; Xr.dword = *xr ; Xl.dword ^= PArray [17] ; ROUND (Xr, Xl, 16) ; ROUND (Xl, Xr, 15) ; ROUND (Xr, Xl, 14) ; ROUND (Xl, Xr, 13) ; ROUND (Xr, Xl, 12) ; ROUND (Xl, Xr, 11) ; ROUND (Xr, Xl, 10) ; ROUND (Xl, Xr, 9) ; ROUND (Xr, Xl, 8) ; ROUND (Xl, Xr, 7) ; ROUND (Xr, Xl, 6) ; ROUND (Xl, Xr, 5) ; ROUND (Xr, Xl, 4) ; ROUND (Xl, Xr, 3) ; ROUND (Xr, Xl, 2) ; ROUND (Xl, Xr, 1) ; Xr.dword ^= PArray[0]; *xl = Xr.dword; *xr = Xl.dword; } // constructs the enctryption sieve void CBlowFish::Initialize (BYTE key[], int keybytes) { int i, j ; DWORD data, datal, datar ; union aword temp ; // first fill arrays from data tables for (i = 0 ; i < 18 ; i++) PArray [i] = bf_P [i] ; for (i = 0 ; i < 4 ; i++) { for (j = 0 ; j < 256 ; j++) SBoxes [i][j] = bf_S [i][j] ; } j = 0 ; for (i = 0 ; i < NPASS + 2 ; ++i) { temp.dword = 0 ; temp.w.byte0 = key[j]; temp.w.byte1 = key[(j+1) % keybytes] ; temp.w.byte2 = key[(j+2) % keybytes] ; temp.w.byte3 = key[(j+3) % keybytes] ; data = temp.dword ; PArray [i] ^= data ; j = (j + 4) % keybytes ; } datal = 0 ; datar = 0 ; for (i = 0 ; i < NPASS + 2 ; i += 2) { Blowfish_encipher (&datal, &datar) ; PArray [i] = datal ; PArray [i + 1] = datar ; } for (i = 0 ; i < 4 ; ++i) { for (j = 0 ; j < 256 ; j += 2) { Blowfish_encipher (&datal, &datar) ; SBoxes [i][j] = datal ; SBoxes [i][j + 1] = datar ; } } } // get output length, which must be even MOD 8 DWORD CBlowFish::GetOutputLength (DWORD lInputLong) { DWORD lVal ; lVal = lInputLong % 8 ; // find out if uneven number of bytes at the end if (lVal != 0) return lInputLong + 8 - lVal ; else return lInputLong; } // Encode pIntput into pOutput. Input length in lSize. Returned value // is length of output which will be even MOD 8 bytes. Input buffer and // output buffer can be the same, but be sure buffer length is even MOD8. DWORD CBlowFish::Encode (BYTE * pInput, BYTE * pOutput, DWORD lSize) { DWORD lCount, lOutSize, lGoodBytes ; BYTE *pi, *po ; int i, j ; int SameDest = (pInput == pOutput ? 1 : 0) ; lOutSize = GetOutputLength (lSize) ; for (lCount = 0 ; lCount < lOutSize ; lCount += 8) { if (SameDest) // if encoded data is being written into input buffer { if (lCount < lSize - 7) // if not dealing with uneven bytes at end { Blowfish_encipher ((DWORD *) pInput, (DWORD *) (pInput + 4)) ; } else // pad end of data with null bytes to complete encryption { po = pInput + lSize ; // point at byte past the end of actual data j = (int) (lOutSize - lSize) ; // number of bytes to set to null for (i = 0 ; i < j ; i++) *po++ = 0 ; Blowfish_encipher ((DWORD *) pInput, (DWORD *) (pInput + 4)) ; } pInput += 8 ; } else // output buffer not equal to input buffer, so must copy { // input to output buffer prior to encrypting if (lCount < lSize - 7) // if not dealing with uneven bytes at end { pi = pInput ; po = pOutput ; for (i = 0 ; i < 8 ; i++) // copy bytes to output *po++ = *pi++ ; Blowfish_encipher ((DWORD *) pOutput, // now encrypt them (DWORD *) (pOutput + 4)) ; } else // pad end of data with null bytes to complete encryption { lGoodBytes = lSize - lCount ; // number of remaining data bytes po = pOutput ; for (i = 0 ; i < (int) lGoodBytes ; i++) *po++ = *pInput++ ; for (j = i ; j < 8 ; j++) *po++ = 0 ; Blowfish_encipher ((DWORD *) pOutput, (DWORD *) (pOutput + 4)) ; } pInput += 8 ; pOutput += 8 ; } } return lOutSize ; } // Decode pIntput into pOutput. Input length in lSize. Input buffer and // output buffer can be the same, but be sure buffer length is even MOD8. void CBlowFish::Decode (BYTE * pInput, BYTE * pOutput, DWORD lSize) { DWORD lCount ; BYTE *pi, *po ; int i ; int SameDest = (pInput == pOutput ? 1 : 0) ; for (lCount = 0 ; lCount < lSize ; lCount += 8) { if (SameDest) // if encoded data is being written into input buffer { Blowfish_decipher ((DWORD *) pInput, (DWORD *) (pInput + 4)) ; pInput += 8 ; } else // output buffer not equal to input buffer { // so copy input to output before decoding pi = pInput ; po = pOutput ; for (i = 0 ; i < 8 ; i++) *po++ = *pi++ ; Blowfish_decipher ((DWORD *) pOutput, (DWORD *) (pOutput + 4)) ; pInput += 8 ; pOutput += 8 ; } } } tuxcards/src/utilities/crypt/BlowFish.h000555 000765 000024 00000003172 11420350116 020635 0ustar00alexstaff000000 000000 // blowfish.h interface file for blowfish.cpp // _THE BLOWFISH ENCRYPTION ALGORITHM_ // by Bruce Schneier // Revised code--3/20/94 // Converted to C++ class 5/96, Jim Conger #ifndef BLOWFISH_H_INCLUDED_ #define BLOWFISH_H_INCLUDED_ #define MAXKEYBYTES 56 // 448 bits max #define NPASS 16 // SBox passes #define DWORD unsigned long #define WORD unsigned short #define BYTE unsigned char class CBlowFish { // choose a byte order for your hardware #define ORDER_DCBA // chosing Intel in this case #ifdef ORDER_DCBA // DCBA - little endian - intel union aword { DWORD dword; BYTE byte [4]; struct { unsigned int byte3:8; unsigned int byte2:8; unsigned int byte1:8; unsigned int byte0:8; } w; }; #elif ORDER_ABCD // ABCD - big endian - motorola union aword { DWORD dword; BYTE byte [4]; struct { unsigned int byte0:8; unsigned int byte1:8; unsigned int byte2:8; unsigned int byte3:8; } w; }; #elif ORDER_BADC // BADC - vax union aword { DWORD dword; BYTE byte [4]; struct { unsigned int byte1:8; unsigned int byte0:8; unsigned int byte3:8; unsigned int byte2:8; } w; }; #endif public: CBlowFish (); ~CBlowFish (); void Initialize (BYTE key[], int keybytes); DWORD GetOutputLength (DWORD lInputLong); DWORD Encode (BYTE * pInput, BYTE * pOutput, DWORD lSize); void Decode (BYTE * pInput, BYTE * pOutput, DWORD lSize); private: DWORD * PArray; DWORD (* SBoxes)[256]; void Blowfish_encipher (DWORD *xl, DWORD *xr); void Blowfish_decipher (DWORD *xl, DWORD *xr); }; #endif //BLOWFISH_H_INCLUDED_ tuxcards/src/utilities/crypt/BlowFish2.h000555 000765 000024 00000031554 11420350116 020724 0ustar00alexstaff000000 000000 // blowfish.h2 header file containing random number tables static DWORD bf_P[NPASS + 2] = { 0x243f6a88, 0x85a308d3, 0x13198a2e, 0x03707344, 0xa4093822, 0x299f31d0, 0x082efa98, 0xec4e6c89, 0x452821e6, 0x38d01377, 0xbe5466cf, 0x34e90c6c, 0xc0ac29b7, 0xc97c50dd, 0x3f84d5b5, 0xb5470917, 0x9216d5d9, 0x8979fb1b, }; static DWORD bf_S[4][256] = { { 0xd1310ba6, 0x98dfb5ac, 0x2ffd72db, 0xd01adfb7, 0xb8e1afed, 0x6a267e96, 0xba7c9045, 0xf12c7f99, 0x24a19947, 0xb3916cf7, 0x0801f2e2, 0x858efc16, 0x636920d8, 0x71574e69, 0xa458fea3, 0xf4933d7e, 0x0d95748f, 0x728eb658, 0x718bcd58, 0x82154aee, 0x7b54a41d, 0xc25a59b5, 0x9c30d539, 0x2af26013, 0xc5d1b023, 0x286085f0, 0xca417918, 0xb8db38ef, 0x8e79dcb0, 0x603a180e, 0x6c9e0e8b, 0xb01e8a3e, 0xd71577c1, 0xbd314b27, 0x78af2fda, 0x55605c60, 0xe65525f3, 0xaa55ab94, 0x57489862, 0x63e81440, 0x55ca396a, 0x2aab10b6, 0xb4cc5c34, 0x1141e8ce, 0xa15486af, 0x7c72e993, 0xb3ee1411, 0x636fbc2a, 0x2ba9c55d, 0x741831f6, 0xce5c3e16, 0x9b87931e, 0xafd6ba33, 0x6c24cf5c, 0x7a325381, 0x28958677, 0x3b8f4898, 0x6b4bb9af, 0xc4bfe81b, 0x66282193, 0x61d809cc, 0xfb21a991, 0x487cac60, 0x5dec8032, 0xef845d5d, 0xe98575b1, 0xdc262302, 0xeb651b88, 0x23893e81, 0xd396acc5, 0x0f6d6ff3, 0x83f44239, 0x2e0b4482, 0xa4842004, 0x69c8f04a, 0x9e1f9b5e, 0x21c66842, 0xf6e96c9a, 0x670c9c61, 0xabd388f0, 0x6a51a0d2, 0xd8542f68, 0x960fa728, 0xab5133a3, 0x6eef0b6c, 0x137a3be4, 0xba3bf050, 0x7efb2a98, 0xa1f1651d, 0x39af0176, 0x66ca593e, 0x82430e88, 0x8cee8619, 0x456f9fb4, 0x7d84a5c3, 0x3b8b5ebe, 0xe06f75d8, 0x85c12073, 0x401a449f, 0x56c16aa6, 0x4ed3aa62, 0x363f7706, 0x1bfedf72, 0x429b023d, 0x37d0d724, 0xd00a1248, 0xdb0fead3, 0x49f1c09b, 0x075372c9, 0x80991b7b, 0x25d479d8, 0xf6e8def7, 0xe3fe501a, 0xb6794c3b, 0x976ce0bd, 0x04c006ba, 0xc1a94fb6, 0x409f60c4, 0x5e5c9ec2, 0x196a2463, 0x68fb6faf, 0x3e6c53b5, 0x1339b2eb, 0x3b52ec6f, 0x6dfc511f, 0x9b30952c, 0xcc814544, 0xaf5ebd09, 0xbee3d004, 0xde334afd, 0x660f2807, 0x192e4bb3, 0xc0cba857, 0x45c8740f, 0xd20b5f39, 0xb9d3fbdb, 0x5579c0bd, 0x1a60320a, 0xd6a100c6, 0x402c7279, 0x679f25fe, 0xfb1fa3cc, 0x8ea5e9f8, 0xdb3222f8, 0x3c7516df, 0xfd616b15, 0x2f501ec8, 0xad0552ab, 0x323db5fa, 0xfd238760, 0x53317b48, 0x3e00df82, 0x9e5c57bb, 0xca6f8ca0, 0x1a87562e, 0xdf1769db, 0xd542a8f6, 0x287effc3, 0xac6732c6, 0x8c4f5573, 0x695b27b0, 0xbbca58c8, 0xe1ffa35d, 0xb8f011a0, 0x10fa3d98, 0xfd2183b8, 0x4afcb56c, 0x2dd1d35b, 0x9a53e479, 0xb6f84565, 0xd28e49bc, 0x4bfb9790, 0xe1ddf2da, 0xa4cb7e33, 0x62fb1341, 0xcee4c6e8, 0xef20cada, 0x36774c01, 0xd07e9efe, 0x2bf11fb4, 0x95dbda4d, 0xae909198, 0xeaad8e71, 0x6b93d5a0, 0xd08ed1d0, 0xafc725e0, 0x8e3c5b2f, 0x8e7594b7, 0x8ff6e2fb, 0xf2122b64, 0x8888b812, 0x900df01c, 0x4fad5ea0, 0x688fc31c, 0xd1cff191, 0xb3a8c1ad, 0x2f2f2218, 0xbe0e1777, 0xea752dfe, 0x8b021fa1, 0xe5a0cc0f, 0xb56f74e8, 0x18acf3d6, 0xce89e299, 0xb4a84fe0, 0xfd13e0b7, 0x7cc43b81, 0xd2ada8d9, 0x165fa266, 0x80957705, 0x93cc7314, 0x211a1477, 0xe6ad2065, 0x77b5fa86, 0xc75442f5, 0xfb9d35cf, 0xebcdaf0c, 0x7b3e89a0, 0xd6411bd3, 0xae1e7e49, 0x00250e2d, 0x2071b35e, 0x226800bb, 0x57b8e0af, 0x2464369b, 0xf009b91e, 0x5563911d, 0x59dfa6aa, 0x78c14389, 0xd95a537f, 0x207d5ba2, 0x02e5b9c5, 0x83260376, 0x6295cfa9, 0x11c81968, 0x4e734a41, 0xb3472dca, 0x7b14a94a, 0x1b510052, 0x9a532915, 0xd60f573f, 0xbc9bc6e4, 0x2b60a476, 0x81e67400, 0x08ba6fb5, 0x571be91f, 0xf296ec6b, 0x2a0dd915, 0xb6636521, 0xe7b9f9b6, 0xff34052e, 0xc5855664, 0x53b02d5d, 0xa99f8fa1, 0x08ba4799, 0x6e85076a }, { 0x4b7a70e9, 0xb5b32944, 0xdb75092e, 0xc4192623, 0xad6ea6b0, 0x49a7df7d, 0x9cee60b8, 0x8fedb266, 0xecaa8c71, 0x699a17ff, 0x5664526c, 0xc2b19ee1, 0x193602a5, 0x75094c29, 0xa0591340, 0xe4183a3e, 0x3f54989a, 0x5b429d65, 0x6b8fe4d6, 0x99f73fd6, 0xa1d29c07, 0xefe830f5, 0x4d2d38e6, 0xf0255dc1, 0x4cdd2086, 0x8470eb26, 0x6382e9c6, 0x021ecc5e, 0x09686b3f, 0x3ebaefc9, 0x3c971814, 0x6b6a70a1, 0x687f3584, 0x52a0e286, 0xb79c5305, 0xaa500737, 0x3e07841c, 0x7fdeae5c, 0x8e7d44ec, 0x5716f2b8, 0xb03ada37, 0xf0500c0d, 0xf01c1f04, 0x0200b3ff, 0xae0cf51a, 0x3cb574b2, 0x25837a58, 0xdc0921bd, 0xd19113f9, 0x7ca92ff6, 0x94324773, 0x22f54701, 0x3ae5e581, 0x37c2dadc, 0xc8b57634, 0x9af3dda7, 0xa9446146, 0x0fd0030e, 0xecc8c73e, 0xa4751e41, 0xe238cd99, 0x3bea0e2f, 0x3280bba1, 0x183eb331, 0x4e548b38, 0x4f6db908, 0x6f420d03, 0xf60a04bf, 0x2cb81290, 0x24977c79, 0x5679b072, 0xbcaf89af, 0xde9a771f, 0xd9930810, 0xb38bae12, 0xdccf3f2e, 0x5512721f, 0x2e6b7124, 0x501adde6, 0x9f84cd87, 0x7a584718, 0x7408da17, 0xbc9f9abc, 0xe94b7d8c, 0xec7aec3a, 0xdb851dfa, 0x63094366, 0xc464c3d2, 0xef1c1847, 0x3215d908, 0xdd433b37, 0x24c2ba16, 0x12a14d43, 0x2a65c451, 0x50940002, 0x133ae4dd, 0x71dff89e, 0x10314e55, 0x81ac77d6, 0x5f11199b, 0x043556f1, 0xd7a3c76b, 0x3c11183b, 0x5924a509, 0xf28fe6ed, 0x97f1fbfa, 0x9ebabf2c, 0x1e153c6e, 0x86e34570, 0xeae96fb1, 0x860e5e0a, 0x5a3e2ab3, 0x771fe71c, 0x4e3d06fa, 0x2965dcb9, 0x99e71d0f, 0x803e89d6, 0x5266c825, 0x2e4cc978, 0x9c10b36a, 0xc6150eba, 0x94e2ea78, 0xa5fc3c53, 0x1e0a2df4, 0xf2f74ea7, 0x361d2b3d, 0x1939260f, 0x19c27960, 0x5223a708, 0xf71312b6, 0xebadfe6e, 0xeac31f66, 0xe3bc4595, 0xa67bc883, 0xb17f37d1, 0x018cff28, 0xc332ddef, 0xbe6c5aa5, 0x65582185, 0x68ab9802, 0xeecea50f, 0xdb2f953b, 0x2aef7dad, 0x5b6e2f84, 0x1521b628, 0x29076170, 0xecdd4775, 0x619f1510, 0x13cca830, 0xeb61bd96, 0x0334fe1e, 0xaa0363cf, 0xb5735c90, 0x4c70a239, 0xd59e9e0b, 0xcbaade14, 0xeecc86bc, 0x60622ca7, 0x9cab5cab, 0xb2f3846e, 0x648b1eaf, 0x19bdf0ca, 0xa02369b9, 0x655abb50, 0x40685a32, 0x3c2ab4b3, 0x319ee9d5, 0xc021b8f7, 0x9b540b19, 0x875fa099, 0x95f7997e, 0x623d7da8, 0xf837889a, 0x97e32d77, 0x11ed935f, 0x16681281, 0x0e358829, 0xc7e61fd6, 0x96dedfa1, 0x7858ba99, 0x57f584a5, 0x1b227263, 0x9b83c3ff, 0x1ac24696, 0xcdb30aeb, 0x532e3054, 0x8fd948e4, 0x6dbc3128, 0x58ebf2ef, 0x34c6ffea, 0xfe28ed61, 0xee7c3c73, 0x5d4a14d9, 0xe864b7e3, 0x42105d14, 0x203e13e0, 0x45eee2b6, 0xa3aaabea, 0xdb6c4f15, 0xfacb4fd0, 0xc742f442, 0xef6abbb5, 0x654f3b1d, 0x41cd2105, 0xd81e799e, 0x86854dc7, 0xe44b476a, 0x3d816250, 0xcf62a1f2, 0x5b8d2646, 0xfc8883a0, 0xc1c7b6a3, 0x7f1524c3, 0x69cb7492, 0x47848a0b, 0x5692b285, 0x095bbf00, 0xad19489d, 0x1462b174, 0x23820e00, 0x58428d2a, 0x0c55f5ea, 0x1dadf43e, 0x233f7061, 0x3372f092, 0x8d937e41, 0xd65fecf1, 0x6c223bdb, 0x7cde3759, 0xcbee7460, 0x4085f2a7, 0xce77326e, 0xa6078084, 0x19f8509e, 0xe8efd855, 0x61d99735, 0xa969a7aa, 0xc50c06c2, 0x5a04abfc, 0x800bcadc, 0x9e447a2e, 0xc3453484, 0xfdd56705, 0x0e1e9ec9, 0xdb73dbd3, 0x105588cd, 0x675fda79, 0xe3674340, 0xc5c43465, 0x713e38d8, 0x3d28f89e, 0xf16dff20, 0x153e21e7, 0x8fb03d4a, 0xe6e39f2b, 0xdb83adf7 }, { 0xe93d5a68, 0x948140f7, 0xf64c261c, 0x94692934, 0x411520f7, 0x7602d4f7, 0xbcf46b2e, 0xd4a20068, 0xd4082471, 0x3320f46a, 0x43b7d4b7, 0x500061af, 0x1e39f62e, 0x97244546, 0x14214f74, 0xbf8b8840, 0x4d95fc1d, 0x96b591af, 0x70f4ddd3, 0x66a02f45, 0xbfbc09ec, 0x03bd9785, 0x7fac6dd0, 0x31cb8504, 0x96eb27b3, 0x55fd3941, 0xda2547e6, 0xabca0a9a, 0x28507825, 0x530429f4, 0x0a2c86da, 0xe9b66dfb, 0x68dc1462, 0xd7486900, 0x680ec0a4, 0x27a18dee, 0x4f3ffea2, 0xe887ad8c, 0xb58ce006, 0x7af4d6b6, 0xaace1e7c, 0xd3375fec, 0xce78a399, 0x406b2a42, 0x20fe9e35, 0xd9f385b9, 0xee39d7ab, 0x3b124e8b, 0x1dc9faf7, 0x4b6d1856, 0x26a36631, 0xeae397b2, 0x3a6efa74, 0xdd5b4332, 0x6841e7f7, 0xca7820fb, 0xfb0af54e, 0xd8feb397, 0x454056ac, 0xba489527, 0x55533a3a, 0x20838d87, 0xfe6ba9b7, 0xd096954b, 0x55a867bc, 0xa1159a58, 0xcca92963, 0x99e1db33, 0xa62a4a56, 0x3f3125f9, 0x5ef47e1c, 0x9029317c, 0xfdf8e802, 0x04272f70, 0x80bb155c, 0x05282ce3, 0x95c11548, 0xe4c66d22, 0x48c1133f, 0xc70f86dc, 0x07f9c9ee, 0x41041f0f, 0x404779a4, 0x5d886e17, 0x325f51eb, 0xd59bc0d1, 0xf2bcc18f, 0x41113564, 0x257b7834, 0x602a9c60, 0xdff8e8a3, 0x1f636c1b, 0x0e12b4c2, 0x02e1329e, 0xaf664fd1, 0xcad18115, 0x6b2395e0, 0x333e92e1, 0x3b240b62, 0xeebeb922, 0x85b2a20e, 0xe6ba0d99, 0xde720c8c, 0x2da2f728, 0xd0127845, 0x95b794fd, 0x647d0862, 0xe7ccf5f0, 0x5449a36f, 0x877d48fa, 0xc39dfd27, 0xf33e8d1e, 0x0a476341, 0x992eff74, 0x3a6f6eab, 0xf4f8fd37, 0xa812dc60, 0xa1ebddf8, 0x991be14c, 0xdb6e6b0d, 0xc67b5510, 0x6d672c37, 0x2765d43b, 0xdcd0e804, 0xf1290dc7, 0xcc00ffa3, 0xb5390f92, 0x690fed0b, 0x667b9ffb, 0xcedb7d9c, 0xa091cf0b, 0xd9155ea3, 0xbb132f88, 0x515bad24, 0x7b9479bf, 0x763bd6eb, 0x37392eb3, 0xcc115979, 0x8026e297, 0xf42e312d, 0x6842ada7, 0xc66a2b3b, 0x12754ccc, 0x782ef11c, 0x6a124237, 0xb79251e7, 0x06a1bbe6, 0x4bfb6350, 0x1a6b1018, 0x11caedfa, 0x3d25bdd8, 0xe2e1c3c9, 0x44421659, 0x0a121386, 0xd90cec6e, 0xd5abea2a, 0x64af674e, 0xda86a85f, 0xbebfe988, 0x64e4c3fe, 0x9dbc8057, 0xf0f7c086, 0x60787bf8, 0x6003604d, 0xd1fd8346, 0xf6381fb0, 0x7745ae04, 0xd736fccc, 0x83426b33, 0xf01eab71, 0xb0804187, 0x3c005e5f, 0x77a057be, 0xbde8ae24, 0x55464299, 0xbf582e61, 0x4e58f48f, 0xf2ddfda2, 0xf474ef38, 0x8789bdc2, 0x5366f9c3, 0xc8b38e74, 0xb475f255, 0x46fcd9b9, 0x7aeb2661, 0x8b1ddf84, 0x846a0e79, 0x915f95e2, 0x466e598e, 0x20b45770, 0x8cd55591, 0xc902de4c, 0xb90bace1, 0xbb8205d0, 0x11a86248, 0x7574a99e, 0xb77f19b6, 0xe0a9dc09, 0x662d09a1, 0xc4324633, 0xe85a1f02, 0x09f0be8c, 0x4a99a025, 0x1d6efe10, 0x1ab93d1d, 0x0ba5a4df, 0xa186f20f, 0x2868f169, 0xdcb7da83, 0x573906fe, 0xa1e2ce9b, 0x4fcd7f52, 0x50115e01, 0xa70683fa, 0xa002b5c4, 0x0de6d027, 0x9af88c27, 0x773f8641, 0xc3604c06, 0x61a806b5, 0xf0177a28, 0xc0f586e0, 0x006058aa, 0x30dc7d62, 0x11e69ed7, 0x2338ea63, 0x53c2dd94, 0xc2c21634, 0xbbcbee56, 0x90bcb6de, 0xebfc7da1, 0xce591d76, 0x6f05e409, 0x4b7c0188, 0x39720a3d, 0x7c927c24, 0x86e3725f, 0x724d9db9, 0x1ac15bb4, 0xd39eb8fc, 0xed545578, 0x08fca5b5, 0xd83d7cd3, 0x4dad0fc4, 0x1e50ef5e, 0xb161e6f8, 0xa28514d9, 0x6c51133c, 0x6fd5c7e7, 0x56e14ec4, 0x362abfce, 0xddc6c837, 0xd79a3234, 0x92638212, 0x670efa8e, 0x406000e0 }, { 0x3a39ce37, 0xd3faf5cf, 0xabc27737, 0x5ac52d1b, 0x5cb0679e, 0x4fa33742, 0xd3822740, 0x99bc9bbe, 0xd5118e9d, 0xbf0f7315, 0xd62d1c7e, 0xc700c47b, 0xb78c1b6b, 0x21a19045, 0xb26eb1be, 0x6a366eb4, 0x5748ab2f, 0xbc946e79, 0xc6a376d2, 0x6549c2c8, 0x530ff8ee, 0x468dde7d, 0xd5730a1d, 0x4cd04dc6, 0x2939bbdb, 0xa9ba4650, 0xac9526e8, 0xbe5ee304, 0xa1fad5f0, 0x6a2d519a, 0x63ef8ce2, 0x9a86ee22, 0xc089c2b8, 0x43242ef6, 0xa51e03aa, 0x9cf2d0a4, 0x83c061ba, 0x9be96a4d, 0x8fe51550, 0xba645bd6, 0x2826a2f9, 0xa73a3ae1, 0x4ba99586, 0xef5562e9, 0xc72fefd3, 0xf752f7da, 0x3f046f69, 0x77fa0a59, 0x80e4a915, 0x87b08601, 0x9b09e6ad, 0x3b3ee593, 0xe990fd5a, 0x9e34d797, 0x2cf0b7d9, 0x022b8b51, 0x96d5ac3a, 0x017da67d, 0xd1cf3ed6, 0x7c7d2d28, 0x1f9f25cf, 0xadf2b89b, 0x5ad6b472, 0x5a88f54c, 0xe029ac71, 0xe019a5e6, 0x47b0acfd, 0xed93fa9b, 0xe8d3c48d, 0x283b57cc, 0xf8d56629, 0x79132e28, 0x785f0191, 0xed756055, 0xf7960e44, 0xe3d35e8c, 0x15056dd4, 0x88f46dba, 0x03a16125, 0x0564f0bd, 0xc3eb9e15, 0x3c9057a2, 0x97271aec, 0xa93a072a, 0x1b3f6d9b, 0x1e6321f5, 0xf59c66fb, 0x26dcf319, 0x7533d928, 0xb155fdf5, 0x03563482, 0x8aba3cbb, 0x28517711, 0xc20ad9f8, 0xabcc5167, 0xccad925f, 0x4de81751, 0x3830dc8e, 0x379d5862, 0x9320f991, 0xea7a90c2, 0xfb3e7bce, 0x5121ce64, 0x774fbe32, 0xa8b6e37e, 0xc3293d46, 0x48de5369, 0x6413e680, 0xa2ae0810, 0xdd6db224, 0x69852dfd, 0x09072166, 0xb39a460a, 0x6445c0dd, 0x586cdecf, 0x1c20c8ae, 0x5bbef7dd, 0x1b588d40, 0xccd2017f, 0x6bb4e3bb, 0xdda26a7e, 0x3a59ff45, 0x3e350a44, 0xbcb4cdd5, 0x72eacea8, 0xfa6484bb, 0x8d6612ae, 0xbf3c6f47, 0xd29be463, 0x542f5d9e, 0xaec2771b, 0xf64e6370, 0x740e0d8d, 0xe75b1357, 0xf8721671, 0xaf537d5d, 0x4040cb08, 0x4eb4e2cc, 0x34d2466a, 0x0115af84, 0xe1b00428, 0x95983a1d, 0x06b89fb4, 0xce6ea048, 0x6f3f3b82, 0x3520ab82, 0x011a1d4b, 0x277227f8, 0x611560b1, 0xe7933fdc, 0xbb3a792b, 0x344525bd, 0xa08839e1, 0x51ce794b, 0x2f32c9b7, 0xa01fbac9, 0xe01cc87e, 0xbcc7d1f6, 0xcf0111c3, 0xa1e8aac7, 0x1a908749, 0xd44fbd9a, 0xd0dadecb, 0xd50ada38, 0x0339c32a, 0xc6913667, 0x8df9317c, 0xe0b12b4f, 0xf79e59b7, 0x43f5bb3a, 0xf2d519ff, 0x27d9459c, 0xbf97222c, 0x15e6fc2a, 0x0f91fc71, 0x9b941525, 0xfae59361, 0xceb69ceb, 0xc2a86459, 0x12baa8d1, 0xb6c1075e, 0xe3056a0c, 0x10d25065, 0xcb03a442, 0xe0ec6e0e, 0x1698db3b, 0x4c98a0be, 0x3278e964, 0x9f1f9532, 0xe0d392df, 0xd3a0342b, 0x8971f21e, 0x1b0a7441, 0x4ba3348c, 0xc5be7120, 0xc37632d8, 0xdf359f8d, 0x9b992f2e, 0xe60b6f47, 0x0fe3f11d, 0xe54cda54, 0x1edad891, 0xce6279cf, 0xcd3e7e6f, 0x1618b166, 0xfd2c1d05, 0x848fd2c5, 0xf6fb2299, 0xf523f357, 0xa6327623, 0x93a83531, 0x56cccd02, 0xacf08162, 0x5a75ebb5, 0x6e163697, 0x88d273cc, 0xde966292, 0x81b949d0, 0x4c50901b, 0x71c65614, 0xe6c6c7bd, 0x327a140a, 0x45e1d006, 0xc3f27b9a, 0xc9aa53fd, 0x62a80f00, 0xbb25bfe2, 0x35bdd2f6, 0x71126905, 0xb2040222, 0xb6cbcf7c, 0xcd769c2b, 0x53113ec0, 0x1640e3d3, 0x38abbd60, 0x2547adf0, 0xba38209c, 0xf746ce76, 0x77afa1c5, 0x20756060, 0x85cbfe4e, 0x8ae88dd8, 0x7aaaf9b0, 0x4cf9aa7e, 0x1948c25c, 0x02fb8a8c, 0x01c36ae4, 0xd6ebe1f9, 0x90d4f869, 0xa65cdea0, 0x3f09252d, 0xc208e69f, 0xb74e6132, 0xce77e25b, 0x578fdfe3, 0x3ac372e6 } }; tuxcards/src/utilities/crypt/MD5.cpp000555 000765 000024 00000021347 11420350116 020044 0ustar00alexstaff000000 000000 //#include "stdafx.h" #include "MD5.h" #include //memset #include //sprintf #ifdef _DEBUG #undef THIS_FILE static char THIS_FILE[]=__FILE__; #define new DEBUG_NEW #endif #ifndef NULL #define NULL 0 #endif // Constants for MD5Transform routine. #define S11 7 #define S12 12 #define S13 17 #define S14 22 #define S21 5 #define S22 9 #define S23 14 #define S24 20 #define S31 4 #define S32 11 #define S33 16 #define S34 23 #define S41 6 #define S42 10 #define S43 15 #define S44 21 // F, G, H and I are basic MD5 functions. #define F(x, y, z) (((x) & (y)) | ((~x) & (z))) #define G(x, y, z) (((x) & (z)) | ((y) & (~z))) #define H(x, y, z) ((x) ^ (y) ^ (z)) #define I(x, y, z) ((y) ^ ((x) | (~z))) // ROTATE_LEFT rotates x left n bits. #define ROTATE_LEFT(x, n) (((x) << (n)) | ((x) >> (32-(n)))) // FF, GG, HH, and II transformations for rounds 1, 2, 3, and 4. // Rotation is separate from addition to prevent recomputation. #define FF(a, b, c, d, x, s, ac) { \ (a) += F ((b), (c), (d)) + (x) + (UINT4)(ac); \ (a) = ROTATE_LEFT ((a), (s)); \ (a) += (b); \ } #define GG(a, b, c, d, x, s, ac) { \ (a) += G ((b), (c), (d)) + (x) + (UINT4)(ac); \ (a) = ROTATE_LEFT ((a), (s)); \ (a) += (b); \ } #define HH(a, b, c, d, x, s, ac) { \ (a) += H ((b), (c), (d)) + (x) + (UINT4)(ac); \ (a) = ROTATE_LEFT ((a), (s)); \ (a) += (b); \ } #define II(a, b, c, d, x, s, ac) { \ (a) += I ((b), (c), (d)) + (x) + (UINT4)(ac); \ (a) = ROTATE_LEFT ((a), (s)); \ (a) += (b); \ } static unsigned char PADDING[64] = { 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; ////////////////////////////////////////////////////////////////////// // Construction/Destruction ////////////////////////////////////////////////////////////////////// CMD5::CMD5() { m_digest[0] = '\0'; //reset digest content m_digestString[32]=0; //the digest string is always 32 characters } CMD5::~CMD5() { } // MD5 initialization. Begins an MD5 operation, writing a new context. void CMD5::MD5Init() { m_digest[0] = '\0'; //reset digest content m_context.count[0] = m_context.count[1] = 0; // Load magic initialization constants. m_context.state[0] = 0x67452301; m_context.state[1] = 0xefcdab89; m_context.state[2] = 0x98badcfe; m_context.state[3] = 0x10325476; } // MD5 block update operation. Continues an MD5 message-digest operation, // processing another message block, and updating the context. void CMD5::MD5Update ( unsigned char *input, // input block unsigned int inputLen // length of input block ) { unsigned int i, index, partLen; // Compute number of bytes mod 64 index = (unsigned int)((m_context.count[0] >> 3) & 0x3F); // Update number of bits if ((m_context.count[0] += ((UINT4)inputLen << 3)) < ((UINT4)inputLen << 3)) m_context.count[1]++; m_context.count[1] += ((UINT4)inputLen >> 29); partLen = 64 - index; // Transform as many times as possible. if (inputLen >= partLen) { memcpy(&m_context.buffer[index], input, partLen); MD5Transform (m_context.state, m_context.buffer); for (i = partLen; i + 63 < inputLen; i += 64) MD5Transform (m_context.state, &input[i]); index = 0; } else i = 0; // Buffer remaining input memcpy(&m_context.buffer[index], &input[i], inputLen-i); } // MD5 finalization. Ends an MD5 message-digest operation, writing the // the message digest and zeroizing the context. void CMD5::MD5Final() { unsigned char bits[8]; unsigned int index, padLen; // Save number of bits Encode (bits, m_context.count, 8); // Pad out to 56 mod 64. index = (unsigned int)((m_context.count[0] >> 3) & 0x3f); padLen = (index < 56) ? (56 - index) : (120 - index); MD5Update(PADDING, padLen); // Append length (before padding) MD5Update(bits, 8); // Store state in digest Encode((unsigned char *)m_digest, m_context.state, 16); // Zeroize sensitive information. memset(&m_context, 0, sizeof(m_context)); } // MD5 basic transformation. Transforms state based on block. void CMD5::MD5Transform( UINT4 state[4], unsigned char block[64] ) { UINT4 a = state[0], b = state[1], c = state[2], d = state[3], x[16]; Decode (x, block, 64); // Round 1 FF (a, b, c, d, x[ 0], S11, 0xd76aa478); /* 1 */ FF (d, a, b, c, x[ 1], S12, 0xe8c7b756); /* 2 */ FF (c, d, a, b, x[ 2], S13, 0x242070db); /* 3 */ FF (b, c, d, a, x[ 3], S14, 0xc1bdceee); /* 4 */ FF (a, b, c, d, x[ 4], S11, 0xf57c0faf); /* 5 */ FF (d, a, b, c, x[ 5], S12, 0x4787c62a); /* 6 */ FF (c, d, a, b, x[ 6], S13, 0xa8304613); /* 7 */ FF (b, c, d, a, x[ 7], S14, 0xfd469501); /* 8 */ FF (a, b, c, d, x[ 8], S11, 0x698098d8); /* 9 */ FF (d, a, b, c, x[ 9], S12, 0x8b44f7af); /* 10 */ FF (c, d, a, b, x[10], S13, 0xffff5bb1); /* 11 */ FF (b, c, d, a, x[11], S14, 0x895cd7be); /* 12 */ FF (a, b, c, d, x[12], S11, 0x6b901122); /* 13 */ FF (d, a, b, c, x[13], S12, 0xfd987193); /* 14 */ FF (c, d, a, b, x[14], S13, 0xa679438e); /* 15 */ FF (b, c, d, a, x[15], S14, 0x49b40821); /* 16 */ // Round 2 GG (a, b, c, d, x[ 1], S21, 0xf61e2562); /* 17 */ GG (d, a, b, c, x[ 6], S22, 0xc040b340); /* 18 */ GG (c, d, a, b, x[11], S23, 0x265e5a51); /* 19 */ GG (b, c, d, a, x[ 0], S24, 0xe9b6c7aa); /* 20 */ GG (a, b, c, d, x[ 5], S21, 0xd62f105d); /* 21 */ GG (d, a, b, c, x[10], S22, 0x2441453); /* 22 */ GG (c, d, a, b, x[15], S23, 0xd8a1e681); /* 23 */ GG (b, c, d, a, x[ 4], S24, 0xe7d3fbc8); /* 24 */ GG (a, b, c, d, x[ 9], S21, 0x21e1cde6); /* 25 */ GG (d, a, b, c, x[14], S22, 0xc33707d6); /* 26 */ GG (c, d, a, b, x[ 3], S23, 0xf4d50d87); /* 27 */ GG (b, c, d, a, x[ 8], S24, 0x455a14ed); /* 28 */ GG (a, b, c, d, x[13], S21, 0xa9e3e905); /* 29 */ GG (d, a, b, c, x[ 2], S22, 0xfcefa3f8); /* 30 */ GG (c, d, a, b, x[ 7], S23, 0x676f02d9); /* 31 */ GG (b, c, d, a, x[12], S24, 0x8d2a4c8a); /* 32 */ // Round 3 HH (a, b, c, d, x[ 5], S31, 0xfffa3942); /* 33 */ HH (d, a, b, c, x[ 8], S32, 0x8771f681); /* 34 */ HH (c, d, a, b, x[11], S33, 0x6d9d6122); /* 35 */ HH (b, c, d, a, x[14], S34, 0xfde5380c); /* 36 */ HH (a, b, c, d, x[ 1], S31, 0xa4beea44); /* 37 */ HH (d, a, b, c, x[ 4], S32, 0x4bdecfa9); /* 38 */ HH (c, d, a, b, x[ 7], S33, 0xf6bb4b60); /* 39 */ HH (b, c, d, a, x[10], S34, 0xbebfbc70); /* 40 */ HH (a, b, c, d, x[13], S31, 0x289b7ec6); /* 41 */ HH (d, a, b, c, x[ 0], S32, 0xeaa127fa); /* 42 */ HH (c, d, a, b, x[ 3], S33, 0xd4ef3085); /* 43 */ HH (b, c, d, a, x[ 6], S34, 0x4881d05); /* 44 */ HH (a, b, c, d, x[ 9], S31, 0xd9d4d039); /* 45 */ HH (d, a, b, c, x[12], S32, 0xe6db99e5); /* 46 */ HH (c, d, a, b, x[15], S33, 0x1fa27cf8); /* 47 */ HH (b, c, d, a, x[ 2], S34, 0xc4ac5665); /* 48 */ // Round 4 II (a, b, c, d, x[ 0], S41, 0xf4292244); /* 49 */ II (d, a, b, c, x[ 7], S42, 0x432aff97); /* 50 */ II (c, d, a, b, x[14], S43, 0xab9423a7); /* 51 */ II (b, c, d, a, x[ 5], S44, 0xfc93a039); /* 52 */ II (a, b, c, d, x[12], S41, 0x655b59c3); /* 53 */ II (d, a, b, c, x[ 3], S42, 0x8f0ccc92); /* 54 */ II (c, d, a, b, x[10], S43, 0xffeff47d); /* 55 */ II (b, c, d, a, x[ 1], S44, 0x85845dd1); /* 56 */ II (a, b, c, d, x[ 8], S41, 0x6fa87e4f); /* 57 */ II (d, a, b, c, x[15], S42, 0xfe2ce6e0); /* 58 */ II (c, d, a, b, x[ 6], S43, 0xa3014314); /* 59 */ II (b, c, d, a, x[13], S44, 0x4e0811a1); /* 60 */ II (a, b, c, d, x[ 4], S41, 0xf7537e82); /* 61 */ II (d, a, b, c, x[11], S42, 0xbd3af235); /* 62 */ II (c, d, a, b, x[ 2], S43, 0x2ad7d2bb); /* 63 */ II (b, c, d, a, x[ 9], S44, 0xeb86d391); /* 64 */ state[0] += a; state[1] += b; state[2] += c; state[3] += d; // Zeroize sensitive information. memset(x, 0, sizeof (x)); } // Encodes input (UINT4) into output (unsigned char). Assumes len is a multiple of 4. void CMD5::Encode( unsigned char *output, UINT4 *input, unsigned int len ) { unsigned int i, j; for (i = 0, j = 0; j < len; i++, j += 4) { output[j] = (unsigned char)(input[i] & 0xff); output[j+1] = (unsigned char)((input[i] >> 8) & 0xff); output[j+2] = (unsigned char)((input[i] >> 16) & 0xff); output[j+3] = (unsigned char)((input[i] >> 24) & 0xff); } } // Decodes input (unsigned char) into output (UINT4). Assumes len is a multiple of 4. void CMD5::Decode( UINT4 *output, unsigned char *input, unsigned int len ) { unsigned int i, j; for (i = 0, j = 0; j < len; i++, j += 4) { output[i] = ((UINT4)input[j]) | (((UINT4)input[j+1]) << 8) | (((UINT4)input[j+2]) << 16) | (((UINT4)input[j+3]) << 24); } } const char* CMD5::GetDigest() { //make a string version of the numeric digest value int p=0; for (int i = 0; i<16; i++) { sprintf(&m_digestString[p],"%02X", m_digest[i]); p+=2; } return m_digestString; } const unsigned char* CMD5::GetDigestBinary() { return m_digest; } tuxcards/src/utilities/crypt/MD5.h000555 000765 000024 00000002576 11420350116 017514 0ustar00alexstaff000000 000000 /* Revision from MD5 original code, you can digest BINARY file Usage: char buffer[11] = "MyPassword"; CMD5 md5; md5.MD5Init(); md5.MD5Update(buffer, 5); //allows updating piece by piece md5.MD5Update(buffer+5, 5); //allows updating piece by piece md5.MD5Final(); char *digest = md5.GetDigest(); */ // MD5.h: interface for the CMD5 class. // ////////////////////////////////////////////////////////////////////// #ifndef MD5_H__INCLUDED_ #define MD5_H__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 // UINT4 defines a four byte word typedef unsigned long int UINT4; class CMD5 { public: // MD5 context typedef struct { unsigned long int state[4]; // state (ABCD) unsigned long int count[2]; // number of bits, modulo 2^64 (lsb first) unsigned char buffer[64]; // input buffer } MD5_CTX; public: CMD5(); ~CMD5(); void MD5Init(); void MD5Update( unsigned char *input, // input block unsigned int inputLen); // length of input block void MD5Final(); const char* GetDigest(); const unsigned char* GetDigestBinary(); //FIX: MIRO protected: void MD5Transform(UINT4 [4], unsigned char [64]); void Encode(unsigned char *, UINT4 *, unsigned int); void Decode(UINT4 *, unsigned char *, unsigned int); private: MD5_CTX m_context; unsigned char m_digest[16]; //the numerical value of the digest char m_digestString[33]; }; #endif tuxcards/src/utilities/crypt/StringCrypter.cpp000555 000765 000024 00000015103 11420350116 022267 0ustar00alexstaff000000 000000 /*************************************************************************** StringCrypter.cpp - description ------------------- begin : Fri Jul 18 2003 copyright : (C) 2003 by Alexander Theel email : alex.theel@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #include "BlowFish.h" #include "MD5.h" #include "qtextstream.h" #include "qstring.h" #include #include "StringCrypter.h" const int StringCrypter::BUFFER_SIZE_IN = 256; const int StringCrypter::BUFFER_SIZE_OUT = 512; #define TUX_ENCRYPT_HEADER "Fh_enc:BF10" // TOFIX aditional parameter for output path int StringCrypter::decryptString( const QByteArray& byteArray, const QString& sPassWd, QString& sOutputString ) { unsigned char buf_in[BUFFER_SIZE_IN]; unsigned char buf_out[BUFFER_SIZE_OUT]; CBlowFish fish; fish.Initialize( (unsigned char *)sPassWd.toLatin1().data(), sPassWd.length() ); // check for header string char sHeader[15]; for ( uint i = 0; i < strlen(TUX_ENCRYPT_HEADER); i++ ) { sHeader[i] = byteArray[i]; } if( 0 != strncmp(sHeader, TUX_ENCRYPT_HEADER, strlen(TUX_ENCRYPT_HEADER)) ) { // the given string was not compressed with this code std::cout<<"Invalid file header (not encrypted with TuxCards)!"< 0 ) { memset( buf_out, 0, BUFFER_SIZE_OUT ); fish.Decode( buf_in, buf_out, leftArray.size() ); sOutputString += (char*)buf_out; getLeftBytes( leftArray, tmpArray, BUFFER_SIZE_IN ); memset( buf_in, 0, BUFFER_SIZE_IN ); memcpy( buf_in, leftArray.data(), leftArray.size() ); } return NO_ERROR; } /** * Auxiliary method to retrieve the first 'len' left bytes from a byte array ('source'). * The result is put into 'dest'. * The read bytes are removed from 'source'. * * The number of bytes copied, can be retrieved via 'dest.size()'. */ void StringCrypter::getLeftBytes( QByteArray& dest, QByteArray& source, uint len ) { dest.resize(0); if ( (uint)source.size() < len ) len = source.size(); dest.resize(len); for ( uint i = 0; i < len; i++ ) { dest[i] = source[i]; } QByteArray tmp( source.size() - len, (char)0 ); for ( int i = 0; i < tmp.size(); i++ ) { tmp[i] = source[i + len]; } source.resize(0); source.resize(tmp.size()); for ( int i = 0; i < tmp.size(); i++ ) { source[i] = tmp[i]; } } void StringCrypter::encryptString( const QString& sInputString, const QString& sPassWd, QByteArray& byteArray ) { if ( sPassWd.isNull() || sPassWd == "" ) { std::cerr<<"TuxCards-ERROR: no passwd for '" < buffer size must be multiple of 8 bytes (block cypher) unsigned char buf_in[BUFFER_SIZE_IN]; unsigned char buf_out[BUFFER_SIZE_OUT]; CBlowFish fish; fish.Initialize( (unsigned char*)sPassWd.toLatin1().data(), sPassWd.length() ); byteArray.resize(0); // write header string + hash + original file size byteArray.append( TUX_ENCRYPT_HEADER ); // write password hash value (md5 algorithm) unsigned char passWordHashValue[16]; memset( passWordHashValue, 0, 16 ); memcpy( passWordHashValue, md5.GetDigestBinary(), 16); for ( int i = 0; i < 16; i++ ) { byteArray.append( (char)passWordHashValue[i] ); } // write original file size union aInt iSize; iSize.theInt = sInputString.length(); byteArray.append( (char)iSize.i.byte0 ); byteArray.append( (char)iSize.i.byte1 ); byteArray.append( (char)iSize.i.byte2 ); byteArray.append( (char)iSize.i.byte3 ).append( "*" ); int iRead, iEncodedSize; QString sTmp = sInputString; QString sLeftPart = sTmp.left( BUFFER_SIZE_IN ); memset( buf_in, 0, BUFFER_SIZE_IN ); memcpy( buf_in, sLeftPart.toLatin1().data(), sLeftPart.length() ); while( sLeftPart.length() > 0 ) { sTmp = sTmp.mid( BUFFER_SIZE_IN ); memset( buf_out, 0, BUFFER_SIZE_IN ); iRead = sLeftPart.length(); iEncodedSize = fish.Encode( buf_in, buf_out, iRead ); for ( int i = 0; i < iEncodedSize; i++ ) byteArray.append( buf_out[i] ); sLeftPart = sTmp.left( BUFFER_SIZE_IN ); memset( buf_in, 0, BUFFER_SIZE_IN ); memcpy( buf_in, sLeftPart.toLatin1().data(), sLeftPart.length() ); } } tuxcards/src/utilities/crypt/StringCrypter.h000555 000765 000024 00000003556 11420350116 021745 0ustar00alexstaff000000 000000 /*************************************************************************** StringCrypter.h - description ------------------- begin : Fri Jul 18 2003 copyright : (C) 2003 by Alexander Theel email : alex.theel@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #ifndef STRING_CRYPTER_H #define STRING_CRYPTER_H #include class StringCrypter{ public: static int decryptString( const QByteArray& byteArray, const QString& sPassWd, QString& sOutputString ); static void encryptString( const QString& sInputString, const QString& sPassWd, QByteArray& byteArray ); // Errorcodes enum { NO_ERROR = 0, ERROR_INVALID_FILEHEADER = -1, ERROR_INVALID_PASSWD = -2 }; private: static void getLeftBytes( QByteArray& dest, QByteArray& source, uint len ); union aInt { int theInt; struct { /*unsigned*/ int byte3:8; /*unsigned*/ int byte2:8; /*unsigned*/ int byte1:8; /*unsigned*/ int byte0:8; } i; }; static const int BUFFER_SIZE_IN; static const int BUFFER_SIZE_OUT; }; #endif tuxcards/src/utilities/base64/CBase64Coder.cpp000444 000765 000024 00000015247 11420350116 021505 0ustar00alexstaff000000 000000 /*************************************************************************** CBase64Coder.cpp - description ------------------- begin : Mon Feb 23 2004 copyright : (C) 2004 by Alexander Theel email : alex.theel@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #include "../../global.h" #include "CBase64Coder.h" #include CBase64Coder* CBase64Coder::static_pInstance = NULLPTR; static char static_base64Table[] = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '+', '/' }; // ------------------------------------------------------------------------------- // Private constructor. // ------------------------------------------------------------------------------- CBase64Coder::CBase64Coder() // ------------------------------------------------------------------------------- { static_pInstance = this; } // ------------------------------------------------------------------------------- const CBase64Coder& CBase64Coder::getInstance() // ------------------------------------------------------------------------------- { if ( NULLPTR == static_pInstance ) { (void) new CBase64Coder(); if ( NULLPTR == static_pInstance ) { std::cerr<<"ERROR: CBase64Coder::getInstance() - \ not enough memory to allocate object!!"< iCurrentSourcePos ) { iData = 0; unsigned char cSourceChar = source[iCurrentSourcePos++]; //printf( "\nsource[%d]=0x%x / %d",iCurrentSourcePos-1,cSourceChar,cSourceChar,cSourceChar); iData = iData | ((unsigned long int) cSourceChar << (8 * 2)); //printf( " iData=0x%x\n", iData); for ( int i = 1; i >= 0; i-- ) { if ( source.size() > iCurrentSourcePos ) { unsigned char cSourceChar = source[iCurrentSourcePos++]; //printf( "source[%d]=0x%x / %d",iCurrentSourcePos-1,cSourceChar,cSourceChar,cSourceChar); iData = iData | ((unsigned long int) cSourceChar << (8 * i)); //printf( " iData=0x%x\n", iData); } else { iPaddingCount++; } } for ( int i = 3; i >= iPaddingCount; i-- ) { unsigned char cDestChar = 63 & (iData >> (6 * i)); sDest += static_base64Table[cDestChar]; //printf(" lookingUp: %d / 0x%x |->%c\n", cDestChar, cDestChar, static_base64Table[cDestChar] ); if (++iLengthOfCurrentLine == 76) { sDest += '\n'; iLengthOfCurrentLine = 0; } } for ( int i = 0; i < iPaddingCount; i++ ) { sDest += '='; } } } // ------------------------------------------------------------------------------- void CBase64Coder::decode( QByteArray& dest, const QString& sSource ) const // ------------------------------------------------------------------------------- { dest.resize(0); dest.resize(sSource.length()); // Resize to a bigger array than needed, // shrink it later on. unsigned long int iData = 0; int iCurrentSourcePos = 0; uint uiCurrentDestPos = 0; int iPaddingCount = 0; while ( sSource.length() > iCurrentSourcePos ) { iData = 0; for ( int i = 3; i >= 0; i-- ) { if ( sSource.length() <= iCurrentSourcePos ) break; unsigned char cSourceChar = sSource[iCurrentSourcePos++].toAscii(); if ( ('\n' != cSourceChar) && ('\r' != cSourceChar) ) { if (('=' != cSourceChar) && (sSource.length() > iCurrentSourcePos)) { iData = iData | ((long int) decodeChar((char)cSourceChar) << (i * 6)); //printf(" lookingUp: %c |->%d / 0x%x\n", (char)cSourceChar, decodeChar((char)cSourceChar), decodeChar((char)cSourceChar) ); } else { iPaddingCount++; } } else { i++; } } //printf( "decode-pos=%d iData=0x%x\n", uiCurrentDestPos, iData); for ( int i = 2; i >= iPaddingCount; i--) { char cDestChar = (iData >> (i * 8)); dest[uiCurrentDestPos++] = cDestChar; } } // shrink destination to actual size dest.resize(uiCurrentDestPos); //std::cout<<"dest after base64-de"<Lb4UM5rMb9SMeMHM~PNNB O|_PFEIPFEPFE'QRGR|:sR̼qRSk'S8^&sTvTTʴ)|T@U?^JU|jU}V1<V1LVl7V$nV"V fVUVVEWXWyWT<[WTFWTX~X9XoXX˙pXY2YYYZ+Zg6ZkZhZv [;^T[f3\P:\]4\]4\\qM\\at>gcCulGrUNF|^(|Ac,NWvkqv"N.f)CW^c4L*5*V.!6CIA@ȾJ[p9_>i"lIr,y4$Rnɵncɵnɵn\ɵnڑɵnAɵnɵn[ ɵn_uUR BT5`*'nM$lN7 EʤaT˛q5.pT"۔ n>>H[8,#f<4zp/5F#Q5%UT2(Ŏ)9]*4-cta&-ct/.GU2/35vAIu|_W$.Ӗ22(`h{'i.sR?AiuV3.PP0Nm% d-y1,Tt+tZ^ʯӬYe6}ay#e?2D?N(@Ew@VB!RM 3Nky2$Ui"W~V]>`f`@jtlglyzl}oiTvtyavty~hNf 1%8l"=4f4HB99w4)[}6k6b6%S^qNlE јoR'T*=M~.?gy}EyEzI{= 8A3τgNA9ۓ*[y- L Qtr hn=wUKijg< \bmjM%M%zEEwBww1^96 I>! + ~Q!e&B)Y*/e*-+Ne9,N6?;c?4ĘBy3EczFjIQK~wO Zf\S~Ԉ\c`0ad&bubcփ2fCg&4^jCmneqKqKtuu({>}kacR>r#V~<Ny Us>K()$YF$1,^Q+(uI,.+ʁr^2kK+2֊_*>S-ހ. nޟ,.\mh(^;y,ωO-I"+ACnkIO:7^e_0*HqU=&H4.9/0O4r5>8wL,?'BMUIxS]J$4LM$R.SR>IuXE% YMcYM^dKfh^KiQnųr!sscsLww2x/^s22 r"%fN-ۊ_[atYC;TzN[%]v]KnI1ICIDImqIUIIZI$_(ZAIYi.yl6t>|I&duDuDBD$oIh+h,,x,҈,f,,,]6[>dmt#DraN Z.׾>e-q.ɘe$˓ z5$8 487$fR6ifRG>*Ug~_9iNcN1+SPqYVoVefR|b|GT?,  % G^9Ɖ_?up 0"o%CK&~&)2Ƀ)+9,;/53u 58?"݋?>u2?%Fu7KNMN>3O>SRV|W]]:eg6g^tky^H{y6w?m5tT5t F2:Ξ0/G%Wn3nenqص$ǥ('u +<+`>hn^t/{y6ݹ;/ KxAr39\Es2KuϾ%\э{}C-Xd5UüNgC^ƨ-?ƨ?˾ҝz5ل )Fiէ?AZ>Gi}xzwYܳ&ߺ&:u_fbth롥`rB~МmM^!# m sF 9e`2$~b~bo8MCtr `f!V%?()ў+uU+3],,8 /i/=-/M134~6 <? 2"AIB>N{tD:EFgGuG_iGbHU LAUvM~^OrPѧmQRCSn'TUUUUT1XQYĻZZZZSZ[g[$]k*]^n06_P_pH:e6iinkQI m?$oN@xdy;{K{}u}wx}w}w }C8hs_F*p~Ԥz~ӫ~ym~xlld-Qye8r|)'xp~Ҳz~ѹ~wk~vjBvOt%6tEYd(.y.Y3vPUiUAhRu kD,QYtTRtt|}=P!-nSl7_ :ʇaS+Ȅ6FXC=ʢhTʢʬ ƴfdiuddd:d!}0 59<эPh+NSkUdB3hVww 25 x;^N?Y !p'h+,D/2t.3H42R65@567D9::%Td?;'LCU]D3CIN*J0&JWVK9yK Q~&U|}V7Wz\D\Dtar]e n2g*.gn8=nWWop&q,t9=wz5|(^\||E;}wZ$'}$xb}$}$ QϗOZPVNADL>6gN6q,n-nK<oPf++E.ͮǗ·`·{·ýW׳L+:N:nT~oa +n/#u n]-nexRt;UՋ7EvZONYu2%5HTAvpa e~i~0:i9%iwbz;!ž#D%Ad''-.>.D#5kEX1=ct==o?:?ٚ@J3CtIEfNP2PQsA;V%V%tXU JZ^$`}bDubG/f)fdf gA@rhI2i$ knmw=x1 z*2W|[9|QRdfJg Ucj8(.֛,ztc.4^I b rXm*^enB†5&iRCq q~ Uʴ5ʴ5&)ʶ3MppuD!^ ӞbԄ+۔#G#D*'Nhd/gF5HF5HY p+>@&D2I58IAs1l h }$ qem ڤ ڥK( d E E L  Ac: Ac, > n\ 35 6  WMN bM bb^ b`z b` dt{ gU i3P la` ok u: xq< |o&V ~`H | n\ J v JN  t9 tf ƃ .@I 0E .O  N < )B F>[  b x T  K Bj ҉= 4n4  >b3 5 kt :  > n f N4  9>c V  ' A Y+ Y>w KG  @T 팤M E l~ %' MNt{ -  /" C =;# q  DR  }% 9 ou s  X $. )< */ .>ؐ 5B* 74c 7u2 ;e <T = B@ Bnv F E Gݞt H Ջ IF.(T J"u K2 Rۮ8 Ty # T^ Uj4 ] ^&L `0 `Y `^^ b b c(I= cEC- d e5 eS ees e{? f1+ f*JK g5UDU gn1c hF k,< rD"C t ~ O 9>$  j $N?  ISD I[_ Ik  ;?4 | m c f{ j I !n JF $a $} %pX4 ,.[ ,|+ = Y M N4$L t] nrj o ` Sdm0 n  p 8 z  B v ȯ'b t x $j l p z ˔ PS| P#^ I ~tƝ 68V >>i  :^5 f 0 f ~f  4 c .G 4 d s3 s ~ AA 9$ nS 9 r G m,= 5j #-t 0NY 5δ 5\n Am CU E9:C I L LS L# Mc\qT O؜ R@ S V W Z \Ot ]$f1 ` f)1 f)~ f=Br io>5; j l# m`K, n|nr$ w9 xR|0 yrk {nڄ ~Lg >M   H/ H| W ha n $ .@T  A i- <JJ   F1 Һ   %7% J4 J- >   t. kJ ӇF w MH D9 N> /a ̺ & NU -D .i ۷E r kzg k  U)F  <I bh  ۊ 0H - H H $r " ~ z+    * IP ! 9N % K Nr  A>( LEl s{ O xH < " $l %6bm .] 2 7F0 =юkr > > > >G >ž > >( >( >ו >{ ?t|- A^. B~_ DT+ Fnb G I\ J>! Mbk P@ RV RV RVA Rn S. SGw SL T~ Y& Y_ [ \ eN"B hۮ j7o{' p] sL_ v  BA 4 Td Tr T Tv * g  " 7a /.h ,) )d Tw R^  .e@ . .ܘ . . .[ .`y   >D 4 .V a? yIK m e.= x&@ C '. NpF lw g hNn ɾdq ɾd' e\ >7 ҂?} Ӵt ء, ߢ.̂  >g %V u  |. g B Xt n 9! tX aP 3 .  :b Uq  $ ʜ[ $ > {4  oh $|  @b #$T #=Q' %nr '." (I$ (N~ +>_ +k 0E. 64e ;ɾ, CnT Fgu K9 Lc Pt Pt'c S, T>$ `K dB[ fev fe1 g !V g;b iFC{ i i jNf ja jӮ?+ kGn4 l"k\ m9 nE" s'~l u u u v l v&%w v{ ww w w ' w}x w}m w} w yn0 |[L #  uA B T <W J0 ^ %F? o $; } R> %7ؚ Pb  xN  "] UՋ ɰe@) Fr E X7_ &K| x, D8 + % t5 t5'%  P ?k >& | ' )+  J$R;wT8 @a[TVz%!#6J<vngTW@ /*T*$*/EU/EE4Qt=BIEI.$I_qKNQOOSS5~XRu4X9ZoC[ [ )a.na.|gci$nyGJYsWjv6v<vɅ>y$YH~!%%>ojL=ڽ4}N՝Nzn4^X'4(ym~]S[N^)*5Ǘ P~:".DBRk֒MJ wrݖ7[y2^jlcjl ; . 2 RG]lDSNnqCuA"#a$U=4%4q%4*a,--v0i)01ci2wTDLF74EGH<Jd(KvL$.+WS[{!x\ac5y<c5vg3DiTlp fyCMI{`{~a_6$;Y5)Vu|&&D$t~{d `/ n%oY"U[;>/Jt)n~`ͣ+B3P>b&Nz r E"~LXrVErޚ-1iky,֠l$'T%WLnF>JHBJP4`t2ZZv^dBUi.Schlieen Close Tab CloseButtonFake error ! Fake error ! FakeReplyUngltige URL Invalid URL FakeReplyEingabehilfen AccessibilityPhonon::Kommunikation CommunicationPhonon:: SpieleGamesPhonon:: MusikMusicPhonon:: Benachrichtungen NotificationsPhonon:: VideoVideoPhonon::<html>Das Audiogert <b>%1</b> wurde aktiviert,<br/>da es gerade verfgbar und hher priorisiert ist.</html>xSwitching to the audio playback device %1
    which just became available and has higher preference.Phonon::AudioOutput<html>Das Audiogert <b>%1</b> funktioniert nicht.<br/>Es wird stattdessen <b>%2</b> verwendet.</html>^The audio playback device %1 does not work.
    Falling back to %2.Phonon::AudioOutput:Zurckschalten zum Gert '%1'Revert back to device '%1'Phonon::AudioOutputAchtung: Die grundlegenden GStreamer-Plugins sind nicht installiert. Die Audio- und Video-Untersttzung steht nicht zur Verfgung.~Warning: You do not seem to have the base GStreamer plugins installed. All audio and video support has been disabledPhonon::Gstreamer::BackendAchtung: Das Paket gstreamer0.10-plugins-good ist nicht installiert. Einige Video-Funktionen stehen nicht zur Verfgung.Warning: You do not seem to have the package gstreamer0.10-plugins-good installed. Some video features have been disabled.Phonon::Gstreamer::BackendEs sind nicht alle erforderlichen Codecs installiert. Um diesen Inhalt abzuspielen, muss der folgende Codec installiert werden: %0`A required codec is missing. You need to install the following codec(s) to play this content: %0Phonon::Gstreamer::MediaObject`Das Abspielen konnte nicht gestartet werden. Bitte berprfen Sie Ihre GStreamer-Installation und stellen Sie sicher, dass das Paket libgstreamer-plugins-base installiert ist.wCannot start playback. Check your GStreamer installation and make sure you have libgstreamer-plugins-base installed.Phonon::Gstreamer::MediaObject\Die Medienquelle konnte nicht gefunden werden.Could not decode media source.Phonon::Gstreamer::MediaObject\Die Medienquelle konnte nicht gefunden werden.Could not locate media source.Phonon::Gstreamer::MediaObjectDas Audiogert konnte nicht geffnet werden, da es bereits in Benutzung ist.:Could not open audio device. The device is already in use.Phonon::Gstreamer::MediaObject\Die Medienquelle konnte nicht geffnet werden.Could not open media source.Phonon::Gstreamer::MediaObject@Ungltiger Typ der Medienquelle.Invalid source type.Phonon::Gstreamer::MediaObject$Zugriff verweigert Access denied Phonon::MMF"Existiert bereitsAlready exists Phonon::MMFAudio-Ausgabe Audio Output Phonon::MMFxAudio- oder Videokomponenten konnten nicht abgespielt werden-Audio or video components could not be played Phonon::MMF0Fehler bei Audio-AusgabeAudio output error Phonon::MMFZEs konnte keine Verbindung hergestellt werdenCould not connect Phonon::MMFDRM-Fehler DRM error Phonon::MMF"Fehler im Decoder Decoder error Phonon::MMFGetrennt Disconnected Phonon::MMF*Bereits in VerwendungIn use Phonon::MMF.Unzureichende BandweiteInsufficient bandwidth Phonon::MMFUngltige URL Invalid URL Phonon::MMF(Ungltiges ProtokollInvalid protocol Phonon::MMF Multicast-FehlerMulticast error Phonon::MMF\Fehler bei der Kommunikation ber das NetzwerkNetwork communication error Phonon::MMF0Netzwerk nicht verfgbarNetwork unavailable Phonon::MMFKein FehlerNo error Phonon::MMFNicht gefunden Not found Phonon::MMFNicht bereit Not ready Phonon::MMF"Nicht untersttzt Not supported Phonon::MMFFEs ist kein Speicher mehr verfgbar Out of memory Phonon::MMFberlaufOverflow Phonon::MMFBPfad konnte nicht gefunden werdenPath not found Phonon::MMF$Zugriff verweigertPermission denied Phonon::MMFJFehler bei Proxy-Server-KommunikationProxy server error Phonon::MMF<Proxy-Server nicht untersttztProxy server not supported Phonon::MMFServer alert Server alert Phonon::MMF6Streaming nicht untersttztStreaming not supported Phonon::MMF$Audio-AusgabegertThe audio output device Phonon::MMFUnterlauf Underflow Phonon::MMF.Unbekannter Fehler (%1)Unknown error (%1) Phonon::MMF0Fehler bei Video-AusgabeVideo output error Phonon::MMFHDer URL konnte nicht geffnet werdenError opening URL Phonon::MMF::AbstractMediaPlayerLDie Datei konnte nicht geffnet werdenError opening file Phonon::MMF::AbstractMediaPlayer^Das Abspielen ist im Grundzustand nicht mglichNot ready to play Phonon::MMF::AbstractMediaPlayer"Abspielen beendetPlayback complete Phonon::MMF::AbstractMediaPlayer\Die Lautstrke konnte nicht eingestellt werdenSetting volume failed Phonon::MMF::AbstractMediaPlayer %1 Hz%1 HzPhonon::MMF::AudioEqualizerRDie Position konnte nicht bestimmt werdenGetting position failedPhonon::MMF::AudioPlayerJDer Clip konnte nicht geffnet werdenOpening clip failedPhonon::MMF::AudioPlayerAktiviertEnabledPhonon::MMF::EffectFactoryDHochfrequenz-Abklingverhltnis (%)Decay HF ratio (%) Phonon::MMF::EnvironmentalReverb Abklingzeit (ms)Decay time (ms) Phonon::MMF::EnvironmentalReverbDichte (%) Density (%) Phonon::MMF::EnvironmentalReverbDiffusion (%) Diffusion (%) Phonon::MMF::EnvironmentalReverb4Verzgerung des Echos (ms)Reflections delay (ms) Phonon::MMF::EnvironmentalReverb*Strke des Echos (mB)Reflections level (mB) Phonon::MMF::EnvironmentalReverb<Verzgerung des Nachhalls (ms)Reverb delay (ms) Phonon::MMF::EnvironmentalReverb2Strke des Nachhalls (mB)Reverb level (mB) Phonon::MMF::EnvironmentalReverb8Hochfrequenz-Pegel des Raums Room HF level Phonon::MMF::EnvironmentalReverb(Pegel des Raums (mB)Room level (mB) Phonon::MMF::EnvironmentalReverbDie Quelle konnte nicht geffnet werden: Der Medientyp konnte nicht bestimmt werden8Error opening source: media type could not be determinedPhonon::MMF::MediaObjectDie Quelle konnte nicht geffnet werden: Dieser Typ wird nicht untersttzt(Error opening source: type not supportedPhonon::MMF::MediaObjectStrke (%) Level (%)Phonon::MMF::StereoWidening:Fehler beim Puffern des ClipsBuffering clip failedPhonon::MMF::VideoPlayerRDie Position konnte nicht bestimmt werdenGetting position failedPhonon::MMF::VideoPlayerJDer Clip konnte nicht geffnet werdenOpening clip failedPhonon::MMF::VideoPlayer2Fehler bei Pause-Funktion Pause failedPhonon::MMF::VideoPlayer8Suchoperation fehlgeschlagen Seek failedPhonon::MMF::VideoPlayer8Fehler bei der Video-AnzeigeVideo display errorPhonon::MMF::VideoPlayerStummschaltungMutedPhonon::VolumeSliderMit diesem Regler stellen Sie die Lautstrke ein. Die Position links entspricht 0%; die Position rechts entspricht %1%WUse this slider to adjust the volume. The leftmost position is 0%, the rightmost is %1%Phonon::VolumeSliderLautstrke: %1% Volume: %1%Phonon::VolumeSlider6%1, %2 sind nicht definiert%1, %2 not definedQ3Accel\Mehrdeutige %1 knnen nicht verarbeitet werdenAmbiguous %1 not handledQ3AccelLschenDelete Q3DataTable FalschFalse Q3DataTableEinfgenInsert Q3DataTableWahrTrue Q3DataTableAktualisierenUpdate Q3DataTable%1 Datei kann nicht gefunden werden. berprfen Sie Pfad und Dateinamen.+%1 File not found. Check path and filename. Q3FileDialog&Lschen&Delete Q3FileDialog &Nein&No Q3FileDialog&OK&OK Q3FileDialog&ffnen&Open Q3FileDialog&Umbenennen&Rename Q3FileDialogS&peichern&Save Q3FileDialog&Unsortiert &Unsorted Q3FileDialog&Ja&Yes Q3FileDialogv<qt>Sind Sie sicher, dass Sie %1 "%2" lschen mchten?</qt>1Are you sure you wish to delete %1 "%2"? Q3FileDialog Alle Dateien (*) All Files (*) Q3FileDialog$Alle Dateien (*.*)All Files (*.*) Q3FileDialogAttribute Attributes Q3FileDialog ZurckBack Q3FileDialogAbbrechenCancel Q3FileDialog>Datei kopieren oder verschiebenCopy or Move a File Q3FileDialog,Neuen Ordner erstellenCreate New Folder Q3FileDialog DatumDate Q3FileDialog%1 lschen Delete %1 Q3FileDialogAusfhrlich Detail View Q3FileDialogVerzeichnisDir Q3FileDialogVerzeichnisse Directories Q3FileDialogVerzeichnis: Directory: Q3FileDialog FehlerError Q3FileDialog DateiFile Q3FileDialogDatei&name: File &name: Q3FileDialogDatei&typ: File &type: Q3FileDialog$Verzeichnis suchenFind Directory Q3FileDialogGesperrt Inaccessible Q3FileDialog Liste List View Q3FileDialogSu&chen in: Look &in: Q3FileDialogNameName Q3FileDialog"Neues Verzeichnis New Folder Q3FileDialog(Neues Verzeichnis %1 New Folder %1 Q3FileDialog&Neues Verzeichnis 1 New Folder 1 Q3FileDialog,Ein Verzeichnis zurckOne directory up Q3FileDialog ffnenOpen Q3FileDialog ffnenOpen  Q3FileDialog4Vorschau des Datei-InhaltsPreview File Contents Q3FileDialog@Vorschau der Datei-InformationenPreview File Info Q3FileDialogErne&ut ladenR&eload Q3FileDialogNur Lesen Read-only Q3FileDialogLesen/Schreiben Read-write Q3FileDialogLesen: %1Read: %1 Q3FileDialogSpeichern unterSave As Q3FileDialog4Whlen Sie ein VerzeichnisSelect a Directory Q3FileDialog8&Versteckte Dateien anzeigenShow &hidden files Q3FileDialog GreSize Q3FileDialogSortierenSort Q3FileDialog*Nach &Datum sortieren Sort by &Date Q3FileDialog*Nach &Namen sortieren Sort by &Name Q3FileDialog*Nach &Gre sortieren Sort by &Size Q3FileDialogSpezialattributSpecial Q3FileDialog6Verknpfung mit VerzeichnisSymlink to Directory Q3FileDialog*Verknpfung mit DateiSymlink to File Q3FileDialog8Verknpfung mit SpezialdateiSymlink to Special Q3FileDialogTypType Q3FileDialogNur Schreiben Write-only Q3FileDialogSchreiben: %1 Write: %1 Q3FileDialogdas Verzeichnis the directory Q3FileDialogdie Dateithe file Q3FileDialogdie Verknpfung the symlink Q3FileDialogJKonnte Verzeichnis nicht erstellen %1Could not create directory %1 Q3LocalFs@Konnte nicht geffnet werden: %1Could not open %1 Q3LocalFsBKonnte Verzeichnis nicht lesen %1Could not read directory %1 Q3LocalFs\Konnte Datei oder Verzeichnis nicht lschen %1%Could not remove file or directory %1 Q3LocalFsRKonnte nicht umbenannt werden: %1 nach %2Could not rename %1 to %2 Q3LocalFsFKonnte nicht geschrieben werden: %1Could not write %1 Q3LocalFsAnpassen... Customize... Q3MainWindowAusrichtenLine up Q3MainWindowBOperation von Benutzer angehaltenOperation stopped by the userQ3NetworkProtocolAbbrechenCancelQ3ProgressDialogAnwendenApply Q3TabDialogAbbrechenCancel Q3TabDialog VoreinstellungenDefaults Q3TabDialog HilfeHelp Q3TabDialogOKOK Q3TabDialog&Kopieren&Copy Q3TextEditEinf&gen&Paste Q3TextEdit"Wieder&herstellen&Redo Q3TextEdit&Rckgngig&Undo Q3TextEditLschenClear Q3TextEdit&AusschneidenCu&t Q3TextEditAlles auswhlen Select All Q3TextEditSchlieenClose Q3TitleBar(Schliet das FensterCloses the window Q3TitleBarVEnthlt Befehle zum ndern der Fenstergre*Contains commands to manipulate the window Q3TitleBarvZeigt den Namen des Fensters und enthlt Befehle zum ndernFDisplays the name of the window and contains controls to manipulate it Q3TitleBarVollbildmodusMakes the window full screen Q3TitleBarMaximierenMaximize Q3TitleBarMinimierenMinimize Q3TitleBar*Minimiert das FensterMoves the window out of the way Q3TitleBarRStellt ein maximiertes Fenster wieder her&Puts a maximized window back to normal Q3TitleBarRStellt ein minimiertes Fenster wieder her&Puts a minimized window back to normal Q3TitleBar Wiederherstellen Restore down Q3TitleBar Wiederherstellen Restore up Q3TitleBar SystemSystem Q3TitleBarMehr...More... Q3ToolBar(unbekannt) (unknown) Q3UrlOperatorDas Protokoll `%1' untersttzt nicht das Kopieren oder Verschieben von Dateien oder VerzeichnissenIThe protocol `%1' does not support copying or moving files or directories Q3UrlOperatorDas Protokoll `%1' untersttzt nicht das Anlegen neuer Verzeichnisse;The protocol `%1' does not support creating new directories Q3UrlOperatortDas Protokoll `%1' untersttzt nicht das Laden von Dateien0The protocol `%1' does not support getting files Q3UrlOperatorDas Protokoll `%1' untersttzt nicht das Auflisten von Verzeichnissen6The protocol `%1' does not support listing directories Q3UrlOperator|Das Protokoll `%1' untersttzt nicht das Speichern von Dateien0The protocol `%1' does not support putting files Q3UrlOperatorDas Protokoll `%1' untersttzt nicht das Lschen von Dateien oder Verzeichnissen@The protocol `%1' does not support removing files or directories Q3UrlOperatorDas Protokoll `%1' untersttzt nicht das Umbenennen von Dateien oder Verzeichnissen@The protocol `%1' does not support renaming files or directories Q3UrlOperatorRDas Protokoll `%1' wird nicht untersttzt"The protocol `%1' is not supported Q3UrlOperator&Abbrechen&CancelQ3WizardAb&schlieen&FinishQ3Wizard &Hilfe&HelpQ3Wizard&Weiter >&Next >Q3Wizard< &Zurck< &BackQ3Wizard*Verbindung verweigertConnection refusedQAbstractSockethDas Zeitlimit fr die Verbindung wurde berschrittenConnection timed outQAbstractSocketHRechner konnte nicht gefunden werdenHost not foundQAbstractSocketBDas Netzwerk ist nicht erreichbarNetwork unreachableQAbstractSocketZDiese Socket-Operation wird nicht untersttzt$Operation on socket is not supportedQAbstractSocketNicht verbundenSocket is not connectedQAbstractSocketfDas Zeitlimit fr die Operation wurde berschrittenSocket operation timed outQAbstractSocket &Alles auswhlen &Select AllQAbstractSpinBox&Inkrementieren&Step upQAbstractSpinBox&Dekrementieren Step &downQAbstractSpinBoxDrckenPressQAccessibleButtonAktivierenActivate QApplicationPAktiviert das Hauptfenster der Anwendung#Activates the program's main window QApplicationDie Anwendung '%1' bentigt Qt %2; es wurde aber Qt %3 gefunden.,Executable '%1' requires Qt %2, found Qt %3. QApplicationDDie Qt-Bibliothek ist inkompatibelIncompatible Qt Library Error QApplicationLTRQT_LAYOUT_DIRECTION QApplication&Abbrechen&Cancel QAxSelectCOM-&Objekt: COM &Object: QAxSelectOKOK QAxSelect2ActiveX-Element auswhlenSelect ActiveX Control QAxSelectAnkreuzenCheck QCheckBoxUmschaltenToggle QCheckBoxLschenUncheck QCheckBoxRZu benutzerdefinierten Farben &hinzufgen&Add to Custom Colors QColorDialogGrundfar&ben &Basic colors QColorDialog4&Benutzerdefinierte Farben&Custom colors QColorDialog &Grn:&Green: QColorDialog &Rot:&Red: QColorDialog&Sttigung:&Sat: QColorDialog&Helligkeit:&Val: QColorDialogA&lphakanal:A&lpha channel: QColorDialog Bla&u:Bl&ue: QColorDialogFarb&ton:Hu&e: QColorDialogFarbauswahl Select Color QColorDialogSchlieenClose QComboBox FalschFalse QComboBox ffnenOpen QComboBoxWahrTrue QComboBox*%1: existiert bereits%1: already existsQCoreApplication$%1: Nicht existent%1: does not existQCoreApplication6%1: ftok-Aufruf schlug fehl%1: ftok failedQCoreApplicationH%1: Ungltige Schlsselangabe (leer)%1: key is emptyQCoreApplicationF%1: Keine Ressourcen mehr verfgbar%1: out of resourcesQCoreApplicationR%1: Es kann kein Schlssel erzeugt werden%1: unable to make keyQCoreApplication2%1: Unbekannter Fehler %2%1: unknown error %2QCoreApplicationDie Transaktion kann nicht durchgefhrt werden (Operation 'commit' fehlgeschlagen)Unable to commit transaction QDB2DriverREs kann keine Verbindung aufgebaut werdenUnable to connect QDB2DriverDie Transaktion kann nicht rckgngig gemacht werden (Operation 'rollback' fehlgeschlagen)Unable to rollback transaction QDB2DriverP'autocommit' kann nicht aktiviert werdenUnable to set autocommit QDB2DriverNDie Variable kann nicht gebunden werdenUnable to bind variable QDB2ResultNDer Befehl kann nicht ausgefhrt werdenUnable to execute statement QDB2Result\Der erste Datensatz kann nicht abgeholt werdenUnable to fetch first QDB2Result`Der nchste Datensatz kann nicht abgeholt werdenUnable to fetch next QDB2ResultVDer Datensatz %1 kann nicht abgeholt werdenUnable to fetch record %1 QDB2ResultTDer Befehl kann nicht initialisiert werdenUnable to prepare statement QDB2ResultAMAM QDateTimeEditPMPM QDateTimeEditamam QDateTimeEditpmpm QDateTimeEdit QDialQDialQDialSchieberegler SliderHandleQDialTachometer SpeedoMeterQDial FertigDoneQDialogDirekthilfe What's This?QDialog&Abbrechen&CancelQDialogButtonBoxSchl&ieen&CloseQDialogButtonBox &Nein&NoQDialogButtonBox&OK&OKQDialogButtonBoxS&peichern&SaveQDialogButtonBox&Ja&YesQDialogButtonBoxAbbrechenAbortQDialogButtonBoxAnwendenApplyQDialogButtonBoxAbbrechenCancelQDialogButtonBoxSchlieenCloseQDialogButtonBox0Schlieen ohne SpeichernClose without SavingQDialogButtonBoxVerwerfenDiscardQDialogButtonBoxNicht speichern Don't SaveQDialogButtonBox HilfeHelpQDialogButtonBoxIgnorierenIgnoreQDialogButtonBoxN&ein, keine N&o to AllQDialogButtonBoxOKOKQDialogButtonBox ffnenOpenQDialogButtonBoxZurcksetzenResetQDialogButtonBox VoreinstellungenRestore DefaultsQDialogButtonBoxWiederholenRetryQDialogButtonBoxSpeichernSaveQDialogButtonBoxAlles speichernSave AllQDialogButtonBoxJa, &alle Yes to &AllQDialogButtonBoxnderungsdatum Date Modified QDirModelArtKind QDirModelNameName QDirModel GreSize QDirModelTypType QDirModelSchlieenClose QDockWidgetAndockenDock QDockWidgetHerauslsenFloat QDockWidgetWenigerLessQDoubleSpinBoxMehrMoreQDoubleSpinBox&OK&OK QErrorMessage<Diese Meldung wieder an&zeigen&Show this message again QErrorMessageDebug-Ausgabe:Debug Message: QErrorMessageFehler: Fatal Error: QErrorMessageAchtung:Warning: QErrorMessage:%1 kann nicht erstellt werdenCannot create %1 for outputQFileN%1 kann nicht zum Lesen geffnet werdenCannot open %1 for inputQFileVDas ffnen zum Schreiben ist fehlgeschlagenCannot open for outputQFileRDie Quelldatei kann nicht entfernt werdenCannot remove source fileQFile>Die Zieldatei existiert bereitsDestination file existsQFile\Der Datenblock konnte nicht geschrieben werdenFailure to write blockQFileEine sequentielle Datei kann nicht durch blockweises Kopieren umbenannt werden0Will not rename sequential file using block copyQFile%1 Das Verzeichnis konnte nicht gefunden werden. Stellen Sie sicher, dass der Verzeichnisname richtig ist.K%1 Directory not found. Please verify the correct directory name was given. QFileDialog%1 Die Datei konnte nicht gefunden werden. Stellen Sie sicher, dass der Dateiname richtig ist.A%1 File not found. Please verify the correct file name was given. QFileDialog|Die Datei %1 existiert bereits. Soll sie berschrieben werden?-%1 already exists. Do you want to replace it? QFileDialog&Auswhlen&Choose QFileDialog&Lschen&Delete QFileDialog$&Neues Verzeichnis &New Folder QFileDialog&ffnen&Open QFileDialog&Umbenennen&Rename QFileDialogS&peichern&Save QFileDialog'%1' ist schreibgeschtzt. Mchten Sie die Datei trotzdem lschen?9'%1' is write protected. Do you want to delete it anyway? QFileDialog AliasAlias QFileDialog Alle Dateien (*) All Files (*) QFileDialog$Alle Dateien (*.*)All Files (*.*) QFileDialog^Sind Sie sicher, dass Sie '%1' lschen mchten?!Are sure you want to delete '%1'? QFileDialog ZurckBack QFileDialogBKonnte Verzeichnis nicht lschen.Could not delete directory. QFileDialog,Neuen Ordner erstellenCreate New Folder QFileDialogDetails Detail View QFileDialogVerzeichnisse Directories QFileDialogVerzeichnis: Directory: QFileDialogLaufwerkDrive QFileDialog DateiFile QFileDialogDatei&name: File &name: QFileDialog Ordner File Folder QFileDialog"Dateien des Typs:Files of type: QFileDialog$Verzeichnis suchenFind Directory QFileDialog OrderFolder QFileDialogVorwrtsForward QFileDialog Liste List View QFileDialogSuchen in:Look in: QFileDialogMein Computer My Computer QFileDialog"Neues Verzeichnis New Folder QFileDialog ffnenOpen QFileDialog4bergeordnetes VerzeichnisParent Directory QFileDialogZuletzt besucht Recent Places QFileDialogLschenRemove QFileDialogSpeichern unterSave As QFileDialog"Symbolischer LinkShortcut QFileDialogAnzeigen Show  QFileDialog8&Versteckte Dateien anzeigenShow &hidden files QFileDialogUnbekanntUnknown QFileDialog %1 GB%1 GBQFileSystemModel %1 KB%1 KBQFileSystemModel %1 MB%1 MBQFileSystemModel %1 TB%1 TBQFileSystemModel%1 byte %1 byte(s)QFileSystemModel%1 Byte%1 bytesQFileSystemModel<b>Der Name "%1" kann nicht verwendet werden.</b><p>Versuchen Sie, die Sonderzeichen zu entfernen oder einen krzeren Namen zu verwenden.oThe name "%1" can not be used.

    Try using another name, with fewer characters or no punctuations marks.QFileSystemModelComputerComputerQFileSystemModelnderungsdatum Date ModifiedQFileSystemModel(Ungltiger DateinameInvalid filenameQFileSystemModelArtKindQFileSystemModelMein Computer My ComputerQFileSystemModelNameNameQFileSystemModel GreSizeQFileSystemModelTypTypeQFileSystemModelAlleAny QFontDatabaseArabischArabic QFontDatabaseArmenischArmenian QFontDatabaseBengalischBengali QFontDatabaseSchwarzBlack QFontDatabaseFettBold QFontDatabaseKyrillischCyrillic QFontDatabaseSemiDemi QFontDatabaseHalbfett Demi Bold QFontDatabaseDevanagari Devanagari QFontDatabaseGeorgischGeorgian QFontDatabaseGriechischGreek QFontDatabaseGujaratiGujarati QFontDatabaseGurmukhiGurmukhi QFontDatabaseHebrischHebrew QFontDatabase KursivItalic QFontDatabaseJapanischJapanese QFontDatabaseKannadaKannada QFontDatabase KhmerKhmer QFontDatabaseKoreanischKorean QFontDatabaseLaotischLao QFontDatabaseLateinischLatin QFontDatabase LeichtLight QFontDatabaseMalayalam Malayalam QFontDatabaseMyanmarMyanmar QFontDatabaseN'KoN'Ko QFontDatabase NormalNormal QFontDatabaseSchrggestelltOblique QFontDatabase OghamOgham QFontDatabase OriyaOriya QFontDatabase RunenRunic QFontDatabase0Chinesisch (Kurzzeichen)Simplified Chinese QFontDatabaseSinhalaSinhala QFontDatabase SymbolSymbol QFontDatabaseSyrischSyriac QFontDatabaseTamilischTamil QFontDatabase TeluguTelugu QFontDatabase ThaanaThaana QFontDatabaseThailndischThai QFontDatabaseTibetischTibetan QFontDatabase0Chinesisch (Langzeichen)Traditional Chinese QFontDatabaseVietnamesisch Vietnamese QFontDatabase&Schriftart&Font QFontDialog &Gre&Size QFontDialog&Unterstrichen &Underline QFontDialogEffekteEffects QFontDialogSchrifts&til Font st&yle QFontDialogBeispielSample QFontDialog(Schriftart auswhlen Select Font QFontDialog Durch&gestrichen Stri&keout QFontDialog&SchriftsystemWr&iting System QFontDialogRndern des Verzeichnisses schlug fehl: %1Changing directory failed: %1QFtp<Verbindung mit Rechner bestehtConnected to hostQFtp0Verbunden mit Rechner %1Connected to host %1QFtpLVerbindung mit Rechner schlug fehl: %1Connecting to host failed: %1QFtp$Verbindung beendetConnection closedQFtp\Verbindung fr die Daten Verbindung verweigert&Connection refused for data connectionQFtp8Verbindung mit %1 verweigertConnection refused to host %1QFtpxDas Zeitlimit fr die Verbindung zu '%1' wurde berschrittenConnection timed out to host %1QFtp2Verbindung mit %1 beendetConnection to %1 closedQFtpXErstellen des Verzeichnisses schlug fehl: %1Creating directory failed: %1QFtpNHerunterladen der Datei schlug fehl: %1Downloading file failed: %1QFtp&Rechner %1 gefunden Host %1 foundQFtpNRechner %1 konnte nicht gefunden werdenHost %1 not foundQFtp Rechner gefunden Host foundQFtpzDer Inhalt des Verzeichnisses kann nicht angezeigt werden: %1Listing directory failed: %1QFtp2Anmeldung schlug fehl: %1Login failed: %1QFtp Keine Verbindung Not connectedQFtpTLschen des Verzeichnisses schlug fehl: %1Removing directory failed: %1QFtpBLschen der Datei schlug fehl: %1Removing file failed: %1QFtp$Unbekannter Fehler Unknown errorQFtpFHochladen der Datei schlug fehl: %1Uploading file failed: %1QFtp$Unbekannter Fehler Unknown error QHostInfoHRechner konnte nicht gefunden werdenHost not foundQHostInfoAgent,Ungltiger RechnernameInvalid hostnameQHostInfoAgent@Es wurde kein Hostname angegebenNo host name givenQHostInfoAgent*Unbekannter AdresstypUnknown address typeQHostInfoAgent$Unbekannter Fehler Unknown errorQHostInfoAgent<Authentifizierung erforderlichAuthentication requiredQHttp<Verbindung mit Rechner bestehtConnected to hostQHttp0Verbunden mit Rechner %1Connected to host %1QHttp$Verbindung beendetConnection closedQHttp*Verbindung verweigertConnection refusedQHttpdVerbindung verweigert oder Zeitlimit berschritten!Connection refused (or timed out)QHttp2Verbindung mit %1 beendetConnection to %1 closedQHttp2Die Daten sind verflschtData corruptedQHttpBeim Schreiben der Antwort auf das Ausgabegert ist ein Fehler aufgetreten Error writing response to deviceQHttp6HTTP-Anfrage fehlgeschlagenHTTP request failedQHttpDie angeforderte HTTPS-Verbindung kann nicht aufgebaut werden, da keine SSL-Untersttzung vorhanden ist:HTTPS connection requested but SSL support not compiled inQHttp&Rechner %1 gefunden Host %1 foundQHttpNRechner %1 konnte nicht gefunden werdenHost %1 not foundQHttp Rechner gefunden Host foundQHttp^Der Hostrechner verlangt eine AuthentifizierungHost requires authenticationQHttpnDer Inhalt (chunked body) der HTTP-Antwort ist ungltigInvalid HTTP chunked bodyQHttpTDer Kopfteil der HTTP-Antwort ist ungltigInvalid HTTP response headerQHttplFr die Verbindung wurde kein Server-Rechner angegebenNo server set to connect toQHttpHProxy-Authentifizierung erforderlichProxy authentication requiredQHttp`Der Proxy-Server verlangt eine AuthentifizierungProxy requires authenticationQHttp2Anfrage wurde abgebrochenRequest abortedQHttppIm Ablauf des SSL-Protokolls ist ein Fehler aufgetreten.SSL handshake failedQHttphDer Server hat die Verbindung unerwartet geschlossen%Server closed connection unexpectedlyQHttpHUnbekannte AuthentifizierungsmethodeUnknown authentication methodQHttp$Unbekannter Fehler Unknown errorQHttpXEs wurde ein unbekanntes Protokoll angegebenUnknown protocol specifiedQHttp,Ungltige LngenangabeWrong content lengthQHttp<Authentifizierung erforderlichAuthentication requiredQHttpSocketEngineFKeine HTTP-Antwort vom Proxy-Server(Did not receive HTTP response from proxyQHttpSocketEnginebFehler bei der Kommunikation mit dem Proxy-Server#Error communicating with HTTP proxyQHttpSocketEngineFehler beim Auswerten der Authentifizierungsanforderung des Proxy-Servers/Error parsing authentication request from proxyQHttpSocketEnginejDer Proxy-Server hat die Verbindung vorzeitig beendet#Proxy connection closed prematurelyQHttpSocketEnginevDer Proxy-Server hat den Aufbau einer Verbindung verweigertProxy connection refusedQHttpSocketEnginevDer Proxy-Server hat den Aufbau einer Verbindung verweigertProxy denied connectionQHttpSocketEngineBei der Verbindung mit dem Proxy-Server wurde ein Zeitlimit berschritten!Proxy server connection timed outQHttpSocketEngineVEs konnte kein Proxy-Server gefunden werdenProxy server not foundQHttpSocketEngineXEs konnte keine Transaktion gestartet werdenCould not start transaction QIBaseDriverhDie Datenbankverbindung konnte nicht geffnet werdenError opening database QIBaseDriverDie Transaktion konnte nicht durchgefhrt werden (Operation 'commit' fehlgeschlagen)Unable to commit transaction QIBaseDriverDie Transaktion konnte nicht rckgngig gemacht werden (Operation 'rollback' fehlgeschlagen)Unable to rollback transaction QIBaseDriverLDie Allokation des Befehls schlug fehlCould not allocate statement QIBaseResult~Es konnte keine Beschreibung des Eingabebefehls erhalten werden"Could not describe input statement QIBaseResultpEs konnte keine Beschreibung des Befehls erhalten werdenCould not describe statement QIBaseResult`Das nchste Element konnte nicht abgeholt werdenCould not fetch next item QIBaseResultJDas Feld konnte nicht gefunden werdenCould not find array QIBaseResultbDie Daten des Feldes konnten nicht gelesen werdenCould not get array data QIBaseResultDie erforderlichen Informationen zur Abfrage sind nicht verfgbarCould not get query info QIBaseResultZEs ist keine Information zum Befehl verfgbarCould not get statement info QIBaseResultVDer Befehl konnte nicht initalisiert werdenCould not prepare statement QIBaseResultXEs konnte keine Transaktion gestartet werdenCould not start transaction QIBaseResultTDer Befehl konnte nicht geschlossen werdenUnable to close statement QIBaseResultDie Transaktion konnte nicht durchgefhrt werden (Operation 'commit' fehlgeschlagen)Unable to commit transaction QIBaseResultDEs konnte kein BLOB erzeugt werdenUnable to create BLOB QIBaseResultRDer Befehl konnte nicht ausgefhrt werdenUnable to execute query QIBaseResultJDer BLOB konnte nicht geffnet werdenUnable to open BLOB QIBaseResultHDer BLOB konnte nicht gelesen werdenUnable to read BLOB QIBaseResultPDer BLOB konnte nicht geschrieben werdenUnable to write BLOB QIBaseResultbKein freier Speicherplatz auf dem Gert vorhandenNo space left on device QIODevicevDie Datei oder das Verzeichnis konnte nicht gefunden werdenNo such file or directory QIODevice$Zugriff verweigertPermission denied QIODevice2Zu viele Dateien geffnetToo many open files QIODevice$Unbekannter Fehler Unknown error QIODeviceFEPFEP QInputContext.Mac OS X-EingabemethodeMac OS X input method QInputContext,S60-FEP-EingabemethodeS60 FEP input method QInputContext,Windows-EingabemethodeWindows input method QInputContextXIMXIM QInputContext$XIM-EingabemethodeXIM input method QInputContext2Geben Sie einen Wert ein:Enter a value: QInputDialog^Die Bibliothek %1 kann nicht geladen werden: %2Cannot load library %1: %2QLibraryjDas Symbol "%1" kann in %2 nicht aufgelst werden: %3$Cannot resolve symbol "%1" in %2: %3QLibrary`Die Bibliothek %1 kann nicht entladen werden: %2Cannot unload library %1: %2QLibraryTOperation mmap fehlgeschlagen fr '%1': %2Could not mmap '%1': %2QLibraryVOperation unmap fehlgeschlagen fr '%1': %2Could not unmap '%1': %2QLibraryhDie Prfdaten des Plugins '%1' stimmen nicht berein)Plugin verification data mismatch in '%1'QLibraryVDie Datei '%1' ist kein gltiges Qt-Plugin.'The file '%1' is not a valid Qt plugin.QLibraryDas Plugin '%1' verwendet eine inkompatible Qt-Bibliothek. (%2.%3.%4) [%5]=The plugin '%1' uses incompatible Qt library. (%2.%3.%4) [%5]QLibrary0Das Plugin '%1' verwendet eine inkompatible Qt-Bibliothek. (Im Debug- bzw. Release-Modus erstellte Bibliotheken knnen nicht zusammen verwendet werden.)WThe plugin '%1' uses incompatible Qt library. (Cannot mix debug and release libraries.)QLibraryDas Plugin '%1' verwendet eine inkompatible Qt-Bibliothek. Erforderlicher build-spezifischer Schlssel "%2", erhalten "%3"OThe plugin '%1' uses incompatible Qt library. Expected build key "%2", got "%3"QLibrarynDie dynamische Bibliothek konnte nicht gefunden werden.!The shared library was not found.QLibrary$Unbekannter Fehler Unknown errorQLibrary&Kopieren&Copy QLineEditEinf&gen&Paste QLineEdit"Wieder&herstellen&Redo QLineEdit&Rckgngig&Undo QLineEdit&AusschneidenCu&t QLineEditLschenDelete QLineEditAlles auswhlen Select All QLineEditL%1: Die Adresse wird bereits verwendet%1: Address in use QLocalServer*%1: Fehlerhafter Name%1: Name error QLocalServer,%1: Zugriff verweigert%1: Permission denied QLocalServer2%1: Unbekannter Fehler %2%1: Unknown error %2 QLocalServer*%1: Verbindungsfehler%1: Connection error QLocalSocketT%1: Der Verbindungsaufbau wurde verweigert%1: Connection refused QLocalSocket:%1: Das Datagramm ist zu gro%1: Datagram too large QLocalSocket&%1: Ungltiger Name%1: Invalid name QLocalSocketn%1: Die Verbindung wurde von der Gegenseite geschlossen%1: Remote closed QLocalSocketL%1: Fehler beim Zugriff auf den Socket%1: Socket access error QLocalSocketV%1: Zeitberschreitung bei Socket-Operation%1: Socket operation timed out QLocalSocketJ%1: Socket-Fehler (Ressourcenproblem)%1: Socket resource error QLocalSocketb%1: Diese Socket-Operation wird nicht untersttzt)%1: The socket operation is not supported QLocalSocket,%1: Unbekannter Fehler%1: Unknown error QLocalSocket2%1: Unbekannter Fehler %2%1: Unknown error %2 QLocalSocketTEs kann keine Transaktion gestartet werdenUnable to begin transaction QMYSQLDriverDie Transaktion kann nicht durchgefhrt werden (Operation 'commit' fehlgeschlagen)Unable to commit transaction QMYSQLDriverREs kann keine Verbindung aufgebaut werdenUnable to connect QMYSQLDriverhDie Datenbankverbindung kann nicht geffnet werden 'Unable to open database ' QMYSQLDriverDie Transaktion kann nicht rckgngig gemacht werden (Operation 'rollback' fehlgeschlagen)Unable to rollback transaction QMYSQLDriver\Die Ausgabewerte konnten nicht gebunden werdenUnable to bind outvalues QMYSQLResultJDer Wert konnte nicht gebunden werdenUnable to bind value QMYSQLResultbDie folgende Abfrage kann nicht ausgefhrt werdenUnable to execute next query QMYSQLResultTDie Abfrage konnte nicht ausgefhrt werdenUnable to execute query QMYSQLResultRDer Befehl konnte nicht ausgefhrt werdenUnable to execute statement QMYSQLResultLEs konnten keine Daten abgeholt werdenUnable to fetch data QMYSQLResultXDer Befehl konnte nicht initialisiert werdenUnable to prepare statement QMYSQLResultXDer Befehl konnte nicht zurckgesetzt werdenUnable to reset statement QMYSQLResultfDas folgende Ergebnis kann nicht gespeichert werdenUnable to store next result QMYSQLResultXDas Ergebnis konnte nicht gespeichert werdenUnable to store result QMYSQLResultvDie Ergebnisse des Befehls konnten nicht gespeichert werden!Unable to store statement results QMYSQLResult(Unbenannt) (Untitled)QMdiArea%1 - [%2] %1 - [%2] QMdiSubWindowSchl&ieen&Close QMdiSubWindowVer&schieben&Move QMdiSubWindow"Wieder&herstellen&Restore QMdiSubWindowGre &ndern&Size QMdiSubWindow - [%1]- [%1] QMdiSubWindowSchlieenClose QMdiSubWindow HilfeHelp QMdiSubWindowMa&ximieren Ma&ximize QMdiSubWindowMaximierenMaximize QMdiSubWindowMenMenu QMdiSubWindowM&inimieren Mi&nimize QMdiSubWindowMinimierenMinimize QMdiSubWindow WiederherstellenRestore QMdiSubWindow Wiederherstellen Restore Down QMdiSubWindowAufrollenShade QMdiSubWindow.Im &Vordergrund bleiben Stay on &Top QMdiSubWindowHerabrollenUnshade QMdiSubWindowSchlieenCloseQMenuAusfhrenExecuteQMenu ffnenOpenQMenuOptionenActionsQMenuBarber QtAbout Qt QMessageBox HilfeHelp QMessageBox*Details ausblenden...Hide Details... QMessageBoxOKOK QMessageBox*Details einblenden...Show Details... QMessageBox0Eingabemethode auswhlen Select IMQMultiInputContext<Umschalter fr EingabemethodenMultiple input method switcherQMultiInputContextPluginMehrfachumschalter fr Eingabemethoden, der das Kontextmen des Text-Widgets verwendetMMultiple input method switcher that uses the context menu of the text widgetsQMultiInputContextPlugin^Auf diesem Port hrt bereits ein anderer Socket4Another socket is already listening on the same portQNativeSocketEngineEs wurde versucht, einen IPv6-Socket auf einem System ohne IPv6-Untersttzung zu verwenden=Attempt to use IPv6 socket on a platform with no IPv6 supportQNativeSocketEngine*Verbindung verweigertConnection refusedQNativeSocketEnginehDas Zeitlimit fr die Verbindung wurde berschrittenConnection timed outQNativeSocketEngine|Das Datagram konnte nicht gesendet werden, weil es zu gro istDatagram was too large to sendQNativeSocketEngineTDer Zielrechner kann nicht erreicht werdenHost unreachableQNativeSocketEngine8Ungltiger Socket-DeskriptorInvalid socket descriptorQNativeSocketEngineNetzwerkfehler Network errorQNativeSocketEnginefDas Zeitlimit fr die Operation wurde berschrittenNetwork operation timed outQNativeSocketEngineBDas Netzwerk ist nicht erreichbarNetwork unreachableQNativeSocketEnginehOperation kann nur auf einen Socket angewandt werdenOperation on non-socketQNativeSocketEngine4Keine Ressourcen verfgbarOut of resourcesQNativeSocketEngine$Zugriff verweigertPermission deniedQNativeSocketEngineHDas Protokoll wird nicht untersttztProtocol type not supportedQNativeSocketEngine>Die Adresse ist nicht verfgbarThe address is not availableQNativeSocketEngine2Die Adresse ist geschtztThe address is protectedQNativeSocketEngine\Die angegebene Adresse ist bereits in Gebrauch#The bound address is already in useQNativeSocketEngine|Die Operation kann mit dem Proxy-Typ nicht durchgefhrt werden,The proxy type is invalid for this operationQNativeSocketEnginehDer entfernte Rechner hat die Verbindung geschlossen%The remote host closed the connectionQNativeSocketEnginelDer Broadcast-Socket konnte nicht initialisiert werden%Unable to initialize broadcast socketQNativeSocketEngine|Der nichtblockierende Socket konnte nicht initialisiert werden(Unable to initialize non-blocking socketQNativeSocketEngineVDie Nachricht konnte nicht empfangen werdenUnable to receive a messageQNativeSocketEngineTDie Nachricht konnte nicht gesendet werdenUnable to send a messageQNativeSocketEnginebDer Schreibvorgang konnte nicht ausgefhrt werdenUnable to writeQNativeSocketEngine$Unbekannter Fehler Unknown errorQNativeSocketEngineDNichtuntersttztes Socket-KommandoUnsupported socket operationQNativeSocketEngine>%1 konnte nicht geffnet werdenError opening %1QNetworkAccessCacheBackend>Fehler beim Schreiben zu %1: %2Write error writing to %1: %2QNetworkAccessDebugPipeBackend%1 kann nicht geffnet werden: Der Pfad spezifiziert ein Verzeichnis#Cannot open %1: Path is a directoryQNetworkAccessFileBackendF%1 konnte nicht geffnet werden: %2Error opening %1: %2QNetworkAccessFileBackendfBeim Lesen von der Datei %1 trat ein Fehler auf: %2Read error reading from %1: %2QNetworkAccessFileBackendfAnforderung zum ffnen einer Datei ber Netzwerk %1%Request for opening non-local file %1QNetworkAccessFileBackendLFehler beim Schreiben zur Datei %1: %2Write error writing to %1: %2QNetworkAccessFileBackend%1 kann nicht geffnet werden: Es handelt sich um ein VerzeichnisCannot open %1: is a directoryQNetworkAccessFtpBackendbBeim Herunterladen von %1 trat ein Fehler auf: %2Error while downloading %1: %2QNetworkAccessFtpBackendZBeim Hochladen von %1 trat ein Fehler auf: %2Error while uploading %1: %2QNetworkAccessFtpBackendDie Anmeldung bei %1 schlug fehl: Es ist eine Authentifizierung erforderlich0Logging in to %1 failed: authentication requiredQNetworkAccessFtpBackendlEs konnte kein geeigneter Proxy-Server gefunden werdenNo suitable proxy foundQNetworkAccessFtpBackendlEs konnte kein geeigneter Proxy-Server gefunden werdenNo suitable proxy foundQNetworkAccessHttpBackendBeim Herunterladen von %1 trat ein Fehler auf - Die Antwort des Servers ist: %2)Error downloading %1 - server replied: %2 QNetworkReply@Das Protokoll "%1" ist unbekanntProtocol "%1" is unknown QNetworkReply*Operation abgebrochenOperation canceledQNetworkReplyImplXEs konnte keine Transaktion gestartet werdenUnable to begin transaction QOCIDriverDie Transaktion konnte nicht durchgefhrt werden (Operation 'commit' fehlgeschlagen)Unable to commit transaction QOCIDriver<Initialisierung fehlgeschlagenUnable to initialize QOCIDriver8Logon-Vorgang fehlgeschlagenUnable to logon QOCIDriverDie Transaktion konnte nicht rckgngig gemacht werden (Operation 'rollback' fehlgeschlagen)Unable to rollback transaction QOCIDriverLDie Allokation des Befehls schlug fehlUnable to alloc statement QOCIResultDie Spalte konnte nicht fr den Stapelverarbeitungs-Befehl gebunden werden'Unable to bind column for batch execute QOCIResultJDer Wert konnte nicht gebunden werdenUnable to bind value QOCIResultzDer Stapelverarbeitungs-Befehl konnte nicht ausgefhrt werden!Unable to execute batch statement QOCIResultRDer Befehl konnte nicht ausgefhrt werdenUnable to execute statement QOCIResultXDer Anweisungstyp kann nicht bestimmt werdenUnable to get statement type QOCIResultJKann nicht zum nchsten Element gehenUnable to goto next QOCIResultXDer Befehl konnte nicht initialisiert werdenUnable to prepare statement QOCIResultDie Transaktion konnte nicht durchgefhrt werden (Operation 'commit' fehlgeschlagen)Unable to commit transaction QODBCDriverREs kann keine Verbindung aufgebaut werdenUnable to connect QODBCDriverEs kann keine Verbindung aufgebaut werden weil der Treiber die bentigte Funktionalitt nicht vollstndig untersttztEUnable to connect - Driver doesn't support all functionality required QODBCDriverX'autocommit' konnte nicht deaktiviert werdenUnable to disable autocommit QODBCDriverT'autocommit' konnte nicht aktiviert werdenUnable to enable autocommit QODBCDriverDie Transaktion konnte nicht rckgngig gemacht werden (Operation 'rollback' fehlgeschlagen)Unable to rollback transaction QODBCDriver(QODBCResult::reset: 'SQL_CURSOR_STATIC' konnte nicht als Attribut des Befehls gesetzt werden. Bitte prfen Sie die Konfiguration Ihres ODBC-TreibersyQODBCResult::reset: Unable to set 'SQL_CURSOR_STATIC' as statement attribute. Please check your ODBC driver configuration QODBCResultRDie Variable konnte nicht gebunden werdenUnable to bind variable QODBCResultRDer Befehl konnte nicht ausgefhrt werdenUnable to execute statement QODBCResultLEs konnten keine Daten abgeholt werdenUnable to fetch QODBCResult`Der erste Datensatz konnte nicht abgeholt werdenUnable to fetch first QODBCResultbDer letzte Datensatz konnte nicht abgeholt werdenUnable to fetch last QODBCResultdDer nchste Datensatz konnte nicht abgeholt werdenUnable to fetch next QODBCResultnDer vorangegangene Datensatz kann nicht abgeholt werdenUnable to fetch previous QODBCResultXDer Befehl konnte nicht initialisiert werdenUnable to prepare statement QODBCResult$Ungltiger URI: %1Invalid URI: %1QObject,Ungltiger RechnernameInvalid hostnameQObject@Es wurde kein Hostname angegebenNo host name givenQObjectZDiese Operation wird von %1 nicht untersttztOperation not supported on %1QObjectDer entfernte Rechner hat die Verbindung zu %1 vorzeitig beendet3Remote host closed the connection prematurely on %1QObject0Socket-Fehler bei %1: %2Socket error on %1: %2QObjectNameNameQPPDOptionsModelWertValueQPPDOptionsModelXEs konnte keine Transaktion gestartet werdenCould not begin transaction QPSQLDriverDie Transaktion konnte nicht durchgefhrt werden (Operation 'commit' fehlgeschlagen)Could not commit transaction QPSQLDriverDie Transaktion konnte nicht rckgngig gemacht werden (Operation 'rollback' fehlgeschlagen)Could not rollback transaction QPSQLDriverREs kann keine Verbindung aufgebaut werdenUnable to connect QPSQLDriver:Die Registrierung schlug fehlUnable to subscribe QPSQLDriver`Die Registrierung konnte nicht aufgehoben werdenUnable to unsubscribe QPSQLDriverLEs konnte keine Abfrage erzeugt werdenUnable to create query QPSQLResultXDer Befehl konnte nicht initialisiert werdenUnable to prepare statement QPSQLResultZentimeter (cm)Centimeters (cm)QPageSetupWidgetFormularFormQPageSetupWidget Hhe:Height:QPageSetupWidgetZoll (in) Inches (in)QPageSetupWidgetQuerformat LandscapeQPageSetupWidget RnderMarginsQPageSetupWidgetMillimeter (mm)Millimeters (mm)QPageSetupWidgetAusrichtung OrientationQPageSetupWidgetSeitengre: Page size:QPageSetupWidget PapierPaperQPageSetupWidgetPapierquelle: Paper source:QPageSetupWidgetPunkte (pt) Points (pt)QPageSetupWidgetHochformatPortraitQPageSetupWidget,Umgekehrtes QuerformatReverse landscapeQPageSetupWidget,Umgekehrtes HochformatReverse portraitQPageSetupWidgetBreite:Width:QPageSetupWidgetUnterer Rand bottom marginQPageSetupWidgetLinker Rand left marginQPageSetupWidgetRechter Rand right marginQPageSetupWidgetOberer Rand top marginQPageSetupWidget>Das Plugin wurde nicht geladen.The plugin was not loaded. QPluginLoader$Unbekannter Fehler Unknown error QPluginLoader|Die Datei %1 existiert bereits. Soll sie berschrieben werden?/%1 already exists. Do you want to overwrite it? QPrintDialog%1 ist ein Verzeichnis. Bitte whlen Sie einen anderen Dateinamen.7%1 is a directory. Please choose a different file name. QPrintDialog$&Einstellungen <<  &Options << QPrintDialog"&Einstellungen >> &Options >> QPrintDialog&Drucken&Print QPrintDialogN<qt>Soll sie berschrieben werden?</qt>%Do you want to overwrite it? QPrintDialogA0A0 QPrintDialog$A0 (841 x 1189 mm)A0 (841 x 1189 mm) QPrintDialogA1A1 QPrintDialog"A1 (594 x 841 mm)A1 (594 x 841 mm) QPrintDialogA2A2 QPrintDialog"A2 (420 x 594 mm)A2 (420 x 594 mm) QPrintDialogA3A3 QPrintDialog"A3 (297 x 420 mm)A3 (297 x 420 mm) QPrintDialogA4A4 QPrintDialog"A4 (210 x 297 mm)%A4 (210 x 297 mm, 8.26 x 11.7 inches) QPrintDialogA5A5 QPrintDialog"A5 (148 x 210 mm)A5 (148 x 210 mm) QPrintDialogA6A6 QPrintDialog"A6 (105 x 148 mm)A6 (105 x 148 mm) QPrintDialogA7A7 QPrintDialog A7 (74 x 105 mm)A7 (74 x 105 mm) QPrintDialogA8A8 QPrintDialogA8 (52 x 74 mm)A8 (52 x 74 mm) QPrintDialogA9A9 QPrintDialogA9 (37 x 52 mm)A9 (37 x 52 mm) QPrintDialogAlias: %1 Aliases: %1 QPrintDialogB0B0 QPrintDialog&B0 (1000 x 1414 mm)B0 (1000 x 1414 mm) QPrintDialogB1B1 QPrintDialog$B1 (707 x 1000 mm)B1 (707 x 1000 mm) QPrintDialogB10B10 QPrintDialog B10 (31 x 44 mm)B10 (31 x 44 mm) QPrintDialogB2B2 QPrintDialog"B2 (500 x 707 mm)B2 (500 x 707 mm) QPrintDialogB3B3 QPrintDialog"B3 (353 x 500 mm)B3 (353 x 500 mm) QPrintDialogB4B4 QPrintDialog"B4 (250 x 353 mm)B4 (250 x 353 mm) QPrintDialogB5B5 QPrintDialog"B5 (176 x 250 mm)%B5 (176 x 250 mm, 6.93 x 9.84 inches) QPrintDialogB6B6 QPrintDialog"B6 (125 x 176 mm)B6 (125 x 176 mm) QPrintDialogB7B7 QPrintDialog B7 (88 x 125 mm)B7 (88 x 125 mm) QPrintDialogB8B8 QPrintDialogB8 (62 x 88 mm)B8 (62 x 88 mm) QPrintDialogB9B9 QPrintDialogB9 (44 x 62 mm)B9 (44 x 62 mm) QPrintDialogC5EC5E QPrintDialog$C5E (163 x 229 mm)C5E (163 x 229 mm) QPrintDialog"BenutzerdefiniertCustom QPrintDialogDLEDLE QPrintDialog$DLE (110 x 220 mm)DLE (110 x 220 mm) QPrintDialogExecutive Executive QPrintDialogNExecutive (7,5 x 10 Zoll, 191 x 254 mm))Executive (7.5 x 10 inches, 191 x 254 mm) QPrintDialogDie Datei %1 ist schreibgeschtzt. Bitte whlen Sie einen anderen Dateinamen.=File %1 is not writable. Please choose a different file name. QPrintDialog6Die Datei existiert bereits File exists QPrintDialog FolioFolio QPrintDialog(Folio (210 x 330 mm)Folio (210 x 330 mm) QPrintDialog LedgerLedger QPrintDialog*Ledger (432 x 279 mm)Ledger (432 x 279 mm) QPrintDialog LegalLegal QPrintDialogFLegal (8,5 x 14 Zoll, 216 x 356 mm)%Legal (8.5 x 14 inches, 216 x 356 mm) QPrintDialog LetterLetter QPrintDialogHLetter (8,5 x 11 Zoll, 216 x 279 mm)&Letter (8.5 x 11 inches, 216 x 279 mm) QPrintDialogLokale Datei Local file QPrintDialogOKOK QPrintDialogDruckenPrint QPrintDialog(In Datei drucken ...Print To File ... QPrintDialogAlles drucken Print all QPrintDialogBereich drucken Print range QPrintDialogAuswahl druckenPrint selection QPrintDialog(In PDF-Datei druckenPrint to File (PDF) QPrintDialog6In Postscript-Datei druckenPrint to File (Postscript) QPrintDialogTabloidTabloid QPrintDialog,Tabloid (279 x 432 mm)Tabloid (279 x 432 mm) QPrintDialogDie Angabe fr die erste Seite darf nicht grer sein als die fr die letzte Seite.7The 'From' value cannot be greater than the 'To' value. QPrintDialog,US Common #10 EnvelopeUS Common #10 Envelope QPrintDialogJUS Common #10 Envelope (105 x 241 mm)%US Common #10 Envelope (105 x 241 mm) QPrintDialog,Schreiben der Datei %1 Write %1 file QPrintDialog direkt verbundenlocally connected QPrintDialogunbekanntunknown QPrintDialog%1%%1%QPrintPreviewDialogSchlieenCloseQPrintPreviewDialogPDF exportieren Export to PDFQPrintPreviewDialog,PostScript exportierenExport to PostScriptQPrintPreviewDialogErste Seite First pageQPrintPreviewDialogSeite anpassenFit pageQPrintPreviewDialogBreite anpassen Fit widthQPrintPreviewDialogQuerformat LandscapeQPrintPreviewDialogLetzte Seite Last pageQPrintPreviewDialogNchste Seite Next pageQPrintPreviewDialog Seite einrichten Page SetupQPrintPreviewDialog Seite einrichten Page setupQPrintPreviewDialogHochformatPortraitQPrintPreviewDialogVorige Seite Previous pageQPrintPreviewDialogDruckenPrintQPrintPreviewDialogDruckvorschau Print PreviewQPrintPreviewDialogBGegenberliegende Seiten anzeigenShow facing pagesQPrintPreviewDialog,bersicht aller SeitenShow overview of all pagesQPrintPreviewDialog.Einzelne Seite anzeigenShow single pageQPrintPreviewDialogVergrernZoom inQPrintPreviewDialogVerkleinernZoom outQPrintPreviewDialogErweitertAdvancedQPrintPropertiesWidgetFormularFormQPrintPropertiesWidget SeitePageQPrintPropertiesWidgetSortierenCollateQPrintSettingsOutput FarbeColorQPrintSettingsOutputFarbmodus Color ModeQPrintSettingsOutput Anzahl ExemplareCopiesQPrintSettingsOutput"Anzahl Exemplare:Copies:QPrintSettingsOutputDuplexdruckDuplex PrintingQPrintSettingsOutputFormularFormQPrintSettingsOutputGraustufen GrayscaleQPrintSettingsOutputLange Seite Long sideQPrintSettingsOutputKeinNoneQPrintSettingsOutputOptionenOptionsQPrintSettingsOutput(AusgabeeinstellungenOutput SettingsQPrintSettingsOutputSeiten von Pages fromQPrintSettingsOutputAlles drucken Print allQPrintSettingsOutputBereich drucken Print rangeQPrintSettingsOutputUmgekehrtReverseQPrintSettingsOutputAuswahl SelectionQPrintSettingsOutputKurze Seite Short sideQPrintSettingsOutputbistoQPrintSettingsOutput &Name:&Name: QPrintWidget...... QPrintWidgetFormularForm QPrintWidgetStandort: Location: QPrintWidgetAusgabe&datei: Output &file: QPrintWidget&Eigenschaften P&roperties QPrintWidgetVorschauPreview QPrintWidgetDruckerPrinter QPrintWidgetTyp:Type: QPrintWidgetvDie Eingabeumleitung konnte nicht zum Lesen geffnet werden,Could not open input redirection for readingQProcessvDie Ausgabeumleitung konnte nicht zum Lesen geffnet werden-Could not open output redirection for writingQProcessBDas Lesen vom Prozess schlug fehlError reading from processQProcessJDas Schreiben zum Prozess schlug fehlError writing to processQProcess@Es wurde kein Programm angegebenNo program definedQProcess4Der Prozess ist abgestrztProcess crashedQProcessRDas Starten des Prozesses schlug fehl: %1Process failed to start: %1QProcess$ZeitberschreitungProcess operation timed outQProcessLRessourcenproblem ("fork failure"): %1!Resource error (fork failure): %1QProcessAbbrechenCancelQProgressDialog ffnenOpen QPushButtonAnkreuzenCheck QRadioButton@falsche Syntax fr Zeichenklassebad char class syntaxQRegExp8falsche Syntax fr Lookaheadbad lookahead syntaxQRegExpBfalsche Syntax fr Wiederholungenbad repetition syntaxQRegExpLdeaktivierte Eigenschaft wurde benutztdisabled feature usedQRegExp&ungltige Kategorieinvalid categoryQRegExp(ungltiges Intervallinvalid intervalQRegExp*ungltiger Oktal-Wertinvalid octal valueQRegExp.internes Limit erreichtmet internal limitQRegExp2fehlende linke Begrenzungmissing left delimQRegExpkein Fehlerno error occurredQRegExp"unerwartetes Endeunexpected endQRegExphDie Datenbankverbindung konnte nicht geffnet werdenError opening databaseQSQLite2DriverXEs konnte keine Transaktion gestartet werdenUnable to begin transactionQSQLite2DriverDie Transaktion konnte nicht durchgefhrt werden (Operation 'commit' fehlgeschlagen)Unable to commit transactionQSQLite2DriverhDie Transaktion kann nicht rckgngig gemacht werdenUnable to rollback transactionQSQLite2DriverRDer Befehl konnte nicht ausgefhrt werdenUnable to execute statementQSQLite2ResultRDas Ergebnis konnte nicht abgeholt werdenUnable to fetch resultsQSQLite2ResultnDie Datenbankverbindung konnte nicht geschlossen werdenError closing database QSQLiteDriverhDie Datenbankverbindung konnte nicht geffnet werdenError opening database QSQLiteDriverXEs konnte keine Transaktion gestartet werdenUnable to begin transaction QSQLiteDriverDie Transaktion konnte nicht durchgefhrt werden (Operation 'commit' fehlgeschlagen)Unable to commit transaction QSQLiteDriverDie Transaktion konnte nicht rckgngig gemacht werden (Operation 'rollback' fehlgeschlagen)Unable to rollback transaction QSQLiteDriverKein AbfrageNo query QSQLiteResultFDie Anzahl der Parameter ist falschParameter count mismatch QSQLiteResultTDie Parameter konnte nicht gebunden werdenUnable to bind parameters QSQLiteResultRDer Befehl konnte nicht ausgefhrt werdenUnable to execute statement QSQLiteResultTDer Datensatz konnte nicht abgeholt werdenUnable to fetch row QSQLiteResultXDer Befehl konnte nicht zurckgesetzt werdenUnable to reset statement QSQLiteResultBedingung ConditionQScriptBreakpointsModelAusgelst Hit-countQScriptBreakpointsModelIDIDQScriptBreakpointsModelAuslsen nach Ignore-countQScriptBreakpointsModel StelleLocationQScriptBreakpointsModelEinmal auslsen Single-shotQScriptBreakpointsModelLschenDeleteQScriptBreakpointsWidgetNeuNewQScriptBreakpointsWidget&&Suche im Skript...&Find in Script...QScriptDebuggerKonsole lschen Clear ConsoleQScriptDebugger*Debug-Ausgabe lschenClear Debug OutputQScriptDebugger*Fehlerausgabe lschenClear Error LogQScriptDebugger WeiterContinueQScriptDebugger Ctrl+FCtrl+FQScriptDebuggerCtrl+F10Ctrl+F10QScriptDebugger Ctrl+GCtrl+GQScriptDebuggerDebuggenDebugQScriptDebuggerF10F10QScriptDebuggerF11F11QScriptDebuggerF3F3QScriptDebuggerF5F5QScriptDebuggerF9F9QScriptDebugger&&Nchste Fundstelle Find &NextQScriptDebugger0Vorhergehende FundstelleFind &PreviousQScriptDebuggerGehe zu Zeile Go to LineQScriptDebuggerUnterbrechen InterruptQScriptDebugger Zeile:Line:QScriptDebugger(Bis Cursor ausfhren Run to CursorQScriptDebugger:Bis zu neuem Skript ausfhrenRun to New ScriptQScriptDebuggerShift+F11 Shift+F11QScriptDebuggerShift+F3Shift+F3QScriptDebuggerShift+F5Shift+F5QScriptDebugger(Einzelschritt herein Step IntoQScriptDebugger(Einzelschritt herausStep OutQScriptDebugger$Einzelschritt ber Step OverQScriptDebugger*Haltepunkt umschaltenToggle BreakpointQScriptDebugger<img src=":/qt/scripttools/debugging/images/wrap.png">&nbsp;Die Suche hat das Ende erreichtJ Search wrappedQScriptDebuggerCodeFinderWidget:Gro/Kleinschreibung beachtenCase SensitiveQScriptDebuggerCodeFinderWidgetSchlieenCloseQScriptDebuggerCodeFinderWidgetNchsteNextQScriptDebuggerCodeFinderWidget VorigePreviousQScriptDebuggerCodeFinderWidgetGanze Worte Whole wordsQScriptDebuggerCodeFinderWidgetNameNameQScriptDebuggerLocalsModelWertValueQScriptDebuggerLocalsModel EbeneLevelQScriptDebuggerStackModel StelleLocationQScriptDebuggerStackModelNameNameQScriptDebuggerStackModelBedingung:Breakpoint Condition: QScriptEdit.Haltepunkt deaktivierenDisable Breakpoint QScriptEdit*Haltepunkt aktivierenEnable Breakpoint QScriptEdit*Haltepunkt umschaltenToggle Breakpoint QScriptEditHaltepunkte BreakpointsQScriptEngineDebuggerKonsoleConsoleQScriptEngineDebuggerDebug-Ausgabe Debug OutputQScriptEngineDebuggerFehlerausgabe Error LogQScriptEngineDebugger Geladene SkripteLoaded ScriptsQScriptEngineDebugger Lokale VariablenLocalsQScriptEngineDebugger$Qt Script DebuggerQt Script DebuggerQScriptEngineDebugger SucheSearchQScriptEngineDebugger StapelStackQScriptEngineDebuggerAnsichtViewQScriptEngineDebuggerSchlieenCloseQScriptNewBreakpointWidgetEndeBottom QScrollBarLinker Rand Left edge QScrollBar*Eine Zeile nach unten Line down QScrollBarAusrichtenLine up QScrollBar*Eine Seite nach unten Page down QScrollBar*Eine Seite nach links Page left QScrollBar,Eine Seite nach rechts Page right QScrollBar(Eine Seite nach obenPage up QScrollBarPositionPosition QScrollBarRechter Rand Right edge QScrollBar&Nach unten scrollen Scroll down QScrollBar Hierher scrollen Scroll here QScrollBar&Nach links scrollen Scroll left QScrollBar(Nach rechts scrollen Scroll right QScrollBar$Nach oben scrollen Scroll up QScrollBar AnfangTop QScrollBarV%1: Die Unix-Schlsseldatei existiert nicht%1: UNIX key file doesn't exist QSharedMemory*%1: existiert bereits%1: already exists QSharedMemoryv%1: Die Grenangabe fr die Erzeugung ist kleiner als Null%1: create size is less then 0 QSharedMemory&%1: existiert nicht%1: doesn't exist QSharedMemory&%1: existiert nicht%1: doesn't exists QSharedMemory6%1: ftok-Aufruf schlug fehl%1: ftok failed QSharedMemory&%1: Ungltige Gre%1: invalid size QSharedMemory4%1: Fehlerhafter Schlssel %1: key error QSharedMemoryH%1: Ungltige Schlsselangabe (leer)%1: key is empty QSharedMemory&%1: nicht verbunden%1: not attached QSharedMemoryF%1: Keine Ressourcen mehr verfgbar%1: out of resources QSharedMemory,%1: Zugriff verweigert%1: permission denied QSharedMemoryJ%1: Die Abfrage der Gre schlug fehl%1: size query failed QSharedMemoryl%1: Ein systembedingtes Limit der Gre wurde erreicht$%1: system-imposed size restrictions QSharedMemory6%1: Sperrung fehlgeschlagen%1: unable to lock QSharedMemoryR%1: Es kann kein Schlssel erzeugt werden%1: unable to make key QSharedMemoryt%1: Es kann kein Schlssel fr die Sperrung gesetzt werden%1: unable to set key on lock QSharedMemory^%1: Die Sperrung konnte nicht aufgehoben werden%1: unable to unlock QSharedMemory2%1: Unbekannter Fehler %2%1: unknown error %2 QSharedMemory++ QShortcut,Lesezeichen hinzufgen Add Favorite QShortcut*Helligkeit einstellenAdjust Brightness QShortcutAltAlt QShortcutAnwendung linksApplication Left QShortcut Anwendung rechtsApplication Right QShortcut$Audiospur wechselnAudio Cycle Track QShortcutAudio vorspulen Audio Forward QShortcut>Audio zufllige Auswahl spielenAudio Random Play QShortcut"Audio wiederholen Audio Repeat QShortcut Audio rckspulen Audio Rewind QShortcutAbwesendAway QShortcut ZurckBack QShortcut(Hinterstes nach vorn Back Forward QShortcutRcktaste Backspace QShortcutRck-TabBacktab QShortcutBass-Boost Bass Boost QShortcut Bass - Bass Down QShortcut Bass +Bass Up QShortcutBatterieBattery QShortcutBluetooth Bluetooth QShortcutBuchBook QShortcutBrowserBrowser QShortcutCDCD QShortcutRechner Calculator QShortcut AnrufCall QShortcutFeststelltaste Caps Lock QShortcutFeststelltasteCapsLock QShortcutLschenClear QShortcutZugriff lschen Clear Grab QShortcutSchlieenClose QShortcutCommunity Community QShortcutKontext1Context1 QShortcutKontext2Context2 QShortcutKontext3Context3 QShortcutKontext4Context4 QShortcutKopierenCopy QShortcutStrgCtrl QShortcutAusschneidenCut QShortcutDOSDOS QShortcutEntfDel QShortcutLschenDelete QShortcutAnzeigenDisplay QShortcutDokumente Documents QShortcut RunterDown QShortcutAuswerfenEject QShortcutEndeEnd QShortcut EnterEnter QShortcutEscEsc QShortcut EscapeEscape QShortcutF%1F%1 QShortcutFavoriten Favorites QShortcutFinanzenFinance QShortcutUmdrehenFlip QShortcutVorwrtsForward QShortcut SpielGame QShortcutLosGo QShortcutAuflegenHangup QShortcut HilfeHelp QShortcutHibernate Hibernate QShortcutVerlaufHistory QShortcutPos1Home QShortcutHome Office Home Office QShortcutStartseite Home Page QShortcut&Empfohlene Verweise Hot Links QShortcut EinfgIns QShortcutEinfgenInsert QShortcut6Tastaturbeleuchtung dunklerKeyboard Brightness Down QShortcut4Tastaturbeleuchtung hellerKeyboard Brightness Up QShortcut6Tastaturbeleuchtung Ein/AusKeyboard Light On/Off QShortcutTastaturmen Keyboard Menu QShortcut(0) starten Launch (0) QShortcut(1) starten Launch (1) QShortcut(2) starten Launch (2) QShortcut(3) starten Launch (3) QShortcut(4) starten Launch (4) QShortcut(5) starten Launch (5) QShortcut(6) starten Launch (6) QShortcut(7) starten Launch (7) QShortcut(8) starten Launch (8) QShortcut(9) starten Launch (9) QShortcut(A) starten Launch (A) QShortcut(B) starten Launch (B) QShortcut(C) starten Launch (C) QShortcut(D) starten Launch (D) QShortcut(E) starten Launch (E) QShortcut(F) starten Launch (F) QShortcutMail starten Launch Mail QShortcut*Medienspieler starten Launch Media QShortcut LinksLeft QShortcutBeleuchtung LightBulb QShortcut LogoffLogoff QShortcutWeiterleitung Mail Forward QShortcut MarktMarket QShortcutNchster Media Next QShortcutWiedergabe Media Play QShortcutVorherigerMedia Previous QShortcutAufzeichnen Media Record QShortcut Stopp Media Stop QShortcutVersammlungMeeting QShortcutMenMenu QShortcutMen PBMenu PB QShortcutMessenger Messenger QShortcutMetaMeta QShortcutMonitor dunklerMonitor Brightness Down QShortcutMonitor hellerMonitor Brightness Up QShortcut MusikMusic QShortcutMeine OrteMy Sites QShortcutNachrichtenNews QShortcutNeinNo QShortcut*Zahlen-FeststelltasteNum Lock QShortcut*Zahlen-FeststelltasteNumLock QShortcut*Zahlen-Feststelltaste Number Lock QShortcutURL ffnenOpen URL QShortcut OptionOption QShortcutBild abwrts Page Down QShortcutBild aufwrtsPage Up QShortcutEinfgenPaste QShortcut PausePause QShortcutBild abwrtsPgDown QShortcutBild aufwrtsPgUp QShortcutTelefonPhone QShortcut BilderPictures QShortcutAusschalten Power Off QShortcut DruckPrint QShortcut$Bildschirm drucken Print Screen QShortcutAktualisierenRefresh QShortcutNeu ladenReload QShortcutAntwortenReply QShortcut ReturnReturn QShortcut RechtsRight QShortcut Fenster rotierenRotate Windows QShortcutRotation KB Rotation KB QShortcutRotation PB Rotation PB QShortcutSpeichernSave QShortcut"Bildschirmschoner Screensaver QShortcut*Rollen-Feststelltaste Scroll Lock QShortcut*Rollen-Feststelltaste ScrollLock QShortcut SuchenSearch QShortcutAuswhlenSelect QShortcut SendenSend QShortcutUmschaltShift QShortcutShopShop QShortcutSchlafmodusSleep QShortcutLeertasteSpace QShortcut&Rechtschreibprfung Spellchecker QShortcut"Bildschirm teilen Split Screen QShortcutSpreadsheet Spreadsheet QShortcutStandbyStandby QShortcutAbbrechenStop QShortcutUntertitelSubtitle QShortcut HilfeSupport QShortcut PauseSuspend QShortcut SysReqSysReq QShortcutSystem RequestSystem Request QShortcutTabTab QShortcutTask-Leiste Task Panel QShortcutTerminalTerminal QShortcutZeitTime QShortcutWerkzeugeTools QShortcutHauptmenTop Menu QShortcut ReiseTravel QShortcutHhen - Treble Down QShortcutHhen + Treble Up QShortcutUltra Wide BandUltra Wide Band QShortcutHochUp QShortcut VideoVideo QShortcutAnsichtView QShortcutLautstrke - Volume Down QShortcutTon aus Volume Mute QShortcutLautstrke + Volume Up QShortcutInternetWWW QShortcutAufweckenWake Up QShortcut WebCamWebCam QShortcutDrahtlosWireless QShortcut TextverarbeitungWord Processor QShortcutXFerXFer QShortcutJaYes QShortcutVergrernZoom In QShortcutVerkleinernZoom Out QShortcut iTouchiTouch QShortcut*Eine Seite nach unten Page downQSlider*Eine Seite nach links Page leftQSlider,Eine Seite nach rechts Page rightQSlider(Eine Seite nach obenPage upQSliderPositionPositionQSliderNDieser Adresstyp wird nicht untersttztAddress type not supportedQSocks5SocketEngine`Der SOCKSv5-Server hat die Verbindung verweigert(Connection not allowed by SOCKSv5 serverQSocks5SocketEnginejDer Proxy-Server hat die Verbindung vorzeitig beendet&Connection to proxy closed prematurelyQSocks5SocketEnginevDer Proxy-Server hat den Aufbau einer Verbindung verweigertConnection to proxy refusedQSocks5SocketEngineBei der Verbindung mit dem Proxy-Server wurde ein Zeitlimit berschrittenConnection to proxy timed outQSocks5SocketEngine~Allgemeiner Fehler bei der Kommunikation mit dem SOCKSv5-ServerGeneral SOCKSv5 server failureQSocks5SocketEnginefDas Zeitlimit fr die Operation wurde berschrittenNetwork operation timed outQSocks5SocketEnginefDie Authentifizierung beim Proxy-Server schlug fehlProxy authentication failedQSocks5SocketEnginenDie Authentifizierung beim Proxy-Server schlug fehl: %1Proxy authentication failed: %1QSocks5SocketEngineZDer Proxy-Server konnte nicht gefunden werdenProxy host not foundQSocks5SocketEngineDProtokoll-Fehler (SOCKS version 5)SOCKS version 5 protocol errorQSocks5SocketEngine\Dieses SOCKSv5-Kommando wird nicht untersttztSOCKSv5 command not supportedQSocks5SocketEngineTTL verstrichen TTL expiredQSocks5SocketEngine|Unbekannten Fehlercode vom SOCKSv5-Proxy-Server erhalten: 0x%1%Unknown SOCKSv5 proxy error code 0x%1QSocks5SocketEngineAbbrechenCancelQSoftKeyManager FertigDoneQSoftKeyManagerBeendenExitQSoftKeyManagerOkOkQSoftKeyManagerOptionenOptionsQSoftKeyManagerAuswhlenSelectQSoftKeyManagerWenigerLessQSpinBoxMehrMoreQSpinBoxAbbrechenCancelQSql*nderungen verwerfen?Cancel your edits?QSqlBesttigenConfirmQSqlLschenDeleteQSql2Diesen Datensatz lschen?Delete this record?QSqlEinfgenInsertQSqlNeinNoQSql*nderungen speichern? Save edits?QSqlAktualisierenUpdateQSqlJaYesQSqlOhne Schlssel kann kein Zertifikat zur Verfgung gestellt werden, %1,Cannot provide a certificate with no key, %1 QSslSocketnEs konnte keine SSL-Kontextstruktur erzeugt werden (%1)Error creating SSL context (%1) QSslSocket\Es konnte keine SSL-Sitzung erzeugt werden, %1Error creating SSL session, %1 QSslSocket\Es konnte keine SSL-Sitzung erzeugt werden: %1Error creating SSL session: %1 QSslSocketvIm Ablauf des SSL-Protokolls ist ein Fehler aufgetreten: %1Error during SSL handshake: %1 QSslSocketjDas lokale Zertifikat konnte nicht geladen werden, %1#Error loading local certificate, %1 QSslSocketjDer private Schlssel konnte nicht geladen werden, %1Error loading private key, %1 QSslSocketRBeim Lesen ist ein Fehler aufgetreten: %1Error while reading: %1 QSslSocketPUngltige oder leere Schlsselliste (%1)!Invalid or empty cipher list (%1) QSslSocket`Keines der Zertifikate konnte verifiziert werden!No certificates could be verified QSslSocketKein FehlerNo error QSslSocketxEines der Zertifikate der Zertifizierungsstelle ist ungltig%One of the CA certificates is invalid QSslSocketDer private Schlssel passt nicht zum ffentlichen Schlssel, %1+Private key does not certify public key, %1 QSslSocketrDie Lnge des basicConstraints-Pfades wurde berschritten QUndoModel WiederherstellenRedo QUndoStackRckgngigUndo QUndoStack@Unicode-Kontrollzeichen einfgen Insert Unicode control characterQUnicodeControlCharacterMenuHLRE Start of left-to-right embedding$LRE Start of left-to-right embeddingQUnicodeControlCharacterMenu,LRM Left-to-right markLRM Left-to-right markQUnicodeControlCharacterMenuFLRO Start of left-to-right override#LRO Start of left-to-right overrideQUnicodeControlCharacterMenu<PDF Pop directional formattingPDF Pop directional formattingQUnicodeControlCharacterMenuHRLE Start of right-to-left embedding$RLE Start of right-to-left embeddingQUnicodeControlCharacterMenu,RLM Right-to-left markRLM Right-to-left markQUnicodeControlCharacterMenuFRLO Start of right-to-left override#RLO Start of right-to-left overrideQUnicodeControlCharacterMenu*ZWJ Zero width joinerZWJ Zero width joinerQUnicodeControlCharacterMenu4ZWNJ Zero width non-joinerZWNJ Zero width non-joinerQUnicodeControlCharacterMenu*ZWSP Zero width spaceZWSP Zero width spaceQUnicodeControlCharacterMenuFDer URL kann nicht angezeigt werdenCannot show URL QWebFrameVDieser Mime-Typ kann nicht angezeigt werdenCannot show mimetype QWebFrame2Die Datei existiert nichtFile does not exist QWebFrameDas Laden des Rahmens wurde durch eine nderung der Richtlinien unterbrochen'Frame load interrupted by policy change QWebFrame0Anfrage wurde abgewiesenRequest blocked QWebFrame2Anfrage wurde abgebrochenRequest cancelled QWebFrame %1 (%2x%3 Pixel)%1 (%2x%3 pixels)QWebPageR%1 Tage %2 Stunden %3 Minuten %4 Sekunden&%1 days %2 hours %3 minutes %4 secondsQWebPageB%1 Stunden %2 Minuten %3 Sekunden%1 hours %2 minutes %3 secondsQWebPage,%1 Minuten %2 Sekunden%1 minutes %2 secondsQWebPage%1 Sekunden %1 secondsQWebPageEine Datei%n Dateien %n file(s)QWebPage.In Wrterbuch aufnehmenAdd To DictionaryQWebPage,Linksbndig ausrichten Align LeftQWebPage.Rechtsbndig ausrichten Align RightQWebPageAudio-Element Audio ElementQWebPageBAudio-Steuerung und Statusanzeige2Audio element playback controls and status displayQWebPage4Ungltige HTTP-AnforderungBad HTTP requestQWebPageAbspielenBegin playbackQWebPageFettBoldQWebPageEndeBottomQWebPageZentrierenCenterQWebPagebGrammatik mit Rechtschreibung zusammen berprfenCheck Grammar With SpellingQWebPage,Rechtschreibung prfenCheck SpellingQWebPagebRechtschreibung whrend des Schreibens berprfenCheck Spelling While TypingQWebPageDurchsuchen Choose FileQWebPageBGespeicherte Suchanfragen lschenClear recent searchesQWebPageKopierenCopyQWebPageGrafik kopieren Copy ImageQWebPage*Link-Adresse kopieren Copy LinkQWebPage Status des FilmsCurrent movie statusQWebPage*Abspielzeit des FilmsCurrent movie timeQWebPageAusschneidenCutQWebPageVorgabeDefaultQWebPage>Bis zum Ende des Wortes lschenDelete to the end of the wordQWebPageBBis zum Anfang des Wortes lschenDelete to the start of the wordQWebPageSchreibrichtung DirectionQWebPageSpielzeit Elapsed TimeQWebPage FontsFontsQWebPageVollbild-TasteFullscreen ButtonQWebPage ZurckGo BackQWebPageVor Go ForwardQWebPageXRechtschreibung und Grammatik nicht anzeigenHide Spelling and GrammarQWebPageIgnorierenIgnoreQWebPageIgnorieren Ignore Grammar context menu itemIgnoreQWebPage Unbegrenzte ZeitIndefinite timeQWebPageEinrckenIndentQWebPage4Liste mit Punkten einfgenInsert Bulleted ListQWebPage4Nummerierte Liste einfgenInsert Numbered ListQWebPage&Neue Zeile einfgenInsert a new lineQWebPage0Neuen Abschnitt einfgenInsert a new paragraphQWebPage PrfenInspectQWebPage KursivItalicQWebPage.JavaScript-Hinweis - %1JavaScript Alert - %1QWebPage6JavaScript-Besttigung - %1JavaScript Confirm - %1QWebPage.JavaScript-Problem - %1JavaScript Problem - %1QWebPageFJavaScript-Eingabeaufforderung - %1JavaScript Prompt - %1QWebPageAusrichtenJustifyQWebPageLinker Rand Left edgeQWebPage*Von links nach rechts Left to RightQWebPage Live-bertragungLive BroadcastQWebPageLdt... Loading...QWebPage2Im Wrterbuch nachschauenLook Up In DictionaryQWebPageRPositionsmarke auf Ende des Blocks setzen'Move the cursor to the end of the blockQWebPageZPositionsmarke auf Ende des Dokumentes setzen*Move the cursor to the end of the documentQWebPageHPositionsmarke auf Zeilenende setzen&Move the cursor to the end of the lineQWebPageVPositionsmarke auf folgendes Zeichen setzen%Move the cursor to the next characterQWebPagePPositionsmarke auf folgende Zeile setzen Move the cursor to the next lineQWebPagePPositionsmarke auf folgendes Wort setzen Move the cursor to the next wordQWebPage^Positionsmarke auf vorangehendes Zeichen setzen)Move the cursor to the previous characterQWebPageXPositionsmarke auf vorangehende Zeile setzen$Move the cursor to the previous lineQWebPageXPositionsmarke auf vorangehendes Wort setzen$Move the cursor to the previous wordQWebPageVPositionsmarke auf Anfang des Blocks setzen)Move the cursor to the start of the blockQWebPage^Positionsmarke auf Anfang des Dokumentes setzen,Move the cursor to the start of the documentQWebPageLPositionsmarke auf Zeilenanfang setzen(Move the cursor to the start of the lineQWebPageAbspielzeitMovie time scrubberQWebPageJGriff zur Einstellung der AbspielzeitMovie time scrubber thumbQWebPage Stummschalttaste Mute ButtonQWebPage.Schalte Tonspuren stummMute audio tracksQWebPage2Keine Vorschlge gefundenNo Guesses FoundQWebPage:Es ist keine Datei ausgewhltNo file selectedQWebPageJEs existieren noch keine SuchanfragenNo recent searchesQWebPageFrame ffnen Open FrameQWebPage<Grafik in neuem Fenster ffnen Open ImageQWebPageAdresse ffnen Open LinkQWebPage.In neuem Fenster ffnenOpen in New WindowQWebPage&Einrckung aufhebenOutdentQWebPage UmrissOutlineQWebPage*Eine Seite nach unten Page downQWebPage*Eine Seite nach links Page leftQWebPage,Eine Seite nach rechts Page rightQWebPage(Eine Seite nach obenPage upQWebPageEinfgenPasteQWebPage<Einfgen und dem Stil anpassenPaste and Match StyleQWebPagePause-Knopf Pause ButtonQWebPage PausePause playbackQWebPageAbspielknopf Play ButtonQWebPage>Film im Vollbildmodus abspielenPlay movie in full-screen modeQWebPage,Bisherige SuchanfragenRecent searchesQWebPageNeu ladenReloadQWebPage"Verbleibende ZeitRemaining TimeQWebPage6Verbleibende Zeit des FilmsRemaining movie timeQWebPage,Formatierung entfernenRemove formattingQWebPageRcksetzenResetQWebPage<Setze Film auf Echtzeit zurck#Return streaming movie to real-timeQWebPage0Kehre zu Echtzeit zurckReturn to Real-time ButtonQWebPageRckspultaste Rewind ButtonQWebPage"Film zurckspulen Rewind movieQWebPageRechter Rand Right edgeQWebPage*Von rechts nach links Right to LeftQWebPage,Grafik speichern unter Save ImageQWebPage.Ziel speichern unter... Save Link...QWebPage&Nach unten scrollen Scroll downQWebPage Hierher scrollen Scroll hereQWebPage&Nach links scrollen Scroll leftQWebPage(Nach rechts scrollen Scroll rightQWebPage$Nach oben scrollen Scroll upQWebPageIm Web suchenSearch The WebQWebPageRcklauftasteSeek Back ButtonQWebPageVorlauftasteSeek Forward ButtonQWebPage2Schnelles RckwrtssuchenSeek quickly backQWebPage0Schnelles VorwrtssuchenSeek quickly forwardQWebPageAlles auswhlen Select allQWebPageBBis zum Ende des Blocks markierenSelect to the end of the blockQWebPageHBis zum Ende des Dokuments markieren!Select to the end of the documentQWebPage8Bis zum Zeilenende markierenSelect to the end of the lineQWebPageDBis zum nchsten Zeichen markierenSelect to the next characterQWebPage@Bis zur nchsten Zeile markierenSelect to the next lineQWebPage>Bis zum nchsten Wort markierenSelect to the next wordQWebPageHBis zum vorherigen Zeichen markieren Select to the previous characterQWebPageDBis zur vorherigen Zeile markierenSelect to the previous lineQWebPageBBis zum vorherigen Wort markierenSelect to the previous wordQWebPageFBis zum Anfang des Blocks markieren Select to the start of the blockQWebPageLBis zum Anfang des Dokuments markieren#Select to the start of the documentQWebPage<Bis zum Zeilenanfang markierenSelect to the start of the lineQWebPageLRechtschreibung und Grammatik anzeigenShow Spelling and GrammarQWebPageSchiebereglerSliderQWebPage&Schieberegler-Griff Slider ThumbQWebPageRechtschreibungSpellingQWebPageStatusanzeigeStatus DisplayQWebPageAbbrechenStopQWebPageDurchgestrichen StrikethroughQWebPage SendenSubmitQWebPage SendenQSubmit (input element) alt text for elements with no alt, title, or valueSubmitQWebPageTiefstellung SubscriptQWebPageHochstellung SuperscriptQWebPageSchreibrichtungText DirectionQWebPageDas Skript dieser Webseite ist fehlerhaft. Mchten Sie es anhalten?RThe script on this page appears to have a problem. Do you want to stop the script?QWebPageDieser Index verfgt ber eine Suchfunktion. Geben Sie einen Suchbegriff ein:3This is a searchable index. Enter search keywords: QWebPage AnfangTopQWebPageUnterstrichen UnderlineQWebPageUnbekanntUnknownQWebPage>Abstelltaste fr Stummschaltung Unmute ButtonQWebPageJStummschaltung der Tonspuren aufhebenUnmute audio tracksQWebPageVideo-Element Video ElementQWebPageBVideo-Steuerung und Statusanzeige2Video element playback controls and status displayQWebPage$Web Inspector - %2Web Inspector - %2QWebPageDirekthilfe What's This?QWhatsThisAction**QWidgetAb&schlieen&FinishQWizard &Hilfe&HelpQWizard&Weiter&NextQWizard&Weiter >&Next >QWizard< &Zurck< &BackQWizardAbbrechenCancelQWizardAnwendenCommitQWizard WeiterContinueQWizard FertigDoneQWizard ZurckGo BackQWizard HilfeHelpQWizard%1 - [%2] %1 - [%2] QWorkspaceSchl&ieen&Close QWorkspaceVer&schieben&Move QWorkspace"Wieder&herstellen&Restore QWorkspace&Gre ndern&Size QWorkspace&Herabrollen&Unshade QWorkspaceSchlieenClose QWorkspaceMa&ximieren Ma&ximize QWorkspaceM&inimieren Mi&nimize QWorkspaceMinimierenMinimize QWorkspace Wiederherstellen Restore Down QWorkspace&AufrollenSh&ade QWorkspace.Im &Vordergrund bleiben Stay on &Top QWorkspacefehlende Encoding-Deklaration oder Standalone-Deklaration beim Parsen der XML-DeklarationYencoding declaration or standalone declaration expected while reading the XML declarationQXmlhFehler in der Text-Deklaration einer externen Entity3error in the text declaration of an external entityQXmlFFehler beim Parsen eines Kommentars$error occurred while parsing commentQXmlZFehler beim Parsen des Inhalts eines Elements$error occurred while parsing contentQXmlXFehler beim Parsen der Dokumenttypdefinition5error occurred while parsing document type definitionQXmlBFehler beim Parsen eines Elements$error occurred while parsing elementQXmlBFehler beim Parsen einer Referenz&error occurred while parsing referenceQXml4Konsument lste Fehler auserror triggered by consumerQXmlrin der DTD sind keine externen Entity-Referenzen erlaubt ;external parsed general entity reference not allowed in DTDQXmlin einem Attribut-Wert sind keine externen Entity-Referenzen erlaubtGexternal parsed general entity reference not allowed in attribute valueQXmlin einer DTD ist keine interne allgemeine Entity-Referenz erlaubt4internal general entity reference not allowed in DTDQXmldkein gltiger Name fr eine Processing-Instruktion'invalid name for processing instructionQXml^ein Buchstabe ist an dieser Stelle erforderlichletter is expectedQXml>mehrere Dokumenttypdefinitionen&more than one document type definitionQXmlkein Fehlerno error occurredQXml rekursive Entityrecursive entitiesQXml~fehlende Standalone-Deklaration beim Parsen der XML DeklarationAstandalone declaration expected while reading the XML declarationQXmlXElement-Tags sind nicht richtig geschachtelt tag mismatchQXml(unerwartetes Zeichenunexpected characterQXml6unerwartetes Ende der Dateiunexpected end of fileQXml~nicht-analysierte Entity-Referenz im falschen Kontext verwendet*unparsed entity reference in wrong contextQXml`fehlende Version beim Parsen der XML-Deklaration2version expected while reading the XML declarationQXmlXfalscher Wert fr die Standalone-Deklaration&wrong value for standalone declarationQXmlXFehler %1 in %2, bei Zeile %3, Spalte %4: %5)Error %1 in %2, at line %3, column %4: %5QXmlPatternistCLI&Fehler %1 in %2: %3Error %1 in %2: %3QXmlPatternistCLIunbekanntUnknown locationQXmlPatternistCLITWarnung in %1, bei Zeile %2, Spalte %3: %4(Warning in %1, at line %2, column %3: %4QXmlPatternistCLI"Warnung in %1: %2Warning in %1: %2QXmlPatternistCLI^%1 ist keine gltige Angabe fr eine PUBLIC-Id.#%1 is an invalid PUBLIC identifier. QXmlStreamV%1 ist kein gltiger Name fr das Encoding.%1 is an invalid encoding name. QXmlStreamt%1 ist kein gltiger Name fr eine Prozessing-Instruktion.-%1 is an invalid processing instruction name. QXmlStream@erwartet, stattdessen erhalten ' , but got ' QXmlStream<Redefinition eines Attributes.Attribute redefined. QXmlStreamLDas Encoding %1 wird nicht untersttztEncoding %1 is unsupported QXmlStreampEs wurde Inhalt mit einer ungltigen Kodierung gefunden.(Encountered incorrectly encoded content. QXmlStreamJDie Entity '%1' ist nicht deklariert.Entity '%1' not declared. QXmlStreamEs wurde  Expected  QXmlStream@Es wurden Zeichendaten erwartet.Expected character data. QXmlStreamZberzhliger Inhalt nach Ende des Dokumentes.!Extra content at end of document. QXmlStreamBUngltige Namensraum-Deklaration.Illegal namespace declaration. QXmlStream.Ungltiges XML-Zeichen.Invalid XML character. QXmlStream(Ungltiger XML-Name.Invalid XML name. QXmlStream:Ungltige XML-Versionsangabe.Invalid XML version string. QXmlStreamhDie XML-Deklaration enthlt ein ungltiges Attribut.%Invalid attribute in XML declaration. QXmlStream4Ungltige Zeichenreferenz.Invalid character reference. QXmlStream(Ungltiges Dokument.Invalid document. QXmlStream.Ungltiger Entity-Wert.Invalid entity value. QXmlStreambDer Name der Prozessing-Instruktion ist ungltig.$Invalid processing instruction name. QXmlStreamxEine Parameter-Entity-Deklaration darf kein NDATA enthalten.&NDATA in parameter entity declaration. QXmlStreambDer Namensraum-Prfix '%1' wurde nicht deklariert"Namespace prefix '%1' not declared QXmlStreamDie Anzahl der ffnenden Elemente stimmt nicht mit der Anzahl der schlieenden Elemente berein. Opening and ending tag mismatch. QXmlStream>Vorzeitiges Ende des Dokuments.Premature end of document. QXmlStreamXEs wurde eine rekursive Entity festgestellt.Recursive entity detected. QXmlStreamvIm Attributwert wurde die externe Entity '%1' referenziert.5Reference to external entity '%1' in attribute value. QXmlStreambEs wurde die ungeparste Entity '%1' referenziert."Reference to unparsed entity '%1'. QXmlStreamfIm Inhalt ist die Zeichenfolge ']]>' nicht erlaubt.&Sequence ']]>' not allowed in content. QXmlStreamDer Wert fr das 'Standalone'-Attribut kann nur 'yes' oder 'no' sein."Standalone accepts only yes or no. QXmlStream6ffnendes Element erwartet.Start tag expected. QXmlStreamDas Standalone-Pseudoattribut muss dem Encoding unmittelbar folgen.?The standalone pseudo attribute must appear after the encoding. QXmlStream8Ungltig an dieser Stelle '  Unexpected ' QXmlStreamr'%1' ist kein gltiges Zeichen in einer public-id-Angabe./Unexpected character '%1' in public id literal. QXmlStreamRDiese XML-Version wird nicht untersttzt.Unsupported XML version. QXmlStreamDie XML-Deklaration befindet sich nicht am Anfang des Dokuments.)XML declaration not at start of document. QXmlStreamDie Ausdrcke %1 und %2 passen jeweils auf den Anfang oder das Ende einer beliebigen Zeile.,%1 and %2 match the start and end of a line. QtXmlPatternsDas Attribut %1 aus %2 muss die Verwendung '%3' spezifizieren, wie im Basistyp %4.9%1 attribute in %2 must have %3 use like in base type %4. QtXmlPatternsDas Attribut %1 in einem abgeleiteten komplexen Typ muss wie im Basistyp '%2' sein.B%1 attribute in derived complex type must be %2 like in base type. QtXmlPatternsDas Attribut %1 des Elements %2 enthlt ungltigen Inhalt: {%3} ist kein Wert des Typs %4.T%1 attribute of %2 element contains invalid content: {%3} is not a value of type %4. QtXmlPatternsDas Attribut %1 des Elements %2 enthlt ungltigen Inhalt: {%3}.:%1 attribute of %2 element contains invalid content: {%3}. QtXmlPatternsDer Wert des Attributs %1 des Elements %2 ist grer als der des Attributs %3.>%1 attribute of %2 element has larger value than %3 attribute. QtXmlPatternsrDas Attribut %1 des Elements %2 kann nur %3 oder %4 sein.,%1 attribute of %2 element must be %3 or %4. QtXmlPatternsDas Attribut %1 des Elements %2 muss %3, %4 oder eine Liste der URIs enthalten.A%1 attribute of %2 element must contain %3, %4 or a list of URIs. QtXmlPatternsDer Wert des Attributs %1 des Elements %2 muss entweder %3 oder die anderen Werte enthalten.F%1 attribute of %2 element must either contain %3 or the other values. QtXmlPatternsDas Attribut %1 des Elements %2 kann nur einen der Werte %3 oder %4 haben.9%1 attribute of %2 element must have a value of %3 or %4. QtXmlPatternsnDas Attribut %1 des Elements %2 muss den Wert %3 haben.3%1 attribute of %2 element must have a value of %3. QtXmlPatternsDas Attribut %1 des Elements %2 muss den Wert %3 haben, da das Attribut %4 gesetzt ist.R%1 attribute of %2 element must have the value %3 because the %4 attribute is set. QtXmlPatternsfDas Attribut %1 des Elements %2 kann nicht %3 sein.*%1 attribute of %2 element must not be %3. QtXmlPatterns:%1 kann nicht bestimmt werden%1 cannot be retrieved QtXmlPatterns~%1 kann keinen komplexen Basistyp haben, der '%2' spezifiziert./%1 cannot have complex base type that has a %2. QtXmlPatternsh%1 enthlt eine Facette %2 mit ungltigen Daten: %3.+%1 contains %2 facet with invalid data: %3. QtXmlPatterns6%1 enthlt ungltige Daten.%1 contains invalid data. QtXmlPatternsv%1 enthlt Oktette, die im Encoding %2 nicht zulssig sind.E%1 contains octets which are disallowed in the requested encoding %2. QtXmlPatternsDas Element %2 (%1) ist keine gltige Einschrnkung des berschriebenen Elements (%3): %4.L%1 element %2 is not a valid restriction of the %3 element it redefines: %4. QtXmlPatternsDer Wert des Attributs %2 des Elements %1 kann nur %3 oder %4 sein.C%1 element cannot have %2 attribute with value other than %3 or %4. QtXmlPatternsvDer Wert des Attributs %2 des Elements %1 kann nur %3 sein.=%1 element cannot have %2 attribute with value other than %3. QtXmlPatternsDas Element %1 hat weder das Attribut %2 noch ein Unterelement %3.9%1 element has neither %2 attribute nor %3 child element. QtXmlPatternshDas Element %1 ist in diesem Kontext nicht zulssig.*%1 element is not allowed in this context. QtXmlPatternsfDas Element %1 ist in diesem Bereich nicht zulssig'%1 element is not allowed in this scope QtXmlPatternsWenn das Attribut %3 vorhanden ist, darf das Element %1 nicht im Element %2 vorkommen.G%1 element is not allowed inside %2 element if %3 attribute is present. QtXmlPatternsDas Element %1 kann nicht den Zielnamensraum %3 als Wert des Attributs '%2' spezifizieren.Y%1 element is not allowed to have the same %2 attribute value as the target namespace %3. QtXmlPatternsDas Element %1 muss entweder das Attribut %2 spezifizieren oder ber eines der Unterelemente %3 oder %4 verfgen.F%1 element must have either %2 attribute or %3 or %4 as child element. QtXmlPatternsDas Element %1 muss eines der Attribute %2 oder %3 spezifizieren./%1 element must have either %2 or %3 attribute. QtXmlPatternsDie Attribute %2 und %3 knnen nicht zusammen im Element %1 erscheinen.6%1 element must not have %2 and %3 attribute together. QtXmlPatternspDas Element %1 erfordert eines der Attribute %2 oder %3..%1 element requires either %2 or %3 attribute. QtXmlPatternsDas Element %1 darf kein Attribut %3 haben, wenn das Unterelement %2 vorhanden ist.>%1 element with %2 child element must not have a %3 attribute. QtXmlPatternsIn einem Schema ohne Namensraum muss das Element %1 ein Attribut %2 haben.V%1 element without %2 attribute is not allowed inside schema without target namespace. QtXmlPatternspDie Facetten %1 und %2 knnen nicht zusammen erscheinen.-%1 facet and %2 facet cannot appear together. QtXmlPatternsDie Facette %1 kann nicht %2 sein, wenn die Facette %3 des Basistyps %4 ist.5%1 facet cannot be %2 if %3 facet of base type is %4. QtXmlPatternsDie Facette %1 kann nicht %2 oder %3 sein, wenn die Facette %4 des Basistyps %5 ist.;%1 facet cannot be %2 or %3 if %4 facet of base type is %5. QtXmlPatternslDie Facette %1 steht im Widerspruch zu der Facette %2. %1 facet collides with %2 facet. QtXmlPatternstDie Facette %1 enthlt einen ungltigen regulren Ausdruck,%1 facet contains invalid regular expression QtXmlPatternshDie Facette %1 enthlt einen ungltigen Wert %2: %3.'%1 facet contains invalid value %2: %3. QtXmlPatternsDie Facette %1 muss grer oder gleich der Facette %2 des Basistyps sein.=%1 facet must be equal or greater than %2 facet of base type. QtXmlPatternsDie Facette %1 muss grer als die Facette %2 des Basistyps sein.4%1 facet must be greater than %2 facet of base type. QtXmlPatternsDie Facette %1 muss grer oder gleich der Facette %2 des Basistyps sein.@%1 facet must be greater than or equal to %2 facet of base type. QtXmlPatterns|Die Facette %1 muss kleiner der Facette %2 des Basistyps sein.1%1 facet must be less than %2 facet of base type. QtXmlPatternshDie Facette %1 muss kleiner als die Facette %2 sein.$%1 facet must be less than %2 facet. QtXmlPatternsDie Facette %1 muss kleiner oder gleich der Facette %2 des Basistyps sein.=%1 facet must be less than or equal to %2 facet of base type. QtXmlPatternsxDie Facette %1 muss kleiner oder gleich der Facette %2 sein.0%1 facet must be less than or equal to %2 facet. QtXmlPatternsDie Facette %1 muss denselben Wert wie die Facette %2 des Basistyps haben.;%1 facet must have the same value as %2 facet of base type. QtXmlPatternsBei %1 unterscheidet sich die Anzahl der Felder von der der Identittseinschrnkung %2, auf die es verweist.W%1 has a different number of fields from the identity constraint %2 that it references. QtXmlPatterns|%1 hat ein Attributssuchmuster, nicht jedoch sein Basistyp %2.7%1 has attribute wildcard but its base type %2 has not. QtXmlPatterns^%1 hat eine zirkulre Vererbung im Basistyp %2.,%1 has inheritance loop in its base type %2. QtXmlPatternsT%1 ist ein komplexer Typ. Eine "cast"-Operation zu komplexen Typen ist nicht mglich. Es knnen allerdings "cast"-Operationen zu atomare Typen wie %2 durchgefhrt werden.s%1 is an complex type. Casting to complex types is not possible. However, casting to atomic types such as %2 works. QtXmlPatterns.%1 ist kein gltiges %2%1 is an invalid %2 QtXmlPatterns%1 ist kein gltiger Modifizierer fr regulre Ausdrcke. Gltige Modifizierer sind:?%1 is an invalid flag for regular expressions. Valid flags are: QtXmlPatternsH%1 ist kein gltiger Namensraum-URI.%1 is an invalid namespace URI. QtXmlPatternsV%1 ist kein gltiger regulrer Ausdruck: %2/%1 is an invalid regular expression pattern: %2 QtXmlPatternsd%1 ist kein gltiger Name fr einen Vorlagenmodus.$%1 is an invalid template mode name. QtXmlPatternsD%1 ist ein unbekannter Schema-Typ.%1 is an unknown schema type. QtXmlPatternsNDas Encoding %1 wird nicht untersttzt.%1 is an unsupported encoding. QtXmlPatternsJ%1 ist kein gltiges XML 1.0 Zeichen.$%1 is not a valid XML 1.0 character. QtXmlPatternst%1 ist kein gltiger Name fr eine Processing-Instruktion.4%1 is not a valid name for a processing-instruction. QtXmlPatternsR%1 ist kein gltiger numerischer Literal."%1 is not a valid numeric literal. QtXmlPatterns%1 ist kein gltiger Zielname einer Processing-Anweisung, es muss ein %2 Wert wie zum Beispiel %3 sein.Z%1 is not a valid target name in a processing instruction. It must be a %2 value, e.g. %3. QtXmlPatternsL%1 ist kein gltiger Wert des Typs %2.#%1 is not a valid value of type %2. QtXmlPatternsN%1 ist keine ganzzahlige Minutenangabe.$%1 is not a whole number of minutes. QtXmlPatterns%1 darf nicht durch Erweiterung von %2 abgeleitet werden, da letzterer sie als final deklariert.S%1 is not allowed to derive from %2 by extension as the latter defines it as final. QtXmlPatterns%1 darf nicht durch Listen von %2 abgeleitet werden, da letzterer sie als final deklariert.N%1 is not allowed to derive from %2 by list as the latter defines it as final. QtXmlPatterns%1 darf nicht durch Einschrnkung von %2 abgeleitet werden, da letzterer sie als final deklariert.U%1 is not allowed to derive from %2 by restriction as the latter defines it as final. QtXmlPatterns%1 darf nicht durch Vereinigung von %2 abgeleitet werden, da sie letzterer sie als final deklariert.O%1 is not allowed to derive from %2 by union as the latter defines it as final. QtXmlPatternst%1 darf keinen Typ eines Mitglieds desselben Namens haben.E%1 is not allowed to have a member type with the same name as itself. QtXmlPatterns:%1 darf keine Facetten haben.%%1 is not allowed to have any facets. QtXmlPatterns%1 ist kein atomarer Typ. "cast"-Operation knnen nur zu atomaren Typen durchgefhrt werden.C%1 is not an atomic type. Casting is only possible to atomic types. QtXmlPatterns%1 befindet sich nicht unter den Attributdeklarationen im Bereich. Schema-Import wird nicht untersttzt.g%1 is not in the in-scope attribute declarations. Note that the schema import feature is not supported. QtXmlPatterns0%1 ist nach %2 ungltig. %1 is not valid according to %2. QtXmlPatternsL%1 ist kein gltiger Wert des Typs %2.&%1 is not valid as a value of type %2. QtXmlPatterns\Der Ausdruck '%1' schliet Zeilenvorschbe ein%1 matches newline characters QtXmlPatternsAuf %1 muss %2 oder %3 folgen; es kann nicht am Ende der Ersetzung erscheinen.J%1 must be followed by %2 or %3, not at the end of the replacement string. QtXmlPatternsDas Attribut %1 des abgeleiteten Suchmusters ist keine gltige Einschrnkung des Attributs '%2' des BasissuchmustersH%1 of derived wildcard is not a valid restriction of %2 of base wildcard QtXmlPatternsDas Attribut %1 oder %2 des Verweises %3 entspricht nicht der Attributsdeklaration %4.T%1 or %2 attribute of reference %3 does not match with the attribute declaration %4. QtXmlPatterns%1 verweist auf eine Identittseinschrnkung %2, die weder ein '%3' noch ein '%4' Element ist.A%1 references identity constraint %2 that is no %3 or %4 element. QtXmlPatternsx%1 verweist auf ein unbekanntes Element %4 ('%2' oder '%3').*%1 references unknown %2 or %3 element %4. QtXmlPatterns%1 erfordert mindestens ein Argument; die Angabe %3 ist daher ungltig.%1 erfordert mindestens %n Argumente; die Angabe %3 ist daher ungltig.=%1 requires at least %n argument(s). %2 is therefore invalid. QtXmlPatternsr%1 hat nur %n Argument; die Angabe %2 ist daher ungltig.t%1 hat nur %n Argumente; die Angabe %2 ist daher ungltig.9%1 takes at most %n argument(s). %2 is therefore invalid. QtXmlPatterns"%1 wurde gerufen.%1 was called. QtXmlPatternsDie Facetten %1, %2, %3, %4, %5 und %6 sind bei Vererbung durch Listen nicht zulssig.F%1, %2, %3, %4, %5 and %6 facets are not allowed when derived by list. QtXmlPatternsDas Attribut '%1' enthlt einen ungltigen qualifizierten Namen: %2.2'%1' attribute contains invalid QName content: %2. QtXmlPatternsJEin Kommentar darf nicht'%1 enthaltenA comment cannot contain %1 QtXmlPatternsLEin Kommentar darf nicht auf %1 enden.A comment cannot end with a %1. QtXmlPatternsEs wurde ein Sprachkonstrukt angetroffen, was in der aktuellen Sprache (%1) nicht erlaubt ist.LA construct was encountered which is disallowed in the current language(%1). QtXmlPatternsDie Deklaration des Default-Namensraums muss vor Funktions-, Variablen- oder Optionsdeklaration erfolgen.^A default namespace declaration must occur before function, variable, and option declarations. QtXmlPatternsEs wurde ein fehlerhafter direkter Element-Konstruktor gefunden. %1 endet mit %2.EA direct element constructor is not well-formed. %1 is ended with %2. QtXmlPatternsnEs existiert bereits eine Funktion mit der Signatur %1.0A function already exists with the signature %1. QtXmlPatternsEin Bibliotheksmodul kann nicht direkt ausgewertet werden, er muss von einem Hauptmodul importiert werden.VA library module cannot be evaluated directly. It must be imported from a main module. QtXmlPatternsDer Parameter einer Funktion kann nicht als Tunnel deklariert werden.Can not process unknown element %1, expected elements are: %2. QtXmlPatternsDas Unterelement fehlt im Bereich; mgliche Unterelemente wren: %1.HChild element is missing in that scope, possible child elements are: %1. QtXmlPatterns4Zirkulrer Verweis bei %1. Circular group reference for %1. QtXmlPatternsFZirkulre Vererbung im Basistyp %1.%Circular inheritance of base type %1. QtXmlPatternsVZirkulre Vererbung bei der Vereinigung %1.!Circular inheritance of union %1. QtXmlPatterns Der komplexe Typ %1 kann nicht durch Erweiterung von %2 abgeleitet werden, da letzterer ein '%3'-Element in seinem Inhaltsmodell hat.nComplex type %1 cannot be derived by extension from %2 as the latter contains %3 element in its content model. QtXmlPatternsDer komplexe Typ %1 kann nicht vom Basistyp %2 abgeleitet werden%3.6Complex type %1 cannot be derived from base type %2%3. QtXmlPatternsDer komplexe Typ %1 enthlt ein Attribut %2 mit einer Einschrnkung des Werts, dessen Typ aber von %3 abgeleitet ist._Complex type %1 contains attribute %2 that has value constraint but type that inherits from %3. QtXmlPatternshDer komplexe Typ %1 enthlt das Attribut %2 doppelt.,Complex type %1 contains attribute %2 twice. QtXmlPatternsDie Attributgruppe %1 enthlt zwei verschiedene Attribute mit Typen, die beide von %2 abgeleitet sind.WComplex type %1 contains two different attributes that both have types derived from %2. QtXmlPatternsDer komplexe Typ %1 hat ein dupliziertes Element %2 in seinem Inhaltsmodell.?Complex type %1 has duplicated element %2 in its content model. QtXmlPatternsnDer komplexe Typ %1 hat nicht-deterministischen Inhalt..Complex type %1 has non-deterministic content. QtXmlPatternsZDer komplexe Typ %1 kann nicht abstrakt sein..Complex type %1 is not allowed to be abstract. QtXmlPatternshDer komplexe Typ %1 kann nur einfachen Inhalt haben.)Complex type %1 must have simple content. QtXmlPatternsDer komplexe Typ %1 kann nur einen einfachen Typ als Basisklasse %2 haben.DComplex type %1 must have the same simple type as its base class %2. QtXmlPatternsDer komplexe Typ %1 einfachen Inhalts darf nicht vom komplexen Basistyp %2 abgeleitet werden.PComplex type %1 with simple content cannot be derived from complex base type %2. QtXmlPatternsDer komplexe Typ des abgeleiteten Elements %1 kann nicht vom Basiselement abgeleitet werden.OComplex type of derived element %1 cannot be validly derived from base element. QtXmlPatternsrEs wurde bereits eine Komponente mit der ID %1 definiert.1Component with ID %1 has been defined previously. QtXmlPatterns6Das Inhaltsmodell des komplexen Typs %1enthlt ein Element '%2'; es kann daher nicht durch Erweiterung von einem Typ abgeleitet werden, der nicht leer ist.pContent model of complex type %1 contains %2 element so it cannot be derived by extension from a non-empty type. QtXmlPatternsDas Inhaltsmodell des komplexen Typs %1 ist keine gltige Erweiterung des Inhaltsmodells von %2.QContent model of complex type %1 is not a valid extension of content model of %2. QtXmlPatternsDer Inhalt des Attributs %1 des Elements %2 kann nicht vom Namensraum %3 stammen.DContent of %1 attribute of %2 element must not be from namespace %3. QtXmlPatternsDer Inhalt des Attributs %1 entspricht nicht der definierten Einschrnkung des Werts.@Content of attribute %1 does not match defined value constraint. QtXmlPatternsDer Inhalt des Attributs %1 entspricht nicht seiner Typdefinition: %2.?Content of attribute %1 does not match its type definition: %2. QtXmlPatternsDer Inhalt des Elements %1 entspricht nicht der definierten Einschrnkung des Werts.>Content of element %1 does not match defined value constraint. QtXmlPatternsDer Inhalt des Elements %1 entspricht nicht seiner Typdefinition: %2.=Content of element %1 does not match its type definition: %2. QtXmlPatternsPDaten vom Typ %1 knnen nicht leer sein.,Data of type %1 are not allowed to be empty. QtXmlPatternspDie Datumsangabe entspricht nicht der Suchmusterfacette./Date time content does not match pattern facet. QtXmlPatternszDie Datumsangabe entspricht nicht der Facette 'maxExclusive'.8Date time content does not match the maxExclusive facet. QtXmlPatternszDie Datumsangabe entspricht nicht der Facette 'maxInclusive'.8Date time content does not match the maxInclusive facet. QtXmlPatternszDie Datumsangabe entspricht nicht der Facette 'minExclusive'.8Date time content does not match the minExclusive facet. QtXmlPatternszDie Datumsangabe entspricht nicht der Facette 'minInclusive'.8Date time content does not match the minInclusive facet. QtXmlPatterns~Die Datumsangabe ist nicht in der Aufzhlungsfacette enthalten.9Date time content is not listed in the enumeration facet. QtXmlPatternsbDie Tagesangabe %1 ist fr den Monat %2 ungltig.Day %1 is invalid for month %2. QtXmlPatternslDie Tagesangabe %1 ist auerhalb des Bereiches %2..%3.#Day %1 is outside the range %2..%3. QtXmlPatternszDie Dezimalzahl entspricht nicht der Facette 'fractionDigit'.;Decimal content does not match in the fractionDigits facet. QtXmlPatternsvDie Dezimalzahl entspricht nicht der Facette 'totalDigits'.8Decimal content does not match in the totalDigits facet. QtXmlPatternshFr das Attribut %1 ist keine Deklaration verfgbar.,Declaration for attribute %1 does not exist. QtXmlPatternsfFr das Element %1 ist keine Deklaration verfgbar.*Declaration for element %1 does not exist. QtXmlPatternsErweiterung muss als Vererbungsmethode fr %1 verwendet werden, da der Basistyp %2 ein einfacher Typ ist.TDerivation method of %1 must be extension because the base type %2 is a simple type. QtXmlPatternsDas abgeleitete Attribut %1 existiert in der Basisdefinition nicht.;Derived attribute %1 does not exist in the base definition. QtXmlPatternsDas abgeleitete Attribut %1 entspricht nicht dem Suchmuster in der Basisdefinition.HDerived attribute %1 does not match the wildcard in the base definition. QtXmlPatternsDie abgeleitete Definition enthlt ein Element %1, was in der Basisdefinition nicht existiertUDerived definition contains an %1 element that does not exists in the base definition QtXmlPatternsDas abgeleitete Element %1 kann kein 'nillable'-Attribut haben, da das Basiselement keines spezifiziert.FDerived element %1 cannot be nillable as base element is not nillable. QtXmlPatternsDas abgeleitete Element %1 hat eine schwchere Einschrnkung des Wertes als der Basispartikel.BDerived element %1 has weaker value constraint than base particle. QtXmlPatternsIm abgeleiteten Element %1 fehlt Einschrnkung des Wertes, wie sie im Basispartikel definiert ist.KDerived element %1 is missing value constraint as defined in base particle. QtXmlPatternsDer abgeleitete Partikel gestattet Inhalt, der fr den Basispartikel nicht zulssig ist.IDerived particle allows content that is not allowed in the base particle. QtXmlPatterns\Das Element %1 fehlt im abgeleiteten Partikel.'Derived particle is missing element %1. QtXmlPatternsDas abgeleitete Suchmuster ist keine Untermenge des Basissuchmusters.6Derived wildcard is not a subset of the base wildcard. QtXmlPatternsDie Division eines Werts des Typs %1 durch %2 (kein numerischer Wert) ist nicht zulssig.@Dividing a value of type %1 by %2 (not-a-number) is not allowed. QtXmlPatternsDie Division eines Werts des Typs %1 durch %2 oder %3 (positiv oder negativ Null) ist nicht zulssig.LDividing a value of type %1 by %2 or %3 (plus or minus zero) is not allowed. QtXmlPatternslDie Division (%1) durch Null (%2) ist nicht definiert.(Division (%1) by zero (%2) is undefined. QtXmlPatternsBDas Dokument ist kein XML-Schema.Document is not a XML schema. QtXmlPatternstDie Gleitkommazahl entspricht nicht der Suchmusterfacette.,Double content does not match pattern facet. QtXmlPatterns~Die Gleitkommazahl entspricht nicht der Facette 'maxExclusive'.5Double content does not match the maxExclusive facet. QtXmlPatterns~Die Gleitkommazahl entspricht nicht der Facette 'maxInclusive'.5Double content does not match the maxInclusive facet. QtXmlPatterns~Die Gleitkommazahl entspricht nicht der Facette 'minExclusive'.5Double content does not match the minExclusive facet. QtXmlPatterns~Die Gleitkommazahl entspricht nicht der Facette 'minInclusive'.5Double content does not match the minInclusive facet. QtXmlPatternsDie Gleitkommazahl ist nicht in der Aufzhlungsfacette enthalten.6Double content is not listed in the enumeration facet. QtXmlPatternshDer Elementname %1 kommt im Element %2 mehrfach vor.*Duplicated element names %1 in %2 element. QtXmlPatternsbIm einfachen Typ %1 kommen Facetten mehrfach vor.$Duplicated facets in simple type %1. QtXmlPatternsDie Angabe der Zeitdauer entspricht nicht der Suchmusterfacette..Duration content does not match pattern facet. QtXmlPatternsDie Angabe der Zeitdauer entspricht nicht der Facette 'maxExclusive'.7Duration content does not match the maxExclusive facet. QtXmlPatternsDie Angabe der Zeitdauer entspricht nicht der Facette 'maxInclusive'.7Duration content does not match the maxInclusive facet. QtXmlPatternsDie Angabe der Zeitdauer entspricht nicht der Facette 'minExclusive'.7Duration content does not match the minExclusive facet. QtXmlPatternsDie Angabe der Zeitdauer entspricht nicht der Facette 'minInclusive'.7Duration content does not match the minInclusive facet. QtXmlPatternsDie Angabe der Zeitdauer ist nicht in der Aufzhlungsfacette enthalten.8Duration content is not listed in the enumeration facet. QtXmlPatternsDie Namen von Vorlagenparametern mssen eindeutig sein, %1 existiert bereits.CEach name of a template parameter must be unique; %1 is duplicated. QtXmlPatternsDer effektive Boolesche Wert einer Sequenz aus zwei oder mehreren atomaren Werten kann nicht berechnet werden.aEffective Boolean Value cannot be calculated for a sequence containing two or more atomic values. QtXmlPatternsJDas Element %1 ist bereits definiert.Element %1 already defined. QtXmlPatternsDas Element %1 kann nicht serialisiert werden, da es auerhalb des Dokumentenelements erscheint.OElement %1 can't be serialized because it appears outside the document element. QtXmlPatternsDas Element %1 kann keine anderen Element enthalten, da sein Inhalt festgelegt ist.DElement %1 cannot contain other elements, as it has a fixed content. QtXmlPatternshDas Element %1 kann keinen Sequenzkonstruktor haben..Element %1 cannot have a sequence constructor. QtXmlPatternsZDas Element %1 kann keine Kindelemente haben. Element %1 cannot have children. QtXmlPatternsRDas Element %1 enthlt ungltigen Inhalt.$Element %1 contains invalid content. QtXmlPatternsZDas Element %1 enthlt unzulssige Attribute.+Element %1 contains not allowed attributes. QtXmlPatterns`Das Element %1 enthlt unzulssigen Unterinhalt..Element %1 contains not allowed child content. QtXmlPatternsjDas Element %1 enthlt ein unzulssiges Unterelement..Element %1 contains not allowed child element. QtXmlPatterns^Das Element %1 enthlt unzulssigen Textinhalt.-Element %1 contains not allowed text content. QtXmlPatternsdDas Element %1 enthlt zwei Attribute des Typs %2..Element %1 contains two attributes of type %2. QtXmlPatternsfDas Element %1 enthlt ein unbekanntes Attribut %2.)Element %1 contains unknown attribute %2. QtXmlPatternsDas Element %1 entspricht nicht der Namensraumeinschrnkung des Basispartikels.LElement %1 does not match namespace constraint of wildcard in base particle. QtXmlPatternsEs existieren zwei Vorkommen verschiedenen Typs des Elements %1.-Element %1 exists twice with different types. QtXmlPatternsVDas Element %1 ist als abstrakt deklariert.#Element %1 is declared as abstract. QtXmlPatternsNBeim Element %1 fehlt ein Unterelement.$Element %1 is missing child element. QtXmlPatterns\Das Element %1 fehlt im abgeleiteten Partikel.*Element %1 is missing in derived particle. QtXmlPatternspBei dem Element %1 fehlt ein erforderliches Attribut %2.,Element %1 is missing required attribute %2. QtXmlPatternsdDas Element %1 darf nicht an dieser Stelle stehen.+Element %1 is not allowed at this location. QtXmlPatternsDas Element %1 ist in diesem Bereich nicht zulssig; mglich wren: %2.CElement %1 is not allowed in this scope, possible elements are: %2. QtXmlPatternsDas Element %1 darf keine Einschrnkung des Werts haben, wenn der Basistyp komplex ist.QElement %1 is not allowed to have a value constraint if its base type is complex. QtXmlPatternsDas Element %1 darf keine Einschrnkung des Werts haben, wenn sein Typ von %2 abgeleitet ist.TElement %1 is not allowed to have a value constraint if its type is derived from %2. QtXmlPatternsDas Element %1 kann nicht zu einer Substitutionsgruppe gehren, da es kein globales Element ist.\Element %1 is not allowed to have substitution group affiliation as it is no global element. QtXmlPatternsjDas Element %1 ist in diesem Bereich nicht definiert.(Element %1 is not defined in this scope. QtXmlPatterns|Das Element %1 hat das Attribut 'nillable' nicht spezifiziert.Element %1 is not nillable. QtXmlPatternsFDas Element %1 muss zuletzt stehen.Element %1 must come last. QtXmlPatternsDas Element %1 muss mindestens eines der Attribute %2 oder %3 haben.=Element %1 must have at least one of the attributes %2 or %3. QtXmlPatternsDas Element %1 muss entweder ein %2-Attribut haben oder es muss ein Sequenzkonstruktor verwendet werden.EElement %1 must have either a %2-attribute or a sequence constructor. QtXmlPatternstDas Element hat Inhalt, obwohl es 'nillable' spezifiziert.1Element contains content although it is nillable. QtXmlPatternsVDie Elementgruppe %1 ist bereits definiert.!Element group %1 already defined. QtXmlPatternsEs kann kein leerer Partikel von einem Partikel abgeleitet werden, der nicht leer ist.9Empty particle cannot be derived from non-empty particle. QtXmlPatternsUngltiger Inhalt einer Aufzhlungsfacette: {%1} ist kein Wert des Typs %2.KEnumeration facet contains invalid content: {%1} is not a value of type %2. QtXmlPatternsJDas Feld %1 hat keinen einfachen Typ.Field %1 has no simple type. QtXmlPatternsEine Beschrnkung auf einen festen Wert ist nicht zulssig, wenn das Element 'nillable' spezifiziert.:Fixed value constraint not allowed if element is nillable. QtXmlPatternsDie feste Einschrnkung des Wertes des Elements %1 unterscheidet sich von der Einschrnkung des Wertes des Basispartikels.TFixed value constraint of element %1 differs from value constraint in base particle. QtXmlPatternsJDer ID-Wert '%1' ist nicht eindeutig.ID value '%1' is not unique. QtXmlPatternsjDie Identittseinschrnkung %1 ist bereits definiert.'Identity constraint %1 already defined. QtXmlPatternsWenn beide Werte mit Zeitzonen angegeben werden, mssen diese bereinstimmen. %1 und %2 sind daher unzulssig.bIf both values have zone offsets, they must have the same zone offset. %1 and %2 are not the same. QtXmlPatternsDas Element %1 darf keines der Attribute %3 oder %4 haben, solange es nicht das Attribut %2 hat.EIf element %1 has no attribute %2, it cannot have attribute %3 or %4. QtXmlPatterns0Es kann kein Prfix angegeben werden, wenn das erste Argument leer oder eine leere Zeichenkette (kein Namensraum) ist. Es wurde der Prfix %1 angegeben.If the first argument is the empty sequence or a zero-length string (no namespace), a prefix cannot be specified. Prefix %1 was specified. QtXmlPatternsIm Konstruktor eines Namensraums darf der Wert des Namensraumes keine leere Zeichenkette sein.PIn a namespace constructor, the value for a namespace cannot be an empty string. QtXmlPatternsIn einem vereinfachten Stylesheet-Modul muss das Attribut %1 vorhanden sein.@In a simplified stylesheet module, attribute %1 must be present. QtXmlPatternsBei einem XSL-T-Suchmuster drfen nur die Achsen %2 oder %3 verwendet werden, nicht jedoch %1.DIn an XSL-T pattern, axis %1 cannot be used, only axis %2 or %3 can. QtXmlPatternsBei einem XSL-T-Suchmuster darf die Funktion %1 kein drittes Argument haben.>In an XSL-T pattern, function %1 cannot have a third argument. QtXmlPatternsBei einem XSL-T-Suchmuster drfen nur die Funktionen %1 und %2, nicht jedoch %3 zur Suche verwendet werden.OIn an XSL-T pattern, only function %1 and %2, not %3, can be used for matching. QtXmlPatternsBei einem XSL-T-Suchmuster muss das erste Argument zur Funktion %1 bei der Verwendung zur Suche ein Literal oder eine Variablenreferenz sein.yIn an XSL-T pattern, the first argument to function %1 must be a literal or a variable reference, when used for matching. QtXmlPatternsBei einem XSL-T-Suchmuster muss das erste Argument zur Funktion %1 bei der Verwendung zur Suche ein Zeichenketten-Literal sein.hIn an XSL-T pattern, the first argument to function %1 must be a string literal, when used for matching. QtXmlPatternsIn der Ersetzung kann %1 nur verwendet werden, um sich selbst oder %2 schtzen, nicht jedoch fr %3MIn the replacement string, %1 can only be used to escape itself or %2, not %3 QtXmlPatternsIn der Ersetzung muss auf %1 eine Ziffer folgen, wenn es nicht durch ein Escape-Zeichen geschtzt ist.VIn the replacement string, %1 must be followed by at least one digit when not escaped. QtXmlPatterns|Die Ganzzahldivision (%1) durch Null (%2) ist nicht definiert.0Integer division (%1) by zero (%2) is undefined. QtXmlPatternslDer Inhalt des qualifizierten Namens ist ungltig: %1.Invalid QName content: %1. QtXmlPatternsPDer Prfix %1 kann nicht gebunden werden+It is not possible to bind to the prefix %1 QtXmlPatternsZDer Prfix %1 kann nicht redeklariert werden.*It is not possible to redeclare prefix %1. QtXmlPatterns<%1 kann nicht bestimmt werden.'It will not be possible to retrieve %1. QtXmlPatterns`Attribute drfen nicht auf andere Knoten folgen.AIt's not possible to add attributes after any other kind of node. QtXmlPatternstDer Subtyp %1 des Elements %2 kann nicht aufgelst werden..Item type %1 of %2 element cannot be resolved. QtXmlPatternsDer Elementtyp des Basistyps entspricht nicht dem Elementtyp von %1.6Item type of base type does not match item type of %1. QtXmlPatternsDer Elementtyp des einfachen Typs %1 kann kein komplexer Typ sein.5Item type of simple type %1 cannot be a complex type. QtXmlPatternsDie Einschrnkung des Schlssels %1 enthlt nicht vorhandene Felder.)Key constraint %1 contains absent fields. QtXmlPatternsDie Einschrnkung des Schlssels %1 verweist auf das Element %2, was 'nillable' spezifiziert.:Key constraint %1 contains references nillable element %2. QtXmlPatternshDer Listeninhalt entspricht nicht der Lngenfacette.)List content does not match length facet. QtXmlPatternstDer Listeninhalt entspricht nicht der Facette 'maxLength'.,List content does not match maxLength facet. QtXmlPatternstDer Listeninhalt entspricht nicht der Facette 'minLength'.,List content does not match minLength facet. QtXmlPatternspDer Listeninhalt entspricht nicht der Suchmusterfacette.*List content does not match pattern facet. QtXmlPatterns~Der Listeninhalt ist nicht in der Aufzhlungsfacette enthalten.4List content is not listed in the enumeration facet. QtXmlPatternsBDas geladene Schema ist ungltig.Loaded schema file is invalid. QtXmlPatternsPGro/Kleinschreibung wird nicht beachtetMatches are case insensitive QtXmlPatternsDer Typ %1 des Mitglieds darf nicht vom Typ %2 des Mitglieds vom Basistyp %4 von %3 sein.JMember type %1 cannot be derived from member type %2 of %3's base type %4. QtXmlPatternstDer Subtyp %1 des Elements %2 kann nicht aufgelst werden.0Member type %1 of %2 element cannot be resolved. QtXmlPatternsDer Typ eines Mitglieds des einfachen Typs %1 kann kein komplexer Typ sein.7Member type of simple type %1 cannot be a complex type. QtXmlPatternsModul-Importe mssen vor Funktions-, Variablen- oder Optionsdeklarationen stehen.MModule imports must occur before function, variable, and option declarations. QtXmlPatternszDie Modulo-Division (%1) durch Null (%2) ist nicht definiert.0Modulus division (%1) by zero (%2) is undefined. QtXmlPatternsnDie Monatsangabe %1 ist auerhalb des Bereiches %2..%3.%Month %1 is outside the range %2..%3. QtXmlPatterns\Fr das Feld %1 wurden mehrere Werte gefunden.'More than one value found for field %1. QtXmlPatternsDie Multiplikation eines Werts des Typs %1 mit %2 oder %3 (positiv oder negativ unendlich) ist nicht zulssig.YMultiplication of a value of type %1 by %2 or %3 (plus or minus infinity) is not allowed. QtXmlPatternsDer Namensraum %1 kann nur an %2 gebunden werden. Dies ist bereits vordeklariert.ONamespace %1 can only be bound to %2 (and it is, in either case, pre-declared). QtXmlPatternsNamensraums-Deklarationen mssen vor Funktions- Variablen- oder Optionsdeklarationen stehen.UNamespace declarations must occur before function, variable, and option declarations. QtXmlPatternsDer Namensraum-Prfix des qualifizierten Namens %1 ist nicht definiert.5Namespace prefix of qualified name %1 is not defined. QtXmlPatternspDas Zeitlimit der Netzwerkoperation wurde berschritten.Network timeout. QtXmlPatternsdFr das Element %1 ist keine Definition verfgbar.'No definition for element %1 available. QtXmlPatternsExterne Funktionen werden nicht untersttzt. Alle untersttzten Funktionen knnen direkt verwendet werden, ohne sie als extern zu deklarieren{No external functions are supported. All supported functions can be used directly, without first declaring them as external QtXmlPatterns\Es ist keine Funktion des Namens %1 verfgbar.&No function with name %1 is available. QtXmlPatterns^Es existiert keine Funktion mit der Signatur %1*No function with signature %1 is available QtXmlPatternsnEs existiert keine Namensraum-Bindung fr den Prfix %1-No namespace binding exists for the prefix %1 QtXmlPatternszEs existiert keine Namensraum-Bindung fr den Prfix %1 in %23No namespace binding exists for the prefix %1 in %2 QtXmlPatternsDer referenzierte Wert der Schlsselreferenz %1 konnte nicht gefunden werden./No referenced value found for key reference %1. QtXmlPatternsbEs ist kein Schema fr die Validierung definiert.!No schema defined for validation. QtXmlPatternsXEs existiert keine Vorlage mit dem Namen %1.No template by name %1 exists. QtXmlPatternsEs ist kein Wert fr die externe Variable des Namens %1 verfgbar.=No value is available for the external variable with name %1. QtXmlPatternsREs existiert keine Variable des Namens %1No variable with name %1 exists QtXmlPatternsFr die Einschrnkung %1 wurde ein nicht eindeutiger Wert gefunden.)Non-unique value found for constraint %1. QtXmlPatternsEs muss ein fallback-Ausdruck vorhanden sein, da keine pragma-Ausdrcke untersttzt werden^None of the pragma expressions are supported. Therefore, a fallback expression must be present QtXmlPatternsLDie Notation %1 ist bereits definiert.Notation %1 already defined. QtXmlPatternsDer Inhalt der Notation ist nicht in der Aufzhlungsfacette enthalten.8Notation content is not listed in the enumeration facet. QtXmlPatternsBei Vererbung durch Vereinigung sind nur die Facetten %1 und %2 zulssig.8Only %1 and %2 facets are allowed when derived by union. QtXmlPatternstDer Anfrage-Prolog darf nur eine %1-Deklaration enthalten.6Only one %1 declaration can occur in the query prolog. QtXmlPatternsVEs darf nur ein einziges %1-Element stehen.Only one %1-element can appear. QtXmlPatternsEs wird nur Unicode Codepoint Collation untersttzt (%1). %2 wird nicht untersttzt.IOnly the Unicode Codepoint Collation is supported(%1). %2 is unsupported. QtXmlPatternszAn %2 kann nur der Prfix %1 gebunden werden (und umgekehrt).5Only the prefix %1 can be bound to %2 and vice versa. QtXmlPatternsDer Operator %1 kann nicht auf atomare Werte der Typen %2 und %3 angewandt werden.>Operator %1 cannot be used on atomic values of type %2 and %3. QtXmlPatternsvDer Operator %1 kann nicht auf den Typ %2 angewandt werden.&Operator %1 cannot be used on type %2. QtXmlPatternslDas Datum %1 kann nicht dargestellt werden (berlauf)."Overflow: Can't represent date %1. QtXmlPatternsfDas Datum kann nicht dargestellt werden (berlauf).$Overflow: Date can't be represented. QtXmlPatterns Parse-Fehler: %1Parse error: %1 QtXmlPatternsnDer Partikel enthlt nicht-deterministische Suchmuster..Particle contains non-deterministic wildcards. QtXmlPatternsDer Prfix %1 kann nur an %2 gebunden werden. Dies ist bereits vordeklariert.LPrefix %1 can only be bound to %2 (and it is, in either case, pre-declared). QtXmlPatternsbDer Prfix %1 wurde bereits im Prolog deklariert.,Prefix %1 is already declared in the prolog. QtXmlPatternsxDer Prfix des qualifizierten Namens %1 ist nicht definiert.+Prefix of qualified name %1 is not defined. QtXmlPatternsDie Wandlung von %1 zu %2 kann zu einem Verlust an Genauigkeit fhren./Promoting %1 to %2 may cause loss of precision. QtXmlPatternsDer Inhalt des qualifizierten Namens entspricht nicht der Suchmusterfacette.+QName content does not match pattern facet. QtXmlPatternsDer Inhalt des qualifizierten Namens ist nicht in der Aufzhlungsfacette enthalten.5QName content is not listed in the enumeration facet. QtXmlPatternsvDer Verweis %1 des Elements %2 kann nicht aufgelst werden..Reference %1 of %2 element cannot be resolved. QtXmlPatternsnDie erforderliche Kardinalitt ist %1 (gegenwrtig %2)./Required cardinality is %1; got cardinality %2. QtXmlPatternsrDer erforderliche Typ ist %1, es wurde aber %2 angegeben.&Required type is %1, but %2 was found. QtXmlPatternsEs wird ein XSL-T-1.0-Stylesheet mit einem Prozessor der Version 2.0 verarbeitet.5Running an XSL-T 1.0 stylesheet with a 2.0 processor. QtXmlPatternsDer vorzeichenbehaftete Ganzzahlwert entspricht nicht der Facette 'totalDigits'.?Signed integer content does not match in the totalDigits facet. QtXmlPatternsDer vorzeichenbehaftete Ganzzahlwert entspricht nicht der Suchmusterfacette.4Signed integer content does not match pattern facet. QtXmlPatternsDer vorzeichenbehaftete Ganzzahlwert entspricht nicht der Facette 'maxExclusive'.=Signed integer content does not match the maxExclusive facet. QtXmlPatternsDer vorzeichenbehaftete Ganzzahlwert entspricht nicht der Facette 'maxInclusive'.=Signed integer content does not match the maxInclusive facet. QtXmlPatternsDer vorzeichenbehaftete Ganzzahlwert entspricht nicht der Facette 'minExclusive'.=Signed integer content does not match the minExclusive facet. QtXmlPatternsDer vorzeichenbehaftete Ganzzahlwert entspricht nicht der Facette 'minInclusive'.=Signed integer content does not match the minInclusive facet. QtXmlPatternsDer vorzeichenbehaftete Ganzzahlwert ist nicht in der Aufzhlungsfacette enthalten.>Signed integer content is not listed in the enumeration facet. QtXmlPatternsDer einfache Typ %1 kann nur einen einfachen. atomaren Basistyp haben.=Simple type %1 can only have simple atomic type as base type. QtXmlPatterns%1 darf nicht von %2 abgeleitet werden, da letzterer die Einschrnkung als final deklariert.PSimple type %1 cannot derive from %2 as the latter defines restriction as final. QtXmlPatternsDer einfache Typ %1 kann nicht den unmittelbaren Basistyp %2 haben./Simple type %1 cannot have direct base type %2. QtXmlPatternsDer einfache Typ %1 enthlt einen nicht erlaubten Facettentyp %2.2Simple type %1 contains not allowed facet type %2. QtXmlPatternsjDer einfache Typ %1 darf nicht den Basistyp %2 haben.3Simple type %1 is not allowed to have base type %2. QtXmlPatternsdDer einfache Typ %1 darf nur die Facette %2 haben.0Simple type %1 is only allowed to have %2 facet. QtXmlPatternsjDer einfache Typ enthlt eine unzulssige Facette %1.*Simple type contains not allowed facet %1. QtXmlPatternsDer einfache Typ des abgeleiteten Elements %1 kann nicht vom Basiselement abgeleitet werden.NSimple type of derived element %1 cannot be validly derived from base element. QtXmlPatternsnDer angegebene Typ %1 ist im Schema nicht spezifiziert.-Specified type %1 is not known to the schema. QtXmlPatternsDer angebenene Typ %1 kann nicht durch den Elementtyp %2 substituiert werden.DSpecified type %1 is not validly substitutable with element type %2. QtXmlPatternsDie Angabe von use='prohibited' in einer Attributgruppe hat keinerlei Auswirkungen.DSpecifying use='prohibited' inside an attribute group has no effect. QtXmlPatterns~Der Zeichenketteninhalt entspricht nicht der Suchmusterfacette.,String content does not match pattern facet. QtXmlPatternsvDer Zeichenketteninhalt entspricht nicht der Lngenfacette./String content does not match the length facet. QtXmlPatternsDer Zeichenketteninhalt entspricht nicht der Lngenfacette (Maximumangabe).2String content does not match the maxLength facet. QtXmlPatternsDer Zeichenketteninhalt entspricht nicht der Lngenfacette (Minimumangabe).2String content does not match the minLength facet. QtXmlPatternsDer Zeichenketteninhalt ist nicht in der Aufzhlungsfacette enthalten.6String content is not listed in the enumeration facet. QtXmlPatternsrDie Substitutionsgruppe %1 hat eine zirkulre Definition..Substitution group %1 has circular definition. QtXmlPatternsDie Substitutionsgruppe %1 des Elements %2 kann nicht aufgelst werden.7Substitution group %1 of %2 element cannot be resolved. QtXmlPatternsDer Zielnamensraum %1 des importierten Schemas unterscheidet sich vom dem von ihm definierten Zielnamensraum %2.tTarget namespace %1 of imported schema is different from the target namespace %2 as defined by the importing schema. QtXmlPatternsDer Zielnamensraum %1 des eingebundenen Schemas unterscheidet sich vom dem von ihm definierten Zielnamensraum %2.tTarget namespace %1 of included schema is different from the target namespace %2 as defined by the including schema. QtXmlPatterns`An dieser Stelle drfen keine Textknoten stehen.,Text nodes are not allowed at this location. QtXmlPatternsText- oder Entittsreferenzen sind innerhalb eines %1-Elements nicht zulssig.7Text or entity references not allowed inside %1 element QtXmlPatternsZDie %1-Achse wird in XQuery nicht untersttzt$The %1-axis is unsupported in XQuery QtXmlPatternsDie Deklaration %1 ist unzulssig, da Schema-Import nicht untersttzt wird.WThe Schema Import feature is not supported, and therefore %1 declarations cannot occur. QtXmlPatterns%1-Ausdrcke knnen nicht verwendet werden, da Schemavalidierung nicht untersttzt wird. VThe Schema Validation Feature is not supported. Hence, %1-expressions may not be used. QtXmlPatternsJDer URI darf kein Fragment enthalten.The URI cannot have a fragment QtXmlPatternshNur das erste %2-Element darf das Attribut %1 haben.9The attribute %1 can only appear on the first %2 element. QtXmlPatterns%2 darf nicht das Attribut %1 haben, wenn es ein Kindelement von %3 ist.?The attribute %1 cannot appear on %2, when it is a child of %3. QtXmlPatternsDer Code-Punkt %1 aus %2 mit Encoding %3 ist kein gltiges XML-Zeichen.QThe codepoint %1, occurring in %2 using encoding %3, is an invalid XML character. QtXmlPatternsDie Daten einer Processing-Anweisung drfen nicht die Zeichenkette %1 enthaltenAThe data of a processing instruction cannot contain the string %1 QtXmlPatterns^Fr eine Kollektion ist keine Vorgabe definiert#The default collection is undefined QtXmlPatternsDie Kodierung %1 ist ungltig; sie darf nur aus lateinischen Buchstaben bestehen und muss dem regulren Ausdruck %2 entsprechen.The encoding %1 is invalid. It must contain Latin characters only, must not contain whitespace, and must match the regular expression %2. QtXmlPatternsDas erste Argument von %1 darf nicht vom Typ %2 sein; es muss numerisch, xs:yearMonthDuration oder xs:dayTimeDuration sein.uThe first argument to %1 cannot be of type %2. It must be a numeric type, xs:yearMonthDuration or xs:dayTimeDuration. QtXmlPatternsDas erste Argument von %1 kann nicht vom Typ %2 sein, es muss einer der Typen %3, %4 oder %5 sein.PThe first argument to %1 cannot be of type %2. It must be of type %3, %4, or %5. QtXmlPatterns8Es ist kein Fokus definiert.The focus is undefined. QtXmlPatternsDie Initialisierung der Variable %1 hngt von ihrem eigenem Wert ab3The initialization of variable %1 depends on itself QtXmlPatternstDas Element %1 entspricht nicht dem erforderlichen Typ %2./The item %1 did not match the required type %2. QtXmlPatternsDas Schlsselwort %1 kann nicht mit einem anderen Modusnamen zusammen verwendet werden.5The keyword %1 cannot occur with any other mode name. QtXmlPatternsDer letzte Schritt eines Pfades kann entweder nur Knoten oder nur atomare Werte enthalten. Sie drfen nicht zusammen auftreten.kThe last step in a path must contain either nodes or atomic values. It cannot be a mixture between the two. QtXmlPatternsFModul-Import wird nicht untersttzt*The module import feature is not supported QtXmlPatterns`Der Name %1 hat keinen Bezug zu einem Schematyp..The name %1 does not refer to any schema type. QtXmlPatternsDer Name eines berechneten Attributes darf keinen Namensraum-URI %1 mit dem lokalen Namen %2 haben.ZThe name for a computed attribute cannot have the namespace URI %1 with the local name %2. QtXmlPatternsHDer Name der gebundenen Variablen eines for-Ausdrucks muss sich von dem der Positionsvariable unterscheiden. Die zwei Variablen mit dem Namen %1 stehen im Konflikt.The name of a variable bound in a for-expression must be different from the positional variable. Hence, the two variables named %1 collide. QtXmlPatternsDer Name eines Erweiterungsausdrucks muss sich in einem Namensraum befinden.;The name of an extension expression must be in a namespace. QtXmlPatternsDer Name einer Option muss einen Prfix haben. Es gibt keine Namensraum-Vorgabe fr Optionen.TThe name of an option must have a prefix. There is no default namespace for options. QtXmlPatterns@Der Namensraum %1 ist reserviert und kann daher von nutzerdefinierten Funktionen nicht verwendet werden (fr diesen Zweck gibt es den vordefinierten Prfix %2).The namespace %1 is reserved; therefore user defined functions may not use it. Try the predefined prefix %2, which exists for these cases. QtXmlPatternsDer Namensraum-URI darf nicht leer sein, wenn er an den Prfix %1 gebunden ist.JThe namespace URI cannot be the empty string when binding to a prefix, %1. QtXmlPatternsDer Namensraum-URI im Namen eines berechneten Attributes darf nicht %1 sein.DThe namespace URI in the name for a computed attribute cannot be %1. QtXmlPatternsEin Namensraum-URI muss eine Konstante sein und darf keine eingebetteten Ausdrcke verwenden.IThe namespace URI must be a constant and cannot use enclosed expressions. QtXmlPatternsDer Namensraum einer benutzerdefinierten Funktion darf nicht leer sein (fr diesen Zweck gibt es den vordefinierten Prfix %1)yThe namespace for a user defined function cannot be empty (try the predefined prefix %1 which exists for cases like this) QtXmlPatterns Der Namensraum einer nutzerdefinierten Funktion aus einem Bibliotheksmodul muss dem Namensraum des Moduls entsprechen (%1 anstatt %2) The namespace of a user defined function in a library module must be equivalent to the module namespace. In other words, it should be %1 instead of %2 QtXmlPatternsrDie Normalisierungsform %1 wird nicht untersttzt. Die untersttzten Normalisierungsformen sind %2, %3, %4 and %5, und "kein" (eine leere Zeichenkette steht fr "keine Normalisierung").The normalization form %1 is unsupported. The supported forms are %2, %3, %4, and %5, and none, i.e. the empty string (no normalization). QtXmlPatternsEs existiert kein entsprechendes %2 fr den bergebenen Parameter %1.;The parameter %1 is passed, but no corresponding %2 exists. QtXmlPatternsEs wurde kein entsprechendes %2 fr den erforderlichen Parameter %1 angegeben.BThe parameter %1 is required, but no corresponding %2 is supplied. QtXmlPatternsPDer Prfix %1 kann nicht gebunden werdenThe prefix %1 cannot be bound. QtXmlPatternsDer Prfix %1 kann nicht gebunden werden. Er ist bereits per Vorgabe an den Namensraum %2 gebunden.SThe prefix %1 cannot be bound. By default, it is already bound to the namespace %2. QtXmlPatternsDer Prfix muss ein gltiger %1 sein. Das ist bei %2 nicht der Fall./The prefix must be a valid %1, which %2 is not. QtXmlPatternsDer bergeordnete Knoten des zweiten Arguments der Funktion %1 muss ein Dokumentknoten sein, was bei %2 nicht der Fall ist.gThe root node of the second argument to function %1 must be a document node. %2 is not a document node. QtXmlPatternsDas zweite Argument von %1 kann nicht vom Typ %2 sein, es muss einer der Typen %3, %4 oder %5 sein.QThe second argument to %1 cannot be of type %2. It must be of type %3, %4, or %5. QtXmlPatternsDer Zielname einer Processing-Anweisung kann nicht %1 (unabhngig von Gro/Kleinschreibung sein). %2 ist daher ungltig.~The target name in a processing instruction cannot be %1 in any combination of upper and lower case. Therefore, %2 is invalid. QtXmlPatterns`Der Ziel-Namensraum von %1 darf nicht leer sein.-The target namespace of a %1 cannot be empty. QtXmlPatternsDer Wert des Attributs %1 des Elements %2 kann nur %3 oder %4 sein, nicht jedoch %5.IThe value for attribute %1 on element %2 must either be %3 or %4, not %5. QtXmlPatternsDer Wert des Attributs %1 muss vom Typ %2 sein, was bei %3 nicht der Fall ist.=The value of attribute %1 must be of type %2, which %3 isn't. QtXmlPatternsDer Wert eines XSL-T-Versionsattributes muss vom Typ %1 sein, was bei %2 nicht der Fall ist.TThe value of the XSL-T version attribute must be a value of type %1, which %2 isn't. QtXmlPatternsHDie Variable %1 wird nicht verwendetThe variable %1 is unused QtXmlPatternsEs existiert ein IDREF-Wert, fr den keine zugehrige ID vorhanden ist: %1.6There is one IDREF value with no corresponding ID: %1. QtXmlPatterns%1 kann nicht verwendet werden, da dieser Prozessor keine Schemas untersttzt.CThis processor is not Schema-aware and therefore %1 cannot be used. QtXmlPatternsPDie Zeitangabe %1:%2:%3.%4 ist ungltig.Time %1:%2:%3.%4 is invalid. QtXmlPatternsDie Zeitangabe 24:%1:%2.%3 ist ungltig. Bei der Stundenangabe 24 mssen Minuten, Sekunden und Millisekunden 0 sein._Time 24:%1:%2.%3 is invalid. Hour is 24, but minutes, seconds, and milliseconds are not all 0;  QtXmlPatternsDie zuoberst stehenden Elemente eines Stylesheets drfen sich nicht im Null-Namensraum befinden, was bei %1 der Fall ist.NTop level stylesheet elements must be in a non-null namespace, which %1 isn't. QtXmlPatternsEs wurden zwei Namensraum-Deklarationsattribute gleichen Namens (%1) gefunden.Unbekanntes XSL-T-Attribut: %1.Unknown XSL-T attribute %1. QtXmlPatternsdDie Facette %2 enthlt eine ungltige Notation %1.%Unknown notation %1 used in %2 facet. QtXmlPatternsDer vorzeichenlose Ganzzahlwert entspricht nicht der Facette 'totalDigits'.AUnsigned integer content does not match in the totalDigits facet. QtXmlPatternsDer vorzeichenlose Ganzzahlwert entspricht nicht der Suchmusterfacette.6Unsigned integer content does not match pattern facet. QtXmlPatternsDer vorzeichenlose Ganzzahlwert entspricht nicht der Facette 'maxExclusive'.?Unsigned integer content does not match the maxExclusive facet. QtXmlPatternsDer vorzeichenlose Ganzzahlwert entspricht nicht der Facette 'maxInclusive'.?Unsigned integer content does not match the maxInclusive facet. QtXmlPatternsDer vorzeichenlose Ganzzahlwert entspricht nicht der Facette 'minExclusive'.?Unsigned integer content does not match the minExclusive facet. QtXmlPatternsDer vorzeichenlose Ganzzahlwert entspricht nicht der Facette 'minInclusive'.?Unsigned integer content does not match the minInclusive facet. QtXmlPatternsDer vorzeichenlose Ganzzahlwert ist nicht in der Aufzhlungsfacette enthalten.@Unsigned integer content is not listed in the enumeration facet. QtXmlPatternsnDer Wert %1 des Typs %2 berschreitet das Maximum (%3).)Value %1 of type %2 exceeds maximum (%3). QtXmlPatternspDer Wert %1 des Typs %2 unterschreitet das Minimum (%3).*Value %1 of type %2 is below minimum (%3). QtXmlPatternsDie Einschrnkung des Werts des Attributs %1 ist nicht vom Typ des Attributs: %2.?Value constraint of attribute %1 is not of attributes type: %2. QtXmlPatternsDie Einschrnkung des Werts des abgeleiteten Attributs %1 entspricht nicht der Einschrnkung des Werts des Basisattributs.[Value constraint of derived attribute %1 does not match value constraint of base attribute. QtXmlPatternsDie Einschrnkung des Werts des Elements %1 ist nicht vom Typ des Elements: %2.;Value constraint of element %1 is not of elements type: %2. QtXmlPatternsDie Variett der Typen von %1 muss entweder atomar oder eine Vereinigung sein.:Variety of item type of %1 must be either atomic or union. QtXmlPatterns^Die Variett der Typen von %1 muss atomar sein.-Variety of member types of %1 must be atomic. QtXmlPatternsDie Version %1 wird nicht untersttzt. Die untersttzte Version von XQuery ist 1.0.AVersion %1 is not supported. The supported XQuery version is 1.0. QtXmlPatternsPW3C XML Schema identity constraint field(W3C XML Schema identity constraint field QtXmlPatternsVW3C XML Schema identity constraint selector+W3C XML Schema identity constraint selector QtXmlPatternsDer Defaultwert eines erforderlichen Parameters kann weder durch ein %1-Attribut noch durch einen Sequenzkonstruktor angegeben werden. rWhen a parameter is required, a default value cannot be supplied through a %1-attribute or a sequence constructor. QtXmlPatternsEs kann kein Sequenzkonstruktor verwendet werden, wenn %2 ein Attribut %1 hat.JWhen attribute %1 is present on %2, a sequence constructor cannot be used. QtXmlPatternsBei einer "cast"-Operation von %1 zu %2 darf der Wert nicht %3 sein.:When casting to %1 from %2, the source value cannot be %3. QtXmlPatternsHBei einer "cast"-Operation zum Typ %1 oder abgeleitetenTypen muss der Quellwert ein Zeichenketten-Literal oder ein Wert gleichen Typs sein. Der Typ %2 ist ungltig.When casting to %1 or types derived from it, the source value must be of the same type, or it must be a string literal. Type %2 is not allowed. QtXmlPatterns6Bei der Verwendung der Funktion %1 zur Auswertung innerhalb eines Suchmusters muss das Argument eine Variablenreferenz oder ein Zeichenketten-Literal sein.vWhen function %1 is used for matching inside a pattern, the argument must be a variable reference or a string literal. QtXmlPatternsLeerzeichen werden entfernt, sofern sie nicht in Zeichenklassen erscheinenOWhitespace characters are removed, except when they appear in character classes QtXmlPatternsDas Suchmuster im abgeleiteten Partikel ist keine gltige Untermenge des Suchmusters des Basispartikels.PWildcard in derived particle is not a valid subset of wildcard in base particle. QtXmlPatternsp%1 ist keine gltige Jahresangabe, da es mit %2 beginnt.-Year %1 is invalid because it begins with %2. QtXmlPatternsleerempty QtXmlPatternsgenau ein exactly one QtXmlPatterns ein oder mehrere one or more QtXmlPatternsDas 'processContent'-Attribut des Basissuchmusters muss schwcher sein als das des abgeleiteten Suchmusters.EprocessContent of base wildcard must be weaker than derived wildcard. QtXmlPatternsDas processContent-Attribut des Suchmusters des abgeleiteten Partikels ist schwcher als das Suchmuster des Basispartikels.XprocessContent of wildcard in derived particle is weaker than wildcard in base particle. QtXmlPatternsxsi:noNamespaceSchemaLocation kann nicht nach dem ersten Element oder Attribut ohne Namensraum erscheinen.^xsi:noNamespaceSchemaLocation cannot appear after the first no-namespace element or attribute. QtXmlPatternsxsi:schemaLocation namespace %1 wurde im Instanzdokument bereits spezifiziert.Vxsi:schemaLocation namespace %1 has already appeared earlier in the instance document. QtXmlPatterns"kein oder mehrere zero or more QtXmlPatternskein oder ein zero or one QtXmlPatternstuxcards/src/translations/translations.qrc000444 000765 000024 00000000173 11420350116 021537 0ustar00alexstaff000000 000000 qt_de.qm tuxcards_de.qm tuxcards/src/translations/tuxcards_de.qm000444 000765 000024 00000047207 11420350116 021164 0ustar00alexstaff000000 000000 R)"@.= d'5 mJ:bH]b.+hjn!@~hnxwBQ@$g'2~*KEpig)yʦ^E;yʓ4$@lw(]-I>Z R $B b1vcP~ sH=zL3qe?.yG%s .(I1TF5+1<6U 8*Y2> /5L9 MN8Nk]k*H`#@`.(e&puuկ7{E^F`<)E$93#֣B `> eC i.GD0BY?:9jlN<6}x. )mnZ}6޼;h߸ ~A>$>?;AbW#Nb?BCqYF \~ 7 ] (%5y 5 G k #' tC A Fp , ~< T 8O A< O ;f| =5 =<HG =8 >s, ~)IE $H U t n 2D /*x  # />d F c+ 2- >" (W=0 3D o9$ p(X t4 *c4 ~ ɍ; ' mi ̙"Z D@ 0^+ 1 A s t_1 7 <3 8) qi D$Q1U9KN/;B?%iu2 j47Xo/5C,J@0B>cG>>t6 7sT.21gˢ2?u326iH:Bilddatei (*.png *.xpm *.jpg)Images (*.png *.xpm *.jpg)CEditorBild einfgen Insert ImageCEditor.Verschlsselter EintragEncrypted EntryCEncryptedEntryViewUm den Inhalt des Eintrages anzuzeigen, geben Sie bitte das<br> entsprechende Passwort ein und besttigen Sie mit RETURN.Die Daten wurden gespeichert inThe data are stored in CMainWindowWerkzeugleistenToolBars CMainWindow$TuxCards - XML I/OTuxCards - XML I/O CMainWindowUnterstrichen Underline CMainWindowWrter zhlen Word Count CMainWindow<nicht als Dateiname verwenden. as file name. CMainWindow4erfolgreich abgeschlossen.finished, successfully. CMainWindowRkonnte nicht gelesen oder geparst werden.for reading or parse error. CMainWindow"nicht erfolgreichnot successfully CMainWindow*Neuen Eintrag anlegen Add new EntryCPropertyDialog(Eigenschaften ndern#Change Properties of existing EntryCPropertyDialog6Untergeordneter Eintrag von Child fromCPropertyDialoglEs wurde kein Name vergeben.\nMchten Sie dies ndern?Eintrag erstellen unterhalb vonCreate entry belowCTree2Aktuellen Eintrag lschenDelete the active EntryCTreeMchten SieDo you really want to deleteCTreeDrag & Drop Drag & DropCTree<Drag & Drop ist nicht mglich.#Drag & Drop operation not possible.CTree>Aktuellen Eintrag verschlsselnEncrypt active EntryCTreeVerschlsselung kann nur von einem verschlsselten Eintrag entfernt werden.9Entry must be decrypted before encryption can be removed.CTreefZum nchsten Eintrag wechseln (Alt + Cursor Rechts)Forward, Next Entry (Alt+Right)CTreePAktuellen Eintrag nach unten verschiebenMove Current Entry DownwardsCTreeNAktuellen Eintrag nach oben verschiebenMove Current Entry UpwardsCTree Verschieben nachMove toCTreeZEs wurde kein Eintrag zum Lschen ausgewhlt.No entry selected.CTree\Es ist kein bergeordneter Eintrag ausgewhlt.No parent entry selected.CTreeTAktuellen Eintrag nicht mehr verschlsseln#Remove Encryption from active EntryCTreeDAktuellen Eintrag lschen (DELETE)Remove active Entry (DELETE)CTree\Der "Root"-Eintrag kann nicht gelscht werden.!The root entry cannot be deleted.CTree>Es ist kein Eintrag ausgewhlt.There is no active entry.CTreeZur Verwendung der Verschlsselungsfunktion muss ein Eintrag angewhlt sein.-To use encryption, an entry must be selected.CTree15IConfigurationDialogAlleAutomatically save allIConfigurationDialogEintrag automatisch verschlsseln, sobald ein anderer ausgewhlt wird6Automatically encrypt Entry when selecting another oneIConfigurationDialog UntenBottomIConfigurationDialogUntere Farbe Bottom ColorIConfigurationDialog CardsCardsIConfigurationDialog$Zeichensatz ndernChange Editor FontIConfigurationDialog$Zeichensatz ndernChange Tree FontIConfigurationDialogXDies verndert die untere Farbe der Sidebar.$Changes the side bar's bottom color.IConfigurationDialogRDies verndert die Textfarbe der Sidebar."Changes the side bar's text color.IConfigurationDialogVDies verndert die obere Farbe der Sidebar.!Changes the side bar's top color.IConfigurationDialogFarben whlen Choose ColorsIConfigurationDialog,Backup-Datei verwendenCreate Backup FileIConfigurationDialog EditorEditorIConfigurationDialogEditorFont_ExampleIConfigurationDialogVerschlsselung EncyptionIConfigurationDialogJKommando nach dem Speichern ausfhrenExecute Command after SavingIConfigurationDialogErste ZeileFirst Text LineIConfigurationDialog8Verzeichnis fr KaktusbltenFlower DirectoryIConfigurationDialogAllgemeinGeneralIConfigurationDialog:Minuten automatisch speichernMinutesIConfigurationDialogDatei speichern Save FileIConfigurationDialogRDatei beim Beenden von TuxCards speichern Save File when quitting TuxCardsIConfigurationDialogZweite ZeileSecond Text LineIConfigurationDialogZeichensatz Select FontIConfigurationDialog,Zeichensatz des BaumesSelect Font for TreeIConfigurationDialog<Verzeichnis fr "Look && Feel"&Select Icon Directory for Look && FeelIConfigurationDialog4Anzahl der Zeichen fr TabSet Tabsize toIConfigurationDialog4Horizontalen Text anzeigenShow Horizontal TextIConfigurationDialog0Vertikalen Text anzeigenShow Vertical TextIConfigurationDialogSeitenleisteSideBarIConfigurationDialogTabbreite Tab SpacingIConfigurationDialogText Farbe Text ColorIConfigurationDialogPosition Text PositionIConfigurationDialogDer ausgewhlte Zeichensatz wird fr ASCII-Texte und als Default fr Texte im RTF-Format verwendet.^The selected font is used for text in ASCII format and as default font for text in RTF format.IConfigurationDialogObenTopIConfigurationDialogObere Farbe Top ColorIConfigurationDialogBaumTreeIConfigurationDialogTree_FontExampleIConfigurationDialogTuxTuxIConfigurationDialogTuxCardsTuxCardsIConfigurationDialog0TuxCards - KonfigurationTuxCards - ConfigurationIConfigurationDialog*"CactusBar" verwenden Use CactusBarIConfigurationDialogZeilenumbruchWordWrapIConfigurationDialog0Zeilenumbruch bei SpalteWrap at ColumnIConfigurationDialog4An Fensterbreite umbrechenWrap at Window-WidthIConfigurationDialog(Keinen Zeilenumbruch no WordWrapIConfigurationDialogBEintrag auf Aktualitt berprfenSet Expiry Date DialogIDateInputDialogAbbruchCancel IPasswdDialogOk IPasswdDialogPasswortPassword IPasswdDialog@Bitte geben Sie ein Passwort einPlease enter a password for IPasswdDialogWiederholenRetype IPasswdDialog4TuxCards - PassworteingabeTuxCards - Passwd Dialog IPasswdDialogDatum whlen...Change Date...IPropertyDialogIcon whlen...Change Icon...IPropertyDialog*Eintrag verschlsseln Encrypt EntryIPropertyDialogName Entry NameIPropertyDialogPasswortPasswordIPropertyDialogEigenschaften PropertiesIPropertyDialogEigenschaftenProperty DialogIPropertyDialog(Passwort wiederholenRetype PasswordIPropertyDialogNFarbe fr den Namen des Eintrags setzenSet Color for Entry NameIPropertyDialogBEintrag auf Aktualitt berprfenUse Expiry DateIPropertyDialogIcon verwendenUse IconIPropertyDialogDGro- und Kleinschreibung beachten&Case Sensitive ISearchDialog Suchen&Go ISearchDialog$in allen Eintrgen... all Entries ISearchDialogRim aktuellen und untergeordnete Eintrgen... current Entry and Children ISearchDialog0nur im aktuellen Eintrag... current Entry only ISearchDialog Inhalt Entry Content ISearchDialogName Entry Name ISearchDialog(Weitere Optionen >>>More >>> ISearchDialogSuchen nach ...Search for ... ISearchDialogVInnerhalb der folgenden Eintrge suchen ...Search within ... ISearchDialog Suchen SearchDialog ISearchDialogSuchen in:Look in:ISelectorDialogIcon Auswahl Select IconISelectorDialogtuxcards/src/translations/tuxcards_de.ts000444 000765 000024 00000131502 11420350116 021165 0ustar00alexstaff000000 000000 CEditor Insert Image Bild einfügen Images (*.png *.xpm *.jpg) Bilddatei (*.png *.xpm *.jpg) CEncryptedEntryView Encrypted Entry Verschlüsselter Eintrag To view entry content enter password below and press RETURN. Das "<br>" für den Zeilenumbruch ist zwingend notwendig, da anderenfalls das Label eine zu große Breite bekommen würde. Um den Inhalt des Eintrages anzuzeigen, geben Sie bitte das<br> entsprechende Passwort ein und bestätigen Sie mit RETURN. Wrong Passwd. Try again. Falsches Passwort. Bitte versuchen Sie es erneut. CMainWindow Saving Speichern Saving data ... Daten werden gespeichert ... &New &Neu &Open File... Datei öffnen... &Save &Speichern Save &As... Speichern unter... Save Active Entry Aktuellen Eintrag speichern &Print... Drucken... Export to &HTML... &HTML-Export... Search Entry... Eintrag suchen... &Undo Rückgängig &Redo Wiederherstellen Cut Ausschneiden &Copy Kopieren &Paste Einfügen Select &All &Alles auswählen &Bold Fett &Italic Kursiv Underline Unterstrichen Color... Farbe... Align Left Linksbündig Center Zentriert Align Right Rechtsbündig Text Block Blocksatz Show Main Toolbar Hauptwerkzeugleiste anzeigen Show Entry Manipulation Toolbar Werkzeugleiste zur Bearbeitung von Einträgen anzeigen Show Editor Toolbar Editor-Werkzeugleiste anzeigen &File Datei &Exit Beenden &Edit Bearbeiten ToolBars Werkzeugleisten &Options &Optionen &Edit Options... Optionen anpassen... E&xtras E&xtras Word Count Wörter zählen Insert Current Date Aktuelles Datum einfügen Insert Current Time Aktuelle Uhrzeit einfügen Insert Image... Bild einfügen... &About Über About TuxCards Über TuxCards Standard Keine Aufzählung Bullet List (Disc) Gliederungsliste Ausgefüllte kreisförmige Gliederungspunkte Bullet List (Circle) Gliederungsliste Kreisförmige Gliederungspunkte Bullet List (Square) Ausgefüllte quadratische Gliederungspunkte Ordered List (Decimal) Sortierte Liste (dezimal) Ordered List (Alpha lower) Sortierte Liste (Kleinbuchstaben) Ordered List (Alpha upper) Sortierte Liste (Großbuchstaben) Do you want to save before deleting all entries and creating a new file? Do you want to save before deleting all items and creating a new file? Möchten Sie speichern bevor alle Einträge gelöscht und eine neue Datei erstellt wird? Do you want to save before opening another data file? Möchten Sie vor dem Öffnen einer anderen Datei Ihre Änderungen speichern? No Filename specified. Es wurde kein Dateiname angegeben. TuxCards - XML I/O TuxCards - XML I/O ERROR - Could not open Fehler - Die Datei for reading or parse error. konnte nicht gelesen oder geparst werden. Saved to Gespeichert unter File not saved. Please do not use Datei konnte nicht gespeichert werden.\nBitte as file name. nicht als Dateiname verwenden. No changes. Keine Änderungen vorhanden. Save before exiting. Speichern beim Beenden. Do you want to save before leaving TuxCards? Möchten Sie vor Verlassen des Programms Ihre Änderungen speichern? Choose a directory Verzeichnis auswählen HTML-Export HTML-Export HTML Export finished, successfully. erfolgreich abgeschlossen. The data are stored in Die Daten wurden gespeichert in not successfully nicht erfolgreich Please check write permission and disk space Bitte überprüfen Sie Ihre Schreibrechte und den freien Festplattenspeicher Current Text contains <center>Current Text contains<br> Der aktuelle Text enthält words. words.<br> Wörter. word. Wort. Printing Drucken I suggest to convert this entry to rtf before printing. Es wird empfohlen, den Eintrag vor dem Drucken in das Format RTF zu konvertieren. is published as Donationware You may use it freely and without charge as stated within the GPL. Do you like TuxCards ... and you want to enable the development of new features? Or do you want to ensure a high quality of future releases or simply compensate for ftp-server costs? Then you are welcome to donate EUR 5 to the author. (At your wish US$ 5 or an equivalent amount in your currency.) Please, use for a secure donation via internet. Or simply send a letter with your amount to Germany Deutschland CPropertyDialog Change Properties of existing Entry Eigenschaften ändern Add new Entry Neuen Eintrag anlegen Child from Untergeordneter Eintrag von The name of your entry is empty. Do you want to change this? The name of your note is empty. Do you want to change this? Es wurde kein Name vergeben.\nMöchten Sie dies ändern? CRecentFileList Recently Used Files Zuletzt benutzte Dateien CSearchDialog More Weitere Optionen CTree Add Entry (INSERT) Wie soll die INSERT-Taste übersetzt werden? Eintrag hinzufügen (INSERT) Change Properties Eigenschaften ändern Remove active Entry (DELETE) Wie soll die DEL-Taste übersetzt werden? Aktuellen Eintrag löschen (DELETE) Move Current Entry Upwards Aktuellen Eintrag nach oben verschieben Move Current Entry Downwards Aktuellen Eintrag nach unten verschieben Back, Previous Entry (Alt+Left) Zum vorheriger Eintrag wechseln (Alt + Cursor Links) Forward, Next Entry (Alt+Right) Zum nächsten Eintrag wechseln (Alt + Cursor Rechts) Encrypt active Entry Aktuellen Eintrag verschlüsseln Remove Encryption from active Entry Aktuellen Eintrag nicht mehr verschlüsseln Add Entry Neuen Eintrag anlegen No parent entry selected. Es ist kein übergeordneter Eintrag ausgewählt. Delete the active Entry Aktuellen Eintrag löschen No entry selected. Es wurde kein Eintrag zum Löschen ausgewählt. The root entry cannot be deleted. Der "Root"-Eintrag kann nicht gelöscht werden. (and all children)? (und alle untergeordneten Einträge) wirklich löschen? ? wirklich löschen? Do you really want to delete Möchten Sie To use encryption, an entry must be selected. Zur Verwendung der Verschlüsselungsfunktion muss ein Eintrag angewählt sein. There is no active entry. Es ist kein Eintrag ausgewählt. Entry must be decrypted before encryption can be removed. Verschlüsselung kann nur von einem verschlüsselten Eintrag entfernt werden. Create entry below Eintrag erstellen unterhalb von Move to Verschieben nach Drag & Drop Drag & Drop An Entry cannot be moved onto itself or a child. Ein Eintrag kann nicht auf sich selbst oder unterhalb eines untergeordneten Eintrages verschoben werden. Drag & Drop operation not possible. Drag & Drop ist nicht möglich. IConfigurationDialog TuxCards - Configuration TuxCards - Konfiguration General Allgemein Save File Datei speichern Automatically save all Alle 15 Minutes Minuten automatisch speichern Save File when quitting TuxCards Datei beim Beenden von TuxCards speichern Create Backup File Backup-Datei verwenden Execute Command after Saving Kommando nach dem Speichern ausführen Select Icon Directory for Look && Feel Verzeichnis für "Look && Feel" Encyption Verschlüsselung Automatically encrypt Entry when selecting another one Eintrag automatisch verschlüsseln, sobald ein anderer ausgewählt wird SideBar Seitenleiste Choose Colors Farben wählen Top Color Obere Farbe Changes the side bar's top color. Dies verändert die obere Farbe der Sidebar. Bottom Color Untere Farbe Changes the side bar's bottom color. Dies verändert die untere Farbe der Sidebar. Text Color Text Farbe Changes the side bar's text color. Dies verändert die Textfarbe der Sidebar. Show Horizontal Text Horizontalen Text anzeigen First Text Line Erste Zeile Tux Tux Second Text Line Zweite Zeile Cards Cards Show Vertical Text Vertikalen Text anzeigen TuxCards TuxCards Text Position Position Top Oben Bottom Unten Use CactusBar "CactusBar" verwenden Flower Directory Verzeichnis für Kaktusblüten Tree Baum Select Font for Tree Zeichensatz des Baumes Change Tree Font Zeichensatz ändern Tree_FontExample Editor Editor The selected font is used for text in ASCII format and as default font for text in RTF format. Der ausgewählte Zeichensatz wird für ASCII-Texte und als Default für Texte im RTF-Format verwendet. Select Font Zeichensatz Change Editor Font Zeichensatz ändern EditorFont_Example Tab Spacing Tabbreite Set Tabsize to Anzahl der Zeichen für Tab WordWrap Zeilenumbruch no WordWrap Keinen Zeilenumbruch Wrap at Column Zeilenumbruch bei Spalte Wrap at Window-Width An Fensterbreite umbrechen Line Break Mode Single LineBreak with CRTL/SHIFT + ENTER/RETURN Single LineBreak with ENTER/RETURN IDateInputDialog Set Expiry Date Dialog Eintrag auf Aktualität überprüfen IPasswdDialog TuxCards - Passwd Dialog TuxCards - Passworteingabe Please enter a password for Bitte geben Sie ein Passwort ein Password Passwort Retype Wiederholen Ok Cancel Abbruch IPropertyDialog Property Dialog Eigenschaften Set Color for Entry Name Farbe für den Namen des Eintrags setzen Properties Eigenschaften Entry Name Name Use Icon Icon verwenden Change Icon... Icon wählen... Use Expiry Date Eintrag auf Aktualität überprüfen Change Date... Datum wählen... Encrypt Entry Eintrag verschlüsseln Retype Password Passwort wiederholen Password Passwort ISearchDialog SearchDialog Suchen Search for ... Suchen nach ... &Go Suchen &Case Sensitive Groß- und Kleinschreibung beachten More >>> Weitere Optionen >>> Search within ... Innerhalb der folgenden Einträge suchen ... ... all Entries in allen Einträgen ... current Entry and Children im aktuellen und untergeordnete Einträgen ... current Entry only nur im aktuellen Eintrag Entry Name Name Entry Content Inhalt ISelectorDialog Select Icon Icon Auswahl Look in: Suchen in: tuxcards/src/translations/tuxcards_xx.ts000444 000765 000024 00000123057 11420350116 021242 0ustar00alexstaff000000 000000 CEditor Insert Image Images (*.png *.xpm *.jpg) CEncryptedEntryView Encrypted Entry To view entry content enter password below and press RETURN. Wrong Passwd. Try again. CMainWindow Saving Saving data ... &New &Open File... &Save Save &As... Save Active Entry &Print... Export to &HTML... Search Entry... &Undo &Redo Cut &Copy &Paste Select &All &Bold &Italic Underline Color... Align Left Center Align Right Text Block Show Main Toolbar Show Entry Manipulation Toolbar Show Editor Toolbar &File &Exit &Edit ToolBars &Options &Edit Options... E&xtras Word Count Insert Current Date Insert Current Time Insert Image... &About About TuxCards Standard Bullet List (Disc) Bullet List (Circle) Bullet List (Square) Ordered List (Decimal) Ordered List (Alpha lower) Ordered List (Alpha upper) Do you want to save before deleting all entries and creating a new file? Do you want to save before opening another data file? No Filename specified. TuxCards - XML I/O ERROR - Could not open for reading or parse error. Saved to File not saved. Please do not use as file name. No changes. Save before exiting. Do you want to save before leaving TuxCards? Choose a directory HTML-Export HTML Export finished, successfully. The data are stored in not successfully Please check write permission and disk space Current Text contains words. word. Printing I suggest to convert this entry to rtf before printing. is published as Donationware You may use it freely and without charge as stated within the GPL. Do you like TuxCards ... and you want to enable the development of new features? Or do you want to ensure a high quality of future releases or simply compensate for ftp-server costs? Then you are welcome to donate EUR 5 to the author. (At your wish US$ 5 or an equivalent amount in your currency.) Please, use for a secure donation via internet. Or simply send a letter with your amount to Germany CPropertyDialog Change Properties of existing Entry Add new Entry Child from The name of your entry is empty. Do you want to change this? CRecentFileList Recently Used Files CSearchDialog More CTree Add Entry (INSERT) Change Properties Remove active Entry (DELETE) Move Current Entry Upwards Move Current Entry Downwards Back, Previous Entry (Alt+Left) Forward, Next Entry (Alt+Right) Encrypt active Entry Remove Encryption from active Entry Add Entry No parent entry selected. Delete the active Entry No entry selected. The root entry cannot be deleted. (and all children)? ? Do you really want to delete To use encryption, an entry must be selected. There is no active entry. Entry must be decrypted before encryption can be removed. Create entry below Move to Drag & Drop An Entry cannot be moved onto itself or a child. Drag & Drop operation not possible. IConfigurationDialog TuxCards - Configuration General Save File Automatically save all 15 Minutes Save File when quitting TuxCards Create Backup File Execute Command after Saving Select Icon Directory for Look && Feel Encyption Automatically encrypt Entry when selecting another one SideBar Choose Colors Top Color Changes the side bar's top color. Bottom Color Changes the side bar's bottom color. Text Color Changes the side bar's text color. Show Horizontal Text First Text Line Tux Second Text Line Cards Show Vertical Text TuxCards Text Position Top Bottom Use CactusBar Flower Directory Tree Select Font for Tree Change Tree Font Tree_FontExample Editor The selected font is used for text in ASCII format and as default font for text in RTF format. Select Font Change Editor Font EditorFont_Example Tab Spacing Set Tabsize to WordWrap no WordWrap Wrap at Column Wrap at Window-Width Line Break Mode Single LineBreak with CRTL/SHIFT + ENTER/RETURN Single LineBreak with ENTER/RETURN IDateInputDialog Set Expiry Date Dialog IPasswdDialog TuxCards - Passwd Dialog Please enter a password for Password Retype Ok Cancel IPropertyDialog Property Dialog Set Color for Entry Name Properties Entry Name Use Icon Change Icon... Use Expiry Date Change Date... Encrypt Entry Retype Password Password ISearchDialog SearchDialog Search for ... &Go &Case Sensitive More >>> Search within ... ... all Entries ... current Entry and Children ... current Entry only Entry Name Entry Content ISelectorDialog Select Icon Look in: tuxcards/src/informationExt/CCollectionModel.cpp000555 000765 000024 00000071174 11420350116 022473 0ustar00alexstaff000000 000000 /*************************************************************************** CCollectionModel.cpp - description ------------------- begin : Son May 14 12:23:15 CEST 2006 copyright : (C) 2006 by Alexander Theel email : alex.theel@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #include "../global.h" #include "CCollectionModel.h" #include "../information/CTreeInformationElement.h" #include // for drag&drop #include "../information/xmlpersister.h" // for drag&drop #include // for 'Q_ASSERT()' #include // for extracting the fileName #include // ------------------------------------------------------------------------------- CCollectionModel::CCollectionModel() : QStandardItemModel() , mpCollection( NULLPTR ) // ------------------------------------------------------------------------------- { } // ------------------------------------------------------------------------------- CCollectionModel::~CCollectionModel() // ------------------------------------------------------------------------------- { mpCollection = NULLPTR; } // ------------------------------------------------------------------------------- void CCollectionModel::setInformationCollection( CInformationCollection& collection ) // ------------------------------------------------------------------------------- { beginResetModel(); mpCollection = &collection; endResetModel(); } // ------------------------------------------------------------------------------- void CCollectionModel::clearCollection() // ------------------------------------------------------------------------------- { if ( !mpCollection ) return; beginResetModel(); mpCollection = NULLPTR; endResetModel(); } /** * Returns true if this model is valid. This is the case if it owns * an underlying collection (i.e. if mpCollection is valid and not * NULLPTR). * * Returns false if mpCollection was not set (yet). * (This means that no real model exists.) */ // ------------------------------------------------------------------------------- bool CCollectionModel::isValid() const // ------------------------------------------------------------------------------- { if ( mpCollection ) return TRUE; return FALSE; } // ------------------------------------------------------------------------------- void CCollectionModel::currentIndexChanged( const QModelIndex& index ) // ------------------------------------------------------------------------------- { //std::cout<<"CCollectionModel::currentIndexChanged() -> " // <<" row="<< index.row()<<" column="<getRootElement() ); if ( mpCollection->getRootElement() ) bRetVal = TRUE; } else { // 'parent' is valid -> Check whether it has children. CInformationElement* pIE = static_cast(parent.internalPointer()); Q_ASSERT( NULLPTR != pIE ); if ( pIE ) bRetVal = ( 0 < pIE->childCount() ); } //std::cout<<" -> bRetVal = "< The root element is requested. //Q_ASSERT( 0 == row ); // Don't do this assert (with qt4.4.3 and mac 'row' will // be '-1' for new files; which leads to an assertion). return createIndex( 0,0, mpCollection->getRootElement() ); } // The parent index is valid; therefore a parent IE exists. CInformationElement* pParentIE = static_cast(parent.internalPointer()); Q_ASSERT( NULLPTR != pParentIE ); if ( !pParentIE ) { // This should never happen. Since a valid model index is given, a valid // information element must exist!! // Leave the method. return QModelIndex(); } CInformationElement* pChildIE = pParentIE->getChildren()->value( row ); if ( pChildIE ) return createIndex( row, 0, pChildIE ); else return QModelIndex(); // no valid child available } // ------------------------------------------------------------------------------- QModelIndex CCollectionModel::parent( const QModelIndex& index ) const // ------------------------------------------------------------------------------- { //std::cout<<"CCollectionModel::parent( index is valid = "<(index.internalPointer()); Q_ASSERT( NULLPTR != pIE ); if ( !pIE ) { // This should never happen. Since a valid model index is given, then a valid // information element must exist!! // Leave the method. return QModelIndex(); } if ( pIE == mpCollection->getRootElement() ) { // The root information element does not have a parent. return QModelIndex(); } CInformationElement* pParentIE = dynamic_cast(pIE->getParent()); Q_ASSERT( NULLPTR != pParentIE ); if ( !pParentIE ) { // This should never happen. return QModelIndex(); } // Calculate the row of the 'pParentIE'. int iRow = 0; if ( pParentIE == mpCollection->getRootElement() ) { // Do nothing; row is 0. } else { // Get the parent of 'pParentIE'. CInformationElement* pParentOfParentIE = dynamic_cast(pParentIE->getParent()); Q_ASSERT( NULLPTR != pParentOfParentIE ); if ( pParentOfParentIE ) { iRow = pParentOfParentIE->getIndexOfChild( pParentIE ); Q_ASSERT( -1 != iRow ); } } return createIndex( iRow, 0, pParentIE ); } // ------------------------------------------------------------------------------- Qt::ItemFlags CCollectionModel::flags( const QModelIndex& index ) const // ------------------------------------------------------------------------------- { //std::cout<<"CCollectionModel::flags() - requesting flags( index is valid = "<setDescription( value.toString() ); return TRUE; // TODO: dataChanged() signal is not emitted. Is this really necessary? } /** * Maps the given model index to the underlying information element. I.e. returns * the internal pointer casted to an information element. * * If the given model index is not valid, then a NULLPTR is returned. */ // ------------------------------------------------------------------------------- CTreeInformationElement* CCollectionModel::mapIndexToIE( const QModelIndex& index ) const // ------------------------------------------------------------------------------- { Q_ASSERT( NULLPTR != mpCollection ); if ( !mpCollection ) return NULLPTR; if ( index.isValid() ) { CInformationElement* pIE = static_cast(index.internalPointer()); CTreeInformationElement* pTIE = dynamic_cast( pIE ); Q_ASSERT( NULLPTR != pTIE ); return pTIE; } else return NULLPTR; } /** * Method that maps the given path to a model index. If the path was not valid, * then an index is returned that is not valid either. */ // ------------------------------------------------------------------------------- QModelIndex CCollectionModel::mapPathToIndex( const Path& path ) const // ------------------------------------------------------------------------------- { Q_ASSERT( NULLPTR != mpCollection ); if ( !mpCollection ) return QModelIndex(); if ( !hasChildren() ) return QModelIndex(); QStringList list = path.getPathList(); QModelIndex rootIndex = index( 0,0 ); if ( getIEDescription( rootIndex ) != list[0] ) return QModelIndex(); QModelIndex index = rootIndex; for ( int i = 1; i < list.size(); i++ ) { index = findChildWithDescription( index, list[i] ); if ( !index.isValid() ) return QModelIndex(); } return index; } /** * Auxiliary method for mapPathToIndex(). * * A child of parentIndex is searched and returned which has * sData as "IE-Description". If such a child is not found, * then an invalid model index is returned. */ // ------------------------------------------------------------------------------- QModelIndex CCollectionModel::findChildWithDescription( QModelIndex parentIndex, QString sData ) const // ------------------------------------------------------------------------------- { Q_ASSERT( NULLPTR != mpCollection ); if ( !mpCollection ) return QModelIndex(); if ( !hasChildren(parentIndex) ) return QModelIndex(); QModelIndex x; for ( int iRow = 0; iRow < rowCount( parentIndex ); iRow++ ) { x = index( iRow, 0, parentIndex ); if ( x.isValid() && (getIEDescription(x) == sData) ) return x; } return QModelIndex(); } /** * This method returns the description of an information element for a given * model index. * If the given model index is valid, then its internal pointer is used to * retrieve the underlying information element. Then the description of the * information element is returned. * * If the given model index is not valid, then an empty string is returned. */ // ------------------------------------------------------------------------------- QString CCollectionModel::getIEDescription( const QModelIndex& index ) const // ------------------------------------------------------------------------------- { Q_ASSERT( NULLPTR != mpCollection ); if ( !mpCollection ) return QString(); if ( index.isValid() ) { CInformationElement* pIE = static_cast(index.internalPointer()); Q_ASSERT( NULLPTR != pIE ); if ( pIE ) { return pIE->getDescription(); } } return QString(); } /** * Method that returns the file name only; and not the whole absolute path and * file name of the data file that belongs to the underlying collection. */ // ------------------------------------------------------------------------------- QString CCollectionModel::getFileName() const // ------------------------------------------------------------------------------- { Q_ASSERT( NULLPTR != mpCollection ); if ( !mpCollection ) return QString(); QFileInfo fileInfo( mpCollection->getAbsFileName() ); return fileInfo.fileName(); } /** ****************** Methods for inserting and removing new entries ***********/ /** * This method is called if a new element should be added. */ // ------------------------------------------------------------------------------- bool CCollectionModel::insertRow( const QString& sDescription, InformationFormat* pFormat, const QString& sIconFileName, const QColor& descriptionColor, bool bExpires, const QDate& date, int iRow, const QModelIndex& parent ) // ------------------------------------------------------------------------------- { Q_ASSERT( NULLPTR != mpCollection ); if ( !mpCollection ) return FALSE; if ( !parent.isValid() ) return FALSE; CInformationElement* pParentIE = mapIndexToIE( parent ); CTreeInformationElement* pNewElement = createNewChild( sDescription, pFormat, sIconFileName, descriptionColor, bExpires, date, pParentIE ); if ( !pNewElement ) return FALSE; beginInsertRows( parent, iRow, iRow ); // begin insertion pParentIE->addChild( pNewElement ); endInsertRows(); // end insertion mpCollection->setActiveElement( pNewElement ); return TRUE; } /** * Auxiliary class to create a new entry. This is called from insertRow() * and dropMimeData(). * * A pointer to the newly created entry is returned. */ // ------------------------------------------------------------------------------- CTreeInformationElement* CCollectionModel::createNewChild( const QString& sDescription, InformationFormat* pFormat, const QString& sIconFileName, const QColor& descriptionColor, bool bExpires, const QDate& date, CInformationElement* pParentIE ) // ------------------------------------------------------------------------------- { Q_ASSERT( NULLPTR != mpCollection ); if ( !mpCollection ) return NULLPTR; Q_ASSERT( NULLPTR != pParentIE ); if ( !pParentIE ) return NULLPTR; // create default entry which will be added to the current entry as child CTreeInformationElement* pNewElement = new CTreeInformationElement( pParentIE, sDescription, "", pFormat, sIconFileName, bExpires, date ); Q_ASSERT( NULLPTR != pNewElement ); if ( !pNewElement ) return NULLPTR; pNewElement->setDescriptionColor( descriptionColor ); return pNewElement; } /** * This method is called if an element should be deleted. * The corresponding collection is called to delete this element. */ // ------------------------------------------------------------------------------- bool CCollectionModel::removeRow( int iRow, const QModelIndex& parent ) // ------------------------------------------------------------------------------- { Q_ASSERT( NULLPTR != mpCollection ); if ( !mpCollection ) return FALSE; if ( !parent.isValid() ) return FALSE; CInformationElement* pParentIE = mapIndexToIE( parent ); Q_ASSERT( NULLPTR != pParentIE ); if ( !pParentIE ) return FALSE; beginRemoveRows( parent, iRow, iRow ); // begin removal pParentIE->removeChild( iRow ); endRemoveRows(); // end removal return TRUE; } /** ****************** Methods for moving entries up/down ***********************/ /** * This method is called if a new element should be added. */ // ------------------------------------------------------------------------------- void CCollectionModel::moveEntryOneUp( const QModelIndex& index ) // ------------------------------------------------------------------------------- { //std::cout<<"CCollectionModel::moveEntryOneUp()"<getRootElement() ) return; layoutAboutToBeChanged(); pIE->moveOneUp(); layoutChanged(); } // ------------------------------------------------------------------------------- void CCollectionModel::moveEntryOneDown( const QModelIndex& index ) // ------------------------------------------------------------------------------- { //std::cout<<"CCollectionModel::moveEntryOneDown()"<getRootElement() ) return; layoutAboutToBeChanged(); pIE->moveOneDown(); layoutChanged(); } /** ****************** Methods for drag & drop **********************************/ /********************* Methods for drag *****************************************/ // ------------------------------------------------------------------------------- QStringList CCollectionModel::mimeTypes() const // ------------------------------------------------------------------------------- { QStringList types; types << TUXCARDS_DRAGDROP_TYPE; return types; } // ------------------------------------------------------------------------------- QMimeData* CCollectionModel::mimeData( const QModelIndexList& indexes ) const // ------------------------------------------------------------------------------- { //std::cout<<"CCollectionModel::mimeData()"<toXML( pTIE ) ); //std::cout<<"[DragContent]"<toXML( pTIE ); QMimeData* pMimeData = new QMimeData(); pMimeData->setData( TUXCARDS_DRAGDROP_TYPE, encodedData ); return pMimeData; } /********************* Methods for drop *****************************************/ /** * This method is called when some mime data should be dropped here. */ // ------------------------------------------------------------------------------- bool CCollectionModel::dropMimeData( const QMimeData* pData, Qt::DropAction, int iRow, int, const QModelIndex& parent ) // ------------------------------------------------------------------------------- { //std::cout<<"CCollectionModel::dropMimeData()"<( mapIndexToIE(parent) ); Q_ASSERT( NULLPTR != pParentTIE ); if ( !pParentTIE ) return FALSE; //std::cout<<"CCollectionModel::dropMimeData() - possible formats are:"<formats(); //foreach ( QString sFormat, possibleDropFormats ) // std::cout<<" - "<hasFormat("text/plain") ) { // if data are empty then return QString sInformationString = pData->text(); if ( sInformationString.isEmpty() ) return FALSE; // use first word for entry description QString sDescription = sInformationString.section( ' ', 0, 0, QString::SectionSkipEmpty ); CTreeInformationElement* pNewElement = createNewChild( sDescription, InformationFormat::getByString("ASCII"), "", QColor(0,0,0), FALSE, QDate::currentDate(), pParentTIE ); if ( !pNewElement ) return FALSE; pNewElement->setInformation( sInformationString ); beginInsertRows( parent, iRow, iRow ); // begin insertion pParentTIE->addChild( pNewElement ); endInsertRows(); // end insertion //std::cout<<"CCollectionModel::dropMimeData() - new entry created"<hasFormat( TUXCARDS_DRAGDROP_TYPE ) ) { QString sDropData( pData->data( TUXCARDS_DRAGDROP_TYPE ) ); //std::cout<<"[DropContents]"<getRootElement(); CTreeInformationElement* pTIE = dynamic_cast(pRoot); Q_ASSERT( NULLPTR != pTIE ); if ( !pTIE ) return FALSE; beginInsertRows( parent, iRow, iRow ); // begin insertion pParentTIE->addChild( pTIE ); endInsertRows(); // end insertion //std::cout<<"CCollectionModel::dropMimeData() - entry moved"< #include "../information/CInformationCollection.h" class CTreeInformationElement; /** * This class represents a model for a CInformationCollection. * It is derived from the QStandardItemModel and has a reference * to a CInformationCollection. * * However, the main purpose is: The method index() returns * CCollectionIndex which hold a reference to a * CInformationElement. Thus the model view controller architecture * is fully implemented. */ class CCollectionModel : public QStandardItemModel { Q_OBJECT public: CCollectionModel(); ~CCollectionModel(); void setInformationCollection( CInformationCollection& collection ); void clearCollection(); bool isValid() const; // Methods for standard one-dimensional models. virtual int rowCount( const QModelIndex& parent = QModelIndex() ) const; virtual QVariant data( const QModelIndex& index, int role = Qt::DisplayRole ) const; virtual QVariant headerData( int section, Qt::Orientation orientation, int role = Qt::DisplayRole ) const; //Methods for two-dimensional models. virtual int columnCount( const QModelIndex& parent = QModelIndex() ) const; //Methods for hierarchical models. virtual bool hasChildren( const QModelIndex& parent = QModelIndex() ) const; virtual QModelIndex index( int row, int column, const QModelIndex& parent = QModelIndex() ) const; virtual QModelIndex parent( const QModelIndex& index ) const; //Methods for editable models (data are allowed to be changed). virtual Qt::ItemFlags flags( const QModelIndex& index ) const; virtual bool setData( const QModelIndex& index, const QVariant& value, int iRole = Qt::EditRole ); // Methods for editable models (data are allowed to be expanded and deleted) virtual bool removeRow( int iRow, const QModelIndex& parent = QModelIndex() ); // virtual bool insertRow( int iRow, const QModelIndex& parent = QModelIndex() ); bool insertRow( const QString& sDescription, InformationFormat* pFormat, const QString& sIconFileName, const QColor& descriptionColor, bool bExpires, const QDate& date, int iRow, const QModelIndex& parent = QModelIndex() ); void moveEntryOneUp( const QModelIndex& index ); void moveEntryOneDown( const QModelIndex& index ); void currentIndexChanged( const QModelIndex& index ); CTreeInformationElement* mapIndexToIE( const QModelIndex& index ) const; QModelIndex mapPathToIndex( const Path& path ) const; // Methods for drag & drop models virtual QStringList mimeTypes() const; virtual QMimeData* mimeData( const QModelIndexList & indexes ) const; virtual bool dropMimeData( const QMimeData* pData, Qt::DropAction action, int iRow, int iColumn, const QModelIndex& parent ); private: CInformationCollection* mpCollection; // void setupModelData(); // void addChild( CInformationElement& parentElement, QModelIndex& parentIndex ); QString getIEDescription( const QModelIndex& index ) const; QModelIndex findChildWithDescription( QModelIndex parentIndex, QString sData ) const; QString getFileName() const; CTreeInformationElement* createNewChild( const QString& sDescription, InformationFormat* pFormat, const QString& sIconFileName, const QColor& descriptionColor, bool bExpires, const QDate& date, CInformationElement* pParentIE ); }; #endif tuxcards/src/information/CInformationCollection.cpp000444 000765 000024 00000030241 11420350116 023222 0ustar00alexstaff000000 000000 /*************************************************************************** CInformationCollection.cpp - description ------------------- begin : Fri Jul 19 2002 copyright : (C) 2002 by Alexander Theel email : alex.theel@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #include "CInformationCollection.h" #include "CTreeInformationElement.h" #include // ------------------------------------------------------------------------------- CInformationCollection::CInformationCollection( CInformationElement* pRoot ) : mpRootElement( NULLPTR ) , mpActiveElement( NULLPTR ) , msAbsFileName("") // ------------------------------------------------------------------------------- { setRootElement( pRoot ); setActiveElement( pRoot ); } // ------------------------------------------------------------------------------- CInformationCollection::~CInformationCollection( void ) // ------------------------------------------------------------------------------- { DELETE( mpRootElement ); mpActiveElement = NULLPTR; mViews.clear(); } // ------------------------------------------------------------------------------- CInformationCollection* CInformationCollection::createDefaultCollection( void ) // ------------------------------------------------------------------------------- { CTreeInformationElement* pE = new CTreeInformationElement( 0, "root", "", InformationFormat::getByString("RTF") ); CInformationCollection* pCollection = new CInformationCollection(pE); pCollection->registerAsListenerOf(pE); return pCollection; } // ------------------------------------------------------------------------------- void CInformationCollection::setAbsFileName( const QString& sAbsFileName ) // ------------------------------------------------------------------------------- { msAbsFileName = sAbsFileName; } // ------------------------------------------------------------------------------- const QString& CInformationCollection::getAbsFileName() const // ------------------------------------------------------------------------------- { return msAbsFileName; } // **************************** IParent ****************************************** // ------------------------------------------------------------------------------- QString CInformationCollection::getDescription( void ) const // ------------------------------------------------------------------------------- { return INFORMATION_COLLECTION_DESC; } // ------------------------------------------------------------------------------- IParent* CInformationCollection::getParent( void ) const // ------------------------------------------------------------------------------- { return NULLPTR; } // ------------------------------------------------------------------------------- void CInformationCollection::removeChild( CInformationElement* /*pChild*/ ) // ------------------------------------------------------------------------------- { // Root element cannot be deleted; do nothing. } // ------------------------------------------------------------------------------- void CInformationCollection::aboutToRemoveElement( CInformationElement* pIE ) // ------------------------------------------------------------------------------- { notifyViewsToRemoveElement( pIE ); } // **************************** IParent - End ************************************ // ------------------------------------------------------------------------------- void CInformationCollection::setRootElement( CInformationElement* pRoot ) // ------------------------------------------------------------------------------- { mpRootElement = pRoot; if ( NULLPTR != pRoot ) pRoot->setParent(this); } // ------------------------------------------------------------------------------- CInformationElement* CInformationCollection::getRootElement( void ) const // ------------------------------------------------------------------------------- { return mpRootElement; } // ------------------------------------------------------------------------------- void CInformationCollection::setActiveElement( CInformationElement* pElement ) // ------------------------------------------------------------------------------- { if (!pElement) return; //std::cout<<"CInformationCollection::mpActiveElement changed to " // <getDescription()<getTreeString(0); } // ------------------------------------------------------------------------------- QString CInformationCollection::toXML( void ) // ------------------------------------------------------------------------------- { // QDomDocument KoDocument::createDomDocument( const QString& appName, const QString& tagName, const QString& version ) //1312 { //1313 QDomImplementation impl; //1314 QString url = QString("http://www.koffice.org/DTD/%1-%1.dtd").arg(appName).arg(version); //1315 QDomDocumentType dtype = impl.createDocumentType( tagName, //1316 QString("-//KDE//DTD %1 %1//EN").arg(appName).arg(version), //1317 url ); //1318 // The namespace URN doesn't need to include the version number. //1319 QString namespaceURN = QString("http://www.koffice.org/DTD/%1").arg(appName); //1320 QDomDocument doc = impl.createDocument( namespaceURN, tagName, dtype ); //1321 doc.insertBefore( doc.createProcessingInstruction( "xml", "version=\"1.0\" encoding=\"UTF-8\"" ), doc.documentElement() ); //1322 return doc; // } QDomDocument xmlDocument("tuxcards_data_file"); xmlDocument.insertBefore( xmlDocument.createProcessingInstruction( "xml", "version=\"1.0\" encoding=\"utf-8\"" ), xmlDocument.documentElement() ); //xmlDocument.insertBefore( xmlDocument.createProcessingInstruction( "xml", "version=\"1.0\" encoding=\"UTF-8\"" ), xmlDocument.documentElement() ); // QDomElement rootElem = xmlDocument.createElement("Menschen"); // xmlDocument.appendChild(rootElem); // // QDomElement elem = xmlDocument.createElement("Mensch"); // elem.setAttribute("name", "alex"); // elem.setAttribute("age", "26"); // rootElem.appendChild(elem); // // QDomText text = xmlDocument.createTextNode( "Hello & World" ); // elem.appendChild( text ); // CInformationCollection-MetaData QDomElement thisElement = xmlDocument.createElement("InformationCollection"); xmlDocument.appendChild( thisElement ); QDomElement pathOfLastActiveIE = xmlDocument.createElement("LastActiveElement"); QDomText text = xmlDocument.createTextNode( Path(mpActiveElement).toString() ); pathOfLastActiveIE.appendChild( text ); thisElement.appendChild( pathOfLastActiveIE ); //std::cout<<"LastActiveElement = "<toXML(xmlDocument, thisElement); } return xmlDocument.toString(); } /** * Allows to create an XML-document with an arbitrary informationelement * as root. */ // ------------------------------------------------------------------------------- QString CInformationCollection::toXML( CInformationElement* pElem ) // ------------------------------------------------------------------------------- { QDomDocument xmlDocument("tuxcards_data_file"); xmlDocument.insertBefore( xmlDocument.createProcessingInstruction( "xml", "version=\"1.0\" encoding=\"utf-8\"" ), xmlDocument.documentElement() ); if ( NULLPTR != pElem ) pElem->toXML( xmlDocument, xmlDocument ); return xmlDocument.toString(); } // ------------------------------------------------------------------------------- void CInformationCollection::slotChildAdded( CInformationElement* pElem ) // ------------------------------------------------------------------------------- { registerAsListenerOf( pElem ); emit modelHasChanged(); } // ------------------------------------------------------------------------------- void CInformationCollection::registerAsListenerOf( CInformationElement* pElem ) // ------------------------------------------------------------------------------- { if ( NULLPTR == pElem ) return; connect( pElem, SIGNAL(propertyChanged()), this, SIGNAL(modelHasChanged()) ); connect( pElem, SIGNAL(childAdded(CInformationElement*)), this, SLOT(slotChildAdded(CInformationElement*)) ); } // ------------------------------------------------------------------------------- CInformationElement* CInformationCollection::getInformationElement( Path path ) // ------------------------------------------------------------------------------- { if ( NULLPTR == mpRootElement ) return NULLPTR; QStringList list = path.getPathList(); if ( mpRootElement->getDescription() != list[0] ) return NULLPTR; CInformationElement* pElem = mpRootElement; for ( int i=1; i < list.size(); i++ ) { pElem = pElem->findChildWithDescription( list[i] ); if ( NULLPTR == pElem ) { return NULLPTR; } } return pElem; } /** * Checks whether the given path is not empty and valid * within this information collection. */ // ------------------------------------------------------------------------------- bool CInformationCollection::isPathValid( Path path ) // ------------------------------------------------------------------------------- { if ( path.isEmpty() ) return false; CInformationElement* pElement = getInformationElement(path); if ( pElement ) return true; return false; } // ------------------------------------------------------------------------------- void CInformationCollection::addView( IView* pView ) // ------------------------------------------------------------------------------- { mViews.append( pView ); } // ------------------------------------------------------------------------------- void CInformationCollection::removeView( IView* pView ) // ------------------------------------------------------------------------------- { int iIndex = mViews.indexOf( pView ); if ( -1 != iIndex ) mViews.removeAt( iIndex ); } // ------------------------------------------------------------------------------- void CInformationCollection::notifyViewsToRemoveElement( CInformationElement* pIE ) // ------------------------------------------------------------------------------- { for ( int i = 0; i < mViews.count(); i++ ) { IView* pView = mViews.at( i ); if ( pView ) pView->aboutToRemoveElement( pIE ); } } tuxcards/src/information/CInformationCollection.h000444 000765 000024 00000006405 11420350116 022674 0ustar00alexstaff000000 000000 /*************************************************************************** CInformationCollection.h - description ------------------- begin : Fri Jul 19 2002 copyright : (C) 2002 by Alexander Theel email : alex.theel@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #ifndef CINFORMATION_COLLECTION_H #define CINFORMATION_COLLECTION_H #include "../global.h" #include "IParent.h" #include #include "CInformationElement.h" #include #include #include "Path.h" #include "IView.h" class CInformationCollection : public QObject, public IParent { Q_OBJECT public: CInformationCollection( CInformationElement* pRoot = NULLPTR ); ~CInformationCollection( void); static CInformationCollection* createDefaultCollection( void ); void setAbsFileName( const QString& sAbsFileName ); const QString& getAbsFileName() const; // ************* IParent - End *********************************** virtual QString getDescription( void ) const; virtual IParent* getParent( void ) const; virtual void removeChild( CInformationElement* pChild ); virtual void aboutToRemoveElement( CInformationElement* pIE ); // ************* IParent - End *********************************** void setRootElement( CInformationElement* pRoot ); CInformationElement* getRootElement( void ) const; void setActiveElement( CInformationElement* pElement ); void setActiveElement( Path path ); CInformationElement* getActiveElement( void ); CInformationElement* getInformationElement( Path path ); bool isPathValid( Path path ); void registerAsListenerOf( CInformationElement* pElem ); QString toString( void ); QString toXML( void ); QString toXML( CInformationElement* ); void addView( IView* pView ); void removeView( IView* pView ); signals: void activeInformationElementChanged( CInformationElement* ); void modelHasChanged(); public slots: void slotChildAdded( CInformationElement* ); private: CInformationElement* mpRootElement; CInformationElement* mpActiveElement; QList mViews; void notifyViewsToRemoveElement( CInformationElement* pIE ); QString msAbsFileName; // This member holds the fileName during runtime of // the application. The fileName is not saved within // the xml-DataFile. }; #endif tuxcards/src/information/CInformationElement.cpp000444 000765 000024 00000065561 11420350116 022535 0ustar00alexstaff000000 000000 /*************************************************************************** CInformationElement.cpp - description ------------------- begin : Fri Jul 19 2002 copyright : (C) 2002 by Alexander Theel email : alex.theel@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #include "CInformationElement.h" #include "../global.h" #include "../utilities/strings.h" #include "../gui/dialogs/searchDialog/CSearchListItem.h" #include #include #include "../utilities/crypt/StringCrypter.h" #include #include // ------------------------------------------------------------------------------- CInformationElement::CInformationElement( IParent* pParent, QString sDescription, QString sInformation, InformationFormat* pFormat, QString sIconFileName, bool bExpires, QDate expiryDate ) : mpParent( pParent ) , mbBatched( false ) , mDescription( sDescription ) , mpInformationFormat( pFormat ) , mInformation( sInformation ) , mIcon() , mIconFilename( sIconFileName ) , mDescriptionColor( 0,0,0 ) , mpChildObjects( NULLPTR ) , mExpiryDate( expiryDate ) , mbExpires( bExpires ) , miInformationYPos( 0 ) , mbIsEncryptionEnabled( false ) , msTmpPasswd( "" ) , mEncryptedData() // ------------------------------------------------------------------------------- { if ( !mpInformationFormat ) { mpInformationFormat = InformationFormat::getByString( "RTF" ); } mpChildObjects = new QList(); // no auto-deletion is done if a pointer is removed from the list if ( NULLPTR == mpChildObjects ) { std::cout<<"TuxCards-ERROR: in constructor 'CInformationElement'\n" <<"NULLPTR == mpChildObjects\n" <<"Not enough memory to create objects. TuxCards might crash." <isEmpty() ) { delete mpChildObjects->takeFirst(); } /* while ( NULL < mpChildObjects->count() ) { CInformationElement* pIE = mpChildObjects->first(); removeChild( pIE ); pIE = NULLPTR; std::cout<<"\t\tpIE="<aboutToRemoveElement(this); mpParent = NULLPTR; } } // **************************** IParent ****************************************** // ------------------------------------------------------------------------------- QString CInformationElement::getDescription( void ) const // ------------------------------------------------------------------------------- { return mDescription; } // ------------------------------------------------------------------------------- IParent* CInformationElement::getParent( void ) const // ------------------------------------------------------------------------------- { return mpParent; } // ------------------------------------------------------------------------------- void CInformationElement::removeChild( CInformationElement* pChild ) // ------------------------------------------------------------------------------- { if ( NULLPTR == mpChildObjects ) return; int iIndex = mpChildObjects->indexOf( pChild ); if ( -1 != iIndex ) { mpChildObjects->removeAt( iIndex ); DELETE( pChild ); } } /** * Convenience method for removeChild( CInformationElement* pChild ). * iChildIndex is the index of the child. */ // ------------------------------------------------------------------------------- void CInformationElement::removeChild( const int iChildIndex ) // ------------------------------------------------------------------------------- { if ( !mpChildObjects ) return; removeChild( mpChildObjects->at( iChildIndex ) ); } // ------------------------------------------------------------------------------- void CInformationElement::aboutToRemoveElement( CInformationElement* pIE ) // ------------------------------------------------------------------------------- { if ( NULLPTR != mpParent ) mpParent->aboutToRemoveElement(pIE); } // **************************** IParent - End ************************************ // ------------------------------------------------------------------------------- void CInformationElement::deleteSelf( void ) // ------------------------------------------------------------------------------- { //cout<<"IE::deleteSelf(); parent="<removeChild(this); } // ------------------------------------------------------------------------------- void CInformationElement::setParent( IParent* pParent ) // ------------------------------------------------------------------------------- { mpParent = pParent; } // ------------------------------------------------------------------------------- void CInformationElement::setBatched( bool b ) // ------------------------------------------------------------------------------- { mbBatched = b; if (!mbBatched) emit propertyChanged(); } // ------------------------------------------------------------------------------- bool CInformationElement::isBatched( void ) const // ------------------------------------------------------------------------------- { return mbBatched; } // ------------------------------------------------------------------------------- void CInformationElement::addChild( CInformationElement* pElement ) // ------------------------------------------------------------------------------- { if ( (NULLPTR == pElement) || (NULLPTR == mpChildObjects) ) return; mpChildObjects->append( pElement ); if (!mbBatched) emit childAdded( pElement ); } // ------------------------------------------------------------------------------- QList* CInformationElement::getChildren( void ) // ------------------------------------------------------------------------------- { return mpChildObjects; } // ------------------------------------------------------------------------------- int CInformationElement::childCount( void ) const // ------------------------------------------------------------------------------- { if ( NULLPTR == mpChildObjects ) return 0; return mpChildObjects->count(); } /** * Returns the index of the given child within the list of all children of this * element. * This is important for the MVC-architecture from Qt. * * If the given element is no child of this element, then -1 is * returned. */ // ------------------------------------------------------------------------------- int CInformationElement::getIndexOfChild( CInformationElement* pChild ) const // ------------------------------------------------------------------------------- { if ( NULLPTR == mpChildObjects ) return -1; return mpChildObjects->indexOf( pChild ); } // ------------------------------------------------------------------------------- void CInformationElement::setDescription( QString description ) // ------------------------------------------------------------------------------- { mDescription = description; if (!mbBatched) emit propertyChanged(); // std::cout<<"CInformationElement: data changed to '"<true if the member mDescriptionColor has a * color that is not equal to black (i.e. QColor(0,0,0)). */ // ------------------------------------------------------------------------------- bool CInformationElement::hasDescriptionColor() const // ------------------------------------------------------------------------------- { return ( QColor(0,0,0) != mDescriptionColor ); } // ------------------------------------------------------------------------------- void CInformationElement::setDescriptionColor( const QColor& c ) // ------------------------------------------------------------------------------- { mDescriptionColor = c; } // ------------------------------------------------------------------------------- QColor CInformationElement::getDescriptionColor() const // ------------------------------------------------------------------------------- { return mDescriptionColor; } // ------------------------------------------------------------------------------- InformationFormat* CInformationElement::getInformationFormat( void ) const // ------------------------------------------------------------------------------- { return mpInformationFormat; } // ------------------------------------------------------------------------------- void CInformationElement::setInformationFormat( InformationFormat* pFormat ) // ------------------------------------------------------------------------------- { mpInformationFormat = pFormat; if (!mbBatched) emit propertyChanged(); } // ------------------------------------------------------------------------------- QString CInformationElement::toString( void ) const // ------------------------------------------------------------------------------- { QString result = mDescription+" ["+mpInformationFormat->toString()+"]\n" +mInformation; return result; } // ------------------------------------------------------------------------------- QString CInformationElement::getTreeString( int tab ) const // ------------------------------------------------------------------------------- { QString result = Strings::spaces(tab)+mDescription+"\n"; tab++; if ( NULLPTR == mpChildObjects ) return result; CInformationElement* pX; for ( int i = 0; i < mpChildObjects->count(); i++ ) { pX = mpChildObjects->at( i ); if ( pX ) result += pX->getTreeString( tab ); } return result; } // ------------------------------------------------------------------------------- void CInformationElement::toXML( QDomDocument& xmlDocument, QDomNode& parent ) // ------------------------------------------------------------------------------- { QDomElement thisElement = xmlDocument.createElement("InformationElement"); thisElement.setAttribute("informationFormat", getInformationFormat()->toString()); thisElement.setAttribute("iconFileName", getIconFileName()); thisElement.setAttribute("expires", expires() ? QString("true") : QString("false") ); thisElement.setAttribute("expiryDate", getExpiryDate().toString()); // add description QDomElement description = xmlDocument.createElement("Description"); QDomText text = xmlDocument.createTextNode(getDescription()); description.appendChild(text); if ( hasDescriptionColor() ) description.setAttribute( "color", getDescriptionColor().name() ); thisElement.appendChild(description); // add information QDomElement information = xmlDocument.createElement("Information"); text = xmlDocument.createTextNode(getInformation()); information.appendChild(text); thisElement.appendChild(information); // add children CInformationElement* pX; for ( int i = 0; i < mpChildObjects->count(); i++ ) { pX = mpChildObjects->at( i ); if ( pX ) pX->toXML(xmlDocument, thisElement); } parent.appendChild(thisElement); } // ------------------------------------------------------------------------------- CInformationElement* CInformationElement::findChildWithDescription( QString desc ) // ------------------------------------------------------------------------------- { CInformationElement* pX; for ( int i = 0; i < mpChildObjects->count(); i++ ) { pX = mpChildObjects->at( i ); if ( pX && (pX->getDescription() == desc) ) return pX; } return NULLPTR; } /** * find the specified 'QString pattern' within the text/information of the * appropriate 'CInformationElement' (evtl. recursive) and append the found * "places" as 'SearchListItem's at the list's end. */ // ------------------------------------------------------------------------------- void CInformationElement::search( const QString& sPattern, bool recursive, Qt::CaseSensitivity eCaseSensitive, QTreeWidget& list) // ------------------------------------------------------------------------------- { searchDescription( sPattern, eCaseSensitive, list ); searchInformation( sPattern, eCaseSensitive, list ); // if recursive -> do so if (recursive) { CInformationElement* pX; for ( int i = 0; i < mpChildObjects->count(); i++ ) { pX = mpChildObjects->at( i ); if ( pX ) pX->search( sPattern, true, eCaseSensitive, list ); } } } // ------------------------------------------------------------------------------- void CInformationElement::searchDescription( QString pattern, Qt::CaseSensitivity eCaseSensitive, QTreeWidget& list) // ------------------------------------------------------------------------------- { int pos = mDescription.indexOf( pattern, 0, eCaseSensitive ); while (pos >= 0) { // found something -> add it to 'list' (void) new CSearchListItem( &list, new Path(this), CSearchPosition::SP_NAME, pos, pattern.length(), mDescription ); // prepare for next evtl. occurance within this 'oneLine' pos = mDescription.indexOf( pattern, pos+pattern.length(), eCaseSensitive ); } } // ------------------------------------------------------------------------------- void CInformationElement::searchInformation( const QString& sPattern, Qt::CaseSensitivity eCaseSensitive, QTreeWidget& list ) // ------------------------------------------------------------------------------- { QTextDocument textDocument; textDocument.setHtml( getInformation() ); bool bFoundSomething = false; QTextCursor cursor( &textDocument ); while ( !cursor.isNull() && !cursor.atEnd() ) { if ( Qt::CaseSensitive == eCaseSensitive ) cursor = textDocument.find( sPattern, cursor, QTextDocument::FindCaseSensitively ); else cursor = textDocument.find( sPattern, cursor ); if ( !cursor.isNull() ) { bFoundSomething = true; //std::cout<<"searching("<= 0; i-- ) { QChar cChar = sLine.at(i); if ( 0 == cChar.toAscii() ) { iTrimmedLineStart = i+1; break; } } int iTrimmedLineEnd = sLine.length(); for ( i = iEndWithinLine; i < sLine.length(); i++ ) { QChar cChar = sLine.at(i); if ( 0 == cChar.toAscii() ) { iTrimmedLineEnd = i; break; } } //std::cout<<"\t-> trimmedLineStart="< trimmedLine='"<\n" ); } mInformation += text; emit informationHasChanged(); } // ------------------------------------------------------------------------------- bool CInformationElement::expires( void ) const // ------------------------------------------------------------------------------- { return mbExpires; } // ------------------------------------------------------------------------------- QDate CInformationElement::getExpiryDate( void ) const // ------------------------------------------------------------------------------- { return mExpiryDate; } /** * This method set the expire date to 'date'. If 'expires' == false, this * information element will not expire at all (independently of a given date). */ // ------------------------------------------------------------------------------- void CInformationElement::setExpiryDate( bool expires, QDate date ) // ------------------------------------------------------------------------------- { mbExpires = expires; mExpiryDate = date; } // ------------------------------------------------------------------------------- void CInformationElement::setInformationYPos( int iPos ) // ------------------------------------------------------------------------------- { miInformationYPos = iPos; } // ------------------------------------------------------------------------------- int CInformationElement::getInformationYPos( void ) const // ------------------------------------------------------------------------------- { return miInformationYPos; } // ------------------------------------------------------------------------------- // Adds information so that the element has the capability to be encrypted. // To encrypt the element call 'encrypt()'. // ------------------------------------------------------------------------------- void CInformationElement::enableEncryption( bool bIsEncryptionEnabled, const QString& sTmpPasswd ) // ------------------------------------------------------------------------------- { mbIsEncryptionEnabled = bIsEncryptionEnabled; msTmpPasswd = mbIsEncryptionEnabled ? sTmpPasswd : QString(""); //std::cout<<"CInformationElement - passwd='"< #include #include #include #include "informationformat.h" #include #include class QTextCursor; #include #include #define CInformationElement_NO_ICON "none" class CInformationElement : public QObject, public IParent { Q_OBJECT public: CInformationElement( IParent* pParent, QString sDescription="", QString sInformation="", InformationFormat* pFormat = InformationFormat::getByString( "NONE" ), QString sIconFileName = CInformationElement_NO_ICON, bool bExpires = false, QDate expiryDate = QDate::currentDate()); ~CInformationElement( void ); // ************* IParent ***************************************** virtual QString getDescription( void ) const; virtual IParent* getParent( void ) const; virtual void removeChild( CInformationElement* pChild ); virtual void aboutToRemoveElement( CInformationElement* pIE ); // ************* IParent - End *********************************** void removeChild( const int iChildIndex ); void setBatched( bool ); bool isBatched( void ) const; virtual void addChild( CInformationElement* pElement ); QList* getChildren( void ); int getIndexOfChild( CInformationElement* pChild ) const; int childCount( void ) const; void setParent( IParent* pParent = 0 ); void deleteSelf( void ); void setDescription( QString ); QString getInformation( void ) const; void setInformation( const QString& ); QString getInformationText( void ) const; void appendInformation( QString text ); bool hasIcon( void ) const; void setIcon(QPixmap); void setIconFileName( const QString& ); QString getIconFileName( void ) const; bool hasDescriptionColor() const; void setDescriptionColor( const QColor& c ); QColor getDescriptionColor() const; InformationFormat* getInformationFormat( void ) const; void setInformationFormat( InformationFormat* ); QString toString( void ) const; QString getTreeString(int tab=0) const; virtual void toXML( QDomDocument& xmlDocument, QDomNode& parent ); void search( const QString& sPattern, bool recursive, Qt::CaseSensitivity eCaseSensitive, QTreeWidget& list ); CInformationElement* findChildWithDescription( QString desc ); bool expires( void ) const; QDate getExpiryDate( void ) const; void setExpiryDate( bool expires, QDate date = QDate::currentDate() ); void setInformationYPos( int iPos ); int getInformationYPos( void ) const; void enableEncryption( bool bIsEncryptionEnabled, const QString& sTmpPasswd ); bool isEncryptionEnabled( void ) const; bool isCurrentlyEncrypted( void ) const; void encrypt( void ); bool decrypt( const QString& sPasswd ); const QByteArray& getEncryptedData() const; void setEncryptedData( const QByteArray& data ); signals: void propertyChanged( void ); void childAdded( CInformationElement* ); void childMoved( int oldPos, int newPos ); void informationHasChanged( void ); protected: // Returns a pointer to the parent element. If this informationElement // is the root element, then the mpParent ptr contains a pointer to the // collection. IParent* mpParent; // this should reduce update-behavior; // if batched==true -> the signal 'propertyChanged()' is not emitted bool mbBatched; QString mDescription; InformationFormat* mpInformationFormat; QString mInformation; QPixmap mIcon; QString mIconFilename; QColor mDescriptionColor; // the color which is used for drawing the description QList* mpChildObjects; QDate mExpiryDate; bool mbExpires; int miInformationYPos; bool mbIsEncryptionEnabled; QString msTmpPasswd; QByteArray mEncryptedData; private: void searchDescription( QString pattern, Qt::CaseSensitivity eCaseSensitive, QTreeWidget& list ); void searchInformation( const QString& sPattern, Qt::CaseSensitivity eCaseSensitive, QTreeWidget& list ); QString extractSearchLine( const QTextCursor& c ) const; }; #endif tuxcards/src/information/CInformationElementHistory.cpp000444 000765 000024 00000013114 11420350116 024102 0ustar00alexstaff000000 000000 /*************************************************************************** CInformationElementHistory.cpp - description ------------------- begin : Mon Dec 01 2003 copyright : (C) 2003 by Alexander Theel email : alex.theel@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #include "../global.h" #include "CInformationElementHistory.h" #include // ------------------------------------------------------------------------------- CInformationElementHistory::CInformationElementHistory( void ) : mList() , miCurrentIndex( INVALID_INDEX ) , mpListener( NULLPTR ) // ------------------------------------------------------------------------------- { } // ------------------------------------------------------------------------------- CInformationElementHistory::~CInformationElementHistory( void ) // ------------------------------------------------------------------------------- { mList.clear(); mpListener = NULLPTR; } // ************** IView ********************************************************* // ------------------------------------------------------------------------------- void CInformationElementHistory::aboutToRemoveElement( CInformationElement* pIE ) // ------------------------------------------------------------------------------- { while ( 0 < mList.contains( pIE ) ) { int iIndex = mList.indexOf( pIE ); if ( iIndex < miCurrentIndex ) { miCurrentIndex--; } else { // There are the cases: // a) iIndex > miCurrentIndex // b) iIndex == miCurrentIndex // do nothing in both cases. } (void)mList.removeAt(iIndex); } if ( 0 == mList.count() ) { miCurrentIndex = INVALID_INDEX; } } // ************** IView - End **************************************************** // ------------------------------------------------------------------------------- void CInformationElementHistory::setListener( IHistoryListener* pListener ) // ------------------------------------------------------------------------------- { mpListener = pListener; } // ------------------------------------------------------------------------------- void CInformationElementHistory::addElement( CInformationElement& ie ) // ------------------------------------------------------------------------------- { // return if same element is added twice (one after the other) if ( INVALID_INDEX != miCurrentIndex ) { CInformationElement* pIE = mList.at(miCurrentIndex); if ( (NULLPTR != pIE) && (pIE == &ie) ) return; } if ( HISTORY_SIZE == mList.count() ) { if ( 0 == miCurrentIndex ) { // if list is full and the current element is the first one, remove // the last element mList.removeLast(); } } if ( 0 < miCurrentIndex ) { for ( int i = 0; i < miCurrentIndex; i++ ) { mList.removeFirst(); } } mList.prepend( &ie ); miCurrentIndex = 0; notifyListener(); } // ------------------------------------------------------------------------------- CInformationElement* CInformationElementHistory::getPrevious( void ) // ------------------------------------------------------------------------------- { if ( (int)(mList.count()-1) == miCurrentIndex ) return NULLPTR; miCurrentIndex++; CInformationElement* pIE = mList.at(miCurrentIndex); notifyListener(); return pIE; } // ------------------------------------------------------------------------------- CInformationElement* CInformationElementHistory::getNext( void ) // ------------------------------------------------------------------------------- { if ( 0 == miCurrentIndex ) return NULLPTR; miCurrentIndex--; CInformationElement* pIE = mList.at(miCurrentIndex); notifyListener(); return pIE; } // ------------------------------------------------------------------------------- void CInformationElementHistory::dump( void ) // ------------------------------------------------------------------------------- { std::cout<<"--History"<getDescription() : "NULLPTR"; std::cout<historyStatusChanged( (int)(mList.count()-1) > miCurrentIndex, 0 < miCurrentIndex ); } tuxcards/src/information/CInformationElementHistory.h000444 000765 000024 00000004125 11420350116 023551 0ustar00alexstaff000000 000000 /*************************************************************************** CInformationElementHistory.h - description ------------------- begin : Mon Dec 01 2003 copyright : (C) 2003 by Alexander Theel email : alex.theel@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #ifndef CINFORMATION_ELEMENT_HISTORY_H #define CINFORMATION_ELEMENT_HISTORY_H #include "CInformationElement.h" #include "IView.h" #include #include "IHistoryListener.h" class CInformationElementHistory : public IView { public: CInformationElementHistory( void ); virtual ~CInformationElementHistory( void ); void setListener( IHistoryListener* pListener ); void addElement( CInformationElement& ie ); CInformationElement* getPrevious( void ); CInformationElement* getNext( void ); void dump( void ); // ************** IView ************************************* virtual void aboutToRemoveElement( CInformationElement* pIE ); // ************** IView - End ******************************* private: #define HISTORY_SIZE 8 #define LAST_POSITION (HISTORY_SIZE - 1) QList mList; #define INVALID_INDEX -1 int miCurrentIndex; IHistoryListener* mpListener; void notifyListener( void ); }; #endif tuxcards/src/information/converter.cpp000555 000765 000024 00000006032 11420350116 020631 0ustar00alexstaff000000 000000 /*************************************************************************** informationformat.cpp - description ------------------- begin : Sat Jul 13 2002 copyright : (C) 2002 by Alexander Theel email : alex.theel@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #include "converter.h" #include #include /** * Takes an informationElement as parameter, recognizes whether it is * an ascii */ // ------------------------------------------------------------------------------- void Converter::convert( CInformationElement& informationElement ) // ------------------------------------------------------------------------------- { QString resultingText; if (informationElement.getInformationFormat() == InformationFormat::RTF) { resultingText = convertRTF2ASCII( informationElement.getInformation() ); informationElement.setInformationFormat( InformationFormat::ASCII ); } else { resultingText = convertASCII2RTF( informationElement.getInformation() ); informationElement.setInformationFormat( InformationFormat::RTF ); } informationElement.setInformation(resultingText); } /** * Converts ASCII-Text to RichtText i.e. not to loos ascii formating. * (if not done; everything will be interpreted as rtf/html) */ // ------------------------------------------------------------------------------- QString Converter::convertASCII2RTF(QString asciiText) // ------------------------------------------------------------------------------- { //QString result = QStyleSheet::convertFromPlainText(asciiText); return asciiText.replace( QRegExp( "\n" ), "
    " ); } /** * Converts RichText to Ascii-Text. */ // ------------------------------------------------------------------------------- QString Converter::convertRTF2ASCII(QString rtfText) // ------------------------------------------------------------------------------- { //QString result = rtfText.replace( QRegExp( "

    " ), "" ); return rtfText; /* Idee: alle Tags entfernen |-> ""

    |-> ""

    |-> "\n\n"
    |-> "\n" |-> "" |-> ""
  • |-> "- "
  • |-> "\n"
      |-> ""
    |-> "" */ } tuxcards/src/information/converter.h000555 000765 000024 00000002455 11420350116 020303 0ustar00alexstaff000000 000000 /*************************************************************************** informationformat.h - description ------------------- begin : Sat Jul 13 2002 copyright : (C) 2002 by Alexander Theel email : alex.theel@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #ifndef CONVERTER_H #define CONVERTER_H #include #include #include "CInformationElement.h" class Converter{ public: static void convert( CInformationElement& ); static QString convertASCII2RTF( QString ); static QString convertRTF2ASCII( QString ); }; #endif tuxcards/src/information/CTreeInformationElement.cpp000444 000765 000024 00000021261 11420350116 023342 0ustar00alexstaff000000 000000 /*************************************************************************** CTreeInformationElement.cpp - description ------------------- begin : Fri Jul 19 2002 copyright : (C) 2002 by Alexander Theel email : alex.theel@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #include "CTreeInformationElement.h" #include "../global.h" #include "../utilities/base64/CBase64Coder.h" // ------------------------------------------------------------------------------- CTreeInformationElement::CTreeInformationElement( CInformationElement* pParent, QString description, QString information, InformationFormat* pFormat, QString sIconFileName, bool expires, QDate date, bool bOpen ) : CInformationElement( pParent, description, information, pFormat, sIconFileName, expires, date ) , mbOpen( false ) // ------------------------------------------------------------------------------- { setOpen( bOpen ); } /** * Adds the CTreeInformationElement 'element' to this element. */ // ------------------------------------------------------------------------------- void CTreeInformationElement::addChild( CTreeInformationElement* pElement ) // ------------------------------------------------------------------------------- { if ( NULLPTR == pElement ) return; mpChildObjects->append( pElement ); pElement->setParent( this ); emit childAdded( pElement ); // if (!mbBatched) emit(childAdded(element)); } // ------------------------------------------------------------------------------- bool CTreeInformationElement::isOpen( void ) // ------------------------------------------------------------------------------- { return mbOpen; } // ------------------------------------------------------------------------------- void CTreeInformationElement::setOpen( bool bOpen ) // ------------------------------------------------------------------------------- { mbOpen = bOpen; if (!mbBatched) emit propertyChanged(); } // ------------------------------------------------------------------------------- QString CTreeInformationElement::toStringObsoleted( void ) // ------------------------------------------------------------------------------- { QString result=""; QString h; // get own name h = mDescription; result += QString::number(h.length()) + "*" + h; // get own text h = mInformation; result += QString::number(h.length()) + "*" + h; //state whether this Knoten is open or not h = ( isOpen() ? "-" : "+" ); result += h; // include iconFilename result += mIconFilename+"*"; int n = childCount(); result += QString::number(n); // add each child CTreeInformationElement* pX; for ( int i = 0; i < mpChildObjects->count(); i++ ) { pX = (CTreeInformationElement*)mpChildObjects->at( i ); if ( pX ) result += pX->toString(); } // add terminationString & header result= "*" +result+ "***"; result= "***" + QString::number(result.length()) + result; return result; } // ------------------------------------------------------------------------------- void CTreeInformationElement::toXML( QDomDocument& xmlDocument, QDomNode& parent ) // ------------------------------------------------------------------------------- { QDomElement thisElement = xmlDocument.createElement("InformationElement"); thisElement.setAttribute("informationFormat", getInformationFormat()->toString()); thisElement.setAttribute("iconFileName", getIconFileName()); thisElement.setAttribute("expires", expires() ? QString("true") : QString("false") ); thisElement.setAttribute("expiryDate", getExpiryDate().toString()); thisElement.setAttribute("isOpen", isOpen() ? "true" : "false" ); thisElement.setAttribute("isEncrypted", isEncryptionEnabled() ? "true" : "false" ); // add description QDomElement description = xmlDocument.createElement("Description"); QDomText text = xmlDocument.createTextNode(getDescription()); description.appendChild(text); if ( hasDescriptionColor() ) description.setAttribute( "color", getDescriptionColor().name() ); thisElement.appendChild(description); // add information QDomElement information = xmlDocument.createElement("Information"); if ( isEncryptionEnabled() ) { if ( !isCurrentlyEncrypted() ) { encrypt(); } // do base64 encodeing CBase64Coder b64Coder = CBase64Coder::getInstance(); QString sB64Representation; b64Coder.encode( sB64Representation, getEncryptedData() ); text = xmlDocument.createCDATASection( sB64Representation ); } else { //text = xmlDocument.createTextNode( getInformation() ); text = xmlDocument.createCDATASection( getInformation() ); } information.appendChild(text); thisElement.appendChild(information); // add children if ( mpChildObjects ) { CInformationElement* pX; for ( int i = 0; i < mpChildObjects->count(); i++ ) { pX = mpChildObjects->at( i ); if ( pX ) pX->toXML( xmlDocument, thisElement ); } } parent.appendChild( thisElement ); } /** * Move this element one position upwards within the sibling * list. If moving upwards is not possible nothing is done. */ // ------------------------------------------------------------------------------- void CTreeInformationElement::moveOneUp( void ) // ------------------------------------------------------------------------------- { if ( NULLPTR == mpParent ) { std::cout<<"parent == 0 -> moving not possible"<moveChildOneUp(this); } /** * Move the specified child element one position upwards within * children list. If moving upwards is not possible or the given * element is not a child of this element nothing is done. */ // ------------------------------------------------------------------------------- void CTreeInformationElement::moveChildOneUp( CTreeInformationElement* pChild ) // ------------------------------------------------------------------------------- { int pos = mpChildObjects->indexOf( pChild ); if ( (pos == -1) || (pos == 0) ) { //std::cout<<"child not found or at first position -> moving not possible"<removeAt( pos ); // do not kill the pointer mpChildObjects->insert( pos-1, pChild ); if (!mbBatched) emit childMoved(pos, pos-1); //std::cout< moving not possible"<moveChildOneDown(this); } /** * Move the specified child element one position downwards within * children list. If moving downwards is not possible or the given * element is not a child of this element nothing is done. */ // ------------------------------------------------------------------------------- void CTreeInformationElement::moveChildOneDown( CTreeInformationElement* pChild ) // ------------------------------------------------------------------------------- { int pos = mpChildObjects->indexOf( pChild ); if ( (pos == -1) || (pos == childCount()-1) ) { //std::cout<<"child not found or at last position -> moving not possible"<removeAt( pos ); // do not kill the pointer mpChildObjects->insert( pos+1, pChild ); if (!mbBatched) emit childMoved(pos, pos+1); //std::cout< #include "CInformationElement.h" #include #include "../global.h" class CTreeInformationElement : public CInformationElement{ public: CTreeInformationElement( CInformationElement* pParent = NULLPTR, QString description="", QString information="", InformationFormat* pFormat = InformationFormat::getByString( "NONE" ), QString sIconFileName = CInformationElement_NO_ICON, bool expires = false, QDate date = QDate::currentDate(), bool isOpen=false ); void addChild( CTreeInformationElement* pElement ); bool isOpen( void ); void setOpen( bool ); QString toStringObsoleted( void ); virtual void toXML( QDomDocument& xmlDocument, QDomNode& parent ); void moveOneUp( void ); void moveChildOneUp( CTreeInformationElement* pChild ); void moveOneDown( void ); void moveChildOneDown( CTreeInformationElement* pChild ); private: bool mbOpen; }; #endif tuxcards/src/information/dot.xpm000444 000765 000024 00000000275 11420350116 017432 0ustar00alexstaff000000 000000 /* XPM */ static const char * dot_xpm[] = { "11 7 2 1", " c None", ". c #000000", " ... ", " ..... ", " ..... ", " ..... ", " ... ", " ", " "}; tuxcards/src/information/format_ascii.xpm000555 000765 000024 00000010017 11420350116 021302 0ustar00alexstaff000000 000000 /* XPM */ static const char *format_ascii_xpm[]={ "22 22 187 2", "Qt c None", "a4 c #000000", "aO c #040404", "aA c #090909", "am c #0d0d0d", ".4 c #0e0e0e", "aa c #101010", "#s c #151515", "#B c #161616", "#M c #171717", "#I c #2e2a22", "#3 c #32261e", "#J c #36322e", "ae c #363232", "#4 c #422e26", ".t c #4f4f4f", ".o c #505050", "aq c #524636", "aP c #535353", ".n c #545454", "#5 c #565252", "aB c #565656", ".m c #585858", "#V c #5a4a3e", "#z c #5a4e36", ".l c #5b5b5b", "#0 c #5e5e5e", ".k c #5f5f5f", "#N c #606060", ".j c #626262", "#C c #636363", ".i c #666666", "#k c #686868", ".h c #696969", "#e c #6b6b6b", ".g c #6d6d6d", ".9 c #6e6e6e", ".f c #707070", "#U c #724e3a", "#R c #72664e", ".Y c #737373", ".e c #747474", ".S c #767676", "#A c #776a56", ".d c #777777", ".N c #787878", ".c c #7b7b7b", "af c #7e766b", ".b c #7e7e7e", ".B c #808080", ".a c #828282", ".v c #838383", "#r c #864a1e", ".# c #868686", "as c #877c6e", "#L c #897960", ".p c #8e522a", ".D c #8e5e36", "#K c #908674", "ag c #908675", ".G c #92622e", "#W c #938978", "#6 c #93897a", "#y c #965a3a", "ar c #998e7f", "#d c #9a4606", ".K c #9a6636", "#X c #9d907d", "#7 c #9d9382", ".3 c #9e4a06", ".X c #a24e06", "ah c #a39882", "#Z c #a48f6f", "aH c #a49985", "#Y c #ac9d85", "#q c #ae6232", "#8 c #aea28d", "at c #afa38e", "ai c #b2a08a", "aV c #b2a38b", "aU c #b2a690", "aG c #b5a593", "#S c #b68a6a", "a# c #b69e7a", "aW c #b8a88c", "aj c #b9a688", ".O c #ba7a3e", "aF c #bbae9c", "a3 c #bc9d70", "aT c #bcb19c", "aN c #bd9f74", "a2 c #bda176", "az c #bda177", "al c #bda27a", "aX c #bdaa8d", "a1 c #bea37b", "a0 c #bea680", "aY c #beaa89", "aZ c #bfa885", "ak c #bfab8d", "#9 c #c0b29b", "#j c #c25e12", ".T c #c28246", "aS c #c3b9a6", ".y c #c3beb0", "aR c #c4bcac", "aQ c #c5bfb1", "#T c #c68662", ".s c #c6c1b6", "au c #c8b79f", "ad c #c9c6bf", ".r c #c9c9c9", ".W c #ca6206", "#p c #ca825e", "#2 c #caae82", ".2 c #ce6602", "#H c #ce8266", "ac c #cfc9c2", "a. c #d0ba9a", ".J c #d1d1d1", "#v c #d2cec8", "aI c #d3c1a8", "ab c #d3ccc5", "#u c #d3cfcf", "#. c #d3d0d0", ".5 c #d5d5d5", ".R c #d66a06", "#t c #d6d6d3", ".x c #d6d6d6", "#h c #da6e3e", ".U c #da924e", "aE c #dacfbd", "av c #dbcbb1", "aM c #dec6aa", "aJ c #e0c9ae", "#i c #e26a2e", ".z c #e29a56", "ay c #e2caa2", "aK c #e4cca8", "ax c #e5cda9", "aL c #e6ceaa", "aw c #e7cfb3", "#b c #ea8e5a", ".8 c #ea9a6e", ".0 c #eeb276", "ap c #efe3d3", "#c c #f27e0e", "#x c #f2b296", "aD c #f2eada", "aC c #f2eae2", "#Q c #f4ece4", "#1 c #f5f1e5", ".Q c #f68606", ".Z c #f6b696", "#a c #f6c6aa", "ao c #f6eee2", "an c #f6f2e6", "#F c #f7efe7", "#n c #f7f3eb", "#f c #f9f5f1", ".V c #fa820a", ".P c #fa8606", ".q c #faae5e", ".7 c #fae6d2", "#P c #faf2ea", "#E c #faf6ee", "#O c #faf6f6", "#m c #fafaf6", "#D c #fafafa", ".C c #fcfcfc", ".H c #fe8206", ".I c #fe8602", ".1 c #fe8606", ".M c #fe8a02", ".F c #fe8a06", ".A c #fe9632", ".L c #fecea6", "#G c #fed2b2", ".E c #fedaba", ".6 c #fedebe", "#w c #fee2c6", "#g c #fee6ca", ".u c #feeaae", "#o c #feead2", "## c #fef2e2", "#l c #fefefa", ".w c #fefefe", "QtQt.#.#.a.b.c.d.e.f.g.h.i.j.k.l.m.n.oQt.p.q", "QtQt.#.r.r.r.r.r.r.r.r.r.r.r.r.r.r.s.t.p.q.u", "QtQt.v.r.w.w.w.w.w.w.x.w.w.w.w.w.w.y.p.z.u.A", "QtQt.B.r.w.w.w.w.w.w.x.w.w.w.w.w.C.D.z.E.A.F", "QtQt.b.r.w.w.w.w.w.w.x.w.w.w.w.C.G.z.E.A.H.I", "QtQt.c.r.x.x.x.x.x.x.x.x.x.x.J.K.z.L.A.H.I.M", "QtQt.N.r.w.w.w.w.w.w.x.w.w.C.O.z.L.A.P.I.Q.R", "QtQt.S.r.w.w.w.w.w.w.x.w.C.T.U.L.A.V.I.Q.W.X", "QtQt.Y.r.w.w.w.w.w.w.x.C.Z.0.L.A.I.1.Q.2.3.4", "QtQt.f.r.x.x.x.x.x.x.5.Z.6.7.8.V.I.Q.W.3.4Qt", "QtQt.9.r.w.w.w.w.w.w#..L###a#b#c.V.2#d.4QtQt", "QtQt#e.r.w.w.w.w.w#f.Z#g.E.8#h#i#j#d.4QtQtQt", "QtQt#k.r.w.w.w#l#m#n.L#o.Z#p#q.p#r.4#sQtQtQt", "QtQt.i.r.x.x#t#u#v.Z#w#x#p#y.p#z.4#A#BQtQtQt", "QtQt#C.r.w#D#m#E#F#G#a#H#y#z#I#J#K#L#MQtQtQt", "QtQt#N.r#l#O#P#Q#R#S#T#U#V#J#W#X#Y#Z#sQtQtQt", "QtQt#0.r#m#E#1#2#R#3#4#5#6#7#8#9a.a#aaQtQtQt", "QtQt.l.rabacad#R#Iae#2afagahaiajakalamQtQtQt", "QtQt.m.ranaoapaq#2arasatauavawaxayazaAQtQtQt", "QtQtaB.raCaDapaEaFaGaHaIaJaKaLayaMaNaOQtQtQt", "QtQtaP.saQaRaSaTaUaVaWaXaYaZa0a1a2a3a4QtQtQt", "QtQta4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4QtQtQt"}; tuxcards/src/information/format_none.xpm000555 000765 000024 00000005756 11420350116 021167 0ustar00alexstaff000000 000000 /* XPM */ static const char *format_none_xpm[]={ "22 22 121 2", "Qt c None", ".j c #000000", "#n c #020202", ".9 c #060606", ".i c #080808", ".5 c #0c0c0c", ".h c #101010", ".Z c #131313", ".u c #141414", ".g c #181818", ".N c #191919", ".f c #212121", ".H c #262626", ".e c #292929", ".B c #2c2c2c", ".d c #313131", ".A c #333333", ".x c #393939", ".c c #3a3a3a", ".y c #3e3e3e", ".w c #3f3f3f", ".b c #424242", ".q c #464646", ".a c #4a4a4a", ".k c #4c4c4c", ".# c #535353", ".V c #820202", ".G c #857f7a", ".p c #989898", ".M c #a09b97", ".o c #b4b4b4", ".F c #b8b1a9", ".U c #bbb2ab", ".Y c #c6b8ac", ".n c #c6c6c6", "#2 c #c7a081", "#P c #c8a487", "#1 c #c8a488", "#C c #c9a88d", "#0 c #c9a88e", ".v c #c9c9c9", "#s c #cbac93", "#Z c #cbad94", "#m c #ccb099", "#Y c #cdb09a", "#j c #ceb49f", "#X c #ceb5a0", "#A c #ceb69d", "#b c #cfb8a5", "#W c #cfb8a6", ".E c #cfcbc4", ".L c #d0c8c1", "#V c #d1bdac", ".8 c #d2c0b1", "#U c #d2c0b2", "#T c #d4c4b8", "#q c #d6c0af", "#S c #d6c8be", ".m c #d6d6d6", "#R c #d7ccc4", "#Q c #d8d0ca", "#v c #d9cbc0", ".3 c #d9cec7", ".l c #dedede", ".z c #e0e0e0", ".t c #e1e1e1", ".K c #e4e0db", "#O c #e7c2a2", "#N c #e8c5a6", "#B c #e9c5a6", "#M c #eac9ac", "#r c #eac9ad", ".T c #eadfd5", "#L c #eccdb3", "#l c #ecceb5", ".s c #ececec", "#K c #eed2ba", "#i c #eed3bc", "#J c #efd6c0", "#z c #efd7c1", "#h c #efd8c3", "#a c #f0d8c3", ".D c #f0eeec", "#y c #f1dac7", "#I c #f1dbc7", "#g c #f1dcc9", ".7 c #f2ddcb", "#H c #f2dece", "#p c #f2dfce", "#x c #f2e0cf", "## c #f3e1d1", ".4 c #f3e1d2", ".6 c #f4e1d2", "#G c #f4e3d4", "#w c #f4e3d5", "#o c #f4e4d6", "#d c #f5e5d8", ".X c #f5e6d9", "#F c #f6e8db", "#E c #f7ebe1", "#D c #f9f0e8", ".S c #faaea3", ".0 c #fad2ce", ".R c #faf4ee", "#t c #fbf5f0", ".2 c #fbf7f3", ".Q c #fcf8f5", ".J c #fdfaf7", "#f c #fdfaf8", "#c c #fdfbf9", ".1 c #fdfcfa", ".C c #fdfdfd", ".W c #fe0202", "#u c #fe7e7a", ".O c #febebe", ".P c #fefcfb", ".I c #fefdfc", "#e c #fefefd", "#. c #fefefe", "#k c #fffefe", ".r c #ffffff", "QtQtQt.#.a.b.c.d.e.f.g.h.i.j.jQtQtQtQtQtQtQt", "QtQtQt.k.l.l.l.l.l.l.m.n.o.j.p.jQtQtQtQtQtQt", "QtQtQt.q.l.r.r.r.r.r.r.s.t.u.v.p.jQtQtQtQtQt", "QtQtQt.w.l.r.r.r.r.r.r.r.s.e.r.v.p.jQtQtQtQt", "QtQtQt.x.l.r.r.r.r.r.r.r.r.y.z.r.v.p.jQtQtQt", "QtQtQt.A.l.r.r.r.r.r.r.r.r.#.y.e.u.j.jQtQtQt", "QtQtQt.B.l.r.r.r.r.r.r.r.r.C.D.E.F.G.jQtQtQt", "QtQtQt.H.l.r.r.r.r.r.r.r.r.I.J.K.L.M.jQtQtQt", "QtQtQt.N.l.r.O.r.r.r.r.P.Q.R.S.O.T.U.jQtQtQt", "QtQtQt.N.l.r.V.W.r.r.r.P.Q.S.W.V.X.Y.jQtQtQt", "QtQtQt.Z.l.r.z.V.W.0.1.2.S.W.V.3.4.Y.jQtQtQt", "QtQtQt.5.l.r.r.z.V.W.0.0.W.V.3.6.7.8.jQtQtQt", "QtQtQt.9.l.r.r#..z.V.W.W.V.3##.7#a#b.jQtQtQt", "QtQtQt.9.l.r.r#.#c.0.W.W.S#d##.7#a#b.jQtQtQt", "QtQtQt.j.l.r#e#f.0.W.V.V.W.S#g#h#i#j.jQtQtQt", "QtQtQt.j.l#k.J.0.W.V.3.3.V.W.S#i#l#m.jQtQtQt", "QtQtQt#n.l.J.0.W.V.3#o#p#q.V.W.S#r#s.jQtQtQt", "QtQtQt.j.l#t#u.V#v#w#x#y#z#A.V#u#B#C.jQtQtQt", "QtQtQt.j.l#D#E#F#G#H#I#J#K#L#M#N#O#P.jQtQtQt", "QtQtQt.j#Q#Q#R#S#T#U#V#W#X#Y#Z#0#1#2.jQtQtQt", "QtQtQt.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.jQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt"}; tuxcards/src/information/format_rtf.png000444 000765 000024 00000003644 11420350116 020772 0ustar00alexstaff000000 000000 PNG  IHDR szzgAMA abKGD pHYs  #utIME5!IDATx]lS8v& [ NP"hU:&1jX EIcB))4 ftj@ "V1BB>c~N !nJG>~y10N8<\.H)QJ>s||>REB)ev%9[iY b~~9p Q,o߾:5afaqqz{{9r3!JlҒ.dh4J$^R `%έQuD"!*hsh8ؚ @)y, !J+, qΝ5!*Vֺ$Cy^4;GF<6^##lذxrUd.Y bRxY}K4EFׁh8B+HG+$4_M3=zdu]L,74-!&x՟Lj}h壤@+?\壵 `9^l.+eێ7{uI%a墶P22pA?vk*\? '%d&g7oґid}u5Q7oq=g~@D?QOծ @.:PÇffy؀}/dv֭Q%XaZ!%Vl1qJiNJy GJ|2IpEGYZz z%=,Ty*U02= äwJ<;yb{/ n${h7fJǏgCMDu>1TPފ p4]oO>9SpB:_?G-56/."D0 HA%r(O&4Nt%R<===|%ҩ8!bxҚ{X&`YF /̡%#_c׆@-믷榍INp1PDׅI&֭W>JJ(k#>ODZ-PBXX" IJxQTʰ,8!ĪDZ00Msi$dYhC(.eI\޲O%᪣P\nOZl0O˕ (oP|3),lF!hP) *H/D 2"2?B$KbDX(}/Q:H+C"~k-ڤnIȁ F-*rضC`ۅ5BPO>Dc IENDB`tuxcards/src/information/format_rtf.xpm000444 000765 000024 00000013040 11420350116 021001 0ustar00alexstaff000000 000000 /* XPM */ static const char * format_rtf_xpm[] = { "22 22 284 2", " c None", ". c #938775", "+ c #A1988C", "@ c #9D958A", "# c #999288", "$ c #958F86", "% c #928C84", "& c #8C8880", "* c #85817B", "= c #77746E", "- c #777572", "; c #998F80", "> c #DDDDDD", ", c #EFEFEF", "' c #EEEEEE", ") c #E7E7E7", "! c #CECECD", "~ c #A1A1A0", "{ c #858585", "] c #2D2D2D", "^ c #978D7E", "/ c #E6E6E6", "( c #FFFFFF", "_ c #FEFEFE", ": c #F5F5F5", "< c #CFCECE", "[ c #A4A4A4", "} c #9A9A9A", "| c #262626", "1 c #958A7D", "2 c #A6A6A6", "3 c #EBEBEB", "4 c #959595", "5 c #242424", "6 c #92897B", "7 c #FCFCFC", "8 c #EAEAEA", "9 c #8D8D8D", "0 c #F0F0F0", "a c #969696", "b c #505050", "c c #8D7E72", "d c #E0C9C9", "e c #F29898", "f c #C95654", "g c #A83835", "h c #CA9695", "i c #DE8787", "j c #C7A4A4", "k c #F3F3F3", "l c #EDEDED", "m c #626262", "n c #5D5D5C", "o c #70706E", "p c #797877", "q c #6D6D6D", "r c #A83F3A", "s c #DD5C5C", "t c #8B544E", "u c #716D67", "v c #827F79", "w c #CB5E5C", "x c #DC4040", "y c #996969", "z c #E0E0E0", "A c #ECEBEB", "B c #D0D0CD", "C c #B7B6B1", "D c #96938D", "E c #716E6A", "F c #585654", "G c #AF2121", "H c #D25554", "I c #7C342E", "J c #93908E", "K c #D7D7D7", "L c #F17272", "M c #A93534", "N c #6A6463", "O c #F5F4F3", "P c #E7E6E4", "Q c #D4D2CE", "R c #BEBAB1", "S c #979189", "T c #3B3834", "U c #A61616", "V c #DE5959", "W c #7F312C", "X c #7F7E7C", "Y c #D8D8D8", "Z c #F9F9F9", "` c #F5D4D4", " . c #F48383", ".. c #9C2C2A", "+. c #91908F", "@. c #FBFAF8", "#. c #F8F4EF", "$. c #EDE9E3", "%. c #E1DCD4", "&. c #CBC7BE", "*. c #ACA69B", "=. c #3A3733", "-. c #C13333", ";. c #AA3B39", ">. c #4F3D38", ",. c #C0C0C0", "'. c #FAFAFA", "). c #F2A5A5", "!. c #FD7171", "~. c #782D2D", "{. c #B1B1B0", "]. c #F5F3F1", "^. c #FAF6F1", "/. c #F8F2EA", "(. c #F0EAE0", "_. c #E8E2D8", ":. c #DAD3C7", "<. c #B8AF9E", "[. c #3B3833", "}. c #DE6969", "|. c #AA2E2B", "1. c #5A564F", "2. c #F45F5F", "3. c #E74D4D", "4. c #45413C", "5. c #BAB9B7", "6. c #F5F2ED", "7. c #F7F2EA", "8. c #F5EFE5", "9. c #F1EADD", "0. c #EBE3D6", "a. c #E2D8C9", "b. c #C1B6A3", "c. c #3C3933", "d. c #C84141", "e. c #CE3C3C", "f. c #5C110D", "g. c #6C6760", "h. c #E2E2E2", "i. c #E97D7D", "j. c #FB6D6D", "k. c #A21B1B", "l. c #8A8988", "m. c #D9D5D0", "n. c #F5F0E7", "o. c #F5EEE3", "p. c #F3EBDD", "q. c #F1E7D7", "r. c #ECE1CF", "s. c #E4D8C5", "t. c #C5B7A0", "u. c #DA4F4F", "v. c #EE6D6D", "w. c #726E66", "x. c #E4E4E4", "y. c #F1CDCD", "z. c #EC7171", "A. c #DA3737", "B. c #611E19", "C. c #9F9B96", "D. c #D6A19D", "E. c #E4DDD3", "F. c #F0E7DA", "G. c #F2E7D6", "H. c #F0E4D0", "I. c #ECDEC8", "J. c #E7D9C2", "K. c #CAB89F", "L. c #E55050", "M. c #F55A5A", "N. c #757069", "O. c #D9B0B0", "P. c #CF5B5B", "Q. c #B13333", "R. c #C10F0F", "S. c #844A47", "T. c #C88684", "U. c #B97672", "V. c #BFB7AC", "W. c #E6DBCA", "X. c #F0E3CF", "Y. c #EEE0C8", "Z. c #ECDBC3", "`. c #E6D6BA", " + c #CCB99C", ".+ c #C23232", "++ c #EB5252", "@+ c #AB2221", "#+ c #C75756", "$+ c #735858", "%+ c #995B59", "&+ c #DA2828", "*+ c #C04C4B", "=+ c #B4736F", "-+ c #8F8176", ";+ c #CDC3B5", ">+ c #E9DDC9", ",+ c #EEDFC8", "'+ c #ECDCC2", ")+ c #EAD8BD", "!+ c #E7D4B5", "~+ c #CEB998", "{+ c #3D3932", "]+ c #551E16", "^+ c #83231D", "/+ c #933B35", "(+ c #832F2B", "_+ c #64615E", ":+ c #CFCCC9", "<+ c #A8A39B", "[+ c #983832", "}+ c #99524C", "|+ c #827B6F", "1+ c #CBC1B2", "2+ c #E8DAC6", "3+ c #EDDEC7", "4+ c #ECDBC1", "5+ c #EAD8BC", "6+ c #E8D4B5", "7+ c #E7D1B0", "8+ c #CEB694", "9+ c #5F5C57", "0+ c #D5D3D2", "a+ c #F4EFE8", "b+ c #EAE4DC", "c+ c #B7B0A5", "d+ c #AFA79A", "e+ c #D0C6B6", "f+ c #E5D8C4", "g+ c #EDDEC6", "h+ c #ECDBC0", "i+ c #EAD8BB", "j+ c #E6D0AE", "k+ c #E5CCA8", "l+ c #CDB38D", "m+ c #6E6B65", "n+ c #E2DFDC", "o+ c #F6F0E6", "p+ c #F3ECE0", "q+ c #F0E6D7", "r+ c #EEE2D0", "s+ c #EDE0CA", "t+ c #EDDDC6", "u+ c #ECDAC0", "v+ c #EAD7BA", "w+ c #E8D3B4", "x+ c #E5CCA7", "y+ c #E3C8A2", "z+ c #CDB087", "A+ c #3D3831", "B+ c #6D6A64", "C+ c #E1DED9", "D+ c #F4ECE1", "E+ c #F1E9DA", "F+ c #F1E5D2", "G+ c #EFE2CE", "H+ c #EEDDC6", "I+ c #E9D6B9", "J+ c #E6CFAD", "K+ c #E4CCA7", "L+ c #E3C7A0", "M+ c #CCAF83", "N+ c #6A6761", "O+ c #D1CDC4", "P+ c #D8D0C5", "Q+ c #D6CDBE", "R+ c #D7C9B5", "S+ c #D4C8B3", "T+ c #D5C4AB", "U+ c #D3C1A5", "V+ c #D2BD9E", "W+ c #D0BA98", "X+ c #CFB693", "Y+ c #CDB38E", "Z+ c #CDB088", "`+ c #B7996D", " @ c #3B372F", ".@ c #4B4843", "+@ c #3E3B37", "@@ c #3D3B36", "#@ c #3D3A35", "$@ c #3D3A34", "%@ c #3D3933", "&@ c #32302B", " . + @ # $ % & * = - ", " ; > , , , , ' ) ! ~ { ] ", " ^ / ( ( ( ( ( _ : < [ } | ", " 1 / ( ( ( ( ( ( ( ) 2 3 4 5 ", " 6 / _ 7 7 7 7 7 _ 8 9 ' 0 a b ", " c d e f g h i j k l m n o p q ", " r s t u v w x y z 7 A B C D E F ", " G H I J K 0 L M N > 7 O P Q R S T ", " U V W X Y Z ` ...+.3 @.#.$.%.&.*.=. ", " -.;.>.,.'.( ).!.~.{.].^./.(._.:.<.[. ", " }.|.1.Y ( 7 2.3.4.5.6.7.8.9.0.a.b.c. ", " d.e.f.g.h.7 i.j.k.l.m.n.o.p.q.r.s.t.c. ", " u.v. w.x.y.z.A.B.C.D.E.F.G.H.I.J.K.c. ", " L.M. N.O.P.Q.R.S.T.U.V.W.X.Y.Z.`. +c. ", " .+++ @+#+$+%+&+*+=+-+;+>+,+'+)+!+~+{+ ", " ]+^+/+(+_+:+<+[+}+|+1+2+3+4+5+6+7+8+{+ ", " 9+0+a+b+c+d+e+f+g+h+i+6+j+k+l+{+ ", " m+n+o+p+q+r+s+t+u+v+w+j+x+y+z+A+ ", " B+C+D+E+F+G+H+u+I+w+J+K+y+L+M+A+ ", " N+O+P+Q+R+S+T+U+V+W+X+Y+Z+M+`+ @ ", " .@+@@@@@#@#@$@$@%@%@{+{+A+A+ @&@ ", " "}; tuxcards/src/information/htmlwriter.cpp000555 000765 000024 00000021455 11420350116 021031 0ustar00alexstaff000000 000000 /*************************************************************************** htmlwriter.cpp - description ------------------- begin : Son Jul 28 2002 copyright : (C) 2002 by Alexander Theel email : alex.theel@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #include "htmlwriter.h" #include "../version.h" #include #include #include #include //Added by qt3to4: #include #include "dot.xpm" #include "space15.xpm" const QString HTMLWriter::TUX_HTMLEXPORT_SUBDIR = "Notes"; const QString HTMLWriter::TUX_SPACER = "space15.png"; const QString HTMLWriter::TUX_DOT = "dot.png"; const QString HTMLWriter::USE_UTF8_CHARSET = ""; QStringList HTMLWriter::static_List = QStringList(); /** * Exports a aollection to HTML. * Returns 'TRUE' if successful, otherwise 'FALSE'. */ // ------------------------------------------------------------------------------- bool HTMLWriter::writeCollectionToHTMLFile( CInformationCollection& collection, const QString& dirPath ) // ------------------------------------------------------------------------------- { QDir dir = QDir( dirPath ); bool bSuccess = createSubDir( dir ); if ( !bSuccess ) return FALSE; bSuccess = createImages( dir ); if ( !bSuccess ) return FALSE; static_List.clear(); // TODO: Check if files could be opened, also. If not -> return 'FALSE'. createTopFrame( dir ); CInformationElement* pRootElem = collection.getRootElement(); if ( NULLPTR != pRootElem ) { createIndexFile( dir, pRootElem->getDescription() ); createTreeFrame( collection, dir ); } static_List.clear(); return TRUE; } // ------------------------------------------------------------------------------- bool HTMLWriter::createSubDir( const QDir& dir ) // ------------------------------------------------------------------------------- { bool bSuccess = dir.mkdir( TUX_HTMLEXPORT_SUBDIR ); if ( FALSE == bSuccess ) return FALSE; return TRUE; } // ------------------------------------------------------------------------------- bool HTMLWriter::createImages( const QDir& dir ) // ------------------------------------------------------------------------------- { // create dot and space and write them to disk QPixmap dot( dot_xpm ); bool bRetVal = dot.save( dir.absolutePath() + "/" + TUX_DOT, "PNG" ); QPixmap space( space15_xpm ); bRetVal = bRetVal | space.save( dir.absolutePath() + "/" + TUX_SPACER, "PNG" ); return bRetVal; } // ------------------------------------------------------------------------------- void HTMLWriter::createIndexFile( const QDir& dir, const QString& sRootDescription ) // ------------------------------------------------------------------------------- { // "index.html" erstellen; // we could not do this in advance -> because we did not know the 'name' of the "root-page" QString index=" TuxCards-HTMLExport"+USE_UTF8_CHARSET+"\n\n"; index+="\n"; index+="\n"; index+="\n"; index+=" \n"; index+=" \n"; index+=" \n"; index+=" \n"; index+="\n"; index+=" <body bgcolor=\"#F0F0E1\">\n"; index+=" Sie benötigen einen Framefähigen Browser.<br>\n"; index+=" You do need a browser that supports frames.\n"; index+=" </body>\n"; index+="\n"; index+="\n"; index+=""; QFile f2( dir.absolutePath() + "/index.html" ); if ( f2.open(QIODevice::WriteOnly) ) { // file opened successfully QTextStream t( &f2 ); // use a text stream t.setCodec( "UTF-8" ); t<\n\n"; CInformationElement* pCollectionRootElement = collection.getRootElement(); if ( NULLPTR != pCollectionRootElement ) { convertInformationElementToHTML( *pCollectionRootElement, dir, sTreeHTML ); } sTreeHTML.append("\n"); QFile f( dir.absolutePath()+"/"+"treeHTML.html" ); if ( f.open(QIODevice::WriteOnly) ) // file opened successfully { QTextStream t( &f ); // use a text stream t.setCodec( "UTF-8" ); t<\n "+element.getDescription()+" \n"; QString text = element.getInformation(); t<< text.replace(QRegExp("\n"),"
    \n"); t<<"\n"; } else { QString sText = element.getInformation(); sText.replace( QRegExp(""), USE_UTF8_CHARSET ); // set correct charset t<"); iTabCount++; sTreeHTML.append(QString("") + "
    " + element.getDescription()+"
    \n"); QList* pList = element.getChildren(); if ( pList ) { CInformationElement* pX; for ( int i = 0; i < pList->count(); i++ ) { pX = pList->at( i ); if ( pX ) convertInformationElementToHTML( *pX, dir, sTreeHTML, iTabCount ); } } } // ------------------------------------------------------------------------------- void HTMLWriter::createTopFrame( const QDir& dir ) // ------------------------------------------------------------------------------- { // "top.html" erstellen QString top = " TuxCards-HTMLExport\n\n"; top += "
    \n

    TuxCards-HTMLExport

    \n"; top += ""; top += TUX_VERSION; top += " - written by Alexander Theel\n"; top +=""; QFile f( dir.absolutePath()+"/top.html" ); if ( f.open(QIODevice::WriteOnly) ) // file opened successfully { QTextStream t( &f ); // use a text stream t< #include #include "CInformationCollection.h" #include /** *@author Alexander Theel */ class HTMLWriter { public: HTMLWriter(); static bool writeCollectionToHTMLFile( CInformationCollection& collection, const QString& dirPath ); private: static void createIndexFile( const QDir& dir, const QString& sRootDescription ); static void createTreeFrame( CInformationCollection& collection, const QDir& dir ); static void convertInformationElementToHTML( CInformationElement& element, const QDir& dir, QString& sTreeHTML, int iTabCount = 0 ); static void createTopFrame( const QDir& dir ); static bool createSubDir( const QDir& dir ); static bool createImages( const QDir& dir ); static const QString TUX_HTMLEXPORT_SUBDIR; static const QString TUX_SPACER; static const QString TUX_DOT; static const QString USE_UTF8_CHARSET; static QStringList static_List; }; #endif tuxcards/src/information/IHistoryListener.h000444 000765 000024 00000003134 11420350116 021544 0ustar00alexstaff000000 000000 /*************************************************************************** IHistoryListener.h - description ------------------- begin : Mon Dec 01 2003 copyright : (C) 2003 by Alexander Theel email : alex.theel@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #ifndef IHISTORY_LISTENER_H #define IHISTORY_LISTENER_H class IHistoryListener{ public: virtual ~IHistoryListener(){}; /** * This method is called when ever the status of the current * element within the history has changed. * * The parameter 'bHasPreviousElement' states whether the current * "history-element" does have a previous element. * The parameter 'bHasNextElement' states whether the current * "history-element" does have a next element. */ virtual void historyStatusChanged( bool bHasPreviousElement, bool bHasNextElement ) = 0; }; #endif tuxcards/src/information/informationformat.cpp000555 000765 000024 00000007321 11420350116 022362 0ustar00alexstaff000000 000000 /*************************************************************************** informationformat.cpp - mDescription ------------------- begin : Sat Jul 13 2002 copyright : (C) 2002 by Alexander Theel email : alex.theel@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #include "../global.h" #include "informationformat.h" #include #include "format_none.xpm" #include "format_ascii.xpm" #include "format_rtf.xpm" /*const*/ InformationFormat* InformationFormat::NONE = NULLPTR; /*const*/ InformationFormat* InformationFormat::ASCII = NULLPTR; /*const*/ InformationFormat* InformationFormat::RTF = NULLPTR; // ------------------------------------------------------------------------------- InformationFormat::InformationFormat(QString description, QImage image) : mDescription( description ) , mImage( image ) // ------------------------------------------------------------------------------- { } /** * Two InformationFormats are equal if the mDescription is equal. */ // ------------------------------------------------------------------------------- bool InformationFormat::equals( InformationFormat* pAnotherFormat ) // ------------------------------------------------------------------------------- { if ( !pAnotherFormat ) return false; return ( toString() == pAnotherFormat->toString() ); } // ------------------------------------------------------------------------------- InformationFormat* InformationFormat::canbeConvertedTo( void ) // ------------------------------------------------------------------------------- { // needs to be implemented return this; } // ------------------------------------------------------------------------------- QPixmap InformationFormat::getPixmap( void ) // ------------------------------------------------------------------------------- { QPixmap pixmap; pixmap.fromImage( mImage, Qt::AutoColor ); return pixmap; } // ------------------------------------------------------------------------------- QString InformationFormat::toString( void ) // ------------------------------------------------------------------------------- { return mDescription; } /** * Returns a format that was parsed from the string 'format'; if * no informationFormat was recognized -> 'NONE' is returned. */ // ------------------------------------------------------------------------------- InformationFormat* InformationFormat::getByString( const QString& sFormat ) // ------------------------------------------------------------------------------- { static bool static_bInitializationDone = false; if ( !static_bInitializationDone ) { NONE = new InformationFormat( "NONE", QImage(format_none_xpm) ); ASCII = new InformationFormat( "ASCII", QImage(format_ascii_xpm) ); RTF = new InformationFormat( "RTF", QImage(format_rtf_xpm) ); static_bInitializationDone = true; } if ( sFormat == "RTF") return RTF; else if ( sFormat == "ASCII") return ASCII; else return NONE; } tuxcards/src/information/informationformat.h000555 000765 000024 00000004161 11420350116 022026 0ustar00alexstaff000000 000000 /*************************************************************************** informationformat.h - description ------------------- begin : Sat Jul 13 2002 copyright : (C) 2002 by Alexander Theel email : alex.theel@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #ifndef INFORMATION_FORMAT_H #define INFORMATION_FORMAT_H #include #include #include class InformationFormat{ public: static InformationFormat* getByString( const QString& sFormat ); bool equals( InformationFormat* ); InformationFormat* canbeConvertedTo( void ); QPixmap getPixmap( void ); QString toString( void ); private: QString mDescription; QImage mImage; /** * These must be pointers. If these are "non-pointer" variables then the message * "QPaintDevice: Must construct a QApplication before a QPaintDevice" appears * within the shell and the application cannot be started. * * Since an InformationFormat contains a QImage * (i.e. a QPaintDevice), the static members must be initialized * after the application was started. This is done via "pointer-variables". */ static /*const*/ InformationFormat* NONE; static /*const*/ InformationFormat* ASCII; static /*const*/ InformationFormat* RTF; InformationFormat( QString, QImage ); //~InformationFormat(); }; #endif tuxcards/src/information/IParent.h000444 000765 000024 00000003461 11420350116 017631 0ustar00alexstaff000000 000000 /*************************************************************************** IParent.h - description ------------------- begin : Thu Dec 04 2003 copyright : (C) 2003 by Alexander Theel email : alex.theel@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #ifndef IPARENT_H #define IPARENT_H #include "IRemoveElementListener.h" #include class CInformationElement; class IParent : public IRemoveElementListener { public: // Use a 'IParent'-ptr within the constructor; if we have a better // idea we might remove these method from the interface. virtual QString getDescription( void ) const = 0; virtual IParent* getParent( void ) const = 0; /** * This method is called from a child in order to cause its * deletion. */ virtual void removeChild( CInformationElement* pIE ) = 0; // ****************** IRemoveElementListener ********************* /** * This method is called just before the information element 'pIE' * is removed. */ virtual void aboutToRemoveElement( CInformationElement* pIE ) = 0; }; #endif tuxcards/src/information/IRemoveElementListener.h000444 000765 000024 00000002566 11420350116 022662 0ustar00alexstaff000000 000000 /*************************************************************************** IRemoveElementListener.h - description ------------------- begin : Mon Dec 02 2003 copyright : (C) 2003 by Alexander Theel email : alex.theel@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #ifndef IREMOVE_ELEMENT_LISTENER_H #define IREMOVE_ELEMENT_LISTENER_H class CInformationElement; class IRemoveElementListener{ public: virtual ~IRemoveElementListener(){}; /** * This method is called just before the information element 'pIE' * is removed. */ virtual void aboutToRemoveElement( CInformationElement* pIE ) = 0; }; #endif tuxcards/src/information/IView.h000444 000765 000024 00000002613 11420350116 017310 0ustar00alexstaff000000 000000 /*************************************************************************** IView.h - description ------------------- begin : Mon Dec 02 2003 copyright : (C) 2003 by Alexander Theel email : alex.theel@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #ifndef IVIEW_H #define IVIEW_H #include "IRemoveElementListener.h" class IView : public IRemoveElementListener{ public: // ****************** IRemoveElementListener ********************* /** * This method is called just before the information element 'pIE' * is removed from the data collection. */ virtual void aboutToRemoveElement( CInformationElement* pIE ) = 0; }; #endif tuxcards/src/information/optional/000755 000765 000024 00000000000 11420350116 017741 5ustar00alexstaff000000 000000 tuxcards/src/information/Path.cpp000555 000765 000024 00000005143 11420350116 017520 0ustar00alexstaff000000 000000 /*************************************************************************** Path.cpp - description ------------------- begin : Fri Jan 09 2002 copyright : (C) 2003 by Alexander Theel email : alex.theel@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #include "../global.h" #include "Path.h" #include QString Path::separator = "//"; // ------------------------------------------------------------------------------- Path::Path( IParent* pElement ) : mPathList() // ------------------------------------------------------------------------------- { while ( (NULLPTR != pElement) && ( INFORMATION_COLLECTION_DESC != pElement->getDescription()) ) { mPathList.prepend( pElement->getDescription() ); pElement = pElement->getParent(); } //std::cout<<"Path::Path() - "< #include "IParent.h" class Path{ public: // Use a 'IParent'-ptr within the constructor; if we have a better // idea we might use 'CInformationElement*' again. Path( IParent* pElement ); Path( const QString& sPathString ); bool isEmpty( void ) const; QStringList getPathList( void ) const; QString toString( void ) const; private: QStringList mPathList; static /*const*/ QString separator; }; #endif tuxcards/src/information/space15.xpm000444 000765 000024 00000000153 11420350116 020100 0ustar00alexstaff000000 000000 /* XPM */ static const char * space15_xpm[] = { "15 1 2 1", " c None", ". c #000000", " "}; tuxcards/src/information/xmlpersister.cpp000555 000765 000024 00000027143 11420350116 021371 0ustar00alexstaff000000 000000 /*************************************************************************** xmlpersister.cpp - description ------------------- begin : Mit Aug 14 2002 copyright : (C) 2002 by Alexander Theel email : alex.theel@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #include "xmlpersister.h" #include "../global.h" #include #include "../utilities/base64/CBase64Coder.h" QString XMLPersister::pathOfLastActiveElement(""); bool XMLPersister::bCurrentElementIsBase64Encrypted = false; /************************ loading **********************************/ // ------------------------------------------------------------------------------- CInformationCollection* XMLPersister::createInformationCollection( QFile& xmlFile ) // ------------------------------------------------------------------------------- { QDomDocument xmlDocument( "tuxcards_data_file" ); bool bResult = createDomDocumentFromFile( xmlFile, xmlDocument ); if ( bResult ) { return createInformationCollection( xmlDocument ); } return NULLPTR; } // ------------------------------------------------------------------------------- CInformationCollection* XMLPersister::createInformationCollection( QString xmlString ) // ------------------------------------------------------------------------------- { QDomDocument* xmlDocument = createDomDocumentFromString(xmlString); if ( NULLPTR != xmlDocument ) { return createInformationCollection( *xmlDocument ); } return NULLPTR; } // ------------------------------------------------------------------------------- CInformationCollection* XMLPersister::createInformationCollection( QDomDocument& doc ) // ------------------------------------------------------------------------------- { // create the collection CInformationCollection* collection = new CInformationCollection(); CTreeInformationElement* e = new CTreeInformationElement(); collection->registerAsListenerOf( e ); if ( !doc.documentElement().isNull() ) { QDomElement* pDomElem = parseCollectionDataAndGetRootInformationElement( doc.documentElement() ); if ( NULLPTR != pDomElem ) { parseAttributes(*pDomElem, *e); parseChildrenOf(*pDomElem, *e); } } collection->setRootElement( e ); return collection; } /* if ( !doc->documentElement().isNull() ){ parseAttributes(doc->documentElement(), e); parseChildrenOf(doc->documentElement(), e); } collection->setRootElement(e); */ // ------------------------------------------------------------------------------- QDomElement* XMLPersister::parseCollectionDataAndGetRootInformationElement( QDomNode node ) // ------------------------------------------------------------------------------- { QDomElement* retVal = NULLPTR; if ( node.isElement() ) { QDomElement elem = node.toElement(); //cout<<"element; tagname= "< lastActiveElement = "<getInformation()) ) // informationElement->setInformationFormat(&InformationFormat::RTF); // else // informationElement->setInformationFormat(&InformationFormat::ASCII); } } /** * Parses the attributes of the description for a CTreeInformationElement * (which is essentially the description color). */ // ------------------------------------------------------------------------------- void XMLPersister::parseDescriptionAttributes( QDomElement& elem, CTreeInformationElement& informationElem ) // ------------------------------------------------------------------------------- { QDomNamedNodeMap attributes = elem.attributes(); if ( !attributes.namedItem("color").isNull() ) { QColor c( attributes.namedItem("color").toAttr().value() ); Q_ASSERT( c.isValid() ); informationElem.setDescriptionColor( c ); } } /** * parses the attributes for a CTreeInformationElement */ // ------------------------------------------------------------------------------- void XMLPersister::parseAttributes( QDomElement& elem, CTreeInformationElement& informationElem ) // ------------------------------------------------------------------------------- { QDomNamedNodeMap attributes = elem.attributes(); QString s = ( attributes.namedItem("informationFormat").isNull() ? QString("ASCII") : attributes.namedItem("informationFormat").toAttr().value() ); Q_ASSERT( 0 != s.compare("NONE") ); informationElem.setInformationFormat(InformationFormat::getByString(s)); //std::cout<<"XMLP::parseAttr; format= "<setContent( &xmlFile ) ) { // xmlFile.close(); // return 0; // } // xmlFile.close(); // // return doc; } // ------------------------------------------------------------------------------- QDomDocument* XMLPersister::createDomDocumentFromString( QString xmlString ) // ------------------------------------------------------------------------------- { QDomDocument* doc = new QDomDocument( "tuxcards_data_file" ); if ( !doc->setContent(xmlString) ) return NULLPTR; return doc; } // ------------------------------------------------------------------------------- QString XMLPersister::getPathOfLastActiveElement( void ) // ------------------------------------------------------------------------------- { return pathOfLastActiveElement; } /************************ saving ***********************************/ // ------------------------------------------------------------------------------- void XMLPersister::save( CInformationCollection& collection, QString fileName ) // ------------------------------------------------------------------------------- { // TODO: save something like a version string with it (like: "TuxCardsV0.5") QString s = collection.toXML(); QFile f(fileName); if ( f.open(QIODevice::WriteOnly) ) { QTextStream t( &f ); t.setCodec( "UTF-8" ); t< #include #include #include #include "CInformationCollection.h" #include "CTreeInformationElement.h" class XMLPersister { public: // loading; static CInformationCollection* createInformationCollection( QFile& xmlFile ); static CInformationCollection* createInformationCollection( QString xmlString ); static QString getPathOfLastActiveElement( void ); // saving static void save( CInformationCollection&, QString filename ); private: // loading; static CInformationCollection* createInformationCollection( QDomDocument& doc ); static bool createDomDocumentFromFile( QFile& xmlFile, QDomDocument& doc ); static QDomDocument* createDomDocumentFromString( QString xmlString ); static void parseChildrenOf( QDomNode& node, CTreeInformationElement& parent ); static void parseNode( QDomNode& node, CTreeInformationElement& informationElement ); static void parseDescriptionAttributes( QDomElement& elem, CTreeInformationElement& informationElem ); static void parseAttributes( QDomElement& elem, CTreeInformationElement& infoElem ); static QDomElement* parseCollectionDataAndGetRootInformationElement( QDomNode node ); static QString pathOfLastActiveElement; static bool bCurrentElementIsBase64Encrypted; // used when reading from file only }; #endif tuxcards/src/information/optional/format_ascii.png000444 000765 000024 00000004166 11420350116 023114 0ustar00alexstaff000000 000000 PNG  IHDR"":G gAMA abKGDC pHYs  #utIME 2GIDATx[lsٝ]{mlBЄ@*Ԓ&VJUUE}EU"UCiк>H)j*RZDB悀bB0X]{sîknv"f|9`;xT*OZ%(jyxRR/_F)T ?| SSS޽{e B}}}?~$huV_vw߿_>}ZgJ)֥RIk׮m۶^ h`1`ޏT}Dj?d)޽/̽@ `xhRyt*x6#I eFFF_v'|:юыgCq0[y{ 1+abbX:d3Xfc}Xb4Dl,ALL s}]px6۶NE,-qaܰB ~o 4\OC`< !lAzatiȧ@STR -E,$n$lliEms֛WH /Åa(t4 [A}ah 'Dضifo0|J2VLN d2@TamX:%f쇻Zd(mUHm `[."p;_s^r#LAHO((v,- I[4w) UdࣕDIJH%A 2: Yh))w9E/15YH0M XJ6<pDZG*4Rxh` [w(j$pkJT)N4êE:9?< _cd'H1PR4M :d3Xuu/ёx~g99,bHӌXK ,BRejЪe!=@cjE*9ʟ:˷Y90wdEk pAidHt mNH7I,uBUyZRyHZȝ[0 W~1BNUA9)qV,cr2CupPAMzxlWtwisrfM<9 gHZ$= @J6/RIE0[A^A3P*@3jyn͑#Gd'7L\f;S,+DQb㚠Ԝ(U eh-.VbʕDp4%kM0Lv/[tZqLCTAUN wPaCK1O2^>`޽{d9E/̥[| "[%0 =3h l .?  ,"ÒD&(N*$q?,BٳSW_(8-jiJ\)x7lc/j'houNIM~DYΉ#&LjD,l#iR@Ⱥ2brX4cZF̵i[HM̧RT訍V4 TϾX-+ltK,Bqbh\>d6GȲZB*C*d 3'@* ʎq2!sX!O4bP;.JkY)渟T*!I^Y(%4ҵĜ e,؃7@"ѡw킨"F4g_hbvmMmA}eK@ @ XJՅԶ' T]'gkIENDB`tuxcards/src/information/optional/format_ascii.xpm000444 000765 000024 00000013354 11420350116 023133 0ustar00alexstaff000000 000000 /* XPM */ static char * format_ascii_xpm[] = { "22 22 297 2", " c None", ". c #868686", "+ c #969696", "@ c #8F8F8F", "# c #8A8A8A", "$ c #888888", "% c #7D7D7D", "& c #737373", "* c #666666", "= c #505050", "- c #131313", "; c #FEE1A4", "> c #EAA25B", ", c #DDDDDD", "' c #EFEFEF", ") c #EEEEEE", "! c #EAEAEA", "~ c #D9D9D9", "{ c #BABABA", "] c #555555", "^ c #222222", "/ c #FDAE41", "( c #F9C984", "_ c #D28F4F", ": c #8B5C32", "< c #828282", "[ c #E6E6E6", "} c #FFFFFF", "| c #FDFDFD", "1 c #DBDBDB", "2 c #929292", "3 c #9B9B9B", "4 c #252525", "5 c #FE8904", "6 c #FDA740", "7 c #F9C181", "8 c #D59252", "9 c #7F7E7D", "0 c #E5E5E5", "a c #E9E9E9", "b c #A2A2A2", "c c #EBEBEB", "d c #242424", "e c #FF8901", "f c #FD8202", "g c #FDA440", "h c #FCC082", "i c #D3904E", "j c #8D765D", "k c #E3E3E3", "l c #ECECEC", "m c #F0F0F0", "n c #F68103", "o c #FD8703", "p c #FD8404", "q c #FDA143", "r c #FBBE7F", "s c #D69555", "t c #C8AE96", "u c #FAF9F8", "v c #7F7F7F", "w c #7D7D7C", "x c #797977", "y c #626160", "z c #3F3F3E", "A c #050504", "B c #C15E04", "C c #ED7C04", "D c #FE8903", "E c #FD8303", "F c #FD9B3A", "G c #FBBB78", "H c #E09853", "I c #D5B59B", "J c #FCFCFC", "K c #F5F5F4", "L c #DCDBD9", "M c #C1C0BB", "N c #A09C95", "O c #7B7874", "P c #080808", "Q c #7C3903", "R c #B55804", "S c #EC7B04", "T c #FD8403", "U c #FD982D", "V c #FCB06E", "W c #E09D61", "X c #E2C4A6", "Y c #FCFAFA", "Z c #FEFEFE", "` c #F1F0EE", " . c #E2DFDC", ".. c #CEC9BF", "+. c #A6A097", "@. c #0B0B0A", "#. c #271201", "$. c #803C03", "%. c #BA5804", "&. c #ED7D03", "*. c #F68E38", "=. c #F2BE9B", "-. c #F5CDA1", ";. c #F8D9C9", ">. c #FCFBF9", ",. c #F8F4EF", "'. c #F4F0EA", "). c #EDE7E0", "!. c #DFD9D0", "~. c #C0B9AC", "{. c #0D0C0B", "]. c #1E0E01", "^. c #813A03", "/. c #B45604", "(. c #EA7D03", "_. c #FC8407", ":. c #EB7C1E", "<. c #F4B392", "[. c #FFE9D7", "}. c #F8DAC2", "|. c #EDE6E2", "1. c #FEFEFD", "2. c #FBF9F7", "3. c #FAF6F1", "4. c #F8F2EA", "5. c #F1EBE2", "6. c #EEE7DD", "7. c #E7DFD3", "8. c #C8BEAC", "9. c #2C1301", "0. c #863E03", "a. c #BC5902", "b. c #E9701A", "c. c #EB6F29", "d. c #EB9168", "e. c #FBCDAE", "f. c #FEE9CF", "g. c #E7D4C6", "h. c #F9F9F8", "i. c #F9F6F0", "j. c #F7F2EA", "k. c #F5EFE5", "l. c #F2EADD", "m. c #EEE5D8", "n. c #EAE0D0", "o. c #CCC0AB", "p. c #0E0D0B", "q. c #190D05", "r. c #783913", "s. c #93511C", "t. c #AC5A27", "u. c #BF7853", "v. c #E6A17F", "w. c #FED9BE", "x. c #FDD2B4", "y. c #E5E3E0", "z. c #F7F3EE", "A. c #F7F2E9", "B. c #F5EEE3", "C. c #F3EBDD", "D. c #F1E7D7", "E. c #ECE1CF", "F. c #EADECA", "G. c #CDBEA7", "H. c #0E0C0B", "I. c #291109", "J. c #483A2F", "K. c #67482B", "L. c #8F5A35", "M. c #C17958", "N. c #EEB195", "O. c #FEE0C4", "P. c #EBCAB5", "Q. c #EFEAE1", "R. c #F2E7D6", "S. c #F0E4D0", "T. c #ECDEC8", "U. c #E9DBC4", "V. c #CFBEA4", "W. c #32302F", "X. c #423F39", "Y. c #4E3E2D", "Z. c #865233", "`. c #BE7754", " + c #ECAE92", ".+ c #F4D0B3", "++ c #E5D6C9", "@+ c #F2E9DB", "#+ c #F0E3CF", "$+ c #EEE0C8", "%+ c #ECDBC3", "&+ c #E6D6BA", "*+ c #CFBB9E", "=+ c #0E0C0A", "-+ c #5B5B5B", ";+ c #8E8E8E", ">+ c #686665", ",+ c #473C34", "'+ c #704C37", ")+ c #B17758", "!+ c #CB9878", "~+ c #C3B09D", "{+ c #EBE0CF", "]+ c #EFE2CE", "^+ c #EEDFC8", "/+ c #ECDCC2", "(+ c #EAD8BD", "_+ c #E7D4B5", ":+ c #CEB998", "<+ c #6D6D6D", "[+ c #D1D0D0", "}+ c #C2C0BD", "|+ c #A09D9B", "1+ c #5A5855", "2+ c #4C3E36", "3+ c #423024", "4+ c #5B513E", "5+ c #D5C6AE", "6+ c #EBDCC5", "7+ c #ECDBC1", "8+ c #EAD8BC", "9+ c #E8D4B5", "0+ c #E7D1B0", "a+ c #CEB694", "b+ c #1F1A15", "c+ c #717171", "d+ c #E1E0DE", "e+ c #E9E5DE", "f+ c #D2CDC6", "g+ c #B3AEA5", "h+ c #8E8981", "i+ c #5D5A57", "j+ c #262521", "k+ c #80776A", "l+ c #DDCDB4", "m+ c #E9D7BA", "n+ c #E6D0AE", "o+ c #E5CCA8", "p+ c #CDB38D", "q+ c #332D21", "r+ c #6F6F6F", "s+ c #E2E0DC", "t+ c #F5EFE6", "u+ c #F0E9DD", "v+ c #E3DACB", "w+ c #CEC3B4", "x+ c #AFA696", "y+ c #989185", "z+ c #8C826E", "A+ c #CCBBA2", "B+ c #E6D1B2", "C+ c #E5CCA7", "D+ c #E3C8A2", "E+ c #CDB087", "F+ c #332A1E", "G+ c #6B6B6B", "H+ c #E1DED9", "I+ c #F4ECE1", "J+ c #F1E9DA", "K+ c #F0E4D2", "L+ c #EBDECB", "M+ c #DECFB9", "N+ c #CABCA5", "O+ c #B9AA93", "P+ c #D1BFA3", "Q+ c #E5CEAC", "R+ c #E4CCA7", "S+ c #E3C7A0", "T+ c #CCAF83", "U+ c #605F5E", "V+ c #D1CDC4", "W+ c #D8D0C5", "X+ c #D6CDBE", "Y+ c #D7C9B5", "Z+ c #D4C8B3", "`+ c #D4C3AB", " @ c #CFBDA2", ".@ c #C9B497", "+@ c #CBB695", "@@ c #CFB593", "#@ c #CDB38E", "$@ c #CDB088", "%@ c #C2A375", "&@ c #201F1A", "*@ c #38332D", "=@ c #37312B", "-@ c #35312C", ";@ c #363029", ">@ c #34302B", ",@ c #332F26", "'@ c #332E28", ")@ c #342C24", "!@ c #342C23", "~@ c #352C20", "{@ c #312B23", "]@ c #332B1E", "^@ c #0D0B07", " . + @ # $ . % & * = - ", "; > # , ' ' ' ' ) ! ~ { ] ^ ", "/ ( _ : < [ } } } } } } | 1 2 3 4 ", "5 6 7 8 9 0 } } } } } } } a b c + d ", "e f g h i j k } } } } } } } l + ) m + 4 ", "n o p q r s t u } } } } } } m v w x y z A ", "B C D E F G H I J } } } } } } K L M N O P ", "Q R S o T U V W X Y } } } } Z u ` ...+.@. ", "#.$.%.&.5 T *.=.-.;.J } } Z >.,.'.).!.~.{. ", " ].^./.(._.:.<.[.}.|.Z 1.2.3.4.5.6.7.8.{. ", " 9.0.a.b.c.d.e.f.g.h.2.i.j.k.l.m.n.o.p. ", " q.r.s.t.u.v.w.x.y.z.A.B.C.D.E.F.G.H. ", " I.J.K.L.M.N.O.P.Q.B.C.R.S.T.U.V.H. ", " W.X.Y.Z.`. +.+++@+R.#+$+%+&+*+=+ ", " -+;+>+,+'+)+!+~+{+]+^+/+(+_+:+=+ ", " <+[+}+|+1+2+3+4+5+6+7+8+9+0+a+b+ ", " c+d+e+f+g+h+i+j+k+l+m+9+n+o+p+q+ ", " r+s+t+u+v+w+x+y+z+A+B+n+C+D+E+F+ ", " G+H+I+J+K+L+M+N+O+P+Q+R+D+S+T+F+ ", " U+V+W+X+Y+Z+`+ @.@+@@@#@$@T+%@F+ ", " &@*@=@-@;@>@,@'@)@!@~@{@q+]@]@^@ ", " "}; tuxcards/src/icons/addTreeElement.xpm000555 000765 000024 00000001324 11420350116 020313 0ustar00alexstaff000000 000000 /* XPM */ static const char*addTreeElement_xpm[]={ "22 22 6 1", "d c #808080", "c c #c0c0c0", "a c #000000", ". c None", "# c #303030", "b c #ffffff", "......................", ".##...................", ".##.#####.............", ".##.#####.............", ".##.#####....a........", ".##.#####...aa........", ".##.#####..aba........", ".##.......abbaaaaaaaa.", ".##......abbcbbbbbbba.", ".##.....abbccccccccca.", ".##......abccccccccca.", ".##......dabcaaaaaaaa.", ".##.......dabaddddddd.", ".##.#####..daad.......", ".##.#####...dad.......", ".##.#####....dd.......", ".##.#####.....d.......", ".##.#####.............", ".##.#####.............", ".##...................", ".##...................", "......................"}; tuxcards/src/icons/attic/000755 000765 000024 00000000000 11420350116 016006 5ustar00alexstaff000000 000000 tuxcards/src/icons/back.xpm000444 000765 000024 00000003010 11420350116 016320 0ustar00alexstaff000000 000000 /* XPM */ static const char * back_xpm[] = { "22 22 61 1", " c None", ". c #323232", "+ c #010101", "@ c #4A4A4A", "# c #040404", "$ c #979797", "% c #7B7B7B", "& c #939393", "* c #EEEEEE", "= c #686868", "- c #030303", "; c #9C9C9C", "> c #FFFFFF", ", c #B1B1B1", "' c #5E5E5E", ") c #060606", "! c #C1C1C1", "~ c #626262", "{ c #000000", "] c #989898", "^ c #A1A1A1", "/ c #A5A5A5", "( c #909090", "_ c #868686", ": c #616161", "< c #959595", "[ c #919191", "} c #848484", "| c #606060", "1 c #0B0B0B", "2 c #545454", "3 c #727272", "4 c #A2A2A2", "5 c #969696", "6 c #838383", "7 c #5F5F5F", "8 c #101010", "9 c #434343", "0 c #6B6B6B", "a c #858585", "b c #8E8E8E", "c c #373737", "d c #696969", "e c #8D8D8D", "f c #B5B5B5", "g c #111111", "h c #393939", "i c #898989", "j c #B0B0B0", "k c #191919", "l c #3A3A3A", "m c #646464", "n c #535353", "o c #050505", "p c #353535", "q c #585858", "r c #4C4C4C", "s c #0D0D0D", "t c #3E3E3E", "u c #020202", "v c #0A0A0A", " ", " ", " .+ ", " .@# ", " .$%# ", " .&*=- ", " .;>,') ", " .;>!;~{ ", " .]>!^&~{ ", " ./>!/(_:{ ", " .<*!^[}}|{ ", " 123}45667{ ", " 890a45b7{ ", " 8cdef5'{ ", " gh0ij7k ", " 8lm0no ", " 8pqr- ", " sht- ", " 1.u ", " v{ ", " ", " "}; tuxcards/src/icons/blank.xpm000555 000765 000024 00000002304 11420350116 016517 0ustar00alexstaff000000 000000 /* XPM */ static const char*blank_xpm[]={ "32 32 1 1", ". c None", "................................", "................................", "................................", "................................", "................................", "................................", "................................", "................................", "................................", "................................", "................................", "................................", "................................", "................................", "................................", "................................", "................................", "................................", "................................", "................................", "................................", "................................", "................................", "................................", "................................", "................................", "................................", "................................", "................................", "................................", "................................", "................................"}; tuxcards/src/icons/bookmark_add.xpm000555 000765 000024 00000003171 11420350116 020050 0ustar00alexstaff000000 000000 /* XPM */ static const char * bookmark_add_xpm[] = { "22 22 68 1", " c None", ". c #2A2A2A", "+ c #282828", "@ c #242424", "# c #C7C7C7", "$ c #000000", "% c #212121", "& c #232323", "* c #C0C0C0", "= c #B1B1B1", "- c #474747", "; c #484848", "> c #555555", ", c #2B2B2B", "' c #C1C1C1", ") c #AEAEAE", "! c #020202", "~ c #A7A7A7", "{ c #BBBBBB", "] c #BCBCBC", "^ c #BFBFBF", "/ c #010101", "( c #747474", "_ c #969696", ": c #A9A9A9", "< c #A0A0A0", "[ c #848484", "} c #C5C5C5", "| c #6D6D6D", "1 c #8C8C8C", "2 c #959595", "3 c #9B9B9B", "4 c #C3C3C3", "5 c #B9B9B9", "6 c #B3B3B3", "7 c #ABABAB", "8 c #6B6B6B", "9 c #888888", "0 c #696969", "a c #5B5B5B", "b c #7D7D7D", "c c #676767", "d c #A3A3A3", "e c #B4B4B4", "f c #BDBDBD", "g c #ACACAC", "h c #A4A4A4", "i c #FFFF32", "j c #646464", "k c #7F7F7F", "l c #787878", "m c #FFFF66", "n c #626262", "o c #7C7C7C", "p c #FFFF1A", "q c #C4C100", "r c #A2A119", "s c #FFFF98", "t c #5F5F5F", "u c #797979", "v c #FFFF5D", "w c #FFFF8C", "x c #FFFFB6", "y c #FFFFCC", "z c #5C5C5C", "A c #757575", "B c #FFFFFF", "C c #585858", " . ", " .+ ", " @#$ ", " %##$ ", " &*=#$ ", "--;->,')=#$ ", " !~*{]^=~=#$ ", " /(_~~:<[)}$ ", " $|12345674$ ", " $89(0a0b~^$$ ", " $c[def6gh$i$ ", " $jk|j$$l$m$ $$ ", " $no$pq$rsr$qp$ ", " $tu$vwxyxwv$ ", " $zA$ryByr$ ", " $C$ryByr$ ", " $vwxyxwv$ ", " $pq$rsr$qp$ ", " $$ $m$ $$ ", " $i$ ", " $ ", " "}; tuxcards/src/icons/changeProperty.xpm000555 000765 000024 00000001400 11420350116 020416 0ustar00alexstaff000000 000000 /* XPM */ /* Drawn by Mark Donohoe for the K Desktop Environment */ /* See http://www.kde.org */ static const char*changeProperty_xpm[]={ "22 22 3 1", "# c #808080", "a c #000000", ". c None", "......................", "......................", "......................", "......................", "........##aaa#........", ".......#aaaaaaa.......", "......#aa#....#a......", "......aa#.............", ".....aaa.......a......", "...aaaaaaa....aaa.....", "....aaaaa....aaaaa....", ".....aaa....aaaaaaa...", "......a.......aaa.....", ".............#aa......", "......a#....#aa#......", ".......aaaaaaa#.......", "........#aaa##........", "......................", "......................", "......................", "......................", "......................"}; tuxcards/src/icons/debug/000755 000765 000024 00000000000 11420350116 015770 5ustar00alexstaff000000 000000 tuxcards/src/icons/delete.xpm000555 000765 000024 00000001347 11420350116 016700 0ustar00alexstaff000000 000000 /* XPM */ static const char * delete_xpm[] = { /* width height num_colors chars_per_pixel */ "22 22 3 1", /* colors */ " c white", ". c none", "X c black", /* pixels */ "......................", "......................", "......................", "......................", "......................", "....XX ........XX ....", "....XXXX .....XX .....", ".....XXXX ...XX ......", ".......XXX .X ........", "........XXXXX ........", ".........XXX .........", "........XXXXX ........", ".......XXX .XX .......", "......XXX ...XX ......", ".....XXX .....X ......", ".....XXX ......X .....", "......X ..............", "................X ....", "......................", "......................", "......................", "......................"}; tuxcards/src/icons/downArrow.xpm000555 000765 000024 00000005651 11420350116 017422 0ustar00alexstaff000000 000000 /* XPM */ static const char * downArrow_xpm[] = { "21 19 128 2", " c None", ". c #0236A9", "+ c #0538AA", "@ c #0639AA", "# c #073AAB", "$ c #083BAB", "% c #093CAB", "& c #0336A9", "* c #6790DD", "= c #87AEEF", "- c #88AEEF", "; c #89AFEF", "> c #8BB2F0", ", c #4897FF", "' c #0437A9", ") c #306BD6", "! c #3978E6", "~ c #3A7AE6", "{ c #3D7CE7", "] c #4080E8", "^ c #90B4F2", "/ c #4998FF", "( c #316CD6", "_ c #3C7BE7", ": c #3F7FE8", "< c #4281E9", "[ c #4785E9", "} c #93B8F3", "| c #4B99FF", "1 c #366FD7", "2 c #4180E8", "3 c #4584E9", "4 c #4988EA", "5 c #4D8CEB", "6 c #97BCF5", "7 c #4E9AFF", "8 c #083AAB", "9 c #3972D8", "0 c #4785EA", "a c #4C89EA", "b c #518EEC", "c c #5694ED", "d c #9CC1F5", "e c #509BFF", "f c #093BAB", "g c #3E77DA", "h c #4F8DEB", "i c #5391ED", "j c #5896EE", "k c #5E9BF0", "l c #A1C5F7", "m c #539DFF", "n c #0A3CAC", "o c #0B3DAC", "p c #0C3EAC", "q c #447CDB", "r c #5693EE", "s c #5A98EE", "t c #609DF0", "u c #66A1F1", "v c #A6CAF8", "w c #569FFF", "x c #58A0FF", "y c #5AA1FF", "z c #5CA2FF", "A c #5DA3FF", "B c #5FA4FF", "C c #326DD6", "D c #91B8F2", "E c #94B9F4", "F c #98BDF5", "G c #4982DD", "H c #5D9AEF", "I c #63A0F1", "J c #69A4F2", "K c #6EA9F4", "L c #73ADF5", "M c #79B2F6", "N c #B1D3FB", "O c #B4D5FB", "P c #B5D6FB", "Q c #62A6FF", "R c #3A75D9", "S c #5493EE", "T c #5998EF", "U c #5F9CF0", "V c #65A1F2", "W c #6AA7F3", "X c #71ABF5", "Y c #76B0F6", "Z c #7BB5F7", "` c #7FB8F7", " . c #83BBF9", ".. c #87BDF9", "+. c #65A7FF", "@. c #457EDC", "#. c #619EF2", "$. c #67A4F3", "%. c #6CA9F4", "&. c #72AEF5", "*. c #77B2F6", "=. c #7CB6F7", "-. c #81B9F8", ";. c #85BDF9", ">. c #88BFF9", ",. c #68A9FF", "'. c #1142AE", "). c #4F88DF", "!. c #6DAAF5", "~. c #74AFF6", "{. c #79B3F7", "]. c #7EB8F7", "^. c #87BEF9", "/. c #8ABFF9", "(. c #69AAFF", "_. c #1646B0", ":. c #5A91E1", "<. c #79B4F7", "[. c #7FB9F8", "}. c #83BCF9", "|. c #6BABFF", "1. c #1D4BB2", "2. c #6399E3", "3. c #86BEF9", "4. c #6AAAFF", "5. c #2551B5", "6. c #699EE5", "7. c #2E59B8", " ", " ", " ", " . + @ @ # # $ % ", " & * = - - ; > , ", " ' ) ! ~ { ] ^ / ", " + ( _ : < [ } | ", " @ 1 2 3 4 5 6 7 ", " 8 9 0 a b c d e ", " f g h i j k l m ", " ' # $ n o p q r s t u v w x y z A B ", " @ C D E F G H I J K L M N O P Q ", " f R S T U V W X Y Z ` ...+. ", " p @.#.$.%.&.*.=.-.;.>.,. ", " '.).!.~.{.]. .^./.(. ", " _.:.<.[.}.^./.|. ", " 1.2.}.3./.4. ", " 5.6.>.(. ", " 7.,. "}; tuxcards/src/icons/editcopy.png000444 000765 000024 00000002455 11420350116 017234 0ustar00alexstaff000000 000000 PNG  IHDRw=IDATx^Kl\WxfįGj"(LfBl*hC=g/ ",׬M?'V66ĊHucU^ v[6Vߐk27[RxU{錼48K;D 0uܪH% \2 xwqb{C'<(I F `lAGuc8SMV?zZ\~rُBFXkRM`\;A+իo޻^ ͝2_99Փ "bN >9H <G3atLz:ޑއB$i02<9 {W5`[`wA@pm|SVQ(} uXk39@UpP@Y]!-} ^ "֒$1Xk<`] /ZƀER H "> 4M=&ޫX}-p@pȰ]Q(9H8",$IHqȰ:0`(:6LAP LU9)""W"8NЊbzVy.9΁?^?`H)4bwHY_fry r;,.zsQA at8eм!L~6S۵3W~4}P&Ay7K 6Hd6~m6xh-iO}`Jw8;/]ձtf1!~ jq3tJ@{ǭ=q槮Ys{n,wM. X`a_LfPϊmQJUO0$r%IENDB`tuxcards/src/icons/editcut.png000444 000765 000024 00000003632 11420350116 017053 0ustar00alexstaff000000 000000 PNG  IHDR szzaIDATx^ŗ PWJB"4 o7. Tp5UG>ڍumbZ(XEETG+%U(Hb A Ξ0߸;Ud*ӓMf933w~_l&)""B O144tCG?EQgYXXXljjjSiyC}ݷcVNP,>&e_~n4xJkqqq7\tLs&e: X<ʹlf*޵#dc0s1 3ވ>UG#p*.0imddzhT2(5%ICgb5ʐ͆BqH2 `iYN߫zXNj}  Hx<ވM K[޷ uJt71| d HᕯwwwCnn.dffBaa!S^4+iEJYERBGMrY6&&FxS]`qSo]̸o#xd(E֢KS"ww<7LFY( x+V6^F{s c~rR`Lb7yn_n[ar͆֕t]`Oɽ<āl"=5~ٙco2 ɓ,44T_Ey3&CW> 3da SfH$ ===/k)+wnÅqJaXQ:1!{j pm7_;dž [&My86'nb{Hj=\T_|s@eP^^(p(&_<Bd&&7#TC`<[:ٹgTp S{yyUx[٧ l xzD!32G|'ߵCUU~sf'P63OpgN&g:usc)(llX̵k-avG،ӨݱeSщCPTT[d^1QsfnE(iRXǯwZ-Ga!au$LK6W3<ϖ3ǥ&S ;6V@g|$"QVB;ccdæeϟ]?Qss;'#4os/ߑڇ=5pѽTؐ\$c-xBaNe%ǎQ1"'m!o $A%>6@N⍍3\J)2(U1ЌضBQ^I` RA"ft8PuEpn$ ,[1݋K]LRhɱ9d즀h C)Cҋ^:ZN.!q. e;Pjk@-gs рIؖ@Rc)8@+l[ay mel,FW @iCaAkd¯`奓{>\<|h)p8o :2.^E_v$[QA|9 %`[ 8xQGi*$MKtvFA<\;cJ/ڀ#`\u3x[-:WyCssLr0W̴!ζ0b=nr@ "id"d zpٟ֔?a8E%(}-V\ț h Ƙ \m;WR$Cc/D燻>7OxY)/b` i "|w+ مR1|8wog'EJKaR)D$HVd5K7wxxq_L͉kGsh%GpmO_=$ EA,w `i4P GF%ANHإ%ԥ/PPLByXnht<{迄 SkcT i$ɃFL*! sKmMy;XvB*+QJcJaqW+%ُf+5?/dCDO\ 4,ݣ WFf.; 8|uJ{$3G4LRI,nk hZ^6 y7Q+WZs@ggǃ^4́c@8TÐ0Id9z݌zSRr?ٚQn~x=vV =pMm&s?*2BiM2w9Dd,َPk4O zE Y.H6V=4!!y Ɍ f\|njЦ>fu6Z ;eNi ( 0ؖ ,I9P172DL?R\ne8Ig.Fs88Na7uMXuj,6[$ rٗgNڦzu){.|8V\#]< PG1وXZ-5ܢIph3dY^.[} |S9]󼝆A>KXVZrOw=]wf똑HƆ$|oUĵDWs%<1u zr)%  m:HrJ'~"Cai ^fٜ `J`4`M;<5(*-<$0x;e/ҢHϢwCQЄ e'! *zՐq>Beݪ3$Ϡ 1mq`4$/ ~XgPި.%?M`X,uAEމJ迬lT*lLL;ik~ޓ%D3ɛ~ җÜ{,|9`ۡ+˯<)vlo`1]#Ŗ$M47YPv7 I$L=)fK9"urIɪIp ,PVlL d {=]Nc] `~6VVpNE>|b#,<*<fs[G8&qP_` ̥ENw-q5&]SM#p~:|/T$o+^^]Z 'Ēu$ c$Em"l t{*TՄQ{,{.OgP ^kLkF*E,#K1z^rϘ i75S`IY4b`W)@U3#A_ӉW;ZӮN6ڱJ4$}TcU:Բ -gmb(X Ԋ-Z/%A+i Ha9@1 ZYGyv9Ec<2O>Lq|ȤO9kJ 0u電e陹ȹE\Wno;nw$@ ,i˞pߡI !< s3Y^!)wHS1ZEBh긛׸ Vˀ+xz붔˄r ]-)p+>oc_Ukhڲ dXtqW+0Xܮ\`N(;p\T]BRbUJfmBu*+-S;QoD)3!D놫UdXΤ8iԚ;o:?mعrMSUX}Փn);<眺Q#J~Xu ❆K` f+gz$gO>,3AY'$yn`$1h Eh* 0/rZTMHܖnrٝlvLOxyӳFVpF Rn<6 ?YU p*ҭDW^H\H NJ1LU8fk wT ֊ٿr &PMMy%ɣ>Ʌ~/(Dq\Ale\ܵlRN>=dQ<}`9qEJ*4βZ#Lt$7k_ 1*Wyk&&FlC&jꖋDҒx%I&Əm_Q$IENDB`tuxcards/src/icons/exit.xpm000555 000765 000024 00000001260 11420350116 016401 0ustar00alexstaff000000 000000 /* XPM */ static const char * exit_xpm[] = { "22 22 4 1", " c None", ". c #000000", "+ c #757575", "@ c #303030", " ", " ", " .. ", " .. ", " . .. . ", " ... .. ... ", " +..+ .. +..+ ", " ..@ .. @.. ", " +..+ .. +..+ ", " ... .. ... ", " ..+ .. +.. ", " ..+ .. +.. ", " ... .. ... ", " +..+ +..+ ", " ..@ @.. ", " +..@+ +@..+ ", " +....++....+ ", " +........+ ", " +....+ ", " ", " ", " "}; tuxcards/src/icons/filenew.png000444 000765 000024 00000001400 11420350116 017032 0ustar00alexstaff000000 000000 PNG  IHDRw=gAMAOX2tEXtSoftwareAdobe ImageReadyqe<IDATHǵMKTQޙ; 4DBbmlPV--EP7Q0+*4LWx{i1g^8tp3weF(+>amnOJ!""FS%䫏g| Y|@0o쾱stړD,S<~s?s^~.;T<c @b:9PA=/sP$`.IN\z hCCOYY+'}v`|\.Mm!e"PH@a3ĥD9ty$>  ԐVI_6Ғ(Ь(EB#DEY*DcQZ[̘$ F&˄,"GwB~I' _%'(*q$@ΕBX TSȾ`H"A8F!0L-xl-1aё?7у.yh@Ī@ ͛q5& Xq8@cPc;rabwZ0LͰA*ŵ7c(0]zA?=-D~Ɠ2,IENDB`tuxcards/src/icons/fileopen.png000444 000765 000024 00000003225 11420350116 017211 0ustar00alexstaff000000 000000 PNG  IHDRw=\IDATx^{l?99J-W)P`nF2Ɯ ˶t1Lp0F96,z+"u")=7Z\y,%&N?QD/;۔ B[ =xb5eq "ξmdƖ8+"=\k;jw6ȿv>rjbvɤw<˷-Smha%oo_ST o(j^%1+3ν9m8W_D&R^N{Fp\-&ãQή.izY_ /MfMzb7?%[$y'VUnD# JwP=;[ż(X]9ҬJ>Oz<7 05uۮoP;8(I gxPZ=mMGAUǣH S<,>X1=FXnY.ZV0N٢eZ"b$Z$kMu'Z8pLKM>p=QβGe(е$aO5T6=( smW qUuR)Qw|U?y9$ l\e/x NguG}BϞ|~=tZசJ9Vh 5DB¸Ip mT22xrߒ(V$ia9ED"ThW~@X)Fb f;.7[lCtuhA,!%i(nSڛ.2]tMG^ ͧORX[PI$qP]]b2 pscQ<,ǃ7m< gP]Ag5kSNO>C7 ,ulo=o+Vş` U3E51!| \Lͣ$sal q4]':.&JZZ:ִ4b'0EsW[+Z`xL@2Od,7mΫUMzU¤n1)#IENDB`tuxcards/src/icons/fileprint.png000444 000765 000024 00000002661 11420350116 017407 0ustar00alexstaff000000 000000 PNG  IHDRw=xIDATx^T{LSw=---XP`GABd0ѹ 2-deF[2 M`eJ O-Ƿ&R1'&}; "Nr[vcGN~STdϯ25Ե\2Unihh'ӯ7C?RR>ǣ <UNR(LTVٳplo!ygY0|ƌSs0KӼÊx6f@y 1OZu Xܛ?-]2APPv Ku&ͽG00yK; k׮@\\8"z\⁋`%&:S<- HXmGn9\ =n,mTz] n _]@Oh X,IR䓋O@VW]kN<0vK _o [h(a_\[pH|ПEṙe.\0=c|8odd$};P1w A`,|2$ y֨Ƥͅ˖ܾ}Q#{pS "'l۶577ŋ8tSC488HM]3 UUUQWW8=$Y}5K---AģN!DFij3gPCCh@Fyy9[$'[VߏؘlA׋8T*}[E[,VHh7o_g yD^2220|̙3K|DfYߏׯc||pcTZB ]h߿<:&&&"14ݨDII NTWWcjG̒(Z1 %l6[kpp0 ^ PVV $VTTI^Ĉ3ק za4^6Ic1[BF@@K/^'h4!7ȲQTP c\2O@bqܹspGXXRSSDW'#>> qinLGx|a=ϩ0V}4,ɓ'_*hݺDZ|_Pv{nHh38Npb-KHH ^ Mf3qhhھS,)Srr  JhZ1 ̟҈Js|n:Df3 Mjp13P*pF#߿?60I EGڀb8Jp__<t"*e7]bd0;g 4z j¹ju"p~t]!$ZM;ojvMMV[aRkڦ}jZ^]\|ǘ@d+͹3|6*aVrV.__Vր.>&L{iw7!tve]c9sLf>™?@6xq,OxQIENDB`tuxcards/src/icons/find.png000444 000765 000024 00000003630 11420350116 016330 0ustar00alexstaff000000 000000 PNG  IHDR szz_IDATx^mLTϽw^aE"X_QYmnt7h)Zf7M?4lӦ~6*IjwQX[qw]pQ^Da}`/OxCΐI~y&{~3ffTf1£9$ Gq<>8{,q5|`>߸w|qJʅ۾k ;!Y7”hOG'{g.\5/E68GFG_ϧ{>y6w*9N@SexdK^_cxj%+!O_XAI2`{1_=G I pP$5z %ņ-LK[^oEXDdBN( 07b>A`p8l @61MDlA1hP !F ) ,#$҂E.qrr]3cr$(b0= 6 ڀ׎Jwymmm7o -XL(օ~i'6055e*:|pwmomm!If!Y?BwĥzEO~- Qprt{!rJ{{q} tD_ y%۳P2'aޱyn:H`Aԙ姵'Ǐy```&$9:4 X#h /ńC+\Ԭ X<7Fs1ӝ'ծ沦}|DP'p@#ǃcHIF$B䗖 Ýb5EF^A[Fԡ x<%0&l5-nƦQB K 7p1+eh!徰?H8uń-zֶ)0@B$(v;`ocr 2CCi>t°"ơq̃|(H "$z MF===za&D$6p} ۨ >0Ɛo}z* r3zx(:|m$Y86g8^ 8Hp,\PYΠA{ BP+7\[ 01|!- b8MQVW_SsL/+tmᱨаO'-дĮ"L}rHC%YC^, ^v˲]T---bsfff1""1&,q{+"|SA|{`¾j(`q׮][/NzgT?䶄x'z< L0@,;8zUT\?{9}曠DJMMҹsܹ3;==pbbbpnn.BX~7UWU|I"$D![`I iD#DьG*-͌A,K&@ ^J,^pA}mGgRD`Կz@=I=Y JI (wP}Q {G?1 }¤/OQbФ?fm XN\N[I, LiSV's'Fs.Q"/d^2|[vR9ce߽w"ޠD=XR#h+<;MVv;,CV!#oZ3mجo5IÄUx胖N|icEOj3 .1iD^PRIK8ͩB04 i^fDd%~4#Oc|@ MN y]Yoc"?9#IENDB`tuxcards/src/icons/forward.xpm000444 000765 000024 00000002375 11420350116 017101 0ustar00alexstaff000000 000000 /* XPM */ static const char * forward_xpm[] = { "22 22 43 1", " g None", ". g #323232", "+ g #5D5D5D", "@ g #000000", "# g #C4C4C4", "$ g #313131", "% g #C5C5C5", "& g #E4E4E4", "* g #2D2D2D", "= g #B7B7B7", "- g #EFEFEF", "; g #DCDCDC", "> g #282828", ", g #AFAFAF", "' g #E0E0E0", ") g #242424", "! g #C7C7C7", "~ g #9A9A9A", "{ g #8E8E8E", "] g #1F1F1F", "^ g #A5A5A5", "/ g #989898", "( g #888888", "_ g #1B1B1B", ": g #ADADAD", "< g #858585", "[ g #838383", "} g #868686", "| g #929292", "1 g #C1C1C1", "2 g #161616", "3 g #909090", "4 g #747474", "5 g #3A3A3A", "6 g #121212", "7 g #0D0D0D", "8 g #7A7A7A", "9 g #8A8A8A", "0 g #090909", "a g #040404", "b g #707070", "c g #6E6E6E", "d g #3F3F3F", " ", " ", " .. ", " .+@ ", " .#+@ ", " $%&+@ ", " *=-;+@ ", " >,'=;+@ ", " ),!~{;+@ ", " ]^!/({;+@ ", " _~:<[}|1+@ ", " 23~[[{:45@ ", " 6 lo32-app-tuxcards.png fileopen.png filenew.png filesave.png fileprint.png find.png editcopy.png editcut.png editpaste.png editredo.png editundo.png textbold.png textitalic.png textunder.png textcenter.png textjustify.png textleft.png textright.png tuxcards/src/icons/lo16-app-tuxcards.png000555 000765 000024 00000000543 11420350116 020605 0ustar00alexstaff000000 000000 PNG  IHDRR;^jbKGD pHYs  tIME!6nIDATxڝq0eR݅ U•;\\ɞc%hEGO B @|y$Qymk]# Py"qX?f0+8zxKڴj 5ˣ4@n@XZi]CVarw'fI`e3êd7jA`_eNf_4ŏs(87eLjfupbM2.p {"IENDB`tuxcards/src/icons/lo32-app-tuxcards.png000555 000765 000024 00000002003 11420350116 020574 0ustar00alexstaff000000 000000 PNG  IHDR szzbKGD pHYs  tIME 8SIDATxڽOhU?+cvIX1YS"â0AC)* $():{ O z`(]* -bz1y8fg?x0;?~2!RJniZJ%LIJ B%ОRBh)ㄯ6<nxev|l8w~֛4bnmm< tv^WF +i*6m:ߴטzxlÜ0Ҝ}Z RKs>ׄ د1'[|3@+RK)R*\RJݯO ư- [\\dnN J@cE/ \U= RJG(iqkANBe{軍G bv>ݘ9ڻO( I $xPI ?R7#ѬMSRv)nwؘ҇hD@O2ܽ=v #d"ZV#=:A7 wb߲X"mSJqB \8?3~X˒-OQb]ץR/O$=O|7〔R?:x?c&b14n6;-šὧVb] a5kǹ>v?}ce>ltG@0:I)uޏwV'%Pظg}'A߼ȯ#V jA纮U_̙w_~(pFwlIENDB`tuxcards/src/icons/lock.xpm000444 000765 000024 00000007772 11420350116 016373 0ustar00alexstaff000000 000000 /* XPM */ static const char * lock_xpm[] = { "30 30 132 2", " c None", ". c #999999", "+ c #B0B0B0", "@ c #DEDEDE", "# c #DFDFDF", "$ c #B4B4B4", "% c #6C6C6C", "& c #FFFFFF", "* c #FBFBFB", "= c #F2F2F2", "- c #E3E3E3", "; c #BEBEBE", "> c #9F9F9F", ", c #8F8F8F", "' c #838383", ") c #7D7D7D", "! c #888888", "~ c #AAAAAA", "{ c #C0C0C0", "] c #303030", "^ c #707070", "/ c #AEAEAE", "( c #626262", "_ c #676767", ": c #929292", "< c #C3C3C3", "[ c #363636", "} c #8C8C8C", "| c #949494", "1 c #848484", "2 c #CFCFCF", "3 c #383838", "4 c #F3F3F3", "5 c #808080", "6 c #535353", "7 c #6F6F6F", "8 c #A3A3A3", "9 c #B9B9B9", "0 c #7C7C7C", "a c #D3D3D3", "b c #3A3A3A", "c c #7E7E7E", "d c #D0D0D0", "e c #D8D8D8", "f c #7F7F7F", "g c #3E3E3E", "h c #525252", "i c #DADADA", "j c #777777", "k c #C2C2C2", "l c #CDCDCD", "m c #EDEDED", "n c #9D9D9D", "o c #4B4B4B", "p c #656565", "q c #767676", "r c #9B9B9B", "s c #9C9C9C", "t c #E6E6E6", "u c #606060", "v c #646464", "w c #5C5C5C", "x c #6D6D6D", "y c #727272", "z c #8A8A8A", "A c #BCBCBC", "B c #F0F0F0", "C c #ECECEC", "D c #E1E1E1", "E c #C4C4C4", "F c #ABABAB", "G c #595959", "H c #636363", "I c #717171", "J c #9E9E9E", "K c #FEFEFE", "L c #F1F1F1", "M c #E0E0E0", "N c #CCCCCC", "O c #969696", "P c #4C4C4C", "Q c #696969", "R c #A9A9A9", "S c #C5C5C5", "T c #A7A7A7", "U c #9A9A9A", "V c #909090", "W c #787878", "X c #5B5B5B", "Y c #4E4E4E", "Z c #565656", "` c #939393", " . c #C6C6C6", ".. c #D2D2D2", "+. c #B5B5B5", "@. c #585858", "#. c #464646", "$. c #8B8B8B", "%. c #C1C1C1", "&. c #CACACA", "*. c #D9D9D9", "=. c #6A6A6A", "-. c #5E5E5E", ";. c #7B7B7B", ">. c #A4A4A4", ",. c #B3B3B3", "'. c #BBBBBB", "). c #AFAFAF", "!. c #A2A2A2", "~. c #757575", "{. c #454545", "]. c #828282", "^. c #979797", "/. c #959595", "(. c #5D5D5D", "_. c #444444", ":. c #898989", "<. c #CBCBCB", "[. c #B1B1B1", "}. c #FDFDFD", "|. c #C9C9C9", "1. c #4D4D4D", "2. c #2A2A2A", "3. c #393939", "4. c #6E6E6E", "5. c #272727", "6. c #686868", "7. c #BDBDBD", "8. c #E7E7E7", "9. c #B8B8B8", "0. c #A0A0A0", "a. c #6B6B6B", " ", " ", " . . . . . . . ", " . + @ @ @ @ # $ % ", " . + & & & * = - ; . % ", " + & > , ' ) ! . ~ { % ] ", " ^ & / ' ( _ : < % [ ", " } & | % 1 2 % 3 ", " . 4 5 6 7 5 8 9 { 0 a % b ", " . @ c _ + ; d e & f a % g ", " h } i 7 j k l e & m n a % h o ", " p ^ q r 7 s < e & = t { $ u % v w ", " x y ) z r A e & B C D 2 E F ' G H ", " _ I | | J d K L i M # N { O _ P G ", " y Q } R n F d S $ T U : V W X Y Z ", " 0 W ` > .2 K t @ .. .+.s ^ @.#.@. ", " f } $.| %.&.& M *.N { $ r =.@.P -. ", " ;.0 O >.,.A & ..N '.).!.z ~.X {.w ", " ~.].V ^.S 2 & M *.N { $ /.Q Z o (. ", " 7 ~.` 8 +.; & ..N '.).!.' y G _.w ", " ~.].:.: < <.& # e l { ,.| p 6 o (. ", " 7 ~.` 8 [.9 }.2 |.'.F r c y G _.w ", " 1.) :.: < <.& # e l { ,.| p 6 o 2. ", " 3.: ^.[.9 }.2 |.'.F r c 4.@.5. ", " 6.$.$ 7.8.e d ; ).J f Z 2. ", " } s 9.9 [.R 0.z a. ", " ", " ", " ", " "}; tuxcards/src/icons/text_color.xpm000555 000765 000024 00000000734 11420350116 017617 0ustar00alexstaff000000 000000 /* XPM */ static const char *text_color_xpm[]={ "17 17 4 1", ". c None", "a c #000083", "b c #838183", "c c #ff5508", ".................", ".......a.........", "......bab........", "......aaa........", ".....baaab.......", ".....aa.aa.......", "....ba..aab......", "....aaaaaaa......", "...ba....aab.....", "...aa....baa.....", "..ba.....baab....", ".aaaa...aaaaaa...", ".................", ".cccccccccccccccc", ".cccccccccccccccc", ".cccccccccccccccc", ".cccccccccccccccc"}; tuxcards/src/icons/textbold.png000444 000765 000024 00000002225 11420350116 017234 0ustar00alexstaff000000 000000 PNG  IHDRw=\IDATx^U}lSUek׬nd Hsuԭ٦DPĠML(/'a68 ~@p0).8d-mnxm_Ғ.?דӛ{~>M/ j7^F}hԹrwͯ﹏B<9  @@K$r9!˘9DЩ; )r(B!!6beXrn`͡&y}q46t7Jz϶~kàn?k_7v~ek' 7yVp2gz.jʿNC?\$|lz\H ?ӫ%y*iJݬUJpV`3a*rEZ }"s E+.!A V+s˷ld$H'K:'H6V|y8OHYtZ~K 8qyZiPKdB9]p$'X$0ku}z^ckY_>2^*8OVm5h3hr@![:&x>NUb#`aϟcX̰\$+)-Wo9 ϼ%Iv4{6'Ӗ\bXxsǛvzU2~JK,(\otGsaz9Vk5%%/󀱨(Lae4YhI؋~'d2Md u٣.ENҝƧOB2P+m2$ a@>s9=(z:pm56)H p֑~ 0K~p6WW*ʴzuD,U'vɲG,*"*D'Ͱcp&iu^DAa|wkE(\(+|mݞ{@fg}>n e, k`ru,Od&fGs),U̺SnU0,[#ҳTiM.np6IENDB`tuxcards/src/icons/textcenter.png000444 000765 000024 00000001163 11420350116 017574 0ustar00alexstaff000000 000000 PNG  IHDRw=gAMAOX2tEXtSoftwareAdobe ImageReadyqe<IDATHTNQ| e/5јxebXRj](`i-nPrw̜)3ovҭw<SxKKrT{ξ_!xPB w˄m *`4_j%7,o4W\7]K̠>lK#@m2:p^my P,E :#MW;9O0ݙ6x;󼗉!XN:IK1Y%y70 :4 3&DB[g)uE;Ӯ :ul|Gr hW\d W$U `Y$*EW|W|赘|C5l 0Tc1s:K$m"&- \¨ ?f ?RCI\)@[x2n:Gbμ!p2_76*)A@Oyz75\@5GV^MɽI^2)w~m;TlAѧTdm\/MF  jy8$bU\*z7Vj{("*rݺ!_q|w[bOTXӇʅ5'y!PҒy؀I3gCP';ު- `h£ gp-[*ZS\a\'Bo0IK }cT@.hEiތ8)vk@SS@q6_ch'Ȯ-ʙR_J[d pnWݧi$=/cMԢ0~ϕo=j`d8)#UI .2A$ufR@MĞBϻ)x"!ra8{;qٞFaL[ t_jkK)S#upD.N4swRyp: Gl\ ym9?|cNӑwVuDnL5C9P H\i6_b|6q_\e"y*ܾ"وgߝ1B5ykr5_~/b|HUa9/?sȣ@BͽyxT3ӫ`R$ޝIa՝oZl qk?≸i/cm.MrI'DIENDB`tuxcards/src/icons/textleft.png000444 000765 000024 00000001241 11420350116 017243 0ustar00alexstaff000000 000000 PNG  IHDRw=gAMAOX2tEXtSoftwareAdobe ImageReadyqe<3IDATHUnA̧|O!BpRxl $cm]{;F3dCkzkv5=[7nNܘ,%aة /Op^ Hz 쓞=+O_#ՐF 7o94'-MEq\:]"nm/QqɓJ $ 9˩E8MSfK)_UՐ{'پmZH)<!'>CSi>U8/JL ϋ i@%ڤLZ3H~<mXߛa/jS۳,~_lqQ̀ڄcnƙ/O&4ʇM-2|@%ڴ&'V^7?W.\u&3B-0\}RR/GD0F4Q!9b;16-IENDB`tuxcards/src/icons/textright.png000444 000765 000024 00000001245 11420350116 017432 0ustar00alexstaff000000 000000 PNG  IHDRw=gAMAOX2tEXtSoftwareAdobe ImageReadyqe<7IDATHT]oAOgS&V_h Phi] X,l3sg&P&ιwٽwݹnq9+Z֚8mXS=XYuU~>׸S{S&L&A\Dan#5`D9(W'3f'):E%d!h?LeL8? DVG<ga=3F5ΐ+<9e?)F=m|! `dm,oL֋6VSmbfd@5yWQ Js[љĀPd< ,F~J0Ş8<0dFI6C퓄$&#X$/Z#xr({U(~ 46O$qNF"^DuQtMk+gmgY Z'Z#E\+>` Vzq$л Fw"X!injO%/Q`i% +5~~JIENDB`tuxcards/src/icons/textunder.png000444 000765 000024 00000001713 11420350116 017432 0ustar00alexstaff000000 000000 PNG  IHDRw=gAMAOX2tEXtSoftwareAdobe ImageReadyqe<]IDATHǵ]HQWR)WߡYYM]"4%țDqX7R~Sgtt:5M {yv?syD^+tr/h|Mq5/M"EG$?igXV۴zy>Ŧ|\A iWig.0_m"Ui`1Ue?q_TzO4hm8wLSB2Drgri#`VޑR2EK:yB{)`}*.8ء {fh B1hB-k Y G̀1;!E}" ̙i1Eb!B5ӠUIѝ3`3f4+(u rM3hnAELjj>Mi4* `fye]*͇ B)=/=xt 9[߀>bf-/k!йb` 7dq"1TvJnN|YPqAkx03j%!,)7&]Xy&Ϫ%P؆}7"gpkckn`O@ܽꅢ:H{~Z%I/ 08[Mn m\NEgb<:a3;a43+41?4} G/g)/ܝNJ]/3(/H.Xp_(@d:152-fhgh13ƘKm+h l2n pg8 O.Pwn8 IIENDB`tuxcards/src/icons/unlock.xpm000444 000765 000024 00000011634 11420350116 016726 0ustar00alexstaff000000 000000 /* XPM */ static const char * unlock_xpm[] = { "30 30 190 2", " c None", ". c #999999", "+ c #B0B0B0", "@ c #DEDEDE", "# c #DFDFDF", "$ c #B4B4B4", "% c #6C6C6C", "& c #FFFFFF", "* c #FBFBFB", "= c #F2F2F2", "- c #E3E3E3", "; c #BEBEBE", "> c #9F9F9F", ", c #8F8F8F", "' c #838383", ") c #7D7D7D", "! c #888888", "~ c #AAAAAA", "{ c #C0C0C0", "] c #303030", "^ c #707070", "/ c #AEAEAE", "( c #626262", "_ c #676767", ": c #929292", "< c #C3C3C3", "[ c #363636", "} c #8C8C8C", "| c #949494", "1 c #848484", "2 c #CFCFCF", "3 c #383838", "4 c #F3F3F3", "5 c #808080", "6 c #535353", "7 c #6F6F6F", "8 c #A3A3A3", "9 c #B9B9B9", "0 c #7C7C7C", "a c #D3D3D3", "b c #3A3A3A", "c c #7E7E7E", "d c #D0D0D0", "e c #D8D8D8", "f c #7F7F7F", "g c #3E3E3E", "h c #525252", "i c #DADADA", "j c #777777", "k c #C2C2C2", "l c #CDCDCD", "m c #EDEDED", "n c #9D9D9D", "o c #4B4B4B", "p c #656565", "q c #767676", "r c #9B9B9B", "s c #9C9C9C", "t c #E6E6E6", "u c #606060", "v c #646464", "w c #5C5C5C", "x c #6D6D6D", "y c #727272", "z c #8A8A8A", "A c #BCBCBC", "B c #F0F0F0", "C c #ECECEC", "D c #E1E1E1", "E c #C4C4C4", "F c #ABABAB", "G c #595959", "H c #636363", "I c #717171", "J c #9E9E9E", "K c #FEFEFE", "L c #F1F1F1", "M c #E0E0E0", "N c #CCCCCC", "O c #969696", "P c #4C4C4C", "Q c #696969", "R c #A9A9A9", "S c #C5C5C5", "T c #A7A7A7", "U c #9A9A9A", "V c #909090", "W c #787878", "X c #5B5B5B", "Y c #4E4E4E", "Z c #565656", "` c #939393", " . c #C6C6C6", ".. c #D2D2D2", "+. c #B5B5B5", "@. c #585858", "#. c #464646", "$. c #8B8B8B", "%. c #C1C1C1", "&. c #CACACA", "*. c #D9D9D9", "=. c #979797", "-. c #FD9280", ";. c #FF9A88", ">. c #7B7B7B", ",. c #A4A4A4", "'. c #B3B3B3", "). c #C9C9C9", "!. c #919191", "~. c #F49585", "{. c #C7070A", "]. c #C50802", "^. c #C90F01", "/. c #CF1700", "(. c #D61E00", "_. c #E02500", ":. c #FE7759", "<. c #757575", "[. c #828282", "}. c #CC1818", "|. c #C6120E", "1. c #C91509", "2. c #D01C07", "3. c #D92505", "4. c #E02804", "5. c #E92B04", "6. c #FE9988", "7. c #CC181A", "8. c #C91A1A", "9. c #C92018", "0. c #CE2716", "a. c #D52B13", "b. c #DE3110", "c. c #E3310F", "d. c #EA3612", "e. c #F3421E", "f. c #B50000", "g. c #898989", "h. c #CBCBCB", "i. c #C81719", "j. c #C8201E", "k. c #D2331F", "l. c #D9361C", "m. c #EC401F", "n. c #F24827", "o. c #B1B1B1", "p. c #FDFDFD", "q. c #C7181A", "r. c #C8221F", "s. c #CF2E21", "t. c #EC4525", "u. c #EF4D2E", "v. c #F25436", "w. c #4D4D4D", "x. c #C81B1A", "y. c #CB231D", "z. c #D42D1D", "A. c #DD351E", "B. c #EE4A2D", "C. c #F25437", "D. c #F35C41", "E. c #F36146", "F. c #393939", "G. c #D02419", "H. c #D32818", "I. c #DC2D16", "J. c #F36046", "K. c #F4664C", "L. c #F4674D", "M. c #686868", "N. c #BDBDBD", "O. c #E7E7E7", "P. c #FD9885", "Q. c #DF3319", "R. c #DF2D13", "S. c #EB3213", "T. c #EF4328", "U. c #F3644D", "V. c #F3634D", "W. c #B8B8B8", "X. c #E9310E", "Y. c #EA2D0C", "Z. c #EE3213", "`. c #F04327", " + c #F45A40", ".+ c #000000", "++ c #EC3110", "@+ c #EF3517", "#+ c #F04025", "$+ c #F14D35", " ", " ", " . . . . . . . ", " . + @ @ @ @ # $ % ", " . + & & & * = - ; . % ", " + & > , ' ) ! . ~ { % ] ", " ^ & / ' ( _ : < % [ ", " } & | % 1 2 % 3 ", " . 4 5 6 7 5 8 9 { 0 a % b ", " . @ c _ + ; d e & f a % g ", " h } i 7 j k l e & m n a % h o ", " p ^ q r 7 s < e & = t { $ u % v w ", " x y ) z r A e & B C D 2 E F ' G H ", " _ I | | J d K L i M # N { O _ P G ", " y Q } R n F d S $ T U : V W X Y Z ", " 0 W ` > .2 K t @ .. .+.s ^ @.#.@. ", " f } $.| %.&.& M *.N =.-.;.;.;.;.;. ", " >.0 O ,.'.A & ..).!.~.{.].^./.(._.:. ", " <.[.V =.S 2 & M / -.}.|.1.1.2.3.4.5.:. ", " 7 <.` 8 +.; & ..6.7.8.9.0.0.a.b.c.d.e.f. ", " <.[.g.: < h.& # ;.i.j.& & k.l.& & m.n.f. ", " 7 <.` 8 o.9 p.2 ;.q.r.s.& & & & t.u.v.f. ", " w.) g.: < h.& # ;.x.y.z.A.& & B.C.D.E.f. ", " F.: =.o.9 p.2 ;.G.H.I.& & & & J.K.L.f. ", " M.$.$ N.O.e P.Q.R.& & S.T.& & U.V.f. ", " } s W.9 0 :.X.Y.Z.Z.`. +U.U.f. ", " .+.+:.++@+#+$+U.U.f. ", " .+:.f.f.f.f.f. ", " ", " "}; tuxcards/src/icons/upArrow.xpm000555 000765 000024 00000006435 11420350116 017100 0ustar00alexstaff000000 000000 /* XPM */ static const char * upArrow_xpm[] = { "24 24 128 2", " c None", ". c #68A9FF", "+ c #2E59B8", "@ c #69AAFF", "# c #88BFF9", "$ c #699EE5", "% c #2551B5", "& c #6AAAFF", "* c #8ABFF9", "= c #86BEF9", "- c #83BCF9", "; c #6399E3", "> c #1D4BB2", ", c #6BABFF", "' c #87BEF9", ") c #7FB9F8", "! c #79B4F7", "~ c #5A91E1", "{ c #1646B0", "] c #83BBF9", "^ c #7EB8F7", "/ c #79B3F7", "( c #74AFF6", "_ c #6DAAF5", ": c #4F88DF", "< c #1142AE", "[ c #85BDF9", "} c #81B9F8", "| c #7CB6F7", "1 c #77B2F6", "2 c #72AEF5", "3 c #6CA9F4", "4 c #67A4F3", "5 c #619EF2", "6 c #457EDC", "7 c #0C3EAC", "8 c #65A7FF", "9 c #87BDF9", "0 c #7FB8F7", "a c #7BB5F7", "b c #76B0F6", "c c #71ABF5", "d c #6AA7F3", "e c #65A1F2", "f c #5F9CF0", "g c #5998EF", "h c #5493EE", "i c #3A75D9", "j c #093BAB", "k c #62A6FF", "l c #B5D6FB", "m c #B4D5FB", "n c #B1D3FB", "o c #79B2F6", "p c #73ADF5", "q c #6EA9F4", "r c #69A4F2", "s c #63A0F1", "t c #5D9AEF", "u c #4982DD", "v c #98BDF5", "w c #94B9F4", "x c #91B8F2", "y c #326DD6", "z c #0639AA", "A c #5FA4FF", "B c #5DA3FF", "C c #5CA2FF", "D c #5AA1FF", "E c #58A0FF", "F c #569FFF", "G c #A6CAF8", "H c #66A1F1", "I c #609DF0", "J c #5A98EE", "K c #5693EE", "L c #447CDB", "M c #0B3DAC", "N c #0A3CAC", "O c #083BAB", "P c #073AAB", "Q c #0437A9", "R c #539DFF", "S c #A1C5F7", "T c #5E9BF0", "U c #5896EE", "V c #5391ED", "W c #4F8DEB", "X c #3E77DA", "Y c #509BFF", "Z c #9CC1F5", "` c #5694ED", " . c #518EEC", ".. c #4C89EA", "+. c #4785EA", "@. c #3972D8", "#. c #083AAB", "$. c #4E9AFF", "%. c #97BCF5", "&. c #4D8CEB", "*. c #4988EA", "=. c #4584E9", "-. c #4180E8", ";. c #366FD7", ">. c #4B99FF", ",. c #93B8F3", "'. c #4785E9", "). c #4281E9", "!. c #3F7FE8", "~. c #3C7BE7", "{. c #316CD6", "]. c #0538AA", "^. c #4998FF", "/. c #90B4F2", "(. c #4080E8", "_. c #3D7CE7", ":. c #3A7AE6", "<. c #3978E6", "[. c #306BD6", "}. c #4897FF", "|. c #8BB2F0", "1. c #89AFEF", "2. c #88AEEF", "3. c #87AEEF", "4. c #6790DD", "5. c #0336A9", "6. c #093CAB", "7. c #0236A9", " ", " ", " ", " ", " . + ", " @ # $ % ", " & * = - ; > ", " , * ' - ) ! ~ { ", " @ * ' ] ^ / ( _ : < ", " . # [ } | 1 2 3 4 5 6 7 ", " 8 9 ] 0 a b c d e f g h i j ", " k l m n o p q r s t u v w x y z ", " A B C D E F G H I J K L 7 M N O P Q ", " R S T U V W X j ", " Y Z ` ...+.@.#. ", " $.%.&.*.=.-.;.z ", " >.,.'.).!.~.{.]. ", " ^./.(._.:.<.[.Q ", " }.|.1.2.2.3.4.5. ", " 6.O P P z z ].7. ", " ", " ", " ", " "}; tuxcards/src/icons/debug/showText.xpm000555 000765 000024 00000001527 11420350116 020351 0ustar00alexstaff000000 000000 /* XPM */ static const char *showText_xpm[]={ "22 22 15 1", ". c None", "# c #000000", "d c #1723ff", "a c #191919", "b c #414141", "e c #424ee9", "f c #767fd5", "c c #898989", "g c #b9bcd4", "j c #c2c2c2", "k c #d1d1d1", "l c #d5d5d5", "m c #e9e9e9", "i c #efefef", "h c #ffffff", "......................", "......................", "......................", "...###############abc.", "...#ddddddddddddddefg.", "...###############abc.", "...#hhhhhhhhhhhhhhhhh.", "...#hh#####ih##h##hhh.", "...#hh##hhhhhhhh##hhh.", "...#hh##hhhhh##h##hjc.", "...#hh####ihh##h##hbc.", "...#hh##hhhhh##h##hbc.", "...#hh##hhhhh##h##hbc.", "...#hh##hhhhh##h##hbc.", "...#hh##hhhhh##h##hbc.", "...#hhhhhhhhhhhhhhhhh.", "...#hhhhhhhhhhhhhhhhh.", "...###############abc.", "...#kkkkkkkkkkkkkkl.m.", "......................", "......................", "......................"}; tuxcards/src/icons/debug/xml.xpm000555 000765 000024 00000031646 11420350116 017331 0ustar00alexstaff000000 000000 /* XPM */ static const char *xml_xpm[]={ "34 34 670 2", "Qt c None", ".G c #000000", "gL c #0074b3", "e# c #0077b3", "eA c #007cb8", "#z c #007f45", "#h c #008d4b", "bV c #00915b", "fg c #009751", "eR c #00994b", "ep c #009b3e", "cK c #00a031", "#g c #00b475", "gK c #0167a2", "fo c #0183c2", "e1 c #0184c0", "bS c #018c47", "bs c #018f5f", "d3 c #019042", "aE c #019060", "ae c #01915f", "cl c #028953", "fi c #028f54", "#R c #03915f", "#N c #039e49", "bo c #03a74b", "bR c #048f41", "fG c #049059", "fH c #04935f", "d2 c #04a450", "fN c #0583c0", "eU c #059358", "bT c #059458", "es c #059a55", "#w c #059c53", "aa c #05a44a", "dB c #05a84b", "cm c #068c4d", "#y c #069866", "eq c #06a052", "d1 c #06a548", "fh c #079560", "bU c #079562", "#O c #079958", "aD c #079e57", "ab c #079e58", "er c #079f57", "bp c #079f5a", "aC c #07a447", "a1 c #07a448", "br c #089363", "ad c #089463", "#Q c #089465", "#P c #08975f", "#x c #089763", "ac c #08995e", "bq c #089961", "eS c #089b5c", "eT c #089b5f", "e. c #098dce", "fM c #0b90d1", "cJ c #0ba420", "gM c #0c76ac", "gR c #0d3e61", "cL c #0d6d45", "fF c #0d855e", "#v c #0dca76", "dJ c #0e7fae", "dg c #0e9ce4", "d4 c #0f7554", "dA c #0fa740", "cU c #102532", "#i c #10623d", "cP c #106a2c", "f9 c #1092d7", "fI c #117a67", "gr c #1191d3", "fj c #127c71", "f4 c #128246", "cO c #128679", "d0 c #12a744", "h. c #133755", "h# c #133853", "gy c #133d5e", "et c #137b5d", "ez c #1396d2", "gq c #148fcf", "fn c #1498d6", "#u c #14d250", "gS c #152c3f", "ha c #15364e", "cQ c #1596dc", "fT c #16232b", "ge c #162a39", "e0 c #1699d6", "e2 c #177eb5", "fp c #1781b7", "ck c #178471", "g9 c #18415f", "dh c #187ba4", "#Y c #191919", "f2 c #19a6f5", "dZ c #19a738", "eE c #1a3a4a", "gN c #1a77ad", "f5 c #1a7a35", "d9 c #1ba5e6", "dN c #1d282b", "dk c #1d2d34", "e6 c #1d313a", "#M c #1da333", "ed c #1e313d", "gs c #1e8ec5", "fm c #1fa8e9", "fD c #1fb4ff", "gz c #202f38", "bZ c #205064", "eV c #208e88", "ey c #20a9e7", "dC c #20d390", "eZ c #21a9e9", "f6 c #227774", "dK c #2281b6", "d# c #228766", "g. c #228fc2", "hb c #233c4a", "fL c #2397c5", "f3 c #23aade", "dH c #23b2f6", "g8 c #244962", "fl c #24b2e0", "gQ c #256189", ".2 c #25706b", "go c #26849b", "f7 c #27acf4", "d8 c #27b5f3", "f8 c #287d8d", "a2 c #288952", "de c #28b6df", "gp c #297884", "aF c #298b52", "eY c #29b8fa", "g7 c #2a363c", "gO c #2a7eaa", "ex c #2ab8f9", "#Z c #2b2b2b", ".4 c #2b84af", "bn c #2bac3d", ".3 c #2c89b3", "dD c #2ca6a6", "#f c #2cd5f1", "cr c #2d2e24", "ft c #2d576b", "bQ c #2d9564", "dY c #2dac57", "bw c #2e332a", "#A c #2e583a", "fO c #2e8fbd", "dG c #2ebfff", "gP c #2f759e", "af c #2f8d55", "dz c #2faa3f", "iB c #302e2a", "cn c #306554", "dI c #307577", "bt c #308a53", "gt c #308fc0", "cg c #30a329", "fk c #30caff", "bd c #312f2b", "a# c #31a93f", "b0 c #32434f", "fS c #326481", "cq c #32718e", "cj c #329db7", "eX c #32c3ff", "d7 c #32c4ff", "a5 c #33403a", "df c #33611d", "fE c #33c8ff", "ah c #344541", "gd c #346483", "ew c #34c8ff", "aH c #354538", "#T c #354c32", ".1 c #358927", "eB c #3589b5", "fK c #359457", "fJ c #35b1e5", "a0 c #36aa3e", "#e c #36dafd", "cR c #37757b", "aB c #37aa3e", "dd c #37cbff", "#S c #388c53", "dF c #38d0ff", "c9 c #39a830", "eO c #39dcff", "eo c #3abdb8", "fe c #3ad4ff", ".5 c #3b81b4", "da c #3b9397", "gT c #3c4347", "#a c #3c841c", "bW c #3c874f", "ff c #3cd2ff", "fu c #3d3525", "cN c #3dd2ff", "d6 c #3dd4ff", "d5 c #3ecbf9", "ev c #3ed7ff", "d. c #3fae7e", "eW c #3fdcff", "bP c #419e31", "dy c #41ad3e", "ci c #41b9ba", "dc c #41d9ff", "dw c #429c27", "eF c #434340", "gu c #4391bb", "dV c #43cdf7", "cM c #43dbff", "eu c #44d5ff", "eP c #44daff", "dE c #44dcff", "c3 c #46870e", "#0 c #474747", "g# c #4798c0", "aQ c #494743", "hc c #4a4d4f", "gx c #4a7d9e", "dx c #4aaf3b", "hr c #4b4741", "#X c #4b4b4b", "cT c #4b6e7a", "#j c #4b7b64", "eQ c #4bd7ff", "hL c #4d4943", "#m c #4d4d4d", "dj c #4d839e", "iA c #4e4b46", "ch c #4ed3cd", "h4 c #4f4b45", "ij c #4f4b46", "em c #4fe0ff", "ea c #5096be", "bm c #50ad37", "#L c #50b535", "#d c #50deff", "c8 c #51b03c", "ec c #525c5e", "gv c #5292b6", "aI c #536876", "#b c #54b9bc", "e5 c #55829e", "cH c #55a747", "aA c #56b137", "a. c #56b43a", "## c #575757", "co c #577153", "di c #5892a9", "az c #589447", "c4 c #5aa622", "fU c #5b544b", "ar c #5c5957", "ag c #5c7a4a", "e7 c #5d584c", "gf c #5d5851", "gw c #5d91b2", "ce c #5d9761", "c7 c #5db33a", "aZ c #5dc13b", "en c #5ddeff", "bx c #5e676c", "db c #5edeff", "#c c #5ee7ff", ".m c #5f5b53", "ga c #5f9dbe", "#o c #5fbec3", "gA c #605c55", "#K c #60b226", ".w c #616161", "bu c #618155", "bO c #61b62d", "cf c #62ab7d", "#t c #62e5c2", ".l c #635e55", "a3 c #638456", "c6 c #63b539", "c5 c #64b833", "cG c #64ba35", "as c #656565", "fq c #65a1c1", "fP c #65a1c2", "c2 c #65c6be", "dW c #65e3ff", "dt c #65e4ff", ".Z c #666666", "bX c #668152", "ay c #669741", ".k c #676157", "dM c #677879", "aG c #688a59", "#2 c #6a6a6a", "e3 c #6aa0c0", "dv c #6abcb9", "bl c #6abe2b", ".j c #6b6459", "gU c #6b665d", "hd c #6b675f", "a4 c #6b7a57", "bY c #6c6e4f", "#J c #6dad76", ".i c #6e675b", "fv c #6e685f", "eD c #6e97b4", "#9 c #6ebd30", "aw c #6f8d19", "eC c #6f9fbc", "#3 c #6fd6ff", "#s c #6fdf50", "aP c #706c69", "cp c #707763", "cF c #70ba35", "gb c #719fbc", "cd c #71b82a", ".h c #726a5d", "aq c #726f6d", "du c #72d7f6", "#F c #72d8fe", "#1 c #737373", "dX c #74e5ff", ".T c #757575", "cB c #75b925", ".g c #766d60", "gc c #769cb7", "gg c #777066", ".6 c #77a0b3", "bv c #787b55", "cE c #78bc33", "#p c #78d7f5", "hJ c #796a56", "fQ c #79a5be", "ho c #7a6d59", ".f c #7a7062", "cA c #7ad960", "gm c #7b7160", "he c #7b746a", ".u c #7b7b7a", "cD c #7bbd32", "cC c #7bbf33", "fZ c #7c7263", "gB c #7c756a", "e4 c #7ca1bb", ".e c #7d7364", "cc c #7dbd2b", "fV c #7e776d", "eb c #7e959d", "fs c #7ea1b9", "fr c #7ea6bf", ".d c #817666", "gV c #817a6e", "#q c #81e0e6", "hx c #827b72", "bG c #82dce6", "ap c #837f7a", "cS c #847150", "hw c #847d74", "ee c #847e76", "dO c #847e78", "eG c #847f75", "dl c #84807b", ".E c #848484", ".c c #857968", "hv c #857f77", "hy c #867f75", ".0 c #86a76f", "ax c #86b519", "eK c #877f71", "ei c #878074", ".U c #878787", "fR c #87a8bf", "cV c #88847f", "aX c #88c554", ".b c #897c6a", "bc c #89827b", "cb c #89c22b", "hu c #8a837b", "av c #8aa649", "e8 c #8b8378", "hs c #8b8a89", "c# c #8bc32a", "bN c #8bdb53", ".x c #8c7f6c", "aO c #8c8b81", "aW c #8cbd3d", ".a c #8d7f6c", ".o c #8e816d", "hf c #8e867a", "ca c #8ec52a", "#I c #8ed694", ".t c #8f8f8e", "c. c #8fce1a", "cI c #8fe2fc", ".# c #90826f", ".v c #919191", "aR c #91f1ff", "bF c #928c81", ".F c #929292", "dL c #92978c", "bk c #93d2a3", "hz c #948b7f", "cs c #94918d", "#r c #94f6aa", "ht c #959089", "b9 c #96f39c", "fw c #978f83", ".7 c #98c2ad", "#H c #98e2ce", "gC c #998f81", "gh c #999081", "bK c #99c814", "bI c #9ac613", "iz c #9c7f55", ".H c #9c9283", "ao c #9d9a90", "a6 c #9d9d9d", "gW c #9f9586", "bJ c #9fcc1d", "bM c #9fe547", "#4 c #9ff8ff", "b8 c #a1998d", "aM c #a2a2a0", "aV c #a2ccbe", "cw c #a49f98", "cZ c #a59f98", "bh c #a5cb23", "aY c #a5f67e", "hA c #a69d8e", ".D c #a6a6a6", "b1 c #a7a4a1", "hg c #a89d8d", "cz c #a99f8d", "fW c #a99f8e", ".n c #aaaaaa", "#U c #aaacaa", ".s c #abaaaa", "bb c #aca79f", "bL c #ade543", "c1 c #aea18e", "hM c #aeaeae", "#8 c #aeee3c", "b# c #b0afac", "#G c #b0fac2", "el c #b4a48b", "ds c #b4a791", ".V c #b4aba0", "#B c #b4b6b4", "at c #b4f8dc", "dU c #b5a58e", "gD c #b5a896", "hR c #b5ad9f", "ef c #b5ada1", "hQ c #b5aea1", "dP c #b5afa4", "an c #b5b3ac", "hS c #b7ad9e", "eH c #b7aea1", "dm c #b7b3aa", "fd c #b8a387", "eN c #b8a58b", "gX c #b8ab98", "hB c #b8ab99", "hP c #b8b1a6", "bj c #b9eef2", "e9 c #bab0a0", ".r c #bababa", "ir c #bbac96", "gi c #bbad9a", "iq c #bbae98", "bE c #bbb6ad", "ii c #bc9c6d", "h3 c #bc9f71", "gn c #bca481", "hI c #bca88a", "ip c #bcaf9b", "io c #bcb0a1", "hO c #bcb7ad", "cW c #bcb7b1", "ai c #bcbdbd", "f1 c #bda784", "hn c #bdaa8c", "g3 c #bdaa8e", "is c #bdab93", "it c #bdad91", "hh c #bdb09c", "in c #bdb2a3", "hK c #be9e75", "hq c #bea279", "gJ c #bea481", "fC c #bea989", "g2 c #beab90", "h5 c #bebebe", "g6 c #bfa37c", "iu c #bfaa8f", "gl c #bfb099", "fx c #bfb4a2", "hT c #bfb4a4", "im c #bfb8ad", "by c #bfbdbb", "am c #bfbfba", "iy c #c0a583", "ix c #c0a985", "fA c #c0b29d", "bg c #c0d800", "iw c #c1aa8a", "iv c #c1aa8d", ".q c #c1c1c1", "fz c #c2b49e", "il c #c2bbb1", "ik c #c2beb3", "#7 c #c2f738", "aL c #c3c2c0", ".S c #c3c2c2", "hC c #c4b6a3", "bH c #c4ee30", "#E c #c5c5c5", "dR c #c6bdb0", "aN c #c6c3be", "hU c #c7b9a7", "gY c #c8b9a2", "gE c #c8baa3", "fX c #c8bba8", "ct c #c8c2bd", "hN c #c8c3bc", "eJ c #c9bdaa", ".p c #c9c9c9", "hi c #cabba3", "eh c #cabeae", "cy c #cac3b5", ".8 c #cad6d5", "aU c #cafff0", "b7 c #cbc6bc", "b5 c #ccc7bf", "aJ c #cdcdcd", "hD c #cfbfa7", "hV c #cfbfa9", "b6 c #cfc9c1", "b. c #cfcdcb", "be c #cfffbe", "gj c #d0c2aa", "c0 c #d1c8ba", "cv c #d1ccc3", "al c #d1d0ce", ".C c #d1d1d1", "b2 c #d2cdc9", ".I c #d2d3d3", "bi c #d2ffff", "gZ c #d3c3aa", "hj c #d3c4ab", "ia c #d3cbbd", "cY c #d3ccc2", "hW c #d4c4ac", "i# c #d4cab8", "h9 c #d4cdc2", "b4 c #d4cfc8", "aS c #d4ffb4", "hE c #d5c5aa", "gF c #d5c6ac", "f. c #d5c9b4", "eI c #d5cab8", "eg c #d5cbbb", "h8 c #d5d2c7", "a7 c #d5d6d6", "fy c #d6c9b3", "ba c #d6d2c9", "bD c #d6d4cf", "aT c #d6e92f", "i. c #d7c9b7", "dQ c #d7cec1", "fY c #d8c8b1", "#k c #d8d9da", "hX c #d9c8ad", "ib c #d9cab8", "dn c #d9d2c4", "cX c #d9d2c8", "ic c #dacbb5", "#6 c #dafe21", "hk c #dbc8ad", "gk c #dbcbb1", "dr c #dbd1c0", ".W c #dbdbdb", "hF c #dcc9ad", "g0 c #dccbad", "dT c #dcd1bc", "bf c #dcef06", "h7 c #ddd5ca", "bz c #dddbd8", "hY c #decbb0", "gG c #deccb1", "id c #deceb4", "ek c #ded0bb", "au c #ded500", "cu c #ded9d0", "a8 c #dedede", "bA c #dfdcd9", "bC c #dfddd8", "aK c #dfdfdf", "hl c #e0cdaf", "b3 c #e0dcd6", "h6 c #e0ddd5", "#n c #e0e0e0", "hG c #e1cdae", "g1 c #e1ceb0", "hp c #e2c69e", "ih c #e2caa2", "g5 c #e2caa6", "hZ c #e2ceae", "ie c #e2cfb4", "h2 c #e3c8a2", "a9 c #e3e3e2", "ak c #e3e3e3", "h1 c #e4cca7", "h0 c #e4cda9", "hm c #e4cdad", "if c #e4d0b0", "g4 c #e5cda8", "ig c #e5cdad", "hH c #e5ceaa", "fB c #e5d4b6", "gI c #e6ceaa", "f0 c #e6d2b2", "fc c #e6d6bb", "dS c #e6dac8", "eM c #e7d7be", "bB c #e7e3dc", "#V c #e7e7e7", "aj c #e7e7e8", "gH c #e8d4b5", ".R c #e9e9e9", ".B c #eaeae9", ".Y c #ececec", "#C c #ececed", "do c #ede4d6", "f# c #eedec7", "#5 c #efff59", "cx c #f2efea", "#l c #f3f3f4", "#W c #f4f4f4", "dq c #f5f1eb", ".Q c #f5f5f5", "#D c #f6f6f6", "dp c #f7f3ee", ".9 c #f7f7f7", ".A c #f8f8f8", ".X c #fafafa", ".L c #fafbfb", ".K c #fafbfc", ".M c #fbfbfb", ".J c #fbfbfc", "fb c #fcfaf8", "eL c #fcfbf8", "ej c #fcfbf9", "#. c #fcfcfc", ".N c #fcfdfd", "fa c #fdfbf8", ".P c #fdfdfd", ".O c #fdfefe", ".z c #fefefe", ".y c #ffffff", "QtQtQtQtQtQtQtQt.#.a.b.c.d.e.f.g.h.i.j.k.l.mQt.nQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQt.o.p.p.p.p.p.p.p.p.p.q.r.s.t.u.v.wQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQt.x.p.y.y.y.y.y.y.y.y.z.A.B.C.D.E.F.GQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQt.H.I.J.K.L.L.M.N.O.z.z.P.Q.R.S.T.p.U.GQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQt.V.W.M.M.X.X.X.X.M.M.M.z.z.X.Y.Z.y.p.U.GQtQtQtQtQtQt", "QtQtQtQtQtQtQtQt.0.1.2.3.4.5.6.7.8.9.9.X#..z.M##.y.y.p.U.GQtQtQtQtQt", "QtQtQtQtQtQtQtQt#a#b#c#d#e#f#g#h#i#j#k#l.9.M.P#m#n.y.y.p.U.GQtQtQtQt", "QtQtQtQtQtQt#o#p#q#r#s#t#u#v#w#x#y#z#A#B#C#D.X#m#E#n.y.y.p.F.wQtQtQt", "QtQtQtQtQt#F#G#H#I#J#K#L#M#N#O#P#Q#R#S#T#U#V#W#X#Y#Y#Z#0.w#1#2QtQtQt", "QtQtQtQt#3#4#5#6#7#8#9a.a#aaabacadaeafagahaiajakalamanaoapaqarasQtQt", "QtQtQtQtatauavawaxayazaAaBaCaDacadaEaFaGaHaIaJ.YaK.WaLaMaNaOaPaQQtQt", "QtQtQtaRaSaTaUaVaWaXaYaZa0a1aDacadaEa2a3a4a5a6a7a8a9b.b#babbbcbdQtQt", "QtQtQtbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbdQtQt", "QtQtbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8bdQtQt", "QtQtb9c.c#cacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczbdQtQt", "QtQtcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcxc0c1bdQtQt", "QtQtc2c3c4c5c6c7c8c9d.d#dadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsbdQtQt", "QtQtdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdRdSdTdUbdQtQt", "QtQtdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9e.e#eaebecedeeefegeheiejekelbdQtQt", "QtQtQtemeneoepeqereseteuevewexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNbdQtQt", "QtQtQteOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8e9f.f#fafbfcfdbdQtQt", "QtQtQtQtfefffgfhbUfifjfkflfmfnfofpfqfrfsftfufvfwfxfyfzfAfBfBfCbdQtQt", "QtQtQtQtfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfAfZ.yf0f1bdQtQt", "QtQtQtQtQtf2f3f4f5f6f7f8f9g.g#gagbgcgdgegfggghgigjgkglgm.yf0gnbdQtQt", "QtQtQtQtQtQtQtgogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgGgH.y.ygIgJbdQtQt", "QtQtQtQtQtQtQtQtgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6bdQtQt", "QtQtQtQtQtQtQtQtg7g8g9h.h#hahbhchdhehfhghhhihjhkhlhmhnho.yhphqbdQtQt", "QtQtQtQtQtQtQtQthrhshthuhvhwhxhyhzhAhBhChDhEhFhGhmhHhIhJ.yhphKbdQtQt", "QtQtQtQtQtQtQtQthLhMhNhOhPhQhRhShThUhVhWhXhYhZhmh0h1h2.y.yhph3bdQtQt", "QtQtQtQtQtQtQtQth4h5h6h7h8h9i.i#iaibicidiehGifiggIg5ihhphphpiibdQtQt", "QtQtQtQtQtQtQtQtijikiliminioipiqirisitiuiviwixiygJg6hqhKh3iiizbdQtQt", "QtQtQtQtQtQtQtQtiAiBiBiBiBiBiBiBiBiBiBiBiBbdbdbdbdbdbdbdbdbdbdbdQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt"}; tuxcards/src/icons/attic/editcopy.xpm000555 000765 000024 00000010536 11420350116 020362 0ustar00alexstaff000000 000000 /* XPM */ static const char * editcopy_xpm[] = { "22 22 208 2", " c None", ". c #111111", "+ c #121212", "@ c #2A2A2A", "# c #262626", "$ c #3A3A3A", "% c #777777", "& c #B5B5B5", "* c #808080", "= c #707070", "- c #929292", "; c #5E5E5E", "> c #101010", ", c #3F3F3F", "' c #A4A4A4", ") c #E2E2E2", "! c #FFFFFF", "~ c #BFBEBF", "{ c #747374", "] c #E6E6E6", "^ c #CFCFCF", "/ c #6D6D6D", "( c #535353", "_ c #F8F8F8", ": c #D5D5D5", "< c #DFDFDF", "[ c #F2F2F2", "} c #4B4A4A", "| c #969595", "1 c #7F7E7F", "2 c #161616", "3 c #FAFAFA", "4 c #9F9F9F", "5 c #C7C7C7", "6 c #B1B1B1", "7 c #E3E3E3", "8 c #FDFDFD", "9 c #7D7D7C", "0 c #7A7979", "a c #848384", "b c #7A7A7A", "c c #393938", "d c #090909", "e c #000000", "f c #BDBDBD", "g c #ECECEC", "h c #CACACA", "i c #BABABA", "j c #E6E5E4", "k c #EBE8E6", "l c #DBD8D5", "m c #D1CBC7", "n c #807B77", "o c #0E0E0E", "p c #0B0B0B", "q c #D7D7D7", "r c #737373", "s c #A3A3A3", "t c #DADADA", "u c #E7E7E6", "v c #F8F5F2", "w c #D9D3CE", "x c #C3BBB5", "y c #9D958F", "z c #C0B8B1", "A c #1D1D1D", "B c #A8A8A8", "C c #2C2C2C", "D c #868686", "E c #424242", "F c #F9F9F9", "G c #E5E5E5", "H c #E1E1E1", "I c #A1A1A1", "J c #5A5552", "K c #9D9690", "L c #CCC0B7", "M c #DBCEC3", "N c #DACDC2", "O c #33312F", "P c #838383", "Q c #353435", "R c #F7F7F7", "S c #C8C8C8", "T c #EAEAEA", "U c #959494", "V c #D7D6D4", "W c #DCD8D5", "X c #F4EDE7", "Y c #E5DBD1", "Z c #C0B3A8", "` c #9A8D82", " . c #B0A194", ".. c #655D56", "+. c #414141", "@. c #B4B4B4", "#. c #3C3B3B", "$. c #BFBFBF", "%. c #898989", "&. c #FEFEFE", "*. c #ADADAD", "=. c #F5F5F5", "-. c #EFEDEC", ";. c #D6D2D0", ">. c #9B9793", ",. c #938B86", "'. c #BCAEA2", "). c #BBAB9D", "!. c #D0BEAF", "~. c #E4CFBD", "{. c #958679", "]. c #363636", "^. c #ACACAC", "/. c #3A3939", "(. c #424141", "_. c #3B3A3B", ":. c #313131", "<. c #6F6F6F", "[. c #CCCBCB", "}. c #8C8988", "|. c #CCC6C2", "1. c #C9C1BB", "2. c #E9DDD4", "3. c #E1D3C7", "4. c #B7A89D", "5. c #B4A292", "6. c #877869", "7. c #C4AC97", "8. c #818181", "9. c #A0A0A0", "0. c #323232", "a. c #FCFBFB", "b. c #F0EBE7", "c. c #C3BDB7", "d. c #D6CCC3", "e. c #A79688", "f. c #8B7E72", "g. c #948579", "h. c #CDB8A5", "i. c #E3CAB4", "j. c #D1B49C", "k. c #3E3731", "l. c #9E9E9E", "m. c #C5C5C5", "n. c #9D9895", "o. c #908983", "p. c #D3C6BC", "q. c #E6D6C7", "r. c #EFDCCB", "s. c #E5CEBB", "t. c #DBC1AB", "u. c #D0B299", "v. c #B2957D", "w. c #433931", "x. c #373636", "y. c #5D5D5D", "z. c #8E8E8E", "A. c #7C7C7C", "B. c #DDDDDD", "C. c #9C9C9C", "D. c #FAF4EF", "E. c #EEE2D6", "F. c #E4D5C7", "G. c #D9C7B8", "H. c #C6B2A1", "I. c #938274", "J. c #62574D", "K. c #312C28", "L. c #181818", "M. c #9A9A9A", "N. c #B7B7B7", "O. c #DCDCDC", "P. c #565452", "Q. c #D8CFC7", "R. c #A59C94", "S. c #706962", "T. c #3C3834", "U. c #0C0C0C", "V. c #060606", "W. c #4B4B4B", "X. c #4E4E4E", "Y. c #7D7D7D", "Z. c #727272", "`. c #1C1B1B", " + c #040404", ".+ c #949494", "++ c #999999", "@+ c #A5A5A5", "#+ c #B9B9B9", "$+ c #D1D1D1", "%+ c #E9E9E9", "&+ c #AAAAAA", "*+ c #515151", "=+ c #606060", "-+ c #828282", ";+ c #545353", ">+ c #9D9D9D", ",+ c #DEDEDE", "'+ c #0D0D0D", ")+ c #CBCBCB", "!+ c #D4D4D4", "~+ c #EDEDED", "{+ c #F4F4F4", "]+ c #FCFCFC", "^+ c #CDCDCD", "/+ c #D2D2D2", "(+ c #D6D6D6", "_+ c #D8D8D8", " ", " . + @ # ", " . + $ % & * = - ; > ", "+ , ' ) ! ! ! ~ { ] ^ / . ", " ( ! ! _ : < [ } | 1 $ 2 ", " 2 3 4 5 6 7 8 9 0 a b c d e ", " . f g 3 7 h i j k l m n o p o > . ", " . * q r s t u v w x y z A B 5 C D + ", " E F 3 G H I J K L M N O P f Q R S + ", " . T 0 U V W X Y Z ` ...+.@.#.$.8 %.+ &.", " . *.=.-.;.>.,.'.).!.~.{.].^./.(._.:.+ &.", " <.[.}.|.1.2.3.4.5.6.7.+ 8.S @.9.8.+ &.", " 0.a.b.c.d.e.f.g.h.i.j.k.l.$.H R m.+ &.", " . t n.o.p.q.r.s.t.u.v.w.x.y.z.A.B.+ &.", " . C.D.E.F.G.H.I.J.K.L.:.M.N.O.=.B.+ &.", " P.Q.R.S.T.U.p p V.W.X.Y.b Z.Y.B.+ &.", " 2 `.p d +V..+++l.@+^.#+$+%+F B.+ &.", " e d &+*+=+z.-+<.;+>+* ,++ &.", " e '+)+!+B.] ~+{+F ]+! ,++ &.", " > ^+/+(+_+t O.B.,+,+,++ &.", " . . . . + + + + + + + + &.", " &.&.&.&.&.&.&.&.&.&.&.&.! "}; tuxcards/src/icons/attic/editcut.xpm000555 000765 000024 00000003063 11420350116 020200 0ustar00alexstaff000000 000000 /* XPM */ static const char * editcut_xpm[] = { "24 24 57 1", " c None", ". c #432C00", "+ c #6B5937", "@ c #4D370E", "# c #442D02", "$ c #FFECA1", "% c #EAD699", "& c #B7934B", "* c #4B350C", "= c #493309", "- c #FFEBA0", "; c #9D6C0A", "> c #020202", ", c #CC9900", "' c #432C01", ") c #E8D391", "! c #000000", "~ c #DCB950", "{ c #5E4C29", "] c #010101", "^ c #CD9B05", "/ c #714A00", "( c #3C2800", "_ c #DFD0B2", ": c #FFEEAE", "< c #9A6600", "[ c #FFF4CB", "} c #9B7F4C", "| c #4E3913", "1 c #D5AB2D", "2 c #513C14", "3 c #E8D290", "4 c #A58D5F", "5 c #9E6C0B", "6 c #838383", "7 c #A5761C", "8 c #7B6439", "9 c #966500", "0 c #533F1C", "a c #FFFFFF", "b c #553800", "c c #966400", "d c #402A00", "e c #131313", "f c #494949", "g c #EBEBEB", "h c #402900", "i c #422B00", "j c #2A2A2A", "k c #EAEAEA", "l c #1F1F1F", "m c #BABABA", "n c #E7E7E7", "o c #606060", "p c #E2E2E2", "q c #DCDCDC", "r c #C0C0C0", " .+@ ", " #$%&* ", " =-;>,. ", " ')!!,. ", " !~!!,. {. ", " ]^/!,. (_:. ", " ..<< c #ADA35A", ", c #362E16", "' c #EAEAEA", ") c #FFFFFF", "! c #EEEEEE", "~ c #5F5000", "{ c #F8F8DB", "] c #F1F1C6", "^ c #D4CE8F", "/ c #A79C40", "( c #4D472A", "_ c #C5C5C5", ": c #C9C9C9", "< c #CCCCCC", "[ c #DBDBDB", "} c #3A3636", "| c #A6A6A6", "1 c #DCD697", "2 c #D1CD7E", "3 c #BEB961", "4 c #B3AD50", "5 c #897912", "6 c #818181", "7 c #888885", "8 c #8C8C8C", "9 c #262626", "0 c #A2A2A2", "a c #A9A9A9", "b c #B2B6B6", "c c #3E3A32", "d c #2E2E26", "e c #26261A", "f c #22221A", "g c #212119", "h c #212115", "i c #151511", "j c #616165", "k c #717171", "l c #797979", "m c #212121", "n c #999999", "o c #9E9E9E", "p c #AAAAAA", "q c #BEBEBE", "r c #9A9A9A", "s c #6A6A6A", "t c #5B5B5B", "u c #616161", "v c #575757", "w c #595959", "x c #939393", "y c #2C2C2C", "z c #B5B5B1", "A c #AFAFAF", "B c #9A9E9E", "C c #969696", "D c #7C7C7C", "E c #462C15", "F c #392414", "G c #2E1E11", "H c #20160F", "I c #15100C", "J c #1B1B1B", "K c #1E1E1E", "L c #E6E6E6", "M c #9F9F9F", "N c #A4A4A4", "O c #A2A29E", "P c #959595", "Q c #7A7A7A", "R c #313131", "S c #121212", "T c #E3E3E3", "U c #B6B6B6", "V c #9F9FA3", "W c #979797", "X c #8A8A8A", "Y c #787878", "Z c #626262", "` c #3B3A3B", " . c #DFDFDF", ".. c #AEAEAE", "+. c #828282", "@. c #C6C6C6", "#. c #464545", "$. c #898989", "%. c #8E8E8E", "&. c #696969", "*. c #D8D8D8", "=. c #A2A2A6", "-. c #858585", ";. c #6C6C6C", ">. c #5B5A5A", ",. c #FDFBFA", "'. c #747474", "). c #D4D4D4", "!. c #868682", "~. c #868686", "{. c #FDFAF8", "]. c #FCF6F1", "^. c #FAF3ED", "/. c #F0E9E5", "(. c #C2B9B1", "_. c #D0D0D0", ":. c #7E7E7E", "<. c #7D7D7D", "[. c #656565", "}. c #3D2714", "|. c #5A5451", "1. c #7E7771", "2. c #A0948B", "3. c #7D736C", "4. c #D9CFC6", "5. c #CDCDCD", "6. c #757575", "7. c #5E5E5E", "8. c #342213", "9. c #FCF7F3", "0. c #FBF4EE", "a. c #F9F0E8", "b. c #F9EDE2", "c. c #F8E9DD", "d. c #F7E6D6", "e. c #D7C9BC", "f. c #2C1D11", "g. c #5A5959", "h. c #C3BFBC", "i. c #7F7B78", "j. c #5A5551", "k. c #C1B4AA", "l. c #9B8574", "m. c #7D6E62", "n. c #7B6C60", "o. c #D5C1B0", "p. c #707070", "q. c #555555", "r. c #23170E", "s. c #FBF5F0", "t. c #FAF1EA", "u. c #FAEEE5", "v. c #F8EADF", "w. c #F8E7D9", "x. c #F6E3D3", "y. c #F5DECC", "z. c #F5DBC6", "A. c #D4BAA5", "B. c #808080", "C. c #5D5D5D", "D. c #4B4B4B", "E. c #19130E", "F. c #7E7975", "G. c #595450", "H. c #7C6E61", "I. c #564B43", "J. c #7A6959", "K. c #D2B59B", "L. c #6E6E6E", "M. c #6A6666", "N. c #454545", "O. c #120E0B", "P. c #F9ECE0", "Q. c #F7E8DA", "R. c #F7E4D4", "S. c #F5E0CE", "T. c #F5DCC8", "U. c #F4D9C3", "V. c #F2D5BD", "W. c #F2D1B7", "X. c #D0AD91", "Y. c #010101", "Z. c #111111", "`. c #D8CBBF", " + c #D7C6B6", ".+ c #D3BCA8", "++ c #D2B8A1", "@+ c #D2B199", "#+ c #D0AF91", "$+ c #CFA98A", "%+ c #CEA685", "&+ c #000000", " . + @ # $ ", " % % % % & * = - ; > , % % % % % ", "% ' ) ) ! ! ~ ) { ] ^ / ( _ : < [ } ", "% ) | | | ~ ) 1 2 3 4 / 5 ( 6 7 8 9 ", "% ) 0 a b c d e e f e g h i j k l m ", "% ! n o p q p r 6 s t u v u w v x y ", "% ' z A p B o C D E E E F G H I J K ", "% L x M N O r P Q E ) ) ) ) ) ) R K S ", "% T U p V W X Y Z E ) ) ) ) ) ) ` ) : S ", "% .C o o p ..x D E ) +.: +.@.) #.: ) $.S ", "% [ r | o %.+.6 &.E ) ) ) ) ) ) #.#.` R S ", "% *.%.C r | =.-.;.E ) +.>.: +.: ,.@.N '.S ", "% ).| p | !.~.-.;.E ) ) ) ) ) {.].^./.(.S ", "% _.:.~.X r C <.[.}.) >.+.@.+.|.1.2.3.4.S ", "% 5.r C ~.:.Q 6.7.8.) ) ,.9.0.a.b.c.d.e.S ", "% : ~.%.%.~.+.l Z f.) g.h.i.j.k.l.m.n.o.S ", "% @.:.+.:.Q p.&.q.r.) s.t.u.v.w.x.y.z.A.S ", "% @.+.~.~.B.B.C.D.E.) F.G.k.l.H.I.l.J.K.S ", "% p L.L.L.L.M.q.N.O.) P.Q.R.S.T.U.V.W.X.S ", " % % % % % % Y.Z.J 4.`. +o..+++@+#+$+%+S ", " S S S S S S S S S S &+&+ ", " ", " ", " "}; tuxcards/src/icons/attic/exit.xpm000555 000765 000024 00000000704 11420350116 017507 0ustar00alexstaff000000 000000 /* XPM */ static const char * exit_xpm[] = { "17 16 4 1", " c None", ". c #000000", "+ c #303030", "@ c #757575", " ", " ", " .. ", " .. ", " . .. . ", " +.. .. ..+ ", " @.. .. ..@ ", " +.@ .. @.+ ", " .. .. .. ", " .. .. .. ", " +.@ .. @.+ ", " @.. ..@ ", " +..@ @..+ ", " +......+ ", " @+..+@ ", " "}; tuxcards/src/icons/attic/filefloppy.xpm000555 000765 000024 00000001451 11420350116 020707 0ustar00alexstaff000000 000000 /* XPM */ /* Drawn by Mark Donohoe for the K Desktop Environment */ /* See http://www.kde.org */ static const char*filefloppy_xpm[]={ "22 22 6 1", "# c #000000", "b c #ffffff", "c c #c0c0c0", "d c #808080", "a c #c0c0c0", ". c None", "......................", "......................", "......................", "......................", "....#############.....", "....#abbbbbbbbcc#d....", "....#ab#####bbcc#d....", "....#abbbbbbbbcc#d....", "....#ab###bbbbcc#d....", "....#abbbbbbbbcc#d....", "....#abbbbbbbbcc#d....", "....#acccccccccc#d....", "....#adddddddddd#d....", "....#adddddddddd#d....", "....#addaaaaaddc#d....", "....#addaaddaddc#d....", "....#addaaddaddc#d....", "....#############d....", ".....ddddddddddddd....", "......................", "......................", "......................"}; tuxcards/src/icons/attic/filenew.xpm000555 000765 000024 00000007475 11420350116 020203 0ustar00alexstaff000000 000000 /* XPM */ static const char * filenew_xpm[] = { "24 24 162 2", " c None", ". c #535353", "+ c #4A4A4A", "@ c #424242", "# c #3A3A3A", "$ c #313131", "% c #292929", "& c #212121", "* c #181818", "= c #101010", "- c #080808", "; c #000000", "> c #4C4C4C", ", c #DEDEDE", "' c #D6D6D6", ") c #C6C6C6", "! c #B4B4B4", "~ c #989898", "{ c #464646", "] c #FFFFFF", "^ c #ECECEC", "/ c #E1E1E1", "( c #141414", "_ c #C9C9C9", ": c #3F3F3F", "< c #393939", "[ c #3E3E3E", "} c #E0E0E0", "| c #323232", "1 c #DCDCDC", "2 c #FEFEFE", "3 c #232300", "4 c #D1D1D1", "5 c #F7F7F7", "6 c #FDFDFD", "7 c #F0EEEC", "8 c #CFCBC4", "9 c #B8B1A9", "0 c #857F7A", "a c #F6F611", "b c #F4F4F4", "c c #F1F1F1", "d c #FEFDFC", "e c #FDFAF7", "f c #E4E0DB", "g c #D0C8C1", "h c #A09B97", "i c #DBDA4D", "j c #FFFF00", "k c #C2C2C2", "l c #E2E2E2", "m c #FEFDFB", "n c #FCF8F5", "o c #FBF3EE", "p c #F9F0E8", "q c #EADFD5", "r c #BBB2AB", "s c #494900", "t c #B8B8B8", "u c #D2D2D2", "v c #FCFAF9", "w c #FAF4EE", "x c #F9EFE7", "y c #F7EBE1", "z c #F5E6D9", "A c #C6B8AC", "B c #AAA538", "C c #FFFFDA", "D c #ABABAB", "E c #BCBCBC", "F c #DDDCDC", "G c #F3F2F0", "H c #FAF6F2", "I c #FAF3ED", "J c #F8EEE6", "K c #F6EADF", "L c #F3E1D2", "M c #D2C0B1", "N c #DDDBDA", "O c #F1ECE8", "P c #F8F0EA", "Q c #F7EADF", "R c #F5E6D8", "S c #F4E1D2", "T c #F2DDCB", "U c #D0BCAB", "V c #FFFFC3", "W c #FFFFDD", "X c #DBD5CF", "Y c #F0E5DC", "Z c #F6E9DD", "` c #F5E5D8", " . c #F3E1D1", ".. c #F0D8C3", "+. c #CFB8A5", "@. c #ADA9A7", "#. c #CCC7C1", "$. c #EADFD7", "%. c #F5E8DC", "&. c #9E9C9B", "*. c #ABA7A4", "=. c #BEB8B2", "-. c #D9D1C8", ";. c #EEE0D6", ">. c #F4E4D6", ",. c #F3E0D0", "'. c #F1DCC9", "). c #EFD8C3", "!. c #EED3BC", "~. c #CEB49F", "{. c #D8CFC7", "]. c #EBDED3", "^. c #F2E2D4", "/. c #EFD8C2", "(. c #ECCEB5", "_. c #CCB099", ":. c #9E9C9A", "<. c #D5C9BE", "[. c #EADBCD", "}. c #F1DECD", "|. c #F1DBC8", "1. c #EFD6C1", "2. c #EED2BB", "3. c #ECCEB4", "4. c #EAC9AD", "5. c #CBAC93", "6. c #ABA7A3", "7. c #BDB6B1", "8. c #B0A69D", "9. c #C7BAAE", "0. c #E4D3C3", "a. c #EFD8C5", "b. c #EFD7C1", "c. c #EED2BA", "d. c #E9C5A6", "e. c #C9A88D", "f. c #999999", "g. c #BDB6B0", "h. c #D8CDC4", "i. c #D5C9BD", "j. c #C7BAAD", "k. c #D6C4B6", "l. c #E9D4C0", "m. c #EED5BF", "n. c #ECCDB3", "o. c #EAC9AC", "p. c #E8C5A6", "q. c #E7C2A2", "r. c #C8A487", "s. c #B1AAA5", "t. c #CDC3BB", "u. c #CDC0B6", "v. c #C8B9AD", "w. c #CBB9AC", "x. c #CFBBAA", "y. c #CFB8A6", "z. c #CEB5A0", "A. c #CDB09A", "B. c #CBAD94", "C. c #C9A88E", "D. c #C8A488", "E. c #C7A081", " ", " . + @ # $ % & * = - ; ; ", " > , , , , , , ' ) ! ; ~ ; ", " { , ] ] ] ] ] ] ^ / ( _ ~ ; ", " : , ] ] ] ] ] ] ] ^ % ] _ ~ ; ", " < , ] ] ] ] ] ] ] ] [ } ] _ ~ ; ", " | 1 2 ] ] ] ] ] ] ] . [ % ( ; ; ", " 3 4 5 6 2 6 2 ] ] ] 6 7 8 9 0 ; ", " 3 3 a 3 } b 3 c 5 6 ] ] d e f g h ; ", " 3 i 3 3 j 3 k 3 i 3 l 5 2 m n o p q r ; ", " 3 j s i j i s j 3 t u c v n w x y z A ; ", " s j B C B j s D E F G H I J K z L M ; ", " 3 3 i B C C C B i 3 3 N O P J Q R S T U ; ", "3 a j j C V W V C j j a 3 X Y Z ` .T ..+.; ", " 3 3 i B C C C B i 3 3 @.#.$.%.` .T ..+.; ", " s j B C B j s &.*.=.-.;.>.,.'.).!.~.; ", " 3 j s i j i s j 3 =.{.].^.,.'./.!.(._.; ", " 3 i 3 ; 3 j 3 :.3 i 3 <.[.}.|.1.2.3.4.5.; ", " 3 ; ; 3 a 3 6.7.3 8.9.0.a.b.c.3.4.d.e.; ", " 3 f.g.h.i.j.k.l.m.c.n.o.p.q.r.; ", " ; s.7.t.u.v.w.x.y.z.A.B.C.D.E.; ", " ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ", " ", " "}; tuxcards/src/icons/attic/filenew~.xpm000555 000765 000024 00000001427 11420350116 020370 0ustar00alexstaff000000 000000 /* XPM */ /* Drawn by Mark Donohoe for the K Desktop Environment */ /* See http://www.kde.org */ static const char*filenew_xpm[]={ "22 22 5 1", "# c #000000", "c c #c0c0c0", "a c #ffffff", "b c #dcdcdc", ". c None", "......................", "......................", "......................", "......................", "......#######.........", "......#aaaabb#........", "......#aaaacab#.......", "......#aaaacaab#......", "......#aaaac####......", "......#aaaaaccc#......", "......#aaaaaaaa#......", "......#aaaaaaaa#......", "......#aaaaaaaa#......", "......#aaaaaaaa#......", "......#aaaaaaaa#......", "......#aaaaaaaa#......", "......#aaaaaaaa#......", "......##########......", "......................", "......................", "......................", "......................"}; tuxcards/src/icons/attic/fileopen.xpm000555 000765 000024 00000010756 11420350116 020347 0ustar00alexstaff000000 000000 /* XPM */ static const char * fileopen_xpm[] = { "24 24 205 2", " c None", ". c #000000", "+ c #26190E", "@ c #271C11", "# c #271A0F", "$ c #3B2714", "% c #F4AD6A", "& c #FEC280", "* c #FEC27F", "= c #FDB773", "- c #E5A566", "; c #FECB93", "> c #FED39A", ", c #FECE93", "' c #FEC88B", ") c #F6B675", "! c #150F09", "~ c #FEC385", "{ c #FED59C", "] c #FECE92", "^ c #FCB269", "/ c #F9AC62", "( c #F8AC62", "_ c #3D2815", ": c #FEC888", "< c #FED199", "[ c #FEC282", "} c #EEA059", "| c #80532C", "1 c #4B3119", "2 c #4A3019", "3 c #452C17", "4 c #402915", "5 c #3C2714", "6 c #372312", "7 c #322011", "8 c #2E1D0F", "9 c #291A0E", "0 c #25170C", "a c #46301B", "b c #FECA8F", "c c #FDB56E", "d c #A86F3C", "e c #53504D", "f c #FFFFFF", "g c #F7F7F7", "h c #F5F5F5", "i c #F1F1F1", "j c #EAEAEA", "k c #E3E3E3", "l c #DDDDDC", "m c #D6D6D5", "n c #D0D0CE", "o c #C8C8C7", "p c #C2C2C1", "q c #BBBBBA", "r c #B4B4B3", "s c #AFAFAF", "t c #AEAEAE", "u c #343434", "v c #563D25", "w c #FEC685", "x c #FEC182", "y c #F2A55C", "z c #E7E7E7", "A c #E4E4E4", "B c #E1E1E1", "C c #D9D9D8", "D c #D1D1D0", "E c #C7C7C6", "F c #C0C0BF", "G c #B8B8B7", "H c #B0B0AF", "I c #A7A7A6", "J c #9E9E9D", "K c #959595", "L c #8B8B89", "M c #818180", "N c #5E5E5D", "O c #191919", "P c #5F452A", "Q c #FEC283", "R c #FBB269", "S c #C38954", "T c #58534E", "U c #F2F2F2", "V c #E2E2E1", "W c #EAEAE9", "X c #EBEBEA", "Y c #DDDDDB", "Z c #D3D3D1", "` c #CACAC9", " . c #C1C1C0", ".. c #AFAFAD", "+. c #A5A5A3", "@. c #9B9B9A", "#. c #8E8E8D", "$. c #7B7B79", "%. c #363635", "&. c #785A3A", "*. c #FEB972", "=. c #EA9E58", "-. c #6F4F2F", ";. c #8F8E8C", ">. c #D4D4D3", ",. c #E1E1E0", "'. c #E9E9E8", "). c #E7E7E6", "!. c #E5E5E3", "~. c #DEDEDD", "{. c #D5D5D4", "]. c #CDCDCC", "^. c #C4C4C2", "/. c #BABAB9", "(. c #B1B1B0", "_. c #9E9E9C", ":. c #8C8C8B", "<. c #6D6D6C", "[. c #694D31", "}. c #FEB469", "|. c #BE8550", "1. c #5D564F", "2. c #E4E4E3", "3. c #E0E0DF", "4. c #E5E5E4", "5. c #D8D8D6", "6. c #CFCFCE", "7. c #C0C0BE", "8. c #B7B7B6", "9. c #AEAEAD", "0. c #A4A4A3", "a. c #979796", "b. c #282827", "c. c #594027", "d. c #F3A45B", "e. c #684A2D", "f. c #888888", "g. c #DCDCDB", "h. c #D0D0CF", "i. c #C9C9C8", "j. c #B9B9B8", "k. c #B2B2B1", "l. c #A9A9A8", "m. c #A0A09E", "n. c #90908F", "o. c #5E5E5C", "p. c #151514", "q. c #46301A", "r. c #B57740", "s. c #55504C", "t. c #CACACA", "u. c #D2D2D1", "v. c #CDCDCB", "w. c #B3B3B2", "x. c #ACACAB", "y. c #A3A3A2", "z. c #9A9A98", "A. c #818181", "B. c #442C17", "C. c #919191", "D. c #BDBDBB", "E. c #C3C3C1", "F. c #C7C7C5", "G. c #C8C8C6", "H. c #C6C6C5", "I. c #C3C3C2", "J. c #BFBFBE", "K. c #B9B9B7", "L. c #A5A5A4", "M. c #9D9D9B", "N. c #8D8D8C", "O. c #676766", "P. c #0B0704", "Q. c #6D6864", "R. c #ADADAC", "S. c #B6B6B5", "T. c #A9A9A7", "U. c #A2A2A1", "V. c #9D9D9C", "W. c #919190", "X. c #7F7F7E", "Y. c #2C2C2B", "Z. c #171716", "`. c #9A9A9A", " + c #999998", ".+ c #9C9C9B", "++ c #9F9F9D", "@+ c #9A9A99", "#+ c #939393", "$+ c #8B8B8A", "%+ c #8A8A88", "&+ c #7D7D7C", "*+ c #5A5A58", "=+ c #141413", "-+ c #131313", ";+ c #323232", ">+ c #2B2B2B", ",+ c #2D2D2C", "'+ c #2D2D2D", ")+ c #2A2A2A", "!+ c #282828", "~+ c #272727", "{+ c #262625", "]+ c #252524", "^+ c #101010", " ", " . . . . . ", " . . . . . . . . . . ", " . . . . . . ", " . . . . ", " . . . . ", " + @ @ # ", " $ % & * = $ ", " $ - ; > , ' ) $ ! ! ! ! ! ! ! ! ", " $ ~ { ] & ^ / ( ( ( ( ( ( ( ( ( $ ", " _ : < [ } | 1 2 2 2 3 4 5 6 7 8 9 0 . . . . ", " a : b c d e f g h i j k l m n o p q r s t u ", " v w x y 2 o z A B C D E F G H I J K L M N O ", " P Q R S T U V W X k Y Z ` .G ..+.@.#.$.%. ", "$ &.*.=.-.;.>.,.'.).!.~.{.].^./.(.I _.:.<.. ", " [.}.|.1.2.{.3.4.V l 5.6.o 7.8.9.0.a.M b. ", " c.d.e.f.` >.l g.C {.h.i.p j.k.l.m.n.o.p. ", " q.r.s.l t.6.>.u.h.v.o .q w.x.y.z.A.%.. ", " $ B.C.8.D.E.F.G.H.I.J.K.w.x.L.M.N.O.. ", " P.Q.o R.w.S.K.q /.S.w.9.T.U.V.W.X.Y. ", " Z.C.`. +.+++++++M.@+a.#+n.$+%+&+*+=+ ", " -+;+>+Y.,+'+'+'+,+Y.>+)+!+~+{+]+^+ ", " ", " "}; tuxcards/src/icons/attic/fileopen~.xpm000555 000765 000024 00000001447 11420350116 020542 0ustar00alexstaff000000 000000 /* XPM */ /* Drawn by Mark Donohoe for the K Desktop Environment */ /* See http://www.kde.org */ static const char*fileopen_xpm[]={ "22 22 6 1", "# c #000000", "d c #808080", "c c #c0c0c0", "b c #ffffff", "a c #dcdcdc", ". c None", "......................", "......................", "............####......", "...............##.#...", "................###...", "................###...", "...............####...", "....####..............", "....#aba#######.......", "....#babababab#.......", "....#aa##########.....", "....#ba#aacccccd#.....", "....#a#aacacccd#......", "....#a#aacccdcd#......", "....##aacacccd#.......", "....##aacccdcd#.......", "....#dddddddd#........", "....##########........", "......................", "......................", "......................", "......................"}; tuxcards/src/icons/attic/fileprint.xpm000555 000765 000024 00000010054 11420350116 020531 0ustar00alexstaff000000 000000 /* XPM */ static const char *fileprint_xpm[]={ "24 24 177 2", "Qt c None", ".v c #000000", "aL c #008700", "aM c #00ff00", ".X c #050403", ".a c #303030", "aE c #323232", ".n c #333331", ".M c #333333", "aP c #353535", ".L c #363636", "#p c #373737", "aD c #383838", ".d c #393836", "au c #3c3c3c", "aF c #3e3e3e", "#U c #3f3f3f", "aT c #404040", "av c #414141", ".N c #424242", "al c #444444", "#Y c #454545", "aO c #464646", ".Y c #494949", ".1 c #4a4543", ".e c #4f4928", "#c c #4f4f4f", ".# c #565656", "#F c #575756", ".b c #594f45", "aQ c #5c5c5c", "#V c #5f5f5f", "aG c #616161", ".O c #625b57", "#t c #646464", "aN c #666666", "aU c #6a6a6a", "aw c #6d6d6d", "#W c #707070", "#e c #717171", "am c #797979", "#X c #7a7a7a", "aR c #7b7b7b", "a. c #7c7c7c", "aH c #808080", "ak c #818181", "#9 c #828282", "#8 c #848484", "a# c #858585", "#7 c #868686", "#6 c #888888", "#T c #8b8b8b", "aa c #8e8e8e", "#a c #907f0b", "#S c #919191", "#N c #929292", "#M c #959595", "aI c #969696", "aS c #979797", "#D c #989898", "#E c #999999", "#C c #9c9c9c", "#r c #9d9d9d", "#s c #a0a0a0", "aJ c #a2a2a2", "#q c #a3a3a3", "#d c #a4a4a4", "aK c #a6a6a6", ".0 c #a7a7a7", "ay c #aaaaaa", "#B c #acacac", "ab c #aeaeae", "ax c #afafaf", "aB c #b3b3b3", "ao c #b4b4b4", "az c #b5b5b5", "aA c #b6b6b6", "#f c #b7996e", "#G c #b79a6f", "an c #b7b7b7", "#o c #b9b24a", ".Z c #bababa", "aC c #bcbcbc", "ap c #bebebe", "ad c #c1c1c1", "ac c #c3c3c3", "at c #c6c6c6", "ae c #c7c7c7", "ag c #c9c9c9", "#Z c #cacaca", "aq c #cbcbcb", "af c #cccccc", "ah c #cdcdcd", "#0 c #cfcfcf", "ar c #d0d0d0", "ai c #d3d3d3", "#2 c #d4d4d4", "aj c #d5d5d5", "#3 c #d6d6d6", "#b c #d7d178", "#1 c #d7d7d7", "as c #d9d9d9", "#5 c #dadada", "#4 c #dbdbdb", "#O c #e1e1e1", "#P c #e3e3e3", ".2 c #e4c7a3", "#I c #e4c8a5", ".B c #e4caa8", "#h c #e4cba9", "#Q c #e5e5e5", "#w c #e6ceb3", ".K c #e6d8c2", "#J c #e6e6e6", "#H c #e7c08d", "#x c #e7ceaf", "#y c #e7cfb5", "#m c #e7d3bb", ".A c #e7dbc9", "#g c #e8c08d", "#n c #e8d3b8", "#v c #e8d5bb", "#u c #e8d7bf", "#l c #e8d8c1", "#k c #e8d8c4", "#. c #e8d9c6", "## c #e9d7be", "#j c #e9dac5", ".u c #ead7bc", "#K c #eaeaea", ".3 c #ebdeca", ".J c #ebdfce", ".t c #ebe0ce", ".f c #ecdec9", ".c c #ecdfcb", ".W c #ecdfcd", ".o c #ede0cc", ".9 c #ede2d2", ".4 c #ede3d5", ".P c #eee0cf", "#i c #eee3d3", ".8 c #eee5d7", ".z c #eee5d8", ".V c #efe3d3", ".6 c #f0e7dc", ".7 c #f0e8db", ".5 c #f1e7db", ".U c #f1e9dd", ".I c #f1e9de", ".Q c #f1e9df", ".s c #f2ebe2", ".C c #f3ece3", ".H c #f3ede4", ".m c #f3ede6", ".G c #f3eee7", ".R c #f3efe7", ".y c #f4eee6", ".T c #f4eee7", ".x c #f4efe9", ".S c #f4f0e9", ".r c #f5f1ec", ".D c #f5f3f0", ".q c #f6f2ee", ".w c #f6f2ef", ".g c #f6f3f0", ".j c #f6f4f1", ".i c #f6f5f3", "#A c #f6f6f6", ".E c #f7f6f4", ".p c #f7f6f5", ".k c #f7f7f6", ".h c #f7f7f7", ".F c #f8f6f5", ".l c #f8f8f8", "#R c #fdfdfd", "#L c #fefefe", "#z c #ffffff", "QtQtQtQtQtQtQtQtQtQt.#.a.bQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQt.a.c.c.b.d.bQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQt.e.f.g.h.h.i.c.b.a.bQtQtQtQtQt", "QtQtQtQtQtQtQtQtQt.#.j.k.l.l.h.i.j.m.c.n.bQtQtQt", "QtQtQtQtQtQtQtQt.e.o.l.l.l.l.p.q.r.s.t.u.vQtQtQt", "QtQtQtQtQtQtQtQt.#.l.l.l.l.l.w.x.y.z.A.B.vQtQtQt", "QtQtQtQtQtQtQt.e.C.D.E.F.E.j.G.H.I.J.K.bQtQtQtQt", "QtQtQtQt.L.M.N.O.P.Q.R.x.S.T.C.U.V.W.B.X.e.eQtQt", "QtQtQt.Y.Z.0.1.2.3.4.5.6.U.7.8.9#.##.b#a#b.eQtQt", "QtQt#c.Z#d#e.N#f#g#h#i.W#j#k#l#m#n#h.v#o.eQtQtQt", "Qt#p.Z#q#r#s#t.v.##f#g.B#u#v#w#x#y.b#a#b.eQtQtQt", ".v#z#A#B#C#D#E#E#s#t.v#F#G#H#I.2#h.v#o.vQtQtQtQt", ".N#J#K#z#L#A#B#M#N#N#E#s#t.v.##f.N.v#b.v.vQtQtQt", ".#Qt#O#P#O#Q#z#R#A#B#S#S#T#E#s.#.v#U#V#W#X.vQtQt", "#Y#Z#0#1#2#3#4#5#O#z#z#A#B#6#7#8#9a.a##S#U.vQtQt", ".vaaabacadaeafagahaiajQt#z#z#A#Baka.#T#Ual.vQtQt", "Qt.v.vam#N.0anaoapadapacaqaras#z#Aatau#Yav.vQtQt", "QtQtQt.N.v.vawa##saxayazaAaBaCacad#N#YaDaEaFQtQt", "QtQtQtQtQtQt.N.v.vaGaHaIaJaKaLaM#BaNaOaP.vQtQtQt", "QtQtQtQtQtQtQtQtQtav.v.vaQaR#NaS#SaN.N.vQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtaT.v.vaQaU#W.vQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.N.v.vQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt"}; tuxcards/src/icons/attic/filesave.xpm000555 000765 000024 00000005676 11420350116 020351 0ustar00alexstaff000000 000000 /* XPM */ static const char * filesave_xpm[] = { "22 22 118 2", " c None", ". c #6B6B6B", "+ c #000000", "@ c #C1C1C1", "# c #3F3F3F", "$ c #4A4A4A", "% c #717171", "& c #6D6D6D", "* c #8A8A8A", "= c #5C5C5C", "- c #636363", "; c #505050", "> c #747474", ", c #434343", "' c #565656", ") c #FFFFFF", "! c #DFDFDF", "~ c #464646", "{ c #6C6C6C", "] c #040404", "^ c #E0E0E0", "/ c #616161", "( c #545454", "_ c #9B9B9B", ": c #FEFEFE", "< c #5E5E5E", "[ c #777777", "} c #5B5B5B", "| c #4D4D4D", "1 c #D8E6E6", "2 c #767676", "3 c #C4C4C4", "4 c #151515", "5 c #B3B3B3", "6 c #7B7B7B", "7 c #BABABA", "8 c #494949", "9 c #828282", "0 c #EFF0F0", "a c #F9F9F9", "b c #797979", "c c #060606", "d c #989898", "e c #9A9A9A", "f c #3D3D3D", "g c #FCFCFC", "h c #CBCBCB", "i c #0C0C0C", "j c #919191", "k c #949494", "l c #929292", "m c #7C7C7C", "n c #888888", "o c #787878", "p c #737373", "q c #474747", "r c #757575", "s c #8E8E8E", "t c #909090", "u c #8D8D8D", "v c #8B8B8B", "w c #535353", "x c #BBBBBB", "y c #424242", "z c #848484", "A c #838383", "B c #454545", "C c #3A3A3A", "D c #858585", "E c #585858", "F c #404040", "G c #CACACA", "H c #2F2F2F", "I c #6E6E6E", "J c #EAEAEA", "K c #969696", "L c #4C4C4C", "M c #5F5F5F", "N c #7A7A7A", "O c #707070", "P c #BEBEBE", "Q c #4E4E4E", "R c #6A6A6A", "S c #4F4F4F", "T c #9C9C9C", "U c #F1F1F1", "V c #EFEFEF", "W c #D6D6D6", "X c #444444", "Y c #6F6F6F", "Z c #2B2B2B", "` c #676767", " . c #F4F4F4", ".. c #DADADA", "+. c #E3E3E3", "@. c #EDEDED", "#. c #808080", "$. c #515151", "%. c #3B3B3B", "&. c #656565", "*. c #F2F2F2", "=. c #CECECE", "-. c #C5C5C5", ";. c #BCBCBC", ">. c #818181", ",. c #606060", "'. c #5A5A5A", "). c #010101", "!. c #A7A7A7", "~. c #B8B8B8", "{. c #8C8C8C", "]. c #A8A8A8", "^. c #898989", "/. c #414141", "(. c #555555", "_. c #C9C9C9", ":. c #353535", "<. c #383838", " . + ", " + @ # $ % ", " & * @ = - = # ; > ", " , @ @ ' ) ! = & = # ~ { ", " ] @ ' ^ ) ) ) ) ! = / = # ( > ", " { _ @ # : ) ) ) ) ) ) ) ! = < [ + } ", " | @ @ ' ) ) ) ) ) ) ) ) : 1 ' 2 3 + ", " 4 5 ' ^ ) ) ) ) ) ) ) ) ) ' 6 > 7 8 ", " . 9 5 # 0 ) ) ) ) ) ) ) ) a # b 7 c ", " | d e f { g ) ) ) ) ) ) ) ! ' 2 h f ", " i j k l m ( # n ) ) ) ) ) ' o p 7 q ", " { r * s t u v l > w # * ) ^ # > x + ", " y z A B C ' v n D n z & E F r [ G H ", " c m I o J K ~ L M b 9 N o > O . P Q ", ". R p S T ) U V W A X ~ 2 % Y . 7 ] ", "Z & ` ~ .J ..+.@.^ #.$.%.X = ` h y ", "= + &.# *.W W =.-.;.( D >.%.,.,.x '. ", " . ~ ).~ !.3 ;.~.* ~ m {.w w x + ", " . ~ + ~ ].~ D ^./.(.w _.:. ", " . ~ + ~ K <.w w 7 8 ", " . ~ + ~ (.] ", " . + } "}; tuxcards/src/icons/attic/filesave~.xpm000555 000765 000024 00000000575 11420350116 020540 0ustar00alexstaff000000 000000 /* XPM */ static const char *filesave[] = { " 14 14 3 1", ". c #040404", "# c #808304", "a c #bfc2bf", "..............", ".#.aaaaaaaa.a.", ".#.aaaaaaaa...", ".#.aaaaaaaa.#.", ".#.aaaaaaaa.#.", ".#.aaaaaaaa.#.", ".#.aaaaaaaa.#.", ".##........##.", ".############.", ".##.........#.", ".##......aa.#.", ".##......aa.#.", ".##......aa.#.", "a............." }; tuxcards/src/icons/attic/lo16-app-tuxcards.xpm000555 000765 000024 00000001064 11420350116 021730 0ustar00alexstaff000000 000000 /* XPM */ static const char * lo16_app_tuxcards_xpm[] = { "16 18 9 1", " c None", ". c #808080", "+ c #000000", "@ c #C0C0C0", "# c #101010", "$ c #E0A008", "% c #FFFFFF", "& c #FF0000", "* c #0000FF", " .++. ", " .++++. ", " +@+@++ ", " +#++.+ ", " +$$$@+ ", " +$$$@+. ", " +$$%%++ ", " +.%%%%%+. ", " &&&&%****+. ", " &%&&*%*%*++ ", " +&%&&*%*%++. ", " ++&&%&%**%+++ ", " $+%&&%&%*%+++ ", " $$$+++&%*%$++$ ", "$$$$$++%%%@$$$$$", "$$$$$%%%%%+$$$$$", " $$$$$%%+++$$$$ ", " $$$.+++++.$$ "}; tuxcards/src/icons/attic/lo32-app-tuxcards.xpm000555 000765 000024 00000002705 11420350116 021731 0ustar00alexstaff000000 000000 /* XPM */ static const char * lo32_app_tuxcards_xpm[] = { "32 32 17 1", " c None", ". c #D8D8D8", "+ c #B3B3B3", "@ c #8D8D8D", "# c #404040", "$ c #000000", "% c #FCFCFC", "& c #686868", "* c #9C6B0B", "= c #D39114", "- c #EAB20B", "; c #F3CC15", "> c #DA9D0C", ", c #6F4D0F", "' c #1A1ABF", ") c #C20000", "! c #CDAB63", " .+@@+. ", " +#$$$$#+ ", " .#$$$#.$#+ ", " +$$$$$$$$# ", " #$$$$$$$$$ ", " $#%&$&%#$$ ", " $%$%$%$%$$ ", " $@*#*@*%$$ ", " .$*==-;;*$$. ", " +$=--;;>-$$+ ", " &$=====-,$$&. ", " +$$@==--@@$$$&. ", " .&$#+@@@@++#$$$& ", " &$$@%..%%%.+#$$$. ", " .$$#.'''''''.+$$$& ", " &$#)))'%'%''))%+$$. ", " .&))%).)'%'%'%))))#& ", " &))%)%))%'%'')%)%))$ ", " $#))%)%))%'%'%)%)%)$ ", " $$).)%)%)'%'')%)%))$ ", " $$#)%)%))%'')%)%))&$ ", " $$$))%)%)'%'%)%)%)#$ ", " ;;=,).)%))'#')%)%))#$ ", " .;--;$)%)%#$$)%)%))#$,; ", " ;;---;,)).)$$$#)))%)#,>- ", " ;-----;,))#$$$@%.)));;--; ", " -------;,$$$$@%%+,-------; ", " .-------->.++.%%+$,=------! ", " !--------=&.%%.&$$,=------ ", " .!-------=,$$$$$$$,=----! ", " .!!=-==*, $,,===! ", " ..!**, @,,! "}; tuxcards/src/icons/attic/redo.xpm000555 000765 000024 00000003123 11420350116 017465 0ustar00alexstaff000000 000000 /* XPM */ static const char * redo_xpm[] = { "22 22 66 1", " c None", ". c #135628", "+ c #8FBEA0", "@ c #C4DDCB", "# c #E0EBE3", "$ c #FFFFFF", "% c #76C98D", "& c #5DB275", "* c #BEDBC7", "= c #F4F7F5", "- c #0E3D1C", "; c #369D62", "> c #299451", ", c #2E9951", "' c #74BD8C", ") c #C1DCCA", "! c #000000", "~ c #020202", "{ c #37A65E", "] c #3FB86D", "^ c #4BC674", "/ c #6DBE82", "( c #226135", "_ c #17602F", ": c #DFEAE2", "< c #61AC78", "[ c #297640", "} c #071C0D", "| c #040B06", "1 c #092413", "2 c #2B9252", "3 c #9EBFA9", "4 c #6DA27C", "5 c #217C3F", "6 c #0E3D1D", "7 c #07180D", "8 c #5AB57A", "9 c #70C090", "0 c #57976E", "a c #219648", "b c #14552A", "c c #092613", "d c #308F54", "e c #37AA62", "f c #279A58", "g c #2F8853", "h c #0B3218", "i c #051009", "j c #4BB673", "k c #2E9F5E", "l c #34A360", "m c #3B9A5C", "n c #040D07", "o c #438C58", "p c #398851", "q c #378251", "r c #307D4D", "s c #2E7B49", "t c #102317", "u c #0A190F", "v c #0B1C11", "w c #0C1F12", "x c #0C2112", "y c #173E24", "z c #0E2314", "A c #0E1D12", " ", " ", " ..... ", " ..+@#@+.. ", " .+$%&&&&*=-- ", " .#%;>>>>,,')=! ~ ", " .+%>{]^^^^]>,/=! -! ", " .$>{(_!!!!{^]>/=!-:! ", "-+<[_}| 1!{^2/3:4! ", "-$567 !{^2890! ", "-abc !de2fg! ", " -hi -:jklm! ", " !-n -:opqrs! ", " -t ~!!!!!!!! ", " |-u ", " v-w ", " xyz ", " !-A ", " !!! ", " ", " ", " "}; tuxcards/src/icons/attic/removeKnoten.xpm000555 000765 000024 00000000764 11420350116 021220 0ustar00alexstaff000000 000000 /* XPM */ static const char*removeKnoten_xpm[]={ "16 16 8 1", "f c #808080", "e c #ffa858", "c c #a0a0a0", ". c #000000", "# c None", "d c #ffdca8", "a c #ffffff", "b c #ff0000", ".....###########", ".aaa.###########", ".aaa.###########", ".aaa.###########", ".....###########", "#.######b#######", "#c#bb##bb#######", "#.##bbbb###.....", "#.###bb####.dee.", "#cc.bbb.ff..dee.", "#.##b##b###.eee.", "#.#bb##bb##.....", "#c#b####b#######", "#.#b############", "#.##############", "#c...###########"}; tuxcards/src/icons/attic/renameKnoten.xpm000555 000765 000024 00000000651 11420350116 021165 0ustar00alexstaff000000 000000 /* XPM */ static const char*renameKnoten_xpm[]={ "16 16 3 1", "# c #008000", "a c #000000", ". c None", ".#..#.###.#...#.", ".##.#.#...#...#.", ".##.#.##..#.#.#.", ".#.##.#...#.#.#.", ".#.##.#...##.##.", ".#..#.###.#...#.", "................", ".aaaaaaaaaaaaaa.", "a..............a", "a.aa.a.a.a.a.a.a", "a.a..aaa.a.a.a.a", "a.aa.a.a..a..a.a", "a..............a", ".aaaaaaaaaaaaaa.", ".......aa.......", ".......aa......."}; tuxcards/src/icons/attic/search.xpm000555 000765 000024 00000001356 11420350116 020007 0ustar00alexstaff000000 000000 /* XPM */ static const char * search_xpm[] = { "22 22 6 1", " c None", ". c #000000000000", "X c #FFFFFFFFFFFF", "o c #DF7DDF7DDF7D", "O c #820782078207", "+ c #A699A699A699", " ", " ", " ", " ........ ", " .XXXXXXo. ", " .XXXXXX o. ", " .XXXXXX Xo. ", " .XXXXXX .... ", " .XXXXXXXXX . ", " .XXXXXXX.... ", " .XXXXXX.O O. ", " .XXXXX.O++ OO. ", " .XXXXX. + O . ", " .XXXXX. O . ", " .XXXXX.O +OO. ", " .XXXXXX.O O.O ", " .XXXXXXX....O.. ", " .XXXXXXXXXX. ... ", " ............ .. ", " ", " ", " "}; tuxcards/src/icons/attic/text_bold.xpm000555 000765 000024 00000001227 11420350116 020523 0ustar00alexstaff000000 000000 /* XPM */ static const char * text_bold_xpm[] = { "22 22 2 1", " c None", ". c #000000", " ", " ", " ", " ", " ......... ", " ... ... ", " ... ... ", " ... ... ", " ... ... ", " ... ... ", " ........ ", " ... .... ", " ... .... ", " ... ... ", " ... ... ", " ... ... ", " ... ... ", " .......... ", " ", " ", " ", " "}; tuxcards/src/icons/attic/text_center.xpm000555 000765 000024 00000001231 11420350116 021056 0ustar00alexstaff000000 000000 /* XPM */ static const char * text_center_xpm[] = { "22 22 2 1", " c None", ". c #000000", " ", " ", " ................. ", " ", " ............. ", " ", " ................. ", " ", " ............. ", " ", " ................. ", " ", " ............. ", " ", " ................. ", " ", " ............. ", " ", " ................. ", " ", " ", " "}; tuxcards/src/icons/attic/text_italic.xpm000555 000765 000024 00000001231 11420350116 021043 0ustar00alexstaff000000 000000 /* XPM */ static const char * text_italic_xpm[] = { "22 22 2 1", " c None", ". c #000000", " ", " ", " ", " ", " ..... ", " ... ", " ... ", " ... ", " ... ", " ... ", " ... ", " ... ", " ... ", " ... ", " ... ", " ... ", " ... ", " ..... ", " ", " ", " ", " "}; tuxcards/src/icons/attic/treeClear.xpm000555 000765 000024 00000000676 11420350116 020454 0ustar00alexstaff000000 000000 /* XPM */ static char*treeClear_xpm[]={ "16 16 5 1", "c c #a0a0a0", "# c #000000", ". c None", "b c #dcdcdc", "a c #ffffff", "..#########.....", "..#aaaaaabb#....", "..#aaaaaacab#...", "..#aaaaaacaab#..", "..#aaaaaac####..", "..#aaaaaaaccc#..", "..#aaaaaaaaaa#..", "..#aaaaaaaaaa#..", "..#aaaaaaaaaa#..", "..#aaaaaaaaaa#..", "..#aaaaaaaaaa#..", "..#aaaaaaaaaa#..", "..#aaaaaaaaaa#..", "..#aaaaaaaaaa#..", "..############..", "................"}; tuxcards/src/icons/attic/undo.xpm000555 000765 000024 00000003142 11420350116 017502 0ustar00alexstaff000000 000000 /* XPM */ static const char * undo_xpm[] = { "22 22 67 1", " c None", ". c #135628", "+ c #8FBEA0", "@ c #C4DDCB", "# c #E0EBE3", "$ c #F4F7F5", "% c #BEDBC7", "& c #5DB275", "* c #76C98D", "= c #C1DCCA", "- c #74BD8C", "; c #2E9951", "> c #299451", ", c #369D62", "' c #000000", ") c #6DBE82", "! c #3FB86D", "~ c #4BC674", "{ c #37A65E", "] c #CDE0D2", "^ c #17602F", "/ c #226135", "( c #FFFFFF", "_ c #DFEAE2", ": c #9EBFA9", "< c #2B9252", "[ c #092413", "} c #040B06", "| c #071C0D", "1 c #297640", "2 c #61AC78", "3 c #0E3D1C", "4 c #E8F1EB", "5 c #70C090", "6 c #5AB57A", "7 c #07180D", "8 c #0E3D1D", "9 c #217C3F", "0 c #279A58", "a c #239854", "b c #37AA62", "c c #308F54", "d c #092613", "e c #14552A", "f c #219648", "g c #C5E0CE", "h c #34A360", "i c #35A662", "j c #59C67A", "k c #051009", "l c #0B3218", "m c #78B58E", "n c #2B7846", "o c #2E7D46", "p c #458858", "q c #297845", "r c #3C8552", "s c #040D07", "t c #020202", "u c #102317", "v c #0A190F", "w c #0C1F12", "x c #0B1C11", "y c #0E2314", "z c #173E24", "A c #0C2112", "B c #0E1D12", " ", " ", " ..... ", " ..+@#@+.. ", " ..$%&&&&*#+. ", ". .$=-;;>>>>,*#' ", ".. .$);>!~~~~!{>*+' ", ".]..$)>!~{''''^/{>(' ", ".]_:)<~{'[ }|^12+3 ", ".456<~{' 789(3 ", ".40abc' def3 ", ".ghaij3 kl3 ", ".mnopqr3 s3' ", ".'''''''t u3 ", " v3} ", " w3x ", " yzA ", " B3' ", " ''' ", " ", " ", " "}; tuxcards/src/gui/bookmark/000755 000765 000024 00000000000 11420350116 016160 5ustar00alexstaff000000 000000 tuxcards/src/gui/cactusbar/000755 000765 000024 00000000000 11420350116 016322 5ustar00alexstaff000000 000000 tuxcards/src/gui/CMainWindow.cpp000555 000765 000024 00000241650 11420350116 017247 0ustar00alexstaff000000 000000 /*************************************************************************** CMainWindow.cpp - description ------------------- begin : Sun Mar 26 2000 copyright : (C) 2000 by Alexander Theel email : alex.theel@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #include "CMainWindow.h" #include "../information/xmlpersister.h" #include "./cactusbar/CCactusBar.h" #include "./CTree.h" #include #include #include // for mpTree->verticalScrollBar() #include #include #include #include "../utilities/CIconManager.h" #define getIcon(x) CIconManager::getInstance().getIcon(x) #include #include "./editor/CEditor.h" #include "./editor/CSingleEntryView.h" #include #include #include #include #include #include #include #include #include #include "./dialogs/configurationDialog/CConfigurationDialog.h" #include "./dialogs/searchDialog/CSearchDialog.h" #include "./dialogs/searchDialog/CSearchPosition.h" //#define DEBUGGING //#include //#include //#include // //#include //#include //#include //#include //#include //#include //#include // //#include "../icons/lo16-app-tuxcards.xpm" // //#ifdef DEBUGGING // #include "../icons/debug/showText.xpm" // #include "../icons/debug/xml.xpm" //#endif // //#include "../information/converter.h" //#include "../information/CInformationCollection.h" //#include "../persister.h" //#include "../information/xmlpersister.h" //#include "../utilities/iniparser/configparser.h" //#include //#include //#include //#include #include "../utilities/strings.h" #include "../information/htmlwriter.h" #include "./recentFileList/CRecentFileList.h" //#include "./bookmark/BookmarkButton.h" //#include "./dialogs/expiredElementsDialog/ExpiredElementsDialog.h" // //#include "../utilities/crypt/StringCrypter.h" #include "../version.h" //#include "../global.h" //#include "../Greetings.h" #include // ------------------------------------------------------------------------------- CMainWindow::CMainWindow( const QString& sArg ) : QMainWindow( NULLPTR ) , mpCollection( NULLPTR ) , mpMenu( NULLPTR ) , mpConfigurationDialog( NULLPTR ) , mConfiguration( CTuxCardsConfiguration::getInstance() ) , miTimerID( 0 ) , mpCactusBar( NULLPTR ) , mpSplit( NULLPTR ) , mpTree( NULLPTR ) , mpSingleEntryView( NULLPTR ) , mpEditor( NULLPTR ) // , mpQuickLoader( NULLPTR ) , mpStatusBar_ChangeLabel( NULLPTR ) , mpStatusBar_TextFormatLabel( NULLPTR ) , mbChangesExist( FALSE ) , mSaveChangesDialog( this ) , mpEditFontCombo( NULLPTR ) , mpEditFontSizeCombo( NULLPTR ) , mpFileNewAction( NULLPTR ) , mpFileOpenAction( NULLPTR ) , mpFileSaveAction( NULLPTR ) , mpFileSaveAsAction( NULLPTR ) , mpFileSaveActiveEntryAction( NULLPTR ) , mpFilePrintAction( NULLPTR ) , mpFileExportHTMLAction( NULLPTR ) , mpSearchEntryAction( NULLPTR ) , mpEditUndoAction( NULLPTR ) , mpEditRedoAction( NULLPTR ) , mpEditCutAction( NULLPTR ) , mpEditCopyAction( NULLPTR ) , mpEditPasteAction( NULLPTR ) , mpEditSelectAllAction( NULLPTR ) , mpEditBoldAction( NULLPTR ) , mpEditItalicAction( NULLPTR ) , mpEditUnderAction( NULLPTR ) , mpEditColorAction( NULLPTR ) , mpEditTextLeftAction( NULLPTR ) , mpEditTextCenterAction( NULLPTR ) , mpEditTextRightAction( NULLPTR ) , mpEditTextBlockAction( NULLPTR ) , mpRecentFiles( NULLPTR ) , mpMainToolBar( NULLPTR ) , mpEntryToolBar( NULLPTR ) , mpEditorToolBar( NULLPTR ) , mpEditorToolBar2( NULLPTR ) , mpMainToolBarAction( NULLPTR ) , mpEntryToolBarAction( NULLPTR ) , mpEditorToolBarAction( NULLPTR ) // #ifdef FEATURE_RECENTFILELIST_TOOLBAR // , mpRecentFilesTools( NULLPTR ) // , miRecentFilesToolBarID( 0 ) // #endif // ------------------------------------------------------------------------------- { // checkFirstTime(); settingUpMainWindow(); settingUpDialogs(); applyConfiguration(); //// connect(mpTree, SIGNAL(freezeCHANGES()), this, SLOT(freezeCHANGES())); // // build up tree, if config-file ('.tuxcards') was found loadLastSavedDataIfConfigFileIsFound( sArg ); // show the completed window show(); applyConfigurationAfterShow(); showDonationMsg(); } // ------------------------------------------------------------------------------- CMainWindow::~CMainWindow() // ------------------------------------------------------------------------------- { DELETE( mpCollection ); } //// ------------------------------------------------------------------------------- //// This is an emergency exit. The application will be quited if not enough //// memory is available to create all needed objects. //// ------------------------------------------------------------------------------- //void CMainWindow::lowMemoryExit( void ) //// ------------------------------------------------------------------------------- //{ // std::cout<<"TuxCards ERROR\nNot enough memory to run application.\nTuxCards" // " will be stopped!!!"<setLayout( pLayout ); settingUpCactusBar( *pLayout ); mpSplit = new QSplitter( 0 ); Q_ASSERT( NULLPTR != mpSplit ); if ( !mpSplit ) return; mpSplit->setMinimumSize( 600,400 ); pLayout->addWidget( mpSplit ); // checkPointer( mpSplit ); settingUpTree( *mpSplit ); settingUpEditor( *mpSplit ); mpSplit->setOpaqueResize(TRUE); settingUpActions(); settingUpMenu(); settingUpToolBar(); settingUpComboBoxes(); settingUpStatusBar(); } // ------------------------------------------------------------------------------- void CMainWindow::setWindowTitle() // ------------------------------------------------------------------------------- { QString sWindowTitle; if ( mpCollection ) { QString sFileName = QFileInfo( mpCollection->getAbsFileName() ).fileName(); sWindowTitle = QString("%1[*] - TuxCards").arg( sFileName ); } else { sWindowTitle = "TuxCards"; } QMainWindow::setWindowTitle( sWindowTitle ); } /** * This method builds the necessary dialogs used within the application. */ // ------------------------------------------------------------------------------- void CMainWindow::settingUpDialogs() // ------------------------------------------------------------------------------- { // CPropertyDialog::createInstance( this ); //// settingUpQuickLoader(); settingUpConfigurationDialog(); settingUpSaveChangesDialog(); settingUpSearchDialog(); } // ------------------------------------------------------------------------------- void CMainWindow::settingUpConfigurationDialog() // ------------------------------------------------------------------------------- { mpConfigurationDialog = new CConfigurationDialog( this, mConfiguration ); if ( mpConfigurationDialog ) { connect( mpConfigurationDialog, SIGNAL(configurationChanged()), this, SLOT(applyConfiguration()) ); } } // ------------------------------------------------------------------------------- void CMainWindow::settingUpSaveChangesDialog() // ------------------------------------------------------------------------------- { mSaveChangesDialog.setWindowTitle( tr("Saving") ); (void) new QLabel( tr("Saving data ..."), &mSaveChangesDialog ); } // ------------------------------------------------------------------------------- void CMainWindow::settingUpSearchDialog() // ------------------------------------------------------------------------------- { CSearchDialog::createInstance( this ); CSearchDialog* pSearchDialog = CSearchDialog::getInstance(); Q_ASSERT( NULLPTR != pSearchDialog ); if ( !pSearchDialog ) return; connect( pSearchDialog, SIGNAL( makeVisible(const CSearchPosition* const) ), this, SLOT( makeVisible(const CSearchPosition* const) ) ); } // ------------------------------------------------------------------------------- void CMainWindow::slotShowSearchDialog() // ------------------------------------------------------------------------------- { // Saving eventual changes - Set text to current active entry; // otherwise a search would not find newly written text within // this entry (that was not yet saved). if ( !mpEditor ) return; mpEditor->writeCurrentTextToActiveInformationElement(); CSearchDialog* pSearchDialog = CSearchDialog::getInstance(); Q_ASSERT( NULLPTR != pSearchDialog ); if ( !pSearchDialog ) return; pSearchDialog->setUp( mpCollection ); } // ------------------------------------------------------------------------------- void CMainWindow::slotActiveIEChangedViaHistory( CInformationElement* pIE ) // ------------------------------------------------------------------------------- { if ( pIE && mpCollection ) mpCollection->setActiveElement( pIE ); } // ------------------------------------------------------------------------------- void CMainWindow::settingUpEditor( QWidget& parent ) // ------------------------------------------------------------------------------- { mpSingleEntryView = new CSingleEntryView( &parent ); Q_ASSERT( NULLPTR != mpSingleEntryView ); if ( !mpSingleEntryView ) return; // checkPointer( mpSingleEntryView ); // qt4-port maybe remove the 'checkpointer()'-stuff // mpEditor = mpSingleEntryView->getEditor(); Q_ASSERT( NULLPTR != mpEditor ); if ( !mpEditor ) return; connect(mpEditor, SIGNAL(textChanged()), this, SLOT(recognizeChanges())); connect(mpEditor, SIGNAL(formatRecognized(InformationFormat)), this, SLOT(showRecognizedFormat(InformationFormat))); connect(mpEditor, SIGNAL(currentHAlignmentChanged(Qt::Alignment)), this, SLOT(textAlignmentChanged(Qt::Alignment)) ); // recognizing text format changes connect( mpEditor, SIGNAL( currentCharFormatChanged(const QTextCharFormat&) ), this, SLOT( textFontChanged(const QTextCharFormat&) ) ); connect( mpSingleEntryView, SIGNAL(signalEntryDecrypted()), mpTree, SLOT(slotAdjustEncryptionActions()) ); // connect the model to the editor if ( mpTree ) connect( &(mpTree->getModel()), SIGNAL(rowsInserted(const QModelIndex&, int, int )), mpEditor, SLOT(slotNewInformationElementAdded()) ); } // ------------------------------------------------------------------------------- void CMainWindow::settingUpTree( QWidget& parent ) // ------------------------------------------------------------------------------- { mpTree = new CTree( &parent ); Q_ASSERT( NULLPTR != mpTree ); if ( !mpTree ) return; // checkPointer( mpTree ); connect( mpTree, SIGNAL(setActiveIEViaHistory(CInformationElement*)), this, SLOT(slotActiveIEChangedViaHistory(CInformationElement*)) );; connect( mpTree, SIGNAL(showMessage(QString, int)), this, SLOT(showMessage(QString, int)) ); // connect( mpTree, SIGNAL(addEntryToBookmarksSignal()), this, SLOT(addElementToBookmarksEvent()) ); } // ------------------------------------------------------------------------------- void CMainWindow::settingUpCactusBar( QLayout& layout ) // ------------------------------------------------------------------------------- { // the cactusbar *must* be setup with some colors and text mpCactusBar = new CCactusBar( 0, QColor(0,0,0),QColor(33,72,170), "Tux","Cards"); layout.addWidget( mpCactusBar ); // checkPointer( mpCactusBar ); } // ------------------------------------------------------------------------------- void CMainWindow::settingUpStatusBar( void ) // ------------------------------------------------------------------------------- { QStatusBar* pStatusBar = statusBar(); Q_ASSERT( NULLPTR != pStatusBar ); if ( !pStatusBar ) return; // text format label mpStatusBar_TextFormatLabel = new QLabel(); Q_ASSERT( NULLPTR != mpStatusBar_TextFormatLabel ); if ( !mpStatusBar_TextFormatLabel ) return; mpStatusBar_TextFormatLabel->setAlignment( Qt::AlignCenter ); mpStatusBar_TextFormatLabel->setFixedWidth( 45 ); pStatusBar->addPermanentWidget( mpStatusBar_TextFormatLabel ); // change label mpStatusBar_ChangeLabel = new QLabel(); Q_ASSERT( NULLPTR != mpStatusBar_ChangeLabel ); if ( !mpStatusBar_ChangeLabel ) return; mpStatusBar_ChangeLabel->setAlignment( Qt::AlignCenter ); mpStatusBar_ChangeLabel->setFixedWidth( 15 ); pStatusBar->addPermanentWidget( mpStatusBar_ChangeLabel ); } // ------------------------------------------------------------------------------- void CMainWindow::settingUpActions( void ) // ------------------------------------------------------------------------------- { // file actions mpFileNewAction = new QAction( getIcon("filenew" ), tr("&New"), this ); connect( mpFileNewAction, SIGNAL(triggered()), this, SLOT(clearAll()) ); mpFileOpenAction = new QAction( getIcon("fileopen"), tr("&Open File..."), this ); connect( mpFileOpenAction, SIGNAL(triggered()), this, SLOT(open()) ); mpFileSaveAction = new QAction( getIcon("filesave"), tr("&Save"), this ); mpFileSaveAction->setShortcut( Qt::ControlModifier + Qt::Key_S ); connect( mpFileSaveAction, SIGNAL(triggered()), this, SLOT(save()) ); mpFileSaveAsAction = new QAction( tr("Save &As..."), this ); connect( mpFileSaveAsAction, SIGNAL(triggered()), this, SLOT(saveAs()) ); mpFileSaveActiveEntryAction = new QAction( tr("Save Active Entry"), this ); connect( mpFileSaveActiveEntryAction, SIGNAL(triggered()), this, SLOT(saveActiveEntry()) ); mpFilePrintAction = new QAction( getIcon("fileprint"), tr("&Print..."), this ); connect( mpFilePrintAction, SIGNAL(triggered()), this, SLOT(print()) ); mpFileExportHTMLAction = new QAction( tr("Export to &HTML..."), this ); connect( mpFileExportHTMLAction, SIGNAL(triggered()), this, SLOT(exportHTML()) ); mpSearchEntryAction = new QAction( getIcon("find"), tr("Search Entry..."), this ); mpSearchEntryAction->setShortcut( Qt::ControlModifier + Qt::Key_F ); connect( mpSearchEntryAction, SIGNAL(triggered()), this, SLOT(slotShowSearchDialog()) ); //***************************************************************************// // editor actions - undo redo mpEditUndoAction = new QAction( getIcon("undo"), tr("&Undo"), this ); mpEditUndoAction->setShortcut( Qt::ControlModifier + Qt::Key_Z ); connect( mpEditor, SIGNAL(undoAvailable(bool)), mpEditUndoAction, SLOT(setEnabled(bool)) ); connect( mpEditUndoAction, SIGNAL(triggered()), mpEditor, SLOT(undo()) ); mpEditRedoAction = new QAction( getIcon("redo"), tr("&Redo"), this ); mpEditRedoAction->setShortcut( Qt::ControlModifier + Qt::Key_Y ); connect( mpEditor, SIGNAL(redoAvailable(bool)), mpEditRedoAction, SLOT(setEnabled(bool)) ); connect( mpEditRedoAction, SIGNAL(triggered()), mpEditor, SLOT(redo()) ); // editor actions - cut, copy, paste mpEditCutAction = new QAction( getIcon("editcut"), tr("Cut"), this ); mpEditCutAction->setShortcut( Qt::ControlModifier + Qt::Key_X ); mpEditCutAction->setEnabled( false ); connect( mpEditCutAction, SIGNAL(triggered()), mpEditor, SLOT(cut()) ); connect( mpEditor, SIGNAL(copyAvailable(bool)), mpEditCutAction, SLOT(setEnabled(bool)) ); mpEditCopyAction = new QAction( getIcon("editcopy"), tr("&Copy"), this ); mpEditCopyAction->setShortcut( Qt::ControlModifier + Qt::Key_C ); mpEditCopyAction->setEnabled( false ); connect( mpEditCopyAction, SIGNAL(triggered()), mpEditor, SLOT(copy()) ); connect( mpEditor, SIGNAL(copyAvailable(bool)), mpEditCopyAction, SLOT(setEnabled(bool)) ); mpEditPasteAction = new QAction( getIcon("editpaste"), tr("&Paste"), this ); mpEditPasteAction->setShortcut( Qt::ControlModifier + Qt::Key_V ); mpEditPasteAction->setEnabled( !QApplication::clipboard()->text().isEmpty() ); connect( mpEditPasteAction, SIGNAL(triggered()), mpEditor, SLOT(paste()) ); connect( QApplication::clipboard(), SIGNAL(dataChanged()), this, SLOT(clipboardDataChanged()) ); // editor action - select all mpEditSelectAllAction = new QAction( tr("Select &All"), this ); mpEditSelectAllAction->setShortcut( Qt::ControlModifier + Qt::Key_A ); connect( mpEditSelectAllAction, SIGNAL(triggered()), mpEditor, SLOT(selectAll()) ); // editor actions - text formating mpEditBoldAction = new QAction( getIcon("text_bold"), tr("&Bold") /*"(Ctrl+B)"*/, this ); QFont f = mpEditBoldAction->font(); f.setBold( TRUE ); mpEditBoldAction->setFont( f ); mpEditBoldAction->setShortcut( Qt::ControlModifier + Qt::Key_B ); mpEditBoldAction->setCheckable( TRUE ); connect( mpEditBoldAction, SIGNAL(triggered()), mpEditor, SLOT(toggleFontBold()) ); mpEditItalicAction = new QAction( getIcon("text_italic"), tr("&Italic") /*"(Ctrl+I)"*/, this ); f = mpEditItalicAction->font(); f.setItalic( TRUE ); mpEditItalicAction->setFont( f ); mpEditItalicAction->setShortcut( Qt::ControlModifier + Qt::Key_I ); mpEditItalicAction->setCheckable( TRUE ); connect( mpEditItalicAction, SIGNAL(triggered(bool)), mpEditor, SLOT(setFontItalic(bool)) ); mpEditUnderAction = new QAction( getIcon("text_under"), tr("Underline") /*"(Ctrl+U)"*/, this ); f = mpEditUnderAction->font(); f.setUnderline( TRUE ); mpEditUnderAction->setFont( f ); mpEditUnderAction->setShortcut( Qt::ControlModifier + Qt::Key_U ); mpEditUnderAction->setCheckable( TRUE ); connect( mpEditUnderAction, SIGNAL(triggered(bool)), mpEditor, SLOT(setFontUnderline(bool)) ); // color action QPixmap dummy(1,1); mpEditColorAction = new QAction( dummy, tr("Color..."), this ); connect( mpEditColorAction, SIGNAL(triggered()), this, SLOT(setEditTextColor()) ); textColorChanged( Qt::black ); // alignment actions mpEditTextLeftAction = new QAction( getIcon("text_left"), tr("Align Left"), this ); mpEditTextLeftAction->setCheckable( TRUE ); connect( mpEditTextLeftAction, SIGNAL(triggered()), this, SLOT(textLeft()) ); mpEditTextCenterAction = new QAction( getIcon("text_center"), tr("Center"), this ); mpEditTextCenterAction->setCheckable( TRUE ); connect( mpEditTextCenterAction, SIGNAL(triggered()), this, SLOT(textHCenter()) ); mpEditTextRightAction = new QAction( getIcon("text_right"), tr("Align Right"), this ); mpEditTextRightAction->setCheckable( TRUE ); connect( mpEditTextRightAction, SIGNAL(triggered()), this, SLOT(textRight()) ); mpEditTextBlockAction = new QAction( getIcon("text_block"), tr("Text Block"), this ); mpEditTextBlockAction->setCheckable( TRUE ); connect( mpEditTextBlockAction, SIGNAL(triggered()), this, SLOT(textBlock()) ); // toggle toolbar actions mpMainToolBarAction = new QAction( tr("Show Main Toolbar"), this ); mpMainToolBarAction->setCheckable( TRUE ); mpMainToolBarAction->setChecked( mConfiguration.getBoolValue( CTuxCardsConfiguration::B_SHOW_MAIN_TOOLBAR ) ); connect( mpMainToolBarAction, SIGNAL(toggled(bool)), this, SLOT(slotSetMainToolBarVisible(bool)) ); mpEntryToolBarAction = new QAction( tr("Show Entry Manipulation Toolbar"), this ); mpEntryToolBarAction->setCheckable( TRUE ); mpEntryToolBarAction->setChecked( mConfiguration.getBoolValue( CTuxCardsConfiguration::B_SHOW_ENTRY_TOOLBAR ) ); connect( mpEntryToolBarAction, SIGNAL(toggled(bool)), this, SLOT(slotSetEntryToolBarVisible(bool)) ); mpEditorToolBarAction = new QAction( tr("Show Editor Toolbar"), this ); mpEditorToolBarAction->setCheckable( TRUE ); mpEditorToolBarAction->setChecked( mConfiguration.getBoolValue( CTuxCardsConfiguration::B_SHOW_EDITOR_TOOLBAR ) ); connect( mpEditorToolBarAction, SIGNAL(toggled(bool)), this, SLOT(slotSetEditorToolBarVisible(bool)) ); } // ------------------------------------------------------------------------------- void CMainWindow::settingUpMenu( void ) // ------------------------------------------------------------------------------- { // File menu. QMenu* pFileMenu = new QMenu( tr("&File") ); Q_ASSERT( NULLPTR != pFileMenu ); if ( pFileMenu ) { pFileMenu->addAction( mpFileNewAction ); pFileMenu->addAction( mpFileOpenAction ); pFileMenu->addAction( mpFileSaveAction ); pFileMenu->addAction( mpFileSaveAsAction ); //pFileMenu->addAction( mpFileSaveActiveEntryAction ); pFileMenu->addAction( mpFilePrintAction ); pFileMenu->addSeparator(); mpRecentFiles = new CRecentFileList( this, pFileMenu, mConfiguration.getStringValue( CTuxCardsConfiguration::S_RECENT_FILES ) ); // checkPointer( mpRecentFiles ); connect( mpRecentFiles, SIGNAL(openFile(QString)), this, SLOT(slotSaveAndLoadNewFile(QString)) ); pFileMenu->addSeparator(); pFileMenu->addAction( mpFileExportHTMLAction ); pFileMenu->addSeparator(); pFileMenu->addAction( getIcon("exit"), tr("&Exit"), this, SLOT(exit()) ); } // Edit menu. QMenu* pEditMenu = new QMenu( tr("&Edit") ); Q_ASSERT( NULLPTR != pEditMenu ); if ( pEditMenu ) { // add editor undo,redo,cut,copy,paste actions pEditMenu->addAction( mpEditUndoAction ); pEditMenu->addAction( mpEditRedoAction ); pEditMenu->addAction( mpEditCutAction ); pEditMenu->addAction( mpEditCopyAction ); pEditMenu->addAction( mpEditPasteAction ); // add editor "select all" action pEditMenu->addSeparator(); pEditMenu->addAction( mpEditSelectAllAction ); // add editor/font actions pEditMenu->addSeparator(); pEditMenu->addAction( mpEditBoldAction ); pEditMenu->addAction( mpEditItalicAction ); pEditMenu->addAction( mpEditUnderAction ); pEditMenu->addAction( mpEditColorAction ); // add editor alignment actions pEditMenu->addSeparator(); pEditMenu->addAction( mpEditTextLeftAction ); pEditMenu->addAction( mpEditTextCenterAction ); pEditMenu->addAction( mpEditTextRightAction ); pEditMenu->addAction( mpEditTextBlockAction ); } // Options menu - part 1. QMenu* pToggleToolBarsMenu = new QMenu( tr("ToolBars") ); Q_CHECK_PTR( pToggleToolBarsMenu ); if ( pToggleToolBarsMenu ) { pToggleToolBarsMenu->addAction( mpMainToolBarAction ); pToggleToolBarsMenu->addAction( mpEntryToolBarAction ); pToggleToolBarsMenu->addAction( mpEditorToolBarAction ); // #ifdef FEATURE_RECENTFILELIST_TOOLBAR // miRecentFilesToolBarID = (int)toolbars->addAction( "Show Recent Files Toolbar", this, SLOT(toggleRecentFilesToolbarVisability()) ); // #endif*/ } // Options menu - part 2. QMenu* pOptionsMenu = new QMenu( tr("&Options") ); Q_ASSERT( NULLPTR != pOptionsMenu ); if ( pOptionsMenu ) { pOptionsMenu->addMenu( pToggleToolBarsMenu ); pOptionsMenu->addAction( tr("&Edit Options..."), this, SLOT(slotEditConfiguration()) ); } // Extras menu. QMenu* pExtrasMenu = new QMenu( tr("E&xtras") ); Q_ASSERT( NULLPTR != pExtrasMenu ); if ( pExtrasMenu ) { pExtrasMenu->addAction( mpSearchEntryAction ); pExtrasMenu->addAction( tr("Word Count"), this, SLOT(wordCount()), Qt::ControlModifier+Qt::Key_W ); pExtrasMenu->addAction( tr("Insert Current Date"), this, SLOT(insertCurrentDate()), Qt::ControlModifier+Qt::Key_D ); pExtrasMenu->addAction( tr("Insert Current Time"), this, SLOT(insertCurrentTime()), Qt::ControlModifier+Qt::Key_T ); pExtrasMenu->addAction( tr("Insert Image..."), mpEditor, SLOT(insertImage()), Qt::ControlModifier+Qt::Key_P ); } // About menu. QMenu* pAboutMenu = new QMenu( tr("&About") ); Q_ASSERT( NULLPTR != pAboutMenu ); if ( pAboutMenu ) { pAboutMenu->addAction( getIcon("lo32-app-tuxcards"), tr("About TuxCards"), this, SLOT(showAbout()) ); } // Add the individual menus to the menubar. QMenuBar* pMenuBar = menuBar(); Q_ASSERT( NULLPTR != pMenuBar ); if ( pMenuBar ) { pMenuBar->addMenu( pFileMenu ); pMenuBar->addMenu( pEditMenu ); pMenuBar->addMenu( pOptionsMenu ); pMenuBar->addMenu( pExtrasMenu ); pMenuBar->addMenu( pAboutMenu ); } } // ------------------------------------------------------------------------------- void CMainWindow::settingUpToolBar( void ) // ------------------------------------------------------------------------------- { // main toolbar mpMainToolBar = addToolBar( "File Actions" ); Q_ASSERT( NULLPTR != mpMainToolBar ); if ( mpMainToolBar ) { // Tool tips mpMainToolBar->addAction( mpFileNewAction ); // "Clear whole Tree" mpMainToolBar->addAction( mpFileOpenAction ); // "Open a new File" mpMainToolBar->addAction( mpFileSaveAction ); // "Save Data to File (Ctrl+S)" //mpMainToolBar->addAction( mpFileSaveAsAction ); mpMainToolBar->addAction( mpFilePrintAction ); // Print current Entry" mpMainToolBar->addSeparator(); mpMainToolBar->addAction( mpSearchEntryAction ); // Search an entry } // editor toolbar mpEditorToolBar = addToolBar( "Editor Actions" ); Q_ASSERT( NULLPTR != mpEditorToolBar ); if ( mpEditorToolBar ) { mpEditorToolBar->addAction( mpEditUndoAction ); mpEditorToolBar->addAction( mpEditRedoAction ); mpEditorToolBar->addAction( mpEditCutAction ); mpEditorToolBar->addAction( mpEditCopyAction ); mpEditorToolBar->addAction( mpEditPasteAction ); } // entry toolbar mpEntryToolBar = addToolBar( "Entry Actions" ); Q_ASSERT( NULLPTR != mpEntryToolBar ); Q_ASSERT( NULLPTR != mpTree ); if ( mpEntryToolBar && mpTree ) { mpTree->addActionsToToolBar( *mpEntryToolBar ); } // // // ----------- add toolbar for recent file list ------------------ // #ifdef FEATURE_RECENTFILELIST_TOOLBAR // mpRecentFilesTools = new Q3ToolBar(this); // if ( mpRecentFiles && mpRecentFilesTools ) // { // mpRecentFiles->createComboBox( *mpRecentFilesTools ); // } // #endif slotSetMainToolBarVisible( mConfiguration.getBoolValue( CTuxCardsConfiguration::B_SHOW_MAIN_TOOLBAR ) ); slotSetEntryToolBarVisible( mConfiguration.getBoolValue( CTuxCardsConfiguration::B_SHOW_ENTRY_TOOLBAR ) ); slotSetEditorToolBarVisible( mConfiguration.getBoolValue( CTuxCardsConfiguration::B_SHOW_EDITOR_TOOLBAR ) ); // #ifdef FEATURE_RECENTFILELIST_TOOLBAR // setRecentFilesToolbarVisible( mConfiguration.getBoolValue( CTuxCardsConfiguration::B_SHOW_RECENTFILES_TOOLBAR ) ); // #endif //#ifdef DEBUGGING // // --- add debug mpMainTools" // std::cout<<"!!! still having debug turned on"<addItem( tr("Standard") ); pComboListStyle->addItem( tr("Bullet List (Disc)") ); pComboListStyle->addItem( tr("Bullet List (Circle)") ); pComboListStyle->addItem( tr("Bullet List (Square)") ); pComboListStyle->addItem( tr("Ordered List (Decimal)") ); pComboListStyle->addItem( tr("Ordered List (Alpha lower)") ); pComboListStyle->addItem( tr("Ordered List (Alpha upper)") ); connect( pComboListStyle, SIGNAL( activated(int) ), this, SLOT( setEditListStyle(int) ) ); // font family list // - old font family selector (no preview of font in comboBox) - //mpEditFontCombo = new QComboBox( pToolBar ); //mpEditFontCombo->setEditable( true ); QFontDatabase db; //mpEditFontCombo->addItems( db.families() ); //connect( mpEditFontCombo, SIGNAL( activated(const QString&) ), this, SLOT( setEditFontFamily(const QString&) ) ); //mpEditFontCombo->setCurrentIndex( mpEditFontCombo->findText( QApplication::font().family() ) ); // - new font family selector (with preview of font in comboBox) - mpEditFontCombo = new QFontComboBox( mpEditorToolBar2 ); mpEditFontCombo->setEditable( true ); connect( mpEditFontCombo, SIGNAL( activated(const QString&) ), this, SLOT( setEditFontFamily(const QString&) ) ); mpEditFontCombo->setCurrentIndex( mpEditFontCombo->findText( QApplication::font().family() ) ); // font size list mpEditFontSizeCombo = new QComboBox( mpEditorToolBar2 ); mpEditFontSizeCombo->setEditable( true ); foreach( int iSize, db.standardSizes() ) mpEditFontSizeCombo->addItem( QString::number(iSize) ); connect( mpEditFontSizeCombo, SIGNAL( activated(const QString&) ), this, SLOT( setEditFontSize(const QString&) ) ); mpEditFontSizeCombo->setCurrentIndex( mpEditFontSizeCombo->findText( QString::number(QApplication::font().pointSize()) ) ); // add the comboboxes to the toolbar mpEditorToolBar2->addWidget( pComboListStyle ); mpEditorToolBar2->addWidget( mpEditFontCombo ); mpEditorToolBar2->addWidget( mpEditFontSizeCombo ); // add 2nd part of editor actions here mpEditorToolBar2->addSeparator(); mpEditorToolBar2->addAction( mpEditBoldAction ); mpEditorToolBar2->addAction( mpEditItalicAction ); mpEditorToolBar2->addAction( mpEditUnderAction ); mpEditorToolBar2->addAction( mpEditColorAction ); mpEditorToolBar2->addSeparator(); mpEditorToolBar2->addAction( mpEditTextLeftAction ); mpEditorToolBar2->addAction( mpEditTextCenterAction ); mpEditorToolBar2->addAction( mpEditTextRightAction ); mpEditorToolBar2->addAction( mpEditTextBlockAction ); } } //// ------------------------------------------------------------------------------- //void CMainWindow::settingUpQuickLoader( void ) //// ------------------------------------------------------------------------------- //{ // mpQuickLoader = new QToolBar(this); // checkPointer( mpQuickLoader ); //} // // ///** // * Adds the currently active element to the bookmark list. // */ //// ------------------------------------------------------------------------------- //void CMainWindow::addElementToBookmarksEvent( void ) //// ------------------------------------------------------------------------------- //{ // if ( NULLPTR == mpCollection ) // return; // // CInformationElement* pElement = mpCollection->getActiveElement(); // if ( NULLPTR == pElement ) // return; // // BookmarkButton* b = new BookmarkButton( QPixmap( pElement->getIconFileName() ), // pElement->getDescription(), mpQuickLoader, // Path( pElement ) ); // connect( b, SIGNAL(activatedSignal(Path*)), this, SLOT(quicklyLoad(Path*)) ); //} // // //// ------------------------------------------------------------------------------- //void CMainWindow::quicklyLoad(Path* path) //// ------------------------------------------------------------------------------- //{ // std::cout<<"load quickly "<toString().toStdString()<getActiveElement(); // if ( NULLPTR == pActiveElement ) // { // QMessageBox::information( 0, "Converter", "There is no active entry.", // QMessageBox::Abort ); // return; // } // // if ( pActiveElement->getInformationFormat() == &InformationFormat::RTF) // { // QMessageBox::information( 0, "Converter", "Sorry, but converting RTF to ASCII " // "is not implemented yet.", // QMessageBox::Ok, QMessageBox::NoButton, QMessageBox::NoButton); // return; // } // // if (QMessageBox::Cancel == QMessageBox::warning(this, "Converting Information Format", // "Are you sure to change the information " // "format.\nSome of the text layout will be lost.", // QMessageBox::Yes, // QMessageBox::Cancel, // QMessageBox::NoButton)) // { // return; // } // // // // converting // mpEditor->writeCurrentTextToActiveInformationElement(); // Converter::convert( *pActiveElement ); // // mpEditor->setTextFormat( Qt::RichText ); // mpEditor->setText( pActiveElement->getInformation() ); // // mpCollection->setActiveElement( pActiveElement ); //*/ //} // ------------------------------------------------------------------------------- void CMainWindow::showRecognizedFormat( InformationFormat format ) // ------------------------------------------------------------------------------- { Q_ASSERT( NULLPTR != mpStatusBar_TextFormatLabel ); if ( !mpStatusBar_TextFormatLabel ) return; mpStatusBar_TextFormatLabel->setText( format.toString() ); // enabeling rtf-formatting stuff for rtf-information-items only bool b = format.equals( InformationFormat::getByString("RTF") ); mpEditBoldAction->setEnabled(b); mpEditItalicAction->setEnabled(b); mpEditUnderAction->setEnabled(b); mpEditColorAction->setEnabled(b); mpEditTextLeftAction->setEnabled(b); mpEditTextCenterAction->setEnabled(b); mpEditTextRightAction->setEnabled(b); mpEditTextBlockAction->setEnabled(b); } /**************************** Editor methods start ******************************/ /** * Whenever the clipboard content changes, the action "paste" is enabled or * disabled accordingly. */ // ------------------------------------------------------------------------------- void CMainWindow::clipboardDataChanged() // ------------------------------------------------------------------------------- { if ( !mpEditPasteAction ) return; mpEditPasteAction->setEnabled( !QApplication::clipboard()->text().isEmpty() ); } // ------------------------------------------------------------------------------- void CMainWindow::setEditListStyle( int iStyleIndex ) // ------------------------------------------------------------------------------- { if ( !mpEditor ) return; QTextCursor cursor = mpEditor->textCursor(); if ( 0 != iStyleIndex ) { QTextListFormat::Style style = QTextListFormat::ListDisc; switch (iStyleIndex) { default: case 1: style = QTextListFormat::ListDisc; break; case 2: style = QTextListFormat::ListCircle; break; case 3: style = QTextListFormat::ListSquare; break; case 4: style = QTextListFormat::ListDecimal; break; case 5: style = QTextListFormat::ListLowerAlpha; break; case 6: style = QTextListFormat::ListUpperAlpha; break; } cursor.beginEditBlock(); // ******** edit start ************* QTextBlockFormat blockFmt = cursor.blockFormat(); QTextListFormat listFmt; if ( cursor.currentList() ) { listFmt = cursor.currentList()->format(); } else { listFmt.setIndent( blockFmt.indent() + 1 ); blockFmt.setIndent( 0 ); cursor.setBlockFormat( blockFmt ); } listFmt.setStyle( style ); cursor.createList( listFmt ); cursor.endEditBlock(); // ******** edit end *************** } else { // #### QTextBlockFormat bfmt; bfmt.setObjectIndex( -1 ); cursor.mergeBlockFormat( bfmt ); } } // ------------------------------------------------------------------------------- void CMainWindow::setEditFontFamily( const QString& f ) // ------------------------------------------------------------------------------- { if ( !mpEditor ) return; mpEditor->setFontFamily( f ); mpEditor->setFocus( Qt::OtherFocusReason ); } // ------------------------------------------------------------------------------- void CMainWindow::setEditFontSize( const QString& s ) // ------------------------------------------------------------------------------- { if ( !mpEditor ) return; mpEditor->setFontPointSize( s.toInt() ); mpEditor->setFocus( Qt::OtherFocusReason ); } /** * Whenever the font of the currently edited text within the editor * is changed -> the toolbuttons are adjusted. */ // ------------------------------------------------------------------------------- void CMainWindow::textFontChanged( const QTextCharFormat& f ) // ------------------------------------------------------------------------------- { if ( !mpEditFontCombo || !mpEditFontSizeCombo || !mpEditBoldAction || !mpEditItalicAction || !mpEditUnderAction ) return; mpEditFontCombo->lineEdit()->setText( f.fontFamily() ); mpEditFontSizeCombo->lineEdit()->setText( QString::number( f.fontPointSize() ) ); mpEditBoldAction->setChecked( QFont::Bold == f.fontWeight() ); mpEditItalicAction->setChecked( f.fontItalic() ); mpEditUnderAction->setChecked( f.fontUnderline() ); textColorChanged( f.foreground().color() ); } // ------------------------------------------------------------------------------- void CMainWindow::textColorChanged( const QColor& c ) // ------------------------------------------------------------------------------- { QPixmap pix( getIcon("text_color").pixmap(24,24) ); QPainter p; p.begin(&pix); p.fillRect(1,13, 16,4, QColor(c)); p.end(); mpEditColorAction->setIcon( pix ); } // ------------------------------------------------------------------------------- void CMainWindow::textAlignmentChanged( Qt::Alignment a ) // ------------------------------------------------------------------------------- { mpEditTextLeftAction->setChecked( FALSE ); mpEditTextCenterAction->setChecked( FALSE ); mpEditTextRightAction->setChecked( FALSE ); mpEditTextBlockAction->setChecked( FALSE ); //std::cout<<"CMainWindow::textAlignmentChanged() to "<setChecked( TRUE ); //std::cout<<"center"<setChecked( TRUE ); //std::cout<<"right"<setChecked( TRUE ); //std::cout<<"just"<setChecked( TRUE ); //std::cout<<"left"<textColor(), this ); if ( !c.isValid() ) return; mpEditor->setTextColor( c ); textColorChanged( c ); } // ------------------------------------------------------------------------------- void CMainWindow::textLeft() // ------------------------------------------------------------------------------- { if ( ! mpEditor ) return; textAlignmentChanged( Qt::AlignLeft ); mpEditor->setAlignment( Qt::AlignLeft ); } // ------------------------------------------------------------------------------- void CMainWindow::textHCenter() // ------------------------------------------------------------------------------- { if ( !mpEditor ) return; textAlignmentChanged( Qt::AlignHCenter ); mpEditor->setAlignment( Qt::AlignHCenter ); } // ------------------------------------------------------------------------------- void CMainWindow::textRight() // ------------------------------------------------------------------------------- { if ( !mpEditor ) return; textAlignmentChanged( Qt::AlignRight ); mpEditor->setAlignment( Qt::AlignRight ); } // ------------------------------------------------------------------------------- void CMainWindow::textBlock() // ------------------------------------------------------------------------------- { if ( !mpEditor ) return; textAlignmentChanged( Qt::AlignJustify ); mpEditor->setAlignment( Qt::AlignJustify ); } /*************************** Editor methods end *********************************/ /*************************** File methods start *********************************/ /** * Checks whether tuxcards runs for the first time with this version * if yes -> write new features in file */ // // ------------------------------------------------------------------------------- // void CMainWindow::checkFirstTime() // // ------------------------------------------------------------------------------- // { // QString configurationFileName = QDir::homePath() + "/.tuxcards"; // // ConfigParser parser( configurationFileName, FALSE ); // parser.setGroup("General"); // QString version = parser.readEntry("Version", "previousVersion"); // // TODO: Check whether this version is correct and does work // if( version != "TuxCardsV1.0" ) // { // // write datafile // QFile file( QDir::homePath() + "/" + TUX_GREETING_FILE ); // QTextStream* pLog = NULLPTR; // // if( !file.open(QIODevice::WriteOnly) ) // { // std::cerr<<"TuxCards - cannot write to "<setCodec( pCodec ); // } // // *pLog<clearCollection(); DELETE( mpCollection ); if ( bCreateDefaultCollection ) { mpCollection = CInformationCollection::createDefaultCollection(); initializingCollection(""); } } // ------------------------------------------------------------------------------- void CMainWindow::clearAll() // ------------------------------------------------------------------------------- { if ( QMessageBox::Cancel == askForSaving( tr("Do you want to save before deleting " "all entries and creating a new file?") ) ) return; deleteCollectionAndCreateADefaultOne( true ); } // ------------------------------------------------------------------------------- QMessageBox::Button CMainWindow::askForSaving( const QString& sQuestion ) // ------------------------------------------------------------------------------- { QMessageBox::Button result = QMessageBox::No; if ( mbChangesExist ) { result = (QMessageBox::Button) QMessageBox::warning( this, tr("Saving"), sQuestion, QMessageBox::Yes, QMessageBox::No, QMessageBox::Cancel ); if ( QMessageBox::Yes == result ) save(); } return result; } /** * Checks whether the config file (formerly ".tuxcards" file within the home * directory) exists. If yes, then the last saved file is loaded and the tree * is initialized with first data. * * Please note: If a file is give via parameter sArg it is treaded * with higher priority and loaded (instead of a file from the * configuration). */ // ------------------------------------------------------------------------------- void CMainWindow::loadLastSavedDataIfConfigFileIsFound( const QString& sArg ) // ------------------------------------------------------------------------------- { bool bResult = FALSE; if ( sArg != "" ) { bResult = open( sArg ); } else if ( mConfiguration.getStringValue( CTuxCardsConfiguration::S_DATA_FILE_NAME ) != "" ) { bResult = open( mConfiguration.getStringValue( CTuxCardsConfiguration::S_DATA_FILE_NAME ) ); } if ( !bResult ) { deleteCollectionAndCreateADefaultOne( true ); if ( mpCollection ) mpCollection->setActiveElement( mpCollection->getRootElement() ); } clearChanges(); } /** * Before calling this method the informationCollection 'mpCollection' * must be valid ! */ // ------------------------------------------------------------------------------- void CMainWindow::initializingCollection( const QString& sDataFileName ) // ------------------------------------------------------------------------------- { Q_ASSERT( NULLPTR != mpCollection ); Q_ASSERT( NULLPTR != mpSingleEntryView ); Q_ASSERT( NULLPTR != mpTree ); Q_ASSERT( NULLPTR != mpEditor ); if ( !mpCollection || !mpSingleEntryView || !mpTree || !mpEditor ) return; // //std::cout<<"vorher"<setAbsFileName( sDataFileName ); setWindowTitle(); connect( mpCollection, SIGNAL(activeInformationElementChanged(CInformationElement*)), mpSingleEntryView, SLOT(activeInformationElementChanged(CInformationElement*)) ); // connect( mpCollection, SIGNAL(modelHasChanged()), this, SLOT(recognizeChanges()) ); // mpEditor->clear(); // These two methods must be called after the connect of 'mpCollection' with // the signal 'activeInformationElementChanged()'. Otherwise: The editor will not // be updated with the last active element. mpTree->setCollection( *mpCollection ); setLastActiveElement(); // Collection successfully created and system set up with it. clearChanges(); mpCollection->addView( mpSingleEntryView ); mConfiguration.setStringValue( CTuxCardsConfiguration::S_DATA_FILE_NAME, sDataFileName ); mConfiguration.saveToFile(); // because the dataFileName has changed } /** * Adapter for open( const QString& sFileName ). */ // ------------------------------------------------------------------------------- void CMainWindow::open() // ------------------------------------------------------------------------------- { // give a chance to save the file before opening another one if ( QMessageBox::Cancel == askForSaving( tr("Do you want to save before opening another data file?") ) ) return; // getting dataFileName QString sFileName( QFileDialog::getOpenFileName() ); if ( sFileName.isNull() || "" == sFileName ) showMessage( tr("No Filename specified."), 5 ); else open( sFileName ); } /** * Returns TRUE, if file was opend successfully; otherwise FALSE. */ // ------------------------------------------------------------------------------- bool CMainWindow::open( const QString& sFileName ) // ------------------------------------------------------------------------------- { bool bRetVal = FALSE; // int format = getDataFileFormat(fileName); // // if ( format == 2 ) bRetVal = openXMLDataFile( sFileName ); // else if ( format == 1 ) // retVal = openOldDataFile(fileName); // else // { // QMessageBox::critical( this, "Opening a data file", // "Could not open file '"+fileName+"'
    or did not " // "recognize the dataformat.", // "Ok"); // } if ( bRetVal ) { if ( mpRecentFiles ) { mpRecentFiles->setOnTop( sFileName ); } } return bRetVal; } /** * Opens a file given by a valid name ('fileName'), creates an * informationcollection from it & sets latter one to be presented * within tuxcards. * * Returns TRUE, if file was opend successfully; otherwise FALSE. */ // ------------------------------------------------------------------------------- bool CMainWindow::openXMLDataFile( const QString& sFileName ) // ------------------------------------------------------------------------------- { // create absolute file name, in case a relative one is given QString sAbsoluteFileName = QFileInfo( sFileName ).absoluteFilePath(); deleteCollectionAndCreateADefaultOne( false ); QFile file( sAbsoluteFileName ); mpCollection = XMLPersister::createInformationCollection( file ); if ( !mpCollection ) { QMessageBox::critical(this, tr("TuxCards - XML I/O"), tr("ERROR - Could not open") + " '"+ sAbsoluteFileName + "' " + tr("for reading or parse error."), QMessageBox::Ok, QMessageBox::NoButton, QMessageBox::NoButton); return FALSE; } initializingCollection( sAbsoluteFileName ); return TRUE; } // ------------------------------------------------------------------------------- void CMainWindow::slotSaveAndLoadNewFile( const QString& sNewFile ) // ------------------------------------------------------------------------------- { save(); open( sNewFile ); } // ------------------------------------------------------------------------------- void CMainWindow::save() // ------------------------------------------------------------------------------- { if ( "" == mConfiguration.getStringValue( CTuxCardsConfiguration::S_DATA_FILE_NAME ) ) { saveAs(); } else { save( mConfiguration.getStringValue( CTuxCardsConfiguration::S_DATA_FILE_NAME ) ); } } // ------------------------------------------------------------------------------- void CMainWindow::saveAs() // ------------------------------------------------------------------------------- { QString sNewFileName( QFileDialog::getSaveFileName() ); if ( sNewFileName.isNull() || ("" == sNewFileName) ) { showMessage( tr("No Filename specified."), 5); return; } save( sNewFileName ); // At the currently saved file to the recent file list; this is necessary in // case a new file was created (a new file was not opened). if ( mpRecentFiles ) mpRecentFiles->setOnTop( sNewFileName ); mConfiguration.setStringValue( CTuxCardsConfiguration::S_DATA_FILE_NAME, sNewFileName ); mConfiguration.saveToFile(); } // ------------------------------------------------------------------------------- void CMainWindow::save( const QString& sFileName ) // ------------------------------------------------------------------------------- { if ( !mpCollection || !mpEditor ) return; if ( (QDir::homePath() + TUX_CONFIG_FILE) == sFileName ) { QMessageBox::warning( this, tr("Saving"), tr("File not saved.\n" "Please do not use") + " \"" + sFileName + "\" " + tr("as file name."), QMessageBox::Abort, NULL ); return; } if ( !mbChangesExist ) { showMessage( tr("No changes."), 5); return; } // before saving -> move current file i.e. "myfile.data" to "myfile.data~" if ( mConfiguration.getBoolValue( CTuxCardsConfiguration::B_CREATE_BACKUP_FILE ) ) { QDir tmp; QString sFileName2 = mConfiguration.getStringValue( CTuxCardsConfiguration::S_DATA_FILE_NAME ); tmp.rename( sFileName2, sFileName2 + "~" ); } // saving eventual changes mpEditor->writeCurrentTextToActiveInformationElement(); XMLPersister::save( *mpCollection, sFileName ); mpCollection->setAbsFileName( sFileName ); mConfiguration.setStringValue( CTuxCardsConfiguration::S_DATA_FILE_NAME, sFileName ); mConfiguration.saveToFile(); clearChanges(); showMessage( tr("Saved to") + " '" + sFileName + "'.", 5); callingExecutionStatement(); } // ------------------------------------------------------------------------------- void CMainWindow::exit() // ------------------------------------------------------------------------------- { close(); // calls 'closeEvent(..)' indirectly } /** * Saves the data automatically by closing/quitting the program. */ // ------------------------------------------------------------------------------- void CMainWindow::closeEvent( QCloseEvent* pEv ) // ------------------------------------------------------------------------------- { if ( !pEv ) { return; } // accept signal pEv->accept(); // default implementation of this method setWindowGeometryToConfiguration(); if ( mpRecentFiles ) mConfiguration.setStringValue( CTuxCardsConfiguration::S_RECENT_FILES, mpRecentFiles->toString() ); mConfiguration.saveToFile(); if ( !mbChangesExist ) return; if ( mConfiguration.getBoolValue( CTuxCardsConfiguration::B_SAVE_WHEN_LEAVING ) || (QMessageBox::warning( this, tr("Save before exiting."), tr("Do you want to save before leaving TuxCards?"), QMessageBox::Yes, QMessageBox::No ) == QMessageBox::Yes) ) { mSaveChangesDialog.show(); save(); mSaveChangesDialog.hide(); } } ///* //// ------------------------------------------------------------------------------- //void CMainWindow::saveActiveEntry() //// ------------------------------------------------------------------------------- //{ // // saving eventual changes // editor->writeCurrentTextToActiveInformationElement(); // QString description=mpCollection->getActiveElement()->getDescription(); // QString fileName=QDir::homeDirPath()+description+".xml"; // XMLPersister::save(mpCollection, fileName); // // QPushButton* b= new QPushButton(QPixmap(mpCollection->getActiveElement()->getIconFileName()), // description, mpQuickLoader); // connect( b, SIGNAL(clicked(b->text())), this, SLOT(quicklyLoad(QString)) ); // //// mConfiguration.setStringValue( CTuxCardsConfiguration::S_DATA_FILE_NAME, fileName ); //// mConfiguration.saveToFile(); // // showMessage("Entry saved and added to QuickLoader.", 5); //}*/ // // ///** // * Opens a file and detects the fileformat. // * i.e. '2' == XML-File (the new TuxCards format) // * '1' == Old-File (the old TuxCards format, that was used since version 0.5) // * '0' == unknown format // */ //// ------------------------------------------------------------------------------- //int CMainWindow::getDataFileFormat(QString fileName) //// ------------------------------------------------------------------------------- //{ // QFile file(fileName); // if ( !file.open(QIODevice::ReadOnly) ) { // //showMessage("ERROR could not open '"+fileName+"' for reading.", 5); // return 0; // } // // // QTextStream t( &file ); // QString line=t.readLine(); // //cout<<"readLine="<verticalScrollBar()->value() ); mConfiguration.setIntValue( CTuxCardsConfiguration::I_WINDOW_XPOS, pos().x() ); mConfiguration.setIntValue( CTuxCardsConfiguration::I_WINDOW_YPOS, pos().y() ); mConfiguration.setIntValue( CTuxCardsConfiguration::I_WINDOW_WIDTH, width() ); mConfiguration.setIntValue( CTuxCardsConfiguration::I_WINDOW_HEIGHT, height() ); if ( mpSplit ) { mConfiguration.setIntValue( CTuxCardsConfiguration::I_TREE_WIDTH, mpSplit->sizes().first() ); mConfiguration.setIntValue( CTuxCardsConfiguration::I_EDITOR_WIDTH, mpSplit->sizes().last() ); } mConfiguration.saveToFile(); } ///** // * sets the text within the editor 'mpEditor' to 'text' // */ ///*void CMainWindow::updateText(QString text){ // mpEditor->setText(text); //} //*/ //// ------------------------------------------------------------------------------- //CInformationElement* CMainWindow::getActiveIE() //// ------------------------------------------------------------------------------- //{ // if ( NULLPTR == mpCollection ) // return NULLPTR; // // return mpCollection->getActiveElement(); //} /** * Reads the last active element from the configuration file and sets it into * information collection. */ // ------------------------------------------------------------------------------- void CMainWindow::setLastActiveElement() // ------------------------------------------------------------------------------- { if ( !mpCollection ) return; Path path( XMLPersister::getPathOfLastActiveElement() ); if ( mpCollection->isPathValid(path) ) { //std::cout<<"Path is valid"<setActiveElement( path ); } else { //std::cout<<"Path is invalid"<setActiveElement( mpCollection->getRootElement() ); } } /** * Shows the given messages via the statusbar vor iSeconds seconds. */ // ------------------------------------------------------------------------------- void CMainWindow::showMessage( const QString& sMessage, int iSeconds ) // ------------------------------------------------------------------------------- { QStatusBar* pStatusBar = statusBar(); Q_ASSERT( NULLPTR != pStatusBar ); if ( !pStatusBar ) return; pStatusBar->showMessage( sMessage, iSeconds*1000 ); } /** * To keep track of changes, put a marker in the statusbar, * and update the member mbChangesExist to prevent unnecessary savings. */ // ------------------------------------------------------------------------------- void CMainWindow::recognizeChanges() // ------------------------------------------------------------------------------- { mbChangesExist = TRUE; setWindowModified( TRUE ); // With this the members 'mpStatusBar_ChangeLabel' // and 'mbChangesExist' can be removed. if ( mpStatusBar_ChangeLabel ) mpStatusBar_ChangeLabel->setText("*"); } /** * To keep track of changes, remove the marker from the statusbar, * and update the member mbChangesExist to prevent unnecessary savings. */ // ------------------------------------------------------------------------------- void CMainWindow::clearChanges() // ------------------------------------------------------------------------------- { mbChangesExist = FALSE; setWindowModified( FALSE ); if ( mpStatusBar_ChangeLabel ) mpStatusBar_ChangeLabel->setText(" "); } /********************* Auxiliary methods end ************************************/ // ------------------------------------------------------------------------------- void CMainWindow::callingExecutionStatement() const // ------------------------------------------------------------------------------- { // If an empty execution statement is called under the windows os, then a // short flashing black window appears. // This is irritating; there fore we first check, whether something must be // executed. if ( mConfiguration.getStringValue( CTuxCardsConfiguration::S_EXECUTE_STATEMENT ).isEmpty() ) return; system( mConfiguration.getStringValue( CTuxCardsConfiguration::S_EXECUTE_STATEMENT ).toAscii() ); } /** * Exports the current collection to HTML. */ // ------------------------------------------------------------------------------- void CMainWindow::exportHTML() // ------------------------------------------------------------------------------- { if ( !mpCollection ) return; QString sDirPath = QFileDialog::getExistingDirectory( this, tr("Choose a directory"), QDir::homePath(), QFileDialog::ShowDirsOnly ); if ( sDirPath.isEmpty() ) return; bool bSuccess = HTMLWriter::writeCollectionToHTMLFile( *mpCollection, sDirPath ); // done if ( FALSE != bSuccess ) { QMessageBox::information( this, tr("HTML-Export"), tr("HTML") + "" + tr("Export") + " (" + QString(TUX_SHORT_VERSION) + ") " + tr("finished, successfully.") + "

    " + tr("The data are stored in") + "
    "+sDirPath, QMessageBox::Ok ); } else { QMessageBox::warning( this, tr("HTML-Export"), tr("HTML") + "" + tr("Export") + " (" + QString(TUX_SHORT_VERSION) + ")" " " + tr("not successfully") + ".

    " + tr("Please check write permission and disk space") + "
    " "(" + sDirPath + ").", QMessageBox::Abort ); } } //// ------------------------------------------------------------------------------- //void CMainWindow::keyPressEvent(QKeyEvent* k) //// ------------------------------------------------------------------------------- //{ // if ( !k || !mpTree || !mpSingleEntryView ) // return; // // switch( k->modifiers() ) // { // default: // if ( Qt::Key_F5 == k->key() ) // { // if ( mpEditor->hasFocus() ) // mpTree->setFocus(); // else // mpEditor->setFocus(); // } // else // k->ignore(); // break; // } //} // ------------------------------------------------------------------------------- void CMainWindow::wordCount( void ) // ------------------------------------------------------------------------------- { if ( !mpEditor ) return; int iWords = Strings::wordCount( mpEditor->toPlainText() ); // int iLines = Strings::lineCount( mpEditor->toPlainText() ); //-1; //mpEditor->lines(); // int parags = -1; //mpEditor->paragraphs(); QMessageBox::information( this, tr("Word Count"), "

    " + tr("Current Text contains") + "
    " +QString::number(iWords) +( ((iWords > 1) || (0 == iWords)) ? tr(" words.") + "
    " : tr(" word.") + "
    " ) // +QString::number(iLines) // +( ((iLines > 1) || (0 == iLines)) ? " lines
    " : " line
    " ) // +QString::number(parags) + (parags > 1 ? " paragraphs" : "paragraph" ) // +"." +"
    "); } // ------------------------------------------------------------------------------- void CMainWindow::insertCurrentDate( void ) // ------------------------------------------------------------------------------- { if ( mpEditor ) mpEditor->insertPlainText( QDate::currentDate().toString() ); } // ------------------------------------------------------------------------------- void CMainWindow::insertCurrentTime() // ------------------------------------------------------------------------------- { if ( mpEditor ) mpEditor->insertPlainText( QTime::currentTime().toString() ); } // ------------------------------------------------------------------------------- void CMainWindow::showAbout() // ------------------------------------------------------------------------------- { QMessageBox::about( this, "TuxCards", "TuxCards - The Notebook for TuxFreaks\n" + QString(TUX_VERSION) + "\n\n" "www.tuxcards.de\n\n" "Copyright (C) 2000-2010 Alexander Theel\n" "alex.theel@gmx.net" ); } // ------------------------------------------------------------------------------- void CMainWindow::slotSetMainToolBarVisible( bool bVisible ) // ------------------------------------------------------------------------------- { mConfiguration.setBoolValue( CTuxCardsConfiguration::B_SHOW_MAIN_TOOLBAR, bVisible ); if ( mpMainToolBar ) { if (bVisible) mpMainToolBar->show(); else mpMainToolBar->hide(); } mConfiguration.saveToFile(); } // ------------------------------------------------------------------------------- void CMainWindow::slotSetEntryToolBarVisible( bool bVisible ) // ------------------------------------------------------------------------------- { mConfiguration.setBoolValue( CTuxCardsConfiguration::B_SHOW_ENTRY_TOOLBAR, bVisible ); if ( mpEntryToolBar ) { if (bVisible) mpEntryToolBar->show(); else mpEntryToolBar->hide(); } mConfiguration.saveToFile(); } // ------------------------------------------------------------------------------- void CMainWindow::slotSetEditorToolBarVisible( bool bVisible ) // ------------------------------------------------------------------------------- { mConfiguration.setBoolValue( CTuxCardsConfiguration::B_SHOW_EDITOR_TOOLBAR, bVisible ); if ( mpEditorToolBar && mpEditorToolBar2 ) { if (bVisible) { mpEditorToolBar->show(); mpEditorToolBar2->show(); } else { mpEditorToolBar->hide(); mpEditorToolBar2->hide(); } } mConfiguration.saveToFile(); } //#ifdef FEATURE_RECENTFILELIST_TOOLBAR //// ------------------------------------------------------------------------------- //void CMainWindow::setRecentFilesToolbarVisible( bool bVisible ) //// ------------------------------------------------------------------------------- //{ // mConfiguration.setBoolValue( CTuxCardsConfiguration::B_SHOW_RECENTFILES_TOOLBAR, bVisible ); // // if ( mpRecentFilesTools ) // { // if (bVisible) mpRecentFilesTools->show(); // else mpRecentFilesTools->hide(); // } //// if ( mpMenu ) mpMenu->setItemChecked( miRecentFilesToolBarID, bVisible ); // mConfiguration.saveToFile(); //} //#endif // ------------------------------------------------------------------------------- void CMainWindow::slotEditConfiguration() // ------------------------------------------------------------------------------- { if ( !mpConfigurationDialog ) return; mpConfigurationDialog->setUp(); } // ------------------------------------------------------------------------------- void CMainWindow::applyConfiguration() // ------------------------------------------------------------------------------- { // cactusbar if ( mpCactusBar ) { mpCactusBar->toggleCactus( mConfiguration.getBoolValue( CTuxCardsConfiguration::B_IS_CACTUSBAR_ENABLED ) ); QString t1(""); QString t2(""); if( mConfiguration.getBoolValue(CTuxCardsConfiguration::B_IS_HTEXT_ENABLED) ) { t1 = mConfiguration.getStringValue( CTuxCardsConfiguration::S_TEXT_ONE ); t2 = mConfiguration.getStringValue( CTuxCardsConfiguration::S_TEXT_TWO ); } mpCactusBar->change( mConfiguration.getTopColor(), mConfiguration.getBottomColor(), t1, t2, mConfiguration.getFontColor() ); if( mConfiguration.getBoolValue( CTuxCardsConfiguration::B_IS_VTEXT_ENABLED ) ) { t1 = mConfiguration.getStringValue( CTuxCardsConfiguration::S_VERTICAL_TEXT ); } else { t1 = ""; } mpCactusBar->setVerticalText( t1, mConfiguration.getBoolValue( CTuxCardsConfiguration::B_ALIGN_VTEXT ) ); mpCactusBar->setFlowerDirectory( mConfiguration.getStringValue( CTuxCardsConfiguration::S_FLOWER_DIR ) ); mpCactusBar->update(); } // autosave killTimer( miTimerID ); if ( mConfiguration.getBoolValue( CTuxCardsConfiguration::B_AUTOSAVE ) ) miTimerID = startTimer( 60000 * mConfiguration.getIntValue( CTuxCardsConfiguration::I_SAVE_ALL_MINUTES ) ); // editor if ( mpEditor ) { QFont editorFont = mConfiguration.getEditorFont().toFont(); mpEditor->setEditorFont( editorFont ); mpEditor->setTabStopWidth( mConfiguration.getIntValue( CTuxCardsConfiguration::I_TAB_SIZE ) * QFontMetrics( editorFont ).width('X') ); mpEditor->setLineWrap( mConfiguration.getIntValue( CTuxCardsConfiguration::I_WORD_WRAP ) ); // if ( mConfiguration.getBoolValue( CTuxCardsConfiguration::B_LINEBREAK_WITH_CTRL_SHIFT )) // mpEditor->setLinebreakMode( LINEBREAK_WITH_CTRL_SHIFT ); // else // mpEditor->setLinebreakMode( LINEBREAK_WITHOUT_CTRL_SHIFT ); } // tree mpTree->setFont( mConfiguration.getTreeFont().toFont() ); // windowsize & splitter setWindowGeometry( mConfiguration.getIntValue( CTuxCardsConfiguration::I_WINDOW_XPOS ), mConfiguration.getIntValue( CTuxCardsConfiguration::I_WINDOW_YPOS ), mConfiguration.getIntValue( CTuxCardsConfiguration::I_WINDOW_WIDTH ), mConfiguration.getIntValue( CTuxCardsConfiguration::I_WINDOW_HEIGHT ), mConfiguration.getIntValue( CTuxCardsConfiguration::I_TREE_WIDTH ), mConfiguration.getIntValue( CTuxCardsConfiguration::I_EDITOR_WIDTH ) ); } /** * The following configurations must be applied after the method show() * for the window was called, otherwise the window is not yet painted and configuration * commands (f.i. the scrollbar of the tree) do not have an effect. */ // ------------------------------------------------------------------------------- void CMainWindow::applyConfigurationAfterShow() // ------------------------------------------------------------------------------- { if ( !mpTree ) return; mpTree->verticalScrollBar()->setValue( mConfiguration.getIntValue( CTuxCardsConfiguration::I_TREE_VSCROLLBAR_VALUE ) ); } // ------------------------------------------------------------------------------- void CMainWindow::setWindowGeometry( int iWindowXPos, int iWindowYPos, int iWindowWidth, int iWindowHeight, int iTreeWidth, int iEditorWidth ) // ------------------------------------------------------------------------------- { move( iWindowXPos, iWindowYPos ); resize( iWindowWidth, iWindowHeight); QList sizeList; sizeList.append( iTreeWidth ); sizeList.append( iEditorWidth ); mpSplit->setSizes( sizeList ); } // ------------------------------------------------------------------------------- void CMainWindow::print() // ------------------------------------------------------------------------------- { if ( !mpCollection || !mpCollection->getActiveElement() ) return; if ( mpCollection->getActiveElement()->getInformationFormat() == InformationFormat::getByString("ASCII") ) { QMessageBox::information( this, tr("Printing"), tr("I suggest to convert this entry to " "rtf before printing."), QMessageBox::Ok ); } if ( !mpEditor ) return; mpEditor->writeCurrentTextToActiveInformationElement(); #ifndef QT_NO_PRINTER QPrinter printer(QPrinter::HighResolution); printer.setFullPage(true); QPrintDialog *dlg = new QPrintDialog(&printer, this); if (dlg->exec() == QDialog::Accepted) { mpEditor->document()->print(&printer); } delete dlg; #endif } // ------------------------------------------------------------------------------- void CMainWindow::makeVisible( const CSearchPosition* const pPosition ) // ------------------------------------------------------------------------------- { std::cout<<"CMainWindow::makeVisible()"<getPath(); // if ( !pPath ) // return; mpCollection->setActiveElement( *(pPosition->getPath()) ); // If a match was found within the entry's text, then set the cursor appropriatetly. // Otherwise not! if ( CSearchPosition::SP_INFORMATION == pPosition->getLocation() ) { QTextCursor cursor = mpEditor->textCursor(); cursor.setPosition( pPosition->getPos() ); cursor.movePosition( QTextCursor::NextCharacter, QTextCursor::KeepAnchor, pPosition->getLen() ); mpEditor->setTextCursor( cursor ); } this->activateWindow(); mpEditor->setFocus(); //mpEditor->ensureCursorVisible(); } // ------------------------------------------------------------------------------- void CMainWindow::showDonationMsg() // ------------------------------------------------------------------------------- { if ( mConfiguration.getBoolValue( CTuxCardsConfiguration::B_SHOW_DONATION_MSG_2 ) ) return; QMessageBox::about( this, "TuxCards", "

    TuxCards " TUX_SHORT_VERSION + tr(" is published as Donationware") + "

    " "" "

    " + tr("You may use it freely and without charge as stated within the GPL.") +"

    " "" "

    " + tr("Do you like TuxCards ...") + " " + tr("and you want to enable the development of new " "features? Or do you want to ensure a high quality of future releases " "or simply compensate for ftp-server costs? Then you are welcome to " "donate EUR 5 to the author. (At your wish US$ 5 or an equivalent amount " "in your currency.)") + "

    " "" "

    " + tr("Please, use") + " www.tuxcards.de/donations.html " + tr("for a secure donation via internet.") + "

    " "" "

    " + tr("Or simply send a letter with your amount to") + "

    " "" "Alexander Theel
    " "Am Trommlerbusch 24 d
    " "02708 Loebau
    " + tr("Germany") + "
    " ); mConfiguration.setBoolValue( CTuxCardsConfiguration::B_SHOW_DONATION_MSG_2, true ); mConfiguration.saveToFile(); } ///*********************** debug methods **********************************/ //// ------------------------------------------------------------------------------- //void CMainWindow::debugShowRTFTextSource() //// ------------------------------------------------------------------------------- //{ // if ( NULLPTR == mpEditor ) // return; // // QTextEdit* outputWindow=new QTextEdit(); // outputWindow->resize(400,400); // outputWindow->setPlainText(mpEditor->getText()); // outputWindow->show(); //} // // //// ------------------------------------------------------------------------------- //void CMainWindow::debugShowXMLCode() //// ------------------------------------------------------------------------------- //{ // if ( NULLPTR == mpCollection ) // return; // // QTextEdit* outputWindow=new QTextEdit(); // outputWindow->resize(400,400); // outputWindow->setPlainText(mpCollection->toXML()); // outputWindow->show(); //} tuxcards/src/gui/CMainWindow.h000555 000765 000024 00000020661 11420350116 016711 0ustar00alexstaff000000 000000 /*************************************************************************** CMainWindow.h - description ------------------- begin : Sun Mar 26 2000 copyright : (C) 2000 by Alexander Theel email : alex.theel@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #ifndef CMAINWINDOW_H #define CMAINWINDOW_H #include #include #include #include #include #include #include class CCactusBar; class QSplitter; class CEditor; class CSingleEntryView; class QComboBox; class CRecentFileList; #include "./CTree.h" #include "../information/CInformationCollection.h" #include "../CTuxCardsConfiguration.h" class CConfigurationDialog; class CSearchPosition; #include class CMainWindow : public QMainWindow { Q_OBJECT public: CMainWindow( const QString& sArg ); ~CMainWindow(); public slots: // virtual void keyPressEvent( QKeyEvent* ); protected: virtual void closeEvent( QCloseEvent* pEv ); virtual void timerEvent( QTimerEvent* ); // void checkFirstTime( void ); private: CInformationCollection* mpCollection; QMenuBar* mpMenu; CConfigurationDialog* mpConfigurationDialog; void settingUpConfigurationDialog(); CTuxCardsConfiguration& mConfiguration; int miTimerID; CCactusBar* mpCactusBar; QSplitter* mpSplit; CTree* mpTree; CSingleEntryView* mpSingleEntryView; CEditor* mpEditor; QLabel* mpStatusBar_ChangeLabel; QLabel* mpStatusBar_TextFormatLabel; bool mbChangesExist; // remembers whether changes are done or not (for saving) QDialog mSaveChangesDialog; void settingUpSaveChangesDialog(); void settingUpSearchDialog(); void settingUpActions(); void settingUpComboBoxes(); void settingUpMenu(); void settingUpToolBar(); void settingUpStatusBar(); void settingUpMainWindow(); void settingUpDialogs(); void settingUpCactusBar( QLayout& layout ); void settingUpTree( QWidget& parent ); void settingUpEditor( QWidget& parent ); void setWindowTitle(); void setWindowGeometry( int,int,int,int, int,int ); // int getDataFileFormat( QString fileName ); // bool openOldDataFile( QString fileName ); void deleteCollectionAndCreateADefaultOne( bool bCreateDefaultCollection ); bool openXMLDataFile( const QString& sFileName ); void loadLastSavedDataIfConfigFileIsFound( const QString& sArg ); void initializingCollection( const QString& sDataFileName ); QMessageBox::Button askForSaving( const QString& sQuestion ); void setLastActiveElement(); void setWindowGeometryToConfiguration(); void callingExecutionStatement() const; void textColorChanged( const QColor& c ); QComboBox* mpEditFontCombo; QComboBox* mpEditFontSizeCombo; // file actions QAction* mpFileNewAction; QAction* mpFileOpenAction; QAction* mpFileSaveAction; QAction* mpFileSaveAsAction; QAction* mpFileSaveActiveEntryAction; QAction* mpFilePrintAction; QAction* mpFileExportHTMLAction; QAction* mpSearchEntryAction; // edit actions QAction* mpEditUndoAction; QAction* mpEditRedoAction; QAction* mpEditCutAction; QAction* mpEditCopyAction; QAction* mpEditPasteAction; QAction* mpEditSelectAllAction; QAction* mpEditBoldAction; QAction* mpEditItalicAction; QAction* mpEditUnderAction; QAction* mpEditColorAction; QAction* mpEditTextLeftAction; QAction* mpEditTextCenterAction; QAction* mpEditTextRightAction; QAction* mpEditTextBlockAction; CRecentFileList* mpRecentFiles; // enable/disable toolbars QToolBar* mpMainToolBar; QToolBar* mpEntryToolBar; QToolBar* mpEditorToolBar; QToolBar* mpEditorToolBar2; QAction* mpMainToolBarAction; QAction* mpEntryToolBarAction; QAction* mpEditorToolBarAction; /* #ifdef FEATURE_RECENTFILELIST_TOOLBAR QToolBar* mpRecentFilesTools; int miRecentFilesToolBarID; #endif CInformationElement* getActiveIE(); */ void applyConfigurationAfterShow(); void showDonationMsg(); private slots: void showMessage( const QString& sMessage, int iSeconds ); void recognizeChanges(); // to keep track of changes void clearChanges(); // menu calls void clearAll(); void open(); bool open( const QString& sFileName ); void save(); void save( const QString& ); void saveAs(); void exportHTML(); void exit(); void showAbout(); void setEditListStyle( int iStyleIndex ); void setEditFontFamily( const QString& f ); void setEditFontSize( const QString& s ); void setEditTextColor(); void textLeft(); void textHCenter(); void textRight(); void textBlock(); /* void changeInformationFormat(); */ void textFontChanged( const QTextCharFormat& f ); void textAlignmentChanged( Qt::Alignment ); void clipboardDataChanged(); void showRecognizedFormat( InformationFormat format ); void slotEditConfiguration(); void applyConfiguration(); void wordCount(); void insertCurrentDate(); void insertCurrentTime(); void slotActiveIEChangedViaHistory( CInformationElement* pIE ); /* // debug slots void debugShowRTFTextSource(); void debugShowXMLCode(); // void saveActiveEntry(); void quicklyLoad(Path*); */ void print(); // void addElementToBookmarksEvent(); void slotSaveAndLoadNewFile( const QString& sNewFile ); void slotShowSearchDialog(); void makeVisible( const CSearchPosition* const pPosition ); void slotSetMainToolBarVisible( bool bVisible ); void slotSetEntryToolBarVisible( bool bVisible ); void slotSetEditorToolBarVisible( bool bVisible ); /* #ifdef FEATURE_RECENTFILELIST_TOOLBAR void setRecentFilesToolbarVisible( bool bVisible ); #endif */ }; #endif tuxcards/src/gui/colorbar/000755 000765 000024 00000000000 11420350116 016156 5ustar00alexstaff000000 000000 tuxcards/src/gui/CTree.cpp000444 000765 000024 00000106535 11420350116 016071 0ustar00alexstaff000000 000000 /*************************************************************************** CTree.cpp - description ------------------- begin : Mon Mar 27 2000 copyright : (C) 2000 by Alexander Theel email : alex.theel@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #include "CTree.h" #include "../informationExt/CCollectionModel.h" #include "../information/CTreeInformationElement.h" #include "dialogs/propertyDialog/CPropertyDialog.h" #include #include "../utilities/CIconManager.h" #define getIcon(x) CIconManager::getInstance().getIcon(x) #include #include #include "../CTuxCardsConfiguration.h" #define CTREE_COLUMN_ZERO 0 #define CTREE_AUTO_EXPAND_TIME 750 // ------------------------------------------------------------------------------- CTree::CTree( QWidget* pParent ) : QTreeView( pParent ) , mModel() , mpAddElementAction( NULLPTR ) , mpChangeElementPropertyAction( NULLPTR ) , mpRemoveElementAction( NULLPTR ) , mpLockAction( NULLPTR ) , mpRemoveLockAction( NULLPTR ) , mpIEMoveUpAction( NULLPTR ) , mpIEMoveDownAction(NULLPTR ) , mHistory() , mpHistoryPrevAction( NULLPTR ) , mpHistoryNextAction( NULLPTR ) , mIndexToBeOpenedAutomaticallyDuringDrag() , mAutoExpandTimer() , mDragStartPoint() , mDraggedIndex() , mPasswdDialog() // with parent as NULLPTR // ------------------------------------------------------------------------------- { CPropertyDialog::createInstance( this ); CPropertyDialog* pDialog = CPropertyDialog::getInstance(); connect( pDialog, SIGNAL(dataSuccessfullyEntered()), this, SLOT(slotPropertyDialogSuccessfullyClosed()) ); connect( &mAutoExpandTimer, SIGNAL(timeout()), this, SLOT(slotTimeout()) ); settingUpActions(); settingUpContextMenu(); mHistory.setListener( this ); setAcceptDrops( TRUE ); initModel(); } /** ************************** Actions ******************************************/ // ------------------------------------------------------------------------------- void CTree::settingUpActions() // ------------------------------------------------------------------------------- { // entry actions - add, change, remove mpAddElementAction = new QAction( getIcon("addTreeElement"), tr("Add Entry (INSERT)"), this ); mpAddElementAction->setShortcut( Qt::Key_Insert ); connect( mpAddElementAction, SIGNAL(triggered()), this, SLOT(addElement()) ); mpChangeElementPropertyAction = new QAction( getIcon("changeProperty"), tr("Change Properties"), this ); connect( mpChangeElementPropertyAction, SIGNAL(triggered()), this, SLOT(changeActiveElementProperties()) ); mpRemoveElementAction = new QAction( getIcon("delete"), tr("Remove active Entry (DELETE)"), this ); mpRemoveElementAction->setShortcut( Qt::Key_Delete ); connect( mpRemoveElementAction, SIGNAL(triggered()), this, SLOT(askForElementDeletionAndDeleteIt()) ); // move up/down actions mpIEMoveUpAction = new QAction( getIcon("upArrow"), tr("Move Current Entry Upwards"), this ); connect( mpIEMoveUpAction, SIGNAL(triggered()), this, SLOT(slotMoveElementUp()) ); mpIEMoveDownAction = new QAction( getIcon("downArrow"), tr("Move Current Entry Downwards"), this ); connect( mpIEMoveDownAction, SIGNAL(triggered()), this, SLOT(slotMoveElementDown()) ); // history actions mpHistoryPrevAction = new QAction( getIcon("back"), tr("Back, Previous Entry (Alt+Left)"), this ); mpHistoryPrevAction->setShortcut( Qt::AltModifier + Qt::Key_Left ); connect( mpHistoryPrevAction, SIGNAL(triggered()), this, SLOT(slotActivatePreviousHistoryElement()) ); mpHistoryPrevAction->setEnabled( FALSE ); mpHistoryNextAction = new QAction( getIcon("forward"), tr("Forward, Next Entry (Alt+Right)"), this ); mpHistoryNextAction->setShortcut( Qt::AltModifier + Qt::Key_Right ); connect( mpHistoryNextAction, SIGNAL(triggered()), this, SLOT(slotActivateNextHistoryElement()) ); mpHistoryNextAction->setEnabled( FALSE ); mpLockAction = new QAction( getIcon("lock"), tr("Encrypt active Entry"), this ); connect( mpLockAction, SIGNAL(triggered()), this, SLOT(slotEncryptActiveElement()) ); mpRemoveLockAction = new QAction( getIcon("unlock"), tr("Remove Encryption from active Entry"), this ); connect( mpRemoveLockAction, SIGNAL(triggered()), this, SLOT(slotRemoveEncryptionFromActiveEntry()) ); mpRemoveLockAction->setEnabled( FALSE ); } /** * Adding action to this widget in order to create a context menu. */ // ------------------------------------------------------------------------------- void CTree::settingUpContextMenu() // ------------------------------------------------------------------------------- { addAction( mpAddElementAction ); addAction( mpChangeElementPropertyAction ); addAction( mpRemoveElementAction ); addAction( mpLockAction ); addAction( mpRemoveLockAction ); // add a separator QAction* pSeparator = new QAction( "", this ); Q_ASSERT( pSeparator ); pSeparator->setSeparator(TRUE); addAction( pSeparator ); addAction( mpIEMoveUpAction ); addAction( mpIEMoveDownAction ); // add another separator pSeparator = new QAction( "", this ); Q_ASSERT( pSeparator ); pSeparator->setSeparator(TRUE); addAction( pSeparator ); addAction( mpHistoryPrevAction ); addAction( mpHistoryNextAction ); setContextMenuPolicy( Qt::ActionsContextMenu ); } /** * Adds the entry actions to the given toolbar. */ // ------------------------------------------------------------------------------- void CTree::addActionsToToolBar( QToolBar& toolBar ) // ------------------------------------------------------------------------------- { toolBar.addAction( mpAddElementAction ); toolBar.addAction( mpChangeElementPropertyAction ); toolBar.addAction( mpRemoveElementAction ); toolBar.addAction( mpLockAction ); toolBar.addAction( mpRemoveLockAction ); toolBar.addSeparator(); toolBar.addAction( mpIEMoveUpAction ); toolBar.addAction( mpIEMoveDownAction ); toolBar.addSeparator(); toolBar.addAction( mpHistoryPrevAction ); toolBar.addAction( mpHistoryNextAction ); } // ------------------------------------------------------------------------------- void CTree::historyStatusChanged( bool bHasPreviousElement, bool bHasNextElement ) // ------------------------------------------------------------------------------- { //std::cout<<"historyStatusChanged("<setEnabled( bHasPreviousElement ); if ( mpHistoryNextAction ) mpHistoryNextAction->setEnabled( bHasNextElement ); } // ------------------------------------------------------------------------------- void CTree::slotActivatePreviousHistoryElement() // ------------------------------------------------------------------------------- { emit setActiveIEViaHistory( mHistory.getPrevious() ); } // ------------------------------------------------------------------------------- void CTree::slotActivateNextHistoryElement() // ------------------------------------------------------------------------------- { emit setActiveIEViaHistory( mHistory.getNext() ); } /** ************************** Actions end **************************************/ // ------------------------------------------------------------------------------- void CTree::initModel() // ------------------------------------------------------------------------------- { setModel( &mModel ); // connect model to a slot connect( &mModel, SIGNAL(dataChanged(const QModelIndex&, const QModelIndex&)), this, SLOT(slotModelDataChanged(const QModelIndex&)) ); } /** * Returns a reference to the model, so that it can be used by other components * as well. */ // ------------------------------------------------------------------------------- CCollectionModel& CTree::getModel() // ------------------------------------------------------------------------------- { return mModel; } // ------------------------------------------------------------------------------- void CTree::setCollection( CInformationCollection& collection ) // ------------------------------------------------------------------------------- { CInformationElement* pRootElement = collection.getRootElement(); if ( !pRootElement ) return; // TODO: Check all pointers! mModel.setInformationCollection( collection ); // disconnect from the expand/collapse signals connectTreeSignalsToSlots( DISCONNECT ); setInitialExpandStateForTreeElements( QModelIndex() ); // connect to the expand/collapse signals connectTreeSignalsToSlots( CONNECT ); selectLastActiveElement( collection ); connect( &collection, SIGNAL(activeInformationElementChanged(CInformationElement*)), this, SLOT(activeInformationElementChanged(CInformationElement*)) ); collection.addView( &mHistory ); } /** * Disconnects this tree from the currently connected collection. * It is necessary to clear the current collection right before it is * deleted and a new one is loaded. */ // ------------------------------------------------------------------------------- void CTree::clearCollection() // ------------------------------------------------------------------------------- { mModel.clearCollection(); setCurrentIndex( QModelIndex() ); } /** * In order to apply correct expand/close-property for each "tree element" * after loading of a collection, this method must be called after a new * information collection has been set. * * Set the tree items expanded or closed depending on information in * informationelements. * * Call this method with an invalid modelindex in order to start from root tree * element. */ // ------------------------------------------------------------------------------- void CTree::setInitialExpandStateForTreeElements( const QModelIndex& parentIndex ) // ------------------------------------------------------------------------------- { if ( !mModel.hasChildren( parentIndex ) ) return; QModelIndex childIndex; CTreeInformationElement* pTIE = NULLPTR; for ( int iRow = 0; iRow < mModel.rowCount( parentIndex); iRow++ ) { childIndex = mModel.index( iRow, CTREE_COLUMN_ZERO, parentIndex ); pTIE = mModel.mapIndexToIE( childIndex ); Q_ASSERT( NULLPTR != pTIE ); if ( pTIE ) { //std::cout<<"desc = "<getDescription().toStdString()<isOpen() ) expand( childIndex ); } setInitialExpandStateForTreeElements( childIndex ); } } /** * This method checks whether the last active element (that was selected before * saving the information collection to file) is valid. If yes, then it is set as * the current element and thus it is selected. * * This method must be called once after setting a new collection to this * view in order to preserve the "last mode". */ // ------------------------------------------------------------------------------- void CTree::selectLastActiveElement( CInformationCollection& collection ) // ------------------------------------------------------------------------------- { CInformationElement* pActiveElement = collection.getActiveElement(); if ( pActiveElement ) { activeInformationElementChanged( pActiveElement ); } } /** * Through this slot, the tree will be notified, if the active element * within the structure has changed. */ // ------------------------------------------------------------------------------- void CTree::activeInformationElementChanged( CInformationElement* pElement ) // ------------------------------------------------------------------------------- { if ( !pElement ) return; //std::cout<<"CTree::activeInformationElementChanged() - "<getDescription().toStdString()<getIEDescription(lastActiveIndex).toStdString()<val). As parameters the elements from * eConnectionState shall be used. * * The disconnection is needed, because during setting up a new collection. * During build up of the initial expand state of the entries, the signals can * be ignored. */ // ------------------------------------------------------------------------------- void CTree::connectTreeSignalsToSlots( const eConnectionState val ) // ------------------------------------------------------------------------------- { if ( CONNECT == val ) { //std::cout<<"*** connect to tree signals"<mapToInformationElement( const_cast(index) ); if ( pIE ) { pIE->setDescription( newValue ); }*/ } } // ------------------------------------------------------------------------------- void CTree::slotTreeItemCollapsed( const QModelIndex& index ) // ------------------------------------------------------------------------------- { if ( index.isValid() ) { //QVariant data = mModel.data( index ); //std::cout<<"item '"<setOpen( FALSE ); } } // ------------------------------------------------------------------------------- void CTree::slotTreeItemExpanded( const QModelIndex& index ) // ------------------------------------------------------------------------------- { if ( index.isValid() ) { //QVariant data = mModel.data( index ); //std::cout<<"item '"<setOpen( TRUE ); } } // ------------------------------------------------------------------------------- void CTree::currentChanged( const QModelIndex& current, const QModelIndex& previous ) // ------------------------------------------------------------------------------- { QTreeView::currentChanged( current, previous ); if ( current.isValid() ) { //QVariant data = mpModel->data( current ); //std::cout<<"current item changed; new value = '"<setUp( mModel.mapIndexToIE( currentIndex() ), CPropertyDialog::MODE_CREATE_NEW_ELEMENT ); } /** * Slot that is called when the property dialog is accepted. * In mode CPropertyDialog::MODE_CREATE_NEW_ELEMENT a new entry is * created with the data from the dialog. * * In mode CPropertyDialog::MODE_CHANGE_PROPERTIES nothing is done * (the entry is changed within the dialogs context). */ // ------------------------------------------------------------------------------- void CTree::slotPropertyDialogSuccessfullyClosed() // ------------------------------------------------------------------------------- { CPropertyDialog* pPropertyDialog = CPropertyDialog::getInstance(); if ( !pPropertyDialog ) return; if ( CPropertyDialog::MODE_CREATE_NEW_ELEMENT == pPropertyDialog->getMode() ) { // add the new entry at the end of the currently selected one mModel.insertRow( pPropertyDialog->getName(), pPropertyDialog->getInformationFormat(), pPropertyDialog->getIconFileName(), pPropertyDialog->getDescriptionColor(), pPropertyDialog->hasExpiryDateSet(), pPropertyDialog->getExpiryDate(), mModel.rowCount( currentIndex() ), currentIndex() ); setExpanded ( currentIndex(), TRUE ); } } /** * Changes the properties of the currently active element by using the property * dialog. */ // ------------------------------------------------------------------------------- void CTree::changeActiveElementProperties() // ------------------------------------------------------------------------------- { CPropertyDialog* pDialog = CPropertyDialog::getInstance(); if ( !pDialog ) return; pDialog->setUp( mModel.mapIndexToIE( currentIndex() ), CPropertyDialog::MODE_CHANGE_PROPERTIES ); } /** * This slot is called if an element should be deleted. * The corresponding datamodel is called to delete this element (after confirmation * of the user). */ // ------------------------------------------------------------------------------- void CTree::askForElementDeletionAndDeleteIt() // ------------------------------------------------------------------------------- { Q_ASSERT( TRUE == mModel.isValid() ); if ( !mModel.isValid() ) return; if ( (0 == selectedIndexes().count()) || (!currentIndex().isValid()) ) { QMessageBox::information( this, tr("Delete the active Entry"), tr("No entry selected."), QMessageBox::Ok ); return; } if ( !currentIndex().parent().isValid() ) { // root index selected for deleting QMessageBox::information( this, tr("Delete the active Entry"), tr("The root entry cannot be deleted."), QMessageBox::Ok ); return; } QString sHasChildren = ( mModel.hasChildren(currentIndex()) ? tr("(and all children)?") : tr("?") ); if( QMessageBox::No == QMessageBox::warning( this, tr("Delete the active Entry"), tr("Do you really want to delete") + " '" + getDescriptionOfCurrentActiveEntry() + "' " + sHasChildren, QMessageBox::Yes, QMessageBox::No) ) { return; } mModel.removeRow( currentIndex().row(), mModel.parent(currentIndex()) ); } /***************** 'Entry insertion', 'change' and 'removal' end ****************/ /***************** 'Entry encryption' start *************************************/ // ------------------------------------------------------------------------------- void CTree::slotEncryptActiveElement() // ------------------------------------------------------------------------------- { Q_ASSERT( TRUE == mModel.isValid() ); if ( !mModel.isValid() ) return; QModelIndex curIndex = currentIndex(); CTreeInformationElement* pActiveTIE = mModel.mapIndexToIE( curIndex ); if ( !pActiveTIE ) { QMessageBox::information( 0, "TuxCards", tr("To use encryption, an entry" " must be selected."), QMessageBox::Abort ); return; } if ( ! CTuxCardsConfiguration::getInstance().askForUsingEncryption() ) return; if ( !pActiveTIE->isEncryptionEnabled() ) { // Passwd needed mPasswdDialog.setUp( pActiveTIE->getDescription() ); //std::cout<<"Entered Passwd: '"<enableEncryption( true, mPasswdDialog.getPasswd() ); } else { //std::cout<<"Passwd is empty - Cancel was pressed."<isCurrentlyEncrypted() ) { //std::cout<<"CTree::slotEncryptActiveElement() - Encrypt the entry."<encrypt(); //mpSingleEntryView->activeInformationElementChanged( pActiveTIE ); currentChanged( currentIndex(), currentIndex() ); // necessary to hide the information of the currently encrypted element slotAdjustEncryptionActions(); } } // ------------------------------------------------------------------------------- void CTree::slotRemoveEncryptionFromActiveEntry() // ------------------------------------------------------------------------------- { Q_ASSERT( TRUE == mModel.isValid() ); if ( !mModel.isValid() ) return; QModelIndex curIndex = currentIndex(); CTreeInformationElement* pActiveTIE = mModel.mapIndexToIE( curIndex ); if ( !pActiveTIE ) { QMessageBox::information( 0, "TuxCards", tr("There is no active entry."), QMessageBox::Abort ); return; } if ( pActiveTIE->isCurrentlyEncrypted() ) { QMessageBox::information( 0, "TuxCards", tr("Entry must be decrypted " "before encryption can be removed."), QMessageBox::Abort ); return; } pActiveTIE->enableEncryption( false, "" ); slotAdjustEncryptionActions(); } // ------------------------------------------------------------------------------- // Enables and disables the "encryption-" and "remove encryption-" actions/buttons. // The state of the buttons is set using the currently active information element. // ------------------------------------------------------------------------------- void CTree::slotAdjustEncryptionActions() // ------------------------------------------------------------------------------- { CTreeInformationElement* pActiveTIE = mModel.mapIndexToIE( currentIndex() ); if ( !pActiveTIE || !mpLockAction || !mpRemoveLockAction ) return; if ( pActiveTIE->isEncryptionEnabled() ) { // if entry is decrypted, then enable 'mpLockAction' // and enable 'mpRemoveLockAction' bool bCurrentlyEncrypted = pActiveTIE->isCurrentlyEncrypted(); mpLockAction->setEnabled( !bCurrentlyEncrypted ); mpRemoveLockAction->setEnabled( !bCurrentlyEncrypted ); } else { mpLockAction->setEnabled( true ); mpRemoveLockAction->setEnabled( false ); } } /***************** 'Entry encryption' end ***************************************/ /***************** 'Entry move up/down' start ***********************************/ // ------------------------------------------------------------------------------- void CTree::slotMoveElementUp() // ------------------------------------------------------------------------------- { mModel.moveEntryOneUp( currentIndex() ); currentChanged( currentIndex(), currentIndex() ); // necessary to move the position of the selection } // ------------------------------------------------------------------------------- void CTree::slotMoveElementDown() // ------------------------------------------------------------------------------- { mModel.moveEntryOneDown( currentIndex() ); currentChanged( currentIndex(), currentIndex() ); // necessary to move the position of the selection } /***************** 'Entry move up/down' end *************************************/ /** * Auxiliary method. Returns the desciption of the currently active item. */ // ------------------------------------------------------------------------------- QString CTree::getDescriptionOfCurrentActiveEntry() const // ------------------------------------------------------------------------------- { QString sDescription(""); QModelIndex curIndex = currentIndex(); if ( curIndex.isValid() ) sDescription = curIndex.data().toString(); return sDescription; } /** * Overwritten method for using different colors within the tree for individual * entries. */ // ------------------------------------------------------------------------------- void CTree::drawRow( QPainter* pPainter, const QStyleOptionViewItem& option, const QModelIndex& index ) const // ------------------------------------------------------------------------------- { CTreeInformationElement* pTIE = mModel.mapIndexToIE( index ); if ( !pTIE ) return; QStyleOptionViewItem op = option; op.palette.setColor( QPalette::Text, pTIE->getDescriptionColor() ); QTreeView::drawRow( pPainter, op, index ); } /** *********************** Drag & Drop - start *********************************/ /*********** The next methods are for Drop **************************************/ // ------------------------------------------------------------------------------- void CTree::dragEnterEvent( QDragEnterEvent* pEvent ) // ------------------------------------------------------------------------------- { //std::cout<<"CTree::dragEnterEvent()"<mimeData()->hasFormat("text/plain") || pEvent->mimeData()->hasFormat(TUXCARDS_DRAGDROP_TYPE) ) ) pEvent->acceptProposedAction(); } // ------------------------------------------------------------------------------- void CTree::dragMoveEvent( QDragMoveEvent* pEvent ) // ------------------------------------------------------------------------------- { //std::cout<<"CTree::dragMoveEvent()"<mimeData()->hasFormat("text/plain") ) { sStatusBarMessage = tr("Create entry below") + " '"; } else if ( pEvent->mimeData()->hasFormat(TUXCARDS_DRAGDROP_TYPE) ) { sStatusBarMessage = tr("Move to") + " '"; } else { // if no supported mime format -> leave return; } // show statusbar message and open the tree element if necessary QModelIndex indexAtDragMovePos = indexAt( pEvent->pos() ); if ( indexAtDragMovePos.isValid() ) { currentChanged( indexAtDragMovePos, indexAtDragMovePos ); // TODO: Why do we have to give both arguments for the method 'currentChanged()'? emit showMessage( sStatusBarMessage + mModel.data( indexAtDragMovePos ).toString() + "'", 1 ); if ( mIndexToBeOpenedAutomaticallyDuringDrag != indexAtDragMovePos ) { mAutoExpandTimer.stop(); mIndexToBeOpenedAutomaticallyDuringDrag = indexAtDragMovePos; mAutoExpandTimer.start( CTREE_AUTO_EXPAND_TIME ); } } else { emit showMessage( "", 1 ); //pEvent->ignore(); mAutoExpandTimer.stop(); mIndexToBeOpenedAutomaticallyDuringDrag = QModelIndex(); // invalidate the 'mIndexToBeOpenedAutomaticallyDuringDrag' } pEvent->acceptProposedAction(); } /** * Overwritten method for accepting drop events. */ // ------------------------------------------------------------------------------- void CTree::dropEvent( QDropEvent* pEvent ) // ------------------------------------------------------------------------------- { //std::cout<<"CTree::dropEvent()"<mimeData()->hasFormat("text/plain") || pEvent->mimeData()->hasFormat(TUXCARDS_DRAGDROP_TYPE) ) { QModelIndex parentIndex = indexAt( pEvent->pos() ); // 'mDraggedIndex' is the index where the drag operation started. if ( (pEvent->source() == this ) && isEntryDroppedOnItself( parentIndex, mDraggedIndex ) ) { // entry is moved on itself or on an own child -> this is no valid action QMessageBox::warning( this, tr("Drag & Drop"), tr("An Entry cannot be moved onto itself or a child."), QMessageBox::Ok ); emit showMessage( tr("Drag & Drop operation not possible."), 5 ); return; } expand( parentIndex ); // Create a new entry below parent. iColumn is // not used and thus set to '-1'. bool bAcceptDrop = mModel.dropMimeData( pEvent->mimeData(), pEvent->dropAction(), mModel.rowCount( currentIndex() ), -1, parentIndex ); if ( !bAcceptDrop ) pEvent->ignore(); } pEvent->acceptProposedAction(); } /** * This method is called whenever the mAutoExpandTimer times out. * It is used to automatically expand an entry during drag&drop. */ // ------------------------------------------------------------------------------- void CTree::slotTimeout() // ------------------------------------------------------------------------------- { mAutoExpandTimer.stop(); if ( !mIndexToBeOpenedAutomaticallyDuringDrag.isValid() ) return; if ( !isExpanded( mIndexToBeOpenedAutomaticallyDuringDrag ) ) expand( mIndexToBeOpenedAutomaticallyDuringDrag ); } /*********** The next methods are for Drag **************************************/ // ------------------------------------------------------------------------------- void CTree::mousePressEvent( QMouseEvent* pEvent ) // ------------------------------------------------------------------------------- { //std::cout<<"CTree::mousePressEvent()"<button() ) { mDragStartPoint = pEvent->pos(); // TODO: Some special cases are still open and might be implemented: // - Currently the drag is started after the manhattan distance was // passed with the pressed mouse button. If one is very close to // the border of another entry and start a drag, then this other // entry will be dragged. (Sources can be found in the previous // implementation.) // - A drag started from the "item's decoration" (i.e. from the // "plus/minus-sign" for expanding/closing the entry) will happen // this should be prohibited. (Sources can be found in the previous // implementation.) // - The root entry itself should not be dragable. It is possible to // start a drag there (nevertheless it not allowed after releasing // the mouse button). } QTreeView::mousePressEvent( pEvent ); } // ------------------------------------------------------------------------------- void CTree::mouseMoveEvent( QMouseEvent* pEvent ) // ------------------------------------------------------------------------------- { //std::cout<<"CTree::mouseMoveEvent()"<buttons() & Qt::LeftButton ) { int iDistance = (mDragStartPoint - pEvent->pos()).manhattanLength(); if ( iDistance > QApplication::startDragDistance() ) startDrag(); } QTreeView::mouseMoveEvent( pEvent ); } // ------------------------------------------------------------------------------- void CTree::startDrag() // ------------------------------------------------------------------------------- { if ( !mModel.isValid() ) return; QModelIndex curIndex = currentIndex(); if ( !curIndex.isValid() ) return; mDraggedIndex = curIndex; // needed to check whether an entry is dropped on itself or a child QModelIndexList list; list.append( curIndex ); QMimeData* pMimeData = mModel.mimeData( list ); QDrag* pDrag = new QDrag( this ); pDrag->setMimeData( pMimeData ); //TODO: dragObject->setPixmap(QPixmap(picture_xpm),QPoint(8,8)); //std::cout<<"start drag..."<exec(Qt::CopyAction | Qt::MoveAction) ) { mModel.removeRow( curIndex.row(), mModel.parent(curIndex) ); //std::cout<<"... moveAction -> old entry is deleted"<dropIndex is the index where the drag&drop operation ended (i.e. * where the dragged entry should be dropped on). * * draggedIndexOrChild is the entry that is dragged (i.e. where the * drag operation started). * * Returns true if it is dropped on itself. Otherwise false. */ // ------------------------------------------------------------------------------- bool CTree::isEntryDroppedOnItself( const QModelIndex& dropIndex, const QModelIndex& draggedIndexOrChild ) const // ------------------------------------------------------------------------------- { //std::cout<<"CTree::isEntryDroppedOnItself() - test '"<data(dropIndex).toString().toStdString()<<"' " // <<"against '"<data(mDraggedIndexOrChild).toString().toStdString()<<"'"< #include "../informationExt/CCollectionModel.h" #include "../information/CInformationElementHistory.h" #include class QToolBar; #include "./dialogs/passwdDialog/CPasswdDialog.h" class CTree : public QTreeView, public IHistoryListener { Q_OBJECT public: CTree( QWidget* pParent = 0 ); void setCollection( CInformationCollection& collection ); void clearCollection(); CCollectionModel& getModel(); void addActionsToToolBar( QToolBar& toolBar ); // ************* IHistoryListener ****************** virtual void historyStatusChanged( bool bHasPreviousElement, bool bHasNextElement ); public slots: void addElement(); void changeActiveElementProperties(); void askForElementDeletionAndDeleteIt(); void slotMoveElementUp(); void slotMoveElementDown(); signals: void setActiveIEViaHistory( CInformationElement* pIE ); void showMessage( QString sMessage, int iSeconds ); protected: void currentChanged( const QModelIndex& current, const QModelIndex& previous ); virtual void drawRow( QPainter* pPainter, const QStyleOptionViewItem& option, const QModelIndex& index ) const; // Drag & Drop virtual void dragEnterEvent( QDragEnterEvent* pEvent ); virtual void dragMoveEvent(QDragMoveEvent* pEvent); virtual void dropEvent( QDropEvent* pEvent ); virtual void mousePressEvent( QMouseEvent* pEvent ); virtual void mouseMoveEvent( QMouseEvent* pEvent ); private: enum eConnectionState { CONNECT, DISCONNECT }; void connectTreeSignalsToSlots( const eConnectionState val ); void setInitialExpandStateForTreeElements( const QModelIndex& parentIndex ); void initModel(); void selectLastActiveElement( CInformationCollection& collection ); QString getDescriptionOfCurrentActiveEntry() const; CCollectionModel mModel; // entry actions QAction* mpAddElementAction; QAction* mpChangeElementPropertyAction; QAction* mpRemoveElementAction; QAction* mpLockAction; QAction* mpRemoveLockAction; QAction* mpIEMoveUpAction; QAction* mpIEMoveDownAction; // history CInformationElementHistory mHistory; QAction* mpHistoryPrevAction; QAction* mpHistoryNextAction; void settingUpActions(); void settingUpContextMenu(); // Drag & Drop QModelIndex mIndexToBeOpenedAutomaticallyDuringDrag; QTimer mAutoExpandTimer; QPoint mDragStartPoint; void startDrag(); QModelIndex mDraggedIndex; // index that is dragged bool isEntryDroppedOnItself( const QModelIndex& dropIndex, const QModelIndex& draggedIndexOrChild ) const; // Passwd dialog for encryption CPasswdDialog mPasswdDialog; private slots: void slotModelDataChanged( const QModelIndex& index ); void slotTreeItemCollapsed( const QModelIndex& index ); void slotTreeItemExpanded( const QModelIndex& index ); void activeInformationElementChanged( CInformationElement* ); void slotPropertyDialogSuccessfullyClosed(); void slotEncryptActiveElement(); void slotRemoveEncryptionFromActiveEntry(); void slotAdjustEncryptionActions(); void slotActivatePreviousHistoryElement(); void slotActivateNextHistoryElement(); void slotTimeout(); }; #endif tuxcards/src/gui/CTreeElement.cpp000444 000765 000024 00000021645 11420350116 017401 0ustar00alexstaff000000 000000 /*************************************************************************** treeelement.cpp - description ------------------- begin : Fri Jul 19 2002 copyright : (C) 2002 by Alexander Theel email : alex.theel@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #include #include "CTreeElement.h" #include "./dialogs/searchDialog/searchlistitem.h" #include "../global.h" //Added by qt3to4: #include /** * creates a treeElement from the treeInformatoinElement and * adds it to 'parent' */ // ------------------------------------------------------------------------------- CTreeElement::CTreeElement( QTreeWidget* pParent, CTreeInformationElement& element ) : QTreeWidgetItem( pParent ) , mpInformationElement( NULLPTR ) // ------------------------------------------------------------------------------- { setText( 0, element.getDescription() ); init(element); } /** * creates a treeElement from the treeInformatoinElement and * adds it to 'parent' */ // ------------------------------------------------------------------------------- CTreeElement::CTreeElement( CTreeElement* pParent, CTreeInformationElement& element ) : QTreeWidgetItem(pParent, pParent->getLastChild()) , mpInformationElement( NULLPTR ) // ------------------------------------------------------------------------------- { setText( 0, element.getDescription() ); init(element); } // ------------------------------------------------------------------------------- CTreeElement::~CTreeElement( void ) // ------------------------------------------------------------------------------- { mpInformationElement = NULLPTR; } // ------------------------------------------------------------------------------- void CTreeElement::init( CTreeInformationElement& element ) // ------------------------------------------------------------------------------- { mpInformationElement = &element; copyPropertiesFromInformationElement(); connect( &element, SIGNAL(propertyChanged()), this, SLOT(propertyChangeEvent()) ); connect( &element, SIGNAL(childAdded(CInformationElement*)), this, SLOT(childAddEvent(CInformationElement*)) ); connect( &element, SIGNAL(childMoved(int, int)), this, SLOT(childMovedEvent(int, int)) ); // setRenameEnabled(0, TRUE); } /** * Returns the last child of this element. Utility-method needed to * place the elements in correct order. */ // ------------------------------------------------------------------------------- CTreeElement* CTreeElement::getLastChild( void ) // ------------------------------------------------------------------------------- { return (CTreeElement*) child( childCount() - 1 ); } // ------------------------------------------------------------------------------- CTreeInformationElement* CTreeElement::getInformationElement( void ) // ------------------------------------------------------------------------------- { return mpInformationElement; } /** * This slot is called if an attribut of the informationelement * belonging to this object was changed. */ // ------------------------------------------------------------------------------- void CTreeElement::propertyChangeEvent( void ) // ------------------------------------------------------------------------------- { //cout<<"CTreeElement::propertyChangeEvent()"<getDescription() ); setIcon( 0, QPixmap(mpInformationElement->getIconFileName()) ); if ( treeWidget() ) treeWidget()->setItemExpanded( this, mpInformationElement->isOpen() ); } /** * This method is called whenever a child is added within the "data-model" * to the equivalent of this treeElement. */ // ------------------------------------------------------------------------------- void CTreeElement::childAddEvent( CInformationElement* pChild ) // ------------------------------------------------------------------------------- { //cout<<"CTreeElement::childAddEvent()"<* pList = pChild->getChildren(); if ( !pList ) return; CInformationElement* pX = NULLPTR; for ( int i = 0; i < pList->count(); i++ ) { pX = pList->at( i ); if ( pX ) pNewElement->childAddEvent(pX); } } /** * This slot is called, whenever one of the element's children * has been moved upwards or downwards. */ // ------------------------------------------------------------------------------- void CTreeElement::childMovedEvent( int oldPos, int newPos ) // ------------------------------------------------------------------------------- { /* if ( oldPos == newPos ) return; CTreeElement* pElementToMove = getChildAtPosition(oldPos); if ( NULLPTR == pElementToMove ) return; QTreeWidgetItem* pTmp = getChildAtPosition(newPos); if ( NULLPTR == pTmp ) return; if ( newPos < oldPos ) { // moving upwards if ( (newPos - 1) >= 0 ) { pTmp = getChildAtPosition(newPos-1); pElementToMove->moveItem(pTmp); } else { // insert temporary dummy element QTreeWidgetItem* pDummy = new QTreeWidgetItem(this); pDummy->setText(0, "pDummy"); pTmp = pDummy; pElementToMove->moveItem(pTmp); DELETE( pDummy ); } } else { // moving downwards pElementToMove->moveItem(pTmp); } */ } /** * Returns the child position at 'pos'. If it does not exist * 0 is returned. */ // ------------------------------------------------------------------------------- CTreeElement* CTreeElement::getChildAtPosition( int pos ) // ------------------------------------------------------------------------------- { return dynamic_cast( child( pos ) ); } /** * returns true if this Knoten or one of its children * is selected right now */ // ------------------------------------------------------------------------------- bool CTreeElement::isChildOrSelfSelected( void ) // ------------------------------------------------------------------------------- { if ( treeWidget() && treeWidget()->isItemSelected(this) ) return true; CTreeElement* pElem = NULLPTR; for ( int i = 0; i < childCount(); i++ ) { pElem = dynamic_cast( child( i ) ); if ( pElem ) { if ( pElem->isChildOrSelfSelected() ) return true; } } return false; } /** * find the specified 'QString pattern' within the text/information of the * appropriate 'CInformationElement' (evtl. recursive) and append the found * "places" as 'SearchListItem's at the list's end. */ // ------------------------------------------------------------------------------- void CTreeElement::search( QString pattern, bool recursive, Qt::CaseSensitivity eCaseSensitive, QTreeWidget& list ) // ------------------------------------------------------------------------------- { if ( NULLPTR == mpInformationElement ) return; mpInformationElement->search(pattern, recursive, eCaseSensitive, list); } /** * Returns the first child whose "name"/text(0) equals * 'name'. If it does not exist return 0. (searches within direct children * only) */ // ------------------------------------------------------------------------------- CTreeElement* CTreeElement::findChildWithName( QString name ) // ------------------------------------------------------------------------------- { QTreeWidgetItem* pX = NULLPTR; for ( int i = 0; i < childCount(); i++ ) { pX = child(i); if ( pX ) { //std::cout<<"***TE::search through "<text(0)<text(0) == name ) return (CTreeElement*)pX; } } return NULLPTR; } tuxcards/src/gui/CTreeElement.h000444 000765 000024 00000004356 11420350116 017046 0ustar00alexstaff000000 000000 /*************************************************************************** CTreeElement.h - description ------------------- begin : Fri Jul 19 2002 copyright : (C) 2002 by Alexander Theel email : alex.theel@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #ifndef CTREE_ELEMENT_H #define CTREE_ELEMENT_H #include #include #include "../information/CTreeInformationElement.h" #include "../information/Path.h" class CTreeElement : public QObject, public QTreeWidgetItem{ Q_OBJECT public: CTreeElement( QTreeWidget* pParent, CTreeInformationElement& element ); CTreeElement( CTreeElement* pParent, CTreeInformationElement& element ); ~CTreeElement( void ); void init( CTreeInformationElement& element ); CTreeElement* getChildAtPosition( int pos ); CTreeInformationElement* getInformationElement( void ); bool isChildOrSelfSelected( void ); void search( QString pattern, bool recursive, Qt::CaseSensitivity eCaseSensitive, QTreeWidget& list ); CTreeElement* findChildWithName( QString name ); public slots: // slot which is called from a "mediator" void propertyChangeEvent( void ); void childAddEvent( CInformationElement* pChild ); void childMovedEvent( int oldPos, int newPos ); protected: CTreeElement* getLastChild( void ); private: CTreeInformationElement* mpInformationElement; void copyPropertiesFromInformationElement( void ); }; #endif tuxcards/src/gui/dialogs/000755 000765 000024 00000000000 11420350116 015775 5ustar00alexstaff000000 000000 tuxcards/src/gui/editor/000755 000765 000024 00000000000 11420350116 015641 5ustar00alexstaff000000 000000 tuxcards/src/gui/recentFileList/000755 000765 000024 00000000000 11420350116 017267 5ustar00alexstaff000000 000000 tuxcards/src/gui/WhatsThis.h000444 000765 000024 00000026375 11420350116 016455 0ustar00alexstaff000000 000000 /*************************************************************************** WhatsThis.h - description ------------------- begin : Sun Aug 05 2007 copyright : (C) 2007 by Alexander Theel email : alex.theel@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #ifndef WHATS_THIS_H #define WHATS_THIS_H /** ********************** WhatsThis texts for file actions ****************/ // Q3WhatsThis::whatsThisButton(mpMainTools); // // // Q3MimeSourceFactory::defaultFactory()->setPixmap("filenew", getIcon("filenew")); // Q3WhatsThis::add(clearTool,"" // "Clear whole Tree

    " // "Click this button to remove all entries from " // "the tree."); // Q3MimeSourceFactory::defaultFactory()->setPixmap("fileopen", getIcon("fileopen")); // Q3WhatsThis::add(openTool, "Open a new File

    " // "Click this button to open a new data file. " // "You can also select the Open command " // "from the File menu."); // Q3MimeSourceFactory::defaultFactory()->setPixmap("filesave", getIcon("filesave")); // Q3WhatsThis::add(saveTool, "Save Data to File (Ctrl+S)

    " // "Click this button to save all data to disk. " // "If this is a new file, you will be prompted " // "for a file name."); // Q3MimeSourceFactory::defaultFactory()->setPixmap("fileprint", getIcon("fileprint")); // Q3WhatsThis::add(printTool, " Print current Entry

    " // "Click this button to print the currently active " // "entry.

    " // "Please note: Only RTF-notes can be printed correctly. " // "When printing an plain text note white spaces are " // "ignored "); /** ********************** WhatsThis texts for tree actions ****************/ // Q3MimeSourceFactory::defaultFactory()->setPixmap("addTreeElement", getIcon("addTreeElement")); // Q3WhatsThis::add(mpAddElementAction, "Add Entry (INSERT)

    " // "You can add further child-entries using this " // "button. The same function is available through " // "the context menu (right click on an item).

    " // "Clicking this button will open a dialog which " // "prompts you for a name of the new entry."); // Q3MimeSourceFactory::defaultFactory()->setPixmap("changeProp", getIcon("changeProperty")); // Q3WhatsThis::add(mpChangeElementPropertyAction, "Change Property

    " // "Clicking this button, a dialog will appear. There, " // "you may enter a new name and select another icon " // "for the currently active entry.

    " // "You can also use the context menu (right click on " // "an item) to call this function."); // Q3MimeSourceFactory::defaultFactory()->setPixmap("delete", getIcon("delete")); // Q3WhatsThis::add(mpRemoveElementAction, "Remove active Entry (DELETE)

    " // "This will remove the currently active entry and " // "all child-entries from the tree.

    " // "You can also use the context menu (right click on " // "an item) for this function."); // Q3MimeSourceFactory::defaultFactory()->setPixmap("lock", getIcon("lock")); // Q3WhatsThis::add(mpLockButton, "Encrypt active Entry

    " // "Encryptes the currently active entry.

    " // "If it was not encrypted yet a dialog for " // "entering a password will open." ); // Q3MimeSourceFactory::defaultFactory()->setPixmap("unlock", getIcon("unlock")); // Q3WhatsThis::add(mpRemoveLockButton, "Remove Encryption

    " // "Removes encryption from active entry.

    " // "For security reasons, this action can only be " // "done if the entry is decrypted." ); // Q3MimeSourceFactory::defaultFactory()->setPixmap("upArrow", getIcon("upArrow")); // Q3WhatsThis::add(ieUpTool, "Move Up

    " // "Moves the currently active entry one position upwards " // "within the tree.

    " // "The entry is moved with all of its children."); // Q3MimeSourceFactory::defaultFactory()->setPixmap("downArrow", getIcon("downArrow")); // Q3WhatsThis::add(ieDownTool, " Move Down

    " // "Moves the currently active entry " // "one position downwards within the tree.

    " // "The entry is moved with all of its children."); // // Q3MimeSourceFactory::defaultFactory()->setPixmap("historyBack", getIcon("back")); // Q3WhatsThis::add(mpHistoryPrevAction, "History, Back (Alt+Left)

    " // "History function. If this button is clicked, then the " // "last active entry is selected.

    " // "This is similar to the back button within your " // "browser." ); // Q3MimeSourceFactory::defaultFactory()->setPixmap("historyForward", getIcon("forward")); // Q3WhatsThis::add(mpHistoryNextAction, "History, Forward (Alt+Right)

    " // "History function. If this button is clicked, then the " // "next entry is selected.

    " // "This is similar to the forward button within your " // "browser." ); // Q3MimeSourceFactory::defaultFactory()->setPixmap("find", getIcon("find")); // Q3WhatsThis::add(findTool, "Search (Ctrl+F)

    " // "Use this button, if you want to search for words " // "within your data."); // // // Q3WhatsThis::add(textFormatTool, "This button shows you the text format (ASCII / RTF) " // "of the currently active entry. It does also let " // "you convert between the two formats.

    " // "Usually, you do not need to worry about " // "converting text formats."); // /** ********************** WhatsThis texts for editor actions **************/ /** Part 1*/ // Q3MimeSourceFactory::defaultFactory()->setPixmap("undo", getIcon("undo")); // mpEditUndoAction->setWhatsThis("Undo (Ctrl+Z)

    " // "This button undoes changes made within the editor."); // Q3MimeSourceFactory::defaultFactory()->setPixmap("redo", getIcon("redo")); // mpEditRedoAction->setWhatsThis("Redo (Ctrl+Y)

    " // "This button provides redo functionality for the editor."); // Q3MimeSourceFactory::defaultFactory()->setPixmap("editcut", getIcon("editcut")); // Q3WhatsThis::add(editCutTool, "Cut (Ctrl+X)

    " // "Cut text within the editor."); // Q3MimeSourceFactory::defaultFactory()->setPixmap("editcopy", getIcon("editcopy")); // mpEditCopyAction->setWhatsThis("Copy (Ctrl+C)

    " // "Copy text within the editor."); // Q3MimeSourceFactory::defaultFactory()->setPixmap("editpaste", getIcon("editpaste")); // Q3WhatsThis::add(editPasteTool, "Paste (Ctrl+V)

    " // "Paste text within the editor."); /** Part 2*/ // Q3MimeSourceFactory::defaultFactory()->setPixmap("textBold", getIcon("text_bold")); // Q3WhatsThis::add(textBoldTool, "Bold

    " // "Use this button, if you want to use bold text."); // Q3MimeSourceFactory::defaultFactory()->setPixmap("textItalic", getIcon("text_italic")); // Q3WhatsThis::add(textItalicTool, "Italic

    " // "Use this button, if you want to use italic text."); // Q3MimeSourceFactory::defaultFactory()->setPixmap("textUnder", getIcon("text_under")); // Q3WhatsThis::add(textUnderTool, "Underline

    " // "Use this button, if you want to use underlined text."); // Q3MimeSourceFactory::defaultFactory()->setPixmap("textColor", getIcon("text_color")); // Q3WhatsThis::add(mpEditColorAction, "Text Color

    " // "Changes the color of the selected text."); // Q3MimeSourceFactory::defaultFactory()->setPixmap("alignLeft", getIcon("text_left")); // Q3WhatsThis::add(mpEditTextLeftAction, "Align Left

    " // "Aligns the currently edited paragraph on the left side."); // Q3MimeSourceFactory::defaultFactory()->setPixmap("alignCenter", getIcon("text_center")); // Q3WhatsThis::add(mpEditTextCenterAction, "Center

    " // "Centers the currently edited paragraph within the editor."); // Q3MimeSourceFactory::defaultFactory()->setPixmap("alignRight", getIcon("text_left")); // Q3WhatsThis::add(mpEditTextRightAction, "Align Right

    " // "Aligns the currently edited paragraph on the right side."); // Q3MimeSourceFactory::defaultFactory()->setPixmap("alignBlock", getIcon("text_block")); // Q3WhatsThis::add(mpEditTextBlockAction, "Text Block

    ") // // + "vorher: Text [" // // + toHtml() // // + "
    ]" // // , "Ok" ); // // } // // else // // { // // QMessageBox::information( this, "Debugging", QString("Plaintext

    ") // // + "vorher: Text [" // // + toPlainText() // // + "
    ]" // // , "Ok" ); // // } if ( mbUseRichText ) mpActiveElement->setInformation(toHtml()); else mpActiveElement->setInformation(toPlainText()); // // std::cout<<"nachher: mpActiveElement="<getDescription().toStdString()<<"\n" // // <<" Text ["<")<setValue(verticalScrollBarPosition); // horizontalScrollBar()->setValue(horizontalScrollBarPosition); } // ------------------------------------------------------------------------------- void CEditor::setLineWrap( int iLineWrap ) // ------------------------------------------------------------------------------- { if ( 0 == iLineWrap ) QTextEdit::setLineWrapMode( QTextEdit::NoWrap ); else if( 1 == iLineWrap ) QTextEdit::setLineWrapMode( QTextEdit::WidgetWidth ); else { QTextEdit::setLineWrapMode( QTextEdit::FixedColumnWidth ); QTextEdit::setLineWrapColumnOrWidth( iLineWrap ); } } /** * Ignores the key combinations we need within 'mainwindow'. */ // ------------------------------------------------------------------------------- void CEditor::keyPressEvent( QKeyEvent* pKeyEv ) // ------------------------------------------------------------------------------- { if ( !pKeyEv ) return; // //std::cout<<"key = "<key(); // // // If // // CTRL + S (save) or // // ALT + left cursor (history one back / previous entry) or // // ALT + right cursor (history one forward / next entry) // // CTRL + F (shortcut for "Searching") // // is called, then ignore it. // if( ( (pKeyEv->modifiers() == Qt::ControlModifier) && (pKeyEv->key() == Qt::Key_S) ) || // ( (pKeyEv->modifiers() == Qt::AltModifier) && (pKeyEv->key() == Qt::Key_Left) ) || // ( (pKeyEv->modifiers() == Qt::AltModifier) && (pKeyEv->key() == Qt::Key_Right) ) || // ( (Qt::ControlModifier == pKeyEv->modifiers()) && (Qt::Key_F == pKeyEv->key()) ) ) // { // //std::cout<<" -> ignore"<ignore(); // } // // // if the shift button is down while pressing return or enter, insert a new paragraph // else if ( ( (Qt::ShiftModifier == pKeyEv->modifiers()) || (Qt::ControlModifier == pKeyEv->modifiers()) ) // && // ( (Qt::Key_Return == pKeyEv->key()) || (Qt::Key_Enter == pKeyEv->key()) ) // ) // { // if ( LINEBREAK_WITHOUT_CTRL_SHIFT == meLinebreakMode ) // { // //std::cout<<" -> shift/ctrl + enter/return"<type(), Qt::Key_Return, // Qt::NoModifier, pKeyEv->text() ) ); // } // else // { // QTextEdit::keyPressEvent( pKeyEv ); // } // } // // // if a simple return or enter is pressed, do not insert a new paragraph // else if ( (Qt::Key_Return == pKeyEv->key()) || (Qt::Key_Enter == pKeyEv->key()) ) // { // if ( LINEBREAK_WITHOUT_CTRL_SHIFT == meLinebreakMode ) // { // //std::cout<<" -> simple enter/return"<type(), Qt::Key_Return, // Qt::ControlModifier, pKeyEv->text() ) ); // } // else // { // QTextEdit::keyPressEvent( pKeyEv ); // } // } // /*else if ( (pKeyEv->state() == Qt::ShiftModifier) && (pKeyEv->key() == Qt::Key_Return) ) // { // QTextEdit::keyPressEvent( new QKeyEvent( pKeyEv->type(), Qt::Key_Enter, // pKeyEv->ascii(), ControlButton ) ); // } // */ // // // CTRL + A -> select all // else if ( (Qt::ControlModifier == pKeyEv->modifiers()) && (Qt::Key_A == pKeyEv->key()) ) // { // selectAll(); // } // // else { // otherwise call the super-method //std::cout<setPixmap("newImg", QPixmap("/home/alex/aufgehoben/bilder/alex.gif")); setText( " Hier ist ein Bild ." ); return; */ if ( !pElement ) return; //std::cout<<"CEditor::activeInformationElementChanged() " // <<"new Element: "<getDescription().toStdString()<setInformationYPos( ((QAbstractSlider*)verticalScrollBar())->sliderPosition() ); } if ( pElement->getInformationFormat() == InformationFormat::getByString("RTF") ) { emit formatRecognized( *InformationFormat::getByString("RTF") ); mbUseRichText = true; // setTextFormat( Qt::RichText ); } else if ( pElement->getInformationFormat() == InformationFormat::getByString("ASCII") ) { emit formatRecognized( *InformationFormat::getByString("ASCII") ); mbUseRichText = false; // setTextFormat( Qt::PlainText ); } else { // This should not happen. An informationFormat should always be != NONE. Q_ASSERT( FALSE ); } setAcceptRichText( mbUseRichText ); setText( pElement->getInformation() ); verticalScrollBar()->setSliderPosition( pElement->getInformationYPos() ); mpActiveElement = pElement; connect( mpActiveElement, SIGNAL(informationHasChanged()), this, SLOT(rereadInformation()) ); } /** * Use the information about a newly inserted information element in order to * set the focus for the editor. * This enables the user to start writing text right after the new information * element is available. */ // ------------------------------------------------------------------------------- void CEditor::slotNewInformationElementAdded() // ------------------------------------------------------------------------------- { //std::cout << "CEditor::slotNewInformationElementAdded()" << std::endl; // Set font for all new entries (this is only necessary for RTF-texts // (= setting of default font), but it does not harm for ASCII-texts. // (It is not necessary for ASCII-texts, because they get the font set // anyway within method 'CEditor::setText()'.) setCurrentFont( mEditorFont ); // switch focus to the editor, so that editing can be started right away setFocus(); } // ------------------------------------------------------------------------------- // If a new entry ('pNewIE') is selected and if autoencryption is turned on, the // currently active entry ('pActiveIE') is encrypted. // // The element 'pNewIE' is the new selected one. It is needed for comparision with // the active one. If both are the same elements nothing is done within this // method. // // ------------------------------------------------------------------------------- // void CEditor::autoEncryptActiveInformationElement( CInformationElement* pActiveIE, // CInformationElement* pNewIE ) // // ------------------------------------------------------------------------------- // { // if ( !pActiveIE || !pNewIE ) // return; // // if ( pActiveIE == pNewIE ) // return; // // //std::cout<<"autoencrypt .. "; // if ( CTuxCardsConfiguration::getInstance().getBoolValue( CTuxCardsConfiguration::B_AUTOENCRYPT_ENTRY ) ) // { // if ( pActiveIE->isEncryptionEnabled() ) // { // if ( !pActiveIE->isCurrentlyEncrypted() ) // { // //std::cout<<"(encrypt) .. "; // pActiveIE->encrypt(); // } // } // } // //std::cout<<"done."<getInformation().count( "
    " ); // } // // ------------------------------------------------------------------------------- // void CEditor::setLinebreakMode( eLinebreakMode eMode ) // // ------------------------------------------------------------------------------- // { // meLinebreakMode = eMode; // } /** * Override the regular copy() methode, so that an enter within * a richtext element (separating paragraphs) is represented by * two \n. */ /*void CEditor::copy(){ if ( textFormat() == Qt::PlainText ) { QTextEdit::copy(); return; } QString text = selectedText();//mpActiveElement->getInformation(); text = text.replace(QRegExp("\n"), "\n\n"); QClipboard *cb = QApplication::clipboard(); cb->setText( text ); } */ /** * Override the regular paste() methode, so that lines are * not separated by each other with an blank line. */ // // ------------------------------------------------------------------------------- // void CEditor::paste() // // ------------------------------------------------------------------------------- // { // //std::cout<<"CEditor::paste()"<text(); // // if (text) // { // // do not create new paragraphs // text = text.replace(QRegExp("\n"), QChar( 0x2028)); // insert( text, false, false); // } // } // else // { // std::cout<<"\tPlaintext detected"<mimeData(mode)->hasFormat("application/x-qrichtext")) ) // { // QString text = pCb->text(mode); // // if ( !text.isEmpty() ) // { // // do not create new paragraphs // text = text.replace(QRegExp("\n"), QString( QChar( 0x2028) ) ); // pCb->setText( text, mode ); // } // } // } /** * This method is used for inserting images into the current edited text. */ // ------------------------------------------------------------------------------- void CEditor::insertImage() // ------------------------------------------------------------------------------- { //std::cout<<"CEditor::insertImage()"<document(); pDocument->addResource( QTextDocument::ImageResource, QUrl(sImageLocation), image ); QTextCursor cursor = this->textCursor(); cursor.insertImage( sImageLocation ); } tuxcards/src/gui/editor/CEditor.h000555 000765 000024 00000007610 11420350116 017350 0ustar00alexstaff000000 000000 /*************************************************************************** CEditor.h - description ------------------- begin : Sun Mar 26 2000 copyright : (C) 2000 by Alexander Theel email : alex.theel@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #ifndef EDITOR_H #define EDITOR_H #include "../../global.h" #include "./../../information/IView.h" #include #include #include #include "./../../information/CInformationElement.h" #include /** * Using LINEBREAK_WITH_CTRL_SHIFT a single line break is * done by holding down the Ctrl or Shift key and pressing Enter/Return. * In this mode a paragraph is created with Enter/Return. * * Using LINEBREAK_WITHOUT_CTRL_SHIFT it is vice versa. * I.e. a single linebreak is done with Enter/Return. A new paragraph is * done by holding down the Ctrl or Shift key and pressing Enter/Return. */ enum eLinebreakMode { LINEBREAK_WITH_CTRL_SHIFT, LINEBREAK_WITHOUT_CTRL_SHIFT }; class CEditor : public QTextEdit, public IView { Q_OBJECT public: CEditor( QWidget *pParent = NULLPTR ); virtual ~CEditor( void ); QString getText( void ); virtual void setText( const QString& sText ); void clear( void ); void setEditorFont( const QFont& f ); void setLineWrap( int iLineWrap ); // void setLinebreakMode( eLinebreakMode eMode ); void writeCurrentTextToActiveInformationElement( void ); // int countBRs( void ); // ************** IView ************************************* virtual void aboutToRemoveElement( CInformationElement* pIE ); // ************** IView - End ******************************* signals: void formatRecognized( InformationFormat ); void currentHAlignmentChanged( Qt::Alignment ); public slots: void toggleFontBold(); void activeInformationElementChanged( CInformationElement* ); void slotNewInformationElementAdded(); //void copy(); // virtual void paste(); void insertImage(); private slots: void checkAlignment(); // void sendUndoAvailableSignal( void ); // void sendRedoAvailableSignal( void ); // void rereadInformation(); protected: void initialize( void ); virtual void keyPressEvent( QKeyEvent* pKeyEv ); CInformationElement* mpActiveElement; private: // void printBRs( void ); // void adaptClipboardText( QClipboard::Mode mode ); bool SEMAPHORE_TEXT_WAS_SET; // eLinebreakMode meLinebreakMode; // void autoEncryptActiveInformationElement( CInformationElement* pActiveIE, // CInformationElement* pNewIE ); bool mbUseRichText; QFont mEditorFont; // font used for ASCII text and as default for RTF text }; #endif tuxcards/src/gui/editor/CEncryptedEntryView.cpp000444 000765 000024 00000011641 11420350116 022263 0ustar00alexstaff000000 000000 /*************************************************************************** CEncryptedEntryView.cpp - description ------------------- begin : Fri Jan 09 2004 copyright : (C) 2004 by Alexander Theel email : alex.theel@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #include "../../global.h" #include "CEncryptedEntryView.h" #include "./../../information/CInformationElement.h" #include #include #include #include #include #include // ------------------------------------------------------------------------------- CEncryptedEntryView::CEncryptedEntryView( QWidget* pParent ) : QWidget( pParent ) , mpPasswdLine( NULLPTR ) , mpResultLabel( NULLPTR ) , mpActiveElement( NULLPTR ) // ------------------------------------------------------------------------------- { QVBoxLayout* pLayout = new QVBoxLayout( this ); pLayout->setMargin( 10 ); pLayout->setSpacing( 5 ); QLabel* pLabel = new QLabel( this ); mpPasswdLine = new QLineEdit( this ); mpResultLabel = new QLabel( this ); QHBoxLayout* pMiniLayout = new QHBoxLayout( ); if ( (NULLPTR == pLayout) || (NULLPTR == pLabel) || (NULLPTR == mpPasswdLine) || (NULLPTR == mpResultLabel) || (NULLPTR == pMiniLayout) ) { std::cout<<"Constructor 'CEncryptedEntryView': ERROR not enough memory " <<" to create objects!!!"<addWidget( mpPasswdLine ); pLayout->addStretch(); pLayout->addWidget( pLabel ); pLayout->addLayout( pMiniLayout ); pLayout->addWidget( mpResultLabel ); pLayout->addStretch(); pLayout->addStretch(); pLayout->addStretch(); pLabel->setText( "

    " "" + tr("Encrypted Entry") + "
    " "" + tr("To view entry content enter password below and " "press RETURN.") + "" "
    "); mpPasswdLine->setEchoMode( QLineEdit::Password ); mpPasswdLine->setMaximumWidth( 200 ); mpResultLabel->setText(" "); connect( mpPasswdLine, SIGNAL(returnPressed()), this, SLOT(slotPasswdEntered()) ); } // ------------------------------------------------------------------------------- CEncryptedEntryView::~CEncryptedEntryView() // ------------------------------------------------------------------------------- { // mpInformationElement = NULLPTR; } // ************** IView ********************************************************* // ------------------------------------------------------------------------------- void CEncryptedEntryView::aboutToRemoveElement( CInformationElement* pIE ) // ------------------------------------------------------------------------------- { if ( mpActiveElement == pIE ) { mpActiveElement = NULLPTR; } } // ************** IView - End **************************************************** // ------------------------------------------------------------------------------- void CEncryptedEntryView::activeInformationElementChanged( CInformationElement* pIE ) // ------------------------------------------------------------------------------- { if ( NULLPTR == pIE ) return; if ( (NULLPTR == mpPasswdLine) || (NULLPTR == mpResultLabel) ) return; mpPasswdLine->setText(""); mpPasswdLine->setFocus(); mpResultLabel->setText(""); mpActiveElement = pIE; } // ------------------------------------------------------------------------------- void CEncryptedEntryView::slotPasswdEntered() // ------------------------------------------------------------------------------- { if ( (NULLPTR == mpPasswdLine) || (NULLPTR == mpResultLabel) ) return; if ( NULLPTR == mpActiveElement ) return; // testing passwd if ( 0 == mpPasswdLine->text().trimmed().length() ) return; bool bCorrectPasswd = mpActiveElement->decrypt( mpPasswdLine->text().trimmed() ); if ( !bCorrectPasswd ) { mpPasswdLine->setText( "" ); mpResultLabel->setText( "
    " + tr("Wrong Passwd. Try again.") + "
    " ); } else { // every thing is alright mpResultLabel->setText( " " ); emit signalEntryDecrypted(); } } tuxcards/src/gui/editor/CEncryptedEntryView.h000444 000765 000024 00000003647 11420350116 021737 0ustar00alexstaff000000 000000 /*************************************************************************** CEncryptedEntryView.h - description ------------------- begin : Fri Jan 09 2004 copyright : (C) 2004 by Alexander Theel email : alex.theel@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #ifndef CENCRYPTED_ENTRY_VIEW_H #define CENCRYPTED_ENTRY_VIEW_H #include "../../global.h" #include "./../../information/IView.h" #include class QLabel; class QLineEdit; class CEncryptedEntryView : public QWidget, public IView { Q_OBJECT public: CEncryptedEntryView( QWidget* pParent = NULLPTR ); ~CEncryptedEntryView(); // ************** IView ************************************* virtual void aboutToRemoveElement( CInformationElement* pIE ); // ************** IView - End ******************************* void activeInformationElementChanged( CInformationElement* pIE ); signals: void signalEntryDecrypted(); private: QLineEdit* mpPasswdLine; QLabel* mpResultLabel; CInformationElement* mpActiveElement; private slots: void slotPasswdEntered(); }; #endif tuxcards/src/gui/editor/CSingleEntryView.cpp000444 000765 000024 00000012322 11420350116 021544 0ustar00alexstaff000000 000000 /*************************************************************************** CSingleEntryView.cpp - description ------------------- begin : Fri Jan 09 2004 copyright : (C) 2004 by Alexander Theel email : alex.theel@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #include "CSingleEntryView.h" #include #include "./CEncryptedEntryView.h" // ------------------------------------------------------------------------------- CSingleEntryView::CSingleEntryView( QWidget* pParent ) : QStackedWidget( pParent ) , mpActiveElement( NULLPTR ) , mpEditor( NULLPTR ) , mpPasswdView( NULLPTR ) // , mpInformationElement( NULLPTR ) // ------------------------------------------------------------------------------- { mpEditor = new CEditor( this ); mpPasswdView = new CEncryptedEntryView( this ); Q_ASSERT( NULLPTR != mpEditor ); if ( !mpEditor || !mpPasswdView ) return; insertWidget( EDITOR, mpEditor ); insertWidget( PASSWD, mpPasswdView ); setCurrentIndex( PASSWD ); connect( mpPasswdView, SIGNAL(signalEntryDecrypted()), this, SLOT(slotEntryDecrypted()) ); } // ------------------------------------------------------------------------------- CSingleEntryView::~CSingleEntryView() // ------------------------------------------------------------------------------- { mpActiveElement = NULLPTR; } // ************** IView ********************************************************* // ------------------------------------------------------------------------------- void CSingleEntryView::aboutToRemoveElement( CInformationElement* pIE ) // ------------------------------------------------------------------------------- { if ( mpActiveElement == pIE ) { mpActiveElement = NULLPTR; } mpEditor->aboutToRemoveElement( pIE ); mpPasswdView->aboutToRemoveElement( pIE ); } // ************** IView - End **************************************************** // ------------------------------------------------------------------------------- CEditor* CSingleEntryView::getEditor() // ------------------------------------------------------------------------------- { return mpEditor; } /** * This slot is called as soon as the encrypted entry is decrypted. */ // ------------------------------------------------------------------------------- void CSingleEntryView::slotEntryDecrypted() // ------------------------------------------------------------------------------- { activeInformationElementChanged( mpActiveElement ); } // ------------------------------------------------------------------------------- QString CSingleEntryView::getText() // ------------------------------------------------------------------------------- { return (NULLPTR != mpEditor) ? mpEditor->getText() : QString(""); } // ------------------------------------------------------------------------------- void CSingleEntryView::setText( const QString& sText ) // ------------------------------------------------------------------------------- { if ( mpEditor ) mpEditor->setText( sText ); } // ------------------------------------------------------------------------------- void CSingleEntryView::writeCurrentTextToActiveInformationElement( void ) // ------------------------------------------------------------------------------- { if (NULLPTR != mpEditor) mpEditor->writeCurrentTextToActiveInformationElement(); } // // ------------------------------------------------------------------------------- // int CSingleEntryView::countBRs( void ) // // ------------------------------------------------------------------------------- // { // return (NULLPTR != mpEditor) ? mpEditor->countBRs() : 0; // } // ------------------------------------------------------------------------------- void CSingleEntryView::activeInformationElementChanged( CInformationElement* pIE ) // ------------------------------------------------------------------------------- { //std::cout<<"CSingleEntryView::activeInformationElementChanged()"<isCurrentlyEncrypted() ) { //std::cout<<"CSingleEntryView - entry is encrypted"<activeInformationElementChanged( mpActiveElement ); setCurrentIndex( PASSWD ); } else { //std::cout<<"CSingleEntryView - entry is not encrypted"<activeInformationElementChanged( mpActiveElement ); setCurrentIndex( EDITOR ); emit signalEntryDecrypted(); } } tuxcards/src/gui/editor/CSingleEntryView.h000444 000765 000024 00000004527 11420350116 021221 0ustar00alexstaff000000 000000 /*************************************************************************** CSingleEntryView.h - description ------------------- begin : Fri Jan 09 2004 copyright : (C) 2004 by Alexander Theel email : alex.theel@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #ifndef CSINGLE_ENTRY_VIEW_H #define CSINGLE_ENTRY_VIEW_H #include #include "./../../information/IView.h" #include "./CEditor.h" class CEncryptedEntryView; class CSingleEntryView : public QStackedWidget, public IView { Q_OBJECT public: CSingleEntryView( QWidget* pParent ); ~CSingleEntryView(); CEditor* getEditor(); // methods added because of editor QString getText(); virtual void setText( const QString& sText ); void writeCurrentTextToActiveInformationElement( void ); // int countBRs( void ); // methods added because of editor - end // ************** IView ************************************* virtual void aboutToRemoveElement( CInformationElement* pIE ); // ************** IView - End ******************************* public slots: // methods added because of editor void activeInformationElementChanged( CInformationElement* pIE ); // methods added because of editor - end protected: private: CInformationElement* mpActiveElement; CEditor* mpEditor; CEncryptedEntryView* mpPasswdView; enum { EDITOR, PASSWD }; private slots: void slotEntryDecrypted(); signals: void signalEntryDecrypted(); }; #endif tuxcards/src/gui/dialogs/configurationDialog/000755 000765 000024 00000000000 11420350116 021764 5ustar00alexstaff000000 000000 tuxcards/src/gui/dialogs/dateInputDialog/000755 000765 000024 00000000000 11420350116 021052 5ustar00alexstaff000000 000000 tuxcards/src/gui/dialogs/expiredElementsDialog/000755 000765 000024 00000000000 11420350116 022252 5ustar00alexstaff000000 000000 tuxcards/src/gui/dialogs/iconselectordialog/000755 000765 000024 00000000000 11420350116 021646 5ustar00alexstaff000000 000000 tuxcards/src/gui/dialogs/passwdDialog/000755 000765 000024 00000000000 11420350116 020416 5ustar00alexstaff000000 000000 tuxcards/src/gui/dialogs/propertyDialog/000755 000765 000024 00000000000 11420350116 021001 5ustar00alexstaff000000 000000 tuxcards/src/gui/dialogs/searchDialog/000755 000765 000024 00000000000 11420350116 020362 5ustar00alexstaff000000 000000 tuxcards/src/gui/dialogs/searchDialog/CSearchDialog.cpp000555 000765 000024 00000021460 11420350116 023522 0ustar00alexstaff000000 000000 /*************************************************************************** CSearchDialog.cpp - description ------------------- begin : Sun Mar 26 2000 copyright : (C) 2000 by Alexander Theel email : alex.theel@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #include "CSearchDialog.h" #include "../../../global.h" #include "../../../information/CInformationCollection.h" #include "CSearchListItemDelegate.h" #include "CSearchListItem.h" CSearchDialog* CSearchDialog::static_pInstance = NULLPTR; // ------------------------------------------------------------------------------- CSearchDialog::CSearchDialog( QWidget* pParent ) : QDialog( pParent ) , mpCollection( NULLPTR ) // ------------------------------------------------------------------------------- { ui.setupUi( this ); ui.mpWhereToSearchGroupBox->hide(); // A user change is not possible any more. Size changes are managed by the layout. layout()->setSizeConstraint( QLayout::SetFixedSize ); // Set size to prevent unwanted size changes of the dialog. ui.mpWhatToSearchGroupBox->setMinimumSize( ui.mpWhereToSearchGroupBox->sizeHint() ); // Increase width of first column for better readability. ui.mpResultTreeWidget->setColumnWidth( 0, 150 ); // Set connection for the "more button" text change and initialize it correctly. connect( ui.mpMoreButton, SIGNAL( toggled(bool) ), this, SLOT( slotChangeMoreButtonText(bool) ) ); slotChangeMoreButtonText( ui.mpMoreButton->isChecked() ); // Set connection for acutal search functionality. connect( ui.mpGoButton, SIGNAL( released() ), this, SLOT( slotStartSearching() )); // A connection between 'mpSearchLineEdit->returnPressed()' to 'mpGoButton->click()' // is not necessary. Since 'mpGoButton' is an "autodefault button" it does accept // a return-press automatically. // Set delegate for drawing the found entries the way we want it. // ui.mpResultTreeWidget->setItemDelegate( new CSearchListItemDelegate() ); // Set connection: When item from result list is changed, it should be activated within // the tree and the found position should be highlighted. connect( ui.mpResultTreeWidget, SIGNAL( currentItemChanged(QTreeWidgetItem*,QTreeWidgetItem*) ), this, SLOT( slotSelectionChanged(QTreeWidgetItem*,QTreeWidgetItem*) ) ); } // ------------------------------------------------------------------------------- CSearchDialog::~CSearchDialog( void ) // ------------------------------------------------------------------------------- { mpCollection = NULLPTR; } /** * Creates a property dialog instance with the given widget as parent. * This method should be called only once for the lifetime of the application. * Further calls are ignored. */ // ------------------------------------------------------------------------------- void CSearchDialog::createInstance( QWidget* pParent ) // ------------------------------------------------------------------------------- { if ( !static_pInstance ) { static_pInstance = new CSearchDialog( pParent ); } } /** * Returns the static instance. * If no property dialog was created with createInstance(), * then a NULLPTR is returned. */ // ------------------------------------------------------------------------------- CSearchDialog* CSearchDialog::getInstance() // ------------------------------------------------------------------------------- { Q_ASSERT( NULLPTR != static_pInstance ); return static_pInstance; } /** * Changes the displayed text of the "More button". */ // ------------------------------------------------------------------------------- void CSearchDialog::slotChangeMoreButtonText( bool bChecked ) // ------------------------------------------------------------------------------- { QString sText = ( bChecked ? tr("More") + " <<<" : tr("More") + " >>>" ); ui.mpMoreButton->setText( sText ); } /** * Sets up the search dialog for a new search. The root element and active element * must be given. */ // ------------------------------------------------------------------------------- void CSearchDialog::setUp( CInformationCollection* pCollection ) // ------------------------------------------------------------------------------- { Q_ASSERT( NULLPTR != pCollection ); if ( !pCollection ) return; mpCollection = pCollection; ui.mpStatusLine->setText(""); //list->hide(); //this->resize(550, 150); ui.mpSearchLineEdit->selectAll(); ui.mpSearchLineEdit->setFocus(); show(); exec(); } // ------------------------------------------------------------------------------- void CSearchDialog::slotStartSearching() // ------------------------------------------------------------------------------- { Q_ASSERT( NULLPTR != mpCollection ); if ( !mpCollection ) return; QString sSearchString = ui.mpSearchLineEdit->text(); if ( sSearchString.isEmpty() ) return; ui.mpGoButton->setEnabled( false ); ui.mpStatusLine->setText("Searching ..."); // clear list ui.mpResultTreeWidget->clear(); //// showing list //list->show(); //resize(550, 350); // Preapare search. Qt::CaseSensitivity eCaseSensitive = ( ui.mpCaseSensitiveCheckBox->isChecked() ? Qt::CaseSensitive : Qt::CaseInsensitive ); //std::cout<<"CSearchDialog::slotStartSearching() - case sensitiv = "<getRootElement(); else pElement = mpCollection->getActiveElement(); // Start search. if ( pElement ) pElement->search( sSearchString, isRecursiveSearchEnabled(), eCaseSensitive, *(ui.mpResultTreeWidget) ); // Show results. int iResultCount = ui.mpResultTreeWidget->topLevelItemCount(); if ( iResultCount > 1 ) ui.mpStatusLine->setText(""+QString::number(iResultCount)+" matches found."); else if ( iResultCount == 1 ) ui.mpStatusLine->setText("One match found."); else { // no item found //list->hide(); this->resize(550, 150); ui.mpStatusLine->setText("No match found."); } ui.mpGoButton->setEnabled( true ); } // ------------------------------------------------------------------------------- CSearchDialog::SD_SEARCHMODE CSearchDialog::getSearchMode() const // ------------------------------------------------------------------------------- { SD_SEARCHMODE eSearchMode = SD_NONE; if ( ui.mpSearchAllEntriesRadioButton->isChecked() ) eSearchMode = SD_ALL_ELEMENTS; else if ( ui.mpSearchCurrentEntryRecursivelyRadioButton->isChecked() ) eSearchMode = SD_CURRENT_ELEMENT_AND_CHILDREN; else eSearchMode = SD_CURRENT_ELEMENT_ONLY; return eSearchMode; } /** * Convenience method for getSearchMode(). */ // ------------------------------------------------------------------------------- bool CSearchDialog::isRecursiveSearchEnabled() const // ------------------------------------------------------------------------------- { return ( SD_CURRENT_ELEMENT_ONLY != getSearchMode() ); } /** * Convenience method for getSearchMode(). */ // ------------------------------------------------------------------------------- bool CSearchDialog::isSearchOverAllElementsEnabled() const // ------------------------------------------------------------------------------- { return ( SD_ALL_ELEMENTS == getSearchMode() ); } /** **************** Make selection visible *************************************/ // ------------------------------------------------------------------------------- void CSearchDialog::slotSelectionChanged( QTreeWidgetItem* pCurrent, QTreeWidgetItem* ) // ------------------------------------------------------------------------------- { CSearchListItem* pItem = reinterpret_cast( pCurrent ); if ( pItem ) emit makeVisible( pItem->getSearchPosition() ); } tuxcards/src/gui/dialogs/searchDialog/CSearchDialog.h000555 000765 000024 00000004450 11420350116 023167 0ustar00alexstaff000000 000000 /*************************************************************************** CSearchDialog.h - description ------------------- begin : Sun Mar 26 2000 copyright : (C) 2000 by Alexander Theel email : alex.theel@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #ifndef C_SEARCH_DIALOG_H #define C_SEARCH_DIALOG_H #include "../../../../output/ui/ui_ISearchDialog.h" class CInformationCollection; class CSearchPosition; class CSearchDialog : public QDialog { Q_OBJECT public: ~CSearchDialog(); static void createInstance( QWidget* pParent ); static CSearchDialog* getInstance(); void setUp( CInformationCollection* pCollection ); private slots: void slotChangeMoreButtonText( bool bChecked ); void slotStartSearching(); void slotSelectionChanged( QTreeWidgetItem* pCurrent, QTreeWidgetItem* ); signals: void makeVisible( const CSearchPosition* const ); private: CSearchDialog( QWidget* pParent ); static CSearchDialog* static_pInstance; CInformationCollection* mpCollection; enum SD_SEARCHMODE { SD_NONE = -1, SD_ALL_ELEMENTS, SD_CURRENT_ELEMENT_AND_CHILDREN, SD_CURRENT_ELEMENT_ONLY }; SD_SEARCHMODE getSearchMode() const; bool isRecursiveSearchEnabled() const; bool isSearchOverAllElementsEnabled() const; Ui::ISearchDialog ui; }; #endif tuxcards/src/gui/dialogs/searchDialog/CSearchListItem.cpp000555 000765 000024 00000010472 11420350116 024056 0ustar00alexstaff000000 000000 /*************************************************************************** CSearchListItem.cpp - description ------------------- begin : Fri Mar 31 2000 copyright : (C) 2000 by Alexander Theel email : alex.theel@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #include "CSearchListItem.h" #include #include /** * 'parent' is a pointer to the QTreeWidget where we want to insert this item */ // ------------------------------------------------------------------------------- CSearchListItem::CSearchListItem( QTreeWidget* pParent, Path* pPath, int iLocation, int iPos, int iLen, const QString& s) : QTreeWidgetItem( pParent ,QTreeWidgetItem::UserType /*, parent->lastItem(), path->getPathList().last(), (location == SearchPosition::SP_NAME ? QString("") : s)*/ ) // ------------------------------------------------------------------------------- { mpSearchPosition = new CSearchPosition( pPath, iLocation, iPos, iLen, s ); if ( pPath ) setText( 0, pPath->getPathList().last() ); setText( 1, (iLocation == CSearchPosition::SP_NAME ? QString("") : s) ); // Sets the font of column 0 to bold. //QFont f = font(0); f.setBold(TRUE); setFont(0, f); } // ------------------------------------------------------------------------------- CSearchListItem::~CSearchListItem() // ------------------------------------------------------------------------------- { DELETE( mpSearchPosition ); } // ------------------------------------------------------------------------------- const CSearchPosition* CSearchListItem::getSearchPosition() const // ------------------------------------------------------------------------------- { return mpSearchPosition; } // ------------------------------------------------------------------------------- void CSearchListItem::paintCell( QPainter* /*pPainter*/, /*const QColorGroup &cg,*/ int /*iColumn*/, int /*iWidth*/, int /*iAlignment*/ ) // ------------------------------------------------------------------------------- { //TODO: This was moved to "CSearchListItemDelegate". Is it still needed?? /* //if (column==1){ if ( mpSearchPosition->getLocation() == iColumn ) { // cache often needed variables int iPos = mpSearchPosition->getPos(); int iLen = mpSearchPosition->getLen(); pPainter->fillRect( 0,0, iWidth,30, Qt::white ); // draw first part QFont f = pPainter->font(); f.setBold( false ); QFontMetrics fm( f ); pPainter->setFont( f ); if ( iPos > 0) pPainter->drawText( 0,15, text(iColumn).mid(0, iPos) ); int x = fm.width( text(iColumn).mid(0, iPos) ); // draw 2nd part = "searchPart" f.setBold( true ); pPainter->setFont( f ); pPainter->drawText( x,15, text(iColumn).mid(iPos, iLen) ); x += fm.width( text(iColumn).mid(iPos, iLen) ) + 1; // '+1' -> so that it looks nicer // draw last part f.setBold( false ); pPainter->setFont( f ); pPainter->drawText( x,15, text(iColumn).mid(iPos + iLen) ); } else { // Q3ListViewItem::paintCell( p, cg, column, width, alignment ); } */ } // ------------------------------------------------------------------------------- QString CSearchListItem::toString() const // ------------------------------------------------------------------------------- { return text(0) + ": iPos=" + QString::number( mpSearchPosition->getPos() ) + " iLen=" + QString::number( mpSearchPosition->getLen() ); } tuxcards/src/gui/dialogs/searchDialog/CSearchListItem.h000555 000765 000024 00000003330 11420350116 023516 0ustar00alexstaff000000 000000 /*************************************************************************** CSearchListItem.h - description ------------------- begin : Fri Mar 31 2000 copyright : (C) 2000 by Alexander Theel email : alex.theel@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #ifndef CSEARCHLISTITEM_H #define CSEARCHLISTITEM_H #include #include #include "CSearchPosition.h" class CSearchListItem : public QTreeWidgetItem { public: CSearchListItem( QTreeWidget* pParent, Path* pPath, int iLocation, int iPos, int iLen, const QString& s ); ~CSearchListItem(); const CSearchPosition* getSearchPosition() const; protected: virtual void paintCell( QPainter *p, /*const QColorGroup &cg,*/ int iColumn, int iWidth, int iAlignment ); QString toString() const; CSearchPosition* mpSearchPosition; }; #endif tuxcards/src/gui/dialogs/searchDialog/CSearchListItemDelegate.cpp000555 000765 000024 00000011101 11420350116 025477 0ustar00alexstaff000000 000000 /*************************************************************************** CSearchListItemDelegate.cpp - description ------------------- begin : Fri Jan 04 2008 copyright : (C) 2000 by Alexander Theel email : alex.theel@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #include "CSearchListItemDelegate.h" #include #include /** * 'parent' is a pointer to the QTreeWidget where we want to insert this item */ // ------------------------------------------------------------------------------- CSearchListItemDelegate::CSearchListItemDelegate( QObject* pParent ) : QItemDelegate( pParent /*, parent->lastItem(), path->getPathList().last(), (location == SearchPosition::SP_NAME ? QString("") : s)*/ ) // ------------------------------------------------------------------------------- { } //// ------------------------------------------------------------------------------- //void CSearchListItemDelegate::paint( QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index ) const //// ------------------------------------------------------------------------------- //{ // QStyleOptionViewItem myOption = option; // myOption.displayAlignment = Qt::AlignRight | Qt::AlignVCenter; // // // //painter->fillRect( option.rect, option.palette.highlight() ); // painter->setPen( Qt::red ); // painter->drawText( option.rect, "abc" ); // // drawDisplay( painter, myOption, myOption.rect, "abc" ); // drawFocus( painter, myOption, myOption.rect ); // // //QItemDelegate::paint( painter, option, rect, sText ); //} // ------------------------------------------------------------------------------- void CSearchListItemDelegate::drawDisplay( QPainter* pPainter, const QStyleOptionViewItem& option, const QRect& rect, const QString& sText ) const // ------------------------------------------------------------------------------- { if ( pPainter ) { //QMessageBox::information( 0, "", "CSearchListItemDelegate::drawDisplay()" ); QFont f = pPainter->font(); f.setItalic( TRUE ); pPainter->setFont( f ); pPainter->setPen( Qt::red ); pPainter->drawText( option.rect, "abc" ); } QItemDelegate::drawDisplay( pPainter, option, rect, sText ); } //// ------------------------------------------------------------------------------- //void CSearchListItem::paintCell( QPainter* pPainter, /*const QColorGroup &cg,*/ // int iColumn, int iWidth, int iAlignment ) //// ------------------------------------------------------------------------------- //{ // //if (column==1){ // if ( mpSearchPosition->getLocation() == iColumn ) // { // // cache often needed variables // int iPos = mpSearchPosition->getPos(); // int iLen = mpSearchPosition->getLen(); // // pPainter->fillRect( 0,0, iWidth,30, Qt::white ); // // // draw first part // QFont f = pPainter->font(); f.setBold( false ); QFontMetrics fm( f ); pPainter->setFont( f ); // if ( iPos > 0) // pPainter->drawText( 0,15, text(iColumn).mid(0, iPos) ); // // int x = fm.width( text(iColumn).mid(0, iPos) ); // // // draw 2nd part = "searchPart" // f.setBold( true ); pPainter->setFont( f ); // pPainter->drawText( x,15, text(iColumn).mid(iPos, iLen) ); // x += fm.width( text(iColumn).mid(iPos, iLen) ) + 1; // '+1' -> so that it looks nicer // // // draw last part // f.setBold( false ); pPainter->setFont( f ); // pPainter->drawText( x,15, text(iColumn).mid(iPos + iLen) ); // } // else // { // // Q3ListViewItem::paintCell( p, cg, column, width, alignment ); // } //} tuxcards/src/gui/dialogs/searchDialog/CSearchListItemDelegate.h000555 000765 000024 00000003055 11420350116 025155 0ustar00alexstaff000000 000000 /*************************************************************************** CSearchListItemDelegate.h - description ------------------- begin : Fri Jan 04 2008 copyright : (C) 2008 by Alexander Theel email : alex.theel@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #ifndef C_SEARCH_LISTITEM_DELEGATE_H #define C_SEARCH_LISTITEM_DELEGATE_H #include class CSearchListItemDelegate : public QItemDelegate { public: CSearchListItemDelegate( QObject* pParent = 0 ); protected: virtual void drawDisplay( QPainter* pPainter, const QStyleOptionViewItem& option, const QRect& rect, const QString& sText ) const; //virtual void paint ( QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index ) const; }; #endif tuxcards/src/gui/dialogs/searchDialog/CSearchPosition.cpp000555 000765 000024 00000006170 11420350116 024130 0ustar00alexstaff000000 000000 /*************************************************************************** CSearchposition.cpp - description ------------------- begin : Sun Mar 26 2000 copyright : (C) 2000 by Alexander Theel email : alex.theel@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #include "CSearchPosition.h" /** * 'CTreeElement' should be used instead of 'QListViewItem' in future * 'x' is actually a 'CTreeElement', the 'CTreeElement' where we have found s.th. * 'pos': the position within the document * 'len': length of searchString; needed to draw this item (especially for * regular expressions) */ // ------------------------------------------------------------------------------- CSearchPosition::CSearchPosition( Path/*CTreeElement*//*QListViewItem*/* path, int location, int iPos, int iLen, QString s ) // ------------------------------------------------------------------------------- { //referenceElement = x; this->path = path; this->searchLocation = location; this->pos = iPos; this->len = iLen; this->s = s; } //TODO: Destructor is missing. All local pointers must be taken care of. // ------------------------------------------------------------------------------- CTreeElement* CSearchPosition::getReferenceElement() // ------------------------------------------------------------------------------- { return referenceElement; } // ------------------------------------------------------------------------------- const Path* CSearchPosition::getPath() const // ------------------------------------------------------------------------------- { return path; } int CSearchPosition::getPos() const { return pos; } int CSearchPosition::getLen() const { return len; } // really dirty, calling x->text(0), althought we are using 'Knoten' // -> da kreuzweise verschachtelung der Headerfiles 'knoten.h' & 'searchpos.h' QString CSearchPosition::getName(){ return referenceElement->text(0); } QString CSearchPosition::getString(){ return s; } /*SP_LOCATION SearchPosition::getLocation()*/ // ------------------------------------------------------------------------------- int CSearchPosition::getLocation() const // ------------------------------------------------------------------------------- { return searchLocation; } tuxcards/src/gui/dialogs/searchDialog/CSearchPosition.h000555 000765 000024 00000003743 11420350116 023600 0ustar00alexstaff000000 000000 /*************************************************************************** CSearchposition.h - description ------------------- begin : Sun Mar 26 2000 copyright : (C) 2000 by Alexander Theel email : alex.theel@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #ifndef CSEARCHPOSITION_H #define CSEARCHPOSITION_H #include #include "../../CTreeElement.h" //TODO: Refactoring necessary. class CSearchPosition { public: CSearchPosition( Path* path, int location, int pos, int len, QString s ); CTreeElement* getReferenceElement(); const Path* getPath() const; int getPos() const; int getLen() const; QString getName(); QString getString(); // states where the string that was searched is found enum SP_LOCATION { SP_NONE = -1, SP_NAME, SP_INFORMATION }; /*SP_LOCATION*/int getLocation() const; private: CTreeElement/*QListViewItem*/* referenceElement; // actually a 'CTreeElement' -> kreuzweise Einbindung d. Headerdateien Path* path; int searchLocation; // states where the string that was searched is found int pos; int len; QString s; }; #endif tuxcards/src/gui/dialogs/searchDialog/ISearchDialog.ui000555 000765 000024 00000010654 11420350116 023366 0ustar00alexstaff000000 000000 ISearchDialog 0 0 548 366 SearchDialog Search for ... &Go &Case Sensitive false Qt::Horizontal 40 20 More >>> true false false Search within ... ... all Entries true ... current Entry and Children ... current Entry only Qt::Vertical 524 16 Entry Name Entry Content StatusLine mpSearchLineEdit mpGoButton mpCaseSensitiveCheckBox mpResultTreeWidget mpSearchAllEntriesRadioButton mpSearchCurrentEntryRecursivelyRadioButton mpSearchCurrentEntryOnlyRadioButton mpMoreButton mpMoreButton toggled(bool) mpWhereToSearchGroupBox setVisible(bool) 533 108 233 125 tuxcards/src/gui/dialogs/propertyDialog/CPropertyDialog.cpp000444 000765 000024 00000037714 11420350116 024566 0ustar00alexstaff000000 000000 /*************************************************************************** CPropertyDialog.cpp - description ------------------- begin : Tue Mar 28 2000 copyright : (C) 2000 by Alexander Theel email : alex.theel@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #include "../../../icons/blank.xpm" #include "CPropertyDialog.h" #include "../../../global.h" #include "../../../information/CTreeInformationElement.h" #include "../../../CTuxCardsConfiguration.h" #include "../dateInputDialog/CDateInputDialog.h" #include "../iconselectordialog/CIconSelectorDialog.h" #include #include #include #include #include #include #include #include #include #include CPropertyDialog* CPropertyDialog::static_pInstance = NULLPTR; // ------------------------------------------------------------------------------- CPropertyDialog::CPropertyDialog( QWidget* pParent/*, CTuxCardsConfiguration& refTuxConfiguration*/ ) : QDialog( pParent ) , mExpiryDate() , mpDateInputDialog( NULLPTR ) , mBlankIcon( blank_xpm ) , mpIconSelectorDialog( NULLPTR ) , miMode( MODE_NONE ) , miChoice( 0 ) , mpEditingElement( NULLPTR ) , mDescriptionColor( 0,0,0 ) // , mrefTuxConfiguration( refTuxConfiguration ) // ------------------------------------------------------------------------------- { ui.setupUi( this ); setModal( TRUE ); connect( ui.mpChangeIconButton, SIGNAL(clicked()), this, SLOT(chooseIcon()) ); connect( ui.mpChangeExpiryDateButton, SIGNAL(clicked()), this, SLOT(openDateInputDialog()) ); connect( ui.mpDescriptionColorButton, SIGNAL(clicked()), this, SLOT(slotChooseDescriptionColor()) ); connect( this, SIGNAL(accepted()), this, SLOT(changeProperties()) ); // connect( ui.mpEncryptionPanel, SIGNAL(clicked()), this, SLOT(checkEncryption()) ); // initialize the date input dialog CDateInputDialog::createInstance( this ); mpDateInputDialog = CDateInputDialog::getInstance(); Q_ASSERT( NULLPTR != mpDateInputDialog ); connect( mpDateInputDialog, SIGNAL(accepted()), this, SLOT(changeExpiryDate()) ); } // ------------------------------------------------------------------------------- CPropertyDialog::~CPropertyDialog( void ) // ------------------------------------------------------------------------------- { mpEditingElement = NULLPTR; // do not kill this pointer } /** * Creates a property dialog instance with the given widget as parent. * This method should be called only once for the lifetime of the application. * Further calls are ignored. */ // ------------------------------------------------------------------------------- void CPropertyDialog::createInstance( QWidget* pParent ) // ------------------------------------------------------------------------------- { if ( !static_pInstance ) { static_pInstance = new CPropertyDialog( pParent ); } } /** * Returns the static instance. * If no property dialog was created with createInstance(), * then a NULLPTR is returned. */ // ------------------------------------------------------------------------------- CPropertyDialog* CPropertyDialog::getInstance() // ------------------------------------------------------------------------------- { Q_ASSERT( NULLPTR != static_pInstance ); return static_pInstance; } // ------------------------------------------------------------------------------- int CPropertyDialog::getMode() const // ------------------------------------------------------------------------------- { return miMode; } // ------------------------------------------------------------------------------- void CPropertyDialog::setUp( CInformationElement* pElement, int iMode ) // ------------------------------------------------------------------------------- { if ( NULLPTR == pElement ) return; if ( MODE_CHANGE_PROPERTIES == iMode ) { setWindowTitle( tr("Change Properties of existing Entry") ); ui.mpParentLabel->setText( "" ); setAttributes( pElement->getDescription(), pElement->getIconFileName(), pElement->expires(), pElement->getExpiryDate(), pElement->getDescriptionColor()/*, pElement->isEncryptionEnabled(), pElement->isCurrentlyEncrypted()*/ ); ui.mpTextFormatChoser->setEnabled( FALSE ); } else if ( MODE_CREATE_NEW_ELEMENT == iMode ) { setWindowTitle( tr("Add new Entry") ); ui.mpParentLabel->setText( tr("Child from") + " '" + pElement->getDescription() + "'" ); setAttributes( "", CInformationElement_NO_ICON ); ui.mpTextFormatChoser->setEnabled( TRUE ); } else { return; } miMode = iMode; mpEditingElement = pElement; show(); // exec(); } // ------------------------------------------------------------------------------- void CPropertyDialog::setAttributes( QString sDescription, QString sIconFilename, bool bExpires, QDate expiryDate, const QColor& desColor/*, bool bIsEncryptionEnabled, bool isCurrentlyEncrypted*/ ) // ------------------------------------------------------------------------------- { if ( sIconFilename == CInformationElement_NO_ICON ) { // entry without icon ui.mpUseIconGroupBox->setChecked( FALSE ); ui.mpIconLabel->setPixmap( mBlankIcon ); } else { // entry with icon ui.mpUseIconGroupBox->setChecked( TRUE ); ui.mpIconLabel->setPixmap( QPixmap::fromImage( QImage(sIconFilename) ) ); } ui.mpLocationLabel->setText( sIconFilename ); ui.mpNameLine->setText(sDescription); setDescriptionColor( desColor ); ui.mpExpiryDateGroupBox->setChecked( bExpires ); mExpiryDate = expiryDate; ui.mpExpiryDateLabel->setText( mExpiryDate.toString("dddd, d MMMM yyyy") ); /* if ( bIsEncryptionEnabled ) { ui.mpEncryptionPanel->setChecked( true ); ui.mpEncryptionPanel->setEnabled( !isCurrentlyEncrypted ); // mpPasswdLineOne->setText( "*******" ); // mpPasswdLineTwo->setText( "*******" ); mpPasswdLineOne->setEnabled( false ); mpPasswdLineTwo->setEnabled( false ); } else { ui.mpEncryptionPanel->setChecked( false ); } */ } /** * Open an icon slector dialog to let user select his icon. * If the dialog is not created it will be initialized. */ // ------------------------------------------------------------------------------- void CPropertyDialog::chooseIcon() // ------------------------------------------------------------------------------- { if ( !mpIconSelectorDialog ) { // initialize the icon selector dialog mpIconSelectorDialog = /*new CIconSelectorDialog( this ); //*/CIconSelectorDialog::getInstance( this ); Q_ASSERT( NULLPTR != mpIconSelectorDialog ); if ( !mpIconSelectorDialog ) return; connect( mpIconSelectorDialog, SIGNAL(accepted()), this, SLOT(iconSelected()) ); } mpIconSelectorDialog->show(); } // ------------------------------------------------------------------------------- void CPropertyDialog::iconSelected() // ------------------------------------------------------------------------------- { if ( !mpIconSelectorDialog ) return; QString sIconFileName = mpIconSelectorDialog->getIconFileName(); if( sIconFileName.isEmpty() ) return; // if 'sIconFileName' is a valid fileName, test whether it is a valid Pixmap QPixmap pix( sIconFileName ); if ( ! pix.isNull() ) { ui.mpIconLabel->setPixmap( pix ); ui.mpLocationLabel->setText( sIconFileName ); } } // ------------------------------------------------------------------------------- void CPropertyDialog::slotChooseDescriptionColor() // ------------------------------------------------------------------------------- { QColor c = QColorDialog::getColor( getDescriptionColor() ); if( !c.isValid() ) return; setDescriptionColor( c ); } // ------------------------------------------------------------------------------- void CPropertyDialog::setDescriptionColor( const QColor& c ) // ------------------------------------------------------------------------------- { mDescriptionColor = c; if ( !ui.mpDescriptionColorButton ) return; int iWidth = 24; int iHeight = 24; QPixmap pixmap( iWidth, iHeight ); QPainter p; p.begin( &pixmap ); p.fillRect( 0,0, iWidth,iHeight, mDescriptionColor ); p.end(); ui.mpDescriptionColorButton->setIcon( pixmap ); // QPalette p = ui.mpDescriptionColorButton->palette(); // p.setColor( QPalette::ButtonText, mDescriptionColor ); // ui.mpDescriptionColorButton->setPalette( p ); } // ------------------------------------------------------------------------------- QString CPropertyDialog::getName() const // ------------------------------------------------------------------------------- { return ui.mpNameLine->text(); } // ------------------------------------------------------------------------------- QString CPropertyDialog::getIconFileName() const // ------------------------------------------------------------------------------- { if ( ui.mpUseIconGroupBox->isChecked() ) return ui.mpLocationLabel->text(); else return CInformationElement_NO_ICON; } // ------------------------------------------------------------------------------- InformationFormat* CPropertyDialog::getInformationFormat() const // ------------------------------------------------------------------------------- { return InformationFormat::getByString( ui.mpTextFormatChoser->currentText() ); } // ------------------------------------------------------------------------------- QColor CPropertyDialog::getDescriptionColor() const // ------------------------------------------------------------------------------- { return mDescriptionColor; //ui.mpDescriptionColorButton->palette().color( QPalette::ButtonText ); } // ------------------------------------------------------------------------------- bool CPropertyDialog::hasExpiryDateSet() const // ------------------------------------------------------------------------------- { return ui.mpExpiryDateGroupBox->isChecked(); } // ------------------------------------------------------------------------------- QDate CPropertyDialog::getExpiryDate() const // ------------------------------------------------------------------------------- { return mExpiryDate; } /** * This slot is called when the apply-Button is pressed. * The set attributes are applied to the currently edited informationElement. */ // ------------------------------------------------------------------------------- void CPropertyDialog::changeProperties() // ------------------------------------------------------------------------------- { if ( NULLPTR == mpEditingElement ) return; // if ( (NULLPTR == mpPasswdLineOne) || (NULLPTR == mpPasswdLineTwo) ) // return; if ( getName().trimmed().isEmpty() ) { int iAnswer = QMessageBox::warning( this, "TuxCards", tr("The name of your entry is empty.\n" "Do you want to change this?"), QMessageBox::Yes, QMessageBox::No ); if ( QMessageBox::Yes == iAnswer ) { show(); return; } } /* // is set to 'true' if the encryption mode is changed bool bEncryptionModeChanged = false; // is set to 'true' if entry should be encrypted; // this is only important if 'bEncryptionModeChanged' is 'true' bool bEncrypt = false; if ( NULLPTR != ui.mpEncryptionPanel ) { if ( mpEditingElement->isEncryptionEnabled() != ui.mpEncryptionPanel->isChecked() ) { bEncryptionModeChanged = true; if ( ui.mpEncryptionPanel->isChecked() ) { if ( mpPasswdLineOne->text().stripWhiteSpace().isEmpty() ) { (void) QMessageBox::warning( this, "TuxCards", "Encryption is turned on, but\n" "no password is entered.", "Change it." ); show(); return; } if ( 0 != mpPasswdLineOne->text().stripWhiteSpace().compare( mpPasswdLineTwo->text().stripWhiteSpace()) ) { (void) QMessageBox::warning( this, "TuxCards", "Passwords do not match.", "Change it." ); mpPasswdLineOne->setText(""); mpPasswdLineTwo->setText(""); show(); return; } bEncrypt = true; } else { // if ( tmpPasswd == "" ) // { // QMessageBox::information("Geht nicht, " // "encryption can only be removed if entry is decrypted."); // // ui.mpEncryptionPanel->setChecked( false ); // bEncrypt = false; // } } } } */ if ( miMode == MODE_CHANGE_PROPERTIES ) { // change properties: name & icon mpEditingElement->setBatched( TRUE ); mpEditingElement->setDescription( getName() ); mpEditingElement->setIconFileName( getIconFileName() ); mpEditingElement->setDescriptionColor( getDescriptionColor() ); mpEditingElement->setExpiryDate( ui.mpExpiryDateGroupBox->isChecked(), mExpiryDate ); mpEditingElement->setBatched( FALSE ); // only do something if encryption mode has changed // if ( bEncryptionModeChanged ) // mpEditingElement->enableEncryption( bEncrypt, mpPasswdLineOne->text().stripWhiteSpace() ); } else if ( miMode == MODE_CREATE_NEW_ELEMENT ) { emit( dataSuccessfullyEntered() ); // only do something if encryption mode has changed // if ( bEncryptionModeChanged ) // pNewElement->enableEncryption( bEncrypt, mpPasswdLineOne->text().stripWhiteSpace() ); } close(); } // ------------------------------------------------------------------------------- void CPropertyDialog::openDateInputDialog() // ------------------------------------------------------------------------------- { Q_ASSERT( NULLPTR != mpDateInputDialog ); if ( !mpDateInputDialog ) return; mpDateInputDialog->setUp( mExpiryDate ); } // ------------------------------------------------------------------------------- void CPropertyDialog::changeExpiryDate() // ------------------------------------------------------------------------------- { Q_ASSERT( NULLPTR != mpDateInputDialog ); if ( !mpDateInputDialog ) return; mExpiryDate = mpDateInputDialog->getSelectedDate(); ui.mpExpiryDateLabel->setText( mExpiryDate.toString("dddd, d MMMM yyyy") ); } /* // ------------------------------------------------------------------------------- void CPropertyDialog::checkEncryption() // ------------------------------------------------------------------------------- { if ( (!ui.mpEncryptionPanel) || (!ui.mpEncryptionPanel->isEnabled()) ) return; if ( !mrefTuxConfiguration.askForUsingEncryption() ) { ui.mpEncryptionPanel->setChecked( false ); } } */ tuxcards/src/gui/dialogs/propertyDialog/CPropertyDialog.h000444 000765 000024 00000006765 11420350116 024235 0ustar00alexstaff000000 000000 /*************************************************************************** CPropertyDialog.h - description ------------------- begin : Tue Mar 28 2000 copyright : (C) 2000 by Alexander Theel email : alex.theel@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #ifndef C_PROPERTY_DIALOG_H #define C_PROPERTY_DIALOG_H #include "../../../../output/ui/ui_IPropertyDialog.h" #include #include class CInformationElement; class CTuxCardsConfiguration; class CDateInputDialog; class CIconSelectorDialog; class InformationFormat; class CPropertyDialog : public QDialog { Q_OBJECT public: ~CPropertyDialog(); static void createInstance( QWidget* pParent ); static CPropertyDialog* getInstance(); enum { MODE_NONE, MODE_CHANGE_PROPERTIES, MODE_CREATE_NEW_ELEMENT }; int getMode() const; void setUp( CInformationElement* pElement, int iMode ); QString getName() const; QString getIconFileName() const; InformationFormat* getInformationFormat() const; QColor getDescriptionColor() const; bool hasExpiryDateSet() const; QDate getExpiryDate() const; signals: void dataSuccessfullyEntered(); private slots: void changeProperties(); void openDateInputDialog(); void changeExpiryDate(); void chooseIcon(); void iconSelected(); void slotChooseDescriptionColor(); // void checkEncryption(); private: CPropertyDialog( QWidget* pParent/*, CTuxCardsConfiguration& refTuxConfiguration*/ ); static CPropertyDialog* static_pInstance; QDate mExpiryDate; CDateInputDialog* mpDateInputDialog; QPixmap mBlankIcon; CIconSelectorDialog* mpIconSelectorDialog; void setAttributes( QString, QString, bool bExpires = false, QDate expiryDate = QDate::currentDate(), const QColor& desColor = QColor(0,0,0)/*, bool bIsEncryptionEnabled = false, bool isCurrentlyEncrypted = true*/ ); int miMode; int miChoice; CInformationElement* mpEditingElement; QColor mDescriptionColor; void setDescriptionColor( const QColor& c ); // CTuxCardsConfiguration& mrefTuxConfiguration; Ui::IPropertyDialog ui; }; #endif tuxcards/src/gui/dialogs/propertyDialog/IPropertyDialog.ui000444 000765 000024 00000022016 11420350116 024414 0ustar00alexstaff000000 000000 IPropertyDialog 0 0 401 520 Property Dialog Set Color for Entry Name 330 0 0 Properties Entry Name 1 ASCII RTF true Child from: Qt::Horizontal 219 16 16 0 Use Icon true false 60 60 [Icon] Qt::Horizontal 40 20 Change Icon... QFrame::Box QFrame::Raised /icon/location Use Expiry Date true false 21.03.1976 Qt::Horizontal 40 20 Change Date... Encrypt Entry true false QLineEdit::Password QLineEdit::Password Retype Password Password Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok mpNameLine mpTextFormatChoser mpChangeIconButton mpChangeExpiryDateButton mpPasswdLineOne mpPasswdLineTwo buttonBox tabWidget buttonBox accepted() IPropertyDialog accept() 248 254 157 274 buttonBox rejected() IPropertyDialog reject() 316 260 286 274 tuxcards/src/gui/dialogs/passwdDialog/CPasswdDialog.cpp000444 000765 000024 00000007237 11420350116 023615 0ustar00alexstaff000000 000000 /*************************************************************************** CPasswdDialog.cpp - description ------------------- begin : Wed Jan 14 2004 copyright : (C) 2004 by Alexander Theel email : alex.theel@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #include "CPasswdDialog.h" #include #include #include #include #include // ------------------------------------------------------------------------------- CPasswdDialog::CPasswdDialog( QWidget* pParent ) : QDialog( pParent ) , msPasswd( "" ) // ------------------------------------------------------------------------------- { ui.setupUi( this ); setModal( TRUE ); connect( ui.mpOkButton, SIGNAL(released()), this, SLOT(slotVerifyPasswd()) ); } // ------------------------------------------------------------------------------- void CPasswdDialog::setUp( const QString& sIEDescription ) // ------------------------------------------------------------------------------- { if ( (NULLPTR == ui.mpIEDescription) || (NULLPTR == ui.mpPasswdLineOne) || (NULLPTR == ui.mpPasswdLineTwo) ) return; ui.mpIEDescription->setText("'"+sIEDescription+"'"); startPasswdInput(); exec(); // Block application and call the dialog in modal mode. } // ------------------------------------------------------------------------------- void CPasswdDialog::slotVerifyPasswd() // ------------------------------------------------------------------------------- { if ( (NULLPTR == ui.mpPasswdLineOne) || (NULLPTR == ui.mpPasswdLineTwo) ) return; if ( ui.mpPasswdLineOne->text().trimmed().isEmpty() ) { (void) QMessageBox::warning( this, "TuxCards", "No password is entered.", "Change it." ); //std::cout<<"no passwd"<text().trimmed().compare( ui.mpPasswdLineTwo->text().trimmed()) ) { (void) QMessageBox::warning( this, "TuxCards", "Passwords do not match.", "Change it." ); //std::cout<<"passwds do not match"<text().trimmed(); //std::cout<<"CPasswdDialog::done() passwd="<setText(""); ui.mpPasswdLineTwo->setText(""); msPasswd = ""; ui.mpPasswdLineOne->setFocus(); show(); } // ------------------------------------------------------------------------------- QString CPasswdDialog::getPasswd() // ------------------------------------------------------------------------------- { return msPasswd; } tuxcards/src/gui/dialogs/passwdDialog/CPasswdDialog.h000444 000765 000024 00000003022 11420350116 023246 0ustar00alexstaff000000 000000 /*************************************************************************** CPasswdDialog.h - description ------------------- begin : Wed Jan 14 2004 copyright : (C) 2004 by Alexander Theel email : alex.theel@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #ifndef CPASSWDDIALOG_H #define CPASSWDDIALOG_H #include "../../../global.h" #include "../../../../output/ui/ui_IPasswdDialog.h" #include class CPasswdDialog : public QDialog { Q_OBJECT public: CPasswdDialog( QWidget* pParent = NULLPTR ); void setUp( const QString& sIEDescription ); QString getPasswd(); protected slots: void slotVerifyPasswd(); private: void startPasswdInput(); QString msPasswd; Ui::IPasswdDialog ui; }; #endif tuxcards/src/gui/dialogs/passwdDialog/IPasswdDialog.ui000444 000765 000024 00000005520 11420350116 023447 0ustar00alexstaff000000 000000 IPasswdDialog 0 0 267 170 TuxCards - Passwd Dialog Please enter a password for Qt::AlignCenter 'entry name' Qt::AlignCenter Password QLineEdit::Password Retype QLineEdit::Password Qt::Horizontal 40 20 Ok Cancel pushButton_2 released() IPasswdDialog reject() 254 123 262 27 tuxcards/src/gui/dialogs/iconselectordialog/CIconSelectorDialog.cpp000555 000765 000024 00000016152 11420350116 026174 0ustar00alexstaff000000 000000 /*************************************************************************** CIconSelectorDialog.cpp - description ------------------- begin : Sun Jun 10 2007 copyright : (C) 2007 by Alexander Theel email : alex.theel@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #include "CIconSelectorDialog.h" #include "../../../global.h" #include "CIconSelectorItem.h" CIconSelectorDialog* CIconSelectorDialog::static_pInstance = NULLPTR; // ------------------------------------------------------------------------------- CIconSelectorDialog::CIconSelectorDialog( QWidget* pParent ) : QDialog ( pParent ) // ------------------------------------------------------------------------------- { ui.setupUi( this ); ui.pDirectoryUpButton->setIcon( QApplication::style()->standardIcon( QStyle::QStyle::SP_FileDialogToParent ) ); connect( ui.pDirectoryUpButton, SIGNAL( clicked() ), this, SLOT( cdUp() ) ); connect( ui.pList, SIGNAL( itemDoubleClicked(QListWidgetItem*) ), this, SLOT( itemDoubleClicked(QListWidgetItem*) ) ); connect( ui.pList, SIGNAL( itemClicked(QListWidgetItem*) ), this, SLOT( fileSelected(QListWidgetItem*) ) ); readDirectory( QDir::current().absolutePath() ); } // ------------------------------------------------------------------------------- CIconSelectorDialog* CIconSelectorDialog::getInstance( QWidget* pParent ) // ------------------------------------------------------------------------------- { if ( !static_pInstance ) static_pInstance = new CIconSelectorDialog( pParent ); return static_pInstance; } // ------------------------------------------------------------------------------- void CIconSelectorDialog::cdUp() // ------------------------------------------------------------------------------- { mCurrentDir.cdUp(); readDirectory( mCurrentDir ); } // ------------------------------------------------------------------------------- void CIconSelectorDialog::directoryChanged( const QString& sDir ) // ------------------------------------------------------------------------------- { mCurrentDir = QDir( sDir ); setPathForComboBox(); } // ------------------------------------------------------------------------------- QString CIconSelectorDialog::getIconFileName() const // ------------------------------------------------------------------------------- { if( ui.pIconNameLineEdit->text().isEmpty() ) // i.e. no file was selected return ""; else return mCurrentDir.absolutePath() +"/"+ ui.pIconNameLineEdit->text(); } // ------------------------------------------------------------------------------- void CIconSelectorDialog::fileSelected( QListWidgetItem* pItem ) // ------------------------------------------------------------------------------- { CIconSelectorItem* pISItem = dynamic_cast( pItem ); Q_ASSERT( (NULLPTR != pISItem) && (NULLPTR != ui.pIconNameLineEdit) ); if ( !pISItem || !ui.pIconNameLineEdit ) return; if ( pISItem->isDir() || pISItem->isLink() ) return; ui.pIconNameLineEdit->setText( pISItem->text() ); } // ------------------------------------------------------------------------------- void CIconSelectorDialog::setPathForComboBox() // ------------------------------------------------------------------------------- { QString sDir = mCurrentDir.absolutePath(); int iIndex = ui.pDirectoryComboBox->findText( sDir ); if ( -1 == iIndex ) { ui.pDirectoryComboBox->addItem( sDir ); iIndex = ui.pDirectoryComboBox->count() - 1;; } ui.pDirectoryComboBox->setCurrentIndex( iIndex ); } // ------------------------------------------------------------------------------- void CIconSelectorDialog::itemDoubleClicked( QListWidgetItem* pItem ) // ------------------------------------------------------------------------------- { CIconSelectorItem* pISItem = dynamic_cast( pItem ); Q_ASSERT( NULLPTR != pISItem ); if ( !pISItem ) return; if ( pISItem->isDir() ) { readDirectory( QDir( pISItem->filename() ) ); } else if ( pISItem->isLink() && QFileInfo( QFileInfo( pISItem->filename() ).readLink() ).isDir() ) { readDirectory( QDir( QFileInfo( pISItem->filename() ).readLink() ) ); } } // ------------------------------------------------------------------------------- void CIconSelectorDialog::progressBar_startReadDir( int iDirCount ) // ------------------------------------------------------------------------------- { if ( !ui.pProgressBar ) return; ui.pProgressBar->reset(); ui.pProgressBar->setMaximum( iDirCount ); ui.pProgressBar->setVisible( TRUE ); } // ------------------------------------------------------------------------------- void CIconSelectorDialog::progressBar_readNextDir() // ------------------------------------------------------------------------------- { if ( !ui.pProgressBar ) return; int i = ui.pProgressBar->value(); ui.pProgressBar->setValue( ++i ); } // ------------------------------------------------------------------------------- void CIconSelectorDialog::progressBar_readDirDone() // ------------------------------------------------------------------------------- { if ( !ui.pProgressBar ) return; ui.pProgressBar->setValue( ui.pProgressBar->maximum() ); ui.pProgressBar->setVisible( FALSE ); } /** * Reads the content of the given directory and displays it. */ // ------------------------------------------------------------------------------- void CIconSelectorDialog::readDirectory( const QDir& dir ) // ------------------------------------------------------------------------------- { if( !dir.isReadable() ) return; if( dir.isRoot() ) ui.pDirectoryUpButton->setEnabled( FALSE ); else ui.pDirectoryUpButton->setEnabled( TRUE ); ui.pList->clear(); directoryChanged( dir.absolutePath() ); const QFileInfoList& filist = dir.entryInfoList( QDir::NoFilter, QDir::DirsFirst | QDir::Name ); progressBar_startReadDir( filist.count() ); QListIterator it( filist ); QFileInfo fi; while( it.hasNext() ) { fi = it.next(); if( fi.fileName() == ".." && ( fi.absolutePath() == "/" || fi.absolutePath().isEmpty() ) ) continue; progressBar_readNextDir(); (void) new CIconSelectorItem( ui.pList, new QFileInfo( fi ) ); }//while progressBar_readDirDone(); } tuxcards/src/gui/dialogs/iconselectordialog/CIconSelectorDialog.h000555 000765 000024 00000004165 11420350116 025642 0ustar00alexstaff000000 000000 /*************************************************************************** CIconSelectorDialog.cpp - description ------------------- begin : Sun Jun 10 2007 copyright : (C) 2007 by Alexander Theel email : alex.theel@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #ifndef C_IconSelectorDialog_H #define C_IconSelectorDialog_H #include "../../../../output/ui/ui_ISelectorDialog.h" #include class CIconSelectorDialog : public QDialog { Q_OBJECT public: static CIconSelectorDialog* getInstance( QWidget* pParent ); QString getIconFileName() const; private slots: void cdUp(); void itemDoubleClicked( QListWidgetItem* pItem ); void fileSelected( QListWidgetItem* pItem ); private: CIconSelectorDialog( QWidget* pParent ); static CIconSelectorDialog* static_pInstance; void directoryChanged( const QString& ); void setPathForComboBox(); void readDirectory( const QDir& dir ); void progressBar_startReadDir( int iDirCount ); void progressBar_readNextDir(); void progressBar_readDirDone(); QDir mCurrentDir; Ui::ISelectorDialog ui; }; #endif tuxcards/src/gui/dialogs/iconselectordialog/CIconSelectorItem.cpp000444 000765 000024 00000011554 11420350116 025671 0ustar00alexstaff000000 000000 /*************************************************************************** CIconSelectorItem.cpp - description ------------------- begin : Sat Jun 16 2007 copyright : (C) 2007 by Alexander Theel email : alex.theel@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #include "CIconSelectorItem.h" #include "../../../global.h" #include #include #include #include #include static QPixmap *static_pIconFolderLocked = 0; static QPixmap *static_pIconFolder = 0; static QPixmap *static_pIconFile = 0; static QPixmap *static_pIconLink = 0; //static void cleanup() //{ // DELETE( static_pIconFolderLocked ); // DELETE( static_pIconFolder ); // DELETE( static_pIconFile ); // DELETE( static_pIconLink ); //} // ------------------------------------------------------------------------------- CIconSelectorItem::CIconSelectorItem( QListWidget* pParent, QFileInfo* pFI ) : QListWidgetItem( pParent ) , mpItemFileInfo( NULLPTR ) // ------------------------------------------------------------------------------- { createStaticIcons(); if ( pFI ) { setText( pFI->fileName() ); msItemFileName = pFI->filePath(); mpItemFileInfo = pFI; } if ( mpItemFileInfo && mpItemFileInfo->isSymLink() ) { // set font to italic QFont f( font() ); f.setItalic( TRUE ); setFont( f ); } setSizeHint( QSize( 60,60 ) ); setIcon(); } // ------------------------------------------------------------------------------- void CIconSelectorItem::createStaticIcons() // ------------------------------------------------------------------------------- { if ( !static_pIconFolderLocked ) { static_pIconFolderLocked = new QPixmap( QApplication::style()->standardIcon( QStyle::SP_DirClosedIcon ).pixmap(22,22) ); static_pIconFolder = new QPixmap( QApplication::style()->standardIcon( QStyle::SP_DirIcon ).pixmap(22,22) ); static_pIconFile = new QPixmap( QApplication::style()->standardIcon( QStyle::SP_FileIcon ).pixmap(22,22) ); static_pIconLink = new QPixmap( QApplication::style()->standardIcon( QStyle::SP_FileLinkIcon ).pixmap(22,22) ); } } // ------------------------------------------------------------------------------- bool CIconSelectorItem::isDir() const // ------------------------------------------------------------------------------- { if ( !mpItemFileInfo ) return FALSE; return mpItemFileInfo->isDir(); } // ------------------------------------------------------------------------------- bool CIconSelectorItem::isLink() const // ------------------------------------------------------------------------------- { if ( !mpItemFileInfo ) return FALSE; return mpItemFileInfo->isSymLink(); } // ------------------------------------------------------------------------------- void CIconSelectorItem::setIcon() // ------------------------------------------------------------------------------- { QPixmap* pPixmap = 0; // determine icon if ( isDir() ) { // directory if( !QDir(msItemFileName).isReadable() ) pPixmap = static_pIconFolderLocked; else pPixmap = static_pIconFolder; } else if ( isLink() ) { // link pPixmap = static_pIconLink; } else { // file QString s = msItemFileName.right(4).toLower(); if( (s==".xpm" || s==".gif" || s==".png" || s==".jpg" || s==".bmp" || s==".xbm" || s==".pnm" || s=="jpeg" || s==".mng" ) && QFile(msItemFileName).size()<10000 ) { pPixmap = new QPixmap(msItemFileName); } else { pPixmap = static_pIconFile; } } // if done ( icon selected or created ) Q_ASSERT( NULLPTR != pPixmap ); if ( !pPixmap ) return; QListWidgetItem::setIcon( QIcon( *pPixmap ) ); } // ------------------------------------------------------------------------------- CIconSelectorItem::~CIconSelectorItem() // ------------------------------------------------------------------------------- { DELETE( mpItemFileInfo ); } tuxcards/src/gui/dialogs/iconselectordialog/CIconSelectorItem.h000444 000765 000024 00000003264 11420350116 025335 0ustar00alexstaff000000 000000 /*************************************************************************** CIconSelectorItem.h - description ------------------- begin : Sat Jun 16 2007 copyright : (C) 2007 by Alexander Theel email : alex.theel@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #ifndef C_ICONSELECTORITEM_H #define C_ICONSELECTORITEM_H #include #include class QMimeSource; class QFileInfo; class CIconSelectorItem : public QListWidgetItem { public: CIconSelectorItem( QListWidget* pParent, QFileInfo* pFI ); virtual ~CIconSelectorItem(); QString filename() const { return msItemFileName; } bool isDir() const; bool isLink() const; protected: void setIcon(); QString msItemFileName; QFileInfo* mpItemFileInfo; private: void createStaticIcons(); }; #endif tuxcards/src/gui/dialogs/iconselectordialog/ISelectorDialog.ui000444 000765 000024 00000007650 11420350116 025224 0ustar00alexstaff000000 000000 ISelectorDialog 0 0 400 300 Select Icon true 9 6 0 6 60 16777215 Look in: true 30 16777215 ../../../../../../../../../opt/kde3/share/icons/default.kde/22x22/actions/up.png QListView::IconMode true 0 6 24 Qt::Horizontal Qt::Horizontal 40 20 Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::NoButton|QDialogButtonBox::Ok buttonBox accepted() ISelectorDialog accept() 248 254 157 274 buttonBox rejected() ISelectorDialog reject() 316 260 286 274 tuxcards/src/gui/dialogs/expiredElementsDialog/ExpiredElementsDialog.cpp000555 000765 000024 00000020554 11420350116 027202 0ustar00alexstaff000000 000000 /*************************************************************************** ExpiredElementsDialog.h - description ------------------- begin : Sat Jun 21 2003 copyright : (C) 2003 by Alexander Theel email : alex.theel@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #include "ExpiredElementsDialog.h" #include #include //Added by qt3to4: #include #include "../../../utilities/CIconManager.h" #define getIcon(x) CIconManager::getInstance().getIcon(x) #include "../propertyDialog/CPropertyDialog.h" #include // ------------------------------------------------------------------------------- ExpiredElementsDialog::ExpiredElementsDialog( QWidget* pParent ) : QDialog( pParent ) , mpCollection( NULLPTR ) , mContextMenu( pParent ) // ------------------------------------------------------------------------------- { setModal( TRUE ); ui.setupUi(this); connect( ui.pExpiryList, SIGNAL(clicked(Q3ListViewItem*)), this, SLOT(previewEntry(Q3ListViewItem*)) ); connect( ui.pRemoveFromListButton, SIGNAL(clicked()), this, SLOT(removeSelectedItemsFromDeletionList()) ); connect( ui.buttonOk, SIGNAL(clicked()), this, SLOT(deleteRemainingEntries()) ); // context menu mContextMenu.addAction( getIcon("changeProperty"), "Change Properties...",this, SLOT(slotChangeActiveElementProperties()) ); connect( ui.pExpiryList, SIGNAL(contextMenuRequested(Q3ListViewItem*,const QPoint&,int)),this, SLOT(slotShowContextMenu()) ); } // ------------------------------------------------------------------------------- int ExpiredElementsDialog::setUp( CInformationCollection* pCollection ) // ------------------------------------------------------------------------------- { if ( (NULLPTR == pCollection) || (NULLPTR == ui.pExpiryList) || (NULLPTR == ui.buttonOk) ) return 0; mpCollection = pCollection; expiredElementsMap.clear(); ui.pExpiryList->clear(); checkEntryForExpiryDate( mpCollection->getRootElement() ); if ( ui.pExpiryList->topLevelItemCount() > 0 ) { show(); return exec(); } else { return 0; } ui.buttonOk->setEnabled( true ); } // ------------------------------------------------------------------------------- void ExpiredElementsDialog::checkEntryForExpiryDate( CInformationElement* pElement ) // ------------------------------------------------------------------------------- { if ( NULLPTR == pElement ) return; if ( pElement->expires() ) { //std::cout<<"ExpiredElementsDialog::checkEntryForExpiryDate; found: "<getDescription()<getExpiryDate() < QDate::currentDate() ) { QTreeWidgetItem* pItem = new QTreeWidgetItem( ui.pExpiryList ); pItem->setText( 0, pElement->getDescription() ); pItem->setIcon( 0, QPixmap(pElement->getIconFileName()) ); expiredElementsMap.insert( pItem, pElement ); //std::cout<<"icon="<getIconFileName()<* pChildrenList = pElement->getChildren(); if ( pChildrenList ) { CInformationElement* x; for ( int i = 0; i < pChildrenList->count(); i++ ) { x = pChildrenList->at( i ); checkEntryForExpiryDate( x ); } } } // ------------------------------------------------------------------------------- void ExpiredElementsDialog::removeSelectedItemsFromDeletionList( void ) // ------------------------------------------------------------------------------- { if ( NULLPTR == ui.pExpiryList ) return; QList selectedItemList = ui.pExpiryList->selectedItems(); QTreeWidgetItem* pTreeItem; CInformationElement* pElement; while ( 0 < selectedItemList.count() ) { pTreeItem = selectedItemList.first(); if ( pTreeItem ) { pElement = expiredElementsMap.value( pTreeItem ); if ( pElement ) { pElement->setExpiryDate( false ); // remove expiry date } } expiredElementsMap.remove( pTreeItem ); // remove from dictionary DELETE( pTreeItem ); } clearPreview(); // if list is empty, disable the button if ( 0 == ui.pExpiryList->topLevelItemCount() ) { if ( ui.buttonOk ) ui.buttonOk->setEnabled( false ); } } // ------------------------------------------------------------------------------- // Removes everything from the preview. // ------------------------------------------------------------------------------- void ExpiredElementsDialog::clearPreview( void ) // ------------------------------------------------------------------------------- { ui.pElementIconLabel->setPixmap( QPixmap("") ); ui.pElementNameLabel->setText( "" ); ui.pChildCountLabel->setText( "-" ); ui.pTextEdit->clear(); } // ------------------------------------------------------------------------------- void ExpiredElementsDialog::previewEntry( QTreeWidgetItem* pItem ) // ------------------------------------------------------------------------------- { if ( NULLPTR == pItem ) return; CInformationElement* pElement = expiredElementsMap.value( pItem ); previewEntry( pElement ); } // ------------------------------------------------------------------------------- void ExpiredElementsDialog::previewEntry( CInformationElement* pElement ) // ------------------------------------------------------------------------------- { if ( NULLPTR == pElement ) return; ui.pElementIconLabel->setPixmap( QPixmap(pElement->getIconFileName()) ); ui.pElementNameLabel->setText( pElement->getDescription() ); ui.pChildCountLabel->setText( QString::number( pElement->childCount() ) ); if ( pElement->getInformationFormat()->equals( InformationFormat::ASCII ) ) ui.pTextEdit->setPlainText( pElement->getInformation() ); else ui.pTextEdit->setHtml( pElement->getInformation() ); } // ------------------------------------------------------------------------------- void ExpiredElementsDialog::deleteRemainingEntries( void ) // ------------------------------------------------------------------------------- { //std::cout<<"ExpiredElementsDialog::deleteRemainingEntries()"<topLevelItemCount() ) { pX = ui.pExpiryList->topLevelItem( 0 ); CInformationElement* pElement = expiredElementsMap.value( pX ); // It could be the case that the parent of this element was deleted // before. Hence this element does not exist anymore. if ( pElement ) { pElement->deleteSelf(); // remove "actual" information element from collection } } } // ------------------------------------------------------------------------------- void ExpiredElementsDialog::slotShowContextMenu() // ------------------------------------------------------------------------------- { mContextMenu.popup( QCursor::pos() ); } // ------------------------------------------------------------------------------- void ExpiredElementsDialog::slotChangeActiveElementProperties() // ------------------------------------------------------------------------------- { if ( !ui.pExpiryList ) return; QTreeWidgetItem* pCurrentItem = ui.pExpiryList->currentItem(); if ( !pCurrentItem ) return; CPropertyDialog* pDialog = CPropertyDialog::getInstance(); if ( !pDialog ) return; CInformationElement* pElement = expiredElementsMap.value( pCurrentItem ); Q_ASSERT( NULLPTR != pElement ); pDialog->setUp( pElement, CPropertyDialog::MODE_CHANGE_PROPERTIES ); } tuxcards/src/gui/dialogs/expiredElementsDialog/ExpiredElementsDialog.h000555 000765 000024 00000004062 11420350116 026643 0ustar00alexstaff000000 000000 /*************************************************************************** ExpiredElementsDialog.h - description ------------------- begin : Sat Jun 21 2003 copyright : (C) 2003 by Alexander Theel email : alex.theel@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #ifndef EXPIRED_ELEMENTS_DIALOG_H #define EXPIRED_ELEMENTS_DIALOG_H #include "ExpiredElementsDialogInterface.h" #include "../../../information/CInformationCollection.h" #include #include #include class ExpiredElementsDialog : public QDialog { Q_OBJECT public: ExpiredElementsDialog( QWidget* pParent ); int setUp( CInformationCollection* pCollection ); private slots: void removeSelectedItemsFromDeletionList( void ); void previewEntry( QTreeWidgetItem* pItem ); void previewEntry( CInformationElement* pElement ); void deleteRemainingEntries( void ); void slotShowContextMenu(); void slotChangeActiveElementProperties(); private: // The ui-element. Ui::ExpiredElementsDialogInterface ui; // Other private members. CInformationCollection* mpCollection; QHash expiredElementsMap; QMenu mContextMenu; void checkEntryForExpiryDate( CInformationElement* pElement ); void clearPreview( void ); }; #endif tuxcards/src/gui/dialogs/expiredElementsDialog/ExpiredElementsDialogInterface.h000444 000765 000024 00000020427 11420350116 030464 0ustar00alexstaff000000 000000 #ifndef EXPIREDELEMENTSDIALOGINTERFACE_H #define EXPIREDELEMENTSDIALOGINTERFACE_H #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include class Ui_ExpiredElementsDialogInterface { public: QWidget *widget; QVBoxLayout *vboxLayout; QLabel *textLabel1; QHBoxLayout *hboxLayout; QTreeWidget *pExpiryList; QVBoxLayout *vboxLayout1; QPushButton *pRemoveFromListButton; QSpacerItem *spacerItem; QLabel *textLabel6_2_2_2_2_2_2; QGroupBox *groupBox; QHBoxLayout *hboxLayout1; QVBoxLayout *vboxLayout2; QHBoxLayout *hboxLayout2; QLabel *pElementIconLabel; QLabel *pElementNameLabel; QSpacerItem *spacerItem1; QLabel *textLabel4; QLabel *pChildCountLabel; QTextEdit *pTextEdit; QHBoxLayout *hboxLayout3; QSpacerItem *spacerItem2; QPushButton *buttonOk; QPushButton *buttonCancel; void setupUi(QDialog *ExpiredElementsDialogInterface) { ExpiredElementsDialogInterface->setObjectName(QString::fromUtf8("ExpiredElementsDialogInterface")); ExpiredElementsDialogInterface->resize(QSize(449, 450).expandedTo(ExpiredElementsDialogInterface->minimumSizeHint())); ExpiredElementsDialogInterface->setSizeGripEnabled(true); widget = new QWidget(ExpiredElementsDialogInterface); widget->setObjectName(QString::fromUtf8("widget")); widget->setGeometry(QRect(9, 29, 431, 139)); vboxLayout = new QVBoxLayout(ExpiredElementsDialogInterface); vboxLayout->setSpacing(6); vboxLayout->setMargin(8); vboxLayout->setObjectName(QString::fromUtf8("vboxLayout")); textLabel1 = new QLabel(ExpiredElementsDialogInterface); textLabel1->setObjectName(QString::fromUtf8("textLabel1")); QFont font; font.setFamily(QString::fromUtf8("")); font.setPointSize(12); font.setBold(false); font.setItalic(false); font.setUnderline(false); font.setWeight(50); font.setStrikeOut(false); textLabel1->setFont(font); textLabel1->setAlignment(Qt::AlignCenter); vboxLayout->addWidget(textLabel1); hboxLayout = new QHBoxLayout(); hboxLayout->setSpacing(6); hboxLayout->setMargin(0); hboxLayout->setObjectName(QString::fromUtf8("hboxLayout")); pExpiryList = new QTreeWidget(ExpiredElementsDialogInterface); pExpiryList->setObjectName(QString::fromUtf8("pExpiryList")); pExpiryList->setMinimumSize(QSize(200, 0)); hboxLayout->addWidget(pExpiryList); vboxLayout1 = new QVBoxLayout(); vboxLayout1->setSpacing(6); vboxLayout1->setMargin(11); vboxLayout1->setObjectName(QString::fromUtf8("vboxLayout1")); pRemoveFromListButton = new QPushButton(ExpiredElementsDialogInterface); pRemoveFromListButton->setObjectName(QString::fromUtf8("pRemoveFromListButton")); vboxLayout1->addWidget(pRemoveFromListButton); spacerItem = new QSpacerItem(20, 40, QSizePolicy::Minimum, QSizePolicy::Expanding); vboxLayout1->addItem(spacerItem); textLabel6_2_2_2_2_2_2 = new QLabel(ExpiredElementsDialogInterface); textLabel6_2_2_2_2_2_2->setObjectName(QString::fromUtf8("textLabel6_2_2_2_2_2_2")); vboxLayout1->addWidget(textLabel6_2_2_2_2_2_2); hboxLayout->addLayout(vboxLayout1); vboxLayout->addLayout(hboxLayout); groupBox = new QGroupBox(ExpiredElementsDialogInterface); groupBox->setObjectName(QString::fromUtf8("groupBox")); hboxLayout1 = new QHBoxLayout(groupBox); hboxLayout1->setSpacing(6); hboxLayout1->setMargin(8); hboxLayout1->setObjectName(QString::fromUtf8("hboxLayout1")); vboxLayout2 = new QVBoxLayout(); vboxLayout2->setSpacing(6); vboxLayout2->setMargin(0); vboxLayout2->setObjectName(QString::fromUtf8("vboxLayout2")); hboxLayout2 = new QHBoxLayout(); hboxLayout2->setSpacing(6); hboxLayout2->setMargin(11); hboxLayout2->setObjectName(QString::fromUtf8("hboxLayout2")); pElementIconLabel = new QLabel(groupBox); pElementIconLabel->setObjectName(QString::fromUtf8("pElementIconLabel")); hboxLayout2->addWidget(pElementIconLabel); pElementNameLabel = new QLabel(groupBox); pElementNameLabel->setObjectName(QString::fromUtf8("pElementNameLabel")); hboxLayout2->addWidget(pElementNameLabel); spacerItem1 = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum); hboxLayout2->addItem(spacerItem1); textLabel4 = new QLabel(groupBox); textLabel4->setObjectName(QString::fromUtf8("textLabel4")); hboxLayout2->addWidget(textLabel4); pChildCountLabel = new QLabel(groupBox); pChildCountLabel->setObjectName(QString::fromUtf8("pChildCountLabel")); hboxLayout2->addWidget(pChildCountLabel); vboxLayout2->addLayout(hboxLayout2); pTextEdit = new QTextEdit(groupBox); pTextEdit->setObjectName(QString::fromUtf8("pTextEdit")); pTextEdit->setReadOnly(true); vboxLayout2->addWidget(pTextEdit); hboxLayout1->addLayout(vboxLayout2); vboxLayout->addWidget(groupBox); hboxLayout3 = new QHBoxLayout(); hboxLayout3->setSpacing(6); hboxLayout3->setMargin(0); hboxLayout3->setObjectName(QString::fromUtf8("hboxLayout3")); spacerItem2 = new QSpacerItem(20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum); hboxLayout3->addItem(spacerItem2); buttonOk = new QPushButton(ExpiredElementsDialogInterface); buttonOk->setObjectName(QString::fromUtf8("buttonOk")); buttonOk->setAutoDefault(true); buttonOk->setDefault(true); hboxLayout3->addWidget(buttonOk); buttonCancel = new QPushButton(ExpiredElementsDialogInterface); buttonCancel->setObjectName(QString::fromUtf8("buttonCancel")); buttonCancel->setAutoDefault(true); hboxLayout3->addWidget(buttonCancel); vboxLayout->addLayout(hboxLayout3); retranslateUi(ExpiredElementsDialogInterface); QMetaObject::connectSlotsByName(ExpiredElementsDialogInterface); } // setupUi void retranslateUi(QDialog *ExpiredElementsDialogInterface) { ExpiredElementsDialogInterface->setWindowTitle(QApplication::translate("ExpiredElementsDialogInterface", "TuxCards")); textLabel1->setText(QApplication::translate("ExpiredElementsDialogInterface", "TuxCards - Removing Expired Entries")); pRemoveFromListButton->setToolTip(QApplication::translate("ExpiredElementsDialogInterface", "Removes the selected elements from the list and removes their expiry date.")); pRemoveFromListButton->setText(QApplication::translate("ExpiredElementsDialogInterface", "&Remove from List")); textLabel6_2_2_2_2_2_2->setText(QApplication::translate("ExpiredElementsDialogInterface", "Please note: If an entry is removed\n" "all children are removed as well.")); groupBox->setTitle(QApplication::translate("ExpiredElementsDialogInterface", "Entry Preview")); pElementIconLabel->setText(QApplication::translate("ExpiredElementsDialogInterface", "")); pElementNameLabel->setText(QApplication::translate("ExpiredElementsDialogInterface", "Entry Name")); textLabel4->setText(QApplication::translate("ExpiredElementsDialogInterface", "Number of Children:")); pChildCountLabel->setText(QApplication::translate("ExpiredElementsDialogInterface", "0")); buttonOk->setToolTip(QApplication::translate("ExpiredElementsDialogInterface", "Deletes all elements that are still within the list above.")); buttonOk->setText(QApplication::translate("ExpiredElementsDialogInterface", "&Delete All Expired Entries")); buttonOk->setShortcut(QApplication::translate("ExpiredElementsDialogInterface", "Alt+D")); buttonCancel->setToolTip(QApplication::translate("ExpiredElementsDialogInterface", "Leaves this dialog without removing any element.")); buttonCancel->setText(QApplication::translate("ExpiredElementsDialogInterface", "&Close")); buttonCancel->setShortcut(QApplication::translate("ExpiredElementsDialogInterface", "Alt+C")); Q_UNUSED(ExpiredElementsDialogInterface); } // retranslateUi }; namespace Ui { class ExpiredElementsDialogInterface: public Ui_ExpiredElementsDialogInterface {}; } // namespace Ui #endif // EXPIREDELEMENTSDIALOGINTERFACE_H tuxcards/src/gui/dialogs/expiredElementsDialog/ExpiredElementsDialogInterface.ui000555 000765 000024 00000016327 11420350116 030661 0ustar00alexstaff000000 000000 ExpiredElementsDialogInterface 0 0 449 450 TuxCards true 8 6 12 50 false false false false TuxCards - Removing Expired Entries Qt::AlignCenter 0 6 200 0 11 6 Removes the selected elements from the list and removes their expiry date. &Remove from List Qt::Vertical QSizePolicy::Expanding 20 40 <i>Please note: If an entry is removed all children are removed as well.</i> Entry Preview 8 6 0 6 11 6 Entry Name Qt::Horizontal QSizePolicy::Expanding 40 20 Number of Children: 0 true 0 6 Qt::Horizontal QSizePolicy::Expanding 20 20 Deletes all elements that are still within the list above. &Delete All Expired Entries Alt+D true true Leaves this dialog without removing any element. &Close Alt+C true 9 29 431 139 qPixmapFromMimeSource tuxcards/src/gui/dialogs/dateInputDialog/CDateInputDialog.cpp000444 000765 000024 00000006660 11420350116 024704 0ustar00alexstaff000000 000000 /*************************************************************************** CDateInputDialog.cpp - description ------------------- begin : Fri Jun 08 2007 copyright : (C) 2007 by Alexander Theel email : alex.theel@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #include "CDateInputDialog.h" #include "../../../global.h" CDateInputDialog* CDateInputDialog::static_pInstance = NULLPTR; // ------------------------------------------------------------------------------- CDateInputDialog::CDateInputDialog( QWidget* pParent ) : QDialog( pParent ) // ------------------------------------------------------------------------------- { ui.setupUi( this ); setModal( TRUE ); } // ------------------------------------------------------------------------------- CDateInputDialog::~CDateInputDialog() // ------------------------------------------------------------------------------- { } /** * Creates a date input dialog instance with the given widget as parent. * This method should be called only once for the lifetime of the application. * Further calls are ignored. */ // ------------------------------------------------------------------------------- void CDateInputDialog::createInstance( QWidget* pParent ) // ------------------------------------------------------------------------------- { if ( !static_pInstance ) { static_pInstance = new CDateInputDialog( pParent ); } } /** * Returns the static instance. * If no date input dialog was created with createInstance(), * then a NULLPTR is returned. */ // ------------------------------------------------------------------------------- CDateInputDialog* CDateInputDialog::getInstance() // ------------------------------------------------------------------------------- { Q_ASSERT( NULLPTR != static_pInstance ); return static_pInstance; } // ------------------------------------------------------------------------------- void CDateInputDialog::setUp( const QDate& initialDate ) // ------------------------------------------------------------------------------- { ui.mpCalendarWidget->setFirstDayOfWeek( Qt::Monday ); QDate currentDate = QDate::currentDate(); ui.mpCalendarWidget->setMinimumDate( currentDate ); if ( initialDate < currentDate ) ui.mpCalendarWidget->setSelectedDate( currentDate /*.addDays( DEFAULT_DURATION )*/ ); else ui.mpCalendarWidget->setSelectedDate( initialDate ); show(); // exec(); } // ------------------------------------------------------------------------------- QDate CDateInputDialog::getSelectedDate() const // ------------------------------------------------------------------------------- { return ui.mpCalendarWidget->selectedDate(); } tuxcards/src/gui/dialogs/dateInputDialog/CDateInputDialog.h000444 000765 000024 00000003174 11420350116 024346 0ustar00alexstaff000000 000000 /*************************************************************************** CDateInputDialog.h - description ------------------- begin : Fri Jun 08 2007 copyright : (C) 2007 by Alexander Theel email : alex.theel@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #ifndef C_DATE_INPUT_DIALOG_H #define C_DATE_INPUT_DIALOG_H #include "../../../../output/ui/ui_IDateInputDialog.h" class CDateInputDialog : public QDialog { Q_OBJECT public: ~CDateInputDialog(); static void createInstance( QWidget* pParent ); static CDateInputDialog* getInstance(); void setUp( const QDate& initialDate = QDate::currentDate() ); QDate getSelectedDate() const; private: CDateInputDialog( QWidget* pParent ); static CDateInputDialog* static_pInstance; //#define DEFAULT_DURATION 1 Ui::IDateInputDialog ui; }; #endif tuxcards/src/gui/dialogs/dateInputDialog/IDateInputDialog.ui000444 000765 000024 00000005230 11420350116 024535 0ustar00alexstaff000000 000000 IDateInputDialog Qt::WindowModal 0 0 247 223 Set Expiry Date Dialog 9 6 0 6 Qt::NonModal Qt::Monday Qt::Horizontal 40 20 Qt::Vertical 20 40 Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::NoButton|QDialogButtonBox::Ok buttonBox accepted() IDateInputDialog accept() 248 254 157 274 buttonBox rejected() IDateInputDialog reject() 316 260 286 274 tuxcards/src/gui/dialogs/configurationDialog/CConfigurationDialog.cpp000555 000765 000024 00000047435 11420350116 026540 0ustar00alexstaff000000 000000 /*************************************************************************** CConfigurationDialog.cpp - description ------------------- begin : Sun Aug 12 2007 copyright : (C) 2007 by Alexander Theel email : alex.theel@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #include "CConfigurationDialog.h" #include "../../cactusbar/CCactusBar.h" #include #include #include #include #include "../../../global.h" // ------------------------------------------------------------------------------- CConfigurationDialog::CConfigurationDialog( QWidget* parent, CTuxCardsConfiguration& config ) : QDialog( parent ) , mpCactusBarPreview( NULLPTR ) , mrefConfig( config ) // ------------------------------------------------------------------------------- { ui.setupUi(this); addCactusBarToDialog(); // do not use the lineBreak mode stuff, this is not needed ui.mpLineBreakGroupBox->setVisible( FALSE ); setModal( TRUE ); connect( ui.mpTopColorButton, SIGNAL(clicked()), this, SLOT(slotChangeTopColor()) ); connect( ui.mpBottomColorButton, SIGNAL(clicked()), this, SLOT(slotChangeBottomColor()) ); connect( ui.mpTextColorButton, SIGNAL(clicked()), this, SLOT(slotChangeTextColor()) ); connect( ui.mpChangeTreeFontButton, SIGNAL(clicked()), this, SLOT(slotChangeTreeFont()) ); connect( ui.mpChangeEditorFontButton, SIGNAL(clicked()), this, SLOT(slotChangeEditorFont()) ); connect( this, SIGNAL(accepted()), this, SLOT(changeProperties()) ); // TODO: ToolTips are still missing within the configuration dialog. } // ------------------------------------------------------------------------------- void CConfigurationDialog::addCactusBarToDialog() // ------------------------------------------------------------------------------- { QHBoxLayout* pLayout = new QHBoxLayout(); pLayout->setContentsMargins ( 0,0,9,0 ); // TODO: The calculation of the // CColorBar width and thus // the painting of it is not // yet correct. ui.mpPlaceHolder->setLayout( pLayout ); //CColorBar* pCB = new CColorBar( 0, QColor(0,0,0),QColor(33,72,170), "Tux","Cards"); mpCactusBarPreview = new CCactusBar( 0, QColor(0,0,0),QColor(33,72,170), "Tux","Cards"); pLayout->addWidget( mpCactusBarPreview ); connect( ui.mpEnableCactusBar, SIGNAL(toggled(bool)), this, SLOT(slotToggleCactusPreview(bool)) ); connect( ui.mpFirstTextLineLineEdit, SIGNAL(editingFinished()), this, SLOT(slotApplyChangesToCactusBarPreview()) ); connect( ui.mpSecondTextLineLineEdit, SIGNAL(editingFinished()), this, SLOT(slotApplyChangesToCactusBarPreview()) ); // TODO: If the horizontal text is turned off, then it is still shown within // the preview. // TODO: The vertical text is not shown within the preview. } // ------------------------------------------------------------------------------- int CConfigurationDialog::setUp() // ------------------------------------------------------------------------------- { ui.mpAutoSaveCheckBox ->setChecked( mrefConfig.getBoolValue( CTuxCardsConfiguration::B_AUTOSAVE ) ); ui.mpSaveMinutesLineEdit ->setText( QString::number(mrefConfig.getIntValue( CTuxCardsConfiguration::I_SAVE_ALL_MINUTES )) ); ui.mpSaveWhenQuittingCheckBox->setChecked( mrefConfig.getBoolValue( CTuxCardsConfiguration::B_SAVE_WHEN_LEAVING ) ); ui.mpCreateBackupFileCheckBox->setChecked( mrefConfig.getBoolValue( CTuxCardsConfiguration::B_CREATE_BACKUP_FILE ) ); QString sCommand = mrefConfig.getStringValue( CTuxCardsConfiguration::S_EXECUTE_STATEMENT ); ui.mpExecuteCommandGroupBox->setChecked( !sCommand.isEmpty() ); ui.mpCommandLineEdit ->setText( sCommand ); ui.mpIconDirectoryLineEdit ->setText( mrefConfig.getStringValue( CTuxCardsConfiguration::S_ICON_DIR ) ); ui.mpAutoEncryptCheckBox ->setChecked( mrefConfig.getBoolValue( CTuxCardsConfiguration::B_AUTOENCRYPT_ENTRY ) ); ui.mpTopColorButton ->setPalette( mrefConfig.getTopColor() ); ui.mpBottomColorButton ->setPalette( mrefConfig.getBottomColor() ); ui.mpHorizontalTextEnabled ->setChecked( mrefConfig.getBoolValue( CTuxCardsConfiguration::B_IS_HTEXT_ENABLED ) ); ui.mpFirstTextLineLineEdit ->setText( mrefConfig.getStringValue( CTuxCardsConfiguration::S_TEXT_ONE ) ); ui.mpSecondTextLineLineEdit->setText( mrefConfig.getStringValue( CTuxCardsConfiguration::S_TEXT_TWO ) ); // barTextColor QPalette p = ui.mpTextColorButton->palette(); p.setColor( QPalette::ButtonText, mrefConfig.getFontColor() ); ui.mpTextColorButton->setPalette( p ); ui.mpVerticalTextEnabled ->setChecked(mrefConfig.getBoolValue( CTuxCardsConfiguration::B_IS_VTEXT_ENABLED ) ); ui.mpVerticalTextLineLineEdit->setText(mrefConfig.getStringValue( CTuxCardsConfiguration::S_VERTICAL_TEXT ) ); if ( CColorBar::ALIGN_TOP == mrefConfig.getBoolValue( CTuxCardsConfiguration::B_ALIGN_VTEXT ) ) ui.mpAlineTop ->setChecked(true); else ui.mpAlineBottom->setChecked(true); ui.mpEnableCactusBar ->setChecked( mrefConfig.getBoolValue(CTuxCardsConfiguration::B_IS_CACTUSBAR_ENABLED ) ); slotToggleCactusPreview( mrefConfig.getBoolValue(CTuxCardsConfiguration::B_IS_CACTUSBAR_ENABLED ) ); ui.mpFlowerDirectoryLineEdit ->setText( mrefConfig.getStringValue( CTuxCardsConfiguration::S_FLOWER_DIR ) ); slotApplyChangesToCactusBarPreview(); //TODO: Eventually, the font settings are not needed any more within qt4. QFont treeFont = mrefConfig.getTreeFont().toFont(); ui.mpTreeFontExample ->setFont( treeFont ); ui.mpTreeFontExample ->setText( calculateFontString(treeFont) ); ui.mpEditorFontExample->setFont( mrefConfig.getEditorFont().toFont() ); ui.mpEditorFontExample->setText( mrefConfig.getEditorFont().toFont().rawName().section(':', 0,0) ); QFont editorFont = mrefConfig.getEditorFont().toFont(); ui.mpEditorFontExample->setFont( editorFont ); ui.mpEditorFontExample->setText( calculateFontString(editorFont) ); ui.mpTabSizeLineEdit ->setText( QString::number(mrefConfig.getIntValue( CTuxCardsConfiguration::I_TAB_SIZE )) ); // 'iWordWrap' is a non-negative number; 0 means noWrap, 1 means widgetWrap, // 'iWordWrap' >1 mean wrap at column 'iWordWrap' int iWordWrap = mrefConfig.getIntValue( CTuxCardsConfiguration::I_WORD_WRAP ); switch ( iWordWrap ) { case 0: ui.mpNoWordWrap->setChecked( true ); break; case 1: ui.mpWindowWidthWrap->setChecked( true ); break; default: ui.mpColumnWrap->setChecked( true ); ui.mpWrapAtColumnLineEdit->setText( QString::number(iWordWrap) ); break; }; // linebreak if ( mrefConfig.getBoolValue( CTuxCardsConfiguration::B_LINEBREAK_WITH_CTRL_SHIFT ) ) { ui.mpEnableLineBreakWithCtrlShift->setChecked(true); } else { ui.mpEnableLineBreakWithoutCtrlShift->setChecked(true); } show(); return exec(); } /** * This method is called whenever the ok-button is pressed. * Then all changes are set with the configuratio-object. The mainwindow * is also informed about the clicking of the ok-button and adjusts * own things. */ // ------------------------------------------------------------------------------- void CConfigurationDialog::changeProperties() // ------------------------------------------------------------------------------- { mrefConfig.setBoolValue( CTuxCardsConfiguration::B_AUTOSAVE, getAutosave() ); mrefConfig.setIntValue( CTuxCardsConfiguration::I_SAVE_ALL_MINUTES, getMinutes()); mrefConfig.setBoolValue( CTuxCardsConfiguration::B_SAVE_WHEN_LEAVING, getSaveWhenLeaving() ); mrefConfig.setBoolValue( CTuxCardsConfiguration::B_CREATE_BACKUP_FILE,getCreateBackup() ); if ( ui.mpExecuteCommandGroupBox && ui.mpExecuteCommandGroupBox->isChecked() ) mrefConfig.setStringValue( CTuxCardsConfiguration::S_EXECUTE_STATEMENT, ui.mpCommandLineEdit->text() ); else mrefConfig.setStringValue( CTuxCardsConfiguration::S_EXECUTE_STATEMENT, "" ); mrefConfig.setStringValue( CTuxCardsConfiguration::S_ICON_DIR, ui.mpIconDirectoryLineEdit->text() ); mrefConfig.setBoolValue( CTuxCardsConfiguration::B_AUTOENCRYPT_ENTRY, ui.mpAutoEncryptCheckBox->isChecked() ); mrefConfig.setTopColor( getTopColor() ); mrefConfig.setBottomColor( getBottomColor() ); mrefConfig.setBoolValue( CTuxCardsConfiguration::B_IS_HTEXT_ENABLED, getEnableHText() ); mrefConfig.setStringValue( CTuxCardsConfiguration::S_TEXT_ONE, getTextOne() ); mrefConfig.setStringValue( CTuxCardsConfiguration::S_TEXT_TWO, getTextTwo() ); mrefConfig.setFontColor( getBarTextColor() ); mrefConfig.setBoolValue( CTuxCardsConfiguration::B_IS_VTEXT_ENABLED, getEnableVText() ); mrefConfig.setStringValue( CTuxCardsConfiguration::S_VERTICAL_TEXT, getVerticalText()); mrefConfig.setBoolValue( CTuxCardsConfiguration::B_ALIGN_VTEXT, getAlignVText() ); mrefConfig.setBoolValue( CTuxCardsConfiguration::B_IS_CACTUSBAR_ENABLED, getEnableCactusBar() ); mrefConfig.setStringValue( CTuxCardsConfiguration::S_FLOWER_DIR, getFlowerDir()); // editor-font QFont f = getEditorFont(); QString FONT_FAMILY =f.family(); int FONT_SIZE =f.pointSize(); bool FONT_BOLD =f.bold(); bool FONT_ITALIC =f.italic(); bool FONT_UNDERLINE =f.underline(); bool FONT_STRIKEOUT =f.strikeOut(); FontSettings fontSettingsEditor( FONT_FAMILY, FONT_SIZE, FONT_BOLD, FONT_ITALIC, FONT_UNDERLINE, FONT_STRIKEOUT ); mrefConfig.setEditorFont( fontSettingsEditor ); // tree-font f = getTreeFont(); FONT_FAMILY =f.family(); FONT_SIZE =f.pointSize(); FONT_BOLD =f.bold(); FONT_ITALIC =f.italic(); FONT_UNDERLINE =f.underline(); FONT_STRIKEOUT =f.strikeOut(); FontSettings fontSettingsTree( FONT_FAMILY, FONT_SIZE, FONT_BOLD, FONT_ITALIC, FONT_UNDERLINE, FONT_STRIKEOUT ); mrefConfig.setTreeFont( fontSettingsTree ); mrefConfig.setIntValue( CTuxCardsConfiguration::I_TAB_SIZE, getTabSize() ); mrefConfig.setIntValue( CTuxCardsConfiguration::I_WORD_WRAP, getLineWrap() ); mrefConfig.setBoolValue( CTuxCardsConfiguration::B_LINEBREAK_WITH_CTRL_SHIFT, ui.mpEnableLineBreakWithCtrlShift->isChecked() ); // done mrefConfig.saveToFile(); emit configurationChanged(); } // ------------------------------------------------------------------------------- bool CConfigurationDialog::getAutosave(){ return ui.mpAutoSaveCheckBox->isChecked(); } // ------------------------------------------------------------------------------- // ------------------------------------------------------------------------------- int CConfigurationDialog::getMinutes() // ------------------------------------------------------------------------------- { int iMinutes = ui.mpSaveMinutesLineEdit->text().toInt(); if ( 0 > iMinutes ) return 0; return iMinutes; } bool CConfigurationDialog::getSaveWhenLeaving(){ return ui.mpSaveWhenQuittingCheckBox->isChecked(); } bool CConfigurationDialog::getCreateBackup(){ return ui.mpCreateBackupFileCheckBox->isChecked(); } QColor CConfigurationDialog::getTopColor(){ return ui.mpTopColorButton->palette().color( QPalette::Window ); } QColor CConfigurationDialog::getBottomColor(){ return ui.mpBottomColorButton->palette().color( QPalette::Window ); } QColor CConfigurationDialog::getBarTextColor(){ return ui.mpTextColorButton->palette().buttonText().color(); } bool CConfigurationDialog::getEnableHText(){ return ui.mpHorizontalTextEnabled->isChecked(); } QString CConfigurationDialog::getTextOne(){ return ui.mpFirstTextLineLineEdit->text(); } QString CConfigurationDialog::getTextTwo(){ return ui.mpSecondTextLineLineEdit->text(); } bool CConfigurationDialog::getEnableVText(){ return ui.mpVerticalTextEnabled->isChecked();} QString CConfigurationDialog::getVerticalText(){ return ui.mpVerticalTextLineLineEdit->text(); } bool CConfigurationDialog::getAlignVText(){ return ui.mpAlineBottom->isChecked(); } /** * returns 'true' if the cactusbar should be used * otherwise(the colorbar is selected) 'false' is returned */ // ------------------------------------------------------------------------------- bool CConfigurationDialog::getEnableCactusBar() // ------------------------------------------------------------------------------- { if(ui.mpEnableCactusBar->isChecked()) return true; else return false; } // ------------------------------------------------------------------------------- QString CConfigurationDialog::getFlowerDir() // ------------------------------------------------------------------------------- { QString s = ui.mpFlowerDirectoryLineEdit->text(); if ( s.right(1) != "/" ) s+="/"; // make the directory ends with '/' return s; } QFont CConfigurationDialog::getTreeFont(){ return ui.mpTreeFontExample->font(); } QFont CConfigurationDialog::getEditorFont(){ return ui.mpEditorFontExample->font(); } int CConfigurationDialog::getTabSize(){ return ui.mpTabSizeLineEdit->text().toInt(); } // ------------------------------------------------------------------------------- int CConfigurationDialog::getLineWrap() // ------------------------------------------------------------------------------- { if ( ui.mpNoWordWrap->isChecked() ) return 0; else if ( ui.mpWindowWidthWrap->isChecked() ) return 1; else { return ui.mpWrapAtColumnLineEdit->text().toInt(); } } //void CConfigurationDialog::autosave(){ // if (autosave->isChecked()){ // saveMinutes->setEnabled(true); label->setEnabled(true); // }else{ // saveMinutes->setEnabled(false); label->setEnabled(false); // } //} /** * Select a color from the colorDialog for 'topColor'. */ // ------------------------------------------------------------------------------- void CConfigurationDialog::slotChangeTopColor() // ------------------------------------------------------------------------------- { QColor c = QColorDialog::getColor( ui.mpTopColorButton->palette().color( QPalette::Button ) ); if( !c.isValid() ) return; ui.mpTopColorButton->setPalette( QPalette(c, c) ); slotApplyChangesToCactusBarPreview(); } /** * Select a color from the colorDialog for 'bottomColor'. */ // ------------------------------------------------------------------------------- void CConfigurationDialog::slotChangeBottomColor() // ------------------------------------------------------------------------------- { QColor c = QColorDialog::getColor( ui.mpBottomColorButton->palette().color( QPalette::Button ) ); if( !c.isValid() ) return; ui.mpBottomColorButton->setPalette( QPalette(c, c) ); slotApplyChangesToCactusBarPreview(); } /** * Select a color from the colorDialog for 'textColor' of the "ColorBarText". */ // ------------------------------------------------------------------------------- void CConfigurationDialog::slotChangeTextColor() // ------------------------------------------------------------------------------- { QColor c = QColorDialog::getColor( ui.mpTextColorButton->palette().color( QPalette::ButtonText ) ); if( !c.isValid() ) return; QPalette p = ui.mpTextColorButton->palette(); p.setColor( QPalette::ButtonText, c ); ui.mpTextColorButton->setPalette( p ); slotApplyChangesToCactusBarPreview(); } /** * calls the fontdialog and changes the option for the font of the * tuxcards-tree if necessary */ // ------------------------------------------------------------------------------- void CConfigurationDialog::slotChangeTreeFont() // ------------------------------------------------------------------------------- { bool bOk; QFont f = QFontDialog::getFont( &bOk, ui.mpTreeFontExample->font(), this, "Select Tree Font"); // a valid font was selected if ( bOk ) { ui.mpTreeFontExample->setFont( f ); ui.mpTreeFontExample->setText( calculateFontString(f) ); } } /** * calls the fontdialog and changes the option for the font of the * tuxcards-editor if necessary */ // ------------------------------------------------------------------------------- void CConfigurationDialog::slotChangeEditorFont() // ------------------------------------------------------------------------------- { bool bOk; QFont f = QFontDialog::getFont( &bOk, ui.mpEditorFontExample->font(), this ); // a valid font was selected if( bOk ) { ui.mpEditorFontExample->setFont( f ); ui.mpEditorFontExample->setText( calculateFontString(f) ); } } /** * Calculate a string from a given font. This string can be presented within * the dialog. */ // ------------------------------------------------------------------------------- QString CConfigurationDialog::calculateFontString( const QFont& f ) const // ------------------------------------------------------------------------------- { return f.family() + " - Size " + QString::number( f.pointSize() ); } /** * opens a dialog and lets the user select a directory; the result is * written in 'flowerDir' */ // ------------------------------------------------------------------------------- void CConfigurationDialog::chooseFlowerDir() // ------------------------------------------------------------------------------- { QString s = QFileDialog::getExistingDirectory( this, "Select a Flower-Directory", getFlowerDir() ); if( s.isEmpty() ) return; ui.mpFlowerDirectoryLineEdit->setText(s); // TODO: The flower directory is not really used yet. } //void CConfigurationDialog::setDefaults(){ // autosaveCheckBox->setChecked(true); // saveMinutes->setText(QString::number(15)); saveMinutes->setEnabled(true); // saveWhenLeaving->setChecked(false); label->setEnabled(true); // // topColor->setPalette(QColor(0,0,0)); // bottomColor->setPalette(QColor(143,0,0)); // textOne->setText("Tux"); // textTwo->setText("Cards"); //} /** * Auxiliary method to show the colorbar changes in preview. */ // ------------------------------------------------------------------------------- void CConfigurationDialog::slotApplyChangesToCactusBarPreview() // ------------------------------------------------------------------------------- { if ( !mpCactusBarPreview || !ui.mpTopColorButton || !ui.mpBottomColorButton || !ui.mpFirstTextLineLineEdit ||!ui.mpSecondTextLineLineEdit || !ui.mpTextColorButton ) return; mpCactusBarPreview->change( ui.mpTopColorButton->palette().color( QPalette::Button ), ui.mpBottomColorButton->palette().color( QPalette::Button ), ui.mpFirstTextLineLineEdit->text(), ui.mpSecondTextLineLineEdit->text(), //"Tux","Cards", ui.mpTextColorButton->palette().color( QPalette::ButtonText ) ); } /** * Auxiliary method to toggle the cactus within the preview. */ // ------------------------------------------------------------------------------- void CConfigurationDialog::slotToggleCactusPreview( bool bEnableCactus ) // ------------------------------------------------------------------------------- { if ( !mpCactusBarPreview ) return; mpCactusBarPreview->toggleCactus( bEnableCactus ); } tuxcards/src/gui/dialogs/configurationDialog/CConfigurationDialog.h000555 000765 000024 00000005437 11420350116 026201 0ustar00alexstaff000000 000000 /*************************************************************************** CConfigurationDialog.h - description ------------------- begin : Sun Aug 12 2007 copyright : (C) 2007 by Alexander Theel email : alex.theel@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #ifndef CCONFIGURATION_DIALOG_H #define CCONFIGURATION_DIALOG_H #include "../../../../output/ui/ui_IConfigurationDialog.h" #include #include #include #include #include #include #include #include #include class CCactusBar; #include "../../../CTuxCardsConfiguration.h" #include class CConfigurationDialog : public QDialog { Q_OBJECT public: CConfigurationDialog(QWidget* parent, CTuxCardsConfiguration& config); int setUp( void ); bool getAutosave(); int getMinutes(); bool getSaveWhenLeaving(); bool getCreateBackup(); QColor getTopColor(); QColor getBottomColor(); QColor getBarTextColor(); bool getEnableHText(); QString getTextOne(); QString getTextTwo(); bool getEnableVText(); QString getVerticalText(); bool getAlignVText(); bool getEnableCactusBar(); QString getFlowerDir(); QFont getTreeFont(); QFont getEditorFont(); int getTabSize(); int getLineWrap(); private slots: virtual void slotChangeTopColor(); virtual void slotChangeBottomColor(); virtual void slotChangeTextColor(); virtual void slotChangeTreeFont(); void slotChangeEditorFont(); virtual void chooseFlowerDir(); virtual void changeProperties(); void slotApplyChangesToCactusBarPreview(); void slotToggleCactusPreview( bool bEnableCactus ); // virtual void setDefaults(); signals: void configurationChanged(); private: Ui::IConfigurationDialog ui; CCactusBar* mpCactusBarPreview; void addCactusBarToDialog(); QString calculateFontString( const QFont& f ) const; CTuxCardsConfiguration& mrefConfig; }; #endif tuxcards/src/gui/dialogs/configurationDialog/IConfigurationDialog.ui000444 000765 000024 00000052247 11420350116 026373 0ustar00alexstaff000000 000000 IConfigurationDialog 0 0 463 546 TuxCards - Configuration 0 General Save File Automatically save all true 40 16777215 15 Qt::AlignCenter Minutes Qt::Horizontal 40 20 Save File when quitting TuxCards true Create Backup File true Execute Command after Saving true false Select Icon Directory for Look && Feel true false Encyption Automatically encrypt Entry when selecting another one Qt::Vertical 20 40 SideBar 40 0 Choose Colors 1 9 2 Top Color Changes the side bar's top color. Top Color Bottom Color Changes the side bar's bottom color. Bottom Color Text Color Changes the side bar's text color. Text Color Show Horizontal Text true false First Text Line Tux Second Text Line Cards Show Vertical Text true TuxCards Text Position Top Bottom true Use CactusBar true false false Flower Directory false /usr/local/bin/flowers Tree Select Font for Tree Change Tree Font Tree_FontExample Qt::Vertical 20 40 Editor The selected font is used for text in ASCII format and as default font for text in RTF format. Select Font Change Editor Font EditorFont_Example Tab Spacing Set Tabsize to 40 16777215 Qt::AlignCenter Qt::Horizontal 40 20 WordWrap no WordWrap Wrap at Column 40 16777215 Qt::AlignCenter Qt::Horizontal 40 20 Wrap at Window-Width true Line Break Mode Single LineBreak with CRTL/SHIFT + ENTER/RETURN true Single LineBreak with ENTER/RETURN Qt::Vertical 20 40 Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok buttonBox accepted() IConfigurationDialog accept() 227 439 157 274 buttonBox rejected() IConfigurationDialog reject() 295 445 286 274 mpEnableCactusBar toggled(bool) mpFlowerDirectoryLineEdit setEnabled(bool) 223 51 243 97 mpExecuteCommandGroupBox toggled(bool) mpCommandLineEdit setEnabled(bool) 59 170 97 190 groupBox_8 toggled(bool) mpIconDirectoryLineEdit setEnabled(bool) 53 255 61 284 mpEnableCactusBar toggled(bool) label_7 setEnabled(bool) 184 51 152 76 tuxcards/src/gui/colorbar/CColorBar.cpp000555 000765 000024 00000014102 11420350116 020467 0ustar00alexstaff000000 000000 /*************************************************************************** CColorBar.cpp - description ------------------- begin : Sun Mar 26 2000 copyright : (C) 2000 by Alexander Theel email : alex.theel@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #include "../../global.h" #include "CColorBar.h" #include #include //Added by qt3to4: #include #include /** * Default-constructor with default values for the colors and the strings. * the properties should be reset with 'change(..)' */ // ------------------------------------------------------------------------------- CColorBar::CColorBar( QWidget* pParent ) : QWidget( pParent ) , mColorTop( 123,34,76 ) , mColorBottom( 30,30,30 ) , mFontColor( Qt::white ) , msTextTop( "Test" ) , msTextBottom( "Bar" ) , msVerticalText( "" ) , mbAlignVerticalText( ALIGN_BOTTOM ) // ------------------------------------------------------------------------------- { } // ------------------------------------------------------------------------------- CColorBar::CColorBar( QWidget* pParent, const QColor& c1, const QColor& c2, const QString& t1, const QString& t2, const QColor& c3 ) : QWidget( pParent ) , mColorTop( c1 ) , mColorBottom( c2 ) , mFontColor( c3 ) , msTextTop( t1 ) , msTextBottom( t2 ) , msVerticalText( "" ) , mbAlignVerticalText( ALIGN_BOTTOM ) // ------------------------------------------------------------------------------- { } // ------------------------------------------------------------------------------- void CColorBar::change( const QColor& c1, const QColor& c2, const QString& t1, const QString& t2, const QColor& c3 ) // ------------------------------------------------------------------------------- { mColorTop = c1; mColorBottom = c2; mFontColor = c3; msTextTop = t1; msTextBottom = t2; CColorBar::TextWidth width = calcWidth(); setMinimumWidth( width.maxWidth ); setMaximumWidth( width.maxWidth ); update(); } // dummy method // ------------------------------------------------------------------------------- void CColorBar::setFlowerDirectory( const QString& ) // ------------------------------------------------------------------------------- {} /** * lets the user set a vertical Text; this one must be given in 'text'. * the argument 'top_bottom' indicates wether 'text' is aligned to the * top(=false) of the colorbar or to the bottom(=true) */ // ------------------------------------------------------------------------------- void CColorBar::setVerticalText( const QString& sText, bool bAlign ) // ------------------------------------------------------------------------------- { msVerticalText = sText; mbAlignVerticalText = bAlign; } // ------------------------------------------------------------------------------- CColorBar::TextWidth CColorBar::calcWidth() const // ------------------------------------------------------------------------------- { TextWidth textWidth = {0,0,0}; // calculate minimum width QFont f= /*p.*/font(); f.setBold(true); QFontMetrics fm(f); textWidth.text1Width = fm.width( msTextTop ); textWidth.text2Width = fm.width( msTextBottom ); textWidth.maxWidth = qMax( textWidth.text1Width, textWidth.text2Width ); if ( textWidth.maxWidth < VERTICAL_TEXT_SIZE ) textWidth.maxWidth = VERTICAL_TEXT_SIZE + 5; return textWidth; } // ------------------------------------------------------------------------------- void CColorBar::paintEvent( QPaintEvent* ) // ------------------------------------------------------------------------------- { QPainter p(this); // our painter paint(p); } // ------------------------------------------------------------------------------- void CColorBar::paint( QPainter& p ) // ------------------------------------------------------------------------------- { // calculate width CColorBar::TextWidth textWidth = calcWidth(); QFont f=p.font(); f.setBold(true); p.setFont(f); int h=height(); // define BasisColor & DestinationColor int rBasis=mColorTop.red(), gBasis=mColorTop.green(), bBasis=mColorTop.blue(); int rDest=mColorBottom.red(),gDest=mColorBottom.green(),bDest=mColorBottom.blue(); // difference between BasisColor & DestinationColor int rDiff=rDest-rBasis; int gDiff=gDest-gBasis; int bDiff=bDest-bBasis; int stepSize=4; int y; for (y=0; yheight() ); p.rotate(-90); p.drawText(x, this->width()/2 + fm.height()/2-3, msVerticalText); p.rotate(90); // rotate back for the other drawing-things } // TODO: The vertical text is not really positioned within the middle of the bar. } tuxcards/src/gui/colorbar/CColorBar.h000555 000765 000024 00000004227 11420350116 020143 0ustar00alexstaff000000 000000 /*************************************************************************** CColorBar.h - description ------------------- begin : Sun Mar 26 2000 copyright : (C) 2000 by Alexander Theel email : alex.theel@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #ifndef CCOLORBAR_H #define CCOLORBAR_H #include //Added by qt3to4: #include class QPainter; #include #include class CColorBar : public QWidget{ public: enum {ALIGN_TOP=0, ALIGN_BOTTOM}; CColorBar( QWidget* pParent ); CColorBar( QWidget* pParent, const QColor&, const QColor&, const QString&, const QString&, const QColor& fontColor=QColor(Qt::white) ); void change( const QColor&, const QColor&, const QString&, const QString&, const QColor& ); void setVerticalText( const QString&, bool bAlign = ALIGN_BOTTOM ); virtual void paint( QPainter& ); virtual void setFlowerDirectory( const QString& ); // dummy method protected: QColor mColorTop; QColor mColorBottom; QColor mFontColor; QString msTextTop; QString msTextBottom; QString msVerticalText; bool mbAlignVerticalText; static const int VERTICAL_TEXT_SIZE=24; virtual void paintEvent( QPaintEvent* ); struct TextWidth { int maxWidth; int text1Width; int text2Width; }; TextWidth calcWidth() const; }; #endif tuxcards/src/gui/cactusbar/cactus.cpp000555 000765 000024 00000017276 11420350116 020326 0ustar00alexstaff000000 000000 /*************************************************************************** cactusmanager.cpp - description ------------------- begin : Mon Apr 10 2000 copyright : (C) 2000 by Markus Gebhard & Alexander Theel idea & java implementation : Markus Gebhard implementation c++ : Alexander Theel email : ukgh@rz.uni-karlsruhe.de alex.theel@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ /** Der Hauptteil, der alles steuert und als Thread geringer Prioritaet die einzelnen Wachstumsschritte anstoest. Wacht ausserdem ber Maus-Aktivitaet. Das Auftreten von Easter-Eggs wird durch das Konfigurationsfile "cactus.egg" gesteuert. Das Format fr dieses Skript ist in jenem File erlaeutert. *-------------------------------------------------------------------------------------* * Verwendung der Idee, des Algorithmus und Teile des Quelltexts vorerst nur mit meiner * persoenlichen Genehmigung und unter der Bedingung, dass die Erweiterbarkeit um * zusaetzliche Buelten oder Easter-eggs gewaerleistet ist - nach Moeglichkeit in der * Form wie hier, also durch GIF-Bilder und durch einn kompatibles Skript. * * Known Bugs: - * * Missing Features: * - Parameter zum Wachstum auch noch in ein Konfigurationsfile auslagern * * @version 0.5 04/09/00 * * @author Markus Gebhard ukgh@rz.uni-karlsruhe.de */ #include "../../global.h" #include "cactus.h" #include "CCactusBar.h" // ------------------------------------------------------------------------------- Cactus::Cactus( QWidget* pDisplayComponent ) : mpImageManager( NULLPTR ) , mpTimer( NULLPTR ) , mpDisplayComponent( pDisplayComponent ) , mpCactusRootShoot( NULLPTR ) // ------------------------------------------------------------------------------- { //from 'CactusParameters' wird in ImageManager noch mal deklariert // IMAGE_DIR=QString("./flowers/"); // CACTUS_EGG_CONFIGURATION_FILE=QString("cactus.egg"); //super(); // mpDisplayComponent = pDisplayComponent; //mpDisplayComponent.addMouseListener(this); //mpDisplayComponent.addMouseMotionListener(this); //setPriority(MIN_PRIORITY); //ImageManager initialisieren mpImageManager = new ImageManager( mpDisplayComponent ); //Nach Bildern fr die Blten suchen //Laden des EasterEgg description files //ImageManager.loadEasterEggConfiguration(); } // ------------------------------------------------------------------------------- Cactus::~Cactus() // ------------------------------------------------------------------------------- { DELETE( mpImageManager ); DELETE( mpTimer ); mpDisplayComponent = NULLPTR; DELETE( mpCactusRootShoot ); } // ------------------------------------------------------------------------------- void Cactus::setFlowerDirectory( const QString& sDir ) // ------------------------------------------------------------------------------- { mpImageManager->setFlowerDirectory( sDir ); } // ------------------------------------------------------------------------------- void Cactus::paint( QPainter* p, const QRect& region ) // ------------------------------------------------------------------------------- { if ( mpCactusRootShoot ) { QPoint point( region.x()+region.width()/2, region.y()+region.height() ); mpCactusRootShoot->paint( p, &point ); } } /** * Der eigentliche Thread-ablauf. * Es werden kontinuierlich neue Kakteen erzeugt, Wachstumsimpulse gegeben, etc. * Bei Mausaktivitaet wird ggf. der wartende Thread unterbrochen, damit der * naechste vorgesehene Wachstumsschritt durchgefuehrt wird. */ // ------------------------------------------------------------------------------- void Cactus::run() // ------------------------------------------------------------------------------- { createNewPlant(); mpTimer = new QTimer( this ); connect( mpTimer, SIGNAL(timeout()), SLOT(simulate()) ); mpTimer->start( THREAD_SLEEP_TIME_GROWING ); // while (!shallStop){ // yield();------------------------------------------------------------------------ // /* try{ //;// sleep(sleepTime);------------------------------------------------ // }catch (InterruptedException e) {} //*/ // //einen Wachstumsschritt simulieren // simulate(); // } } /** * Ein nicht-notwendiges Feature ist das Easter-egg. * Hier wird zum Beispiel dem Kaktus ein Gesicht aufgesetzt oder aehnliches... */ // ------------------------------------------------------------------------------- void Cactus::drawEasterEgg() // ------------------------------------------------------------------------------- { //schon vorhanden? dann nicht! if ( easterEgg ) return; // boolean success=mpImageManager.applyEasterEgg(mpCactusRootShoot);----------------------------- //Wenn erfolgreich angebracht, dann neu darstellen if ( true/*success*/ ){//------------------------------------------------ emit ( triggerPaint() ); easterEgg=true; } //ansonsten halt kein Osterei diesmal :( } /** * Eine neue Pflanze erzeugen */ // ------------------------------------------------------------------------------- void Cactus::createNewPlant() // ------------------------------------------------------------------------------- { if( mpCactusRootShoot != 0 ) DELETE( mpCactusRootShoot ); mpCactusRootShoot=new CactusShoot(); mpImageManager->applyFlower( mpCactusRootShoot ); easterEgg=false; state=GROWING; } /** * Ein einzelner Wachstumsschritt wird simuliert. */ // ------------------------------------------------------------------------------- void Cactus::simulate() // ------------------------------------------------------------------------------- { if ( !mpCactusRootShoot ) return; switch( state ) { case GROWING: //solange versuchen zu wachsen, bis mindestens eine Stufe gewachsen while( mpCactusRootShoot->grow()==0 ){}; emit ( triggerPaint() ); //Fertig mit wachsen? Dann ab jetzt Zustand blhend if(mpCactusRootShoot->isFinishedGrowing()) state=FLOWERING; break; case FLOWERING: mpCactusRootShoot->flower(); emit ( triggerPaint() ); //Blhen beendet? Dann fertig. if ( mpCactusRootShoot->isFinishedFlowering() ) state=FINISHED; break; case FINISHED: createNewPlant(); emit ( triggerPaint() ); state = GROWING; break; } // Timer anpassen (diese Routine steht im Ursprnglichen Programm // in der Methode 'run()' ) // -> aktuelle Pausenlaenge bestimmen int sleepTime = 0; switch( state ) { case GROWING: sleepTime = THREAD_SLEEP_TIME_GROWING; break; case FLOWERING: sleepTime = THREAD_SLEEP_TIME_FLOWERING; break; case FINISHED: sleepTime = THREAD_SLEEP_TIME_FINISHED; break; } //Pause vor dem naechsten Simulationsschritt; Timer anpassen mpTimer->setInterval( sleepTime ); } tuxcards/src/gui/cactusbar/cactus.h000555 000765 000024 00000005766 11420350116 017774 0ustar00alexstaff000000 000000 /*************************************************************************** cactusmanager.h - description ------------------- begin : Mon Apr 10 2000 copyright : (C) 2000 by Alexander Theel email : alex.theel@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #ifndef CACTUS_H #define CACTUS_H #include "cactusshoot.h" #include "imagemanager.h" #include #include #include class Cactus: public QObject{ Q_OBJECT public: Cactus(QWidget* displayComponent); ~Cactus(); void paint( QPainter* p, const QRect& region ); void setFlowerDirectory( const QString& ); signals: void triggerPaint(); public slots: void run(); protected slots: void simulate(); protected: ImageManager* mpImageManager; QTimer* mpTimer; /** Die Kompoennte, innerhalb derer der Kaktus dargestellt wird*/ QWidget* mpDisplayComponent; /** Die Wurzel des Kaktus*/ CactusShoot* mpCactusRootShoot; /** Der aktuelle Zustand des Wachstums */ int state; /** Konstanten fr die Zust�de: Wachsend*/ static const int GROWING = 0; /** Konstanten fr die Zust�de: Blhend*/ static const int FLOWERING = 1; /** Konstanten fr die Zust�de: Wachstum beendet*/ static const int FINISHED = 2; /** Ein nicht-notwendiges Feature: Das easter-egg.*/ bool easterEgg; void drawEasterEgg(); void createNewPlant(); // from 'CactusParameters' /** Der Verzeichnisname, in dem sich alle Konfigurationsdateien/Bilder befinden. Die Blten dort muessen jeweils in 5 Gr�en vorhanden sein, durchnummeriert NUM=0...4 und mit der Endung "_NUM.gif" versehen. Siehe Vorlagen. */ QString IMAGE_DIR; QString CACTUS_EGG_CONFIGURATION_FILE; //Simulationspausen in Millisekunden // // z.B. bei einer Simulationsdauer von 150 Zyklen (100-200 sind normal): // 1000 = 2,5 Minuten / Kaktus /** Bei der Wachstumsphase eine geringe Zeit zwischen Wachstumsschben */ static const int THREAD_SLEEP_TIME_GROWING = 1000; //1000; //[ms] /** Bei der Blh-phase eine l�gere Zeit zwischen Wachstumsschben */ static const int THREAD_SLEEP_TIME_FLOWERING = 6000; //6000; //[ms] /** Die Pause nach Beendigung des Wachstums, bis eine neue Pflanze erzeugt wird */ static const int THREAD_SLEEP_TIME_FINISHED = 60000; //60000; [ms] }; #endif tuxcards/src/gui/cactusbar/cactusshoot.cpp000555 000765 000024 00000026471 11420350116 021400 0ustar00alexstaff000000 000000 /*************************************************************************** cactusshoot.cpp - description ------------------- begin : Mon Apr 10 2000 copyright : (C) 2000 by Alexander Theel email : alex.theel@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #include "../../global.h" #include "cactusshoot.h" #include #include #include QColor CactusShoot::INITIAL_COLOR=QColor(0,128,0); QList CactusShoot::flowers; /** * Konstruktor zum erzeugen des allerersten Astes=Stamm (root-Sch�ling). */ CactusShoot::CactusShoot() { INITIAL_COLOR=QColor(0,128,0); generalSettings(INITIAL_COLOR, MAXRADIUS*3/4, MAXRADIUS, MAXHEIGHT, 5,// CactusTools.ran(MAXRADIUS*3/4,MAXRADIUS), //Radius 0,//x 0,//y true, 0.0, MAXCHILDREN, 0, STACHELZAHL); //aktuelle Rekursionstiefe } CactusShoot::CactusShoot(QColor c, int minRadius, int maxRadius, int maxHeight, int rad, int x, int y, bool back, double dd, int maxChildren, int depth, int stachelZahl) { // general settings generalSettings(c, minRadius, maxRadius, maxHeight, rad, x, y, back, dd, maxChildren, depth, stachelZahl); } //general settings void CactusShoot::generalSettings(QColor c, int minRadius, int maxRadius, int maxHeight, int rad, int x, int y, bool back, double dd, int maxChildren, int depth, int stachelZahl) { stachelFarbe = QColor(0,0,0); hasFlower = false; flowerHeight = 0; flowerDelay = 0; maxFlowerSize = 0; flowerSize = 0; finishedFlowering = false; finishedGrowing = false; this->depth = depth; this->maxChildren = maxChildren; this->maxHeight = maxHeight; this->maxRadius = maxRadius; this->minRadius = minRadius; this->back = back; this->stachelZahl=stachelZahl; start=QPoint(x,y); if (this->depth==MAXDEPTH) this->maxChildren=0; this->maxHeight=CactusTools::max(this->maxHeight,MINHEIGHT); if (this->maxHeightmaxChildren=0; this->minRadius=CactusTools::max(this->minRadius,MINRADIUS); if (this->maxRadiusminRadius) this->maxRadius=this->minRadius+2; this->maxHeight=CactusTools::min(this->maxHeight, (MAX_TOTAL_HEIGHT-start.y()-2*this->maxRadius-1)/2); if (depth==0) stammFarbe=c; else if (back) stammFarbe=c.light(60); // returns a color that is 40% darker than 'c' else stammFarbe=c.light(140); // returns a color that is 40% brither than 'c' // mpChildren=new CactusShoot[this->maxChildren]; ------------------------ noChildren=0; /* radius = new int[this->maxHeight]; --------------------------------- delate = new int[this->maxHeight]; rotation = new int[this->maxHeight]; */ height=0; deltaDelay=dd; delay=0.0; deltaRotate=rand() % 100 - 50; rotate=deltaRotate; delate[0]=0; radius[0]=rad; rotation[0]=(int)(15*rotate); height++; } CactusShoot::~CactusShoot(){ for(int i=0; iback) mpChildren[i]->paint(p, /*obs,*/ location); } //sich selbst darstellen paintSelf(p, /*obs,*/ location); //alle �te vor sich drbermalen for (int i=0;iback) mpChildren[i]->paint(p, /*obs,*/ location); } //ggf. Easter-egg darstellen /* if (imageEasterEgg!=null && easterEggFrontmost){ g.drawImage(imageEasterEgg, location.x+start.x + easterEggLocation.x, location.y+start.y + easterEggLocation.y, obs); } */ } /** * Stellt sich selbst dar. */ void CactusShoot::paintSelf(QPainter* p, /*ImageObserver obs,*/ QPoint* location){ //Stamm p->setPen(stammFarbe); //Den Ursprung fr die Darstellung auf xx,yy festlegen int xx=start.x()+location->x(); int yy=start.y()+location->y(); //Die unterste Scheibe/Halbkreis int r=radius[0]; if (depth>0){ //Bei Seiten�ten den Anfang als Halbkreis darstellen // draw a pie (it is automatically filled by the current brush // -> we set it right here) p->setBrush(stammFarbe); p->drawPie(xx+delate[0]-r,yy-r, 2*r,2*r, 0, -180*16); }else //Beim Hauptstamm mit einem Rechteck beginnen p->drawRect(xx+delate[0]-r, yy, 2*r-1, 1); double rr; //Die Scheiben dazwischen int y = yy-2; for (int i=1;idrawRect(xx+ delate[i]-r ,y, 2*r-1,0); rr=(radius[i]+radius[i-1])/2.0; p->drawRect(xx+ (int)((delate[i]+delate[i-1])/2.0 - rr) ,y+1, (int)(2*rr)-1,2); y-=2; } y+=2; //Die Spitze r=radius[height-1]; // draw a pie (it is automatically filled by the current brush // -> we set it right here) p->setBrush(stammFarbe); p->drawPie(xx+delate[height-1]-r,y-r, 2*r,2*r, 0,180*16); //Stacheln y=yy; p->setPen(stachelFarbe); double ra=0.0; double ss=(double)(stachelZahl-1.0)/ 3.14159; int x; if(depth>0){ r=radius[0]; for (int j=0;jdrawLine(x,y,x,y); } } } y=yy; for (int i=0;idrawLine(x,y,x,y); } y-=2; } y+=2; r=radius[height-1]; for (int j=0;jdrawLine(x,y,x,y); } y-=2; } //eventuell die Bluete darstellen if(hasFlower && flowers.count()>0){ x = xx+delate[height-1]+flowerDelay - (flowers.at(flowerSize)->width() /2); y = yy-flowerHeight*2 - (flowers.at(flowerSize)->height()/2); p->drawImage(x,y, *(flowers.at(flowerSize)) ); } /* //ggf. Easter-egg darstellen if (imageEasterEgg!=null && !easterEggFrontmost){ g.drawImage(imageEasterEgg, xx + easterEggLocation.x, yy + easterEggLocation.y, obs); } */ } bool CactusShoot::isFinishedGrowing(){ if (finishedGrowing) return true; for (int i=0;iisFinishedGrowing()) return false; } if (noChildren0){ for (int i=0; iflower(); return; } //Blte wachsen lassen if (!hasFlower){ hasFlower = true; maxFlowerSize = CactusTools::ranUpper(0,4); flowerHeight = CactusTools::ranUpper((height-1)*2/3,height-1); flowerDelay = CactusTools::ran(-radius[flowerHeight],radius[flowerHeight]); }else{ if (flowerSize < maxFlowerSize) flowerSize++; } } bool CactusShoot::isFinishedFlowering(){ if (finishedFlowering) return true; if (noChildren>0){ for (int i=0;iisFinishedFlowering()) return false; } finishedFlowering=true; return true; } if (flowerSize==maxFlowerSize){ finishedFlowering=true; return true; } return false; } int CactusShoot::grow(){ if (finishedGrowing) return 0; //nichts mehr zum Wachsen da int result=0; //kinder wachsen lassen for (int i=0; igrow(); //selber wachsen if(height < maxHeight && CactusTools::ran(0,noChildren+1) < 15.0/height){ //Radius der letzten Scheibe holen int old=radius[height-1]; //Radius der neuen Scheibe bestimmen int r=CactusTools::ran(old-1,old+1); if (rmaxRadius) r=maxRadius; radius[height]=r; //Drehung dieser Scheibe gegenber der vorherigen rotation[height]=(int)(25*rotate); deltaRotate= rand() % 100 - 50; rotate+=deltaRotate; delay+=deltaDelay; delay= (minRadius/2.0 <= delay ? minRadius/2.0 : delay); //min(minRadius/2.0, delay); ------------ delate[height++]=(int)delay; deltaDelay*=CactusTools::ranLower(4,180)/100.0; result++; } //eventuell kinder kriegen if (height>maxRadius && (rand() % 10000)<15*height*(maxChildren-noChildren)){ createChild(); result++; } return result; } void CactusShoot::createChild(){ int anknuepfHoehe = CactusTools::ran( CactusTools::max(maxRadius,(height-1)*2/3) , height-1); //Der neue maximale Radius einer Kaktusscheibe int newMax= CactusTools::ran(MINRADIUS,CactusTools::max(MINRADIUS+1,radius[anknuepfHoehe]-1)); //Der neue minimale Radius einer Kaktusscheibe int newMin= CactusTools::max(MINRADIUS,newMax*3/4); int neurad= CactusTools::ran(newMin,newMax); //Winkel von oben gesehen, in welchem der neue Ast bzgl. dem alten w�hst double angle=0.0; //Wachstum in die Breite bevorzugen, weil schoener anzusehen (double angle=ran(0,360)/180.0*Math.PI; sonst) if (CactusTools::fifty()) angle=CactusTools::ranUpper(90, 180) / 180.0*3.141593; //links else angle=CactusTools::ranLower( 0, 90 ) / 180.0*3.141593; //rechts int yy = start.y()-2*anknuepfHoehe; int xx = start.x()+delate[anknuepfHoehe]+(int)(cos(angle)* (radius[anknuepfHoehe]+neurad)); double del=CactusTools::ranUpper(80,200)/100.0*cos(angle); //Neuen Nachfolger mit den erwrfelten Daten erzeugen mpChildren[noChildren++]= new CactusShoot(stammFarbe, //neue Farbe wird dann im Konstruktor aus dieser bestimmt newMin, //minimaler Radius newMax, //maximaler Radius CactusTools::ranUpper(maxHeight-anknuepfHoehe,maxHeight), //Endh�e neurad, //Radius xx, yy-1, //Startpunkt CactusTools::fifty(), //davor/dahinter del, //Anfangsdelay CactusTools::ranLower(0,maxChildren), //Anzahl der Kinder depth+1, //Rekursionstiefe CactusTools::ran(MINSTACHELZAHL,stachelZahl));//Anzahl der Stacheln } tuxcards/src/gui/cactusbar/cactusshoot.h000555 000765 000024 00000007450 11420350116 021041 0ustar00alexstaff000000 000000 /*************************************************************************** cactusshoot.h - description ------------------- begin : Mon Apr 10 2000 copyright : (C) 2000 by Alexander Theel email : alex.theel@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #ifndef CACTUSSHOOT_H #define CACTUSSHOOT_H #include "cactustools.h" #include #include #include #include #include class CactusShoot { public: CactusShoot(); ~CactusShoot(); void paint(QPainter* p, /*ImageObserver obs,*/ QPoint* location); bool isFinishedGrowing(); bool isFinishedFlowering(); void flower(); int grow(); /**die Bilder fuer die Blueten (transparente GIFs)*/ static QList flowers; protected: CactusShoot(QColor c,int minRadius,int maxRadius,int maxHeight, int rad,int x,int y,bool back, double dd,int maxChildren,int depth, int stachelZahl); void generalSettings(QColor c,int minRadius,int maxRadius,int maxHeight, int rad,int x,int y,bool back, double dd,int maxChildren,int depth, int stachelZahl); void createChild(); private: static QColor INITIAL_COLOR; static const int STACHELZAHL = 4; //Anzahl an Stacheln auf der Vorderseite static const int MINSTACHELZAHL = 2; static const int MINRADIUS = 2; static const int MAXRADIUS = 6; static const int MINHEIGHT = 4; //die Mindestgr. fr ausgewachsenen Ast static const int MAXHEIGHT = 35; //die Maximalgr. fr ausgewachsenen Ast static const int MAX_TOTAL_HEIGHT = 200; //die Maximalgr. fr den gesamten Kaktus static const int MAXCHILDREN = 3;//maximale Anzahl an Nachfolgern pro Ast static const int MAXDEPTH = 3; //maximale Rekursionstiefe int radius[200]; //Radius der einzelnen Scheiben int rotation[200]; //Drehung der Scheiben gegeneinander int delate[200]; //Verschiebung der Scheibe gegenber start.x nach rechts (+) bzw. links (-) int height; int maxHeight; double delay; //aktueller Wert der Verschiebungsweite double deltaDelay; //aktuelles Inkrement der Verschiebung double rotate; //aktueller Wert der Verdrehung double deltaRotate; //aktuelles Inkrement der Verschiebung int minRadius,maxRadius; QPoint start; //Fu�unkt des Stammes/Astes /**die Nachfolger=�te Achtung: Die Array-Gr�e ist fest, die Anzahl der Nachfolger steht in noChildren!!!*/ CactusShoot* mpChildren[200]; int maxChildren; //Maximale Anzahl von Nachfolgern int noChildren; //Anzahl bereits vorhandener Nachfolger int depth; //Rekursionstiefe QColor stammFarbe; QColor stachelFarbe; int stachelZahl; bool back; bool hasFlower; int flowerHeight; int flowerDelay; int maxFlowerSize; int flowerSize; bool finishedFlowering; bool finishedGrowing; void paintSelf(QPainter* p, /*ImageObserver obs,*/ QPoint* location); protected: //Nicht-notwendiges Feature easter-egg // Image imageEasterEgg; QPoint easterEggLocation; bool easterEggFrontmost; }; #endif tuxcards/src/gui/cactusbar/cactustools.cpp000555 000765 000024 00000004664 11420350116 021404 0ustar00alexstaff000000 000000 /*************************************************************************** cactustools.cpp - description ------------------- begin : Mon Apr 10 2000 copyright : (C) 2000 by Alexander Theel email : alex.theel@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #include "cactustools.h" #include CactusTools::CactusTools(){ } CactusTools::~CactusTools(){ } /** * Jeweils 50% Wahrscheinlichkeit fr true oder false. */ bool CactusTools::fifty() { return (rand() % 100 < 50); } /** * it x% Wahrscheinlichkeit true. */ bool CactusTools::ranPercent(int percent) { return (rand() % 100 < percent); } /** * Zufallszahl innerhalb [min...max] gleichverteilt. */ int CactusTools::ran(int min,int max) { if (maxy) ? x : y; } tuxcards/src/gui/cactusbar/cactustools.h000555 000765 000024 00000002576 11420350116 021051 0ustar00alexstaff000000 000000 /*************************************************************************** cactustools.h - description ------------------- begin : Mon Apr 10 2000 copyright : (C) 2000 by Alexander Theel email : alex.theel@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #ifndef CACTUSTOOLS_H #define CACTUSTOOLS_H class CactusTools { public: ~CactusTools(); static bool fifty(); static bool ranPercent(int percent); static int ran(int min,int max); static int ranLower(int min,int max); static int ranUpper(int min,int max); static int min(int x,int y); static int max(int x,int y); private: CactusTools(); }; #endif tuxcards/src/gui/cactusbar/CCactusBar.cpp000555 000765 000024 00000011276 11420350116 021010 0ustar00alexstaff000000 000000 /*************************************************************************** CCactusBar.cpp - description ------------------- begin : Mon Apr 10 2000 copyright : (C) 2000 by Alexander Theel email : alex.theel@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #include "../../global.h" #include "CCactusBar.h" #include #include #include #include #include #include // ------------------------------------------------------------------------------- CCactusBar::CCactusBar( QWidget* parent ) : CColorBar( parent ) , mpCactus( NULLPTR ) , mDoubleBuffer() , mbDrawCactus( true ) // ------------------------------------------------------------------------------- { mpCactus = new Cactus( this ); } // ------------------------------------------------------------------------------- CCactusBar::CCactusBar( QWidget *parent, const QColor& c1, const QColor& c2, const QString& t1, const QString& t2) : CColorBar( parent, c1, c2, t1, t2 ) , mpCactus( NULLPTR ) , mDoubleBuffer() , mbDrawCactus( true ) // ------------------------------------------------------------------------------- { mpCactus = new Cactus( this ); mDoubleBuffer = QPixmap(170, this->height()); // doubleBuffer with constant width connect( mpCactus, SIGNAL(triggerPaint()), this, SLOT(update()) ); QTimer::singleShot( 1000, mpCactus, SLOT(run()) ); // mpCactus.run(); starts in 1 second } // ------------------------------------------------------------------------------- CCactusBar::~CCactusBar( void ) // ------------------------------------------------------------------------------- { DELETE( mpCactus ); } // ------------------------------------------------------------------------------- void CCactusBar::setFlowerDirectory( const QString& sDir ) // ------------------------------------------------------------------------------- { if ( NULLPTR != mpCactus ) mpCactus->setFlowerDirectory( sDir ); } /** * turns the cactus on/off */ // ------------------------------------------------------------------------------- void CCactusBar::toggleCactus( bool b ) // ------------------------------------------------------------------------------- { mbDrawCactus = b; } // ------------------------------------------------------------------------------- void CCactusBar::paintEvent( QPaintEvent* pE ) // ------------------------------------------------------------------------------- { // old code - non-doublebuffering code; in that case // only this method is needed; i.e. the paint()-method below // is not necessary when doing without a doublebuffer // // ColorBar::paintEvent(e); // // QPainter p; // p.begin(this); // // mpCactus.paint(&p, QRect(0,0, this->width(),this->height()-45)); // p.end(); if ( !pE ) return; //QRect r = pE->rect(); //bitBlt( this, r.x(), r.y(), &mDoubleBuffer, r.x(), r.y(), r.width(), r.height() ); QPainter painter(this); paint( &painter ); painter.drawPixmap( pE->rect(), mDoubleBuffer, pE->rect() ); } // ------------------------------------------------------------------------------- void CCactusBar::paint( QPainter* pPainter ) // ------------------------------------------------------------------------------- { if ( !mpCactus ) return; mDoubleBuffer.fill( QColor(123,100,35) ); QPainter p2; p2.begin( &mDoubleBuffer ); // start painting CColorBar::paint( p2 ); if ( mbDrawCactus ) mpCactus->paint( &p2, QRect( 0,0, this->width(),this->height()-45 ) ); p2.end(); // painting done pPainter->drawPixmap( 0,0, mDoubleBuffer ); } // ------------------------------------------------------------------------------- void CCactusBar::resizeEvent( QResizeEvent* ) // ------------------------------------------------------------------------------- { //mDoubleBuffer.resize(mDoubleBuffer.width(), height()); mDoubleBuffer = mDoubleBuffer.scaled( mDoubleBuffer.width(), height() ); update(); } tuxcards/src/gui/cactusbar/CCactusBar.h000555 000765 000024 00000003241 11420350116 020446 0ustar00alexstaff000000 000000 /*************************************************************************** cactusbar.h - description ------------------- begin : Mon Apr 10 2000 copyright : (C) 2000 by Alexander Theel email : alex.theel@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #ifndef CACTUSBAR_H #define CACTUSBAR_H #include "../colorbar/CColorBar.h" #include "cactus.h" #include //Added by qt3to4: #include #include class CCactusBar : public CColorBar { public: CCactusBar( QWidget* ); CCactusBar( QWidget*, const QColor&, const QColor&, const QString&, const QString& ); ~CCactusBar( void ); void toggleCactus( bool ); void paint( QPainter* pPainter ); virtual void setFlowerDirectory( const QString& ); protected: Cactus* mpCactus; QPixmap mDoubleBuffer; bool mbDrawCactus; void paintEvent( QPaintEvent* ); void resizeEvent( QResizeEvent* ); }; #endif tuxcards/src/gui/cactusbar/flowers/000755 000765 000024 00000000000 11420350116 020003 5ustar00alexstaff000000 000000 tuxcards/src/gui/cactusbar/imagemanager.cpp000555 000765 000024 00000016574 11420350116 021461 0ustar00alexstaff000000 000000 /** Sorgt dafr, dass die vorhandenen Blten bei Bedarf aus den Dateien geladen werden. Ausserdem beinhaltet sie Methoden zum Laden von Bildern. Zudem: Laden des Easter-egg-Konfigurationsfiles und Anbringen eines Eaestereggs bei Bedarf. Denkbar ist auch, dass man einen Satz an Blten fest codiert und weitere Blten optional dazul�t. Wo die Blten sind, steht in CactusParameters.java. */ #include "../../global.h" #include "imagemanager.h" #include "cactustools.h" #include #include #include #include QString ImageManager::IMAGE_DIR="/opt/tuxcards/flowers/"; const QString ImageManager::CACTUS_EGG_CONFIGURATION_FILE="cactus.egg"; ImageManager::ImageManager(QWidget* component) : mpFlowerNames ( NULLPTR ) , mpComponent( NULLPTR ) { mpComponent = component; initFlowers(); // loadEasterEggConfiguration(); } ImageManager::~ImageManager(){ DELETE( mpFlowerNames ); } void ImageManager::setFlowerDirectory(QString dir){ IMAGE_DIR=dir; initFlowers(); } // not needed anymore -> constructor does this //void ImageManager::setDisplayComponent(QWidget* component){ // mpComponent=component; //} //int ImageManager::getWidth(Image image){ // return image.getWidth(mpComponent); //} // //int ImageManager::getHeight(Image image){ // return image.getHeight(mpComponent); //} /** * L�t alle das File "cactus.egg", welches die Beschreibung aller Easter-eggs * beinhaltet. */ //void ImageManager::loadEasterEggConfiguration(){ // easterEggs=new Vector(10); // // try{ // File file=new File(CactusParameters.IMAGE_DIR+CactusParameters.CACTUS_EGG_CONFIGURATION_FILE); // BufferedReader br=new BufferedReader(new FileReader(file)); // // String s=br.readLine().trim(); // // while(s!=null){ // while(s!=null && !s.startsWith("egg ")) // s=br.readLine(); // // if (s==null) // break; // // //Wir sind jetzt in der ersten Zeile einer Egg-Beschreibung // //Name holen (wird derzeit eigentlich nicht ben�igt, aber kann nie schaden... // String name=s.substring(4,s.indexOf('{',4)); // // //Name des GIF-Files holen // s=br.readLine().trim(); // int index1=s.indexOf('"'); // int index2=s.indexOf('"',index1+1); // String imageName=s.substring(index1+1,index2); // // //Erster Parameter: propability factor // s=br.readLine(); // int i1=s.indexOf('#'); // if (i1!=-1) // s=s.substring(0,i1); // s=s.trim(); // int propabilityFactor=Integer.parseInt(s); // // //Zweiter Parameter: min/max depth // s=br.readLine(); // i1=s.indexOf('#'); // if (i1!=-1) // s=s.substring(0,i1); // s=s.trim(); // // i1=s.indexOf(','); // // int minDepth=Integer.parseInt(s.substring(0,i1)); // int maxDepth=Integer.parseInt(s.substring(i1+1).trim()); // // //3. Parameter: min/max height // s=br.readLine(); // i1=s.indexOf('#'); // if (i1!=-1) // s=s.substring(0,i1); // s=s.trim(); // // i1=s.indexOf(','); // // int minHeight=Integer.parseInt(s.substring(0,i1)); // int maxHeight=Integer.parseInt(s.substring(i1+1).trim()); // // //4. Parameter: min/max translation in x-direction // s=br.readLine(); // i1=s.indexOf('#'); // if (i1!=-1) // s=s.substring(0,i1); // s=s.trim(); // // i1=s.indexOf(','); // // int minXTranslation=Integer.parseInt(s.substring(0,i1)); // int maxXTranslation=Integer.parseInt(s.substring(i1+1).trim()); // // //5. Parameter: 1/0 fr frontMost // s=br.readLine(); // i1=s.indexOf('#'); // if (i1!=-1) // s=s.substring(0,i1); // s=s.trim(); // // boolean frontMost=true; // int f=Integer.parseInt(s); // if (f==0) // frontMost=false; // // //Neues Easteregg generieren // EasterEgg egg=new EasterEgg(name, imageName, propabilityFactor, // minDepth, maxDepth, // minHeight, maxHeight, // minXTranslation, maxXTranslation, // frontMost); // // //und gem� der Wahrscheinlichkeitsangabe entsprechend // //oft in dem Vector mit allen Eggs referenzieren // for (int i=0;i; //Gesamtes Verzeichnis nach Blten durchsuchen dir.setFilter(QDir::Files | QDir::NoSymLinks); QFileInfoList files=dir.entryInfoList(); if( !files.isEmpty() ){ // QFileInfoListIterator it(*files); // create iterator QFileInfo f; // for all files/components for ( int i = 0; i < files.count(); i++ ) { //while( (f=it.current())!=0 ){ // ++it; f = files.at(i); if( f.isFile() && (f.suffix()=="gif") && (f.baseName().right(2)=="_0") ){ QString name=f.baseName(); name=name.left(name.length()-2); //cout<append( QString(name) ); } }//while/for }//if(files) } /** * setzt einen Index, der die erste(kleinste) Blte enth�t; dabei * wird zuf�lig eine Bltenart herausgesucht */ void ImageManager::applyFlower(CactusShoot* c){ if (mpFlowerNames==0) return; // delete the previous flowers while ( ! c->flowers.isEmpty() ) delete c->flowers.takeFirst(); //Zufällig einen Blütennamen heraussuchen //um die Bilder für die Blüten kümmern; alle Blüten einlesen QString flowerName = mpFlowerNames->at( CactusTools::ran(0,mpFlowerNames->count()-1) ); for (int i=0; i<5; i++){ c->flowers.insert(i, new QImage(IMAGE_DIR+flowerName+"_"+QString::number(i)+".gif")); } } tuxcards/src/gui/cactusbar/imagemanager.h000555 000765 000024 00000002324 11420350116 021112 0ustar00alexstaff000000 000000 #ifndef IMAGEMANAGER_H #define IMAGEMANAGER_H #include #include #include "cactusshoot.h" class ImageManager{ public: ImageManager(QWidget* component); ~ImageManager(); // void setDisplayComponent(QWidget* component); not needed anymore // -> done by the constructor // int getWidth(Image image); // int getHeight(Image image); // static void loadEasterEggConfiguration(); // static boolean applyEasterEgg(CactusShoot root); // Image loadImage(QString fileName); void initFlowers(); void applyFlower(CactusShoot*); void setFlowerDirectory(QString); protected: /** Alle Easter-eggs */ // Vector easterEggs; /** Alle Bltennamen */ QList* mpFlowerNames; /** Die Display-Komponente (wird in Java fr Bilder-Laden/Berechnungen ben�igt) */ QWidget* mpComponent; /* aus CactusParameter.java */ /** Der Verzeichnisname, in dem sich alle Konfigurationsdateien/Bilder befinden. Die Blten dort muessen jeweils in 5 Gr�en vorhanden sein, durchnummeriert NUM=0...4 und mit der Endung "_NUM.gif" versehen. Siehe Vorlagen. */ static QString IMAGE_DIR; static const QString CACTUS_EGG_CONFIGURATION_FILE; }; #endif tuxcards/src/gui/cactusbar/flowers/beauty_flower_0.gif000555 000765 000024 00000000155 11420350116 023562 0ustar00alexstaff000000 000000 GIF89a>@^lX#E,X<_lu٢!,9gCr[y@#cEy;tuxcards/src/gui/cactusbar/flowers/beauty_flower_1.gif000555 000765 000024 00000000173 11420350116 023563 0ustar00alexstaff000000 000000 GIF89a >@^lX#E,X<_lu٢!, (AtədQF\!VCDX U,q[c;tuxcards/src/gui/cactusbar/flowers/beauty_flower_2.gif000555 000765 000024 00000000231 11420350116 023557 0ustar00alexstaff000000 000000 GIF89a >@^lX#E,X<_lu٢!, FɇFqS2$3bH1   5  BAP,$K>\chq8XȤa3;tuxcards/src/gui/cactusbar/flowers/beauty_flower_3.gif000555 000765 000024 00000000303 11420350116 023560 0ustar00alexstaff000000 000000 GIF89a>@^lX#E,X<_lu٢!,pɉF)3K&8FMNK2/)7ڌA(8I, u ZhM! A:lu:]‡}\Nl$ w,V;tuxcards/src/gui/cactusbar/flowers/beauty_flower_4.gif000555 000765 000024 00000000415 11420350116 023565 0ustar00alexstaff000000 000000 GIF89a>@^lX#E,X<_lu٢!,)-Qt0N8AaPN` @%%;"1hs08] $(Q&8ĂL--P=,eyz#4 *Uem Z~  ~ EU%*bp# * HCK2~ " U~;tuxcards/src/gui/cactusbar/flowers/blue2_flower_0.gif000555 000765 000024 00000000150 11420350116 023275 0ustar00alexstaff000000 000000 GIF89a;?X?:UUzw@!,0S N&JRHA\$FR;tuxcards/src/gui/cactusbar/flowers/blue2_flower_1.gif000555 000765 000024 00000000162 11420350116 023301 0ustar00alexstaff000000 000000 GIF89a ;?X?:UUzw@!, 0@E`951 JNEAdx;tuxcards/src/gui/cactusbar/flowers/blue2_flower_2.gif000555 000765 000024 00000000210 11420350116 023274 0ustar00alexstaff000000 000000 GIF89a ;?X?:UUzw@!, 50PXhyD!HX``֒ 2ǐ$" g@ ~OAHLΧt;tuxcards/src/gui/cactusbar/flowers/blue2_flower_3.gif000555 000765 000024 00000000246 11420350116 023306 0ustar00alexstaff000000 000000 GIF89a ;?X?:UUzw@!, S094B@LQ QH`RX2 8F \8`!WcӜA074XLNѨu;tuxcards/src/gui/cactusbar/flowers/blue_flower_3.gif000555 000765 000024 00000000264 11420350116 023224 0ustar00alexstaff000000 000000 GIF89a<(*B;;Rjk~`xŽřq!,aɉB8j40FaTPLNaC<ӡ$r2t04xŐX@f2o H\'@$;tuxcards/src/gui/cactusbar/flowers/blue_flower_4.gif000555 000765 000024 00000000343 11420350116 023223 0ustar00alexstaff000000 000000 GIF89a<(*B;;Rjk~`xŽřq!,ɉL=m_ 8߁"PP{\W15CY6h$+`IrH0Iqh,E3<&Zq(ʷeHpvD\ d*O#1(#< \*T*#u;tuxcards/src/gui/cactusbar/flowers/cactus.egg000555 000765 000024 00000003453 11420350116 021757 0ustar00alexstaff000000 000000 ############################################################ # Easter-egg description and configuration file for cactus # # # # Autohor(s): Markus Gebhard, ukgh@rz.uni-karlsruhe.de # ############################################################ ############################################################ # the first easter-egg ist the smiling face egg face{ "face.gif" #image name as file 5 #Propability factor for this egg (1...5 make sense) 0,0 #min/max depth where the egg shall be mounted (0=root) 60,80 #min/max height where the egg shall be mounted (0...100) 0,0 #min/max translation in x-direction from center of the shoot 1 #mount egg in front of everythig else (1=true, 0=false) } ############################################################ # the note - this one is for Alex' TuxCards :-) egg note{ "note.gif" 3 0,1 50,70 -2,2 1 } ############################################################ # the sign egg sign{ "sign.gif" 1 0,0 50,70 -1,1 1 } ########################################################### # Format description of this file: # # For a description of an easter-egg the loader of this file first looks # for a line beginning with "egg ". The next string is the name of # the egg and in curly braces {} the options must follow. # The first option is the name of the file for the image (transparent GIF) # in double quota. # For the moment there are 5 options, as described in the examples above. # All the options have to be integer-values. # Everything written after the last option is currently ignored, until the # closing brace appears. ###########################################################tuxcards/src/gui/cactusbar/flowers/face.gif000555 000765 000024 00000000210 11420350116 021362 0ustar00alexstaff000000 000000 GIF89a ! , 50%@ ^ljQ+Hn˖f_wvpHG1sD;tuxcards/src/gui/cactusbar/flowers/great_flower256_0.gif000555 000765 000024 00000001524 11420350116 023631 0ustar00alexstaff000000 000000 GIF89aS$X9(x 2qo~qtv%~+\N=G6PWNWBfcoFYbvp}~x=7flzcDBTgryp]oj{h{ϹW ,6>۞ڴpnGUfh92  aVato޿с؄Ҁӈ瀾瘿ᡊċƅΎ׈ӈݍӛݐܓڊݓٖߛܟɮƠΦźβȻظעڨ߱ÄيД؛ΥϮ²αڭػ!,1 ߳@ߛ1˟|#3D;tuxcards/src/gui/cactusbar/flowers/great_flower256_1.gif000555 000765 000024 00000001570 11420350116 023633 0ustar00alexstaff000000 000000 GIF89a S$X9(x 2qo~qtv%~+\N=G6PWNWBfcoFYbvp}~x=7flzcDBTgryp]oj{h{ϹW ,6>۞ڴpnGUfh92  aVato޿с؄Ҁӈ瀾瘿ᡊċƅΎ׈ӈݍӛݐܓڊݓٖߛܟɮƠΦźβȻظעڨ߱ÄيД؛ΥϮ²αڭػ!, U ˥r'&l%lh`rT@M? JDɼ 0,m20x"QR(]7;tuxcards/src/gui/cactusbar/flowers/great_flower256_2.gif000555 000765 000024 00000001670 11420350116 023635 0ustar00alexstaff000000 000000 GIF89a S$X9(x 2qo~qtv%~+\N=G6PWNWBfcoFYbvp}~x=7flzcDBTgryp]oj{h{ϹW ,6>۞ڴpnGUfh92  aVato޿с؄Ҁӈ瀾瘿ᡊċƅΎ׈ӈݍӛݐܓڊݓٖߛܟɮƠΦźβȻظעڨ߱ÄيД؛ΥϮ²αڭػ!,  HlXv- \T[(LVPlDlf#/@jqU eߺ0ܸy>X!kl>3G IpW9 7Y52M`Rb",Ō?OQn^?56+ݿn; ;tuxcards/src/gui/cactusbar/flowers/great_flower256_3.gif000555 000765 000024 00000002016 11420350116 023631 0ustar00alexstaff000000 000000 GIF89aS$X9(x 2qo~qtv%~+\N=G6PWNWBfcoFYbvp}~x=7flzcDBTgryp]oj{h{ϹW ,6>۞ڴpnGUfh92  aVato޿с؄Ҁӈ瀾瘿ᡊċƅΎ׈ӈݍӛݐܓڊݓٖߛܟɮƠΦźβȻظעڨ߱ÄيД؛ΥϮ²αڭػ!, (ퟞau 0bhJ`tM96]sOPnۿ`: QlPUl6g6B{G ӉUjeܨaڼj-Nx @ɲo]$pI-\yĕ?q Ph٘HfBD y&$Gny ׏َXh!kE4]G  @ e\< MѡDuxCÀ;tuxcards/src/gui/cactusbar/flowers/great_flower256_4.gif000555 000765 000024 00000002361 11420350116 023635 0ustar00alexstaff000000 000000 GIF89aS$X9(x 2qo~qtv%~+\N=G6PWNWBfcoFYbvp}~x=7flzcDBTgryp]oj{h{ϹW ,6>۞ڴpnGUfh92  aVato޿с؄Ҁӈ瀾瘿ᡊċƅΎ׈ӈݍӛݐܓڊݓٖߛܟɮƠΦźβȻظעڨ߱ÄيД؛ΥϮ²αڭػ!, H_:`})Ȱ?i&NvyYpXF%t͟sp$h' 9|ݿq{cx%;}B- S6_0:*V?ƹ&Z OPaO?U1g?1"$AGzŃ#;)BLy`F%WmxRTx@PA H}E*Uܸm|`C IdD6 0|M$-\9"W_ŵ`JAcč4njFI׼@sAk8b ; ? ,W D@ pЍ<8I8 ;"K- O[X!ESC] 8b @&_< F,jZ8`7(`@Pn'"6SPrJ#:ӏ(j tO7tF ;tuxcards/src/gui/cactusbar/flowers/neu2_flower_0.gif000555 000765 000024 00000000154 11420350116 023141 0ustar00alexstaff000000 000000 GIF89a  [&iab`wqk`טߦ]d˵!,XӉ<)$0;tuxcards/src/gui/cactusbar/flowers/neu2_flower_1.gif000555 000765 000024 00000000165 11420350116 023144 0ustar00alexstaff000000 000000 GIF89a  [&iab`wqk`טߦ]d˵!, "9= |]bj(@ZS G;tuxcards/src/gui/cactusbar/flowers/neu2_flower_2.gif000555 000765 000024 00000000212 11420350116 023136 0ustar00alexstaff000000 000000 GIF89a  [&iab`wqk`טߦ]d˵!, 7=ܜKD[@=`pa8JHvHL8@x4|-y>";tuxcards/src/gui/cactusbar/flowers/neu2_flower_3.gif000555 000765 000024 00000000263 11420350116 023145 0ustar00alexstaff000000 000000 GIF89a  [&iab`wqk`טߦ]d˵!,`I.H6-(48V҂@b)]Ee IB.iAJ#S=0c jm?x@ޑn;tuxcards/src/gui/cactusbar/flowers/neu2_flower_4.gif000555 000765 000024 00000000333 11420350116 023144 0ustar00alexstaff000000 000000 GIF89a  [&iab`wqk`טߦ]d˵!,禕Zy uݶ4# L(*QHu#ExVB, 8dB1i0cu{i.<`XVU}uYB ~7B6zVTAM&<];tuxcards/src/gui/cactusbar/flowers/new_flower_0.gif000555 000765 000024 00000000153 11420350116 023060 0ustar00alexstaff000000 000000 GIF89aB  Qfs &fnigOb!,0H&+$js PSYR;tuxcards/src/gui/cactusbar/flowers/new_flower_1.gif000555 000765 000024 00000000165 11420350116 023064 0ustar00alexstaff000000 000000 GIF89a B  Qfs &fnigOb!, "0HǤ鰋t4X1 Er.$yruݺ;tuxcards/src/gui/cactusbar/flowers/new_flower_2.gif000555 000765 000024 00000000216 11420350116 023062 0ustar00alexstaff000000 000000 GIF89a B  Qfs &fnigOb!, ;0ܼ /YTŇ\I4.\!W@"T c/CvW%;tuxcards/src/gui/cactusbar/flowers/new_flower_3.gif000555 000765 000024 00000000254 11420350116 023065 0ustar00alexstaff000000 000000 GIF89aB  Qfs &fnigOb!,Y0ܼX:rcyS[/\Β,,_PH Fr*n#a-FSI+ʦO~;tuxcards/src/gui/cactusbar/flowers/new_flower_4.gif000555 000765 000024 00000000352 11420350116 023065 0ustar00alexstaff000000 000000 GIF89aB  Qfs &fnigOb!,0)8O{|%LGnNQ ©@Xwʪ-Q0Eb\VI@hA1@48`8ycp 4IZ[\O.; D.9 K)l . Q0#lV .kl%+5%;tuxcards/src/gui/cactusbar/flowers/note.gif000555 000765 000024 00000000222 11420350116 021434 0ustar00alexstaff000000 000000 GIF89a@@@! ,?0IDQX깺u VYP%뢪mZ47f!#j7!* @QJ6;tuxcards/src/gui/cactusbar/flowers/pink_flower_0.gif000555 000765 000024 00000000151 11420350116 023226 0ustar00alexstaff000000 000000 GIF89a5='0w)]{Wy6Vʶe!,ItLgytRW\iF;tuxcards/src/gui/cactusbar/flowers/pink_flower_1.gif000555 000765 000024 00000000174 11420350116 023234 0ustar00alexstaff000000 000000 GIF89a 5='0w)]{Wy6Vʶe!, )I4q葞3f4S#L$$ LTP;ހ;";tuxcards/src/gui/cactusbar/flowers/pink_flower_2.gif000555 000765 000024 00000000222 11420350116 023227 0ustar00alexstaff000000 000000 GIF89a 5='0w)]{Wy6Vʶe!, ?I)q31>8F \8`!WcӜA074XLNѨu;tuxcards/src/gui/cactusbar/flowers/pink_flower_3.gif000555 000765 000024 00000000264 11420350116 023236 0ustar00alexstaff000000 000000 GIF89a5='0w)]{Wy6Vʶe!,aɉB8j40FaTPLNaC<ӡ$r2t04xŐX@f2o H\'@$;tuxcards/src/gui/cactusbar/flowers/pink_flower_4.gif000555 000765 000024 00000000343 11420350116 023235 0ustar00alexstaff000000 000000 GIF89a5='0w)]{Wy6Vʶe!,ɉL=m_ 8߁"PP{\W15CY6h$+`IrH0Iqh,E3<&Zq(ʷeHpvD\ d*O#1(#< \*T*#u;tuxcards/src/gui/cactusbar/flowers/pspbrwse.jbf000555 000765 000024 00000034333 11420350116 022342 0ustar00alexstaff000000 000000 JASC BROWS FILE.E:\Java\gebhard\cactus\flowers 46) Revert AseSave Copychricht sendenillionplyLuminanceColorSaturationHueLightenDarkenNormalDATAtsplatz\DATA (E:)\Java\gittblue_flower_1.gif |6"8( l``YcY^`YY qbc`` ^aaia cab_ia``ablue_flower_2.gif 4"8( `aZcZ``]Y``cZ`ZYZ a afY` ]` cfybaaab``iaaaaZY`b``^Yblue_flower_3.gif0"8(``aaY c]`]Y^ZbZ``aZZ a`Y`Z^ afi h cfbY`i bff yaa`a qثaacaa` `qiha^ac`a`Y]b ]aZY^a``aZYhblue_flower_4.gif,"8(|a````ZcZ aY^Z^` `` `YY^ `]` Y^`Yb_Y c`Zqi\ Z ifc aY`yq ^afa` ` ia^]]a af˅ihaa`a`x iyabaaca`qihaYbaaba`da`Ybaca_`_ZZa _^aZY^a`]]a^`^YdcZYblue2_flower_0.gifh:"8(0]]]\]Z]ei^[bbebc^^\]blue2_flower_1.gif r&"8( T^^]\][\\ei[\eZ[eeaac[Zdbaab]dc\^blue2_flower_2.gif $"8( l]^]^\\]]d\\^vva\[\baiive\eZZcedaadb ^[`_`a`ad c\_]\]\]d^deZ[]blue2_flower_3.gif  "8( c]^a]]\\^]]d]]^aaea]^Z\`]eiiea^[[cbvvivee\eZ[abeea`edbb [Z^cbeabbddb\a^^]]\^]db ca^]\[Z\]]b^^ ^de\[Z]a\\blue2_flower_4.gif"8(,cbdad\[Z\\d] ]^a^aa]^d\\ac^aveev\^\[\^a\eiiea^\[ Z\^ca\vivvee]\[Z]aediivvea^ eZ[]`eedaddcbd^[\^^aba]]baddac\\a]^]\\^]dda ^Z^]^b[]^^bb ^a]ceZ[\\^]da\\^\\]]pink_flower_0.gifi"8 (8l f fpink_flower_1.gif |"8 ( l//,/ A /l hf /@h/fpink_flower_2.gif "8 ( //////䁊   f/ lh/ff /A󗔓f,//ffpink_flower_3.gif "8 (//, /l /, //劍@   f/@ lfffl  f/f @󔑐 /A@g/f/,//fhpink_flower_4.gif"8 (|///, 咊/ l/ /, //// /@A䐍,  @f /@ lg f/  ff lAhf// @f /f@ @gf/󓔒///,,///,red_flower_0.gifi!8(0DDDDDD-+DDtt.D 0-+D1+.red_flower_1.gif s!8( TDDDD-EDD/-/DD*3u- D2,1D,-1DD-/2+Dred_flower_2.gif !8( lDDDD-DD D/--EDD+,+ss/+DD*tis2.D2- -3-D00/.D1*-/+D D-1+D.0Dred_flower_3.gif !8( DDDD1DDD D.+/-EDD D-,3,-0..D D+-ut*0+DD-3itt-2/D D12,10(*D 0-2/D13.-/12ED D-++/2DDD1D.0DDDD+/-DDred_flower_4.gif!8(,DDDD2DDDD+DD0DDDD/--.1.-DD.i3 3i-/0+DD+/,utu3*1.DDD-3su+-/DDD.1istu30(DD23- -Ř0(4D10-00.*.DD0-++--1+DDD./(D.//DDD D/*D21/DDDD+/+1DDDD-+DDyellow_flower_4.gifq8(|uuvuututs qsttuouv vutstotutu stusiutuvsiցqutsroo{ք {tsuEoq~ut~|uu|oouttu{{poo~|uuuEooE|ւuux ttu{}|suutuqxusuu vuusttuuفuusuuutuօtutsxsyօblue_flower_0.gifi*"8(8bZZaZ ac baZyellow_flower_3.gifq8(uvuutu ittuov svsituuqցqtsiooփ ~|tuEoou{oo~|uu{Eoo|ւuutu|}suف uqusuuفuusuuutututyyellow_flower_2.gif 6q8( vvsuittuuuqxtqoo؃~|uEo{oo~|ttu|s uqusuفuusuvtuyellow_flower_1.gif |Nq8( lքvssvtuuuqqt~uou|{oo}u tu~tuvusuvsyellow_flower_0.gifl^q8(8uvs trs~sEoo~utnew_flower_4.gifu8(VVhVVVVhVVVVhVVVhVVhVVVhhVVVV //1VVVh/1%hӚ3VVV Vh1)& 1+1ߚhVVh1% &VVV V&۹!!/hVVVVh!Ձ!!%+߂VVVVh!|V!)VVVV/%|%չ߃VVVh111%)%!!әVVhhVVh!!3VVV V%њ!߂VVVVh Ӛh՚hhVVVVh߈VVVVhӕ3VVVVhVVVVhVVnew_flower_3.gifu8(VVhVVhVVhVVhhVV//h1V Vh/)1&ӚVVVh1+1hV Vh&!!hV Vh!!&+VV!}!VVh11)%!!ӂVVhhVV!ӇV Vh&њ!hVVh+VV3VVhVVnew_flower_2.gif u8( VVhVVhVVhVVhV V/hV Vh%1/1VV1&ՂV V!!V V|ځVVhVV!!ӅVV!%6!hVV&VVhVVnew_flower_1.gif uu8( lVVVVhVVVhVVh+VVV1/߂VV/hVV|!OVhVVVVhhVVVhVVnew_flower_0.gifk v8(8VVhVVVVhVVV1VVV&|VVVhh!VVVVVneu2_flower_4.gifzy8( ߁x|xrx|u ||QQ Q Q߁QQ    x|| Q Q#́uu|߁#Q Qu| x uQQx|Q uu |xQ߁ xx߁|uQ Q Q x|u QQQ Qu|x8Q|Qu|߁|xj|xQ x||xԃ||xxQqxx|xx|||||xx|||neu2_flower_3.gify8(@|xx߁ u #ԁ QQ  Q Q߁QQx| ߁Q#uu x u x|QQuu |x ߁QQxx|u Qxx | u||x|xQ x||xՂ||xxQqx|x||||xxneu2_flower_2.gif y8 ( |x߁Q ߁QQ #u uQ|&u|u QQ xxQ ||QxQx |x|||xneu2_flower_1.gif uy8!( l |Qԁ Q߂ u Qu |QQ u 8 u|||xQx߃neu2_flower_0.gifly8"(8Ձ j߁Q#QQ|x|xQxgreat_flower256_4.gif|8#(05 h4蓙101025 ہցϵ$fg5135Ŀt t42f21ttuwxہ3tuyuwŚ5 ꕘ30t x452h241ty4ꖕ2.4߁h642肕424ꁓꁗf蔁薕 fgreat_flower256_3.gif|8$(ߘ  攙0"ցϵ͈Ϙfǿف521tuuxځ2 uyꘙ3 tw412144g 2.߂2 4ꁕ4f蕗fgreat_flower256_2.gif }8%( 5h40Й01fȿ521tvښut6530ۘꕓ.ǁ6蕂ꖁfgreat_flower256_1.gif x2}8&( `03Ϙǿ 2tx3x 4/h53ꁕgreat_flower256_0.gifT@}8'(00К2t0tO23beauty_flower_4.gif ~8(( 3/''0/0'"' '""#&'#//'2#"##'##"'"##&#&### 0"#'&##׌3/"3#"#/0032120 0303/beauty_flower_3.gif~8)(/ꌉ2''1/'#"''&#"#'#劇#/'"Њ '#'"/&3##/00202303beauty_flower_2.gif ~8*( #''#/'/#"'"#"' 1#""3/0203beauty_flower_1.gif {~8+( l3'3"#&#'## '#0 1beauty_flower_0.gifm~8,(83##"'" 23 label.gif |8-(   ~~~ ~ ~~~  ~ ~ ~~ ~~~ ~~~ ~ ~~ ~~~~~~~~ ~~~~~tuxcards/src/gui/cactusbar/flowers/red_flower_0.gif000555 000765 000024 00000000151 11420350116 023037 0ustar00alexstaff000000 000000 GIF89a@@V]X:Ux4ǵ!,0&13$E`^ǪF;tuxcards/src/gui/cactusbar/flowers/red_flower_1.gif000555 000765 000024 00000000163 11420350116 023043 0ustar00alexstaff000000 000000 GIF89a @@V]X:Ux4ǵ!,  0RaB2v8p (BdRPĭ;tuxcards/src/gui/cactusbar/flowers/red_flower_2.gif000555 000765 000024 00000000207 11420350116 023043 0ustar00alexstaff000000 000000 GIF89a @@V]X:Ux4ǵ!, 40biQtA!; r""@( gjI 2RR]2hrtE!.B;tuxcards/src/gui/cactusbar/flowers/sign.gif000555 000765 000024 00000000363 11420350116 021435 0ustar00alexstaff000000 000000 GIF89a(!,(ITV$$X kܺ@N!.x7$n <Ƙ21HP`PR$D2DG+'T9sdxu1NNIRn{yr`BKeW9V(_\\|4my=Lq%7$';tuxcards/src/gui/cactusbar/flowers/yellow_flower_0.gif000555 000765 000024 00000000154 11420350116 023603 0ustar00alexstaff000000 000000 GIF89a{ 8 $n\ؕ˕h5!,Ia$:O `!B@''E;tuxcards/src/gui/cactusbar/flowers/yellow_flower_1.gif000555 000765 000024 00000000174 11420350116 023606 0ustar00alexstaff000000 000000 GIF89a { 8 $n\ؕ˕h5!, )  2Ɛ // ------------------------------------------------------------------------------- BookmarkButton::BookmarkButton(QPixmap pixmap, QString text, QWidget* parent, Path aPath) :QPushButton(pixmap, text, parent) // ------------------------------------------------------------------------------- { this->path = new Path(aPath.toString()); connect( this, SIGNAL(clicked()), this, SLOT(sendActivateSignal()) ); } // ------------------------------------------------------------------------------- BookmarkButton::~BookmarkButton() // ------------------------------------------------------------------------------- { } // ------------------------------------------------------------------------------- void BookmarkButton::sendActivateSignal() // ------------------------------------------------------------------------------- { emit activatedSignal(path); } tuxcards/src/gui/bookmark/BookmarkButton.h000555 000765 000024 00000002713 11420350116 021276 0ustar00alexstaff000000 000000 /*************************************************************************** BookmarkButton.h - description ------------------- begin : Fri Jan 31 2003 copyright : (C) 2003 by Alexander Theel email : alex.theel@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #ifndef BOOKMARK_BUTTON_H #define BOOKMARK_BUTTON_H #include //Added by qt3to4: #include #include #include "../../information/Path.h" class BookmarkButton : public QPushButton{ Q_OBJECT public: BookmarkButton(QPixmap pixmap, QString text, QWidget* parent, Path aPath); ~BookmarkButton(); private slots: void sendActivateSignal(); private: Path* path; signals: void activatedSignal(Path*); }; #endif

    " // "Aligns the currently edited paragraph on both sides " // "within the editor."); #endiftuxcards/src/gui/recentFileList/CRecentFileList.cpp000555 000765 000024 00000016543 11420350116 022764 0ustar00alexstaff000000 000000 /*************************************************************************** CRecentFileList.cpp - description ------------------- begin : Sun Feb 09 2003 copyright : (C) 2003 by Alexander Theel email : alex.theel@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #include "CRecentFileList.h" #include "../../global.h" //#include #include #include #include #include const QString CRecentFileList::SEPARATOR = ","; const uint CRecentFileList::MAX_ELEMENT_COUNT = 5; /** * Constructor */ // ------------------------------------------------------------------------------- CRecentFileList::CRecentFileList( QWidget* pParent, QMenu* pParentMenu, const QString& sFiles ) : QObject() , mpParentMenu( 0 ) , mpRecentlyFilesMenu( 0 ) , mpComboBox( 0 ) // ------------------------------------------------------------------------------- { mpRecentlyFilesMenu = new QMenu( tr("Recently Used Files") ); pParentMenu->addMenu( mpRecentlyFilesMenu ); createActions( pParent ); setList( sFiles ); update(); } // ------------------------------------------------------------------------------- void CRecentFileList::createActions( QWidget* pParent ) // ------------------------------------------------------------------------------- { QAction* pAction; for ( uint i = 0; i < MAX_ELEMENT_COUNT; i++ ) { pAction = new QAction( pParent ); pAction->setVisible( false ); connect( pAction, SIGNAL(triggered()), this, SLOT(slotOpenRecentFile()) ); mpRecentlyFilesMenu->addAction( pAction ); mRecentFileActs.append( pAction ); } } /** * Sets the given string on top of the list. If the string * is already within the list, it is moved to the first position. */ // ------------------------------------------------------------------------------- void CRecentFileList::setOnTop( const QString& sAbsPath ) // ------------------------------------------------------------------------------- { remove( sAbsPath ); mFileList.prepend( sAbsPath ); update(); } /** * Updates the corresponding recent file list. * */ // ------------------------------------------------------------------------------- void CRecentFileList::setList( const QString& sFiles ) // ------------------------------------------------------------------------------- { if ( sFiles.isEmpty() ) { mFileList.clear(); return; } mFileList = sFiles.split( SEPARATOR ); } // ------------------------------------------------------------------------------- void CRecentFileList::update() // ------------------------------------------------------------------------------- { checkSize(); updateMenu(); updateComboBox(); } /** * Makes sure that the file list is limited to MAX_ELEMENT_COUNT. * Any additional elements will be removed from the list. * */ // ------------------------------------------------------------------------------- void CRecentFileList::checkSize() // ------------------------------------------------------------------------------- { while ((uint)mFileList.count() > MAX_ELEMENT_COUNT) { mFileList.removeLast(); } } /** * Updates the corresponding recent menu. * */ // ------------------------------------------------------------------------------- void CRecentFileList::updateMenu() // ------------------------------------------------------------------------------- { // set the recent files as visible for ( int i=0; i < mFileList.count(); i++ ) { QString sText = QString("&%1 %2").arg(i + 1).arg( mFileList[i] ); mRecentFileActs[i]->setText( sText ); mRecentFileActs[i]->setData( mFileList[i] ); mRecentFileActs[i]->setVisible( true ); } // set the remaining items as not visible for ( uint j = mFileList.count(); j < MAX_ELEMENT_COUNT; ++j ) mRecentFileActs[j]->setVisible( false ); } // ------------------------------------------------------------------------------- void CRecentFileList::slotOpenRecentFile() // ------------------------------------------------------------------------------- { QAction* pAction = qobject_cast( sender() ); if ( !pAction ) return; QString sFileName = pAction->data().toString(); if ( QFile::exists(sFileName) ) { emit openFile(sFileName); setOnTop(sFileName); } else { if (QMessageBox::Yes == QMessageBox::warning(0, "File not found", "The file '"+sFileName+"' does not exist.\n" "Do you want to remove it from the recent file menu?", QMessageBox::Yes, QMessageBox::No)) { remove( sFileName ); update(); } } } /** * Removes the specified file from the list and updates the * recent file menu. */ // ------------------------------------------------------------------------------- void CRecentFileList::remove( const QString& sAbsPath ) // ------------------------------------------------------------------------------- { if ( mFileList.contains( sAbsPath ) ) { int iIndex = mFileList.indexOf( sAbsPath ); if ( -1 != iIndex ) mFileList.removeAt( iIndex ); //std::cout<<" file removed; new list = "<parentWidget. * As long as the comboBox exist, it is updated. * * Please note: If a comboBox did already exist then the old one is deleted. */ // ------------------------------------------------------------------------------- void CRecentFileList::createComboBox( QWidget& parentWidget ) // ------------------------------------------------------------------------------- { if ( mpComboBox ) DELETE( mpComboBox ); mpComboBox = new QComboBox( &parentWidget ); connect( mpComboBox, SIGNAL( activated( int ) ), this, SLOT( slotRecenlyOpenedFilesActivated( int ) ) ); updateComboBox(); } /** * Updates the data within the comboBox (if a comboBox exists). */ // ------------------------------------------------------------------------------- void CRecentFileList::updateComboBox() // ------------------------------------------------------------------------------- { if ( !mpComboBox ) return; mpComboBox->clear(); mpComboBox->addItems( mFileList ); } // ------------------------------------------------------------------------------- QString CRecentFileList::toString() const // ------------------------------------------------------------------------------- { return mFileList.join( SEPARATOR ); } tuxcards/src/gui/recentFileList/CRecentFileList.h000555 000765 000024 00000005021 11420350116 022416 0ustar00alexstaff000000 000000 /*************************************************************************** CRecentFileList.h - description ------------------- begin : Sun Feb 09 2003 copyright : (C) 2003 by Alexander Theel email : alex.theel@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #ifndef RECENTFILELIST_H #define RECENTFILELIST_H #include #include class QMenu; class QComboBox; class QAction; /** * Class that provides a recent file list. The data structure of the file list * is keeped as well as popup menu for opening one of the recently used files. * * The popup menu is inserted as submenu into the given pParentMenu. * * At wish a comboBox displaying the recent file files may be created, too. * To do so, call createComboBox(). The comboBox may be added to * any widget.s */ class CRecentFileList : public QObject { Q_OBJECT public: CRecentFileList( QWidget* pParent, QMenu* pParentMenu, const QString& sFiles="" ); void setOnTop( const QString& sAbsPath ); void createComboBox( QWidget& parentWidget ); QString toString() const; private: QMenu* mpParentMenu; QStringList mFileList; QMenu* mpRecentlyFilesMenu; QComboBox* mpComboBox; static const QString SEPARATOR; static const uint MAX_ELEMENT_COUNT; QList mRecentFileActs; void createActions( QWidget* pParent ); void setList( const QString& sFiles ); void checkSize(); void update(); void updateMenu(); void updateComboBox(); void remove( const QString& sAbsPath ); private slots: void slotOpenRecentFile(); signals: void openFile( QString sFileName ); }; #endif tuxcards/src/gui/editor/CEditor.cpp000555 000765 000024 00000054411 11420350116 017704 0ustar00alexstaff000000 000000 /*************************************************************************** CEditor.cpp - description ------------------- begin : Sun Mar 26 2000 copyright : (C) 2000 by Alexander Theel email : alex.theel@gmx.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #include "CEditor.h" #include #include #include "../../CTuxCardsConfiguration.h" #include #include #include #include #include // ------------------------------------------------------------------------------- CEditor::CEditor( QWidget *pParent ) : QTextEdit( pParent ) , mpActiveElement( NULLPTR ) , SEMAPHORE_TEXT_WAS_SET( FALSE ) // , meLinebreakMode( LINEBREAK_WITH_CTRL_SHIFT ) , mbUseRichText( true ) , mEditorFont() // ------------------------------------------------------------------------------- { initialize(); connect( this, SIGNAL(cursorPositionChanged()), this, SLOT(checkAlignment()) ); } // ------------------------------------------------------------------------------- CEditor::~CEditor( void ) // ------------------------------------------------------------------------------- { mpActiveElement = NULLPTR; } // ************** IView ********************************************************* // ------------------------------------------------------------------------------- void CEditor::aboutToRemoveElement( CInformationElement* pIE ) // ------------------------------------------------------------------------------- { if ( mpActiveElement == pIE ) { mpActiveElement = NULLPTR; } } // ************** IView - End **************************************************** /** * Returns the complete Text. */ // ------------------------------------------------------------------------------- QString CEditor::getText( void ) // ------------------------------------------------------------------------------- { return toPlainText(); } // ------------------------------------------------------------------------------- void CEditor::setText( const QString& sText ) // ------------------------------------------------------------------------------- { SEMAPHORE_TEXT_WAS_SET = TRUE; if ( mbUseRichText ) setHtml( sText ); else { setCurrentFont( mEditorFont ); // use the same font for all ASCII contents setPlainText( sText ); } } /** * Rereads the information from the currently active * informationElement; usually in course of the event * 'CInformationElement::informationHasChanged()'. */ // // ------------------------------------------------------------------------------- // void CEditor::rereadInformation( void ) // // ------------------------------------------------------------------------------- // { // if ( NULLPTR == mpActiveElement ) // return; // // setText( mpActiveElement->getInformation() ); // } // ------------------------------------------------------------------------------- void CEditor::clear( void ) // ------------------------------------------------------------------------------- { initialize(); } /** * Set the editor font (= font for ASCII texts and default font for RTF texts). * If an ASCII text is visible, then its font is changed right away. */ // ------------------------------------------------------------------------------- void CEditor::setEditorFont( const QFont& f ) // ------------------------------------------------------------------------------- { mEditorFont = f; // if ascii entry is activ then change the font for the displayed entry right away if ( !mbUseRichText ) { if ( mpActiveElement ) { // Remember the cursor position and set it after font change. // (Just remebering the cursor and setting it does not work with qt4.3.1 // there is in error within the implementation or documentation.) int iCursorPos = textCursor().position(); writeCurrentTextToActiveInformationElement(); setText( mpActiveElement->getInformation() ); QTextCursor c = textCursor(); c.setPosition( iCursorPos ); setTextCursor( c ); } } } // ------------------------------------------------------------------------------- void CEditor::initialize( void ) // ------------------------------------------------------------------------------- { setText(""); mpActiveElement = NULLPTR; SEMAPHORE_TEXT_WAS_SET = FALSE; // connect( this, SIGNAL(textChanged()), this, SLOT(sendUndoAvailableSignal())); // connect( this, SIGNAL(textChanged()), this, SLOT(sendRedoAvailableSignal())); } /** * Checks whether the current horizontal text alignment has changed. If yes, * then an appropriate signal is sent. */ // ------------------------------------------------------------------------------- void CEditor::checkAlignment() // ------------------------------------------------------------------------------- { static Qt::Alignment static_lastAlignment = Qt::AlignLeft; if ( alignment() != static_lastAlignment ) { static_lastAlignment = alignment(); emit( currentHAlignmentChanged(static_lastAlignment) ); } } /** * This method sends the signal 'undoAvailable()' because the base * class (qtextedit qt-3.0.5) does not send it correctly. But the * signal is not send whenever the text was set with 'setText()' * method to prevent that the user gets the text from another * document while doing an undo. */ /* maybe this is not needed with qt4 // ------------------------------------------------------------------------------- void CEditor::sendUndoAvailableSignal( void ) // ------------------------------------------------------------------------------- { if ( isUndoAvailable() ) { if ( SEMAPHORE_TEXT_WAS_SET ) SEMAPHORE_TEXT_WAS_SET = FALSE; else emit undoAvailable( TRUE ); } } */ /** * Similar to the method above ('sendUndoAvailableSignal()'). * This method sends the signal 'redoAvailable()' because the base * class (qtextedit qt-3.0.5) does not send it correctly. */ /* maybe this is not needed with qt4 // ------------------------------------------------------------------------------- void CEditor::sendRedoAvailableSignal( void ) // ------------------------------------------------------------------------------- { if ( isRedoAvailable() ) emit redoAvailable(true); } */ // ------------------------------------------------------------------------------- void CEditor::writeCurrentTextToActiveInformationElement( void ) // ------------------------------------------------------------------------------- { if ( !mpActiveElement ) return; // saving cursor- and scrollbarPositions // int line, pos; getCursorPosition(&line, &pos); // int verticalScrollBarPosition = verticalScrollBar()->value(); // int horizontalScrollBarPosition = horizontalScrollBar()->value(); // cout<<"vorher: Text "<")<Richtext