53 files changed, 10006 insertions, 0 deletions
diff --git a/noncore/apps/zsafe/LICENSE b/noncore/apps/zsafe/LICENSE new file mode 100644 index 0000000..c7aea18 --- a/dev/null +++ b/noncore/apps/zsafe/LICENSE | |||
@@ -0,0 +1,280 @@ | |||
1 | GNU GENERAL PUBLIC LICENSE | ||
2 | Version 2, June 1991 | ||
3 | |||
4 | Copyright (C) 1989, 1991 Free Software Foundation, Inc. | ||
5 | 675 Mass Ave, Cambridge, MA 02139, USA | ||
6 | Everyone is permitted to copy and distribute verbatim copies | ||
7 | of this license document, but changing it is not allowed. | ||
8 | |||
9 | Preamble | ||
10 | |||
11 | The licenses for most software are designed to take away your | ||
12 | freedom to share and change it. By contrast, the GNU General Public | ||
13 | License is intended to guarantee your freedom to share and change free | ||
14 | software--to make sure the software is free for all its users. This | ||
15 | General Public License applies to most of the Free Software | ||
16 | Foundation's software and to any other program whose authors commit to | ||
17 | using it. (Some other Free Software Foundation software is covered by | ||
18 | the GNU Library General Public License instead.) You can apply it to | ||
19 | your programs, too. | ||
20 | |||
21 | When we speak of free software, we are referring to freedom, not | ||
22 | price. Our General Public Licenses are designed to make sure that you | ||
23 | have the freedom to distribute copies of free software (and charge for | ||
24 | this service if you wish), that you receive source code or can get it | ||
25 | if you want it, that you can change the software or use pieces of it | ||
26 | in new free programs; and that you know you can do these things. | ||
27 | |||
28 | To protect your rights, we need to make restrictions that forbid | ||
29 | anyone to deny you these rights or to ask you to surrender the rights. | ||
30 | These restrictions translate to certain responsibilities for you if you | ||
31 | distribute copies of the software, or if you modify it. | ||
32 | |||
33 | For example, if you distribute copies of such a program, whether | ||
34 | gratis or for a fee, you must give the recipients all the rights that | ||
35 | you have. You must make sure that they, too, receive or can get the | ||
36 | source code. And you must show them these terms so they know their | ||
37 | rights. | ||
38 | |||
39 | We protect your rights with two steps: (1) copyright the software, and | ||
40 | (2) offer you this license which gives you legal permission to copy, | ||
41 | distribute and/or modify the software. | ||
42 | |||
43 | Also, for each author's protection and ours, we want to make certain | ||
44 | that everyone understands that there is no warranty for this free | ||
45 | software. If the software is modified by someone else and passed on, we | ||
46 | want its recipients to know that what they have is not the original, so | ||
47 | that any problems introduced by others will not reflect on the original | ||
48 | authors' reputations. | ||
49 | |||
50 | Finally, any free program is threatened constantly by software | ||
51 | patents. We wish to avoid the danger that redistributors of a free | ||
52 | program will individually obtain patent licenses, in effect making the | ||
53 | program proprietary. To prevent this, we have made it clear that any | ||
54 | patent must be licensed for everyone's free use or not licensed at all. | ||
55 | |||
56 | The precise terms and conditions for copying, distribution and | ||
57 | modification follow. | ||
58 | |||
59 | GNU GENERAL PUBLIC LICENSE | ||
60 | TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION | ||
61 | |||
62 | 0. This License applies to any program or other work which contains | ||
63 | a notice placed by the copyright holder saying it may be distributed | ||
64 | under the terms of this General Public License. The "Program", below, | ||
65 | refers to any such program or work, and a "work based on the Program" | ||
66 | means either the Program or any derivative work under copyright law: | ||
67 | that is to say, a work containing the Program or a portion of it, | ||
68 | either verbatim or with modifications and/or translated into another | ||
69 | language. (Hereinafter, translation is included without limitation in | ||
70 | the term "modification".) Each licensee is addressed as "you". | ||
71 | |||
72 | Activities other than copying, distribution and modification are not | ||
73 | covered by this License; they are outside its scope. The act of | ||
74 | running the Program is not restricted, and the output from the Program | ||
75 | is covered only if its contents constitute a work based on the | ||
76 | Program (independent of having been made by running the Program). | ||
77 | Whether that is true depends on what the Program does. | ||
78 | |||
79 | 1. You may copy and distribute verbatim copies of the Program's | ||
80 | source code as you receive it, in any medium, provided that you | ||
81 | conspicuously and appropriately publish on each copy an appropriate | ||
82 | copyright notice and disclaimer of warranty; keep intact all the | ||
83 | notices that refer to this License and to the absence of any warranty; | ||
84 | and give any other recipients of the Program a copy of this License | ||
85 | along with the Program. | ||
86 | |||
87 | You may charge a fee for the physical act of transferring a copy, and | ||
88 | you may at your option offer warranty protection in exchange for a fee. | ||
89 | |||
90 | 2. You may modify your copy or copies of the Program or any portion | ||
91 | of it, thus forming a work based on the Program, and copy and | ||
92 | distribute such modifications or work under the terms of Section 1 | ||
93 | above, provided that you also meet all of these conditions: | ||
94 | |||
95 | a) You must cause the modified files to carry prominent notices | ||
96 | stating that you changed the files and the date of any change. | ||
97 | |||
98 | b) You must cause any work that you distribute or publish, that in | ||
99 | whole or in part contains or is derived from the Program or any | ||
100 | part thereof, to be licensed as a whole at no charge to all third | ||
101 | parties under the terms of this License. | ||
102 | |||
103 | c) If the modified program normally reads commands interactively | ||
104 | when run, you must cause it, when started running for such | ||
105 | interactive use in the most ordinary way, to print or display an | ||
106 | announcement including an appropriate copyright notice and a | ||
107 | notice that there is no warranty (or else, saying that you provide | ||
108 | a warranty) and that users may redistribute the program under | ||
109 | these conditions, and telling the user how to view a copy of this | ||
110 | License. (Exception: if the Program itself is interactive but | ||
111 | does not normally print such an announcement, your work based on | ||
112 | the Program is not required to print an announcement.) | ||
113 | |||
114 | These requirements apply to the modified work as a whole. If | ||
115 | identifiable sections of that work are not derived from the Program, | ||
116 | and can be reasonably considered independent and separate works in | ||
117 | themselves, then this License, and its terms, do not apply to those | ||
118 | sections when you distribute them as separate works. But when you | ||
119 | distribute the same sections as part of a whole which is a work based | ||
120 | on the Program, the distribution of the whole must be on the terms of | ||
121 | this License, whose permissions for other licensees extend to the | ||
122 | entire whole, and thus to each and every part regardless of who wrote it. | ||
123 | |||
124 | Thus, it is not the intent of this section to claim rights or contest | ||
125 | your rights to work written entirely by you; rather, the intent is to | ||
126 | exercise the right to control the distribution of derivative or | ||
127 | collective works based on the Program. | ||
128 | |||
129 | In addition, mere aggregation of another work not based on the Program | ||
130 | with the Program (or with a work based on the Program) on a volume of | ||
131 | a storage or distribution medium does not bring the other work under | ||
132 | the scope of this License. | ||
133 | |||
134 | 3. You may copy and distribute the Program (or a work based on it, | ||
135 | under Section 2) in object code or executable form under the terms of | ||
136 | Sections 1 and 2 above provided that you also do one of the following: | ||
137 | |||
138 | a) Accompany it with the complete corresponding machine-readable | ||
139 | source code, which must be distributed under the terms of Sections | ||
140 | 1 and 2 above on a medium customarily used for software interchange; or, | ||
141 | |||
142 | b) Accompany it with a written offer, valid for at least three | ||
143 | years, to give any third party, for a charge no more than your | ||
144 | cost of physically performing source distribution, a complete | ||
145 | machine-readable copy of the corresponding source code, to be | ||
146 | distributed under the terms of Sections 1 and 2 above on a medium | ||
147 | customarily used for software interchange; or, | ||
148 | |||
149 | c) Accompany it with the information you received as to the offer | ||
150 | to distribute corresponding source code. (This alternative is | ||
151 | allowed only for noncommercial distribution and only if you | ||
152 | received the program in object code or executable form with such | ||
153 | an offer, in accord with Subsection b above.) | ||
154 | |||
155 | The source code for a work means the preferred form of the work for | ||
156 | making modifications to it. For an executable work, complete source | ||
157 | code means all the source code for all modules it contains, plus any | ||
158 | associated interface definition files, plus the scripts used to | ||
159 | control compilation and installation of the executable. However, as a | ||
160 | special exception, the source code distributed need not include | ||
161 | anything that is normally distributed (in either source or binary | ||
162 | form) with the major components (compiler, kernel, and so on) of the | ||
163 | operating system on which the executable runs, unless that component | ||
164 | itself accompanies the executable. | ||
165 | |||
166 | If distribution of executable or object code is made by offering | ||
167 | access to copy from a designated place, then offering equivalent | ||
168 | access to copy the source code from the same place counts as | ||
169 | distribution of the source code, even though third parties are not | ||
170 | compelled to copy the source along with the object code. | ||
171 | |||
172 | 4. You may not copy, modify, sublicense, or distribute the Program | ||
173 | except as expressly provided under this License. Any attempt | ||
174 | otherwise to copy, modify, sublicense or distribute the Program is | ||
175 | void, and will automatically terminate your rights under this License. | ||
176 | However, parties who have received copies, or rights, from you under | ||
177 | this License will not have their licenses terminated so long as such | ||
178 | parties remain in full compliance. | ||
179 | |||
180 | 5. You are not required to accept this License, since you have not | ||
181 | signed it. However, nothing else grants you permission to modify or | ||
182 | distribute the Program or its derivative works. These actions are | ||
183 | prohibited by law if you do not accept this License. Therefore, by | ||
184 | modifying or distributing the Program (or any work based on the | ||
185 | Program), you indicate your acceptance of this License to do so, and | ||
186 | all its terms and conditions for copying, distributing or modifying | ||
187 | the Program or works based on it. | ||
188 | |||
189 | 6. Each time you redistribute the Program (or any work based on the | ||
190 | Program), the recipient automatically receives a license from the | ||
191 | original licensor to copy, distribute or modify the Program subject to | ||
192 | these terms and conditions. You may not impose any further | ||
193 | restrictions on the recipients' exercise of the rights granted herein. | ||
194 | You are not responsible for enforcing compliance by third parties to | ||
195 | this License. | ||
196 | |||
197 | 7. If, as a consequence of a court judgment or allegation of patent | ||
198 | infringement or for any other reason (not limited to patent issues), | ||
199 | conditions are imposed on you (whether by court order, agreement or | ||
200 | otherwise) that contradict the conditions of this License, they do not | ||
201 | excuse you from the conditions of this License. If you cannot | ||
202 | distribute so as to satisfy simultaneously your obligations under this | ||
203 | License and any other pertinent obligations, then as a consequence you | ||
204 | may not distribute the Program at all. For example, if a patent | ||
205 | license would not permit royalty-free redistribution of the Program by | ||
206 | all those who receive copies directly or indirectly through you, then | ||
207 | the only way you could satisfy both it and this License would be to | ||
208 | refrain entirely from distribution of the Program. | ||
209 | |||
210 | If any portion of this section is held invalid or unenforceable under | ||
211 | any particular circumstance, the balance of the section is intended to | ||
212 | apply and the section as a whole is intended to apply in other | ||
213 | circumstances. | ||
214 | |||
215 | It is not the purpose of this section to induce you to infringe any | ||
216 | patents or other property right claims or to contest validity of any | ||
217 | such claims; this section has the sole purpose of protecting the | ||
218 | integrity of the free software distribution system, which is | ||
219 | implemented by public license practices. Many people have made | ||
220 | generous contributions to the wide range of software distributed | ||
221 | through that system in reliance on consistent application of that | ||
222 | system; it is up to the author/donor to decide if he or she is willing | ||
223 | to distribute software through any other system and a licensee cannot | ||
224 | impose that choice. | ||
225 | |||
226 | This section is intended to make thoroughly clear what is believed to | ||
227 | be a consequence of the rest of this License. | ||
228 | |||
229 | 8. If the distribution and/or use of the Program is restricted in | ||
230 | certain countries either by patents or by copyrighted interfaces, the | ||
231 | original copyright holder who places the Program under this License | ||
232 | may add an explicit geographical distribution limitation excluding | ||
233 | those countries, so that distribution is permitted only in or among | ||
234 | countries not thus excluded. In such case, this License incorporates | ||
235 | the limitation as if written in the body of this License. | ||
236 | |||
237 | 9. The Free Software Foundation may publish revised and/or new versions | ||
238 | of the General Public License from time to time. Such new versions will | ||
239 | be similar in spirit to the present version, but may differ in detail to | ||
240 | address new problems or concerns. | ||
241 | |||
242 | Each version is given a distinguishing version number. If the Program | ||
243 | specifies a version number of this License which applies to it and "any | ||
244 | later version", you have the option of following the terms and conditions | ||
245 | either of that version or of any later version published by the Free | ||
246 | Software Foundation. If the Program does not specify a version number of | ||
247 | this License, you may choose any version ever published by the Free Software | ||
248 | Foundation. | ||
249 | |||
250 | 10. If you wish to incorporate parts of the Program into other free | ||
251 | programs whose distribution conditions are different, write to the author | ||
252 | to ask for permission. For software which is copyrighted by the Free | ||
253 | Software Foundation, write to the Free Software Foundation; we sometimes | ||
254 | make exceptions for this. Our decision will be guided by the two goals | ||
255 | of preserving the free status of all derivatives of our free software and | ||
256 | of promoting the sharing and reuse of software generally. | ||
257 | |||
258 | NO WARRANTY | ||
259 | |||
260 | 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY | ||
261 | FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN | ||
262 | OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES | ||
263 | PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED | ||
264 | OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF | ||
265 | MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS | ||
266 | TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE | ||
267 | PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, | ||
268 | REPAIR OR CORRECTION. | ||
269 | |||
270 | 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING | ||
271 | WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR | ||
272 | REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, | ||
273 | INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING | ||
274 | OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED | ||
275 | TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY | ||
276 | YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER | ||
277 | PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE | ||
278 | POSSIBILITY OF SUCH DAMAGES. | ||
279 | |||
280 | END OF TERMS AND CONDITIONS | ||
diff --git a/noncore/apps/zsafe/README b/noncore/apps/zsafe/README new file mode 100644 index 0000000..9ac3b84 --- a/dev/null +++ b/noncore/apps/zsafe/README | |||
@@ -0,0 +1,72 @@ | |||
1 | Program: ZSafe | ||
2 | |||
3 | Author: Carsten Schneider <CarstenSchneider@t-online.de> | ||
4 | |||
5 | Homepage: http://home.t-online.de/home/CarstenSchneider/zsafe/index.html | ||
6 | |||
7 | Description: | ||
8 | |||
9 | This password manager program works with the Sharp Zaurus SL5000 or SL5500. | ||
10 | To compile you should download the Qtopia SDK from www.trolltech.com and | ||
11 | read the section 'Qtopia - Getting Started' first. | ||
12 | |||
13 | Compilation: | ||
14 | |||
15 | make.sh cross... to create the package for the Zaurus | ||
16 | make.sh native... to create the package for the Host System | ||
17 | |||
18 | History: | ||
19 | 2002-04-09: 1.0.0: first version | ||
20 | 2002-04-23: 1.0.1: creation of the "Documents/text/plain" folder if the folder | ||
21 | does not exists | ||
22 | 2002-04-27: 1.0.2: If no password file exists a password is not required to | ||
23 | proceed. | ||
24 | If the password is wrong the program terminates. | ||
25 | 2002-04-29: 1.0.3: To enter a new password it must be entered twice. | ||
26 | Double clicking onto a password entry displays an | ||
27 | information form. | ||
28 | After a resume the password must be entered again. | ||
29 | 2002-05-03: 1.0.4: Crashes after resume fixed. | ||
30 | 2002-05-11: 1.0.5: Uncrypted ascii text import/export functionality added. | ||
31 | 2002-07-07: 1.0.6: Definition of own categories and cut/copy/paste of entries. | ||
32 | 2002-07-13: 1.0.7: Multi line comment field | ||
33 | password validation improved | ||
34 | File menu expanded to 'Save document' | ||
35 | Usage of html tags within the comment field | ||
36 | 2002-07-14: 1.0.8: Clicking with middle cursor key onto a password entry | ||
37 | displayes the info form. | ||
38 | Option 'File -> Open entries expanded' added. | ||
39 | 2002-07-24: 1.0.9: Search improved | ||
40 | 2002-08-03: 1.0.10: saving of the configuration file corrected | ||
41 | 2002-08-03: 1.0.11: renaming of categories corrected | ||
42 | category dialog displayes now icons instead of icon | ||
43 | file names | ||
44 | 2002-09-06: 1.0.11: Linux PC version of zsafe created | ||
45 | 2002-09-08: 2.0.0 : Field names of the categories editable | ||
46 | two additional fields added | ||
47 | 2003-02-01: 2.0.1 : German translation from Robert Ernst added | ||
48 | 2003-04-01: 2.0.2 : Windows desctop version created | ||
49 | cleaning of clipboard after ZSafe exit | ||
50 | 2003-05-27: 2.0.3 : Window resizing enhancements to better support | ||
51 | of screen rotation | ||
52 | 2003-06-02: 2.1.0 : Document handling added (New, Open, Save As ..) | ||
53 | MimeType 'application/zsafe' added | ||
54 | passwords.zsf default location moved to application/zsafe | ||
55 | 2003-07-13: 2.1.1 : colored category row | ||
56 | list view column header label depends on the selected | ||
57 | category | ||
58 | export/import/remove text file via file dialog | ||
59 | 2003-07-20: 2.1.2 : Document handling (new/open) corrected | ||
60 | |||
61 | Thanks to: | ||
62 | Matthew Palmer <mjp16@uow.edu.au> for the RC2 implementation. | ||
63 | Troy Engel <tengel@sonic.net> for the kpasman code | ||
64 | (http://www.sonic.net/~tengel/kpasman) | ||
65 | Robert Ernst <robert.ernst@linux-solutions.at> | ||
66 | (http://www.linux-solutions.at/projects/zaurus) for the translation and | ||
67 | make.sh script | ||
68 | Werner Schulte <werner@schulte-ac.de> | ||
69 | (http://www.uv-ac.de/qtravel) for the file dialog implementation | ||
70 | |||
71 | |||
72 | |||
diff --git a/noncore/apps/zsafe/category.cpp b/noncore/apps/zsafe/category.cpp new file mode 100644 index 0000000..ce1d614 --- a/dev/null +++ b/noncore/apps/zsafe/category.cpp | |||
@@ -0,0 +1,63 @@ | |||
1 | /* C implementation of RC2 encryption algorithm, as described in RFC2268 */ | ||
2 | /* By Matthew Palmer <mjp16@uow.edu.au> */ | ||
3 | /* $Id$ */ | ||
4 | |||
5 | #include "category.h" | ||
6 | #include <qlistview.h> | ||
7 | |||
8 | Category::Category() | ||
9 | { | ||
10 | } | ||
11 | |||
12 | Category::~Category() | ||
13 | { | ||
14 | } | ||
15 | |||
16 | QString Category::getIconName() | ||
17 | { | ||
18 | return iconName; | ||
19 | } | ||
20 | |||
21 | QString Category::getCategoryName() | ||
22 | { | ||
23 | return categoryName; | ||
24 | } | ||
25 | |||
26 | QListViewItem * Category::getListItem() | ||
27 | { | ||
28 | return listItem; | ||
29 | } | ||
30 | |||
31 | QPixmap Category::getIcon() | ||
32 | { | ||
33 | return icon; | ||
34 | } | ||
35 | |||
36 | void Category::setIconName(QString name) | ||
37 | { | ||
38 | iconName = name; | ||
39 | } | ||
40 | |||
41 | void Category::setCategoryName(QString name) | ||
42 | { | ||
43 | categoryName = name; | ||
44 | } | ||
45 | |||
46 | void Category::setListItem(QListViewItem *item) | ||
47 | { | ||
48 | listItem = item; | ||
49 | } | ||
50 | |||
51 | void Category::setIcon(QPixmap item) | ||
52 | { | ||
53 | icon = item; | ||
54 | } | ||
55 | |||
56 | void Category::initListItem() | ||
57 | { | ||
58 | if (listItem) | ||
59 | { | ||
60 | listItem->setText (0, categoryName); | ||
61 | listItem->setPixmap (0, icon); | ||
62 | } | ||
63 | } | ||
diff --git a/noncore/apps/zsafe/category.h b/noncore/apps/zsafe/category.h new file mode 100644 index 0000000..943c728 --- a/dev/null +++ b/noncore/apps/zsafe/category.h | |||
@@ -0,0 +1,42 @@ | |||
1 | /* | ||
2 | ** $Id$ | ||
3 | */ | ||
4 | |||
5 | #ifndef _CATEGORY_H_ | ||
6 | #define _CATEGORY_H_ | ||
7 | |||
8 | #include <qstring.h> | ||
9 | #include <qlistview.h> | ||
10 | #include <qpixmap.h> | ||
11 | |||
12 | // class to hold one category item | ||
13 | |||
14 | class Category | ||
15 | { | ||
16 | public: | ||
17 | Category(); | ||
18 | ~Category(); | ||
19 | |||
20 | QString getIconName(); | ||
21 | QString getCategoryName(); | ||
22 | QListViewItem * getListItem(); | ||
23 | QPixmap getIcon(); | ||
24 | void setIconName(QString name); | ||
25 | void setCategoryName(QString name); | ||
26 | void setListItem(QListViewItem *item); | ||
27 | void setIcon(QPixmap item); | ||
28 | void initListItem(); | ||
29 | |||
30 | protected: | ||
31 | QString iconName; // full path to the icon | ||
32 | QString categoryName; // name of the category | ||
33 | QPixmap icon; // pixmap icon | ||
34 | QListViewItem *listItem; // list view item | ||
35 | |||
36 | private: | ||
37 | |||
38 | }; | ||
39 | #endif // _CATEGORY_H_ | ||
40 | |||
41 | |||
42 | |||
diff --git a/noncore/apps/zsafe/categorydialog.ui b/noncore/apps/zsafe/categorydialog.ui new file mode 100644 index 0000000..5f9f110 --- a/dev/null +++ b/noncore/apps/zsafe/categorydialog.ui | |||
@@ -0,0 +1,190 @@ | |||
1 | <!DOCTYPE UI><UI> | ||
2 | <class>CategoryDialog</class> | ||
3 | <widget> | ||
4 | <class>QDialog</class> | ||
5 | <property stdset="1"> | ||
6 | <name>name</name> | ||
7 | <cstring>CategoryDialog</cstring> | ||
8 | </property> | ||
9 | <property stdset="1"> | ||
10 | <name>geometry</name> | ||
11 | <rect> | ||
12 | <x>0</x> | ||
13 | <y>0</y> | ||
14 | <width>187</width> | ||
15 | <height>196</height> | ||
16 | </rect> | ||
17 | </property> | ||
18 | <property stdset="1"> | ||
19 | <name>caption</name> | ||
20 | <string>Category</string> | ||
21 | </property> | ||
22 | <property> | ||
23 | <name>layoutMargin</name> | ||
24 | </property> | ||
25 | <property> | ||
26 | <name>layoutSpacing</name> | ||
27 | </property> | ||
28 | <grid> | ||
29 | <property stdset="1"> | ||
30 | <name>margin</name> | ||
31 | <number>6</number> | ||
32 | </property> | ||
33 | <property stdset="1"> | ||
34 | <name>spacing</name> | ||
35 | <number>1</number> | ||
36 | </property> | ||
37 | <widget row="0" column="1" > | ||
38 | <class>QComboBox</class> | ||
39 | <property stdset="1"> | ||
40 | <name>name</name> | ||
41 | <cstring>CategoryField</cstring> | ||
42 | </property> | ||
43 | <property stdset="1"> | ||
44 | <name>editable</name> | ||
45 | <bool>true</bool> | ||
46 | </property> | ||
47 | </widget> | ||
48 | <widget row="1" column="1" > | ||
49 | <class>QComboBox</class> | ||
50 | <property stdset="1"> | ||
51 | <name>name</name> | ||
52 | <cstring>IconField</cstring> | ||
53 | </property> | ||
54 | </widget> | ||
55 | <widget row="2" column="1" > | ||
56 | <class>QLineEdit</class> | ||
57 | <property stdset="1"> | ||
58 | <name>name</name> | ||
59 | <cstring>Field1</cstring> | ||
60 | </property> | ||
61 | </widget> | ||
62 | <widget row="3" column="1" > | ||
63 | <class>QLineEdit</class> | ||
64 | <property stdset="1"> | ||
65 | <name>name</name> | ||
66 | <cstring>Field2</cstring> | ||
67 | </property> | ||
68 | </widget> | ||
69 | <widget row="4" column="1" > | ||
70 | <class>QLineEdit</class> | ||
71 | <property stdset="1"> | ||
72 | <name>name</name> | ||
73 | <cstring>Field3</cstring> | ||
74 | </property> | ||
75 | </widget> | ||
76 | <widget row="5" column="1" > | ||
77 | <class>QLineEdit</class> | ||
78 | <property stdset="1"> | ||
79 | <name>name</name> | ||
80 | <cstring>Field5</cstring> | ||
81 | </property> | ||
82 | </widget> | ||
83 | <widget row="6" column="1" > | ||
84 | <class>QLineEdit</class> | ||
85 | <property stdset="1"> | ||
86 | <name>name</name> | ||
87 | <cstring>Field6</cstring> | ||
88 | </property> | ||
89 | </widget> | ||
90 | <widget row="7" column="1" > | ||
91 | <class>QLineEdit</class> | ||
92 | <property stdset="1"> | ||
93 | <name>name</name> | ||
94 | <cstring>Field4</cstring> | ||
95 | </property> | ||
96 | </widget> | ||
97 | <widget row="0" column="0" > | ||
98 | <class>QLabel</class> | ||
99 | <property stdset="1"> | ||
100 | <name>name</name> | ||
101 | <cstring>Name</cstring> | ||
102 | </property> | ||
103 | <property stdset="1"> | ||
104 | <name>text</name> | ||
105 | <string>Category</string> | ||
106 | </property> | ||
107 | </widget> | ||
108 | <widget row="1" column="0" > | ||
109 | <class>QLabel</class> | ||
110 | <property stdset="1"> | ||
111 | <name>name</name> | ||
112 | <cstring>Name_2</cstring> | ||
113 | </property> | ||
114 | <property stdset="1"> | ||
115 | <name>text</name> | ||
116 | <string>Icon</string> | ||
117 | </property> | ||
118 | </widget> | ||
119 | <widget row="2" column="0" > | ||
120 | <class>QLabel</class> | ||
121 | <property stdset="1"> | ||
122 | <name>name</name> | ||
123 | <cstring>Field1Label</cstring> | ||
124 | </property> | ||
125 | <property stdset="1"> | ||
126 | <name>text</name> | ||
127 | <string>Field 1</string> | ||
128 | </property> | ||
129 | </widget> | ||
130 | <widget row="3" column="0" > | ||
131 | <class>QLabel</class> | ||
132 | <property stdset="1"> | ||
133 | <name>name</name> | ||
134 | <cstring>Field2Label</cstring> | ||
135 | </property> | ||
136 | <property stdset="1"> | ||
137 | <name>text</name> | ||
138 | <string>Field 2</string> | ||
139 | </property> | ||
140 | </widget> | ||
141 | <widget row="4" column="0" > | ||
142 | <class>QLabel</class> | ||
143 | <property stdset="1"> | ||
144 | <name>name</name> | ||
145 | <cstring>Field3Label</cstring> | ||
146 | </property> | ||
147 | <property stdset="1"> | ||
148 | <name>text</name> | ||
149 | <string>Field 3</string> | ||
150 | </property> | ||
151 | </widget> | ||
152 | <widget row="5" column="0" > | ||
153 | <class>QLabel</class> | ||
154 | <property stdset="1"> | ||
155 | <name>name</name> | ||
156 | <cstring>Field5Label</cstring> | ||
157 | </property> | ||
158 | <property stdset="1"> | ||
159 | <name>text</name> | ||
160 | <string>Field 4</string> | ||
161 | </property> | ||
162 | </widget> | ||
163 | <widget row="6" column="0" > | ||
164 | <class>QLabel</class> | ||
165 | <property stdset="1"> | ||
166 | <name>name</name> | ||
167 | <cstring>Field6Label</cstring> | ||
168 | </property> | ||
169 | <property stdset="1"> | ||
170 | <name>text</name> | ||
171 | <string>Field 5</string> | ||
172 | </property> | ||
173 | </widget> | ||
174 | <widget row="7" column="0" > | ||
175 | <class>QLabel</class> | ||
176 | <property stdset="1"> | ||
177 | <name>name</name> | ||
178 | <cstring>Field4Label</cstring> | ||
179 | </property> | ||
180 | <property stdset="1"> | ||
181 | <name>text</name> | ||
182 | <string>Field 6</string> | ||
183 | </property> | ||
184 | </widget> | ||
185 | </grid> | ||
186 | </widget> | ||
187 | <tabstops> | ||
188 | <tabstop>IconField</tabstop> | ||
189 | </tabstops> | ||
190 | </UI> | ||
diff --git a/noncore/apps/zsafe/categorylist.cpp b/noncore/apps/zsafe/categorylist.cpp new file mode 100644 index 0000000..2fa59d2 --- a/dev/null +++ b/noncore/apps/zsafe/categorylist.cpp | |||
@@ -0,0 +1,35 @@ | |||
1 | /* C implementation of RC2 encryption algorithm, as described in RFC2268 */ | ||
2 | /* By Matthew Palmer <mjp16@uow.edu.au> */ | ||
3 | /* $Id$ */ | ||
4 | |||
5 | #include "categorylist.h" | ||
6 | |||
7 | CategoryList::CategoryList() | ||
8 | { | ||
9 | } | ||
10 | |||
11 | CategoryList::~CategoryList() | ||
12 | { | ||
13 | } | ||
14 | |||
15 | void CategoryList::insert (QString key, Category *category) | ||
16 | { | ||
17 | categoryList.insert ((const char *) key, category); | ||
18 | } | ||
19 | |||
20 | Category *CategoryList::find (QString key) | ||
21 | { | ||
22 | return categoryList.find ((const char *) key); | ||
23 | } | ||
24 | |||
25 | void CategoryList::remove (QString key) | ||
26 | { | ||
27 | categoryList.remove ((const char *) key); | ||
28 | } | ||
29 | |||
30 | void CategoryList::clear() | ||
31 | { | ||
32 | categoryList.clear(); | ||
33 | } | ||
34 | |||
35 | |||
diff --git a/noncore/apps/zsafe/categorylist.h b/noncore/apps/zsafe/categorylist.h new file mode 100644 index 0000000..96cf389 --- a/dev/null +++ b/noncore/apps/zsafe/categorylist.h | |||
@@ -0,0 +1,32 @@ | |||
1 | /* | ||
2 | ** $Id$ | ||
3 | */ | ||
4 | #ifndef _CATEGORY_LIST_H_ | ||
5 | #define _CATEGORY_LIST_H_ | ||
6 | |||
7 | #include <qstring.h> | ||
8 | #include <qasciidict.h> | ||
9 | #include "category.h" | ||
10 | |||
11 | // list of Category | ||
12 | |||
13 | class CategoryList | ||
14 | { | ||
15 | public: | ||
16 | CategoryList(); | ||
17 | ~CategoryList(); | ||
18 | |||
19 | void insert (QString key, Category *category); | ||
20 | Category *find (QString key); | ||
21 | void remove (QString key); | ||
22 | void clear(); | ||
23 | |||
24 | QAsciiDict<Category> categoryList; | ||
25 | |||
26 | private: | ||
27 | |||
28 | }; | ||
29 | #endif // _CATEGORY_LIST_H_ | ||
30 | |||
31 | |||
32 | |||
diff --git a/noncore/apps/zsafe/help/de/zsafe.html b/noncore/apps/zsafe/help/de/zsafe.html new file mode 100644 index 0000000..19356a4 --- a/dev/null +++ b/noncore/apps/zsafe/help/de/zsafe.html | |||
@@ -0,0 +1,21 @@ | |||
1 | <html> | ||
2 | <head> | ||
3 | <title>ZSafe</title> | ||
4 | </head> | ||
5 | <body> | ||
6 | <h1>ZSafe</h1> | ||
7 | <h3>Überblick</h3> | ||
8 | <p> | ||
9 | Ein Passwort-Manager für den Sharp Zaurus. | ||
10 | </p> | ||
11 | <h3>Credits</h3> | ||
12 | <p> | ||
13 | ZSafe wurde geschrieben von: | ||
14 | <a href="CarstenSchneider@t-online.de">Carsten Schneider</a><br> | ||
15 | Übersetzung von: | ||
16 | <a href="mailto:robert.ernst@linux-solutions.at">Robert Ernst</a><br> | ||
17 | Diese Software darf unter den Bedingungen der | ||
18 | GNU General Public License verbreitet werden. | ||
19 | </p> | ||
20 | </body> | ||
21 | </html> | ||
diff --git a/noncore/apps/zsafe/help/en/zsafe.html b/noncore/apps/zsafe/help/en/zsafe.html new file mode 100644 index 0000000..596e0e2 --- a/dev/null +++ b/noncore/apps/zsafe/help/en/zsafe.html | |||
@@ -0,0 +1,21 @@ | |||
1 | <html> | ||
2 | <head> | ||
3 | <title>ZSafe</title> | ||
4 | </head> | ||
5 | <body> | ||
6 | <h1>ZSafe</h1> | ||
7 | <h3>Overview</h3> | ||
8 | <p> | ||
9 | This is a password manager program for the Sharp Zaurus. | ||
10 | </p> | ||
11 | <h3>Credits</h3> | ||
12 | <p> | ||
13 | ZSafe was written by: | ||
14 | <a href="CarstenSchneider@t-online.de">Carsten Schneider</a><br> | ||
15 | Translated into german by: | ||
16 | <a href="mailto:robert.ernst@linux-solutions.at">Robert Ernst</a><br> | ||
17 | This software may be distributed under the terms of the | ||
18 | GNU General Public License. | ||
19 | </p> | ||
20 | </body> | ||
21 | </html> | ||
diff --git a/noncore/apps/zsafe/i18n/de/zsafe.qm b/noncore/apps/zsafe/i18n/de/zsafe.qm new file mode 100644 index 0000000..310f708 --- a/dev/null +++ b/noncore/apps/zsafe/i18n/de/zsafe.qm | |||
Binary files differ | |||
diff --git a/noncore/apps/zsafe/i18n/de/zsafe.ts b/noncore/apps/zsafe/i18n/de/zsafe.ts new file mode 100644 index 0000000..a118074 --- a/dev/null +++ b/noncore/apps/zsafe/i18n/de/zsafe.ts | |||
@@ -0,0 +1,529 @@ | |||
1 | <!DOCTYPE TS><TS> | ||
2 | <context> | ||
3 | <name>CategoryDialog</name> | ||
4 | <message> | ||
5 | <source>Category</source> | ||
6 | <translation>Kategorie</translation> | ||
7 | </message> | ||
8 | <message> | ||
9 | <source>Icon</source> | ||
10 | <translation>Symbol</translation> | ||
11 | </message> | ||
12 | <message> | ||
13 | <source>Field 1</source> | ||
14 | <translation>Feld 1</translation> | ||
15 | </message> | ||
16 | <message> | ||
17 | <source>Field 2</source> | ||
18 | <translation>Feld 2</translation> | ||
19 | </message> | ||
20 | <message> | ||
21 | <source>Field 3</source> | ||
22 | <translation>Feld 3</translation> | ||
23 | </message> | ||
24 | <message> | ||
25 | <source>Field 4</source> | ||
26 | <translation>Feld 4</translation> | ||
27 | </message> | ||
28 | <message> | ||
29 | <source>Field 5</source> | ||
30 | <translation>Feld 5</translation> | ||
31 | </message> | ||
32 | <message> | ||
33 | <source>Field 6</source> | ||
34 | <translation>Feld 6</translation> | ||
35 | </message> | ||
36 | </context> | ||
37 | <context> | ||
38 | <name>InfoForm</name> | ||
39 | <message> | ||
40 | <source>Information:</source> | ||
41 | <translation>Information:</translation> | ||
42 | </message> | ||
43 | </context> | ||
44 | <context> | ||
45 | <name>NewDialog</name> | ||
46 | <message> | ||
47 | <source>New Entry</source> | ||
48 | <translation>Neuer Eintrag</translation> | ||
49 | </message> | ||
50 | <message> | ||
51 | <source>Comment</source> | ||
52 | <translation>Kommentar</translation> | ||
53 | </message> | ||
54 | <message> | ||
55 | <source>Field 6</source> | ||
56 | <translation>Feld 6</translation> | ||
57 | </message> | ||
58 | <message> | ||
59 | <source>Field 5</source> | ||
60 | <translation>Feld 5</translation> | ||
61 | </message> | ||
62 | <message> | ||
63 | <source>Password</source> | ||
64 | <translation>Passwort</translation> | ||
65 | </message> | ||
66 | <message> | ||
67 | <source>Username</source> | ||
68 | <translation>Benutzername</translation> | ||
69 | </message> | ||
70 | <message> | ||
71 | <source>Name</source> | ||
72 | <translation>Name</translation> | ||
73 | </message> | ||
74 | </context> | ||
75 | <context> | ||
76 | <name>PasswordForm</name> | ||
77 | <message> | ||
78 | <source>ZSafe</source> | ||
79 | <translation>ZSafe</translation> | ||
80 | </message> | ||
81 | <message> | ||
82 | <source>Password</source> | ||
83 | <translation>Passwort</translation> | ||
84 | </message> | ||
85 | </context> | ||
86 | <context> | ||
87 | <name>ScQtFileDlg</name> | ||
88 | <message> | ||
89 | <source>FileDlg</source> | ||
90 | <translation>Dateidialog</translation> | ||
91 | </message> | ||
92 | <message> | ||
93 | <source>file type filter</source> | ||
94 | <translation>Dateityp Filter</translation> | ||
95 | </message> | ||
96 | <message> | ||
97 | <source>ComboBox FileTypeFilter | ||
98 | |||
99 | edit or select the filter</source> | ||
100 | <translation type="unfinished"></translation> | ||
101 | </message> | ||
102 | <message> | ||
103 | <source>confirms the selection and closes the form</source> | ||
104 | <translation type="unfinished"></translation> | ||
105 | </message> | ||
106 | <message> | ||
107 | <source>OKButton</source> | ||
108 | <translation type="unfinished">OK</translation> | ||
109 | </message> | ||
110 | <message> | ||
111 | <source>cancels the selection and closes the form</source> | ||
112 | <translation type="unfinished"></translation> | ||
113 | </message> | ||
114 | <message> | ||
115 | <source>CancelButton</source> | ||
116 | <translation type="unfinished">Abbruch</translation> | ||
117 | </message> | ||
118 | <message> | ||
119 | <source>shows the selected filename</source> | ||
120 | <translation type="unfinished"></translation> | ||
121 | </message> | ||
122 | <message> | ||
123 | <source>Filename LineEdit | ||
124 | |||
125 | shows the selected file | ||
126 | and allows the direct filename | ||
127 | edit</source> | ||
128 | <translation type="unfinished"></translation> | ||
129 | </message> | ||
130 | <message> | ||
131 | <source>ComboBox Directory | ||
132 | edit or select the directories name</source> | ||
133 | <translation type="unfinished"></translation> | ||
134 | </message> | ||
135 | <message> | ||
136 | <source>Name</source> | ||
137 | <translation type="unfinished">Name</translation> | ||
138 | </message> | ||
139 | <message> | ||
140 | <source>size</source> | ||
141 | <translation>Größe</translation> | ||
142 | </message> | ||
143 | <message> | ||
144 | <source>type</source> | ||
145 | <translation>Type</translation> | ||
146 | </message> | ||
147 | <message> | ||
148 | <source>directory listview</source> | ||
149 | <translation>Dateilistenansicht</translation> | ||
150 | </message> | ||
151 | <message> | ||
152 | <source>Directory ListView | ||
153 | |||
154 | shows the list of dirs and files</source> | ||
155 | <translation type="unfinished"></translation> | ||
156 | </message> | ||
157 | </context> | ||
158 | <context> | ||
159 | <name>ScQtFileEditDlg</name> | ||
160 | <message> | ||
161 | <source>dir</source> | ||
162 | <translation type="unfinished">Verz.</translation> | ||
163 | </message> | ||
164 | <message> | ||
165 | <source>file</source> | ||
166 | <translation>Datei</translation> | ||
167 | </message> | ||
168 | <message> | ||
169 | <source>link</source> | ||
170 | <translation>Verknüpfung</translation> | ||
171 | </message> | ||
172 | </context> | ||
173 | <context> | ||
174 | <name>SearchDialog</name> | ||
175 | <message> | ||
176 | <source>Search</source> | ||
177 | <translation>Suchen</translation> | ||
178 | </message> | ||
179 | <message> | ||
180 | <source>Username</source> | ||
181 | <translation>Benutzername</translation> | ||
182 | </message> | ||
183 | <message> | ||
184 | <source>Comment</source> | ||
185 | <translation>Kommentar</translation> | ||
186 | </message> | ||
187 | <message> | ||
188 | <source>Name</source> | ||
189 | <translation>Name</translation> | ||
190 | </message> | ||
191 | </context> | ||
192 | <context> | ||
193 | <name>Wait</name> | ||
194 | <message> | ||
195 | <source>Please Wait...</source> | ||
196 | <translation>Bitte warten...</translation> | ||
197 | </message> | ||
198 | </context> | ||
199 | <context> | ||
200 | <name>ZSafe</name> | ||
201 | <message> | ||
202 | <source>ZSafe</source> | ||
203 | <translation>ZSafe</translation> | ||
204 | </message> | ||
205 | <message> | ||
206 | <source>Can't create directory | ||
207 | %1 | ||
208 | |||
209 | ZSafe will now exit.</source> | ||
210 | <translation>Kann das Verzeichnis | ||
211 | %1 | ||
212 | nicht anlegen | ||
213 | |||
214 | ZSafe wird sich jetzt beenden.</translation> | ||
215 | </message> | ||
216 | <message> | ||
217 | <source>&Save document</source> | ||
218 | <translation>&Speichern</translation> | ||
219 | </message> | ||
220 | <message> | ||
221 | <source>S&ave document with new Password</source> | ||
222 | <translation>Speichern mit neuem &Passwort</translation> | ||
223 | </message> | ||
224 | <message> | ||
225 | <source>&Export text file</source> | ||
226 | <translation>Textdatei &Exportieren</translation> | ||
227 | </message> | ||
228 | <message> | ||
229 | <source>&Import text file</source> | ||
230 | <translation>Textdatei &Importieren</translation> | ||
231 | </message> | ||
232 | <message> | ||
233 | <source>&Remove text file</source> | ||
234 | <translation>Textdatei &löschen</translation> | ||
235 | </message> | ||
236 | <message> | ||
237 | <source>&Open entries expanded</source> | ||
238 | <translation>&Expandiert Öffnen</translation> | ||
239 | </message> | ||
240 | <message> | ||
241 | <source>E&xit</source> | ||
242 | <translation>&Beenden</translation> | ||
243 | </message> | ||
244 | <message> | ||
245 | <source>&File</source> | ||
246 | <translation>&Datei</translation> | ||
247 | </message> | ||
248 | <message> | ||
249 | <source>&New</source> | ||
250 | <translation>&Neu</translation> | ||
251 | </message> | ||
252 | <message> | ||
253 | <source>&Edit</source> | ||
254 | <translation>&Ändern</translation> | ||
255 | </message> | ||
256 | <message> | ||
257 | <source>&Delete</source> | ||
258 | <translation>&Löschen</translation> | ||
259 | </message> | ||
260 | <message> | ||
261 | <source>&Category</source> | ||
262 | <translation>&Kategorie</translation> | ||
263 | </message> | ||
264 | <message> | ||
265 | <source>&Cut</source> | ||
266 | <translation>&Ausschneiden</translation> | ||
267 | </message> | ||
268 | <message> | ||
269 | <source>C&opy</source> | ||
270 | <translation>&Kopieren</translation> | ||
271 | </message> | ||
272 | <message> | ||
273 | <source>&Paste</source> | ||
274 | <translation>&Einfügen</translation> | ||
275 | </message> | ||
276 | <message> | ||
277 | <source>&Search</source> | ||
278 | <translation>&Suchen</translation> | ||
279 | </message> | ||
280 | <message> | ||
281 | <source>&Entry</source> | ||
282 | <translation>&Eintrag</translation> | ||
283 | </message> | ||
284 | <message> | ||
285 | <source>&About</source> | ||
286 | <translation>&Über</translation> | ||
287 | </message> | ||
288 | <message> | ||
289 | <source>&Help</source> | ||
290 | <translation>&Hilfe</translation> | ||
291 | </message> | ||
292 | <message> | ||
293 | <source>Edit</source> | ||
294 | <translation>Ändern</translation> | ||
295 | </message> | ||
296 | <message> | ||
297 | <source>Delete</source> | ||
298 | <translation>Löschen</translation> | ||
299 | </message> | ||
300 | <message> | ||
301 | <source>Find</source> | ||
302 | <translation>Suchen</translation> | ||
303 | </message> | ||
304 | <message> | ||
305 | <source>New</source> | ||
306 | <translation>Neu</translation> | ||
307 | </message> | ||
308 | <message> | ||
309 | <source>Name</source> | ||
310 | <translation>Name</translation> | ||
311 | </message> | ||
312 | <message> | ||
313 | <source>Field 2</source> | ||
314 | <translation>Feld 2</translation> | ||
315 | </message> | ||
316 | <message> | ||
317 | <source>Field 3</source> | ||
318 | <translation>Feld 3</translation> | ||
319 | </message> | ||
320 | <message> | ||
321 | <source>Comment</source> | ||
322 | <translation>Kommentar</translation> | ||
323 | </message> | ||
324 | <message> | ||
325 | <source>Field 4</source> | ||
326 | <translation>Feld 4</translation> | ||
327 | </message> | ||
328 | <message> | ||
329 | <source>Field 5</source> | ||
330 | <translation>Feld 5</translation> | ||
331 | </message> | ||
332 | <message> | ||
333 | <source>Do you want to delete?</source> | ||
334 | <translation>Wollen Sie wirklich löschen?</translation> | ||
335 | </message> | ||
336 | <message> | ||
337 | <source>D&on't Delete</source> | ||
338 | <translation>&Nicht löschen</translation> | ||
339 | </message> | ||
340 | <message> | ||
341 | <source>Edit Entry</source> | ||
342 | <translation>Eintrag ändern</translation> | ||
343 | </message> | ||
344 | <message> | ||
345 | <source>Username</source> | ||
346 | <translation>Benutzername</translation> | ||
347 | </message> | ||
348 | <message> | ||
349 | <source>Password</source> | ||
350 | <translation>Passwort</translation> | ||
351 | </message> | ||
352 | <message> | ||
353 | <source>New Entry</source> | ||
354 | <translation>Neuer Eintrag</translation> | ||
355 | </message> | ||
356 | <message> | ||
357 | <source>Entry name must be different | ||
358 | from the category name.</source> | ||
359 | <translation>Die Namen der Einträge | ||
360 | müssen sich von der | ||
361 | Kategorie unterscheiden.</translation> | ||
362 | </message> | ||
363 | <message> | ||
364 | <source>Search</source> | ||
365 | <translation>Suchen</translation> | ||
366 | </message> | ||
367 | <message> | ||
368 | <source>Entry not found</source> | ||
369 | <translation>Eintrag nicht gefunden</translation> | ||
370 | </message> | ||
371 | <message> | ||
372 | <source>&OK</source> | ||
373 | <translation>&Ok</translation> | ||
374 | </message> | ||
375 | <message> | ||
376 | <source>Could not remove text file.</source> | ||
377 | <translation>Konnte Textdatei nicht löschen.</translation> | ||
378 | </message> | ||
379 | <message> | ||
380 | <source>Could not export to text file.</source> | ||
381 | <translation>Konnte Textdatei nicht exportieren.</translation> | ||
382 | </message> | ||
383 | <message> | ||
384 | <source>Could not import text file.</source> | ||
385 | <translation>Konnte Textdatei nicht importieren.</translation> | ||
386 | </message> | ||
387 | <message> | ||
388 | <source>Enter Password</source> | ||
389 | <translation>Passwort eingeben</translation> | ||
390 | </message> | ||
391 | <message> | ||
392 | <source>Wrong password. | ||
393 | |||
394 | ZSafe will now exit.</source> | ||
395 | <translation>Falsches Passwort | ||
396 | |||
397 | ZSafe wird sich jetzt beenden.</translation> | ||
398 | </message> | ||
399 | <message> | ||
400 | <source>Wrong password. | ||
401 | Enter again?</source> | ||
402 | <translation>Falsches Passwort. | ||
403 | Neu eingeben?</translation> | ||
404 | </message> | ||
405 | <message> | ||
406 | <source>&Yes</source> | ||
407 | <translation>&Ja</translation> | ||
408 | </message> | ||
409 | <message> | ||
410 | <source>&No.</source> | ||
411 | <translation>&Nein.</translation> | ||
412 | </message> | ||
413 | <message> | ||
414 | <source>Empty document or | ||
415 | wrong password. | ||
416 | Continue?</source> | ||
417 | <translation>Leeres Dokument oder | ||
418 | falsches Passwort. | ||
419 | Fortfahren?</translation> | ||
420 | </message> | ||
421 | <message> | ||
422 | <source>&No</source> | ||
423 | <translation>&Nein</translation> | ||
424 | </message> | ||
425 | <message> | ||
426 | <source>&Yes.</source> | ||
427 | <translation>&Ja.</translation> | ||
428 | </message> | ||
429 | <message> | ||
430 | <source>Password is empty. | ||
431 | Please enter again.</source> | ||
432 | <translation>Das Passwort ist leer. | ||
433 | Bitte nochmals eingeben.</translation> | ||
434 | </message> | ||
435 | <message> | ||
436 | <source>Reenter Password</source> | ||
437 | <translation>Passwort nochmals eingeben</translation> | ||
438 | </message> | ||
439 | <message> | ||
440 | <source>Passwords must be identical. | ||
441 | Please enter again.</source> | ||
442 | <translation>Die Passwörter müssen | ||
443 | gleich sein. Bitte nochmals | ||
444 | Passwort eingeben.</translation> | ||
445 | </message> | ||
446 | <message> | ||
447 | <source>Password file saved.</source> | ||
448 | <translation>Passwort-Datei gesichert.</translation> | ||
449 | </message> | ||
450 | <message> | ||
451 | <source>Do you want to save | ||
452 | before exiting?</source> | ||
453 | <translation>Wollen Sie vor dem Beenden | ||
454 | die Daten speichern?</translation> | ||
455 | </message> | ||
456 | <message> | ||
457 | <source>&Save</source> | ||
458 | <translation>&Sichern</translation> | ||
459 | </message> | ||
460 | <message> | ||
461 | <source>S&ave with | ||
462 | new | ||
463 | password</source> | ||
464 | <translation>Mit neuem | ||
465 | &Passwort | ||
466 | sichern</translation> | ||
467 | </message> | ||
468 | <message> | ||
469 | <source>&Don't Save</source> | ||
470 | <translation>&Nicht sichern</translation> | ||
471 | </message> | ||
472 | <message> | ||
473 | <source>Category</source> | ||
474 | <translation>Kategorie</translation> | ||
475 | </message> | ||
476 | <message> | ||
477 | <source>Wait dialog</source> | ||
478 | <translation>Bitte warten</translation> | ||
479 | </message> | ||
480 | <message> | ||
481 | <source>Gathering icons...</source> | ||
482 | <translation>Suche nach Symbolen...</translation> | ||
483 | </message> | ||
484 | <message> | ||
485 | <source>Zaurus Password Manager<br></source> | ||
486 | <translation>Zaurus Passwort Manager<br></translation> | ||
487 | </message> | ||
488 | <message> | ||
489 | <source>ZSafe version 2.0.1ern<br></source> | ||
490 | <translation type="obsolete">ZSafe Version 2.0.1ern<br></translation> | ||
491 | </message> | ||
492 | <message> | ||
493 | <source>by Carsten Schneider<br></source> | ||
494 | <translation>von Carsten Schneider<br></translation> | ||
495 | </message> | ||
496 | <message> | ||
497 | <source>Translations by Robert Ernst<br></source> | ||
498 | <translation>Übersetzungen von Robert Ernst<br></translation> | ||
499 | </message> | ||
500 | <message> | ||
501 | <source>&New document</source> | ||
502 | <translation>&Neue Datei</translation> | ||
503 | </message> | ||
504 | <message> | ||
505 | <source>&Open document</source> | ||
506 | <translation>&Öffne Datei</translation> | ||
507 | </message> | ||
508 | <message> | ||
509 | <source>&Save document as ..</source> | ||
510 | <translation>&Speichere Datei als..</translation> | ||
511 | </message> | ||
512 | <message> | ||
513 | <source>Create new ZSafe document</source> | ||
514 | <translation>Erzeuge neue ZSafe Datei</translation> | ||
515 | </message> | ||
516 | <message> | ||
517 | <source>Open ZSafe document</source> | ||
518 | <translation>Öffne ZSafe Datei</translation> | ||
519 | </message> | ||
520 | <message> | ||
521 | <source>Save ZSafe document as..</source> | ||
522 | <translation>Speichere ZSafe Datei als..</translation> | ||
523 | </message> | ||
524 | <message> | ||
525 | <source>ZSafe version 2.1.0<br></source> | ||
526 | <translation type="unfinished"></translation> | ||
527 | </message> | ||
528 | </context> | ||
529 | </TS> | ||
diff --git a/noncore/apps/zsafe/infoform.ui b/noncore/apps/zsafe/infoform.ui new file mode 100644 index 0000000..ba2cd07 --- a/dev/null +++ b/noncore/apps/zsafe/infoform.ui | |||
@@ -0,0 +1,46 @@ | |||
1 | <!DOCTYPE UI><UI> | ||
2 | <class>InfoForm</class> | ||
3 | <widget> | ||
4 | <class>QDialog</class> | ||
5 | <property stdset="1"> | ||
6 | <name>name</name> | ||
7 | <cstring>InfoForm</cstring> | ||
8 | </property> | ||
9 | <property stdset="1"> | ||
10 | <name>geometry</name> | ||
11 | <rect> | ||
12 | <x>0</x> | ||
13 | <y>0</y> | ||
14 | <width>231</width> | ||
15 | <height>280</height> | ||
16 | </rect> | ||
17 | </property> | ||
18 | <property stdset="1"> | ||
19 | <name>caption</name> | ||
20 | <string>Information:</string> | ||
21 | </property> | ||
22 | <property> | ||
23 | <name>layoutMargin</name> | ||
24 | </property> | ||
25 | <property> | ||
26 | <name>layoutSpacing</name> | ||
27 | </property> | ||
28 | <grid> | ||
29 | <property stdset="1"> | ||
30 | <name>margin</name> | ||
31 | <number>1</number> | ||
32 | </property> | ||
33 | <property stdset="1"> | ||
34 | <name>spacing</name> | ||
35 | <number>6</number> | ||
36 | </property> | ||
37 | <widget row="0" column="0" > | ||
38 | <class>QTextBrowser</class> | ||
39 | <property stdset="1"> | ||
40 | <name>name</name> | ||
41 | <cstring>InfoText</cstring> | ||
42 | </property> | ||
43 | </widget> | ||
44 | </grid> | ||
45 | </widget> | ||
46 | </UI> | ||
diff --git a/noncore/apps/zsafe/krc2.cpp b/noncore/apps/zsafe/krc2.cpp new file mode 100644 index 0000000..162a1b4 --- a/dev/null +++ b/noncore/apps/zsafe/krc2.cpp | |||
@@ -0,0 +1,203 @@ | |||
1 | /* C implementation of RC2 encryption algorithm, as described in RFC2268 */ | ||
2 | /* By Matthew Palmer <mjp16@uow.edu.au> */ | ||
3 | /* $Id$ */ | ||
4 | |||
5 | #include "krc2.h" | ||
6 | |||
7 | unsigned char _rc2_pitable[] = { 0xd9, 0x78, 0xf9, 0xc4, 0x19, 0xdd, 0xb5, 0xed, | ||
8 | 0x28, 0xe9, 0xfd, 0x79, 0x4a, 0xa0, 0xd8, 0x9d, | ||
9 | 0xc6, 0x7e, 0x37, 0x83, 0x2b, 0x76, 0x53, 0x8e, | ||
10 | 0x62, 0x4c, 0x64, 0x88, 0x44, 0x8b, 0xfb, 0xa2, | ||
11 | 0x17, 0x9a, 0x59, 0xf5, 0x87, 0xb3, 0x4f, 0x13, | ||
12 | 0x61, 0x45, 0x6d, 0x8d, 0x09, 0x81, 0x7d, 0x32, | ||
13 | 0xbd, 0x8f, 0x40, 0xeb, 0x86, 0xb7, 0x7b, 0x0b, | ||
14 | 0xf0, 0x95, 0x21, 0x22, 0x5c, 0x6b, 0x4e, 0x82, | ||
15 | 0x54, 0xd6, 0x65, 0x93, 0xce, 0x60, 0xb2, 0x1c, | ||
16 | 0x73, 0x56, 0xc0, 0x14, 0xa7, 0x8c, 0xf1, 0xdc, | ||
17 | 0x12, 0x75, 0xca, 0x1f, 0x3b, 0xbe, 0xe4, 0xd1, | ||
18 | 0x42, 0x3d, 0xd4, 0x30, 0xa3, 0x3c, 0xb6, 0x26, | ||
19 | 0x6f, 0xbf, 0x0e, 0xda, 0x46, 0x69, 0x07, 0x57, | ||
20 | 0x27, 0xf2, 0x1d, 0x9b, 0xbc, 0x94, 0x43, 0x03, | ||
21 | 0xf8, 0x11, 0xc7, 0xf6, 0x90, 0xef, 0x3e, 0xe7, | ||
22 | 0x06, 0xc3, 0xd5, 0x2f, 0xc8, 0x66, 0x1e, 0xd7, | ||
23 | 0x08, 0xe8, 0xea, 0xde, 0x80, 0x52, 0xee, 0xf7, | ||
24 | 0x84, 0xaa, 0x72, 0xac, 0x35, 0x4d, 0x6a, 0x2a, | ||
25 | 0x96, 0x1a, 0xd2, 0x71, 0x5a, 0x15, 0x49, 0x74, | ||
26 | 0x4b, 0x9f, 0xd0, 0x5e, 0x04, 0x18, 0xa4, 0xec, | ||
27 | 0xc2, 0xe0, 0x41, 0x6e, 0x0f, 0x51, 0xcb, 0xcc, | ||
28 | 0x24, 0x91, 0xaf, 0x50, 0xa1, 0xf4, 0x70, 0x39, | ||
29 | 0x99, 0x7c, 0x3a, 0x85, 0x23, 0xb8, 0xb4, 0x7a, | ||
30 | 0xfc, 0x02, 0x36, 0x5b, 0x25, 0x55, 0x97, 0x31, | ||
31 | 0x2d, 0x5d, 0xfa, 0x98, 0xe3, 0x8a, 0x92, 0xae, | ||
32 | 0x05, 0xdf, 0x29, 0x10, 0x67, 0x6c, 0xba, 0xc9, | ||
33 | 0xd3, 0x00, 0xe6, 0xcf, 0xe1, 0x9e, 0xa8, 0x2c, | ||
34 | 0x63, 0x16, 0x01, 0x3f, 0x58, 0xe2, 0x89, 0xa9, | ||
35 | 0x0d, 0x38, 0x34, 0x1b, 0xab, 0x33, 0xff, 0xb0, | ||
36 | 0xbb, 0x48, 0x0c, 0x5f, 0xb9, 0xb1, 0xcd, 0x2e, | ||
37 | 0xc5, 0xf3, 0xdb, 0x47, 0xe5, 0xa5, 0x9c, 0x77, | ||
38 | 0x0a, 0xa6, 0x20, 0x68, 0xfe, 0x7f, 0xc1, 0xad }; | ||
39 | |||
40 | unsigned char _rc2_expkey[128];/* Expanded Key */ | ||
41 | int _rc2_counter; /* global integer variable used in mixing */ | ||
42 | int _rc2_s[] = {1, 2, 3, 5}; | ||
43 | |||
44 | Krc2::Krc2() | ||
45 | { | ||
46 | } | ||
47 | |||
48 | Krc2::~Krc2() | ||
49 | { | ||
50 | } | ||
51 | |||
52 | void Krc2::rc2_expandkey(char key[], int length, int ekl) | ||
53 | { | ||
54 | int ekl8, keymask, i; | ||
55 | |||
56 | /* Put supplied key into first length - 1 bytes of the key buffer */ | ||
57 | for (i = 0; i < length; i++) { | ||
58 | _rc2_expkey[i] = key[i]; | ||
59 | } | ||
60 | |||
61 | ekl8 = (ekl + 7) / 8; | ||
62 | i = _rc2_pow(2, (8 + ekl - 8 * ekl8)); | ||
63 | keymask = 255 % i; | ||
64 | |||
65 | /* First expansion step */ | ||
66 | for (i = length; i < 128; i++) { | ||
67 | _rc2_expkey[i] = _rc2_pitable[(_rc2_expkey[i - 1] + _rc2_expkey[i - length]) % 256]; | ||
68 | } | ||
69 | |||
70 | /* Expansion intermediate step */ | ||
71 | _rc2_expkey[128 - ekl8] = _rc2_pitable[_rc2_expkey[128 - ekl8] & keymask]; | ||
72 | |||
73 | /* Third Expansion step */ | ||
74 | for (i = 127 - ekl8; i >= 0; i--) { | ||
75 | _rc2_expkey[i] = _rc2_pitable[_rc2_expkey[i + 1] ^ _rc2_expkey[i + ekl8]]; | ||
76 | } | ||
77 | } | ||
78 | |||
79 | void Krc2::rc2_encrypt(unsigned short input[4]) | ||
80 | { | ||
81 | int i; | ||
82 | |||
83 | _rc2_counter = 0; | ||
84 | for (i = 0; i < 5; i++) { | ||
85 | _rc2_mix(input); | ||
86 | } | ||
87 | _rc2_mash(input); | ||
88 | for (i = 0; i < 6; i++) { | ||
89 | _rc2_mix(input); | ||
90 | } | ||
91 | _rc2_mash(input); | ||
92 | for (i = 0; i < 5; i++) { | ||
93 | _rc2_mix(input); | ||
94 | } | ||
95 | } | ||
96 | |||
97 | void Krc2::_rc2_mix(unsigned short input[]) | ||
98 | { | ||
99 | unsigned short K, i; | ||
100 | |||
101 | for (i = 0; i < 4; i++) { | ||
102 | K = _rc2_expkey[_rc2_counter * 2] + 256 * _rc2_expkey[_rc2_counter * 2 + 1]; | ||
103 | input[i] = input[i] + K + (input[(i + 3) % 4] & input[(i + 2) % 4]) + ((~input[(i + 3) % 4]) & input[(i + 1) % 4]); | ||
104 | _rc2_counter++; | ||
105 | input[i] = _rc2_rol(input[i], _rc2_s[i]); | ||
106 | } | ||
107 | } | ||
108 | |||
109 | void Krc2::_rc2_mash(unsigned short input[]) | ||
110 | { | ||
111 | unsigned short K, i, x; | ||
112 | |||
113 | for (i = 0; i < 4; i++) { | ||
114 | x = input[(i + 3) % 4] & 63; | ||
115 | K = _rc2_expkey[2 * x] + 256 * _rc2_expkey[2 * x + 1]; | ||
116 | input[i] = input[i] + K; | ||
117 | } | ||
118 | } | ||
119 | |||
120 | void Krc2::rc2_decrypt(unsigned short input[4]) | ||
121 | { | ||
122 | int i; | ||
123 | |||
124 | _rc2_counter = 63; | ||
125 | for (i = 0; i < 5; i++) { | ||
126 | _rc2_rmix(input); | ||
127 | } | ||
128 | _rc2_rmash(input); | ||
129 | for (i = 0; i < 6; i++) { | ||
130 | _rc2_rmix(input); | ||
131 | } | ||
132 | _rc2_rmash(input); | ||
133 | for (i = 0; i < 5; i++) { | ||
134 | _rc2_rmix(input); | ||
135 | } | ||
136 | } | ||
137 | |||
138 | void Krc2::_rc2_rmix(unsigned short input[]) | ||
139 | { | ||
140 | unsigned short K; | ||
141 | int i; | ||
142 | |||
143 | for (i = 3; i >= 0; i--) { | ||
144 | input[i] = _rc2_ror(input[i], _rc2_s[i]); | ||
145 | K = _rc2_expkey[_rc2_counter * 2] + 256 * _rc2_expkey[_rc2_counter * 2 + 1]; | ||
146 | input[i] = input[i] - K - (input[(i + 3) % 4] & input[(i + 2) % 4]) - ((~input[(i + 3) % 4]) & input[(i + 1) % 4]); | ||
147 | _rc2_counter--; | ||
148 | } | ||
149 | } | ||
150 | |||
151 | void Krc2::_rc2_rmash(unsigned short input[]) | ||
152 | { | ||
153 | unsigned short K, x; | ||
154 | int i; | ||
155 | |||
156 | for (i = 3; i >= 0; i--) { | ||
157 | x = input[(i + 3) % 4] & 63; | ||
158 | K = _rc2_expkey[2 * x] + 256 * _rc2_expkey[2 * x + 1]; | ||
159 | input[i] = input[i] - K; | ||
160 | } | ||
161 | } | ||
162 | |||
163 | int Krc2::_rc2_pow(int base, int exponent) | ||
164 | { | ||
165 | int i, result; | ||
166 | |||
167 | if (exponent == 0) { | ||
168 | return 1; | ||
169 | } | ||
170 | result = 1; | ||
171 | for (i = 0; i < exponent; i++) { | ||
172 | result = result * base; | ||
173 | } | ||
174 | return result; | ||
175 | } | ||
176 | |||
177 | unsigned short Krc2::_rc2_rol(unsigned short input, int places) | ||
178 | { | ||
179 | unsigned short temp, i; | ||
180 | |||
181 | for (i = 0; i < places; i++) { | ||
182 | temp = input & 0x8000; | ||
183 | input = input << 1; | ||
184 | if (temp) { | ||
185 | input++; | ||
186 | } | ||
187 | } | ||
188 | return input; | ||
189 | } | ||
190 | |||
191 | unsigned short Krc2::_rc2_ror(unsigned short input, int places) | ||
192 | { | ||
193 | unsigned short temp, i; | ||
194 | for (i = 0; i < places; i++) { | ||
195 | temp = input & 0x1; | ||
196 | input = input >> 1; | ||
197 | if (temp) { | ||
198 | input = input + 0x8000; | ||
199 | } | ||
200 | } | ||
201 | return input; | ||
202 | } | ||
203 | |||
diff --git a/noncore/apps/zsafe/krc2.h b/noncore/apps/zsafe/krc2.h new file mode 100644 index 0000000..87b5d29 --- a/dev/null +++ b/noncore/apps/zsafe/krc2.h | |||
@@ -0,0 +1,35 @@ | |||
1 | /* | ||
2 | ** $Id$ | ||
3 | */ | ||
4 | |||
5 | #ifndef _KRC2_H_ | ||
6 | #define _KRC2_H_ | ||
7 | |||
8 | /* Header file for rc2 implementation by Matthew Palmer <mjp16@uow.edu.au> */ | ||
9 | |||
10 | class Krc2 | ||
11 | { | ||
12 | public: | ||
13 | Krc2(); | ||
14 | ~Krc2(); | ||
15 | |||
16 | /* Externally worked functions */ | ||
17 | void rc2_expandkey(char key[], int length, int ekl); | ||
18 | void rc2_encrypt(unsigned short *input); | ||
19 | void rc2_decrypt(unsigned short *input); | ||
20 | |||
21 | private: | ||
22 | /* The internals */ | ||
23 | void _rc2_mix(unsigned short *input); | ||
24 | void _rc2_mash(unsigned short *input); | ||
25 | void _rc2_rmix(unsigned short *input); | ||
26 | void _rc2_rmash(unsigned short *input); | ||
27 | int _rc2_pow(int base, int exponent); | ||
28 | unsigned short _rc2_ror(unsigned short input, int places); | ||
29 | unsigned short _rc2_rol(unsigned short input, int places); | ||
30 | |||
31 | }; | ||
32 | #endif // _KRC2_H_ | ||
33 | |||
34 | |||
35 | |||
diff --git a/noncore/apps/zsafe/main.cpp b/noncore/apps/zsafe/main.cpp new file mode 100644 index 0000000..c6ef5f9 --- a/dev/null +++ b/noncore/apps/zsafe/main.cpp | |||
@@ -0,0 +1,106 @@ | |||
1 | /* | ||
2 | ** Author: Carsten Schneider <CarstenSchneider@t-online.de> | ||
3 | ** | ||
4 | ** $Id$ | ||
5 | ** | ||
6 | ** Homepage: http://home.t-online.de/home/CarstenSchneider/zsafe/index.html | ||
7 | */ | ||
8 | |||
9 | |||
10 | #include "zsafe.h" | ||
11 | #ifdef DESKTOP | ||
12 | #include <qapplication.h> | ||
13 | #else | ||
14 | #include <qpe/qpeapplication.h> | ||
15 | #endif | ||
16 | #include <stdio.h> | ||
17 | #include <signal.h> | ||
18 | #include "qsettings.h" | ||
19 | |||
20 | ZSafe *zs; | ||
21 | #ifdef DESKTOP | ||
22 | QApplication *appl; | ||
23 | #else | ||
24 | QPEApplication *appl; | ||
25 | #endif | ||
26 | |||
27 | int DeskW; | ||
28 | int DeskH; | ||
29 | |||
30 | void suspend (int signum) | ||
31 | { | ||
32 | printf ("Suspend signal %d received\n", signum); | ||
33 | } | ||
34 | |||
35 | void resume (int signum) | ||
36 | { | ||
37 | printf ("Resume signal %d received\n", signum); | ||
38 | zs->resume(signum); | ||
39 | } | ||
40 | |||
41 | int main( int argc, char ** argv ) | ||
42 | { | ||
43 | #ifndef WIN32 | ||
44 | // install signal handler | ||
45 | signal (SIGSTOP, suspend); | ||
46 | #endif | ||
47 | |||
48 | #ifdef DESKTOP | ||
49 | QApplication a( argc, argv ); | ||
50 | #else | ||
51 | QPEApplication a( argc, argv ); | ||
52 | #endif | ||
53 | appl = &a; | ||
54 | |||
55 | #ifdef DESKTOP | ||
56 | if (argc >= 3) | ||
57 | { | ||
58 | #ifndef WIN32 | ||
59 | DeskW = atoi(argv[1]); | ||
60 | DeskH = atoi(argv[2]); | ||
61 | #else | ||
62 | int w, h; | ||
63 | sscanf (argv[1], "%d", &w); | ||
64 | sscanf (argv[2], "%d", &h); | ||
65 | DeskW = w; | ||
66 | DeskH = h; | ||
67 | #endif | ||
68 | } | ||
69 | else | ||
70 | { | ||
71 | DeskW = 600; | ||
72 | DeskH = 400; | ||
73 | } | ||
74 | #else | ||
75 | DeskW = a.desktop()->width(); | ||
76 | DeskH = a.desktop()->height(); | ||
77 | |||
78 | char buf[128]; | ||
79 | sprintf (buf, "Width: %d Height: %d\n", DeskW, DeskH); | ||
80 | qWarning (buf); | ||
81 | if (DeskW > 240) | ||
82 | { | ||
83 | DeskW -= 20; | ||
84 | DeskH += 25; | ||
85 | sprintf (buf, "Changed width: %d Height: %d\n", DeskW, DeskH); | ||
86 | qWarning (buf); | ||
87 | } | ||
88 | #endif | ||
89 | |||
90 | ZSafe mw; | ||
91 | zs = &mw; | ||
92 | |||
93 | #ifndef WIN32 | ||
94 | signal (SIGCONT, resume); | ||
95 | #endif | ||
96 | #ifdef DESKTOP | ||
97 | a.setMainWidget(&mw); | ||
98 | mw.show(); | ||
99 | #else | ||
100 | // a.showMainWidget( &mw ); | ||
101 | a.showMainDocumentWidget( &mw ); | ||
102 | #endif | ||
103 | int ret = a.exec(); | ||
104 | |||
105 | return ret; | ||
106 | } | ||
diff --git a/noncore/apps/zsafe/newdialog.ui b/noncore/apps/zsafe/newdialog.ui new file mode 100644 index 0000000..b03b7a3 --- a/dev/null +++ b/noncore/apps/zsafe/newdialog.ui | |||
@@ -0,0 +1,159 @@ | |||
1 | <!DOCTYPE UI><UI> | ||
2 | <class>NewDialog</class> | ||
3 | <widget> | ||
4 | <class>QDialog</class> | ||
5 | <property stdset="1"> | ||
6 | <name>name</name> | ||
7 | <cstring>NewDialog</cstring> | ||
8 | </property> | ||
9 | <property stdset="1"> | ||
10 | <name>geometry</name> | ||
11 | <rect> | ||
12 | <x>0</x> | ||
13 | <y>0</y> | ||
14 | <width>223</width> | ||
15 | <height>285</height> | ||
16 | </rect> | ||
17 | </property> | ||
18 | <property stdset="1"> | ||
19 | <name>caption</name> | ||
20 | <string>New Entry</string> | ||
21 | </property> | ||
22 | <property> | ||
23 | <name>layoutMargin</name> | ||
24 | </property> | ||
25 | <property> | ||
26 | <name>layoutSpacing</name> | ||
27 | </property> | ||
28 | <grid> | ||
29 | <property stdset="1"> | ||
30 | <name>margin</name> | ||
31 | <number>6</number> | ||
32 | </property> | ||
33 | <property stdset="1"> | ||
34 | <name>spacing</name> | ||
35 | <number>1</number> | ||
36 | </property> | ||
37 | <widget row="5" column="0" > | ||
38 | <class>QLabel</class> | ||
39 | <property stdset="1"> | ||
40 | <name>name</name> | ||
41 | <cstring>Comment</cstring> | ||
42 | </property> | ||
43 | <property stdset="1"> | ||
44 | <name>text</name> | ||
45 | <string>Comment</string> | ||
46 | </property> | ||
47 | </widget> | ||
48 | <widget row="4" column="1" > | ||
49 | <class>QLineEdit</class> | ||
50 | <property stdset="1"> | ||
51 | <name>name</name> | ||
52 | <cstring>Field6</cstring> | ||
53 | </property> | ||
54 | </widget> | ||
55 | <widget row="3" column="1" > | ||
56 | <class>QLineEdit</class> | ||
57 | <property stdset="1"> | ||
58 | <name>name</name> | ||
59 | <cstring>Field5</cstring> | ||
60 | </property> | ||
61 | </widget> | ||
62 | <widget row="2" column="1" > | ||
63 | <class>QLineEdit</class> | ||
64 | <property stdset="1"> | ||
65 | <name>name</name> | ||
66 | <cstring>PasswordField</cstring> | ||
67 | </property> | ||
68 | </widget> | ||
69 | <widget row="1" column="1" > | ||
70 | <class>QLineEdit</class> | ||
71 | <property stdset="1"> | ||
72 | <name>name</name> | ||
73 | <cstring>UsernameField</cstring> | ||
74 | </property> | ||
75 | </widget> | ||
76 | <widget row="0" column="1" > | ||
77 | <class>QLineEdit</class> | ||
78 | <property stdset="1"> | ||
79 | <name>name</name> | ||
80 | <cstring>NameField</cstring> | ||
81 | </property> | ||
82 | </widget> | ||
83 | <widget row="4" column="0" > | ||
84 | <class>QLabel</class> | ||
85 | <property stdset="1"> | ||
86 | <name>name</name> | ||
87 | <cstring>Field6Label</cstring> | ||
88 | </property> | ||
89 | <property stdset="1"> | ||
90 | <name>text</name> | ||
91 | <string>Field 6</string> | ||
92 | </property> | ||
93 | </widget> | ||
94 | <widget row="3" column="0" > | ||
95 | <class>QLabel</class> | ||
96 | <property stdset="1"> | ||
97 | <name>name</name> | ||
98 | <cstring>Field5Label</cstring> | ||
99 | </property> | ||
100 | <property stdset="1"> | ||
101 | <name>text</name> | ||
102 | <string>Field 5</string> | ||
103 | </property> | ||
104 | </widget> | ||
105 | <widget row="2" column="0" > | ||
106 | <class>QLabel</class> | ||
107 | <property stdset="1"> | ||
108 | <name>name</name> | ||
109 | <cstring>Password</cstring> | ||
110 | </property> | ||
111 | <property stdset="1"> | ||
112 | <name>text</name> | ||
113 | <string>Password</string> | ||
114 | </property> | ||
115 | </widget> | ||
116 | <widget row="1" column="0" > | ||
117 | <class>QLabel</class> | ||
118 | <property stdset="1"> | ||
119 | <name>name</name> | ||
120 | <cstring>Username</cstring> | ||
121 | </property> | ||
122 | <property stdset="1"> | ||
123 | <name>text</name> | ||
124 | <string>Username</string> | ||
125 | </property> | ||
126 | </widget> | ||
127 | <widget row="0" column="0" > | ||
128 | <class>QLabel</class> | ||
129 | <property stdset="1"> | ||
130 | <name>name</name> | ||
131 | <cstring>Name</cstring> | ||
132 | </property> | ||
133 | <property stdset="1"> | ||
134 | <name>text</name> | ||
135 | <string>Name</string> | ||
136 | </property> | ||
137 | </widget> | ||
138 | <widget row="6" column="0" rowspan="1" colspan="2" > | ||
139 | <class>QMultiLineEdit</class> | ||
140 | <property stdset="1"> | ||
141 | <name>name</name> | ||
142 | <cstring>CommentField</cstring> | ||
143 | </property> | ||
144 | <property stdset="1"> | ||
145 | <name>wordWrap</name> | ||
146 | <enum>WidgetWidth</enum> | ||
147 | </property> | ||
148 | </widget> | ||
149 | </grid> | ||
150 | </widget> | ||
151 | <tabstops> | ||
152 | <tabstop>NameField</tabstop> | ||
153 | <tabstop>UsernameField</tabstop> | ||
154 | <tabstop>PasswordField</tabstop> | ||
155 | <tabstop>Field5</tabstop> | ||
156 | <tabstop>Field6</tabstop> | ||
157 | <tabstop>CommentField</tabstop> | ||
158 | </tabstops> | ||
159 | </UI> | ||
diff --git a/noncore/apps/zsafe/passworddialog.ui b/noncore/apps/zsafe/passworddialog.ui new file mode 100644 index 0000000..da40d12 --- a/dev/null +++ b/noncore/apps/zsafe/passworddialog.ui | |||
@@ -0,0 +1,58 @@ | |||
1 | <!DOCTYPE UI><UI> | ||
2 | <class>PasswordForm</class> | ||
3 | <widget> | ||
4 | <class>QDialog</class> | ||
5 | <property stdset="1"> | ||
6 | <name>name</name> | ||
7 | <cstring>PasswordForm</cstring> | ||
8 | </property> | ||
9 | <property stdset="1"> | ||
10 | <name>geometry</name> | ||
11 | <rect> | ||
12 | <x>0</x> | ||
13 | <y>0</y> | ||
14 | <width>181</width> | ||
15 | <height>45</height> | ||
16 | </rect> | ||
17 | </property> | ||
18 | <property stdset="1"> | ||
19 | <name>caption</name> | ||
20 | <string>ZSafe</string> | ||
21 | </property> | ||
22 | <grid> | ||
23 | <property stdset="1"> | ||
24 | <name>margin</name> | ||
25 | <number>11</number> | ||
26 | </property> | ||
27 | <property stdset="1"> | ||
28 | <name>spacing</name> | ||
29 | <number>6</number> | ||
30 | </property> | ||
31 | <widget row="0" column="0" > | ||
32 | <class>QLabel</class> | ||
33 | <property stdset="1"> | ||
34 | <name>name</name> | ||
35 | <cstring>Password</cstring> | ||
36 | </property> | ||
37 | <property stdset="1"> | ||
38 | <name>text</name> | ||
39 | <string>Password</string> | ||
40 | </property> | ||
41 | </widget> | ||
42 | <widget row="0" column="1" > | ||
43 | <class>QLineEdit</class> | ||
44 | <property stdset="1"> | ||
45 | <name>name</name> | ||
46 | <cstring>PasswordField</cstring> | ||
47 | </property> | ||
48 | <property stdset="1"> | ||
49 | <name>echoMode</name> | ||
50 | <enum>Password</enum> | ||
51 | </property> | ||
52 | </widget> | ||
53 | </grid> | ||
54 | </widget> | ||
55 | <tabstops> | ||
56 | <tabstop>PasswordField</tabstop> | ||
57 | </tabstops> | ||
58 | </UI> | ||
diff --git a/noncore/apps/zsafe/pics/zsafe/copy.xpm b/noncore/apps/zsafe/pics/zsafe/copy.xpm new file mode 100644 index 0000000..03a143f --- a/dev/null +++ b/noncore/apps/zsafe/pics/zsafe/copy.xpm | |||
@@ -0,0 +1,124 @@ | |||
1 | /* XPM */ | ||
2 | static char * copy_xpm[] = { | ||
3 | "14 14 107 2", | ||
4 | " c None", | ||
5 | ". c #C9D1DA", | ||
6 | "+ c #CED5DD", | ||
7 | "@ c #D0D8DF", | ||
8 | "# c #CED6DE", | ||
9 | "$ c #A6B3C3", | ||
10 | "% c #8B9BB1", | ||
11 | "& c #C4CDD7", | ||
12 | "* c #E0E5EA", | ||
13 | "= c #E3E7EC", | ||
14 | "- c #D7DEE4", | ||
15 | "; c #D7DDE4", | ||
16 | "> c #ADBAC8", | ||
17 | ", c #9EADBD", | ||
18 | "' c #8394AB", | ||
19 | ") c #E2E6EB", | ||
20 | "! c #E6EAED", | ||
21 | "~ c #DDE3E8", | ||
22 | "{ c #C9D2DA", | ||
23 | "] c #B9C4CF", | ||
24 | "^ c #94A3B5", | ||
25 | "/ c #A0A2B0", | ||
26 | "( c #C0BBC6", | ||
27 | "_ c #D8DEE4", | ||
28 | ": c #EAEEF0", | ||
29 | "< c #DBE1E6", | ||
30 | "[ c #D5DCE2", | ||
31 | "} c #C0C9D4", | ||
32 | "| c #AFBAC7", | ||
33 | "1 c #9EA1AF", | ||
34 | "2 c #BEBAC2", | ||
35 | "3 c #D2CDD9", | ||
36 | "4 c #B2AABA", | ||
37 | "5 c #D0D7DF", | ||
38 | "6 c #E8ECEF", | ||
39 | "7 c #CED6DD", | ||
40 | "8 c #C3CCD6", | ||
41 | "9 c #C1C9D4", | ||
42 | "0 c #C0CAD3", | ||
43 | "a c #99A1AF", | ||
44 | "b c #B9B6BD", | ||
45 | "c c #C5BECB", | ||
46 | "d c #B2A7BB", | ||
47 | "e c #9C92A5", | ||
48 | "f c #CDD4DD", | ||
49 | "g c #E7ECEF", | ||
50 | "h c #DCE2E7", | ||
51 | "i c #CBD3DB", | ||
52 | "j c #C6CFD9", | ||
53 | "k c #C7D0D8", | ||
54 | "l c #9FA8B7", | ||
55 | "m c #B2B0B9", | ||
56 | "n c #CBC5CF", | ||
57 | "o c #CFC7D6", | ||
58 | "p c #B5ABBE", | ||
59 | "q c #DEE3E8", | ||
60 | "r c #CDD5DD", | ||
61 | "s c #CAD2DB", | ||
62 | "t c #C7CFD9", | ||
63 | "u c #D2D8E0", | ||
64 | "v c #AFB8C5", | ||
65 | "w c #A6A7B1", | ||
66 | "x c #BEB9C4", | ||
67 | "y c #D7D1DE", | ||
68 | "z c #BBB2C4", | ||
69 | "A c #DBE1E7", | ||
70 | "B c #DAE0E6", | ||
71 | "C c #D2D9E0", | ||
72 | "D c #C5CCD7", | ||
73 | "E c #A1ABBB", | ||
74 | "F c #9C9FAD", | ||
75 | "G c #B4AFBA", | ||
76 | "H c #D5D0DC", | ||
77 | "I c #BDB4C5", | ||
78 | "J c #CBD3DC", | ||
79 | "K c #D5DBE2", | ||
80 | "L c #C6CED8", | ||
81 | "M c #B3BBC8", | ||
82 | "N c #A5ADBA", | ||
83 | "O c #9EA5B4", | ||
84 | "P c #A9ABB9", | ||
85 | "Q c #B5B2BE", | ||
86 | "R c #D9D4DF", | ||
87 | "S c #BEB6C6", | ||
88 | "T c #9CA9BC", | ||
89 | "U c #B0B2C0", | ||
90 | "V c #C9C9D0", | ||
91 | "W c #C9C5CE", | ||
92 | "X c #D1CCD6", | ||
93 | "Y c #D5D0DB", | ||
94 | "Z c #D8D2DE", | ||
95 | "` c #E0DBE6", | ||
96 | " .c #BFB6C7", | ||
97 | "..c #DBD6E0", | ||
98 | "+.c #F2F1F4", | ||
99 | "@.c #E9E6ED", | ||
100 | "#.c #E9E5ED", | ||
101 | "$.c #E8E3EC", | ||
102 | "%.c #E5E1EA", | ||
103 | "&.c #E8E4ED", | ||
104 | "*.c #C0B8C8", | ||
105 | "=.c #BDB5C6", | ||
106 | "-.c #C6BFCC", | ||
107 | ";.c #C3BBCA", | ||
108 | ">.c #C2BAC9", | ||
109 | ",.c #C1B8C8", | ||
110 | "'.c #B0A6B9", | ||
111 | " ", | ||
112 | " . + @ # $ % ", | ||
113 | "& * = - ; > , ' ", | ||
114 | " ) ! - ~ { ] ^ / ( ", | ||
115 | " _ : < [ . } | 1 2 3 4 ", | ||
116 | " 5 6 < 7 8 9 0 a b c d e ", | ||
117 | " f g h i . j k l m n o p ", | ||
118 | " q q r s t u v w x y z ", | ||
119 | " _ ! A B C D E F G H I ", | ||
120 | " J K L M N O P Q ( R S ", | ||
121 | " T U V W X Y Z ` . ", | ||
122 | " ..+.@.#.$.%.&.*. ", | ||
123 | " =.-.;.>.>.,.*.'. ", | ||
124 | " "}; | ||
diff --git a/noncore/apps/zsafe/pics/zsafe/cut.xpm b/noncore/apps/zsafe/pics/zsafe/cut.xpm new file mode 100644 index 0000000..cecd174 --- a/dev/null +++ b/noncore/apps/zsafe/pics/zsafe/cut.xpm | |||
@@ -0,0 +1,89 @@ | |||
1 | /* XPM */ | ||
2 | static char * cut_xpm[] = { | ||
3 | "14 14 72 1", | ||
4 | " c None", | ||
5 | ".c #FDD900", | ||
6 | "+c #FBE601", | ||
7 | "@c #DD8000", | ||
8 | "#c #FDDC00", | ||
9 | "$c #EDDB02", | ||
10 | "%c #CFC305", | ||
11 | "&c #EE9600", | ||
12 | "*c #FEE600", | ||
13 | "=c #C9A607", | ||
14 | "-c #897905", | ||
15 | ";c #EC9300", | ||
16 | ">c #FCDA00", | ||
17 | ",c #DAB905", | ||
18 | "'c #AC9A06", | ||
19 | ")c #917000", | ||
20 | "!c #DFC503", | ||
21 | "~c #D5B606", | ||
22 | "{c #CF8B04", | ||
23 | "]c #F1C201", | ||
24 | "^c #EADA03", | ||
25 | "/c #F39900", | ||
26 | "(c #DCB502", | ||
27 | "_c #BBA105", | ||
28 | ":c #AD9705", | ||
29 | "<c #E49301", | ||
30 | "[c #D9961E", | ||
31 | "}c #FBB509", | ||
32 | "|c #ED8B0A", | ||
33 | "1c #DDBB05", | ||
34 | "2c #C3B204", | ||
35 | "3c #E3D400", | ||
36 | "4c #F09E00", | ||
37 | "5c #7EA5CE", | ||
38 | "6c #C5CFDB", | ||
39 | "7c #7393B6", | ||
40 | "8c #D07C09", | ||
41 | "9c #F7AF00", | ||
42 | "0c #F2A300", | ||
43 | "ac #B16200", | ||
44 | "bc #C7E5F5", | ||
45 | "cc #89C0E7", | ||
46 | "dc #BCD8FA", | ||
47 | "ec #4798E4", | ||
48 | "fc #35201A", | ||
49 | "gc #862F00", | ||
50 | "hc #702A00", | ||
51 | "ic #C1E0F3", | ||
52 | "jc #A0D3F6", | ||
53 | "kc #5CA0DD", | ||
54 | "lc #BED8FA", | ||
55 | "mc #4899E6", | ||
56 | "nc #AFD3ED", | ||
57 | "oc #A1D3F6", | ||
58 | "pc #3E80BF", | ||
59 | "qc #3578B9", | ||
60 | "rc #BFD8F8", | ||
61 | "sc #4E99E1", | ||
62 | "tc #81B6E7", | ||
63 | "uc #4385C4", | ||
64 | "vc #4479A8", | ||
65 | "wc #C1D9F8", | ||
66 | "xc #4F99E1", | ||
67 | "yc #367DC6", | ||
68 | "zc #4B86BB", | ||
69 | "Ac #BED9F9", | ||
70 | "Bc #5E9CD6", | ||
71 | "Cc #5592C8", | ||
72 | "Dc #60A6EE", | ||
73 | "Ec #2F5475", | ||
74 | "Fc #1D7DD3", | ||
75 | "Gc #11579E", | ||
76 | " .+@ ", | ||
77 | " #$%& ", | ||
78 | " *=-; ", | ||
79 | " >,';)!~{ ", | ||
80 | " ]^/(_:< ", | ||
81 | " [}|1234 ", | ||
82 | " 567890a ", | ||
83 | " bcdefgh ", | ||
84 | " ijklm ", | ||
85 | " nopqrs ", | ||
86 | " tu vwx ", | ||
87 | " y zAB ", | ||
88 | " CDE ", | ||
89 | " FG "}; | ||
diff --git a/noncore/apps/zsafe/pics/zsafe/edit.xpm b/noncore/apps/zsafe/pics/zsafe/edit.xpm new file mode 100644 index 0000000..50fba51 --- a/dev/null +++ b/noncore/apps/zsafe/pics/zsafe/edit.xpm | |||
@@ -0,0 +1,108 @@ | |||
1 | /* XPM */ | ||
2 | static char * edit_xpm[] = { | ||
3 | "14 14 91 1", | ||
4 | " c None", | ||
5 | ".c #D6DFED", | ||
6 | "+c #E5EAF4", | ||
7 | "@c #E3EAF4", | ||
8 | "#c #DAE3F2", | ||
9 | "$c #C5CEDC", | ||
10 | "%c #E4EAF4", | ||
11 | "&c #FFFFFF", | ||
12 | "*c #FBFEFF", | ||
13 | "=c #EDF3FD", | ||
14 | "-c #E5CE80", | ||
15 | ";c #F8CF69", | ||
16 | ">c #EBB785", | ||
17 | ",c #FEFFFF", | ||
18 | "'c #F3F1ED", | ||
19 | ")c #F8D625", | ||
20 | "!c #FEB006", | ||
21 | "~c #E99141", | ||
22 | "{c #F8E59F", | ||
23 | "]c #FDCD09", | ||
24 | "^c #FC9E10", | ||
25 | "/c #C49277", | ||
26 | "(c #9DADC9", | ||
27 | "_c #FEFAF3", | ||
28 | ":c #FCDB44", | ||
29 | "<c #FEC219", | ||
30 | "[c #EF9234", | ||
31 | "}c #C1BFCC", | ||
32 | "|c #A7B6D0", | ||
33 | "1c #FDEDBB", | ||
34 | "2c #FDD82E", | ||
35 | "3c #FEB832", | ||
36 | "4c #DAA27B", | ||
37 | "5c #CCD8EB", | ||
38 | "6c #AFBED6", | ||
39 | "7c #FEFDFB", | ||
40 | "8c #FBE072", | ||
41 | "9c #FED342", | ||
42 | "0c #F6A845", | ||
43 | "ac #D7D0D7", | ||
44 | "bc #D6E0F1", | ||
45 | "cc #B6C3D9", | ||
46 | "dc #F7EED3", | ||
47 | "ec #FDE35E", | ||
48 | "fc #FECD5C", | ||
49 | "gc #E4B184", | ||
50 | "hc #E1E9F7", | ||
51 | "ic #DCE4F3", | ||
52 | "jc #B5C1D7", | ||
53 | "kc #FCFEFF", | ||
54 | "lc #F7DEAD", | ||
55 | "mc #FEE483", | ||
56 | "nc #F6C471", | ||
57 | "oc #DECDC9", | ||
58 | "pc #D7DEEC", | ||
59 | "qc #CDD4E5", | ||
60 | "rc #AAB5CB", | ||
61 | "sc #FBFFFF", | ||
62 | "tc #ECD3B7", | ||
63 | "uc #F7DFC0", | ||
64 | "vc #D6BAA9", | ||
65 | "wc #D3D7E4", | ||
66 | "xc #CFD6E5", | ||
67 | "yc #CCD3E3", | ||
68 | "zc #ABB6CC", | ||
69 | "Ac #FAFEFF", | ||
70 | "Bc #C8B7AF", | ||
71 | "Cc #C2AEA9", | ||
72 | "Dc #D7DCE6", | ||
73 | "Ec #D4DAE7", | ||
74 | "Fc #D0D7E6", | ||
75 | "Gc #D1D8E7", | ||
76 | "Hc #B5C0D6", | ||
77 | "Ic #F9FEFF", | ||
78 | "Jc #ECE9EB", | ||
79 | "Kc #EAF0F7", | ||
80 | "Lc #E6ECF6", | ||
81 | "Mc #E0E6F3", | ||
82 | "Nc #E2E9F6", | ||
83 | "Oc #E2EAF8", | ||
84 | "Pc #BECADF", | ||
85 | "Qc #CDD7E6", | ||
86 | "Rc #D8DEE7", | ||
87 | "Sc #D4DDE7", | ||
88 | "Tc #D2DBE7", | ||
89 | "Uc #D0D9E7", | ||
90 | "Vc #CED7E6", | ||
91 | "Wc #CAD4E5", | ||
92 | "Xc #C6D1E3", | ||
93 | "Yc #C4CFE2", | ||
94 | "Zc #ACB9D1", | ||
95 | ".+++@#$ ", | ||
96 | "%&&&*=-;> ", | ||
97 | "%&&&,')!~ ", | ||
98 | "%&&&&{]^/( ", | ||
99 | "%&&&_:<[}| ", | ||
100 | "%&&&123456 ", | ||
101 | "%&&7890abc ", | ||
102 | "%&&defghij ", | ||
103 | "%&klmnopqr ", | ||
104 | "%&stuvwxyz ", | ||
105 | "%&ABCDEFGH ", | ||
106 | "%,IJKLMNOP ", | ||
107 | "QRSTUVWXYZ ", | ||
108 | " "}; | ||
diff --git a/noncore/apps/zsafe/pics/zsafe/editdelete.xpm b/noncore/apps/zsafe/pics/zsafe/editdelete.xpm new file mode 100644 index 0000000..675b4eb --- a/dev/null +++ b/noncore/apps/zsafe/pics/zsafe/editdelete.xpm | |||
@@ -0,0 +1,95 @@ | |||
1 | /* XPM */ | ||
2 | static char * editdelete_xpm[] = { | ||
3 | "14 14 78 1", | ||
4 | " c None", | ||
5 | ".c #000000", | ||
6 | "+c #201313", | ||
7 | "@c #764747", | ||
8 | "#c #795353", | ||
9 | "$c #150D0D", | ||
10 | "%c #261818", | ||
11 | "&c #8B5F5F", | ||
12 | "*c #E08383", | ||
13 | "=c #7E3F3F", | ||
14 | "-c #946C6C", | ||
15 | ";c #E79696", | ||
16 | ">c #824141", | ||
17 | ",c #764848", | ||
18 | "'c #D37171", | ||
19 | ")c #CF6767", | ||
20 | "!c #783C3C", | ||
21 | "~c #020101", | ||
22 | "{c #040303", | ||
23 | "]c #E89B9B", | ||
24 | "^c #CA6969", | ||
25 | "/c #944A4A", | ||
26 | "(c #412121", | ||
27 | "_c #7F3F3F", | ||
28 | ":c #CF6868", | ||
29 | "<c #CD6666", | ||
30 | "[c #D46C6C", | ||
31 | "}c #683838", | ||
32 | "|c #795757", | ||
33 | "1c #E99A9A", | ||
34 | "2c #8A4444", | ||
35 | "3c #3D1E1E", | ||
36 | "4c #763B3B", | ||
37 | "5c #D46D6D", | ||
38 | "6c #CD6969", | ||
39 | "7c #D77878", | ||
40 | "8c #DB8383", | ||
41 | "9c #C76868", | ||
42 | "0c #8F4646", | ||
43 | "ac #3B1D1D", | ||
44 | "bc #683737", | ||
45 | "cc #D77777", | ||
46 | "dc #D06C6C", | ||
47 | "ec #CE6666", | ||
48 | "fc #AB5555", | ||
49 | "gc #361B1B", | ||
50 | "hc #785858", | ||
51 | "ic #DB8282", | ||
52 | "jc #CE6767", | ||
53 | "kc #C86363", | ||
54 | "lc #B95C5C", | ||
55 | "mc #572C2C", | ||
56 | "nc #926B6B", | ||
57 | "oc #EA9B9B", | ||
58 | "pc #C86868", | ||
59 | "qc #AB5454", | ||
60 | "rc #C86464", | ||
61 | "sc #C66363", | ||
62 | "tc #723939", | ||
63 | "uc #956C6C", | ||
64 | "vc #C76363", | ||
65 | "wc #D06868", | ||
66 | "xc #CA6565", | ||
67 | "yc #713939", | ||
68 | "zc #785050", | ||
69 | "Ac #E79595", | ||
70 | "Bc #3C1E1E", | ||
71 | "Cc #743A3A", | ||
72 | "Dc #BD5E5E", | ||
73 | "Ec #A15151", | ||
74 | "Fc #4E2727", | ||
75 | "Gc #884444", | ||
76 | "Hc #964A4A", | ||
77 | "Ic #3D1F1F", | ||
78 | "Jc #713838", | ||
79 | "Kc #A25050", | ||
80 | "Lc #542929", | ||
81 | "Mc #4B2525", | ||
82 | " . . ", | ||
83 | " +@. .#$ ", | ||
84 | " %&*=. .-;>. ", | ||
85 | ".,*')!~{-]^/(~", | ||
86 | " ._:<[}|1^23. ", | ||
87 | " .4567890a. ", | ||
88 | " .bcdefg. ", | ||
89 | " .hijklm. ", | ||
90 | " .nopqlrst. ", | ||
91 | " .u]^0gmvwxy. ", | ||
92 | ".zA^2B.~CxDEF.", | ||
93 | " .GHI. .JKL. ", | ||
94 | " .(. .M. ", | ||
95 | " . . "}; | ||
diff --git a/noncore/apps/zsafe/pics/zsafe/expand.xpm b/noncore/apps/zsafe/pics/zsafe/expand.xpm new file mode 100644 index 0000000..ebc2325 --- a/dev/null +++ b/noncore/apps/zsafe/pics/zsafe/expand.xpm | |||
@@ -0,0 +1,57 @@ | |||
1 | /* XPM */ | ||
2 | static char * expand_xpm[] = { | ||
3 | "14 14 40 1", | ||
4 | " c None", | ||
5 | ".c #393939", | ||
6 | "+c #363636", | ||
7 | "@c #79A97A", | ||
8 | "#c #A4CCA4", | ||
9 | "$c #9BC79B", | ||
10 | "%c #67AB67", | ||
11 | "&c #383838", | ||
12 | "*c #73A373", | ||
13 | "=c #AED0AE", | ||
14 | "-c #9EC89E", | ||
15 | ";c #529751", | ||
16 | ">c #676767", | ||
17 | ",c #373737", | ||
18 | "'c #609360", | ||
19 | ")c #6DAE6D", | ||
20 | "!c #5DA15B", | ||
21 | "~c #3E7A3E", | ||
22 | "{c #4C4C4C", | ||
23 | "]c #353535", | ||
24 | "^c #264B25", | ||
25 | "/c #1B361B", | ||
26 | "(c #79AA7A", | ||
27 | "_c #93C393", | ||
28 | ":c #6AAD6A", | ||
29 | "<c #74A574", | ||
30 | "[c #B6D6B6", | ||
31 | "}c #A7CDA7", | ||
32 | "|c #549A52", | ||
33 | "1c #333333", | ||
34 | "2c #649764", | ||
35 | "3c #73B073", | ||
36 | "4c #62A562", | ||
37 | "5c #417D40", | ||
38 | "6c #5E5E5E", | ||
39 | "7c #595959", | ||
40 | "8c #555555", | ||
41 | "9c #437943", | ||
42 | "0c #30602F", | ||
43 | "ac #234623", | ||
44 | " . ", | ||
45 | " + ", | ||
46 | " + @#$% ", | ||
47 | " & *=-; > >>", | ||
48 | " , ')!~ {", | ||
49 | " ] ^/ ", | ||
50 | " + ", | ||
51 | " + ", | ||
52 | " + ($_: ", | ||
53 | " & <[}| ", | ||
54 | " 1 2345 6 78", | ||
55 | " 90a ", | ||
56 | " ", | ||
57 | " "}; | ||
diff --git a/noncore/apps/zsafe/pics/zsafe/export.xpm b/noncore/apps/zsafe/pics/zsafe/export.xpm new file mode 100644 index 0000000..5f3ae2d --- a/dev/null +++ b/noncore/apps/zsafe/pics/zsafe/export.xpm | |||
@@ -0,0 +1,134 @@ | |||
1 | /* XPM */ | ||
2 | static char * export_xpm[] = { | ||
3 | "14 14 117 2", | ||
4 | " c None", | ||
5 | ". c #7A98E5", | ||
6 | "+ c #829FE6", | ||
7 | "@ c #809DE6", | ||
8 | "# c #7D9BE5", | ||
9 | "$ c #A9BDEE", | ||
10 | "% c #D1DBF5", | ||
11 | "& c #CAD6F4", | ||
12 | "* c #C3D0F2", | ||
13 | "= c #7392E3", | ||
14 | "- c #C7D4F3", | ||
15 | "; c #B4C5F0", | ||
16 | "> c #ABBEEE", | ||
17 | ", c #A7BBED", | ||
18 | "' c #8DA7E8", | ||
19 | ") c #688AE1", | ||
20 | "! c #5995BB", | ||
21 | "~ c #45B865", | ||
22 | "{ c #4485B7", | ||
23 | "] c #446CD4", | ||
24 | "^ c #1E3C87", | ||
25 | "/ c #87A2E7", | ||
26 | "( c #DCE4F8", | ||
27 | "_ c #BFCEF2", | ||
28 | ": c #B3C4F0", | ||
29 | "< c #A9BCEE", | ||
30 | "[ c #A2B7EC", | ||
31 | "} c #94ACEA", | ||
32 | "| c #7BB0C1", | ||
33 | "1 c #74D875", | ||
34 | "2 c #89D1A0", | ||
35 | "3 c #5C96BD", | ||
36 | "4 c #203A79", | ||
37 | "5 c #8CA7E9", | ||
38 | "6 c #EFF3FC", | ||
39 | "7 c #D2DCF6", | ||
40 | "8 c #81B098", | ||
41 | "9 c #60BE6F", | ||
42 | "0 c #63CA74", | ||
43 | "a c #5FC673", | ||
44 | "b c #57C669", | ||
45 | "c c #69DF6B", | ||
46 | "d c #B8F8B9", | ||
47 | "e c #80CF95", | ||
48 | "f c #1D485F", | ||
49 | "g c #8BA5E8", | ||
50 | "h c #E8EEFA", | ||
51 | "i c #CBD7F5", | ||
52 | "j c #4F845F", | ||
53 | "k c #73BE73", | ||
54 | "l c #A9ECAA", | ||
55 | "m c #B2F2B3", | ||
56 | "n c #B9F6BA", | ||
57 | "o c #8BF88F", | ||
58 | "p c #68FC6D", | ||
59 | "q c #C7FAC9", | ||
60 | "r c #6BC774", | ||
61 | "s c #8AA4E8", | ||
62 | "t c #E3E9F9", | ||
63 | "u c #C2D0F2", | ||
64 | "v c #477D5B", | ||
65 | "w c #0C9910", | ||
66 | "x c #14C119", | ||
67 | "y c #14CC18", | ||
68 | "z c #17D81C", | ||
69 | "A c #1DE324", | ||
70 | "B c #26EB30", | ||
71 | "C c #56ED5D", | ||
72 | "D c #9EE8A0", | ||
73 | "E c #57D059", | ||
74 | "F c #88A3E8", | ||
75 | "G c #DFE6F8", | ||
76 | "H c #BCCBF1", | ||
77 | "I c #437A5A", | ||
78 | "J c #007200", | ||
79 | "K c #008000", | ||
80 | "L c #008200", | ||
81 | "M c #008400", | ||
82 | "N c #009000", | ||
83 | "O c #05A808", | ||
84 | "P c #049905", | ||
85 | "Q c #025811", | ||
86 | "R c #839FE7", | ||
87 | "S c #B1C3F0", | ||
88 | "T c #679191", | ||
89 | "U c #3D7559", | ||
90 | "V c #3B7358", | ||
91 | "W c #336D57", | ||
92 | "X c #236340", | ||
93 | "Y c #006900", | ||
94 | "Z c #008401", | ||
95 | "` c #0A5D32", | ||
96 | " .c #0D2E57", | ||
97 | "..c #7192E4", | ||
98 | "+.c #A2B7ED", | ||
99 | "@.c #95ADEA", | ||
100 | "#.c #8FA9E9", | ||
101 | "$.c #86A1E8", | ||
102 | "%.c #7997E5", | ||
103 | "&.c #6588E1", | ||
104 | "*.c #4273A8", | ||
105 | "=.c #005700", | ||
106 | "-.c #095C32", | ||
107 | ";.c #1F53A4", | ||
108 | ">.c #132F75", | ||
109 | ",.c #537ADE", | ||
110 | "'.c #4870D7", | ||
111 | ").c #456AC9", | ||
112 | "!.c #4064BF", | ||
113 | "~.c #385AB2", | ||
114 | "{.c #2F4FA4", | ||
115 | "].c #244496", | ||
116 | "^.c #184470", | ||
117 | "/.c #044519", | ||
118 | "(.c #133A69", | ||
119 | "_.c #19398C", | ||
120 | ":.c #0F2865", | ||
121 | " ", | ||
122 | " . + @ # ", | ||
123 | " . $ % & * = ", | ||
124 | " @ - ; > , ' ) ! ~ { ] ^ ", | ||
125 | " / ( _ : < [ } | 1 2 3 4 ", | ||
126 | " 5 6 7 8 9 0 a b c d e f ", | ||
127 | " g h i j k l m n o p q r ", | ||
128 | " s t u v w x y z A B C D E ", | ||
129 | " F G H I J K L M N O P Q ", | ||
130 | " R 7 S T U V W X Y Z ` . ", | ||
131 | " ..+.@.#.$.%.&.*.=.-.;.>. ", | ||
132 | " ,.'.).!.~.{.].^./.(._.:. ", | ||
133 | " ", | ||
134 | " "}; | ||
diff --git a/noncore/apps/zsafe/pics/zsafe/find.xpm b/noncore/apps/zsafe/pics/zsafe/find.xpm new file mode 100644 index 0000000..9d67a41 --- a/dev/null +++ b/noncore/apps/zsafe/pics/zsafe/find.xpm | |||
@@ -0,0 +1,130 @@ | |||
1 | /* XPM */ | ||
2 | static char * find_xpm[] = { | ||
3 | "14 14 113 2", | ||
4 | " c None", | ||
5 | ". c #A5B4CE", | ||
6 | "+ c #A0BFDF", | ||
7 | "@ c #A8CAE7", | ||
8 | "# c #A6C7E3", | ||
9 | "$ c #AABED6", | ||
10 | "% c #6A849D", | ||
11 | "& c #95AFD1", | ||
12 | "* c #96CCF2", | ||
13 | "= c #A8E0FA", | ||
14 | "- c #ACE4FB", | ||
15 | "; c #A9E1FB", | ||
16 | "> c #ABE2FA", | ||
17 | ", c #AACADF", | ||
18 | "' c #9DB3C5", | ||
19 | ") c #87A0B5", | ||
20 | "! c #748CA3", | ||
21 | "~ c #8E9EBD", | ||
22 | "{ c #93CAF1", | ||
23 | "] c #B5ECFC", | ||
24 | "^ c #CCFAFE", | ||
25 | "/ c #BFF1FD", | ||
26 | "( c #B8EEFC", | ||
27 | "_ c #B4EBFC", | ||
28 | ": c #BDF1FC", | ||
29 | "< c #A8C1D2", | ||
30 | "[ c #728FA8", | ||
31 | "} c #53728F", | ||
32 | "| c #6B849C", | ||
33 | "1 c #88A7CC", | ||
34 | "2 c #A4DDFA", | ||
35 | "3 c #C8F8FE", | ||
36 | "4 c #E8FFFF", | ||
37 | "5 c #CDF5FE", | ||
38 | "6 c #CCF9FE", | ||
39 | "7 c #CAFCFE", | ||
40 | "8 c #CCFDFF", | ||
41 | "9 c #BCE2E9", | ||
42 | "0 c #4F6E8B", | ||
43 | "a c #3C5A79", | ||
44 | "b c #76899F", | ||
45 | "c c #8EB0D2", | ||
46 | "d c #A8E1FB", | ||
47 | "e c #B6EBFC", | ||
48 | "f c #C8F3FD", | ||
49 | "g c #CAF9FE", | ||
50 | "h c #DBFFFF", | ||
51 | "i c #DAFFFF", | ||
52 | "j c #DCFFFF", | ||
53 | "k c #CEEEF1", | ||
54 | "l c #809FC4", | ||
55 | "m c #A7E0FA", | ||
56 | "n c #B1E8FB", | ||
57 | "o c #C4F5FE", | ||
58 | "p c #D7FEFF", | ||
59 | "q c #DEFFFF", | ||
60 | "r c #E7FFFF", | ||
61 | "s c #EBFFFF", | ||
62 | "t c #CCE0E7", | ||
63 | "u c #6A7DA1", | ||
64 | "v c #A4DBF6", | ||
65 | "w c #ACE5FB", | ||
66 | "x c #C0F5FD", | ||
67 | "y c #D4FFFF", | ||
68 | "z c #E2FFFF", | ||
69 | "A c #F0FFFF", | ||
70 | "B c #F7FEFF", | ||
71 | "C c #AEB7C6", | ||
72 | "D c #7C99BA", | ||
73 | "E c #B1E6F7", | ||
74 | "F c #C1F5FE", | ||
75 | "G c #D2FFFF", | ||
76 | "H c #E0FFFF", | ||
77 | "I c #ECFEFE", | ||
78 | "J c #C6CED8", | ||
79 | "K c #898AA2", | ||
80 | "L c #768CAA", | ||
81 | "M c #A0C4D5", | ||
82 | "N c #B7DCE4", | ||
83 | "O c #B9D4DD", | ||
84 | "P c #9EABBC", | ||
85 | "Q c #8789A1", | ||
86 | "R c #A7A5B2", | ||
87 | "S c #C89F68", | ||
88 | "T c #CF8A23", | ||
89 | "U c #B48549", | ||
90 | "V c #EFD28D", | ||
91 | "W c #ECB34D", | ||
92 | "X c #C37F21", | ||
93 | "Y c #8197AC", | ||
94 | "Z c #617C97", | ||
95 | "` c #CCA153", | ||
96 | " .c #F8E19E", | ||
97 | "..c #EAB24E", | ||
98 | "+.c #B77622", | ||
99 | "@.c #A4B9CA", | ||
100 | "#.c #7592AB", | ||
101 | "$.c #7A93AA", | ||
102 | "%.c #C29851", | ||
103 | "&.c #F8DF9B", | ||
104 | "*.c #E9B351", | ||
105 | "=.c #A26825", | ||
106 | "-.c #7592AA", | ||
107 | ";.c #51708D", | ||
108 | ">.c #405E7D", | ||
109 | ",.c #879DB1", | ||
110 | "'.c #BB9353", | ||
111 | ").c #E2C586", | ||
112 | "!.c #977964", | ||
113 | "~.c #7D94AA", | ||
114 | "{.c #3D5C7A", | ||
115 | "].c #5D758E", | ||
116 | "^.c #87644D", | ||
117 | " . + @ # $ % ", | ||
118 | " & * = - ; > , ' ) ! ", | ||
119 | "~ { ] ^ / ( _ : < [ } | ", | ||
120 | "1 2 3 4 5 6 7 8 9 0 a b ", | ||
121 | "c d e f g h i j k ", | ||
122 | "l m n o p q r s t ", | ||
123 | "u v w x y z A B C ", | ||
124 | " D E F G H I J K ", | ||
125 | " L M N O P Q R S T ", | ||
126 | " U V W X ", | ||
127 | " Y Z ` ...+. ", | ||
128 | "@.#.$. %.&.*.=.", | ||
129 | "-.;.>.,. '.).!.", | ||
130 | "~.{.]. ^. "}; | ||
diff --git a/noncore/apps/zsafe/pics/zsafe/folder_open.xpm b/noncore/apps/zsafe/pics/zsafe/folder_open.xpm new file mode 100644 index 0000000..10b4d6c --- a/dev/null +++ b/noncore/apps/zsafe/pics/zsafe/folder_open.xpm | |||
@@ -0,0 +1,103 @@ | |||
1 | /* XPM */ | ||
2 | static char * folder_open_xpm[] = { | ||
3 | "14 14 86 1", | ||
4 | " c None", | ||
5 | ".c #E9EAF3", | ||
6 | "+c #DCDFEE", | ||
7 | "@c #EDEEF5", | ||
8 | "#c #ECECF4", | ||
9 | "$c #EAEAF3", | ||
10 | "%c #879ED4", | ||
11 | "&c #A2CAF6", | ||
12 | "*c #F1F2F7", | ||
13 | "=c #F2F2F8", | ||
14 | "-c #E6E6F0", | ||
15 | ";c #CFD4EA", | ||
16 | ">c #5880D6", | ||
17 | ",c #D1E6FC", | ||
18 | "'c #CFE4FF", | ||
19 | ")c #C3DAF8", | ||
20 | "!c #EFF2F7", | ||
21 | "~c #F8F8FB", | ||
22 | "{c #F3F2F7", | ||
23 | "]c #C2D1EB", | ||
24 | "^c #9FBCE8", | ||
25 | "/c #6FA2EA", | ||
26 | "(c #5197F1", | ||
27 | "_c #0045C7", | ||
28 | ":c #C3DFFB", | ||
29 | "<c #CAE1FF", | ||
30 | "[c #E0E6EE", | ||
31 | "}c #FEFEFE", | ||
32 | "|c #C1D5EE", | ||
33 | "1c #9BC6F7", | ||
34 | "2c #65A7F8", | ||
35 | "3c #5A9FF7", | ||
36 | "4c #3E7DE3", | ||
37 | "5c #002DB1", | ||
38 | "6c #ABD1F7", | ||
39 | "7c #C4DEFF", | ||
40 | "8c #BACDEA", | ||
41 | "9c #CEE3F6", | ||
42 | "0c #B2D4F3", | ||
43 | "ac #9FCBF7", | ||
44 | "bc #75B3FA", | ||
45 | "cc #589CF6", | ||
46 | "dc #3E78E2", | ||
47 | "ec #0C39BE", | ||
48 | "fc #002CAE", | ||
49 | "gc #C1DCFF", | ||
50 | "hc #9EC8F8", | ||
51 | "ic #C5E4F8", | ||
52 | "jc #AED9FD", | ||
53 | "kc #87BEFA", | ||
54 | "lc #5996F1", | ||
55 | "mc #336FE3", | ||
56 | "nc #2054CF", | ||
57 | "oc #6279C5", | ||
58 | "pc #5E71B0", | ||
59 | "qc #AFD0FA", | ||
60 | "rc #91C2F8", | ||
61 | "sc #ABD4F8", | ||
62 | "tc #98C9FA", | ||
63 | "uc #6FA8F4", | ||
64 | "vc #518BEB", | ||
65 | "wc #7596DB", | ||
66 | "xc #B2B6CF", | ||
67 | "yc #B4B4C6", | ||
68 | "zc #4C63A8", | ||
69 | "Ac #97BFF1", | ||
70 | "Bc #8BBEF7", | ||
71 | "Cc #94C9FE", | ||
72 | "Dc #7EB6F6", | ||
73 | "Ec #9DBDEE", | ||
74 | "Fc #CBD0E0", | ||
75 | "Gc #CBCBD8", | ||
76 | "Hc #9BA4C4", | ||
77 | "Ic #4A63A7", | ||
78 | "Jc #91C1F6", | ||
79 | "Kc #BBDCFC", | ||
80 | "Lc #E0E7F1", | ||
81 | "Mc #E3E2E9", | ||
82 | "Nc #B9C1D7", | ||
83 | "Oc #6178B6", | ||
84 | "Pc #9FC5F0", | ||
85 | "Qc #FAFAFB", | ||
86 | "Rc #DAE0EC", | ||
87 | "Sc #7C99CC", | ||
88 | "Tc #82AFE6", | ||
89 | "Uc #9CBCE4", | ||
90 | " ", | ||
91 | " .+ ", | ||
92 | " @#$% ", | ||
93 | " & *=#-; > ", | ||
94 | " ,')!~{]^/(_ ", | ||
95 | " :<[}~|12345 ", | ||
96 | " 67890abcdef ", | ||
97 | " ghijklmnop ", | ||
98 | " qrstuvwxyz ", | ||
99 | " ABCDEFGHI ", | ||
100 | " JKLMNO ", | ||
101 | " PQRS ", | ||
102 | " TU ", | ||
103 | " "}; | ||
diff --git a/noncore/apps/zsafe/pics/zsafe/help_icon.xpm b/noncore/apps/zsafe/pics/zsafe/help_icon.xpm new file mode 100644 index 0000000..58e6312 --- a/dev/null +++ b/noncore/apps/zsafe/pics/zsafe/help_icon.xpm | |||
@@ -0,0 +1,119 @@ | |||
1 | /* XPM */ | ||
2 | static char * help_icon_xpm[] = { | ||
3 | "14 14 102 2", | ||
4 | " c None", | ||
5 | ". c #FBC4AC", | ||
6 | "+ c #FBBA9E", | ||
7 | "@ c #FEA391", | ||
8 | "# c #FDEAE2", | ||
9 | "$ c #FDFAF9", | ||
10 | "% c #FDFDFD", | ||
11 | "& c #FFBEBC", | ||
12 | "* c #FE8473", | ||
13 | "= c #F64A1B", | ||
14 | "- c #FF9687", | ||
15 | "; c #FFB7B6", | ||
16 | "> c #FDEFEF", | ||
17 | ", c #FCFCFC", | ||
18 | "' c #FBFBFB", | ||
19 | ") c #FBF5F5", | ||
20 | "! c #FDCDCD", | ||
21 | "~ c #FECCCC", | ||
22 | "{ c #FFB2AF", | ||
23 | "] c #EE502D", | ||
24 | "^ c #FE8F7C", | ||
25 | "/ c #FFABAA", | ||
26 | "( c #FEBFBF", | ||
27 | "_ c #F9B6B5", | ||
28 | ": c #EEC9BA", | ||
29 | "< c #DAA28A", | ||
30 | "[ c #DD7D62", | ||
31 | "} c #EF604C", | ||
32 | "| c #F7A9A8", | ||
33 | "1 c #FDBFBF", | ||
34 | "2 c #FEA9A7", | ||
35 | "3 c #D25735", | ||
36 | "4 c #FF877F", | ||
37 | "5 c #FEAAAA", | ||
38 | "6 c #F79696", | ||
39 | "7 c #E0533A", | ||
40 | "8 c #E13A19", | ||
41 | "9 c #F4BBBA", | ||
42 | "0 c #FBF2F2", | ||
43 | "a c #ECC4B8", | ||
44 | "b c #FDDCDB", | ||
45 | "c c #FAC5C5", | ||
46 | "d c #ED7061", | ||
47 | "e c #E5B9AA", | ||
48 | "f c #F8F8F8", | ||
49 | "g c #F9F4F2", | ||
50 | "h c #FBC3AB", | ||
51 | "i c #F6F6F6", | ||
52 | "j c #D9A189", | ||
53 | "k c #D7947E", | ||
54 | "l c #F5F5F5", | ||
55 | "m c #FAFAFA", | ||
56 | "n c #AE6A5A", | ||
57 | "o c #F4F4F4", | ||
58 | "p c #DC9C82", | ||
59 | "q c #D28470", | ||
60 | "r c #F3F0F0", | ||
61 | "s c #F9F9F9", | ||
62 | "t c #A66558", | ||
63 | "u c #FAF5F3", | ||
64 | "v c #F4F3F3", | ||
65 | "w c #E9917E", | ||
66 | "x c #D02C21", | ||
67 | "y c #EE6868", | ||
68 | "z c #F68988", | ||
69 | "A c #FBAF9E", | ||
70 | "B c #F76D6D", | ||
71 | "C c #E83838", | ||
72 | "D c #DB2908", | ||
73 | "E c #C11C08", | ||
74 | "F c #E03837", | ||
75 | "G c #F14040", | ||
76 | "H c #DB2622", | ||
77 | "I c #F6390B", | ||
78 | "J c #FC2926", | ||
79 | "K c #F12B2B", | ||
80 | "L c #E22525", | ||
81 | "M c #DA5748", | ||
82 | "N c #D6937D", | ||
83 | "O c #D2917D", | ||
84 | "P c #D69C91", | ||
85 | "Q c #DC2B2B", | ||
86 | "R c #EA2B2B", | ||
87 | "S c #F32726", | ||
88 | "T c #900D05", | ||
89 | "U c #ED2A06", | ||
90 | "V c #F91614", | ||
91 | "W c #F01616", | ||
92 | "X c #EDAAAA", | ||
93 | "Y c #ECECEC", | ||
94 | "Z c #EFEEEE", | ||
95 | "` c #EF7979", | ||
96 | " .c #F11514", | ||
97 | "..c #A80D06", | ||
98 | "+.c #D22301", | ||
99 | "@.c #EB1407", | ||
100 | "#.c #F5E0DF", | ||
101 | "$.c #F3EFEE", | ||
102 | "%.c #D8A6A1", | ||
103 | "&.c #900C04", | ||
104 | "*.c #AE6959", | ||
105 | "=.c #A66658", | ||
106 | " . + ", | ||
107 | " @ # $ % % & * = ", | ||
108 | " - ; > , ' ) ! ~ { ] ", | ||
109 | " ^ / ( _ : < [ } | 1 2 3 ", | ||
110 | " 4 5 6 7 8 9 0 a ", | ||
111 | " b c d e f g ", | ||
112 | "h ' i j k l m n ", | ||
113 | "+ m o p q r s t ", | ||
114 | " u v w x y z ", | ||
115 | " A B C D E F G H ", | ||
116 | " I J K L M N O P Q R S T ", | ||
117 | " U V W X Y Y Z ` ... ", | ||
118 | " +.@.#.i i $.%.&. ", | ||
119 | " *.=. "}; | ||
diff --git a/noncore/apps/zsafe/pics/zsafe/import.xpm b/noncore/apps/zsafe/pics/zsafe/import.xpm new file mode 100644 index 0000000..3085a0f --- a/dev/null +++ b/noncore/apps/zsafe/pics/zsafe/import.xpm | |||
@@ -0,0 +1,136 @@ | |||
1 | /* XPM */ | ||
2 | static char * import_xpm[] = { | ||
3 | "14 14 119 2", | ||
4 | " c None", | ||
5 | ". c #7A98E5", | ||
6 | "+ c #829FE6", | ||
7 | "@ c #809DE6", | ||
8 | "# c #7D9BE5", | ||
9 | "$ c #A9BDEE", | ||
10 | "% c #D1DBF5", | ||
11 | "& c #CAD6F4", | ||
12 | "* c #C3D0F2", | ||
13 | "= c #7392E3", | ||
14 | "- c #C7D4F3", | ||
15 | "; c #B4C5F0", | ||
16 | "> c #ABBEEE", | ||
17 | ", c #A7BBED", | ||
18 | "' c #8DA7E8", | ||
19 | ") c #658DD8", | ||
20 | "! c #45A781", | ||
21 | "~ c #4CAD82", | ||
22 | "{ c #4E76DD", | ||
23 | "] c #446CD4", | ||
24 | "^ c #1E3C87", | ||
25 | "/ c #87A2E7", | ||
26 | "( c #DCE4F8", | ||
27 | "_ c #BFCEF2", | ||
28 | ": c #B3C4F0", | ||
29 | "< c #A9BCEE", | ||
30 | "[ c #A2B7EC", | ||
31 | "} c #6AC18C", | ||
32 | "| c #9EE49F", | ||
33 | "1 c #5FBB85", | ||
34 | "2 c #6A8CE2", | ||
35 | "3 c #203A79", | ||
36 | "4 c #8CA7E9", | ||
37 | "5 c #EFF3FC", | ||
38 | "6 c #D2DCF6", | ||
39 | "7 c #C7D4F4", | ||
40 | "8 c #BCCBF1", | ||
41 | "9 c #6ECA84", | ||
42 | "0 c #CBF4CC", | ||
43 | "a c #89F18B", | ||
44 | "b c #50C95A", | ||
45 | "c c #59C272", | ||
46 | "d c #52BD71", | ||
47 | "e c #3FA857", | ||
48 | "f c #318935", | ||
49 | "g c #8BA5E8", | ||
50 | "h c #E8EEFA", | ||
51 | "i c #CBD7F5", | ||
52 | "j c #C3D0F3", | ||
53 | "k c #71CC84", | ||
54 | "l c #D6F3D7", | ||
55 | "m c #87FC8A", | ||
56 | "n c #5EFA64", | ||
57 | "o c #B9F6BA", | ||
58 | "p c #B5F4B6", | ||
59 | "q c #AEEFAF", | ||
60 | "r c #9CE49D", | ||
61 | "s c #186618", | ||
62 | "t c #8AA4E8", | ||
63 | "u c #E3E9F9", | ||
64 | "v c #C2D0F2", | ||
65 | "w c #7DCB96", | ||
66 | "x c #98DF9B", | ||
67 | "y c #77EC7C", | ||
68 | "z c #2CED35", | ||
69 | "A c #1EE627", | ||
70 | "B c #19DC1F", | ||
71 | "C c #15D019", | ||
72 | "D c #14C619", | ||
73 | "E c #11B716", | ||
74 | "F c #025A03", | ||
75 | "G c #88A3E8", | ||
76 | "H c #DFE6F8", | ||
77 | "I c #AFC2EF", | ||
78 | "J c #4A8068", | ||
79 | "K c #058807", | ||
80 | "L c #09AD0D", | ||
81 | "M c #009B01", | ||
82 | "N c #008500", | ||
83 | "O c #008300", | ||
84 | "P c #008100", | ||
85 | "Q c #007E00", | ||
86 | "R c #005300", | ||
87 | "S c #839FE7", | ||
88 | "T c #B1C3F0", | ||
89 | "U c #A8BCEE", | ||
90 | "V c #A3B8ED", | ||
91 | "W c #477B6B", | ||
92 | "X c #007500", | ||
93 | "Y c #008601", | ||
94 | "Z c #0F5620", | ||
95 | "` c #266354", | ||
96 | " .c #175852", | ||
97 | "..c #07422D", | ||
98 | "+.c #014A06", | ||
99 | "@.c #7192E4", | ||
100 | "#.c #A2B7ED", | ||
101 | "$.c #95ADEA", | ||
102 | "%.c #8FA9E9", | ||
103 | "&.c #86A1E8", | ||
104 | "*.c #7997E5", | ||
105 | "=.c #1D5E60", | ||
106 | "-.c #006200", | ||
107 | ";.c #1C5C53", | ||
108 | ">.c #4770D9", | ||
109 | ",.c #315DCE", | ||
110 | "'.c #132F75", | ||
111 | ").c #537ADE", | ||
112 | "!.c #4870D7", | ||
113 | "~.c #456AC9", | ||
114 | "{.c #4064BF", | ||
115 | "].c #385AB2", | ||
116 | "^.c #2F4FA4", | ||
117 | "/.c #22438B", | ||
118 | "(.c #093E33", | ||
119 | "_.c #0A4738", | ||
120 | ":.c #1B3C92", | ||
121 | "<.c #19398C", | ||
122 | "[.c #0F2865", | ||
123 | " ", | ||
124 | " . + @ # ", | ||
125 | " . $ % & * = ", | ||
126 | " @ - ; > , ' ) ! ~ { ] ^ ", | ||
127 | " / ( _ : < [ } | 1 @ 2 3 ", | ||
128 | " 4 5 6 7 8 9 0 a b c d e f ", | ||
129 | " g h i j k l m n o p q r s ", | ||
130 | " t u v w x y z A B C D E F ", | ||
131 | " G H 8 I J K L M N O P Q R ", | ||
132 | " S 6 T U V W X Y Z ` ...+.", | ||
133 | " @.#.$.%.&.*.=.-.;.>.,.'. ", | ||
134 | " ).!.~.{.].^./.(._.:.<.[. ", | ||
135 | " ", | ||
136 | " "}; | ||
diff --git a/noncore/apps/zsafe/pics/zsafe/new.xpm b/noncore/apps/zsafe/pics/zsafe/new.xpm new file mode 100644 index 0000000..d5f7e25 --- a/dev/null +++ b/noncore/apps/zsafe/pics/zsafe/new.xpm | |||
@@ -0,0 +1,115 @@ | |||
1 | /* XPM */ | ||
2 | static char * new_xpm[] = { | ||
3 | "14 14 98 2", | ||
4 | " c None", | ||
5 | ". c #CBD5E6", | ||
6 | "+ c #E1E6EF", | ||
7 | "@ c #E0E6EF", | ||
8 | "# c #DBE2EE", | ||
9 | "$ c #D1DAE9", | ||
10 | "% c #BCC7DC", | ||
11 | "& c #D9E1EE", | ||
12 | "* c #FFFFFF", | ||
13 | "= c #FDFFFF", | ||
14 | "- c #F2F7FE", | ||
15 | "; c #E4EAF5", | ||
16 | "> c #C8D2E4", | ||
17 | ", c #D3DCEB", | ||
18 | "' c #FEFFFF", | ||
19 | ") c #F7FAFF", | ||
20 | "! c #EAEEF8", | ||
21 | "~ c #CDD6E7", | ||
22 | "{ c #EAEEF5", | ||
23 | "] c #CCD5E5", | ||
24 | "^ c #F9FCFF", | ||
25 | "/ c #EDF2FB", | ||
26 | "( c #D9E1EF", | ||
27 | "_ c #B6C2D6", | ||
28 | ": c #A3B2CB", | ||
29 | "< c #94A5C0", | ||
30 | "[ c #FAFDFF", | ||
31 | "} c #F0F4FB", | ||
32 | "| c #EAC99F", | ||
33 | "1 c #C7C9D0", | ||
34 | "2 c #B7C4DA", | ||
35 | "3 c #A1B0CA", | ||
36 | "4 c #F8FBFF", | ||
37 | "5 c #ECE6E2", | ||
38 | "6 c #F7C05D", | ||
39 | "7 c #D2AE82", | ||
40 | "8 c #C2CDE0", | ||
41 | "9 c #AAB8CF", | ||
42 | "0 c #E9EFF8", | ||
43 | "a c #E8C9A0", | ||
44 | "b c #FDEA5A", | ||
45 | "c c #EABA5D", | ||
46 | "d c #CACED8", | ||
47 | "e c #B1BDD3", | ||
48 | "f c #FFFAF3", | ||
49 | "g c #FEE0AF", | ||
50 | "h c #F5D39F", | ||
51 | "i c #F1CA86", | ||
52 | "j c #F7CB5D", | ||
53 | "k c #FFFE4C", | ||
54 | "l c #FAE75A", | ||
55 | "m c #E1AE69", | ||
56 | "n c #CBA57C", | ||
57 | "o c #FFFAF2", | ||
58 | "p c #F9C671", | ||
59 | "q c #FEDF57", | ||
60 | "r c #FFF24A", | ||
61 | "s c #FFF643", | ||
62 | "t c #FFF838", | ||
63 | "u c #FFF83D", | ||
64 | "v c #FEF247", | ||
65 | "w c #FBE248", | ||
66 | "x c #E19226", | ||
67 | "y c #FEFEFF", | ||
68 | "z c #F2F1F0", | ||
69 | "A c #F0C47A", | ||
70 | "B c #FBCF23", | ||
71 | "C c #FFE324", | ||
72 | "D c #FDD426", | ||
73 | "E c #D6932B", | ||
74 | "F c #FDFEFF", | ||
75 | "G c #F1F5FD", | ||
76 | "H c #ECF0F6", | ||
77 | "I c #F3AB31", | ||
78 | "J c #FFCC10", | ||
79 | "K c #FFCB10", | ||
80 | "L c #F6AD11", | ||
81 | "M c #AC8C77", | ||
82 | "N c #FAFCFE", | ||
83 | "O c #EFF4FC", | ||
84 | "P c #ECE9E9", | ||
85 | "Q c #F6A113", | ||
86 | "R c #FDA902", | ||
87 | "S c #F2960B", | ||
88 | "T c #F8A403", | ||
89 | "U c #FAA402", | ||
90 | "V c #B2805C", | ||
91 | "W c #C3CEE0", | ||
92 | "X c #D1D8E3", | ||
93 | "Y c #CAD3E1", | ||
94 | "Z c #D1BEB1", | ||
95 | "` c #EE8208", | ||
96 | " .c #C77D33", | ||
97 | "..c #AF9A8F", | ||
98 | "+.c #B98B69", | ||
99 | "@.c #DA7614", | ||
100 | "#.c #B96730", | ||
101 | "$.c #983C0A", | ||
102 | " . + + @ # $ % ", | ||
103 | " & * * = - ; > , ", | ||
104 | " & * * ' ) ! ~ { ] ", | ||
105 | " & * * * ^ / ( _ : < ", | ||
106 | " & * * * [ } | 1 2 3 ", | ||
107 | " & * * ' 4 5 6 7 8 9 ", | ||
108 | " & * ' [ 0 a b c d e ", | ||
109 | " & f g h i j k l m n ", | ||
110 | " & o p q r s t u v w x ", | ||
111 | " & y z A B C C C D E ", | ||
112 | " & F G H I J K J L M ", | ||
113 | " & N O P Q R S T U V ", | ||
114 | " W X Y Z ` ...+.@.#. ", | ||
115 | " $. "}; | ||
diff --git a/noncore/apps/zsafe/pics/zsafe/pass.xpm b/noncore/apps/zsafe/pics/zsafe/pass.xpm new file mode 100644 index 0000000..512c262 --- a/dev/null +++ b/noncore/apps/zsafe/pics/zsafe/pass.xpm | |||
@@ -0,0 +1,20 @@ | |||
1 | /* XPM */ | ||
2 | static char * pass_xpm[] = { | ||
3 | "16 14 3 1", | ||
4 | " c None", | ||
5 | ".c #000000", | ||
6 | "+c #FFFF00", | ||
7 | " ", | ||
8 | " ", | ||
9 | " ..... . ", | ||
10 | " .+++. .+. ", | ||
11 | " .+++. .+++. ", | ||
12 | " .+++. .+++++. ", | ||
13 | " .+++..+++++++.", | ||
14 | "...+++....+++...", | ||
15 | ".+++++++..+++. ", | ||
16 | " .+++++. .+++. ", | ||
17 | " .+++. .+++. ", | ||
18 | " .+. .+++. ", | ||
19 | " . .+++. ", | ||
20 | " ..... "}; | ||
diff --git a/noncore/apps/zsafe/pics/zsafe/paste.xpm b/noncore/apps/zsafe/pics/zsafe/paste.xpm new file mode 100644 index 0000000..546366f --- a/dev/null +++ b/noncore/apps/zsafe/pics/zsafe/paste.xpm | |||
@@ -0,0 +1,159 @@ | |||
1 | /* XPM */ | ||
2 | static char * paste_xpm[] = { | ||
3 | "14 14 142 2", | ||
4 | " c None", | ||
5 | ". c #96A0AC", | ||
6 | "+ c #9BB0D4", | ||
7 | "@ c #5E7095", | ||
8 | "# c #EFBE61", | ||
9 | "$ c #F2D797", | ||
10 | "% c #EDCF86", | ||
11 | "& c #BAAF8F", | ||
12 | "* c #A7B4C7", | ||
13 | "= c #C9D6EB", | ||
14 | "- c #C0D1EB", | ||
15 | "; c #7E8289", | ||
16 | "> c #C39033", | ||
17 | ", c #D58C1D", | ||
18 | "' c #7E440B", | ||
19 | ") c #F0C470", | ||
20 | "! c #F5F0D4", | ||
21 | "~ c #DDD6B5", | ||
22 | "{ c #8695A8", | ||
23 | "] c #7285A7", | ||
24 | "^ c #7786A1", | ||
25 | "/ c #7A879C", | ||
26 | "( c #69748E", | ||
27 | "_ c #946339", | ||
28 | ": c #F67202", | ||
29 | "< c #A44102", | ||
30 | "[ c #F0C36E", | ||
31 | "} c #F4EBCC", | ||
32 | "| c #ECDCAF", | ||
33 | "1 c #CDC29B", | ||
34 | "2 c #C1B486", | ||
35 | "3 c #C3A86B", | ||
36 | "4 c #B8924A", | ||
37 | "5 c #B17B31", | ||
38 | "6 c #C66C1C", | ||
39 | "7 c #DE6610", | ||
40 | "8 c #944311", | ||
41 | "9 c #F3E7C5", | ||
42 | "0 c #F4E1AA", | ||
43 | "a c #F7DF9B", | ||
44 | "b c #F8D781", | ||
45 | "c c #F7C353", | ||
46 | "d c #CFA555", | ||
47 | "e c #B8B7AC", | ||
48 | "f c #C2B1AA", | ||
49 | "g c #B7AAAC", | ||
50 | "h c #9BA0B2", | ||
51 | "i c #55739A", | ||
52 | "j c #F3E3B5", | ||
53 | "k c #F3D893", | ||
54 | "l c #F3D485", | ||
55 | "m c #F4C663", | ||
56 | "n c #F3AA27", | ||
57 | "o c #BC9656", | ||
58 | "p c #C5E2FF", | ||
59 | "q c #BFDAFB", | ||
60 | "r c #ADCFFC", | ||
61 | "s c #A9CCFD", | ||
62 | "t c #6EABF2", | ||
63 | "u c #2061A8", | ||
64 | "v c #F0C36D", | ||
65 | "w c #F3E2AD", | ||
66 | "x c #F3D890", | ||
67 | "y c #F3CC73", | ||
68 | "z c #F4B63E", | ||
69 | "A c #F3A216", | ||
70 | "B c #BC9859", | ||
71 | "C c #CDE6FE", | ||
72 | "D c #C8DFFB", | ||
73 | "E c #BAD6FB", | ||
74 | "F c #A8CCFB", | ||
75 | "G c #5DA3F8", | ||
76 | "H c #218AF6", | ||
77 | "I c #F3E0AF", | ||
78 | "J c #F3D181", | ||
79 | "K c #F3C056", | ||
80 | "L c #F4B539", | ||
81 | "M c #F2AB22", | ||
82 | "N c #BC9C60", | ||
83 | "O c #CCE5FE", | ||
84 | "P c #C7DEFB", | ||
85 | "Q c #B8D5FB", | ||
86 | "R c #BBD5FD", | ||
87 | "S c #ABCAFE", | ||
88 | "T c #6CB0FF", | ||
89 | "U c #F3DDA7", | ||
90 | "V c #F3C564", | ||
91 | "W c #F3BC4C", | ||
92 | "X c #F4B63C", | ||
93 | "Y c #F3AC26", | ||
94 | "Z c #BC9E63", | ||
95 | "` c #CAE4FF", | ||
96 | " .c #BCD7FB", | ||
97 | "..c #A4C8FB", | ||
98 | "+.c #92BBFB", | ||
99 | "@.c #8EB7FB", | ||
100 | "#.c #72B3FE", | ||
101 | "$.c #F3D99A", | ||
102 | "%.c #F3BD50", | ||
103 | "&.c #F3BA45", | ||
104 | "*.c #F4B53B", | ||
105 | "=.c #F3AC25", | ||
106 | "-.c #BC9D63", | ||
107 | ";.c #CAE5FF", | ||
108 | ">.c #BBD6FB", | ||
109 | ",.c #A1C5FB", | ||
110 | "'.c #99C1FB", | ||
111 | ").c #9CC1FC", | ||
112 | "!.c #7CB9FE", | ||
113 | "~.c #F5C870", | ||
114 | "{.c #F8DC9B", | ||
115 | "].c #F8C65C", | ||
116 | "^.c #F8C252", | ||
117 | "/.c #F8BE49", | ||
118 | "(.c #F7B534", | ||
119 | "_.c #BFA46C", | ||
120 | ":.c #CBE4FF", | ||
121 | "<.c #B7D3FB", | ||
122 | "[.c #A4C6FB", | ||
123 | "}.c #A0C4FB", | ||
124 | "|.c #A2C4FC", | ||
125 | "1.c #80BDFF", | ||
126 | "2.c #B08749", | ||
127 | "3.c #B78958", | ||
128 | "4.c #B48041", | ||
129 | "5.c #B47D3A", | ||
130 | "6.c #B47C36", | ||
131 | "7.c #B3742B", | ||
132 | "8.c #927D68", | ||
133 | "9.c #C4E7FF", | ||
134 | "0.c #C1DEFE", | ||
135 | "a.c #B4D6FE", | ||
136 | "b.c #AED3FE", | ||
137 | "c.c #AED2FE", | ||
138 | "d.c #7DC1FF", | ||
139 | "e.c #303341", | ||
140 | "f.c #3A7CBA", | ||
141 | "g.c #3C78B3", | ||
142 | "h.c #3975B3", | ||
143 | "i.c #3774B3", | ||
144 | "j.c #3674B3", | ||
145 | "k.c #2570B9", | ||
146 | " . + @ ", | ||
147 | "# $ % & * = - ; > , ' ", | ||
148 | ") ! ~ { ] ^ / ( _ : < ", | ||
149 | "[ } | 1 2 3 4 5 6 7 8 ", | ||
150 | "[ 9 0 a b c d e f g h i ", | ||
151 | "[ j k l m n o p q r s t u ", | ||
152 | "v w x y z A B C D E F G H ", | ||
153 | "v I J K L M N O P Q R S T ", | ||
154 | "[ U V W X Y Z ` ...+.@.#. ", | ||
155 | "v $.%.&.*.=.-.;.>.,.'.).!. ", | ||
156 | "~.{.].^./.(._.:.<.[.}.|.1. ", | ||
157 | "2.3.4.5.6.7.8.9.0.a.b.c.d. ", | ||
158 | " e.f.g.h.i.j.k. ", | ||
159 | " "}; | ||
diff --git a/noncore/apps/zsafe/pics/zsafe/quit_icon.xpm b/noncore/apps/zsafe/pics/zsafe/quit_icon.xpm new file mode 100644 index 0000000..5e1b983 --- a/dev/null +++ b/noncore/apps/zsafe/pics/zsafe/quit_icon.xpm | |||
@@ -0,0 +1,120 @@ | |||
1 | /* XPM */ | ||
2 | static char * quit_icon_xpm[] = { | ||
3 | "14 14 103 2", | ||
4 | " c None", | ||
5 | ". c #C50000", | ||
6 | "+ c #C20000", | ||
7 | "@ c #CB0000", | ||
8 | "# c #D51313", | ||
9 | "$ c #E44A4A", | ||
10 | "% c #ED6F6F", | ||
11 | "& c #EC7070", | ||
12 | "* c #E05050", | ||
13 | "= c #C91A1A", | ||
14 | "- c #B30000", | ||
15 | "; c #CD0000", | ||
16 | "> c #E53B3B", | ||
17 | ", c #FBB1B1", | ||
18 | "' c #FFD6D6", | ||
19 | ") c #FFD9D9", | ||
20 | "! c #FFD7D7", | ||
21 | "~ c #FBBCBC", | ||
22 | "{ c #DB4C4C", | ||
23 | "] c #B00000", | ||
24 | "^ c #CA0000", | ||
25 | "/ c #E52F2F", | ||
26 | "( c #FEADAD", | ||
27 | "_ c #FFBDBD", | ||
28 | ": c #FFB3B3", | ||
29 | "< c #FEB1B1", | ||
30 | "[ c #D84343", | ||
31 | "} c #A60000", | ||
32 | "| c #D50808", | ||
33 | "1 c #FB7272", | ||
34 | "2 c #FFBCBC", | ||
35 | "3 c #FFFFFF", | ||
36 | "4 c #FFE7E7", | ||
37 | "5 c #FF9B9B", | ||
38 | "6 c #FFBBBB", | ||
39 | "7 c #FA7171", | ||
40 | "8 c #B90C0C", | ||
41 | "9 c #E41B1B", | ||
42 | "0 c #FF6464", | ||
43 | "a c #FF7474", | ||
44 | "b c #FFE0E0", | ||
45 | "c c #FCC6C6", | ||
46 | "d c #F63535", | ||
47 | "e c #F30E0E", | ||
48 | "f c #D00202", | ||
49 | "g c #EC1C1C", | ||
50 | "h c #FF3F3F", | ||
51 | "i c #FF5252", | ||
52 | "j c #FFD2D2", | ||
53 | "k c #F31C1C", | ||
54 | "l c #F20000", | ||
55 | "m c #DC0000", | ||
56 | "n c #9B0000", | ||
57 | "o c #C10000", | ||
58 | "p c #EC0A0A", | ||
59 | "q c #FF1616", | ||
60 | "r c #FF3131", | ||
61 | "s c #FFCECE", | ||
62 | "t c #F41C1C", | ||
63 | "u c #F40000", | ||
64 | "v c #970000", | ||
65 | "w c #E10000", | ||
66 | "x c #FE0101", | ||
67 | "y c #FE1B1B", | ||
68 | "z c #FFC5C5", | ||
69 | "A c #FFC6C6", | ||
70 | "B c #FDC4C4", | ||
71 | "C c #FA1A1A", | ||
72 | "D c #FA0000", | ||
73 | "E c #CF0000", | ||
74 | "F c #CB0202", | ||
75 | "G c #FC0909", | ||
76 | "H c #FF6D6D", | ||
77 | "I c #FFC8C8", | ||
78 | "J c #FF2525", | ||
79 | "K c #FB0909", | ||
80 | "L c #AE0202", | ||
81 | "M c #B30101", | ||
82 | "N c #DE1313", | ||
83 | "O c #FF2828", | ||
84 | "P c #FF7E7E", | ||
85 | "Q c #FF3A3A", | ||
86 | "R c #FF2323", | ||
87 | "S c #FE2828", | ||
88 | "T c #D01313", | ||
89 | "U c #8E0101", | ||
90 | "V c #B00404", | ||
91 | "W c #DB2121", | ||
92 | "X c #FC3B3B", | ||
93 | "Y c #FF3D3D", | ||
94 | "Z c #FB3B3B", | ||
95 | "` c #D02121", | ||
96 | " .c #930404", | ||
97 | "..c #A50202", | ||
98 | "+.c #BB1616", | ||
99 | "@.c #D73131", | ||
100 | "#.c #E63F3F", | ||
101 | "$.c #E53F3F", | ||
102 | "%.c #D33131", | ||
103 | "&.c #AF1616", | ||
104 | "*.c #8E0202", | ||
105 | "=.c #9B0505", | ||
106 | "-.c #970505", | ||
107 | " . + ", | ||
108 | " @ # $ % & * = - ", | ||
109 | " ; > , ' ) ) ! ~ { ] ", | ||
110 | " ^ / ( ' _ : : _ ' < [ } ", | ||
111 | " | 1 2 3 4 5 5 4 3 6 7 8 ", | ||
112 | " 9 0 a ) 3 b b 3 c d e f ", | ||
113 | ". g h h i j 3 3 c k l l m n ", | ||
114 | "o p q q r s 3 3 c t u u m v ", | ||
115 | " w x y z 3 A A 3 B C D E ", | ||
116 | " F G H 3 I J J I 3 H K L ", | ||
117 | " M N O P Q R R Q P S T U ", | ||
118 | " V W X Y Y Y Y Z ` . ", | ||
119 | " ..+.@.#.$.%.&.*. ", | ||
120 | " =.-. "}; | ||
diff --git a/noncore/apps/zsafe/pics/zsafe/save.xpm b/noncore/apps/zsafe/pics/zsafe/save.xpm new file mode 100644 index 0000000..f7e5cf3 --- a/dev/null +++ b/noncore/apps/zsafe/pics/zsafe/save.xpm | |||
@@ -0,0 +1,117 @@ | |||
1 | /* XPM */ | ||
2 | static char * save_xpm[] = { | ||
3 | "14 14 100 2", | ||
4 | " c None", | ||
5 | ". c #788F79", | ||
6 | "+ c #36B43E", | ||
7 | "@ c #52A357", | ||
8 | "# c #5E5E5E", | ||
9 | "$ c #949494", | ||
10 | "% c #9D9E9D", | ||
11 | "& c #E9F8E9", | ||
12 | "* c #E6F4E6", | ||
13 | "= c #E6F5E6", | ||
14 | "- c #E5F4E5", | ||
15 | "; c #E4F3E4", | ||
16 | "> c #C3CBC3", | ||
17 | ", c #595959", | ||
18 | "' c #8F8F8F", | ||
19 | ") c #999999", | ||
20 | "! c #FAFAFA", | ||
21 | "~ c #F6F6F6", | ||
22 | "{ c #F5F5F5", | ||
23 | "] c #F4F4F4", | ||
24 | "^ c #F2F2F2", | ||
25 | "/ c #EEEEEE", | ||
26 | "( c #EAEAEA", | ||
27 | "_ c #BEBEBE", | ||
28 | ": c #575757", | ||
29 | "< c #8E8E8E", | ||
30 | "[ c #9B9B9B", | ||
31 | "} c #F8F8F8", | ||
32 | "| c #F3F3F3", | ||
33 | "1 c #F1F1F1", | ||
34 | "2 c #EBEBEB", | ||
35 | "3 c #E5E5E5", | ||
36 | "4 c #DFDFDF", | ||
37 | "5 c #DBDBDB", | ||
38 | "6 c #AEAEAE", | ||
39 | "7 c #4D4D4D", | ||
40 | "8 c #9D9D9D", | ||
41 | "9 c #E7E7E7", | ||
42 | "0 c #E1E1E1", | ||
43 | "a c #DADADA", | ||
44 | "b c #D4D4D4", | ||
45 | "c c #CECECE", | ||
46 | "d c #C9C9C9", | ||
47 | "e c #484848", | ||
48 | "f c #909090", | ||
49 | "g c #8C8C8C", | ||
50 | "h c #C4C4C4", | ||
51 | "i c #BDBDBD", | ||
52 | "j c #B5B5B5", | ||
53 | "k c #AFAFAF", | ||
54 | "l c #AAAAAA", | ||
55 | "m c #A4A4A4", | ||
56 | "n c #9C9C9C", | ||
57 | "o c #797979", | ||
58 | "p c #444444", | ||
59 | "q c #7D7D7D", | ||
60 | "r c #767676", | ||
61 | "s c #6E6E6E", | ||
62 | "t c #656565", | ||
63 | "u c #5D5D5D", | ||
64 | "v c #5C5C5C", | ||
65 | "w c #585858", | ||
66 | "x c #515151", | ||
67 | "y c #3B3B3B", | ||
68 | "z c #888888", | ||
69 | "A c #737373", | ||
70 | "B c #C2C2C2", | ||
71 | "C c #C7C7C7", | ||
72 | "D c #ABABAB", | ||
73 | "E c #606060", | ||
74 | "F c #353535", | ||
75 | "G c #828282", | ||
76 | "H c #6D6D6D", | ||
77 | "I c #D9D9D9", | ||
78 | "J c #A9A9A9", | ||
79 | "K c #BFBFBF", | ||
80 | "L c #B3B3B3", | ||
81 | "M c #424242", | ||
82 | "N c #313131", | ||
83 | "O c #7E7E7E", | ||
84 | "P c #6B6B6B", | ||
85 | "Q c #747474", | ||
86 | "R c #979797", | ||
87 | "S c #A0A0A0", | ||
88 | "T c #9E9E9E", | ||
89 | "U c #A2A2A2", | ||
90 | "V c #404040", | ||
91 | "W c #2F2F2F", | ||
92 | "X c #636363", | ||
93 | "Y c #B0B0B0", | ||
94 | "Z c #929292", | ||
95 | "` c #B8B8B8", | ||
96 | " .c #3C3C3C", | ||
97 | "..c #252525", | ||
98 | "+.c #191919", | ||
99 | "@.c #1F1F1F", | ||
100 | "#.c #292929", | ||
101 | "$.c #282828", | ||
102 | "%.c #1A1A1A", | ||
103 | "&.c #101010", | ||
104 | " ", | ||
105 | " . + + + + + + + @ # ", | ||
106 | " $ % & * = = = - ; > , ", | ||
107 | " ' ) ! ~ { ] ^ / ( _ : ", | ||
108 | " < [ } | 1 2 3 4 5 6 7 ", | ||
109 | " ' 8 ^ 9 0 a b c d [ e ", | ||
110 | " f g h i j k l m n o p ", | ||
111 | " ' q r s t u v v w x y ", | ||
112 | " z A h B C C B D E e F ", | ||
113 | " G H I o J K L 8 : M N ", | ||
114 | " O P C Q R S T U : V W ", | ||
115 | " X Y Z < [ J ` , ... ", | ||
116 | " +.@.#.#.#.#.$.%.&. ", | ||
117 | " "}; | ||
diff --git a/noncore/apps/zsafe/pics/zsafe/trash.xpm b/noncore/apps/zsafe/pics/zsafe/trash.xpm new file mode 100644 index 0000000..df85d02 --- a/dev/null +++ b/noncore/apps/zsafe/pics/zsafe/trash.xpm | |||
@@ -0,0 +1,127 @@ | |||
1 | /* XPM */ | ||
2 | static char * trash_xpm[] = { | ||
3 | "14 14 110 2", | ||
4 | " c None", | ||
5 | ". c #BEBEBD", | ||
6 | "+ c #B2B2B2", | ||
7 | "@ c #A5A5A6", | ||
8 | "# c #979797", | ||
9 | "$ c #8B8B8C", | ||
10 | "% c #DCDDDD", | ||
11 | "& c #D4D4D4", | ||
12 | "* c #C2C3C3", | ||
13 | "= c #B4B5B4", | ||
14 | "- c #A5A5A5", | ||
15 | "; c #969698", | ||
16 | "> c #8C8C8D", | ||
17 | ", c #7D7E7E", | ||
18 | "' c #717071", | ||
19 | ") c #C8C8C8", | ||
20 | "! c #EAEAEA", | ||
21 | "~ c #C3C4C3", | ||
22 | "{ c #B9BABA", | ||
23 | "] c #AFAFB0", | ||
24 | "^ c #A2A2A2", | ||
25 | "/ c #959495", | ||
26 | "( c #8C8C8C", | ||
27 | "_ c #7B7C7C", | ||
28 | ": c #676767", | ||
29 | "< c #535353", | ||
30 | "[ c #ABACAC", | ||
31 | "} c #DBDBDA", | ||
32 | "| c #D1D1D1", | ||
33 | "1 c #C5C5C5", | ||
34 | "2 c #B5B5B5", | ||
35 | "3 c #A3A3A4", | ||
36 | "4 c #9A999A", | ||
37 | "5 c #848484", | ||
38 | "6 c #626262", | ||
39 | "7 c #474747", | ||
40 | "8 c #A4A5A5", | ||
41 | "9 c #C2C2C2", | ||
42 | "0 c #C6C6C5", | ||
43 | "a c #BBBBBB", | ||
44 | "b c #AEAEAE", | ||
45 | "c c #9D9D9D", | ||
46 | "d c #939393", | ||
47 | "e c #7B7B7C", | ||
48 | "f c #595959", | ||
49 | "g c #494949", | ||
50 | "h c #A1A1A1", | ||
51 | "i c #B6B6B6", | ||
52 | "j c #A9AAA9", | ||
53 | "k c #9B9B9B", | ||
54 | "l c #7F7F7F", | ||
55 | "m c #686868", | ||
56 | "n c #4E4E4E", | ||
57 | "o c #4B4A4B", | ||
58 | "p c #BEBEBE", | ||
59 | "q c #EDEDED", | ||
60 | "r c #CFCFCF", | ||
61 | "s c #ABABAB", | ||
62 | "t c #A0A0A0", | ||
63 | "u c #939394", | ||
64 | "v c #888889", | ||
65 | "w c #696969", | ||
66 | "x c #4D4D4D", | ||
67 | "y c #484848", | ||
68 | "z c #C0C0C0", | ||
69 | "A c #ECECEC", | ||
70 | "B c #CDCDCD", | ||
71 | "C c #AAAAAA", | ||
72 | "D c #9F9F9F", | ||
73 | "E c #929393", | ||
74 | "F c #8A8A8A", | ||
75 | "G c #7A7A7A", | ||
76 | "H c #5E5E5E", | ||
77 | "I c #BCBCBC", | ||
78 | "J c #E0E0E0", | ||
79 | "K c #C6C6C6", | ||
80 | "L c #A9A9A9", | ||
81 | "M c #9E9E9D", | ||
82 | "N c #909190", | ||
83 | "O c #868687", | ||
84 | "P c #757575", | ||
85 | "Q c #5C5C5C", | ||
86 | "R c #B9B9B9", | ||
87 | "S c #A8A8A8", | ||
88 | "T c #8F8F8E", | ||
89 | "U c #707070", | ||
90 | "V c #575757", | ||
91 | "W c #C9C9C9", | ||
92 | "X c #BABABA", | ||
93 | "Y c #A7A8A8", | ||
94 | "Z c #9C9C9C", | ||
95 | "` c #8E8D8C", | ||
96 | " .c #828281", | ||
97 | "..c #6C6C6C", | ||
98 | "+.c #525252", | ||
99 | "@.c #3C3C3C", | ||
100 | "#.c #BBBABB", | ||
101 | "$.c #A7A7A7", | ||
102 | "%.c #9A9A9A", | ||
103 | "&.c #8B8B8B", | ||
104 | "*.c #7E7E7E", | ||
105 | "=.c #4C4C4C", | ||
106 | "-.c #302F2F", | ||
107 | ";.c #ACACAC", | ||
108 | ">.c #A3A3A3", | ||
109 | ",.c #979798", | ||
110 | "'.c #868686", | ||
111 | ").c #777777", | ||
112 | "!.c #3E3E3E", | ||
113 | "~.c #212121", | ||
114 | " . + @ # $ ", | ||
115 | " % & * = - ; > , ' ", | ||
116 | ") ! ~ { ] ^ / ( _ : < ", | ||
117 | "[ } | | 1 2 3 4 5 6 7 ", | ||
118 | "8 9 1 0 a b c d e f g ", | ||
119 | " h i 2 j k $ l m n o ", | ||
120 | " p q r s t u v w x y ", | ||
121 | " z A B C D E F G H g ", | ||
122 | " I J K L M N O P Q n ", | ||
123 | " R & z S c T 5 U V g ", | ||
124 | " i W X Y Z ` ...+.@. ", | ||
125 | " + #.+ $.%.&.*.: =.-. ", | ||
126 | " ;.$.L >.,.'.).f !.~. ", | ||
127 | " "}; | ||
diff --git a/noncore/apps/zsafe/pics/zsafe/zsafe.xpm b/noncore/apps/zsafe/pics/zsafe/zsafe.xpm new file mode 100644 index 0000000..75a2551 --- a/dev/null +++ b/noncore/apps/zsafe/pics/zsafe/zsafe.xpm | |||
@@ -0,0 +1,306 @@ | |||
1 | /* XPM */ | ||
2 | static char * zsafe_xpm[] = { | ||
3 | "32 32 271 2", | ||
4 | " c None", | ||
5 | ". c #8E8EA9", | ||
6 | "+ c #8F8FA9", | ||
7 | "@ c #8C8CA7", | ||
8 | "# c #8B8BA6", | ||
9 | "$ c #AEAEC1", | ||
10 | "% c #CACAD6", | ||
11 | "& c #DEDEE5", | ||
12 | "* c #DBDBE2", | ||
13 | "= c #CDCDD7", | ||
14 | "- c #A9A9BC", | ||
15 | "; c #8D8DA8", | ||
16 | "> c #83839C", | ||
17 | ", c #8686A2", | ||
18 | "' c #A4A4B9", | ||
19 | ") c #EEEEF1", | ||
20 | "! c #FEFEFE", | ||
21 | "~ c #FFFFFF", | ||
22 | "{ c #FDFDFD", | ||
23 | "] c #E4E4E8", | ||
24 | "^ c #9F9FB4", | ||
25 | "/ c #82829D", | ||
26 | "( c #80809D", | ||
27 | "_ c #B0B0C2", | ||
28 | ": c #FBFBFB", | ||
29 | "< c #F3F3F3", | ||
30 | "[ c #EDEDED", | ||
31 | "} c #EBEBEB", | ||
32 | "| c #ECECEC", | ||
33 | "1 c #F6F6F6", | ||
34 | "2 c #FAFAFA", | ||
35 | "3 c #A9A9BB", | ||
36 | "4 c #7B7B97", | ||
37 | "5 c #7A7A98", | ||
38 | "6 c #9B9BB1", | ||
39 | "7 c #F2F2F2", | ||
40 | "8 c #D3D3D9", | ||
41 | "9 c #B6B6C4", | ||
42 | "0 c #AEAEBD", | ||
43 | "a c #CACAD0", | ||
44 | "b c #D9D9D9", | ||
45 | "c c #E5E5E5", | ||
46 | "d c #FCFCFC", | ||
47 | "e c #9898AC", | ||
48 | "f c #6B6B85", | ||
49 | "g c #777795", | ||
50 | "h c #ECECEF", | ||
51 | "i c #F0F0F0", | ||
52 | "j c #E3E3E5", | ||
53 | "k c #9292A9", | ||
54 | "l c #757592", | ||
55 | "m c #666680", | ||
56 | "n c #676780", | ||
57 | "o c #72728F", | ||
58 | "p c #8888A1", | ||
59 | "q c #C0C0C5", | ||
60 | "r c #DADADA", | ||
61 | "s c #E5E5E6", | ||
62 | "t c #7B7B98", | ||
63 | "u c #6F6F8E", | ||
64 | "v c #A3A3B6", | ||
65 | "w c #F4F4F4", | ||
66 | "x c #E9E9E9", | ||
67 | "y c #8787A0", | ||
68 | "z c #60607B", | ||
69 | "A c #5E5E78", | ||
70 | "B c #767693", | ||
71 | "C c #C3C3C5", | ||
72 | "D c #E2E2E2", | ||
73 | "E c #9696AA", | ||
74 | "F c #6A6A89", | ||
75 | "G c #E8E8E8", | ||
76 | "H c #B7B7C3", | ||
77 | "I c #656583", | ||
78 | "J c #636380", | ||
79 | "K c #8C8CA0", | ||
80 | "L c #C4C4C4", | ||
81 | "M c #BFBFC9", | ||
82 | "N c #626280", | ||
83 | "O c #666686", | ||
84 | "P c #EFEFF1", | ||
85 | "Q c #F5F5F5", | ||
86 | "R c #E3E3E3", | ||
87 | "S c #85859D", | ||
88 | "T c #46465C", | ||
89 | "U c #6B6B8A", | ||
90 | "V c #BCBCBC", | ||
91 | "W c #EEEEEE", | ||
92 | "X c #DFDFE1", | ||
93 | "Y c #606082", | ||
94 | "Z c #F8F8F8", | ||
95 | "` c #DEDEDE", | ||
96 | " .c #7F7F98", | ||
97 | "..c #B7B7B7", | ||
98 | "+.c #5B5B7D", | ||
99 | "@.c #EAEAEA", | ||
100 | "#.c #7A7A93", | ||
101 | "$.c #B6B6B6", | ||
102 | "%.c #D7D7D7", | ||
103 | "&.c #E7E7E7", | ||
104 | "*.c #555578", | ||
105 | "=.c #D5D5D5", | ||
106 | "-.c #75758F", | ||
107 | ";.c #D3D3D3", | ||
108 | ">.c #E1E1E1", | ||
109 | ",.c #545477", | ||
110 | "'.c #E4E4E4", | ||
111 | ").c #DDDDDD", | ||
112 | "!.c #D0D0D0", | ||
113 | "~.c #73738D", | ||
114 | "{.c #CFCFCF", | ||
115 | "].c #DBDBDB", | ||
116 | "^.c #D7922A", | ||
117 | "/.c #977451", | ||
118 | "(.c #DCB985", | ||
119 | "_.c #D9B682", | ||
120 | ":.c #D3B07C", | ||
121 | "<.c #A6835B", | ||
122 | "[.c #A67632", | ||
123 | "}.c #C08326", | ||
124 | "|.c #CF8C29", | ||
125 | "1.c #D18E29", | ||
126 | "2.c #C8A571", | ||
127 | "3.c #D3B07B", | ||
128 | "4.c #D8B581", | ||
129 | "5.c #B17823", | ||
130 | "6.c #CB892A", | ||
131 | "7.c #D08C2A", | ||
132 | "8.c #DDAA48", | ||
133 | "9.c #EAC766", | ||
134 | "0.c #BD7F27", | ||
135 | "a.c #C1802A", | ||
136 | "b.c #E5C76C", | ||
137 | "c.c #FFFD99", | ||
138 | "d.c #FFFC75", | ||
139 | "e.c #FFFC6F", | ||
140 | "f.c #E5C760", | ||
141 | "g.c #B27529", | ||
142 | "h.c #ECD880", | ||
143 | "i.c #FFF242", | ||
144 | "j.c #FFF23C", | ||
145 | "k.c #FFE635", | ||
146 | "l.c #ECA41E", | ||
147 | "m.c #A46928", | ||
148 | "n.c #E8CF65", | ||
149 | "o.c #FFEA37", | ||
150 | "p.c #FFB81C", | ||
151 | "q.c #E89A1A", | ||
152 | "r.c #955E28", | ||
153 | "s.c #E5C863", | ||
154 | "t.c #FFE233", | ||
155 | "u.c #FFDF31", | ||
156 | "v.c #FFB51B", | ||
157 | "w.c #FFA814", | ||
158 | "x.c #E59418", | ||
159 | "y.c #875327", | ||
160 | "z.c #E1C161", | ||
161 | "A.c #FFDA2E", | ||
162 | "B.c #FFD42B", | ||
163 | "C.c #FFB319", | ||
164 | "D.c #FFA713", | ||
165 | "E.c #FFA412", | ||
166 | "F.c #E18E16", | ||
167 | "G.c #784726", | ||
168 | "H.c #DDBA5E", | ||
169 | "I.c #FFD12A", | ||
170 | "J.c #FFC523", | ||
171 | "K.c #FFAB15", | ||
172 | "L.c #FFA613", | ||
173 | "M.c #FFA311", | ||
174 | "N.c #FFA110", | ||
175 | "O.c #DD8814", | ||
176 | "P.c #744426", | ||
177 | "Q.c #DCB65C", | ||
178 | "R.c #FFC926", | ||
179 | "S.c #FFC624", | ||
180 | "T.c #FFB41A", | ||
181 | "U.c #FFA512", | ||
182 | "V.c #FFA211", | ||
183 | "W.c #FF9F0F", | ||
184 | "X.c #FF9D0E", | ||
185 | "Y.c #DC8513", | ||
186 | "Z.c #DCB15A", | ||
187 | "`.c #FFC121", | ||
188 | " +c #FFBF20", | ||
189 | ".+c #FFBE1F", | ||
190 | "++c #FFBD1F", | ||
191 | "@+c #FFB91D", | ||
192 | "#+c #FFA914", | ||
193 | "$+c #FF9E0E", | ||
194 | "%+c #FF9C0D", | ||
195 | "&+c #FF990C", | ||
196 | "*+c #DC8211", | ||
197 | "=+c #DCAD58", | ||
198 | "-+c #FFB81D", | ||
199 | ";+c #FFBC1F", | ||
200 | ">+c #FFBC1E", | ||
201 | ",+c #FFBA1D", | ||
202 | "'+c #FFB71C", | ||
203 | ")+c #FFB51A", | ||
204 | "!+c #FFB219", | ||
205 | "~+c #FFAF18", | ||
206 | "{+c #FFAD16", | ||
207 | "]+c #FFAA15", | ||
208 | "^+c #FFA813", | ||
209 | "/+c #FFA00F", | ||
210 | "(+c #FF9A0C", | ||
211 | "_+c #FF980B", | ||
212 | ":+c #FF950A", | ||
213 | "<+c #DC7F10", | ||
214 | "[+c #DCA955", | ||
215 | "}+c #FFB118", | ||
216 | "|+c #FFBB1E", | ||
217 | "1+c #FFB61B", | ||
218 | "2+c #FFB31A", | ||
219 | "3+c #FFAE17", | ||
220 | "4+c #FFAC16", | ||
221 | "5+c #FFA411", | ||
222 | "6+c #FF970A", | ||
223 | "7+c #FF9409", | ||
224 | "8+c #FF9108", | ||
225 | "9+c #DC7C0E", | ||
226 | "0+c #DCA553", | ||
227 | "a+c #FFB018", | ||
228 | "b+c #FF9B0D", | ||
229 | "c+c #FF9308", | ||
230 | "d+c #FF9007", | ||
231 | "e+c #FF8D06", | ||
232 | "f+c #DC790D", | ||
233 | "g+c #DCAC57", | ||
234 | "h+c #FFB119", | ||
235 | "i+c #FF970B", | ||
236 | "j+c #FF9208", | ||
237 | "k+c #FF8F06", | ||
238 | "l+c #FF8C05", | ||
239 | "m+c #FF8A04", | ||
240 | "n+c #DC760B", | ||
241 | "o+c #C29759", | ||
242 | "p+c #FFBE31", | ||
243 | "q+c #FF960A", | ||
244 | "r+c #FF9309", | ||
245 | "s+c #FF8E06", | ||
246 | "t+c #FF8B04", | ||
247 | "u+c #FF8803", | ||
248 | "v+c #FF8602", | ||
249 | "w+c #C26912", | ||
250 | "x+c #714225", | ||
251 | "y+c #9F713F", | ||
252 | "z+c #BA7E27", | ||
253 | "A+c #BA7A1F", | ||
254 | "B+c #BA781E", | ||
255 | "C+c #BA771D", | ||
256 | "D+c #BA761D", | ||
257 | "E+c #BA741C", | ||
258 | "F+c #BA731B", | ||
259 | "G+c #BA721B", | ||
260 | "H+c #BA711A", | ||
261 | "I+c #BA6F19", | ||
262 | "J+c #BA6E19", | ||
263 | "K+c #BA6D18", | ||
264 | "L+c #BA6B17", | ||
265 | "M+c #BA6A16", | ||
266 | "N+c #BA6916", | ||
267 | "O+c #BA6715", | ||
268 | "P+c #BA6614", | ||
269 | "Q+c #BA6514", | ||
270 | "R+c #9F581A", | ||
271 | "S+c #6A3E23", | ||
272 | "T+c #653B21", | ||
273 | "U+c #6B3F23", | ||
274 | "V+c #5B351E", | ||
275 | " ", | ||
276 | " . + . @ ", | ||
277 | " # @ $ % & * = - ; > ", | ||
278 | " , ' ) ! ~ ~ ~ ~ { ] ^ / ", | ||
279 | " ( _ ! ~ : < [ } | 1 ~ 2 3 4 ", | ||
280 | " 5 6 ! ! 7 } 8 9 0 a b c d d e f ", | ||
281 | " g h ! i j k l m n o p q r ~ s t ", | ||
282 | " u v ~ w x y z A B C D ~ E z ", | ||
283 | " F = ! G H I J K L ~ M N ", | ||
284 | " O P Q R S T U V W X O ", | ||
285 | " Y Z i ` . Y ..r | Y ", | ||
286 | " +.7 @.r #. +.$.%.&.+. ", | ||
287 | " *.} R =.-. *.$.;.>.*. ", | ||
288 | " ,.'.).!.~. ,.$.{.].,. ", | ||
289 | " ^./.(._.:.<.[.}.|.1.1.1.1.1./.2.3.4./.5. ", | ||
290 | " 6.7.8.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.8.7.0. ", | ||
291 | " a.b.c.d.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.f.a. ", | ||
292 | " g.h.i.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.k.l.g. ", | ||
293 | " m.n.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.k.p.q.m. ", | ||
294 | " r.s.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.u.v.w.x.r. ", | ||
295 | " y.z.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.B.C.D.E.F.y. ", | ||
296 | " G.H.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.J.K.L.M.N.O.G. ", | ||
297 | " P.Q.R.R.R.R.R.R.R.R.R.R.R.R.R.S.T.D.U.V.W.X.Y.P. ", | ||
298 | " P.Z.`.`.`.`.`.`. + +.+++++@+T.#+L.M.N.$+%+&+*+P. ", | ||
299 | " P.=+-+-+;+++>+,+'+)+!+~+{+]+^+U.V./+X.(+_+:+<+P. ", | ||
300 | " P.[+}+++.+|+@+1+2+}+3+4+#+L.5+N.W.%+&+6+7+8+9+P. ", | ||
301 | " P.0+|+++,+p.v.!+a+{+]+w.U.M./+X.b+_+:+c+d+e+f+P. ", | ||
302 | " P.g+>+@+1+T.h+3+4+#+D.E.N.W.%+&+i+7+j+k+l+m+n+P. ", | ||
303 | " P.o+p+v.!+a+{+K.w.U.M./+$+b+_+q+r+d+s+t+u+v+w+P. ", | ||
304 | " x+P.y+z+A+B+C+D+E+F+G+H+I+J+K+L+M+N+O+P+Q+R+P.S+ ", | ||
305 | " T+U+S+S+S+S+S+S+S+S+S+S+S+S+S+S+S+S+S+S+S+V+ ", | ||
306 | " "}; | ||
diff --git a/noncore/apps/zsafe/qsettings.cpp b/noncore/apps/zsafe/qsettings.cpp new file mode 100755 index 0000000..62a9947 --- a/dev/null +++ b/noncore/apps/zsafe/qsettings.cpp | |||
@@ -0,0 +1,153 @@ | |||
1 | /* | ||
2 | ** $Id$ | ||
3 | */ | ||
4 | |||
5 | #include "qsettings.h" | ||
6 | #include <qstringlist.h> | ||
7 | #include <stdio.h> | ||
8 | #include <qfile.h> | ||
9 | #include <qtextstream.h> | ||
10 | |||
11 | |||
12 | QSettings::QSettings(const QString &_fn) | ||
13 | { | ||
14 | // read the prefs from the file | ||
15 | fn = _fn; | ||
16 | |||
17 | QFile f(_fn); | ||
18 | if ( f.open(IO_ReadOnly) ) { // file opened successfully | ||
19 | QTextStream t( &f ); // use a text stream | ||
20 | QString s; | ||
21 | while ( !t.eof() ) { // until end of file... | ||
22 | s = t.readLine(); // line of text excluding '\n' | ||
23 | char buf[256]; | ||
24 | sprintf (buf, "%s", (const char *) s); | ||
25 | int pos = s.find (" = "); | ||
26 | QString key = s.left (pos); | ||
27 | QString val = s.right (s.length() - pos - 3); | ||
28 | writeEntry (key, val); | ||
29 | |||
30 | sprintf (buf, "%s|%s", (const char *)key, (const char *)val); | ||
31 | } | ||
32 | f.close(); | ||
33 | } | ||
34 | |||
35 | |||
36 | } | ||
37 | |||
38 | QSettings::~QSettings() | ||
39 | { | ||
40 | // write out the prefs to the file | ||
41 | QAsciiDictIterator <QString> it( prefs ); // iterator for dict | ||
42 | QFile f(fn); | ||
43 | f.open(IO_WriteOnly); | ||
44 | QTextStream ts( &f ); | ||
45 | |||
46 | while ( it.current() ) | ||
47 | { | ||
48 | QString *key = new QString(it.currentKey()); | ||
49 | char buf[256]; | ||
50 | sprintf (buf, "%s", (const char *) *( it.current())); | ||
51 | QString *val = new QString(buf); | ||
52 | sprintf (buf, "%s %s", (const char *)*key, (const char *)*val); | ||
53 | ts << *key << " = " << *val << endl; | ||
54 | ++it; | ||
55 | } | ||
56 | |||
57 | f.close(); | ||
58 | prefs.clear(); | ||
59 | } | ||
60 | |||
61 | void QSettings::insertSearchPath (System sys, const QString &str) | ||
62 | { | ||
63 | fn = str; | ||
64 | } | ||
65 | |||
66 | QString QSettings::readEntry (const QString &key, const QString &def) | ||
67 | { | ||
68 | |||
69 | QString *s = prefs.find((const char *)key); | ||
70 | if (!s) | ||
71 | return def; | ||
72 | else | ||
73 | return *s; | ||
74 | |||
75 | } | ||
76 | |||
77 | int QSettings::readNumEntry (const QString &key, int def) | ||
78 | { | ||
79 | QString *s = prefs[key]; | ||
80 | if (!s) return def; | ||
81 | return s->toInt(); | ||
82 | } | ||
83 | |||
84 | bool QSettings::readBoolEntry (const QString &key, bool def) | ||
85 | { | ||
86 | QString *s = prefs[key]; | ||
87 | if (!s) return def; | ||
88 | if (*s == "1") | ||
89 | return true; | ||
90 | else | ||
91 | return false; | ||
92 | } | ||
93 | |||
94 | bool QSettings::writeEntry (const QString &key, int val) | ||
95 | { | ||
96 | char buf[64]; | ||
97 | sprintf (buf, "%d", val); | ||
98 | QString *v = new QString(buf); | ||
99 | prefs.replace ((const char *)key, v); | ||
100 | return true; | ||
101 | } | ||
102 | |||
103 | bool QSettings::writeEntry (const QString &key, bool val) | ||
104 | { | ||
105 | QString *v; | ||
106 | if (val) | ||
107 | v = new QString("1"); | ||
108 | else | ||
109 | v = new QString("0"); | ||
110 | prefs.replace ((const char *)key, v); | ||
111 | return true; | ||
112 | } | ||
113 | |||
114 | bool QSettings::writeEntry (const QString &key, const QString &val) | ||
115 | { | ||
116 | QString *v = new QString (val); | ||
117 | prefs.replace ((const char *)key, v); | ||
118 | return true; | ||
119 | } | ||
120 | |||
121 | bool QSettings::writeEntry (const QString &key, const char *val) | ||
122 | { | ||
123 | QString *v = new QString (val); | ||
124 | prefs.replace ((const char *)key, v); | ||
125 | return true; | ||
126 | } | ||
127 | |||
128 | bool QSettings::removeEntry (const QString &key) | ||
129 | { | ||
130 | prefs.remove (key); | ||
131 | return true; | ||
132 | } | ||
133 | |||
134 | QStringList QSettings::entryList (const QString &key) const | ||
135 | { | ||
136 | QAsciiDictIterator <QString> it( prefs ); // iterator for dict | ||
137 | QStringList list; | ||
138 | |||
139 | while ( it.current() ) | ||
140 | { | ||
141 | char buf[512]; | ||
142 | sprintf (buf, "%s", (const char *) *( it.current())); | ||
143 | QString *val = new QString(buf); | ||
144 | sprintf(buf, "%s -> %s\n", it.currentKey(), (const char *)*val ); | ||
145 | QString *cat = new QString(it.currentKey()); | ||
146 | if (cat->contains("-field", FALSE)) | ||
147 | list.append (it.currentKey()); | ||
148 | ++it; | ||
149 | |||
150 | } | ||
151 | return list; | ||
152 | } | ||
153 | |||
diff --git a/noncore/apps/zsafe/qsettings.h b/noncore/apps/zsafe/qsettings.h new file mode 100755 index 0000000..b11b533 --- a/dev/null +++ b/noncore/apps/zsafe/qsettings.h | |||
@@ -0,0 +1,56 @@ | |||
1 | /* | ||
2 | ** $Id$ | ||
3 | */ | ||
4 | |||
5 | #ifndef _QSETTINGS_H_ | ||
6 | #define _QSETTINGS_H_ | ||
7 | |||
8 | #include <qstring.h> | ||
9 | #include <qstringlist.h> | ||
10 | #include <qasciidict.h> | ||
11 | |||
12 | // class to hold one category item | ||
13 | |||
14 | class QSettings | ||
15 | { | ||
16 | public: | ||
17 | enum Format { | ||
18 | Native = 0, | ||
19 | Ini | ||
20 | }; | ||
21 | enum System { | ||
22 | Unix = 0, | ||
23 | Windows, | ||
24 | Mac | ||
25 | }; | ||
26 | enum Scope { | ||
27 | User, | ||
28 | Global | ||
29 | }; | ||
30 | |||
31 | QSettings(const QString &); | ||
32 | ~QSettings(); | ||
33 | |||
34 | void insertSearchPath (System, const QString &); | ||
35 | |||
36 | QString readEntry (const QString &, const QString &def = QString::null); | ||
37 | int readNumEntry (const QString &, int def = 0); | ||
38 | bool readBoolEntry (const QString &, bool def = 0); | ||
39 | |||
40 | bool writeEntry (const QString &, int); | ||
41 | bool writeEntry (const QString &, bool); | ||
42 | bool writeEntry (const QString &, const QString &); | ||
43 | bool writeEntry (const QString &, const char *); | ||
44 | |||
45 | bool removeEntry (const QString &); | ||
46 | |||
47 | QStringList entryList (const QString &) const; | ||
48 | |||
49 | protected: | ||
50 | |||
51 | private: | ||
52 | QAsciiDict <QString> prefs; // key, value dictonary | ||
53 | QString fn; // preference filename | ||
54 | |||
55 | }; | ||
56 | #endif // _QSETTINGS_H_ | ||
diff --git a/noncore/apps/zsafe/scqtfiledlg.cpp b/noncore/apps/zsafe/scqtfiledlg.cpp new file mode 100644 index 0000000..d6cea64 --- a/dev/null +++ b/noncore/apps/zsafe/scqtfiledlg.cpp | |||
@@ -0,0 +1,261 @@ | |||
1 | /**************************************************************************** | ||
2 | ** Form implementation generated from reading ui file 'scqtfiledlg.ui' | ||
3 | ** | ||
4 | ** Created: Sun Jun 8 15:51:12 2003 | ||
5 | ** by: The User Interface Compiler (uic) | ||
6 | ** | ||
7 | ** WARNING! All changes made in this file will be lost! | ||
8 | ****************************************************************************/ | ||
9 | #include "scqtfiledlg.h" | ||
10 | |||
11 | #include <qcombobox.h> | ||
12 | #include <qheader.h> | ||
13 | #include <qlineedit.h> | ||
14 | #include <qlistview.h> | ||
15 | #include <qpushbutton.h> | ||
16 | #include <qtoolbutton.h> | ||
17 | #include <qlayout.h> | ||
18 | #include <qvariant.h> | ||
19 | #include <qtooltip.h> | ||
20 | #include <qwhatsthis.h> | ||
21 | #include <qimage.h> | ||
22 | #include <qpixmap.h> | ||
23 | |||
24 | static const char* const image0_data[] = { | ||
25 | "24 16 3 1", | ||
26 | ". c None", | ||
27 | "# c #000040", | ||
28 | "a c #808080", | ||
29 | "........................", | ||
30 | "........................", | ||
31 | ".................####...", | ||
32 | ".................####...", | ||
33 | ".......##........#aa#...", | ||
34 | "......###........#aa#...", | ||
35 | ".....####........#aa#...", | ||
36 | "....##############aa#...", | ||
37 | "...###aaaaaaaaaaaaaa#...", | ||
38 | "..####aaaaaaaaaaaaaa#...", | ||
39 | "...###aaaaaaaaaaaaaa#...", | ||
40 | "....#################...", | ||
41 | ".....####...............", | ||
42 | "......###...............", | ||
43 | ".......##...............", | ||
44 | "........................"}; | ||
45 | |||
46 | static const char* const image1_data[] = { | ||
47 | "24 16 4 1", | ||
48 | ". c None", | ||
49 | "a c #008080", | ||
50 | "b c #808080", | ||
51 | "# c #ff0000", | ||
52 | "........................", | ||
53 | "........................", | ||
54 | "...####..........####...", | ||
55 | "...#####........#####...", | ||
56 | "....######.....#####a...", | ||
57 | ".....######...#####ba...", | ||
58 | ".....aa###########bba...", | ||
59 | "....aaaaa#######aabba...", | ||
60 | "...aaabbb######bbbbba...", | ||
61 | "..aaaabb########bbbba...", | ||
62 | "...aaa############bba...", | ||
63 | "....a######aaa#####aa...", | ||
64 | "....######.....######...", | ||
65 | "...#####a........####...", | ||
66 | "...####aa.........###...", | ||
67 | "........................"}; | ||
68 | |||
69 | static const char* const image2_data[] = { | ||
70 | "17 15 4 1", | ||
71 | "# c #000000", | ||
72 | ". c #dcdcdc", | ||
73 | "a c #ffff00", | ||
74 | "b c #ffffff", | ||
75 | ".................", | ||
76 | "............#....", | ||
77 | ".................", | ||
78 | "............#....", | ||
79 | ".........#.....#.", | ||
80 | "....####..#.#.#..", | ||
81 | "...#abab#..#.#...", | ||
82 | "..##########..#.#", | ||
83 | "..#babababab##...", | ||
84 | "..#ababababa#.#..", | ||
85 | "..#babababab#..#.", | ||
86 | "..#ababababa#....", | ||
87 | "..#babababab#....", | ||
88 | "..#ababababa#....", | ||
89 | "..###########...."}; | ||
90 | |||
91 | |||
92 | /* | ||
93 | * Constructs a ScQtFileDlg which is a child of 'parent', with the | ||
94 | * name 'name' and widget flags set to 'f' | ||
95 | * | ||
96 | * The dialog will by default be modeless, unless you set 'modal' to | ||
97 | * TRUE to construct a modal dialog. | ||
98 | */ | ||
99 | ScQtFileDlg::ScQtFileDlg( QWidget* parent, const char* name, bool modal, WFlags fl ) | ||
100 | : QDialog( parent, name, modal, fl ) | ||
101 | { | ||
102 | QPixmap image0( ( const char** ) image0_data ); | ||
103 | QPixmap image1( ( const char** ) image1_data ); | ||
104 | QPixmap image2( ( const char** ) image2_data ); | ||
105 | if ( !name ) | ||
106 | setName( "ScQtFileDlg" ); | ||
107 | resize( 196, 279 ); | ||
108 | if (!name) | ||
109 | setCaption( tr( "FileDlg" ) ); | ||
110 | else | ||
111 | setCaption(name); | ||
112 | ScQtFileDlgLayout = new QVBoxLayout( this ); | ||
113 | ScQtFileDlgLayout->setSpacing( 6 ); | ||
114 | ScQtFileDlgLayout->setMargin( 11 ); | ||
115 | |||
116 | Layout5 = new QVBoxLayout; | ||
117 | Layout5->setSpacing( 6 ); | ||
118 | Layout5->setMargin( 0 ); | ||
119 | |||
120 | Layout4 = new QVBoxLayout; | ||
121 | Layout4->setSpacing( 6 ); | ||
122 | Layout4->setMargin( 0 ); | ||
123 | |||
124 | Layout3 = new QHBoxLayout; | ||
125 | Layout3->setSpacing( 6 ); | ||
126 | Layout3->setMargin( 0 ); | ||
127 | |||
128 | TypeComboBox = new QComboBox( FALSE, this, "TypeComboBox" ); | ||
129 | TypeComboBox->setEditable( TRUE ); | ||
130 | TypeComboBox->setInsertionPolicy( QComboBox::AtBottom ); | ||
131 | TypeComboBox->setAutoCompletion( FALSE ); | ||
132 | TypeComboBox->setDuplicatesEnabled( FALSE ); | ||
133 | QToolTip::add( TypeComboBox, tr( "file type filter" ) ); | ||
134 | QWhatsThis::add( TypeComboBox, tr( "ComboBox FileTypeFilter\n" | ||
135 | "\n" | ||
136 | "edit or select the filter" ) ); | ||
137 | Layout3->addWidget( TypeComboBox ); | ||
138 | QSpacerItem* spacer = new QSpacerItem( 20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum ); | ||
139 | Layout3->addItem( spacer ); | ||
140 | |||
141 | OkButton = new QToolButton( this, "OkButton" ); | ||
142 | OkButton->setText( tr( "" ) ); | ||
143 | OkButton->setPixmap( image0 ); | ||
144 | OkButton->setUsesBigPixmap( FALSE ); | ||
145 | QToolTip::add( OkButton, tr( "confirms the selection and closes the form" ) ); | ||
146 | QWhatsThis::add( OkButton, tr( "OKButton" ) ); | ||
147 | Layout3->addWidget( OkButton ); | ||
148 | |||
149 | CancelButton = new QToolButton( this, "CancelButton" ); | ||
150 | CancelButton->setText( tr( "" ) ); | ||
151 | CancelButton->setPixmap( image1 ); | ||
152 | CancelButton->setUsesBigPixmap( FALSE ); | ||
153 | QToolTip::add( CancelButton, tr( "cancels the selection and closes the form" ) ); | ||
154 | QWhatsThis::add( CancelButton, tr( "CancelButton" ) ); | ||
155 | Layout3->addWidget( CancelButton ); | ||
156 | Layout4->addLayout( Layout3 ); | ||
157 | |||
158 | Layout3_2 = new QHBoxLayout; | ||
159 | Layout3_2->setSpacing( 6 ); | ||
160 | Layout3_2->setMargin( 0 ); | ||
161 | |||
162 | FNameLineEdit = new QLineEdit( this, "FNameLineEdit" ); | ||
163 | QToolTip::add( FNameLineEdit, tr( "shows the selected filename" ) ); | ||
164 | QWhatsThis::add( FNameLineEdit, tr( "Filename LineEdit\n" | ||
165 | "\n" | ||
166 | "shows the selected file\n" | ||
167 | "and allows the direct filename\n" | ||
168 | "edit" ) ); | ||
169 | Layout3_2->addWidget( FNameLineEdit ); | ||
170 | |||
171 | MkDirButton = new QToolButton( this, "MkDirButton" ); | ||
172 | MkDirButton->setText( tr( "" ) ); | ||
173 | MkDirButton->setPixmap( image2 ); | ||
174 | MkDirButton->setUsesBigPixmap( FALSE ); | ||
175 | QToolTip::add( MkDirButton, tr( "confirms the selection and closes the form" ) ); | ||
176 | QWhatsThis::add( MkDirButton, tr( "OKButton" ) ); | ||
177 | Layout3_2->addWidget( MkDirButton ); | ||
178 | Layout4->addLayout( Layout3_2 ); | ||
179 | |||
180 | DirComboBox = new QComboBox( FALSE, this, "DirComboBox" ); | ||
181 | DirComboBox->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)7, (QSizePolicy::SizeType)0, DirComboBox->sizePolicy().hasHeightForWidth() ) ); | ||
182 | DirComboBox->setEditable( TRUE ); | ||
183 | DirComboBox->setDuplicatesEnabled( FALSE ); | ||
184 | QWhatsThis::add( DirComboBox, tr( "ComboBox Directory \n" | ||
185 | "edit or select the directories name" ) ); | ||
186 | Layout4->addWidget( DirComboBox ); | ||
187 | Layout5->addLayout( Layout4 ); | ||
188 | |||
189 | ListView = new QListView( this, "ListView" ); | ||
190 | ListView->addColumn( tr( "Name" ) ); | ||
191 | ListView->addColumn( tr( "size" ) ); | ||
192 | ListView->addColumn( tr( "type" ) ); | ||
193 | ListView->setRootIsDecorated( TRUE ); | ||
194 | QToolTip::add( ListView, tr( "directory listview" ) ); | ||
195 | QWhatsThis::add( ListView, tr( "Directory ListView\n" | ||
196 | "\n" | ||
197 | "shows the list of dirs and files" ) ); | ||
198 | Layout5->addWidget( ListView ); | ||
199 | ScQtFileDlgLayout->addLayout( Layout5 ); | ||
200 | |||
201 | // signals and slots connections | ||
202 | connect( OkButton, SIGNAL( clicked() ), this, SLOT( slotOK() ) ); | ||
203 | connect( DirComboBox, SIGNAL( activated(int) ), this, SLOT( slotDirComboBoxChanged( int ) ) ); | ||
204 | connect( TypeComboBox, SIGNAL( activated(int) ), this, SLOT( slotTypeComboBoxChanged( int ) ) ); | ||
205 | connect( CancelButton, SIGNAL( clicked() ), this, SLOT( slotCancel() ) ); | ||
206 | connect( ListView, SIGNAL( returnPressed(QListViewItem*) ), this, SLOT( slotSelectionChanged(QListViewItem *) ) ); | ||
207 | connect( ListView, SIGNAL( selectionChanged(QListViewItem*) ), this, SLOT( slotSelectionChanged(QListViewItem *) ) ); | ||
208 | connect( ListView, SIGNAL( doubleClicked(QListViewItem*) ), this, SLOT( slotDoubleClicked(QListViewItem *) ) ); | ||
209 | connect( FNameLineEdit, SIGNAL( textChanged(const QString&) ), this, SLOT( slotFileTextChanged( const QString & ) ) ); | ||
210 | connect( FNameLineEdit, SIGNAL( returnPressed() ), this, SLOT( slotOK() ) ); | ||
211 | connect( MkDirButton, SIGNAL( clicked() ), this, SLOT( slotMkDir() ) ); | ||
212 | } | ||
213 | |||
214 | /* | ||
215 | * Destroys the object and frees any allocated resources | ||
216 | */ | ||
217 | ScQtFileDlg::~ScQtFileDlg() | ||
218 | { | ||
219 | // no need to delete child widgets, Qt does it all for us | ||
220 | } | ||
221 | |||
222 | void ScQtFileDlg::slotCancel() | ||
223 | { | ||
224 | qWarning( "ScQtFileDlg::slotCancel(): Not implemented yet!" ); | ||
225 | } | ||
226 | |||
227 | void ScQtFileDlg::slotDirComboBoxChanged( int ) | ||
228 | { | ||
229 | qWarning( "ScQtFileDlg::slotDirComboBoxChanged( int ): Not implemented yet!" ); | ||
230 | } | ||
231 | |||
232 | void ScQtFileDlg::slotDoubleClicked(QListViewItem *) | ||
233 | { | ||
234 | qWarning( "ScQtFileDlg::slotDoubleClicked(QListViewItem *): Not implemented yet!" ); | ||
235 | } | ||
236 | |||
237 | void ScQtFileDlg::slotFileTextChanged( const QString & ) | ||
238 | { | ||
239 | qWarning( "ScQtFileDlg::slotFileTextChanged( const QString & ): Not implemented yet!" ); | ||
240 | } | ||
241 | |||
242 | void ScQtFileDlg::slotMkDir() | ||
243 | { | ||
244 | qWarning( "ScQtFileDlg::slotMkDir(): Not implemented yet!" ); | ||
245 | } | ||
246 | |||
247 | void ScQtFileDlg::slotOK() | ||
248 | { | ||
249 | qWarning( "ScQtFileDlg::slotOK(): Not implemented yet!" ); | ||
250 | } | ||
251 | |||
252 | void ScQtFileDlg::slotSelectionChanged(QListViewItem *) | ||
253 | { | ||
254 | qWarning( "ScQtFileDlg::slotSelectionChanged(QListViewItem *): Not implemented yet!" ); | ||
255 | } | ||
256 | |||
257 | void ScQtFileDlg::slotTypeComboBoxChanged( int ) | ||
258 | { | ||
259 | qWarning( "ScQtFileDlg::slotTypeComboBoxChanged( int ): Not implemented yet!" ); | ||
260 | } | ||
261 | |||
diff --git a/noncore/apps/zsafe/scqtfiledlg.h b/noncore/apps/zsafe/scqtfiledlg.h new file mode 100644 index 0000000..30321ce --- a/dev/null +++ b/noncore/apps/zsafe/scqtfiledlg.h | |||
@@ -0,0 +1,57 @@ | |||
1 | /**************************************************************************** | ||
2 | ** Form interface generated from reading ui file 'scqtfiledlg.ui' | ||
3 | ** | ||
4 | ** Created: Sun Jun 8 15:50:50 2003 | ||
5 | ** by: The User Interface Compiler (uic) | ||
6 | ** | ||
7 | ** WARNING! All changes made in this file will be lost! | ||
8 | ****************************************************************************/ | ||
9 | #ifndef SCQTFILEDLG_H | ||
10 | #define SCQTFILEDLG_H | ||
11 | |||
12 | #include <qvariant.h> | ||
13 | #include <qdialog.h> | ||
14 | class QVBoxLayout; | ||
15 | class QHBoxLayout; | ||
16 | class QGridLayout; | ||
17 | class QComboBox; | ||
18 | class QLineEdit; | ||
19 | class QListView; | ||
20 | class QListViewItem; | ||
21 | class QToolButton; | ||
22 | |||
23 | class ScQtFileDlg : public QDialog | ||
24 | { | ||
25 | Q_OBJECT | ||
26 | |||
27 | public: | ||
28 | ScQtFileDlg( QWidget* parent = 0, const char* name = 0, bool modal = FALSE, WFlags fl = 0 ); | ||
29 | ~ScQtFileDlg(); | ||
30 | |||
31 | QComboBox* TypeComboBox; | ||
32 | QToolButton* OkButton; | ||
33 | QToolButton* CancelButton; | ||
34 | QLineEdit* FNameLineEdit; | ||
35 | QToolButton* MkDirButton; | ||
36 | QComboBox* DirComboBox; | ||
37 | QListView* ListView; | ||
38 | |||
39 | public slots: | ||
40 | virtual void slotCancel(); | ||
41 | virtual void slotDirComboBoxChanged( int ); | ||
42 | virtual void slotDoubleClicked(QListViewItem *); | ||
43 | virtual void slotFileTextChanged( const QString & ); | ||
44 | virtual void slotMkDir(); | ||
45 | virtual void slotOK(); | ||
46 | virtual void slotSelectionChanged(QListViewItem *); | ||
47 | virtual void slotTypeComboBoxChanged( int ); | ||
48 | |||
49 | protected: | ||
50 | QVBoxLayout* ScQtFileDlgLayout; | ||
51 | QVBoxLayout* Layout5; | ||
52 | QVBoxLayout* Layout4; | ||
53 | QHBoxLayout* Layout3; | ||
54 | QHBoxLayout* Layout3_2; | ||
55 | }; | ||
56 | |||
57 | #endif // SCQTFILEDLG_H | ||
diff --git a/noncore/apps/zsafe/scqtfiledlg.ui b/noncore/apps/zsafe/scqtfiledlg.ui new file mode 100644 index 0000000..c059c00 --- a/dev/null +++ b/noncore/apps/zsafe/scqtfiledlg.ui | |||
@@ -0,0 +1,429 @@ | |||
1 | <!DOCTYPE UI><UI> | ||
2 | <class>ScQtFileDlg</class> | ||
3 | <widget> | ||
4 | <class>QDialog</class> | ||
5 | <property stdset="1"> | ||
6 | <name>name</name> | ||
7 | <cstring>ScQtFileDlg</cstring> | ||
8 | </property> | ||
9 | <property stdset="1"> | ||
10 | <name>geometry</name> | ||
11 | <rect> | ||
12 | <x>0</x> | ||
13 | <y>0</y> | ||
14 | <width>196</width> | ||
15 | <height>279</height> | ||
16 | </rect> | ||
17 | </property> | ||
18 | <property stdset="1"> | ||
19 | <name>caption</name> | ||
20 | <string>FileDlg</string> | ||
21 | </property> | ||
22 | <vbox> | ||
23 | <property stdset="1"> | ||
24 | <name>margin</name> | ||
25 | <number>11</number> | ||
26 | </property> | ||
27 | <property stdset="1"> | ||
28 | <name>spacing</name> | ||
29 | <number>6</number> | ||
30 | </property> | ||
31 | <widget> | ||
32 | <class>QLayoutWidget</class> | ||
33 | <property stdset="1"> | ||
34 | <name>name</name> | ||
35 | <cstring>Layout5</cstring> | ||
36 | </property> | ||
37 | <vbox> | ||
38 | <property stdset="1"> | ||
39 | <name>margin</name> | ||
40 | <number>0</number> | ||
41 | </property> | ||
42 | <property stdset="1"> | ||
43 | <name>spacing</name> | ||
44 | <number>6</number> | ||
45 | </property> | ||
46 | <widget> | ||
47 | <class>QLayoutWidget</class> | ||
48 | <property stdset="1"> | ||
49 | <name>name</name> | ||
50 | <cstring>Layout4</cstring> | ||
51 | </property> | ||
52 | <vbox> | ||
53 | <property stdset="1"> | ||
54 | <name>margin</name> | ||
55 | <number>0</number> | ||
56 | </property> | ||
57 | <property stdset="1"> | ||
58 | <name>spacing</name> | ||
59 | <number>6</number> | ||
60 | </property> | ||
61 | <widget> | ||
62 | <class>QLayoutWidget</class> | ||
63 | <property stdset="1"> | ||
64 | <name>name</name> | ||
65 | <cstring>Layout3</cstring> | ||
66 | </property> | ||
67 | <hbox> | ||
68 | <property stdset="1"> | ||
69 | <name>margin</name> | ||
70 | <number>0</number> | ||
71 | </property> | ||
72 | <property stdset="1"> | ||
73 | <name>spacing</name> | ||
74 | <number>6</number> | ||
75 | </property> | ||
76 | <widget> | ||
77 | <class>QComboBox</class> | ||
78 | <property stdset="1"> | ||
79 | <name>name</name> | ||
80 | <cstring>TypeComboBox</cstring> | ||
81 | </property> | ||
82 | <property stdset="1"> | ||
83 | <name>editable</name> | ||
84 | <bool>true</bool> | ||
85 | </property> | ||
86 | <property stdset="1"> | ||
87 | <name>insertionPolicy</name> | ||
88 | <enum>AtBottom</enum> | ||
89 | </property> | ||
90 | <property stdset="1"> | ||
91 | <name>autoCompletion</name> | ||
92 | <bool>false</bool> | ||
93 | </property> | ||
94 | <property stdset="1"> | ||
95 | <name>duplicatesEnabled</name> | ||
96 | <bool>false</bool> | ||
97 | </property> | ||
98 | <property> | ||
99 | <name>toolTip</name> | ||
100 | <string>file type filter</string> | ||
101 | </property> | ||
102 | <property> | ||
103 | <name>whatsThis</name> | ||
104 | <string>ComboBox FileTypeFilter | ||
105 | |||
106 | edit or select the filter</string> | ||
107 | </property> | ||
108 | </widget> | ||
109 | <spacer> | ||
110 | <property> | ||
111 | <name>name</name> | ||
112 | <cstring>Spacer1</cstring> | ||
113 | </property> | ||
114 | <property stdset="1"> | ||
115 | <name>orientation</name> | ||
116 | <enum>Horizontal</enum> | ||
117 | </property> | ||
118 | <property stdset="1"> | ||
119 | <name>sizeType</name> | ||
120 | <enum>Expanding</enum> | ||
121 | </property> | ||
122 | <property> | ||
123 | <name>sizeHint</name> | ||
124 | <size> | ||
125 | <width>20</width> | ||
126 | <height>20</height> | ||
127 | </size> | ||
128 | </property> | ||
129 | </spacer> | ||
130 | <widget> | ||
131 | <class>QToolButton</class> | ||
132 | <property stdset="1"> | ||
133 | <name>name</name> | ||
134 | <cstring>OkButton</cstring> | ||
135 | </property> | ||
136 | <property stdset="1"> | ||
137 | <name>text</name> | ||
138 | <string></string> | ||
139 | </property> | ||
140 | <property stdset="1"> | ||
141 | <name>pixmap</name> | ||
142 | <pixmap>image0</pixmap> | ||
143 | </property> | ||
144 | <property stdset="1"> | ||
145 | <name>usesBigPixmap</name> | ||
146 | <bool>false</bool> | ||
147 | </property> | ||
148 | <property> | ||
149 | <name>toolTip</name> | ||
150 | <string>confirms the selection and closes the form</string> | ||
151 | </property> | ||
152 | <property> | ||
153 | <name>whatsThis</name> | ||
154 | <string>OKButton</string> | ||
155 | </property> | ||
156 | </widget> | ||
157 | <widget> | ||
158 | <class>QToolButton</class> | ||
159 | <property stdset="1"> | ||
160 | <name>name</name> | ||
161 | <cstring>CancelButton</cstring> | ||
162 | </property> | ||
163 | <property stdset="1"> | ||
164 | <name>text</name> | ||
165 | <string></string> | ||
166 | </property> | ||
167 | <property stdset="1"> | ||
168 | <name>pixmap</name> | ||
169 | <pixmap>image1</pixmap> | ||
170 | </property> | ||
171 | <property stdset="1"> | ||
172 | <name>usesBigPixmap</name> | ||
173 | <bool>false</bool> | ||
174 | </property> | ||
175 | <property> | ||
176 | <name>toolTip</name> | ||
177 | <string>cancels the selection and closes the form</string> | ||
178 | </property> | ||
179 | <property> | ||
180 | <name>whatsThis</name> | ||
181 | <string>CancelButton</string> | ||
182 | </property> | ||
183 | </widget> | ||
184 | </hbox> | ||
185 | </widget> | ||
186 | <widget> | ||
187 | <class>QLayoutWidget</class> | ||
188 | <property stdset="1"> | ||
189 | <name>name</name> | ||
190 | <cstring>Layout3</cstring> | ||
191 | </property> | ||
192 | <hbox> | ||
193 | <property stdset="1"> | ||
194 | <name>margin</name> | ||
195 | <number>0</number> | ||
196 | </property> | ||
197 | <property stdset="1"> | ||
198 | <name>spacing</name> | ||
199 | <number>6</number> | ||
200 | </property> | ||
201 | <widget> | ||
202 | <class>QLineEdit</class> | ||
203 | <property stdset="1"> | ||
204 | <name>name</name> | ||
205 | <cstring>FNameLineEdit</cstring> | ||
206 | </property> | ||
207 | <property> | ||
208 | <name>toolTip</name> | ||
209 | <string>shows the selected filename</string> | ||
210 | </property> | ||
211 | <property> | ||
212 | <name>whatsThis</name> | ||
213 | <string>Filename LineEdit | ||
214 | |||
215 | shows the selected file | ||
216 | and allows the direct filename | ||
217 | edit</string> | ||
218 | </property> | ||
219 | </widget> | ||
220 | <widget> | ||
221 | <class>QToolButton</class> | ||
222 | <property stdset="1"> | ||
223 | <name>name</name> | ||
224 | <cstring>MkDirButton</cstring> | ||
225 | </property> | ||
226 | <property stdset="1"> | ||
227 | <name>text</name> | ||
228 | <string></string> | ||
229 | </property> | ||
230 | <property stdset="1"> | ||
231 | <name>pixmap</name> | ||
232 | <pixmap>image2</pixmap> | ||
233 | </property> | ||
234 | <property stdset="1"> | ||
235 | <name>usesBigPixmap</name> | ||
236 | <bool>false</bool> | ||
237 | </property> | ||
238 | <property> | ||
239 | <name>toolTip</name> | ||
240 | <string>confirms the selection and closes the form</string> | ||
241 | </property> | ||
242 | <property> | ||
243 | <name>whatsThis</name> | ||
244 | <string>OKButton</string> | ||
245 | </property> | ||
246 | </widget> | ||
247 | </hbox> | ||
248 | </widget> | ||
249 | <widget> | ||
250 | <class>QComboBox</class> | ||
251 | <property stdset="1"> | ||
252 | <name>name</name> | ||
253 | <cstring>DirComboBox</cstring> | ||
254 | </property> | ||
255 | <property stdset="1"> | ||
256 | <name>sizePolicy</name> | ||
257 | <sizepolicy> | ||
258 | <hsizetype>7</hsizetype> | ||
259 | <vsizetype>0</vsizetype> | ||
260 | </sizepolicy> | ||
261 | </property> | ||
262 | <property stdset="1"> | ||
263 | <name>editable</name> | ||
264 | <bool>true</bool> | ||
265 | </property> | ||
266 | <property stdset="1"> | ||
267 | <name>duplicatesEnabled</name> | ||
268 | <bool>false</bool> | ||
269 | </property> | ||
270 | <property> | ||
271 | <name>whatsThis</name> | ||
272 | <string>ComboBox Directory | ||
273 | edit or select the directories name</string> | ||
274 | </property> | ||
275 | </widget> | ||
276 | </vbox> | ||
277 | </widget> | ||
278 | <widget> | ||
279 | <class>QListView</class> | ||
280 | <column> | ||
281 | <property> | ||
282 | <name>text</name> | ||
283 | <string>Name</string> | ||
284 | </property> | ||
285 | <property> | ||
286 | <name>clickable</name> | ||
287 | <bool>true</bool> | ||
288 | </property> | ||
289 | <property> | ||
290 | <name>resizeable</name> | ||
291 | <bool>true</bool> | ||
292 | </property> | ||
293 | </column> | ||
294 | <column> | ||
295 | <property> | ||
296 | <name>text</name> | ||
297 | <string>size</string> | ||
298 | </property> | ||
299 | <property> | ||
300 | <name>clickable</name> | ||
301 | <bool>true</bool> | ||
302 | </property> | ||
303 | <property> | ||
304 | <name>resizeable</name> | ||
305 | <bool>true</bool> | ||
306 | </property> | ||
307 | </column> | ||
308 | <column> | ||
309 | <property> | ||
310 | <name>text</name> | ||
311 | <string>type</string> | ||
312 | </property> | ||
313 | <property> | ||
314 | <name>clickable</name> | ||
315 | <bool>true</bool> | ||
316 | </property> | ||
317 | <property> | ||
318 | <name>resizeable</name> | ||
319 | <bool>true</bool> | ||
320 | </property> | ||
321 | </column> | ||
322 | <property stdset="1"> | ||
323 | <name>name</name> | ||
324 | <cstring>ListView</cstring> | ||
325 | </property> | ||
326 | <property stdset="1"> | ||
327 | <name>rootIsDecorated</name> | ||
328 | <bool>true</bool> | ||
329 | </property> | ||
330 | <property> | ||
331 | <name>toolTip</name> | ||
332 | <string>directory listview</string> | ||
333 | </property> | ||
334 | <property> | ||
335 | <name>whatsThis</name> | ||
336 | <string>Directory ListView | ||
337 | |||
338 | shows the list of dirs and files</string> | ||
339 | </property> | ||
340 | </widget> | ||
341 | </vbox> | ||
342 | </widget> | ||
343 | </vbox> | ||
344 | </widget> | ||
345 | <images> | ||
346 | <image> | ||
347 | <name>image0</name> | ||
348 | <data format="XPM.GZ" length="537">789cd3d7528808f055d0d2e72a2e492cc94c5648ce482c52d04a29cdcdad8c8eb5ade65232325130345330563054d2e152d2534856f0cbcf4b05b195816c6503203031007113415c0b031004abc4014896530602e2e5c07c082b3111554e19b79c326e396514802207e62303849c321e397cfad0ed43f31fb23b31c20c9f9c1e3e390ca0546bcd050065676841</data> | ||
349 | </image> | ||
350 | <image> | ||
351 | <name>image1</name> | ||
352 | <data format="XPM.GZ" length="552">789cd3d7528808f055d0d2e72a2e492cc94c5648ce482c52d04a29cdcdad8c8eb5ade65232325130345300124a3a5c4a7a0ac90a7ef979a920762290ad6c60600184206e12886b01e72a83b86969064000d688031021a70c040841280f494e19590a490ec25746482522db079704d34928728989ca089084229708025099c44414b944103f09a62909592e112c8730115d9f326efb60562542693cfe430f9744dc61960897d3430d33acf1506bcd0500b5dd6ac9</data> | ||
353 | </image> | ||
354 | <image> | ||
355 | <name>image2</name> | ||
356 | <data format="XPM.GZ" length="422">789cd3d7528808f055d0d2e72a2e492cc94c5648ce482c52d04a29cdcdad8c8eb5ade65232345730345530513054d2e152525648565036000310570fc44d490641103711c44d0302886c128c9b9606568c0ed00595b10912a952194ac204958100c4074198a07262526212541426a80c076071a8605222142a23a9848925229989a412613bb24a3dac2ab19989c54910c15a6b2e0002125902</data> | ||
357 | </image> | ||
358 | </images> | ||
359 | <connections> | ||
360 | <connection> | ||
361 | <sender>OkButton</sender> | ||
362 | <signal>clicked()</signal> | ||
363 | <receiver>ScQtFileDlg</receiver> | ||
364 | <slot>slotOK()</slot> | ||
365 | </connection> | ||
366 | <connection> | ||
367 | <sender>DirComboBox</sender> | ||
368 | <signal>activated(int)</signal> | ||
369 | <receiver>ScQtFileDlg</receiver> | ||
370 | <slot>slotDirComboBoxChanged( int )</slot> | ||
371 | </connection> | ||
372 | <connection> | ||
373 | <sender>TypeComboBox</sender> | ||
374 | <signal>activated(int)</signal> | ||
375 | <receiver>ScQtFileDlg</receiver> | ||
376 | <slot>slotTypeComboBoxChanged( int )</slot> | ||
377 | </connection> | ||
378 | <connection> | ||
379 | <sender>CancelButton</sender> | ||
380 | <signal>clicked()</signal> | ||
381 | <receiver>ScQtFileDlg</receiver> | ||
382 | <slot>slotCancel()</slot> | ||
383 | </connection> | ||
384 | <connection> | ||
385 | <sender>ListView</sender> | ||
386 | <signal>returnPressed(QListViewItem*)</signal> | ||
387 | <receiver>ScQtFileDlg</receiver> | ||
388 | <slot>slotSelectionChanged(QListViewItem *)</slot> | ||
389 | </connection> | ||
390 | <connection> | ||
391 | <sender>ListView</sender> | ||
392 | <signal>selectionChanged(QListViewItem*)</signal> | ||
393 | <receiver>ScQtFileDlg</receiver> | ||
394 | <slot>slotSelectionChanged(QListViewItem *)</slot> | ||
395 | </connection> | ||
396 | <connection> | ||
397 | <sender>ListView</sender> | ||
398 | <signal>doubleClicked(QListViewItem*)</signal> | ||
399 | <receiver>ScQtFileDlg</receiver> | ||
400 | <slot>slotDoubleClicked(QListViewItem *)</slot> | ||
401 | </connection> | ||
402 | <connection> | ||
403 | <sender>FNameLineEdit</sender> | ||
404 | <signal>textChanged(const QString&)</signal> | ||
405 | <receiver>ScQtFileDlg</receiver> | ||
406 | <slot>slotFileTextChanged( const QString & )</slot> | ||
407 | </connection> | ||
408 | <connection> | ||
409 | <sender>FNameLineEdit</sender> | ||
410 | <signal>returnPressed()</signal> | ||
411 | <receiver>ScQtFileDlg</receiver> | ||
412 | <slot>slotOK()</slot> | ||
413 | </connection> | ||
414 | <connection> | ||
415 | <sender>MkDirButton</sender> | ||
416 | <signal>clicked()</signal> | ||
417 | <receiver>ScQtFileDlg</receiver> | ||
418 | <slot>slotMkDir()</slot> | ||
419 | </connection> | ||
420 | <slot access="public">slotCancel()</slot> | ||
421 | <slot access="public">slotDirComboBoxChanged( int )</slot> | ||
422 | <slot access="public">slotDoubleClicked(QListViewItem *)</slot> | ||
423 | <slot access="public">slotFileTextChanged( const QString & )</slot> | ||
424 | <slot access="public">slotMkDir()</slot> | ||
425 | <slot access="public">slotOK()</slot> | ||
426 | <slot access="public">slotSelectionChanged(QListViewItem *)</slot> | ||
427 | <slot access="public">slotTypeComboBoxChanged( int )</slot> | ||
428 | </connections> | ||
429 | </UI> | ||
diff --git a/noncore/apps/zsafe/scqtfileedit.cpp b/noncore/apps/zsafe/scqtfileedit.cpp new file mode 100644 index 0000000..effd86b --- a/dev/null +++ b/noncore/apps/zsafe/scqtfileedit.cpp | |||
@@ -0,0 +1,756 @@ | |||
1 | /*************************************************************************** | ||
2 | scqtfileedit.cpp - description | ||
3 | ------------------- | ||
4 | begin : Mon Sep 3 2001 | ||
5 | copyright : (C) 2001 by Werner Schulte | ||
6 | email : sc@schulte-ac.de | ||
7 | ***************************************************************************/ | ||
8 | |||
9 | /* $Id$ */ | ||
10 | |||
11 | /*************************************************************************** | ||
12 | * * | ||
13 | * This program is free software; you can redistribute it and/or modify * | ||
14 | * it under the terms of the GNU General Public License as published by * | ||
15 | * the Free Software Foundation; either version 2 of the License, or * | ||
16 | * (at your option) any later version. * | ||
17 | * * | ||
18 | ***************************************************************************/ | ||
19 | #include <stdio.h> | ||
20 | #include <stdlib.h> | ||
21 | |||
22 | #include "qdir.h" | ||
23 | #include "qdialog.h" | ||
24 | #include "qpixmap.h" | ||
25 | #include "qlistview.h" | ||
26 | #include "qlineedit.h" | ||
27 | #include "qtoolbutton.h" | ||
28 | |||
29 | #include "scqtfileedit.h" | ||
30 | |||
31 | // #define DEBUGFILEEDIT | ||
32 | |||
33 | /* XPM */ | ||
34 | static const char* const file_xpm[]={ | ||
35 | "16 16 5 1", | ||
36 | ". c #7f7f7f", | ||
37 | "# c None", | ||
38 | "c c #000000", | ||
39 | "b c #bfbfbf", | ||
40 | "a c #ffffff", | ||
41 | "################", | ||
42 | "..........######", | ||
43 | ".aaaaaaaab.#####", | ||
44 | ".aaaaaaaaba.####", | ||
45 | ".aaaaaaaacccc###", | ||
46 | ".aaaaaaaaaabc###", | ||
47 | ".aaaaaaaaaabc###", | ||
48 | ".aaaaaaaaaabc###", | ||
49 | ".aaaaaaaaaabc###", | ||
50 | ".aaaaaaaaaabc###", | ||
51 | ".aaaaaaaaaabc###", | ||
52 | ".aaaaaaaaaabc###", | ||
53 | ".aaaaaaaaaabc###", | ||
54 | ".aaaaaaaaaabc###", | ||
55 | ".bbbbbbbbbbbc###", | ||
56 | "ccccccccccccc###"}; | ||
57 | |||
58 | /* XPM */ | ||
59 | static const char * const link_file_xpm[]={ | ||
60 | "16 16 10 1", | ||
61 | "h c #808080", | ||
62 | "g c #a0a0a0", | ||
63 | "d c #c3c3c3", | ||
64 | ". c #7f7f7f", | ||
65 | "c c #000000", | ||
66 | "b c #bfbfbf", | ||
67 | "f c #303030", | ||
68 | "e c #585858", | ||
69 | "a c #ffffff", | ||
70 | "# c None", | ||
71 | "################", | ||
72 | "..........######", | ||
73 | ".aaaaaaaab.#####", | ||
74 | ".aaaaaaaaba.####", | ||
75 | ".aaaaaaaacccc###", | ||
76 | ".aaaaaaaaaabc###", | ||
77 | ".aaaaaaaaaabc###", | ||
78 | ".aaaaaaaaaadc###", | ||
79 | ".aaaaaaaaaadc###", | ||
80 | ".aaaacccccccc###", | ||
81 | ".aaaacaaaaaac###", | ||
82 | ".aaaacaeaeaac###", | ||
83 | ".aaaacaefcfac###", | ||
84 | ".aaaacaagchac###", | ||
85 | ".ddddcaaahaac###", | ||
86 | "ccccccccccccc###"}; | ||
87 | |||
88 | /* XPM */ | ||
89 | static const char * const closed_xpm[]={ | ||
90 | "16 16 6 1", | ||
91 | ". c None", | ||
92 | "b c #ffff00", | ||
93 | "d c #000000", | ||
94 | "* c #999999", | ||
95 | "a c #cccccc", | ||
96 | "c c #ffffff", | ||
97 | "................", | ||
98 | "................", | ||
99 | "..*****.........", | ||
100 | ".*ababa*........", | ||
101 | "*abababa******..", | ||
102 | "*cccccccccccc*d.", | ||
103 | "*cbababababab*d.", | ||
104 | "*cabababababa*d.", | ||
105 | "*cbababababab*d.", | ||
106 | "*cabababababa*d.", | ||
107 | "*cbababababab*d.", | ||
108 | "*cabababababa*d.", | ||
109 | "*cbababababab*d.", | ||
110 | "**************d.", | ||
111 | ".dddddddddddddd.", | ||
112 | "................"}; | ||
113 | |||
114 | /* XPM */ | ||
115 | static const char* const cdtoparent_xpm[]={ | ||
116 | "15 13 3 1", | ||
117 | ". c None", | ||
118 | "* c #000000", | ||
119 | "a c #ffff99", | ||
120 | "..*****........", | ||
121 | ".*aaaaa*.......", | ||
122 | "***************", | ||
123 | "*aaaaaaaaaaaaa*", | ||
124 | "*aaaa*aaaaaaaa*", | ||
125 | "*aaa***aaaaaaa*", | ||
126 | "*aa*****aaaaaa*", | ||
127 | "*aaaa*aaaaaaaa*", | ||
128 | "*aaaa*aaaaaaaa*", | ||
129 | "*aaaa******aaa*", | ||
130 | "*aaaaaaaaaaaaa*", | ||
131 | "*aaaaaaaaaaaaa*", | ||
132 | "***************"}; | ||
133 | |||
134 | ScQtFileEditDlg::ScQtFileEditDlg( QWidget *parent, const char *name, | ||
135 | const QString &path, const QString &filter ) | ||
136 | : ScQtFileDlg( parent, name, TRUE ), QDir( path, filter ) | ||
137 | { | ||
138 | // ListView->setRootIsDecorated ( TRUE ); | ||
139 | |||
140 | #ifdef DEBUGFILEEDIT | ||
141 | printf ("\nScQtFileEditDlg:: constructor name=%s", name ); | ||
142 | printf ("\n path=%s", (const char *)path ); | ||
143 | printf ("\n filter=%s", (const char *)filter ); | ||
144 | printf ("\n parent=%p", parent ); | ||
145 | fflush(stdout); | ||
146 | #endif | ||
147 | |||
148 | bpath = path; | ||
149 | bfilter = filter; | ||
150 | exflag = false; | ||
151 | |||
152 | ListView->setAllColumnsShowFocus( TRUE ); | ||
153 | ListView->setColumnAlignment( 1, Qt::AlignRight ); | ||
154 | |||
155 | fileIcon = new QPixmap( (const char **)file_xpm); | ||
156 | dirIcon = new QPixmap( (const char **)closed_xpm); | ||
157 | linkIcon = new QPixmap( (const char **)link_file_xpm); | ||
158 | cdToParentIcon = new QPixmap( (const char **)cdtoparent_xpm); | ||
159 | |||
160 | #ifdef QWS | ||
161 | showMaximized(); | ||
162 | #endif | ||
163 | |||
164 | mkdirflag = false; | ||
165 | MkDirButton->setEnabled( false ); | ||
166 | |||
167 | initDirCombo( bpath ); | ||
168 | initTypeCombo( bfilter ); | ||
169 | |||
170 | dirstr = tr("dir"); | ||
171 | filestr = tr("file"); | ||
172 | linkstr = tr("link"); | ||
173 | |||
174 | rFlag = false; | ||
175 | |||
176 | showTimer.stop(); | ||
177 | connect( &showTimer, SIGNAL(timeout()), SLOT( slotShowDir() ) ); | ||
178 | |||
179 | fmode = QDir::All; | ||
180 | fnfilter = false; | ||
181 | fsorting = false; | ||
182 | |||
183 | } | ||
184 | |||
185 | ScQtFileEditDlg::~ScQtFileEditDlg() | ||
186 | { | ||
187 | #ifdef DEBUGFILEEDIT | ||
188 | printf ("\nScQtFileEditDlg::destructor called" ); | ||
189 | fflush(stdout); | ||
190 | #endif | ||
191 | |||
192 | if ( fileIcon != NULL ) | ||
193 | { | ||
194 | delete fileIcon; | ||
195 | fileIcon = NULL; | ||
196 | } | ||
197 | if ( dirIcon != NULL ) | ||
198 | { | ||
199 | delete dirIcon; | ||
200 | dirIcon = NULL; | ||
201 | } | ||
202 | if ( linkIcon != NULL ) | ||
203 | { | ||
204 | delete linkIcon; | ||
205 | linkIcon = NULL; | ||
206 | } | ||
207 | if ( cdToParentIcon != NULL ) | ||
208 | { | ||
209 | delete cdToParentIcon; | ||
210 | cdToParentIcon = NULL; | ||
211 | } | ||
212 | } | ||
213 | |||
214 | void ScQtFileEditDlg::readIt( ) | ||
215 | { | ||
216 | qfil = readDir( bpath, bfilter ); | ||
217 | slotShowDir( ); | ||
218 | } | ||
219 | |||
220 | void ScQtFileEditDlg::setAutoExtension( bool ex ) | ||
221 | { | ||
222 | exflag = ex; | ||
223 | } | ||
224 | |||
225 | |||
226 | int ScQtFileEditDlg::checkComboEntryExists( QComboBox *com, const QString &str ) | ||
227 | { | ||
228 | int i; | ||
229 | |||
230 | if ( com ) | ||
231 | { | ||
232 | for ( i = 0; i < com->count(); i++ ) | ||
233 | { | ||
234 | if ( com->text( i ) == str ) | ||
235 | { | ||
236 | com->setCurrentItem( i ); | ||
237 | return( 1 ); | ||
238 | } | ||
239 | } | ||
240 | } | ||
241 | |||
242 | return( 0 ); | ||
243 | } | ||
244 | |||
245 | |||
246 | void ScQtFileEditDlg::initDirCombo( const QString &str ) | ||
247 | { | ||
248 | DirComboBox->clear(); | ||
249 | DirComboBox->insertItem( "/" ); | ||
250 | if ( str.isEmpty() ) | ||
251 | return; | ||
252 | DirComboBox->insertItem( str, -1 ); | ||
253 | } | ||
254 | |||
255 | void ScQtFileEditDlg::initTypeCombo( const QString &str ) | ||
256 | { | ||
257 | TypeComboBox->clear(); | ||
258 | TypeComboBox->insertItem( "*" ); | ||
259 | if ( str.isEmpty() ) | ||
260 | return; | ||
261 | TypeComboBox->insertItem( str, -1 ); | ||
262 | } | ||
263 | |||
264 | void ScQtFileEditDlg::insDirCombo( const QString &str ) | ||
265 | { | ||
266 | if ( str.isEmpty() ) | ||
267 | return; | ||
268 | |||
269 | if ( !checkComboEntryExists( DirComboBox, str ) ) | ||
270 | { | ||
271 | if ( DirComboBox->count() >= MAXDIRCOMBOCOUNT ) | ||
272 | { | ||
273 | // 2. Item loeschen (das erste ist "/") | ||
274 | DirComboBox->removeItem( 1 ); | ||
275 | } | ||
276 | // neues Item anhaengen | ||
277 | DirComboBox->insertItem( str, -1 ); | ||
278 | DirComboBox->setCurrentItem( DirComboBox->count() - 1 ); | ||
279 | } | ||
280 | } | ||
281 | |||
282 | void ScQtFileEditDlg::insTypeCombo( const QString &str ) | ||
283 | { | ||
284 | if ( str.isEmpty() ) | ||
285 | return; | ||
286 | |||
287 | if ( !checkComboEntryExists( TypeComboBox, str ) ) | ||
288 | { | ||
289 | if ( TypeComboBox->count() >= MAXTYPECOMBOCOUNT ) | ||
290 | { | ||
291 | // 2. Item loeschen (das erste ist "/") | ||
292 | TypeComboBox->removeItem( 1 ); | ||
293 | } | ||
294 | // neues Item anhaengen | ||
295 | TypeComboBox->insertItem( str, -1 ); | ||
296 | TypeComboBox->setCurrentItem( TypeComboBox->count() - 1 ); | ||
297 | } | ||
298 | } | ||
299 | |||
300 | |||
301 | const QFileInfoList *ScQtFileEditDlg::readDir( const QString &path, const QString &filter ) | ||
302 | { | ||
303 | static QString qpath, qfilter; | ||
304 | |||
305 | #ifdef DEBUGFILEEDIT | ||
306 | printf ("\nScQtFileEditDlg::readDir called, path = %s", (const char *)path ); | ||
307 | printf ("\n filter = %s", (const char *)filter ); | ||
308 | fflush(stdout); | ||
309 | #endif | ||
310 | |||
311 | rFlag = true; | ||
312 | |||
313 | if ( path.isEmpty() ) | ||
314 | qpath = "/"; | ||
315 | else | ||
316 | qpath = path; | ||
317 | |||
318 | if ( filter.isEmpty() ) | ||
319 | qfilter = "*"; | ||
320 | else | ||
321 | qfilter = filter; | ||
322 | |||
323 | insDirCombo( qpath ); | ||
324 | insTypeCombo( qfilter ); | ||
325 | |||
326 | setFilter( fmode ); | ||
327 | if ( fsorting ) | ||
328 | setSorting( QDir::DirsFirst | QDir::Name ); | ||
329 | if ( fnfilter ) | ||
330 | setNameFilter( qfilter ); | ||
331 | setPath( qpath ); | ||
332 | |||
333 | const QFileInfoList *dirlist = entryInfoList(); | ||
334 | |||
335 | if ( !dirlist ) | ||
336 | { | ||
337 | rFlag = false; | ||
338 | return( 0 ); | ||
339 | } | ||
340 | |||
341 | rFlag = false; | ||
342 | |||
343 | return( dirlist ); | ||
344 | } | ||
345 | |||
346 | QString ScQtFileEditDlg::getResult( ) | ||
347 | { | ||
348 | static QString qstr; | ||
349 | |||
350 | #ifdef DEBUGFILEEDIT | ||
351 | printf ("\nScQtFileEditDlg::getResult called" ); | ||
352 | fflush(stdout); | ||
353 | #endif | ||
354 | |||
355 | qstr = bpath + "/"; | ||
356 | qstr = qstr + filename; | ||
357 | bpath = cleanDirPath( qstr ); | ||
358 | |||
359 | return( bpath ); | ||
360 | } | ||
361 | |||
362 | QString ScQtFileEditDlg::getFileName( ) | ||
363 | { | ||
364 | int a; | ||
365 | static QString qstr; | ||
366 | |||
367 | #ifdef DEBUGFILEEDIT | ||
368 | printf ("\nScQtFileEditDlg::getFileName called" ); | ||
369 | fflush(stdout); | ||
370 | #endif | ||
371 | |||
372 | a = bpath.findRev( "/", -1, TRUE ); | ||
373 | if (a == -1) | ||
374 | qstr = bpath; // Nicht gefunden | ||
375 | else | ||
376 | qstr = bpath.right( bpath.length() - a - 1 ); | ||
377 | |||
378 | return( qstr ); | ||
379 | } | ||
380 | |||
381 | // Ab hier die Slots ----------------------------------- | ||
382 | |||
383 | void ScQtFileEditDlg::slotShowDir() | ||
384 | { | ||
385 | static QListViewItem *qlvitem; | ||
386 | static QString ftypestr, fsizestr; | ||
387 | static QFileInfo *fi; // pointer for traversing | ||
388 | |||
389 | if ( !qfil ) // pointer war Null | ||
390 | return; | ||
391 | |||
392 | ListView->clear(); // ersma loeschen | ||
393 | QFileInfoListIterator it( *qfil ); // create list iterator | ||
394 | if ( !it ) // pointer war Null | ||
395 | return; | ||
396 | |||
397 | while ( (fi=it.current()) ) | ||
398 | { // for each file... | ||
399 | if ( !fi ) // current war 0 | ||
400 | return; | ||
401 | |||
402 | if ( !fi->fileName().isNull() ) | ||
403 | { | ||
404 | if ( fi->isDir() == TRUE ) | ||
405 | { | ||
406 | ftypestr = dirstr; | ||
407 | fsizestr = "" ; | ||
408 | } | ||
409 | else if ( fi->isSymLink() == TRUE ) | ||
410 | { | ||
411 | ftypestr = linkstr; | ||
412 | fsizestr = "" ; | ||
413 | } | ||
414 | else if ( fi->isFile() == TRUE ) | ||
415 | { | ||
416 | ftypestr = filestr; | ||
417 | fsizestr.sprintf( "%d", fi->size() ); | ||
418 | } | ||
419 | else | ||
420 | { | ||
421 | printf( "something else\n" ); | ||
422 | fflush(stdout); | ||
423 | } | ||
424 | |||
425 | if ( !(fi->fileName() == "." ) ) // der wird ausgespart | ||
426 | { | ||
427 | qlvitem = new QListViewItem ( ListView, fi->fileName(), fsizestr, ftypestr ); | ||
428 | if ( fi->fileName() == ".." ) | ||
429 | qlvitem->setPixmap( 0, *cdToParentIcon ); | ||
430 | else if ( fi->isDir() == TRUE ) | ||
431 | qlvitem->setPixmap( 0, *dirIcon ); | ||
432 | else if ( fi->isSymLink() == TRUE ) | ||
433 | qlvitem->setPixmap( 0, *linkIcon ); | ||
434 | else if ( fi->isFile() == TRUE ) | ||
435 | qlvitem->setPixmap( 0, *fileIcon ); | ||
436 | } | ||
437 | } | ||
438 | ++it; // goto next list element | ||
439 | } | ||
440 | } | ||
441 | |||
442 | void ScQtFileEditDlg::slotDirComboBoxChanged( int item ) | ||
443 | { | ||
444 | if ( !rFlag ) | ||
445 | { | ||
446 | bpath = DirComboBox->currentText( ); | ||
447 | qfil = readDir( bpath, bfilter ); | ||
448 | slotShowDir( ); | ||
449 | } | ||
450 | } | ||
451 | |||
452 | void ScQtFileEditDlg::slotTypeComboBoxChanged( int item ) | ||
453 | { | ||
454 | if ( !rFlag ) | ||
455 | { | ||
456 | bfilter = TypeComboBox->currentText( ); | ||
457 | qfil = readDir( bpath, bfilter ); | ||
458 | slotShowDir( ); | ||
459 | } | ||
460 | } | ||
461 | |||
462 | void ScQtFileEditDlg::slotFileTextChanged( const QString &txt ) | ||
463 | { | ||
464 | filename = txt; | ||
465 | } | ||
466 | |||
467 | void ScQtFileEditDlg::slotSelectionChanged( QListViewItem *item ) | ||
468 | { | ||
469 | static QString qstr, rstr; | ||
470 | |||
471 | #ifdef DEBUGFILEEDIT | ||
472 | printf ("\nScQtFileEditDlg::slotSelectionChanged called" ); | ||
473 | fflush(stdout); | ||
474 | #endif | ||
475 | if ( item ) | ||
476 | { | ||
477 | if ( !item->text(2) ) | ||
478 | return; | ||
479 | |||
480 | if ( item->text(2) == dirstr ) | ||
481 | { | ||
482 | if ( !rFlag ) | ||
483 | { | ||
484 | rstr = bpath; | ||
485 | qstr = bpath + "/"; | ||
486 | qstr = qstr + item->text(0); | ||
487 | bpath = cleanDirPath( qstr ); | ||
488 | qfil = readDir( bpath, bfilter ); | ||
489 | if ( qfil == 0 ) | ||
490 | { | ||
491 | bpath = rstr; | ||
492 | // Nochmal lesen, um die ComboBoxen zu setzten | ||
493 | qfil = readDir( bpath, bfilter ); | ||
494 | } | ||
495 | showTimer.start( 10, true ); | ||
496 | } | ||
497 | } | ||
498 | else if ( item->text(2) == filestr ) | ||
499 | { | ||
500 | FNameLineEdit->setText( item->text(0) ); | ||
501 | filename = item->text(0); | ||
502 | } | ||
503 | } | ||
504 | } | ||
505 | |||
506 | |||
507 | void ScQtFileEditDlg::slotMkDir( ) | ||
508 | { | ||
509 | QString qstr; | ||
510 | |||
511 | if ( !FNameLineEdit->text().isEmpty() ) | ||
512 | { | ||
513 | qstr = bpath + "/"; | ||
514 | qstr = qstr + FNameLineEdit->text(); | ||
515 | mkdir( qstr, true ); | ||
516 | qfil = readDir( bpath, bfilter ); | ||
517 | FNameLineEdit->setText( "" ); | ||
518 | slotShowDir( ); | ||
519 | } | ||
520 | } | ||
521 | |||
522 | void ScQtFileEditDlg::slotDoubleClicked( QListViewItem *item ) | ||
523 | { | ||
524 | static QString qstr, rstr; | ||
525 | |||
526 | #ifdef DEBUGFILEEDIT | ||
527 | printf ("\nScQtFileEditDlg::slotDoubleClicked called" ); | ||
528 | fflush(stdout); | ||
529 | #endif | ||
530 | |||
531 | if ( item ) | ||
532 | { | ||
533 | if ( item->text(2) == dirstr ) | ||
534 | { | ||
535 | if ( !rFlag ) | ||
536 | { | ||
537 | rstr = bpath; | ||
538 | qstr = bpath + "/"; | ||
539 | qstr = qstr + item->text(0); | ||
540 | bpath = cleanDirPath( qstr ); | ||
541 | qfil = readDir( bpath, bfilter ); | ||
542 | if ( qfil == 0 ) | ||
543 | { | ||
544 | bpath = rstr; | ||
545 | // Nochmal lesen, um die ComboBoxen zu setzten | ||
546 | qfil = readDir( bpath, bfilter ); | ||
547 | } | ||
548 | showTimer.start( 10, TRUE ); | ||
549 | } | ||
550 | } | ||
551 | } | ||
552 | } | ||
553 | |||
554 | void ScQtFileEditDlg::autoExtension( ) | ||
555 | { | ||
556 | QString qstr; | ||
557 | int len; | ||
558 | |||
559 | if ( exflag ) | ||
560 | { | ||
561 | qstr = TypeComboBox->currentText( ); | ||
562 | if ( qstr != "*" ) | ||
563 | { | ||
564 | len = qstr.findRev( ".", -1 ); | ||
565 | if ( len >= 0 ) | ||
566 | { | ||
567 | qstr = qstr.right( qstr.length() - len ); | ||
568 | len = filename.findRev( qstr, -1 ); | ||
569 | if ( len < 0 ) | ||
570 | filename = filename + qstr; | ||
571 | } | ||
572 | } | ||
573 | } | ||
574 | } | ||
575 | |||
576 | void ScQtFileEditDlg::setMode( int mode ) | ||
577 | { | ||
578 | fmode = mode; | ||
579 | } | ||
580 | |||
581 | void ScQtFileEditDlg::setNFilter( bool ff ) | ||
582 | { | ||
583 | fnfilter = ff; | ||
584 | } | ||
585 | |||
586 | void ScQtFileEditDlg::setFSorting( bool ff ) | ||
587 | { | ||
588 | fsorting = ff; | ||
589 | } | ||
590 | |||
591 | void ScQtFileEditDlg::allowMkDir( bool mkdir ) | ||
592 | { | ||
593 | mkdirflag = mkdir; | ||
594 | MkDirButton->setEnabled( mkdir ); | ||
595 | } | ||
596 | |||
597 | |||
598 | void ScQtFileEditDlg::slotOK( ) | ||
599 | { | ||
600 | #ifdef DEBUGFILEEDIT | ||
601 | printf ("\nScQtFileEditDlg::slotOK called" ); | ||
602 | fflush(stdout); | ||
603 | #endif | ||
604 | autoExtension(); | ||
605 | |||
606 | accept(); | ||
607 | } | ||
608 | |||
609 | void ScQtFileEditDlg::slotCancel( ) | ||
610 | { | ||
611 | |||
612 | #ifdef DEBUGFILEEDIT | ||
613 | printf ("\nScQtFileEditDlg::slotCancel called" ); | ||
614 | fflush(stdout); | ||
615 | #endif | ||
616 | |||
617 | reject(); | ||
618 | } | ||
619 | |||
620 | |||
621 | /************************************************************************** | ||
622 | ***************************************************************************/ | ||
623 | ScQtFileEdit::ScQtFileEdit( QWidget *parent, const char *name ) | ||
624 | { | ||
625 | #ifdef DEBUGFILEEDIT | ||
626 | printf ("\nScQtFileEdit constructor called"); | ||
627 | fflush(stdout); | ||
628 | #endif | ||
629 | } | ||
630 | |||
631 | ScQtFileEdit::~ScQtFileEdit() | ||
632 | { | ||
633 | #ifdef DEBUGFILEEDIT | ||
634 | printf ("\nScQtFileEdit destructor called"); | ||
635 | fflush(stdout); | ||
636 | #endif | ||
637 | } | ||
638 | |||
639 | QString ScQtFileEdit::getOpenFileName( QWidget *parent, const char *name, | ||
640 | const QString &path, const QString &filter ) | ||
641 | { | ||
642 | static ScQtFileEditDlg *fd; | ||
643 | static QString fname; | ||
644 | |||
645 | #ifdef DEBUGFILEEDIT | ||
646 | printf ("\nScQtFileEdit::getOpenFileName name=%s", name ); | ||
647 | printf ("\n path=%s", (const char *)path ); | ||
648 | printf ("\n filter=%s", (const char *)filter ); | ||
649 | fflush(stdout); | ||
650 | #endif | ||
651 | |||
652 | fd = new ScQtFileEditDlg( parent, name, path, filter ); | ||
653 | fd->setAutoExtension( false ); | ||
654 | fd->setMode( QDir::All|QDir::System ); | ||
655 | fd->setNFilter( true ); | ||
656 | fd->setFSorting( true ); | ||
657 | fd->readIt(); | ||
658 | fd->exec(); | ||
659 | |||
660 | if ( fd->result() == QDialog::Accepted ) | ||
661 | fname = fd->getResult(); | ||
662 | else | ||
663 | fname = ""; | ||
664 | |||
665 | delete fd; | ||
666 | return( fname ); | ||
667 | } | ||
668 | |||
669 | QString ScQtFileEdit::getSaveAsFileName( QWidget *parent, const char *name, | ||
670 | const QString &path, const QString &filter ) | ||
671 | { | ||
672 | static ScQtFileEditDlg *fd; | ||
673 | static QString fname; | ||
674 | |||
675 | #ifdef DEBUGFILEEDIT | ||
676 | printf ("\nScQtFileEdit::getSaveAsFileName name=%s", name ); | ||
677 | printf ("\n path=%s", (const char *)path ); | ||
678 | printf ("\n filter=%s", (const char *)filter ); | ||
679 | fflush(stdout); | ||
680 | #endif | ||
681 | |||
682 | fd = new ScQtFileEditDlg( parent, name, path, filter ); | ||
683 | fd->allowMkDir( true ); // CS: | ||
684 | fd->setAutoExtension( true ); | ||
685 | fd->setNFilter( true ); | ||
686 | fd->setFSorting( true ); | ||
687 | fd->readIt(); | ||
688 | fd->exec(); | ||
689 | |||
690 | if ( fd->result() == QDialog::Accepted ) | ||
691 | fname = fd->getResult(); | ||
692 | else | ||
693 | fname = ""; | ||
694 | |||
695 | delete fd; | ||
696 | return( fname ); | ||
697 | } | ||
698 | |||
699 | QString ScQtFileEdit::getDirName( QWidget *parent, const char *name, | ||
700 | const QString &path ) | ||
701 | { | ||
702 | static ScQtFileEditDlg *fd; | ||
703 | static QString fname; | ||
704 | |||
705 | #ifdef DEBUGFILEEDIT | ||
706 | printf ("\nScQtFileEdit::getDirName name=%s", name ); | ||
707 | printf ("\n path=%s", (const char *)path ); | ||
708 | fflush(stdout); | ||
709 | #endif | ||
710 | |||
711 | fd = new ScQtFileEditDlg( parent, name, path ); | ||
712 | fd->setMode( QDir::Dirs ); | ||
713 | fd->setNFilter( false ); | ||
714 | fd->setFSorting( true ); | ||
715 | fd->readIt(); | ||
716 | fd->exec(); | ||
717 | |||
718 | if ( fd->result() == QDialog::Accepted ) | ||
719 | fname = fd->getResult(); | ||
720 | else | ||
721 | fname = ""; | ||
722 | |||
723 | delete fd; | ||
724 | return( fname ); | ||
725 | } | ||
726 | |||
727 | QString ScQtFileEdit::mkDir( QWidget *parent, const char *name, | ||
728 | const QString &path, const QString &filter ) | ||
729 | { | ||
730 | static ScQtFileEditDlg *fd; | ||
731 | static QString fname; | ||
732 | |||
733 | #ifdef DEBUGFILEEDIT | ||
734 | printf ("\nScQtFileEdit::mkDir name=%s", name ); | ||
735 | printf ("\n basepath=%s", (const char *)path ); | ||
736 | printf ("\n filter=%s", (const char *)filter ); | ||
737 | fflush(stdout); | ||
738 | #endif | ||
739 | |||
740 | fd = new ScQtFileEditDlg( parent, name, path, filter ); | ||
741 | fd->setAutoExtension( true ); | ||
742 | fd->allowMkDir( true ); | ||
743 | fd->setNFilter( false ); | ||
744 | fd->setFSorting( true ); | ||
745 | fd->readIt(); | ||
746 | fd->exec(); | ||
747 | |||
748 | if ( fd->result() == QDialog::Accepted ) | ||
749 | fname = fd->getResult(); | ||
750 | else | ||
751 | fname = ""; | ||
752 | |||
753 | delete fd; | ||
754 | return( fname ); | ||
755 | } | ||
756 | |||
diff --git a/noncore/apps/zsafe/scqtfileedit.h b/noncore/apps/zsafe/scqtfileedit.h new file mode 100644 index 0000000..7b22bb7 --- a/dev/null +++ b/noncore/apps/zsafe/scqtfileedit.h | |||
@@ -0,0 +1,106 @@ | |||
1 | /*************************************************************************** | ||
2 | scqtfileedit.h - description | ||
3 | ------------------- | ||
4 | begin : Mon Sep 3 2001 | ||
5 | copyright : (C) 2001 by Werner Schulte | ||
6 | email : sc@schulte-ac.de | ||
7 | ***************************************************************************/ | ||
8 | |||
9 | /* $Id$ */ | ||
10 | |||
11 | /*************************************************************************** | ||
12 | * * | ||
13 | * This program is free software; you can redistribute it and/or modify * | ||
14 | * it under the terms of the GNU General Public License as published by * | ||
15 | * the Free Software Foundation; either version 2 of the License, or * | ||
16 | * (at your option) any later version. * | ||
17 | * * | ||
18 | ***************************************************************************/ | ||
19 | |||
20 | #ifndef SCQTFILEEDIT_H | ||
21 | #define SCQTFILEEDIT_H | ||
22 | |||
23 | #include <qdir.h> | ||
24 | #include <qobject.h> | ||
25 | #include <qpixmap.h> | ||
26 | #include <qstring.h> | ||
27 | #include <qlistview.h> | ||
28 | #include <qcombobox.h> | ||
29 | #include <qtimer.h> | ||
30 | |||
31 | #include <scqtfiledlg.h> | ||
32 | |||
33 | #define MAXDIRCOMBOCOUNT 8 | ||
34 | #define MAXTYPECOMBOCOUNT 8 | ||
35 | |||
36 | /** | ||
37 | *@author Werner Schulte | ||
38 | */ | ||
39 | |||
40 | class ScQtFileEditDlg : public ScQtFileDlg, QDir | ||
41 | { | ||
42 | Q_OBJECT | ||
43 | public: | ||
44 | ScQtFileEditDlg( QWidget *parent=0, const char *name=0, | ||
45 | const QString &path="/", const QString &filter="*" ); | ||
46 | ~ScQtFileEditDlg(); | ||
47 | QString getResult( ); | ||
48 | QString getFileName( ); | ||
49 | void readIt( ); | ||
50 | void setAutoExtension( bool ex=false ); | ||
51 | void allowMkDir( bool mkdir=false ); | ||
52 | void setNFilter( bool ff=false ); | ||
53 | void setFSorting( bool ff=false ); | ||
54 | void setMode( int mode=QDir::All ); | ||
55 | |||
56 | private slots: | ||
57 | void slotOK( ); | ||
58 | void slotCancel( ); | ||
59 | void slotDoubleClicked( QListViewItem *item=0 ); | ||
60 | void slotSelectionChanged( QListViewItem *item=0 ); | ||
61 | void slotDirComboBoxChanged( int item ); | ||
62 | void slotTypeComboBoxChanged( int item ); | ||
63 | void slotFileTextChanged( const QString &txt="" ); | ||
64 | void slotShowDir(); | ||
65 | void slotMkDir(); | ||
66 | |||
67 | protected: | ||
68 | QTimer showTimer; | ||
69 | bool mkdirflag, fsorting, fnfilter; | ||
70 | int fmode; | ||
71 | const QFileInfoList *qfil; | ||
72 | bool rFlag, exflag; // recursionFlag,extensionflag | ||
73 | QString bpath, bfilter, filename; | ||
74 | QString dirstr,linkstr, filestr; | ||
75 | QPixmap *fileIcon, *dirIcon, *linkIcon, *cdToParentIcon; | ||
76 | const QFileInfoList *readDir( const QString &path="/", const QString &filter="*" ); | ||
77 | int checkComboEntryExists( QComboBox *com=0, const QString &str="" ); | ||
78 | void insDirCombo( const QString &str="" ); | ||
79 | void insTypeCombo( const QString &str="" ); | ||
80 | void initDirCombo( const QString &str="" ); | ||
81 | void initTypeCombo( const QString &str="" ); | ||
82 | void autoExtension( ); | ||
83 | |||
84 | }; | ||
85 | |||
86 | class ScQtFileEdit : public QObject | ||
87 | { | ||
88 | Q_OBJECT | ||
89 | public: | ||
90 | ScQtFileEdit( QWidget *parent=0, const char *name=0 ); | ||
91 | ~ScQtFileEdit(); | ||
92 | static void resize( int width, int height ); | ||
93 | static QString getOpenFileName( QWidget *parent=0, const char *name=0, | ||
94 | const QString &path="/", const QString &filter="*" ); | ||
95 | static QString getSaveAsFileName( QWidget *parent=0, const char *name=0, | ||
96 | const QString &path="/", const QString &filter="*" ); | ||
97 | static QString getDirName( QWidget *parent=0, const char *name=0, | ||
98 | const QString &path="/" ); | ||
99 | static QString mkDir( QWidget *parent=0, const char *name=0, | ||
100 | const QString &path="/", const QString &filter="*" ); | ||
101 | |||
102 | protected: | ||
103 | |||
104 | }; | ||
105 | |||
106 | #endif | ||
diff --git a/noncore/apps/zsafe/scqtfileedit.moc.cpp b/noncore/apps/zsafe/scqtfileedit.moc.cpp new file mode 100644 index 0000000..1e342b2 --- a/dev/null +++ b/noncore/apps/zsafe/scqtfileedit.moc.cpp | |||
@@ -0,0 +1,193 @@ | |||
1 | /**************************************************************************** | ||
2 | ** ScQtFileEditDlg meta object code from reading C++ file 'scqtfileedit.h' | ||
3 | ** | ||
4 | ** $Id$ | ||
5 | ** | ||
6 | ** Created: Sun Jun 9 16:09:49 2002 | ||
7 | ** by: The Qt MOC ($Id$) | ||
8 | ** | ||
9 | ** WARNING! All changes made in this file will be lost! | ||
10 | *****************************************************************************/ | ||
11 | |||
12 | #if !defined(Q_MOC_OUTPUT_REVISION) | ||
13 | #define Q_MOC_OUTPUT_REVISION 9 | ||
14 | #elif Q_MOC_OUTPUT_REVISION != 9 | ||
15 | #error "Moc format conflict - please regenerate all moc files" | ||
16 | #endif | ||
17 | |||
18 | #include "scqtfileedit.h" | ||
19 | #include <qmetaobject.h> | ||
20 | #include <qapplication.h> | ||
21 | |||
22 | |||
23 | |||
24 | const char *ScQtFileEditDlg::className() const | ||
25 | { | ||
26 | return "ScQtFileEditDlg"; | ||
27 | } | ||
28 | |||
29 | QMetaObject *ScQtFileEditDlg::metaObj = 0; | ||
30 | |||
31 | void ScQtFileEditDlg::initMetaObject() | ||
32 | { | ||
33 | if ( metaObj ) | ||
34 | return; | ||
35 | if ( qstrcmp(ScQtFileDlg::className(), "ScQtFileDlg") != 0 ) | ||
36 | badSuperclassWarning("ScQtFileEditDlg","ScQtFileDlg"); | ||
37 | (void) staticMetaObject(); | ||
38 | } | ||
39 | |||
40 | #ifndef QT_NO_TRANSLATION | ||
41 | |||
42 | QString ScQtFileEditDlg::tr(const char* s) | ||
43 | { | ||
44 | return qApp->translate( "ScQtFileEditDlg", s, 0 ); | ||
45 | } | ||
46 | |||
47 | QString ScQtFileEditDlg::tr(const char* s, const char * c) | ||
48 | { | ||
49 | return qApp->translate( "ScQtFileEditDlg", s, c ); | ||
50 | } | ||
51 | |||
52 | #endif // QT_NO_TRANSLATION | ||
53 | |||
54 | QMetaObject* ScQtFileEditDlg::staticMetaObject() | ||
55 | { | ||
56 | if ( metaObj ) | ||
57 | return metaObj; | ||
58 | (void) ScQtFileDlg::staticMetaObject(); | ||
59 | #ifndef QT_NO_PROPERTIES | ||
60 | #endif // QT_NO_PROPERTIES | ||
61 | typedef void (ScQtFileEditDlg::*m1_t0)(); | ||
62 | typedef void (QObject::*om1_t0)(); | ||
63 | typedef void (ScQtFileEditDlg::*m1_t1)(); | ||
64 | typedef void (QObject::*om1_t1)(); | ||
65 | typedef void (ScQtFileEditDlg::*m1_t2)(QListViewItem*); | ||
66 | typedef void (QObject::*om1_t2)(QListViewItem*); | ||
67 | typedef void (ScQtFileEditDlg::*m1_t3)(QListViewItem*); | ||
68 | typedef void (QObject::*om1_t3)(QListViewItem*); | ||
69 | typedef void (ScQtFileEditDlg::*m1_t4)(int); | ||
70 | typedef void (QObject::*om1_t4)(int); | ||
71 | typedef void (ScQtFileEditDlg::*m1_t5)(int); | ||
72 | typedef void (QObject::*om1_t5)(int); | ||
73 | typedef void (ScQtFileEditDlg::*m1_t6)(const QString&); | ||
74 | typedef void (QObject::*om1_t6)(const QString&); | ||
75 | typedef void (ScQtFileEditDlg::*m1_t7)(); | ||
76 | typedef void (QObject::*om1_t7)(); | ||
77 | typedef void (ScQtFileEditDlg::*m1_t8)(); | ||
78 | typedef void (QObject::*om1_t8)(); | ||
79 | m1_t0 v1_0 = &ScQtFileEditDlg::slotOK; | ||
80 | om1_t0 ov1_0 = (om1_t0)v1_0; | ||
81 | m1_t1 v1_1 = &ScQtFileEditDlg::slotCancel; | ||
82 | om1_t1 ov1_1 = (om1_t1)v1_1; | ||
83 | m1_t2 v1_2 = &ScQtFileEditDlg::slotDoubleClicked; | ||
84 | om1_t2 ov1_2 = (om1_t2)v1_2; | ||
85 | m1_t3 v1_3 = &ScQtFileEditDlg::slotSelectionChanged; | ||
86 | om1_t3 ov1_3 = (om1_t3)v1_3; | ||
87 | m1_t4 v1_4 = &ScQtFileEditDlg::slotDirComboBoxChanged; | ||
88 | om1_t4 ov1_4 = (om1_t4)v1_4; | ||
89 | m1_t5 v1_5 = &ScQtFileEditDlg::slotTypeComboBoxChanged; | ||
90 | om1_t5 ov1_5 = (om1_t5)v1_5; | ||
91 | m1_t6 v1_6 = &ScQtFileEditDlg::slotFileTextChanged; | ||
92 | om1_t6 ov1_6 = (om1_t6)v1_6; | ||
93 | m1_t7 v1_7 = &ScQtFileEditDlg::slotShowDir; | ||
94 | om1_t7 ov1_7 = (om1_t7)v1_7; | ||
95 | m1_t8 v1_8 = &ScQtFileEditDlg::slotMkDir; | ||
96 | om1_t8 ov1_8 = (om1_t8)v1_8; | ||
97 | QMetaData *slot_tbl = QMetaObject::new_metadata(9); | ||
98 | QMetaData::Access *slot_tbl_access = QMetaObject::new_metaaccess(9); | ||
99 | slot_tbl[0].name = "slotOK()"; | ||
100 | slot_tbl[0].ptr = (QMember)ov1_0; | ||
101 | slot_tbl_access[0] = QMetaData::Private; | ||
102 | slot_tbl[1].name = "slotCancel()"; | ||
103 | slot_tbl[1].ptr = (QMember)ov1_1; | ||
104 | slot_tbl_access[1] = QMetaData::Private; | ||
105 | slot_tbl[2].name = "slotDoubleClicked(QListViewItem*)"; | ||
106 | slot_tbl[2].ptr = (QMember)ov1_2; | ||
107 | slot_tbl_access[2] = QMetaData::Private; | ||
108 | slot_tbl[3].name = "slotSelectionChanged(QListViewItem*)"; | ||
109 | slot_tbl[3].ptr = (QMember)ov1_3; | ||
110 | slot_tbl_access[3] = QMetaData::Private; | ||
111 | slot_tbl[4].name = "slotDirComboBoxChanged(int)"; | ||
112 | slot_tbl[4].ptr = (QMember)ov1_4; | ||
113 | slot_tbl_access[4] = QMetaData::Private; | ||
114 | slot_tbl[5].name = "slotTypeComboBoxChanged(int)"; | ||
115 | slot_tbl[5].ptr = (QMember)ov1_5; | ||
116 | slot_tbl_access[5] = QMetaData::Private; | ||
117 | slot_tbl[6].name = "slotFileTextChanged(const QString&)"; | ||
118 | slot_tbl[6].ptr = (QMember)ov1_6; | ||
119 | slot_tbl_access[6] = QMetaData::Private; | ||
120 | slot_tbl[7].name = "slotShowDir()"; | ||
121 | slot_tbl[7].ptr = (QMember)ov1_7; | ||
122 | slot_tbl_access[7] = QMetaData::Private; | ||
123 | slot_tbl[8].name = "slotMkDir()"; | ||
124 | slot_tbl[8].ptr = (QMember)ov1_8; | ||
125 | slot_tbl_access[8] = QMetaData::Private; | ||
126 | metaObj = QMetaObject::new_metaobject( | ||
127 | "ScQtFileEditDlg", "ScQtFileDlg", | ||
128 | slot_tbl, 9, | ||
129 | 0, 0, | ||
130 | #ifndef QT_NO_PROPERTIES | ||
131 | 0, 0, | ||
132 | 0, 0, | ||
133 | #endif // QT_NO_PROPERTIES | ||
134 | 0, 0 ); | ||
135 | metaObj->set_slot_access( slot_tbl_access ); | ||
136 | #ifndef QT_NO_PROPERTIES | ||
137 | #endif // QT_NO_PROPERTIES | ||
138 | return metaObj; | ||
139 | } | ||
140 | |||
141 | |||
142 | const char *ScQtFileEdit::className() const | ||
143 | { | ||
144 | return "ScQtFileEdit"; | ||
145 | } | ||
146 | |||
147 | QMetaObject *ScQtFileEdit::metaObj = 0; | ||
148 | |||
149 | void ScQtFileEdit::initMetaObject() | ||
150 | { | ||
151 | if ( metaObj ) | ||
152 | return; | ||
153 | if ( qstrcmp(QObject::className(), "QObject") != 0 ) | ||
154 | badSuperclassWarning("ScQtFileEdit","QObject"); | ||
155 | (void) staticMetaObject(); | ||
156 | } | ||
157 | |||
158 | #ifndef QT_NO_TRANSLATION | ||
159 | |||
160 | QString ScQtFileEdit::tr(const char* s) | ||
161 | { | ||
162 | return qApp->translate( "ScQtFileEdit", s, 0 ); | ||
163 | } | ||
164 | |||
165 | QString ScQtFileEdit::tr(const char* s, const char * c) | ||
166 | { | ||
167 | return qApp->translate( "ScQtFileEdit", s, c ); | ||
168 | } | ||
169 | |||
170 | #endif // QT_NO_TRANSLATION | ||
171 | |||
172 | QMetaObject* ScQtFileEdit::staticMetaObject() | ||
173 | { | ||
174 | if ( metaObj ) | ||
175 | return metaObj; | ||
176 | (void) QObject::staticMetaObject(); | ||
177 | #ifndef QT_NO_PROPERTIES | ||
178 | #endif // QT_NO_PROPERTIES | ||
179 | QMetaData::Access *slot_tbl_access = 0; | ||
180 | metaObj = QMetaObject::new_metaobject( | ||
181 | "ScQtFileEdit", "QObject", | ||
182 | 0, 0, | ||
183 | 0, 0, | ||
184 | #ifndef QT_NO_PROPERTIES | ||
185 | 0, 0, | ||
186 | 0, 0, | ||
187 | #endif // QT_NO_PROPERTIES | ||
188 | 0, 0 ); | ||
189 | metaObj->set_slot_access( slot_tbl_access ); | ||
190 | #ifndef QT_NO_PROPERTIES | ||
191 | #endif // QT_NO_PROPERTIES | ||
192 | return metaObj; | ||
193 | } | ||
diff --git a/noncore/apps/zsafe/searchdialog.ui b/noncore/apps/zsafe/searchdialog.ui new file mode 100644 index 0000000..eec7e13 --- a/dev/null +++ b/noncore/apps/zsafe/searchdialog.ui | |||
@@ -0,0 +1,98 @@ | |||
1 | <!DOCTYPE UI><UI> | ||
2 | <class>SearchDialog</class> | ||
3 | <widget> | ||
4 | <class>QDialog</class> | ||
5 | <property stdset="1"> | ||
6 | <name>name</name> | ||
7 | <cstring>SearchDialog</cstring> | ||
8 | </property> | ||
9 | <property stdset="1"> | ||
10 | <name>geometry</name> | ||
11 | <rect> | ||
12 | <x>0</x> | ||
13 | <y>0</y> | ||
14 | <width>183</width> | ||
15 | <height>81</height> | ||
16 | </rect> | ||
17 | </property> | ||
18 | <property stdset="1"> | ||
19 | <name>caption</name> | ||
20 | <string>Search</string> | ||
21 | </property> | ||
22 | <property> | ||
23 | <name>layoutMargin</name> | ||
24 | </property> | ||
25 | <property> | ||
26 | <name>layoutSpacing</name> | ||
27 | </property> | ||
28 | <grid> | ||
29 | <property stdset="1"> | ||
30 | <name>margin</name> | ||
31 | <number>6</number> | ||
32 | </property> | ||
33 | <property stdset="1"> | ||
34 | <name>spacing</name> | ||
35 | <number>1</number> | ||
36 | </property> | ||
37 | <widget row="1" column="0" > | ||
38 | <class>QLabel</class> | ||
39 | <property stdset="1"> | ||
40 | <name>name</name> | ||
41 | <cstring>Name_2</cstring> | ||
42 | </property> | ||
43 | <property stdset="1"> | ||
44 | <name>text</name> | ||
45 | <string>Username</string> | ||
46 | </property> | ||
47 | </widget> | ||
48 | <widget row="2" column="1" > | ||
49 | <class>QLineEdit</class> | ||
50 | <property stdset="1"> | ||
51 | <name>name</name> | ||
52 | <cstring>CommentField</cstring> | ||
53 | </property> | ||
54 | </widget> | ||
55 | <widget row="1" column="1" > | ||
56 | <class>QLineEdit</class> | ||
57 | <property stdset="1"> | ||
58 | <name>name</name> | ||
59 | <cstring>UsernameField</cstring> | ||
60 | </property> | ||
61 | </widget> | ||
62 | <widget row="0" column="1" > | ||
63 | <class>QLineEdit</class> | ||
64 | <property stdset="1"> | ||
65 | <name>name</name> | ||
66 | <cstring>NameField</cstring> | ||
67 | </property> | ||
68 | </widget> | ||
69 | <widget row="0" column="0" > | ||
70 | <class>QLabel</class> | ||
71 | <property stdset="1"> | ||
72 | <name>name</name> | ||
73 | <cstring>Name</cstring> | ||
74 | </property> | ||
75 | <property stdset="1"> | ||
76 | <name>text</name> | ||
77 | <string>Name</string> | ||
78 | </property> | ||
79 | </widget> | ||
80 | <widget row="2" column="0" > | ||
81 | <class>QLabel</class> | ||
82 | <property stdset="1"> | ||
83 | <name>name</name> | ||
84 | <cstring>Name_3</cstring> | ||
85 | </property> | ||
86 | <property stdset="1"> | ||
87 | <name>text</name> | ||
88 | <string>Comment</string> | ||
89 | </property> | ||
90 | </widget> | ||
91 | </grid> | ||
92 | </widget> | ||
93 | <tabstops> | ||
94 | <tabstop>NameField</tabstop> | ||
95 | <tabstop>UsernameField</tabstop> | ||
96 | <tabstop>CommentField</tabstop> | ||
97 | </tabstops> | ||
98 | </UI> | ||
diff --git a/noncore/apps/zsafe/shadedlistitem.cpp b/noncore/apps/zsafe/shadedlistitem.cpp new file mode 100644 index 0000000..72c6261 --- a/dev/null +++ b/noncore/apps/zsafe/shadedlistitem.cpp | |||
@@ -0,0 +1,69 @@ | |||
1 | /* | ||
2 | * shadedlistitem.cpp | ||
3 | * | ||
4 | * (c) 2003 by Jeremy Bowman <jmbowman@alum.mit.edu> | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License as published by | ||
8 | * the Free Software Foundation; either version 2 of the License, or | ||
9 | * (at your option) any later version. | ||
10 | */ | ||
11 | |||
12 | #include "zsafe.h" | ||
13 | #include "shadedlistitem.h" | ||
14 | |||
15 | |||
16 | ShadedListItem::ShadedListItem(int index, QListViewItem *parent) | ||
17 | : QListViewItem(parent) | ||
18 | { | ||
19 | oddRow = (index % 2 != 0); | ||
20 | } | ||
21 | |||
22 | ShadedListItem::ShadedListItem(int index, QListView *parent) | ||
23 | : QListViewItem(parent), lv(parent) | ||
24 | { | ||
25 | oddRow = (index % 2 != 0); | ||
26 | } | ||
27 | |||
28 | ShadedListItem::ShadedListItem(int index, QListView *parent, QListViewItem *after) | ||
29 | : QListViewItem(parent, after), lv(parent) | ||
30 | { | ||
31 | oddRow = (index % 2 != 0); | ||
32 | } | ||
33 | |||
34 | ShadedListItem::ShadedListItem(int index, QListView *parent, QString label1, QString label2, QString label3) | ||
35 | : QListViewItem(parent, label1, label2, label3), lv(parent) | ||
36 | { | ||
37 | oddRow = (index % 2 != 0); | ||
38 | } | ||
39 | |||
40 | ShadedListItem::ShadedListItem(int index, QListView *parent, QListViewItem *after, QString label1, QString label2, QString label3) | ||
41 | : QListViewItem(parent, after, label1, label2, label3), lv(parent) | ||
42 | { | ||
43 | oddRow = (index % 2 != 0); | ||
44 | } | ||
45 | |||
46 | ShadedListItem::~ShadedListItem() | ||
47 | { | ||
48 | |||
49 | } | ||
50 | |||
51 | |||
52 | void ShadedListItem::paintCell(QPainter *p, const QColorGroup &cg, int column, int width, int alignment) | ||
53 | { | ||
54 | QColorGroup colors(cg); | ||
55 | #if QT_VERSION >=300 | ||
56 | const QColorGroup::ColorRole crole = QColorGroup::Base; | ||
57 | // const QWidget::BackgroundMode bgmode = lv->viewport()->backgroundMode(); | ||
58 | // const QColorGroup::ColorRole crole = QPalette::backgroundRoleFromMode(bgmode); | ||
59 | #else | ||
60 | const QColorGroup::ColorRole crole = QColorGroup::Base; | ||
61 | #endif | ||
62 | if (oddRow) { | ||
63 | colors.setColor(crole, *ZSafe::oddRowColor); | ||
64 | } | ||
65 | else { | ||
66 | colors.setColor(crole, *ZSafe::evenRowColor); | ||
67 | } | ||
68 | QListViewItem::paintCell(p, colors, column, width, alignment); | ||
69 | } | ||
diff --git a/noncore/apps/zsafe/shadedlistitem.h b/noncore/apps/zsafe/shadedlistitem.h new file mode 100644 index 0000000..0db2fa8 --- a/dev/null +++ b/noncore/apps/zsafe/shadedlistitem.h | |||
@@ -0,0 +1,34 @@ | |||
1 | /* | ||
2 | * shadedlistitem.h | ||
3 | * | ||
4 | * (c) 2003 by Jeremy Bowman <jmbowman@alum.mit.edu> | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License as published by | ||
8 | * the Free Software Foundation; either version 2 of the License, or | ||
9 | * (at your option) any later version. | ||
10 | */ | ||
11 | |||
12 | #ifndef SHADEDLISTITEM_H | ||
13 | #define SHADEDLISTITEM_H | ||
14 | |||
15 | #include <qlistview.h> | ||
16 | |||
17 | class ShadedListItem: public QListViewItem | ||
18 | { | ||
19 | public: | ||
20 | ShadedListItem(int index, QListViewItem *parent); | ||
21 | ShadedListItem(int index, QListView *parent); | ||
22 | ShadedListItem(int index, QListView *parent, QListViewItem *after); | ||
23 | ShadedListItem(int index, QListView *parent, QString label1, QString label2 = QString::null, QString label3 = QString::null); | ||
24 | ShadedListItem(int index, QListView *parent, QListViewItem *after, QString label1, QString label2 = QString::null, QString label3 = QString::null); | ||
25 | ~ShadedListItem(); | ||
26 | |||
27 | void paintCell(QPainter *p, const QColorGroup &cg, int column, int width, int alignment); | ||
28 | |||
29 | private: | ||
30 | QListView *lv; | ||
31 | bool oddRow; | ||
32 | }; | ||
33 | |||
34 | #endif | ||
diff --git a/noncore/apps/zsafe/wait.ui b/noncore/apps/zsafe/wait.ui new file mode 100644 index 0000000..61fef22 --- a/dev/null +++ b/noncore/apps/zsafe/wait.ui | |||
@@ -0,0 +1,54 @@ | |||
1 | <!DOCTYPE UI><UI> | ||
2 | <class>Wait</class> | ||
3 | <widget> | ||
4 | <class>QDialog</class> | ||
5 | <property stdset="1"> | ||
6 | <name>name</name> | ||
7 | <cstring>Wait</cstring> | ||
8 | </property> | ||
9 | <property stdset="1"> | ||
10 | <name>geometry</name> | ||
11 | <rect> | ||
12 | <x>0</x> | ||
13 | <y>0</y> | ||
14 | <width>168</width> | ||
15 | <height>27</height> | ||
16 | </rect> | ||
17 | </property> | ||
18 | <property stdset="1"> | ||
19 | <name>caption</name> | ||
20 | <string>Please Wait...</string> | ||
21 | </property> | ||
22 | <property> | ||
23 | <name>layoutMargin</name> | ||
24 | </property> | ||
25 | <grid> | ||
26 | <property stdset="1"> | ||
27 | <name>margin</name> | ||
28 | <number>0</number> | ||
29 | </property> | ||
30 | <property stdset="1"> | ||
31 | <name>spacing</name> | ||
32 | <number>6</number> | ||
33 | </property> | ||
34 | <widget row="0" column="0" > | ||
35 | <class>QLabel</class> | ||
36 | <property stdset="1"> | ||
37 | <name>name</name> | ||
38 | <cstring>waitLabel</cstring> | ||
39 | </property> | ||
40 | <property stdset="1"> | ||
41 | <name>text</name> | ||
42 | <string>Please Wait...</string> | ||
43 | </property> | ||
44 | <property stdset="1"> | ||
45 | <name>alignment</name> | ||
46 | <set>AlignCenter</set> | ||
47 | </property> | ||
48 | <property> | ||
49 | <name>hAlign</name> | ||
50 | </property> | ||
51 | </widget> | ||
52 | </grid> | ||
53 | </widget> | ||
54 | </UI> | ||
diff --git a/noncore/apps/zsafe/zlistview.cpp b/noncore/apps/zsafe/zlistview.cpp new file mode 100644 index 0000000..23bbc4e --- a/dev/null +++ b/noncore/apps/zsafe/zlistview.cpp | |||
@@ -0,0 +1,38 @@ | |||
1 | /* | ||
2 | ** $Id$ | ||
3 | */ | ||
4 | |||
5 | #include "zlistview.h" | ||
6 | #include <qlistview.h> | ||
7 | #include <qevent.h> | ||
8 | #include <stdio.h> | ||
9 | #include "zsafe.h" | ||
10 | |||
11 | ZListView::ZListView (ZSafe *zsafe, const char *id) : QListView(zsafe, id) | ||
12 | { | ||
13 | zs = zsafe; | ||
14 | } | ||
15 | |||
16 | ZListView::~ZListView() | ||
17 | { | ||
18 | } | ||
19 | |||
20 | void ZListView::keyPressEvent ( QKeyEvent *e ) | ||
21 | { | ||
22 | /* | ||
23 | char buf[64]; | ||
24 | sprintf (buf, "key: %d\n", e->key()); | ||
25 | qWarning (buf); | ||
26 | */ | ||
27 | |||
28 | switch (e->key()) | ||
29 | { | ||
30 | case 32: // middle cursor key pressed | ||
31 | zs->showInfo (zs->selectedItem); | ||
32 | break; | ||
33 | default: | ||
34 | QListView::keyPressEvent( e ); | ||
35 | } | ||
36 | |||
37 | } | ||
38 | |||
diff --git a/noncore/apps/zsafe/zlistview.h b/noncore/apps/zsafe/zlistview.h new file mode 100644 index 0000000..c0f321c --- a/dev/null +++ b/noncore/apps/zsafe/zlistview.h | |||
@@ -0,0 +1,33 @@ | |||
1 | /* | ||
2 | ** $Id$ | ||
3 | */ | ||
4 | |||
5 | #ifndef _ZLIST_VIEW_H_ | ||
6 | #define _ZLIST_VIEW_H_ | ||
7 | |||
8 | #include <qwidget.h> | ||
9 | #include <qlistview.h> | ||
10 | #include <qaccel.h> | ||
11 | |||
12 | class QListView; | ||
13 | class ZSafe; | ||
14 | class QKeyEvent; | ||
15 | |||
16 | class ZListView : public QListView | ||
17 | { | ||
18 | Q_OBJECT | ||
19 | |||
20 | protected: | ||
21 | ZSafe *zs; | ||
22 | |||
23 | public: | ||
24 | ZListView(ZSafe *, const char *); | ||
25 | ~ZListView(); | ||
26 | |||
27 | public slots: | ||
28 | |||
29 | protected: | ||
30 | virtual void keyPressEvent ( QKeyEvent * e ); | ||
31 | }; | ||
32 | |||
33 | #endif//_ZLIST_VIEW_H_ | ||
diff --git a/noncore/apps/zsafe/zsafe.cpp b/noncore/apps/zsafe/zsafe.cpp new file mode 100644 index 0000000..bd03031 --- a/dev/null +++ b/noncore/apps/zsafe/zsafe.cpp | |||
@@ -0,0 +1,3492 @@ | |||
1 | /**************************************************************************** | ||
2 | ** | ||
3 | ** Created: Sat Apr 6 17:57:45 2002 | ||
4 | ** | ||
5 | ** Author: Carsten Schneider <CarstenSchneider@t-online.de> | ||
6 | ** | ||
7 | ** $Id$ | ||
8 | ** | ||
9 | ** Homepage: http://home.t-online.de/home/CarstenSchneider/zsafe/index.html | ||
10 | ** | ||
11 | ** Compile Flags: | ||
12 | ** Zaurus arm : none | ||
13 | ** Linux Desktop : -DDESKTOP | ||
14 | ** Windows Desktop: -DDESKTOP -DWIN32 | ||
15 | ** | ||
16 | ****************************************************************************/ | ||
17 | #include "zsafe.h" | ||
18 | #include "newdialog.h" | ||
19 | #include "searchdialog.h" | ||
20 | #include "categorydialog.h" | ||
21 | #include "passworddialog.h" | ||
22 | #include "infoform.h" | ||
23 | #include "zlistview.h" | ||
24 | #include "shadedlistitem.h" | ||
25 | |||
26 | #ifndef DESKTOP | ||
27 | #include "scqtfileedit.h" | ||
28 | #endif | ||
29 | |||
30 | #include <qclipboard.h> | ||
31 | |||
32 | #include <stdio.h> | ||
33 | |||
34 | #include <sys/types.h> | ||
35 | #include <sys/stat.h> | ||
36 | #include <fcntl.h> | ||
37 | #include <stdlib.h> | ||
38 | #ifndef WIN32 | ||
39 | #include <unistd.h> | ||
40 | #endif | ||
41 | #include <string.h> | ||
42 | #include <errno.h> | ||
43 | |||
44 | #include <qmenubar.h> | ||
45 | #include <qpopupmenu.h> | ||
46 | |||
47 | #ifdef DESKTOP | ||
48 | #include <qfiledialog.h> | ||
49 | #ifndef WIN32 | ||
50 | #include <qsettings.h> | ||
51 | #else | ||
52 | #include "qsettings.h" | ||
53 | #endif | ||
54 | #include <qapplication.h> | ||
55 | #else | ||
56 | #include <qfile.h> | ||
57 | #include <qpe/fileselector.h> | ||
58 | #include <qpe/global.h> | ||
59 | #include <qpe/qpeapplication.h> | ||
60 | #include <qpe/resource.h> | ||
61 | #include <qpe/config.h> | ||
62 | #endif | ||
63 | |||
64 | #include <qtimer.h> | ||
65 | #include <qlayout.h> | ||
66 | #include <qmessagebox.h> | ||
67 | #include <qfile.h> | ||
68 | #include <qtextstream.h> | ||
69 | #include <qheader.h> | ||
70 | #include <qlistview.h> | ||
71 | #include <qtoolbutton.h> | ||
72 | #include <qlayout.h> | ||
73 | #include <qvariant.h> | ||
74 | #include <qtooltip.h> | ||
75 | #include <qwhatsthis.h> | ||
76 | #include <qimage.h> | ||
77 | #include <qpixmap.h> | ||
78 | #include <qlineedit.h> | ||
79 | #include <qmultilineedit.h> | ||
80 | #include <qregexp.h> | ||
81 | #include <qdir.h> | ||
82 | #include <qtextbrowser.h> | ||
83 | #include <qlabel.h> | ||
84 | #include <qcombobox.h> | ||
85 | |||
86 | #include "krc2.h" | ||
87 | |||
88 | #include "wait.h" | ||
89 | |||
90 | extern int DeskW, DeskH; | ||
91 | #ifdef DESKTOP | ||
92 | extern QApplication *appl; | ||
93 | #else | ||
94 | extern QPEApplication *appl; | ||
95 | #endif | ||
96 | |||
97 | |||
98 | #ifdef DESKTOP | ||
99 | #ifndef WIN32 | ||
100 | const QString APP_KEY="/.zsafe/"; | ||
101 | #else | ||
102 | const QString APP_KEY=""; | ||
103 | #endif | ||
104 | #else | ||
105 | const QString APP_KEY=""; | ||
106 | #endif | ||
107 | |||
108 | // include xmp images | ||
109 | #include "pics/zsafe/copy.xpm" | ||
110 | #include "pics/zsafe/cut.xpm" | ||
111 | #include "pics/zsafe/edit.xpm" | ||
112 | #include "pics/zsafe/editdelete.xpm" | ||
113 | #include "pics/zsafe/find.xpm" | ||
114 | #include "pics/zsafe/folder_open.xpm" | ||
115 | #include "pics/zsafe/help_icon.xpm" | ||
116 | #include "pics/zsafe/new.xpm" | ||
117 | #include "pics/zsafe/paste.xpm" | ||
118 | #include "pics/zsafe/quit_icon.xpm" | ||
119 | #include "pics/zsafe/save.xpm" | ||
120 | #include "pics/zsafe/trash.xpm" | ||
121 | #include "pics/zsafe/expand.xpm" | ||
122 | #include "pics/zsafe/export.xpm" | ||
123 | #include "pics/zsafe/import.xpm" | ||
124 | #include "pics/zsafe/zsafe.xpm" | ||
125 | |||
126 | static const char* const bank_cards_data[] = { | ||
127 | "14 14 16 1", | ||
128 | ". c None", | ||
129 | "# c #000000", | ||
130 | "b c #0000de", | ||
131 | "a c #0000e6", | ||
132 | "j c #41de83", | ||
133 | "k c #4acecd", | ||
134 | "h c #4aced5", | ||
135 | "g c #5a40cd", | ||
136 | "d c #5a44d5", | ||
137 | "l c #9440d5", | ||
138 | "m c #b4ce4a", | ||
139 | "n c #cd4883", | ||
140 | "e c #d5ae10", | ||
141 | "f c #de3ce6", | ||
142 | "i c #e640e6", | ||
143 | "c c #ffffff", | ||
144 | "..............", | ||
145 | ".###########..", | ||
146 | ".#ababababa#..", | ||
147 | ".#babbbabbb#..", | ||
148 | ".#ccccccccc#..", | ||
149 | ".#cdcefcghc#..", | ||
150 | ".#ccccccccc#..", | ||
151 | ".#cicjkclic#..", | ||
152 | ".#ccccccccc#..", | ||
153 | ".#cmchlcnec#..", | ||
154 | ".#ccccccccc#..", | ||
155 | ".###########..", | ||
156 | "..............", | ||
157 | ".............."}; | ||
158 | |||
159 | |||
160 | static const char* const passwords_data[] = { | ||
161 | "16 16 20 1", | ||
162 | ". c None", | ||
163 | "# c #000000", | ||
164 | "r c #000083", | ||
165 | "p c #0000c5", | ||
166 | "q c #0000ff", | ||
167 | "n c #008100", | ||
168 | "l c #00c200", | ||
169 | "m c #00ff00", | ||
170 | "j c #838100", | ||
171 | "a c #c55900", | ||
172 | "h c #c5c200", | ||
173 | "o c #c5c2ff", | ||
174 | "k c #c5ffc5", | ||
175 | "f c #ff0000", | ||
176 | "d c #ff8100", | ||
177 | "b c #ffaa5a", | ||
178 | "e c #ffc2c5", | ||
179 | "c c #ffdeac", | ||
180 | "i c #ffff00", | ||
181 | "g c #ffffc5", | ||
182 | "............###.", | ||
183 | "...........#abb#", | ||
184 | "..........#cbab#", | ||
185 | ".........#cbdd#.", | ||
186 | "######..#cbdd#..", | ||
187 | "#eeff#..#add#...", | ||
188 | "#eeff#######....", | ||
189 | "#ccdbdd#........", | ||
190 | "#dddbdd###......", | ||
191 | "#gghihhjj#......", | ||
192 | "#hhhihhjj###....", | ||
193 | "#kklmllnnnn#....", | ||
194 | "#lllmllnnnn#....", | ||
195 | "#oopqpprprr#....", | ||
196 | "#oopqpprprr#....", | ||
197 | "############...."}; | ||
198 | |||
199 | static const char* const software_data[] = { | ||
200 | "16 16 5 1", | ||
201 | ". c None", | ||
202 | "# c #000000", | ||
203 | "b c #838183", | ||
204 | "c c #c5ffff", | ||
205 | "a c #ffffff", | ||
206 | "................", | ||
207 | ".##############.", | ||
208 | "#aaaaaaaaaaaaaa#", | ||
209 | "#abbbbbbbbbbbbb#", | ||
210 | "#ab##########ab#", | ||
211 | "#ab#c########ab#", | ||
212 | "#ab#c#c######ab#", | ||
213 | "#ab##########ab#", | ||
214 | "#ab##########ab#", | ||
215 | "#ab##########ab#", | ||
216 | "#ab##########ab#", | ||
217 | "#ab##########ab#", | ||
218 | "#aaaaaaaaaaaaab#", | ||
219 | "#bbbbbbbbbbbbbb#", | ||
220 | ".##############.", | ||
221 | "................"}; | ||
222 | |||
223 | static const char* const general_data[] = { | ||
224 | "14 14 98 2", | ||
225 | "Qt c None", | ||
226 | ".k c #000000", | ||
227 | "#x c #080808", | ||
228 | "#F c #101008", | ||
229 | "#q c #101010", | ||
230 | "#i c #101410", | ||
231 | "## c #101810", | ||
232 | ".m c #181818", | ||
233 | ".3 c #181c18", | ||
234 | ".I c #182018", | ||
235 | ".T c #202420", | ||
236 | "#D c #202820", | ||
237 | "#y c #292c29", | ||
238 | ".c c #293029", | ||
239 | ".d c #313031", | ||
240 | "#E c #313429", | ||
241 | "#r c #313831", | ||
242 | ".j c #393c31", | ||
243 | "#j c #394039", | ||
244 | "#C c #414841", | ||
245 | ".w c #4a554a", | ||
246 | ".a c #4a594a", | ||
247 | ".# c #525052", | ||
248 | ".l c #52594a", | ||
249 | "#f c #525952", | ||
250 | "#v c #525d52", | ||
251 | ".O c #5a4c4a", | ||
252 | ".9 c #5a595a", | ||
253 | ".A c #5a5d52", | ||
254 | ".B c #624c52", | ||
255 | ".0 c #625552", | ||
256 | "#o c #626562", | ||
257 | ".R c #626962", | ||
258 | "#. c #626d5a", | ||
259 | "#p c #626d62", | ||
260 | ".2 c #627162", | ||
261 | "#h c #6a6d62", | ||
262 | "#z c #6a7562", | ||
263 | "#w c #6a756a", | ||
264 | ".C c #73656a", | ||
265 | ".P c #73696a", | ||
266 | "#a c #737d6a", | ||
267 | ".U c #738573", | ||
268 | ".E c #7b817b", | ||
269 | "#B c #7b857b", | ||
270 | "#s c #7b897b", | ||
271 | "#n c #7b917b", | ||
272 | ".b c #838d83", | ||
273 | ".7 c #839583", | ||
274 | ".n c #8b7d7b", | ||
275 | "#g c #8b8583", | ||
276 | ".g c #8b858b", | ||
277 | ".r c #8b898b", | ||
278 | ".s c #8b8d8b", | ||
279 | ".i c #8b9183", | ||
280 | ".8 c #8b918b", | ||
281 | "#A c #8b9d8b", | ||
282 | ".S c #8ba183", | ||
283 | ".Z c #94918b", | ||
284 | ".N c #949994", | ||
285 | ".F c #949d94", | ||
286 | ".x c #94a18b", | ||
287 | ".v c #94a194", | ||
288 | ".Y c #94aa94", | ||
289 | ".h c #9c999c", | ||
290 | ".Q c #9ca19c", | ||
291 | "#u c #9ca59c", | ||
292 | ".H c #9caa9c", | ||
293 | "#e c #9cb29c", | ||
294 | "#m c #a4b29c", | ||
295 | "#t c #a4b2a4", | ||
296 | ".M c #a4b69c", | ||
297 | "#l c #a4b6a4", | ||
298 | ".z c #a4baa4", | ||
299 | ".f c #aca5ac", | ||
300 | ".q c #acaaac", | ||
301 | "#d c #acbeac", | ||
302 | ".6 c #acc2ac", | ||
303 | ".o c #b4b2b4", | ||
304 | ".t c #b4beb4", | ||
305 | "#k c #b4c2ac", | ||
306 | ".5 c #b4cab4", | ||
307 | ".D c #bdb6bd", | ||
308 | ".G c #bdc6b4", | ||
309 | "#c c #bdceb4", | ||
310 | ".X c #bdd2bd", | ||
311 | ".4 c #bdd6bd", | ||
312 | ".1 c #c5bec5", | ||
313 | ".e c #c5c2c5", | ||
314 | ".u c #c5cac5", | ||
315 | "#b c #c5d6c5", | ||
316 | ".J c #c5dec5", | ||
317 | ".p c #cdcacd", | ||
318 | ".W c #cddecd", | ||
319 | ".L c #cde2cd", | ||
320 | ".K c #d5eacd", | ||
321 | ".V c #d5ead5", | ||
322 | ".y c #d5eed5", | ||
323 | "QtQtQtQtQtQtQtQtQtQtQtQtQtQt", | ||
324 | "QtQtQt.#.a.b.cQtQtQtQtQtQtQt", | ||
325 | "QtQt.d.e.f.g.h.i.c.j.dQt.kQt", | ||
326 | ".a.l.m.n.o.p.q.r.s.t.u.v.wQt", | ||
327 | ".x.y.z.A.B.C.D.p.q.E.F.G.H.I", | ||
328 | ".I.J.K.L.M.N.O.P.o.p.Q.R.S.T", | ||
329 | "Qt.U.V.L.W.X.Y.Z.0.P.1.s.2.3", | ||
330 | "Qt.3.X.W.4.X.5.6.7.8.9.s#.##", | ||
331 | "QtQt#a.X#b#c.5.6#d#e#f#g#h#i", | ||
332 | "QtQtQt#j.7#k.6#d#l#m#n#o#p#q", | ||
333 | "QtQtQtQt.k#r#s#m#t.H#u#v#w#x", | ||
334 | "QtQtQtQtQtQt.k#y#z.v#A#B#C#x", | ||
335 | "QtQtQtQtQtQtQtQt.k#D.w#s#E.k", | ||
336 | "QtQtQtQtQtQtQtQtQtQtQt#x#FQt"}; | ||
337 | |||
338 | // exit ZSafe and clear the clipboard for security reasons | ||
339 | void ZSafe::exitZs (int ec) | ||
340 | { | ||
341 | QClipboard *cb = QApplication::clipboard(); | ||
342 | cb->clear(); | ||
343 | |||
344 | exit (ec); | ||
345 | } | ||
346 | |||
347 | |||
348 | // save the configuration into the file | ||
349 | void ZSafe::saveConf () | ||
350 | { | ||
351 | if (conf) | ||
352 | { | ||
353 | delete conf; | ||
354 | |||
355 | #ifdef DESKTOP | ||
356 | #ifndef WIN32 | ||
357 | conf = new QSettings (); | ||
358 | conf->insertSearchPath (QSettings::Unix, QDir::homeDirPath()); | ||
359 | #else | ||
360 | conf = new QSettings (cfgFile); | ||
361 | conf->insertSearchPath (QSettings::Unix, cfgFile); | ||
362 | #endif | ||
363 | #else | ||
364 | conf = new Config (cfgFile, Config::File); | ||
365 | conf->setGroup ("zsafe"); | ||
366 | #endif | ||
367 | } | ||
368 | } | ||
369 | |||
370 | |||
371 | /* | ||
372 | * Constructs a ZSafe which is a child of 'parent', with the | ||
373 | * name 'name' and widget flags set to 'f' | ||
374 | * | ||
375 | * The dialog will by default be modeless, unless you set 'modal' to | ||
376 | * TRUE to construct a modal dialog. | ||
377 | */ | ||
378 | ZSafe::ZSafe( QWidget* parent, const char* name, bool modal, WFlags fl ) | ||
379 | : QDialog( parent, name, modal, fl ) | ||
380 | { | ||
381 | IsCut = false; | ||
382 | IsCopy = false; | ||
383 | modified = false; | ||
384 | |||
385 | // set the config file | ||
386 | cfgFile=QDir::homeDirPath(); | ||
387 | cfgFile += "/.zsafe.cfg"; | ||
388 | // set the icon path | ||
389 | QString qpedir ((const char *)getenv("QPEDIR")); | ||
390 | #ifdef DESKTOP | ||
391 | iconPath = QDir::homeDirPath() + "/pics/"; | ||
392 | #else | ||
393 | if (qpedir.isEmpty()) | ||
394 | iconPath = "/home/QtPalmtop/pics/"; | ||
395 | else | ||
396 | iconPath = qpedir + "/pics/"; | ||
397 | #endif | ||
398 | |||
399 | // create a zsafe configuration object | ||
400 | #ifdef DESKTOP | ||
401 | #ifndef WIN32 | ||
402 | conf = new QSettings (); | ||
403 | conf->insertSearchPath (QSettings::Unix, QDir::homeDirPath()); | ||
404 | #else | ||
405 | conf = new QSettings (cfgFile); | ||
406 | conf->insertSearchPath (QSettings::Unix, cfgFile); | ||
407 | #endif | ||
408 | #else | ||
409 | conf = new Config (cfgFile, Config::File); | ||
410 | conf->setGroup ("zsafePrefs"); | ||
411 | #endif | ||
412 | #ifdef DESKTOP | ||
413 | // #ifndef WIN32 | ||
414 | expandTree = conf->readBoolEntry(APP_KEY+"expandTree", false); | ||
415 | // #endif | ||
416 | #else | ||
417 | expandTree = conf->readNumEntry(APP_KEY+"expandTree", 0); | ||
418 | #endif | ||
419 | #ifndef DESKTOP | ||
420 | conf->setGroup ("zsafe"); | ||
421 | #endif | ||
422 | |||
423 | QPixmap copy_img((const char**) copy_xpm); | ||
424 | QPixmap cut_img((const char**) cut_xpm); | ||
425 | QPixmap edit_img((const char**) edit_xpm); | ||
426 | QPixmap editdelete_img((const char**) editdelete_xpm); | ||
427 | QPixmap find_img((const char**) find_xpm); | ||
428 | QPixmap folder_open_img((const char**) folder_open_xpm); | ||
429 | QPixmap help_icon_img((const char**) help_icon_xpm); | ||
430 | QPixmap new_img((const char**) new_xpm); | ||
431 | QPixmap paste_img((const char**) paste_xpm); | ||
432 | QPixmap quit_icon_img((const char**) quit_icon_xpm); | ||
433 | QPixmap save_img((const char**) save_xpm); | ||
434 | QPixmap trash_img((const char**) trash_xpm); | ||
435 | QPixmap expand_img((const char**) expand_xpm); | ||
436 | QPixmap export_img((const char**) export_xpm); | ||
437 | QPixmap import_img((const char**) import_xpm); | ||
438 | |||
439 | QPixmap bank_cards( ( const char** ) bank_cards_data ); | ||
440 | QPixmap passwords( ( const char** ) passwords_data ); | ||
441 | QPixmap software( ( const char** ) software_data ); | ||
442 | QPixmap general( ( const char** ) general_data ); | ||
443 | if ( !name ) | ||
444 | setName( "ZSafe" ); | ||
445 | |||
446 | #ifdef DESKTOP | ||
447 | #ifdef WIN32 | ||
448 | setGeometry(100, 150, DeskW, DeskH-30 ); | ||
449 | #else | ||
450 | resize( DeskW, DeskH-30 ); | ||
451 | #endif | ||
452 | // setMinimumSize( QSize( DeskW, DeskH-30 ) ); | ||
453 | // setMaximumSize( QSize( DeskW, DeskH-30 ) ); | ||
454 | #else | ||
455 | resize( DeskW, DeskH-30 ); | ||
456 | // setMinimumSize( QSize( DeskW, DeskH-30 ) ); | ||
457 | // setMaximumSize( QSize( 440, 290 ) ); | ||
458 | // setMaximumSize( QSize( DeskW+400, DeskH+200 ) ); | ||
459 | #endif | ||
460 | // setCaption( tr( "ZSafe" ) ); | ||
461 | |||
462 | filename = conf->readEntry(APP_KEY+"document"); | ||
463 | if (filename.isEmpty() || filename.isNull()) | ||
464 | { | ||
465 | |||
466 | // check if the directory application exists, if not | ||
467 | // create it | ||
468 | // #ifndef WIN32 | ||
469 | // QString d1("Documents/application"); | ||
470 | // #else | ||
471 | QString d1(QDir::homeDirPath() + "/Documents/application"); | ||
472 | // #endif | ||
473 | QDir pd1(d1); | ||
474 | if (!pd1.exists()) | ||
475 | { | ||
476 | QDir pd1("Documents"); | ||
477 | if (!pd1.mkdir("application", FALSE)) | ||
478 | { | ||
479 | QMessageBox::critical( 0, tr("ZSafe"), | ||
480 | tr("Can't create directory\n%1\n\nZSafe will now exit.").arg(d1)); | ||
481 | exitZs (1); | ||
482 | } | ||
483 | } | ||
484 | // #ifndef WIN32 | ||
485 | // QString d2("Documents/application/zsafe"); | ||
486 | // #else | ||
487 | QString d2(QDir::homeDirPath() + "/Documents/application/zsafe"); | ||
488 | // #endif | ||
489 | QDir pd2(d2); | ||
490 | if (!pd2.exists()) | ||
491 | { | ||
492 | QDir pd2("Documents/application"); | ||
493 | if (!pd2.mkdir("zsafe", FALSE)) | ||
494 | { | ||
495 | QMessageBox::critical( 0, tr("ZSafe"), | ||
496 | tr("Can't create directory\n%1\n\nZSafe will now exit.").arg(d2)); | ||
497 | exitZs (1); | ||
498 | } | ||
499 | } | ||
500 | |||
501 | |||
502 | // set the default filename | ||
503 | filename=d2 + "/passwords.zsf"; | ||
504 | |||
505 | // save the current filename to the config file | ||
506 | conf->writeEntry(APP_KEY+"document", filename); | ||
507 | saveConf(); | ||
508 | } | ||
509 | |||
510 | //if (filename == "INVALIDPWD") | ||
511 | //filename = ""; | ||
512 | |||
513 | QString ti = filename.right (filename.length() - filename.findRev ('/') - 1); | ||
514 | #ifdef WIN32 | ||
515 | this->setCaption("Qt ZSafe: " + ti); | ||
516 | #else | ||
517 | this->setCaption("ZSafe: " + ti); | ||
518 | #endif | ||
519 | |||
520 | selectedItem = NULL; | ||
521 | lastSearchedCategory = NULL; | ||
522 | lastSearchedItem = NULL; | ||
523 | lastSearchedName = ""; | ||
524 | lastSearchedUsername = ""; | ||
525 | lastSearchedComment = ""; | ||
526 | |||
527 | infoForm = new InfoForm(); | ||
528 | categoryDialog = NULL; | ||
529 | |||
530 | // add a menu bar | ||
531 | QMenuBar *menu = new QMenuBar( this ); | ||
532 | |||
533 | // add file menu | ||
534 | // QPopupMenu *file = new QPopupMenu( this ); | ||
535 | file = new QPopupMenu( this ); | ||
536 | |||
537 | // #ifdef DESKTOP | ||
538 | file->insertItem( new_img, tr("&New document"), this, SLOT(newDocument()) ); | ||
539 | file->insertItem( folder_open_img, tr("&Open document"), this, SLOT(loadDocument()) ); | ||
540 | file->insertItem( save_img, tr("&Save document as .."), this, SLOT(saveDocumentAs()) ); | ||
541 | file->insertSeparator(); | ||
542 | // #endif | ||
543 | |||
544 | file->insertItem( save_img, tr("&Save document"), this, SLOT(saveDocumentWithoutPwd()) ); | ||
545 | file->insertItem( save_img, tr("S&ave document with new Password"), this, | ||
546 | SLOT(saveDocumentWithPwd()) ); | ||
547 | file->insertSeparator(); | ||
548 | file->insertItem( export_img, tr("&Export text file"), this, SLOT(writeAllEntries()) ); | ||
549 | file->insertItem( import_img, tr("&Import text file"), this, SLOT(readAllEntries()) ); | ||
550 | file->insertItem( trash_img, tr("&Remove text file"), this, SLOT(removeAsciiFile()) ); | ||
551 | file->insertSeparator(); | ||
552 | file->insertItem( expand_img, tr("&Open entries expanded"), this, | ||
553 | SLOT(setExpandFlag()), 0, 'o'); | ||
554 | file->setItemChecked('o', expandTree); | ||
555 | file->insertSeparator(); | ||
556 | file->insertItem( quit_icon_img, tr("E&xit"), this, SLOT(quitMe()) ); | ||
557 | menu->insertItem( tr("&File"), file ); | ||
558 | |||
559 | QPopupMenu *cat = new QPopupMenu( this ); | ||
560 | cat->insertItem( new_img, tr("&New"), this, SLOT(addCategory()) ); | ||
561 | cat->insertItem( edit_img, tr("&Edit"), this, SLOT(editCategory()) ); | ||
562 | cat->insertItem( trash_img, tr("&Delete"), this, SLOT(delCategory()) ); | ||
563 | menu->insertItem( tr("&Category"), cat ); | ||
564 | |||
565 | QPopupMenu *it = new QPopupMenu( this ); | ||
566 | it->insertItem( cut_img, tr("&Cut"), this, SLOT(cutItem()) ); | ||
567 | it->insertItem( copy_img, tr("C&opy"), this, SLOT(copyItem()) ); | ||
568 | it->insertItem( paste_img, tr("&Paste"), this, SLOT(pasteItem()) ); | ||
569 | it->insertSeparator(); | ||
570 | it->insertItem( new_img, tr("&New"), this, SLOT(newPwd()) ); | ||
571 | it->insertItem( edit_img, tr("&Edit"), this, SLOT(editPwd()) ); | ||
572 | it->insertItem( trash_img, tr("&Delete"), this, SLOT(deletePwd()) ); | ||
573 | it->insertItem( find_img, tr("&Search"), this, SLOT(findPwd()) ); | ||
574 | menu->insertItem( tr("&Entry"), it ); | ||
575 | |||
576 | QPopupMenu *help = new QPopupMenu( this ); | ||
577 | help->insertItem( help_icon_img, tr("&About"), this, SLOT(about()) ); | ||
578 | menu->insertItem( tr("&Help"), help ); | ||
579 | |||
580 | // toolbar icons | ||
581 | |||
582 | New = new QToolButton( menu, "New" ); | ||
583 | New->setGeometry( QRect( DeskW-84, 2, 20, 20 ) ); | ||
584 | New->setMouseTracking( TRUE ); | ||
585 | New->setText( tr( "" ) ); | ||
586 | New->setPixmap( new_img ); | ||
587 | QToolTip::add( New, tr( "New entry" ) ); | ||
588 | |||
589 | Edit = new QToolButton( menu, "Edit" ); | ||
590 | Edit->setGeometry( QRect( DeskW-64, 2, 20, 20 ) ); | ||
591 | Edit->setText( tr( "" ) ); | ||
592 | Edit->setPixmap( edit_img ); | ||
593 | QToolTip::add( Edit, tr( "Edit category or entry" ) ); | ||
594 | |||
595 | Delete = new QToolButton( menu, "Delete" ); | ||
596 | Delete->setGeometry( QRect( DeskW-44, 2, 20, 20 ) ); | ||
597 | Delete->setText( tr( "" ) ); | ||
598 | Delete->setPixmap( trash_img ); | ||
599 | QToolTip::add( Delete, tr( "Delete category or entry" ) ); | ||
600 | |||
601 | Find = new QToolButton( menu, "Find" ); | ||
602 | Find->setGeometry( QRect( DeskW-24, 2, 20, 20 ) ); | ||
603 | Find->setText( tr( "" ) ); | ||
604 | Find->setPixmap( find_img ); | ||
605 | QToolTip::add( Find, tr( "Find entry" ) ); | ||
606 | |||
607 | /* | ||
608 | QBoxLayout * h = new QHBoxLayout( this ); | ||
609 | h->addWidget (menu); | ||
610 | h->addWidget (New); | ||
611 | h->addWidget (Edit); | ||
612 | h->addWidget (Delete); | ||
613 | h->addWidget (Find); | ||
614 | */ | ||
615 | |||
616 | ListView = new ZListView( this, "ListView" ); | ||
617 | ListView->addColumn( tr( "Name" ) ); | ||
618 | ListView->addColumn( tr( "Field 2" ) ); | ||
619 | ListView->addColumn( tr( "Field 3" ) ); | ||
620 | ListView->addColumn( tr( "Comment" ) ); | ||
621 | ListView->addColumn( tr( "Field 4" ) ); | ||
622 | ListView->addColumn( tr( "Field 5" ) ); | ||
623 | ListView->setAllColumnsShowFocus(TRUE); | ||
624 | |||
625 | #ifdef DESKTOP | ||
626 | ListView->setResizePolicy(QScrollView::AutoOneFit); | ||
627 | // ListView->setGeometry( QRect( 0, 22, this->width(), this->height() - 30 ) ); | ||
628 | #else | ||
629 | ListView->setResizePolicy(QScrollView::AutoOneFit); | ||
630 | // ListView->setGeometry( QRect( 0, 22, | ||
631 | // this->width(), this->height() - 30 ) ); | ||
632 | // ListView->setMaximumSize( QSize( 440, 290 ) ); | ||
633 | #endif | ||
634 | ListView->setVScrollBarMode( QListView::Auto ); | ||
635 | |||
636 | QBoxLayout * l = new QVBoxLayout( this ); | ||
637 | l->addWidget (menu); | ||
638 | l->addWidget (ListView); | ||
639 | |||
640 | #ifndef DESKTOP | ||
641 | // start a timer (100 ms) to load the default document | ||
642 | docuTimer.start( 100, true ); | ||
643 | connect( &docuTimer, SIGNAL(timeout()), SLOT( slotLoadDocu() ) ); | ||
644 | raiseFlag = true; | ||
645 | connect( &raiseTimer, SIGNAL(timeout()), SLOT( slotRaiseTimer() ) ); | ||
646 | #else | ||
647 | // open the default document | ||
648 | openDocument(filename); | ||
649 | #endif | ||
650 | |||
651 | // signals and slots connections for QTollButton | ||
652 | connect( New, SIGNAL( clicked() ), this, SLOT( newPwd() ) ); | ||
653 | connect( Edit, SIGNAL( clicked() ), this, SLOT( editPwd() ) ); | ||
654 | connect( Delete, SIGNAL( clicked() ), this, SLOT( deletePwd() ) ); | ||
655 | connect( Find, SIGNAL( clicked() ), this, SLOT( findPwd() ) ); | ||
656 | // signals and slots connections for QListView | ||
657 | connect( ListView, SIGNAL( selectionChanged( QListViewItem* ) ), | ||
658 | this, SLOT( listViewSelected( QListViewItem* ) ) ); | ||
659 | connect( ListView, SIGNAL( doubleClicked( QListViewItem* ) ), | ||
660 | this, SLOT( showInfo( QListViewItem* ) ) ); | ||
661 | connect( ListView, SIGNAL( returnPressed( QListViewItem* ) ), | ||
662 | this, SLOT( showInfo( QListViewItem* ) ) ); | ||
663 | |||
664 | } | ||
665 | |||
666 | const QColor *ZSafe::evenRowColor = &Qt::white; | ||
667 | // const QColor *ZSafe::oddRowColor = &Qt::lightGray; | ||
668 | const QColor *ZSafe::oddRowColor = new QColor(216,240,255); | ||
669 | |||
670 | /* | ||
671 | * Destroys the object and frees any allocated resources | ||
672 | */ | ||
673 | ZSafe::~ZSafe() | ||
674 | { | ||
675 | // no need to delete child widgets, Qt does it all for us | ||
676 | quitMe(); | ||
677 | } | ||
678 | |||
679 | // load the default document | ||
680 | void ZSafe::slotLoadDocu() | ||
681 | { | ||
682 | openDocument (filename); | ||
683 | } | ||
684 | |||
685 | void ZSafe::deletePwd() | ||
686 | { | ||
687 | |||
688 | if (!selectedItem) | ||
689 | return; | ||
690 | if (!isCategory(selectedItem)) | ||
691 | { | ||
692 | switch( QMessageBox::information( this, tr("ZSafe"), | ||
693 | tr("Do you want to delete?"), | ||
694 | tr("&Delete"), tr("D&on't Delete"), | ||
695 | 0 // Enter == button 0 | ||
696 | ) ) { // Escape == button 2 | ||
697 | case 0: // Delete clicked, Alt-S or Enter pressed. | ||
698 | // Delete | ||
699 | modified = true; | ||
700 | selectedItem->parent()->takeItem(selectedItem); | ||
701 | selectedItem = NULL; | ||
702 | break; | ||
703 | case 1: // Don't delete | ||
704 | break; | ||
705 | } | ||
706 | } | ||
707 | else | ||
708 | { | ||
709 | delCategory(); | ||
710 | } | ||
711 | } | ||
712 | |||
713 | void ZSafe::editPwd() | ||
714 | { | ||
715 | if (!selectedItem) | ||
716 | return; | ||
717 | if (!isCategory(selectedItem)) | ||
718 | { | ||
719 | // open the 'New Entry' dialog | ||
720 | NewDialog *dialog = new NewDialog(this, tr("Edit Entry"), TRUE); | ||
721 | #ifdef WIN32 | ||
722 | dialog->setCaption ("Qt " + tr("Edit Entry")); | ||
723 | dialog->setGeometry(200, 250, 220, 310 ); | ||
724 | #endif | ||
725 | |||
726 | // set the labels | ||
727 | dialog->Name->setText(getFieldLabel (selectedItem, "1", tr("Name"))); | ||
728 | dialog->Username->setText(getFieldLabel (selectedItem, "2", tr("Username"))); | ||
729 | dialog->Password->setText(getFieldLabel (selectedItem, "3", tr("Password"))); | ||
730 | dialog->Comment->setText(getFieldLabel (selectedItem, "4", tr("Comment"))); | ||
731 | dialog->Field5Label->setText(getFieldLabel (selectedItem,"5", tr("Field 4"))); | ||
732 | dialog->Field6Label->setText(getFieldLabel (selectedItem,"6", tr("Field 5"))); | ||
733 | |||
734 | // set the fields | ||
735 | dialog->NameField->setText(selectedItem->text (0)); | ||
736 | dialog->UsernameField->setText(selectedItem->text (1)); | ||
737 | dialog->PasswordField->setText(selectedItem->text (2)); | ||
738 | QString comment = selectedItem->text (3); | ||
739 | comment.replace (QRegExp("<br>"), "\n"); | ||
740 | dialog->Field5->setText(selectedItem->text (4)); | ||
741 | dialog->Field6->setText(selectedItem->text (5)); | ||
742 | dialog->CommentField->insertLine(comment); | ||
743 | dialog->CommentField->setCursorPosition(0,0); | ||
744 | #ifdef DESKTOP | ||
745 | #ifndef WIN32 | ||
746 | dialog->show(); | ||
747 | #endif | ||
748 | #else | ||
749 | dialog->showMaximized(); | ||
750 | #endif | ||
751 | DialogCode result = (DialogCode) dialog->exec(); | ||
752 | |||
753 | #ifdef DESKTOP | ||
754 | result = Accepted; | ||
755 | #endif | ||
756 | if (result == Accepted) | ||
757 | { | ||
758 | modified = true; | ||
759 | // edit the selected item | ||
760 | QString name = dialog->NameField->text(); | ||
761 | selectedItem->setText (0, tr (name)); | ||
762 | QString user = dialog->UsernameField->text(); | ||
763 | selectedItem->setText (1, tr (user)); | ||
764 | QString pwd = dialog->PasswordField->text(); | ||
765 | selectedItem->setText (2, tr (pwd)); | ||
766 | QString comment = dialog->CommentField->text(); | ||
767 | comment.replace (QRegExp("\n"), "<br>"); | ||
768 | selectedItem->setText (3, tr (comment)); | ||
769 | QString f5 = dialog->Field5->text(); | ||
770 | selectedItem->setText (4, tr (f5)); | ||
771 | QString f6 = dialog->Field6->text(); | ||
772 | selectedItem->setText (5, tr (f6)); | ||
773 | } | ||
774 | |||
775 | delete dialog; | ||
776 | } | ||
777 | else | ||
778 | { | ||
779 | editCategory(); | ||
780 | } | ||
781 | } | ||
782 | |||
783 | void ZSafe::newPwd() | ||
784 | { | ||
785 | if (!selectedItem) | ||
786 | return; | ||
787 | |||
788 | if (!isCategory(selectedItem)) | ||
789 | selectedItem = selectedItem->parent(); | ||
790 | |||
791 | if (isCategory(selectedItem)) | ||
792 | { | ||
793 | QString cat = selectedItem->text(0); | ||
794 | |||
795 | // open the 'New Entry' dialog | ||
796 | NewDialog *dialog = new NewDialog(this, tr("New Entry"), TRUE); | ||
797 | #ifdef WIN32 | ||
798 | dialog->setCaption ("Qt " + tr("New Entry")); | ||
799 | dialog->setGeometry(200, 250, 220, 310 ); | ||
800 | #endif | ||
801 | // set the labels | ||
802 | dialog->Name->setText(getFieldLabel (selectedItem, "1", tr("Name"))); | ||
803 | dialog->Username->setText(getFieldLabel (selectedItem, "2", tr("Username"))); | ||
804 | dialog->Password->setText(getFieldLabel (selectedItem, "3", tr("Password"))); | ||
805 | dialog->Comment->setText(getFieldLabel (selectedItem, "4", tr("Comment"))); | ||
806 | dialog->Field5Label->setText(getFieldLabel (selectedItem,"5", tr("Field 4"))); | ||
807 | dialog->Field6Label->setText(getFieldLabel (selectedItem,"6", tr("Field 5"))); | ||
808 | retype: | ||
809 | #ifdef DESKTOP | ||
810 | #ifndef WIN32 | ||
811 | dialog->show(); | ||
812 | #endif | ||
813 | #else | ||
814 | dialog->showMaximized(); | ||
815 | #endif | ||
816 | DialogCode result = (DialogCode) dialog->exec(); | ||
817 | #ifdef DESKTOP | ||
818 | result = Accepted; | ||
819 | #endif | ||
820 | |||
821 | if (result == Accepted) | ||
822 | { | ||
823 | |||
824 | QString name = dialog->NameField->text(); | ||
825 | if (cat == name) | ||
826 | { | ||
827 | QMessageBox::critical( 0, tr("ZSafe"), | ||
828 | tr("Entry name must be different\nfrom the category name.") ); | ||
829 | goto retype; // it's not a good programming style :-) | ||
830 | } | ||
831 | |||
832 | modified = true; | ||
833 | // add the new item | ||
834 | QListViewItem *i = new ShadedListItem (0, selectedItem); | ||
835 | i->setOpen (TRUE); | ||
836 | |||
837 | i->setText (0, tr (name)); | ||
838 | QString user = dialog->UsernameField->text(); | ||
839 | i->setText (1, tr (user)); | ||
840 | QString pwd = dialog->PasswordField->text(); | ||
841 | i->setText (2, tr (pwd)); | ||
842 | QString comment = dialog->CommentField->text(); | ||
843 | comment.replace (QRegExp("\n"), "<br>"); | ||
844 | i->setText (3, tr (comment)); | ||
845 | QString f5 = dialog->Field5->text(); | ||
846 | i->setText (4, tr (f5)); | ||
847 | QString f6 = dialog->Field6->text(); | ||
848 | i->setText (5, tr (f6)); | ||
849 | } | ||
850 | |||
851 | delete dialog; | ||
852 | } | ||
853 | } | ||
854 | |||
855 | void ZSafe::findPwd() | ||
856 | { | ||
857 | |||
858 | // open the 'Search' dialog | ||
859 | SearchDialog *dialog = new SearchDialog(this, tr("Search"), TRUE); | ||
860 | #ifdef WIN32 | ||
861 | dialog->setCaption ("Qt " + tr("Search")); | ||
862 | #endif | ||
863 | |||
864 | #ifdef DESKTOP | ||
865 | #endif | ||
866 | if (lastSearchedName) | ||
867 | dialog->NameField->setText(lastSearchedName); | ||
868 | else | ||
869 | dialog->NameField->setText(""); | ||
870 | if (lastSearchedUsername) | ||
871 | dialog->UsernameField->setText(lastSearchedUsername); | ||
872 | else | ||
873 | dialog->UsernameField->setText(""); | ||
874 | if (lastSearchedComment) | ||
875 | dialog->CommentField->setText(lastSearchedComment); | ||
876 | else | ||
877 | dialog->CommentField->setText(""); | ||
878 | DialogCode result = (DialogCode) dialog->exec(); | ||
879 | #ifdef DESKTOP | ||
880 | result = Accepted; | ||
881 | #endif | ||
882 | |||
883 | QString name; | ||
884 | QString username; | ||
885 | QString comment; | ||
886 | if (result == Accepted) | ||
887 | { | ||
888 | name = dialog->NameField->text(); | ||
889 | username = dialog->UsernameField->text(); | ||
890 | comment = dialog->CommentField->text(); | ||
891 | qWarning (name); | ||
892 | } | ||
893 | else | ||
894 | { | ||
895 | delete dialog; | ||
896 | return; | ||
897 | } | ||
898 | |||
899 | if (!name.isEmpty() && name != lastSearchedName || | ||
900 | lastSearchedName.isEmpty() && !name.isEmpty()) | ||
901 | { | ||
902 | // set search at the beginning if a new name is given | ||
903 | lastSearchedCategory = NULL; | ||
904 | lastSearchedItem = NULL; | ||
905 | } | ||
906 | lastSearchedName = name; | ||
907 | if (!username.isEmpty() && username != lastSearchedUsername || | ||
908 | lastSearchedUsername.isEmpty() && !username.isEmpty()) | ||
909 | { | ||
910 | // set search at the beginning if a new name is given | ||
911 | lastSearchedCategory = NULL; | ||
912 | lastSearchedItem = NULL; | ||
913 | } | ||
914 | lastSearchedUsername = username; | ||
915 | if (!comment.isEmpty() && comment != lastSearchedComment || | ||
916 | lastSearchedComment.isEmpty() && !comment.isEmpty()) | ||
917 | { | ||
918 | // set search at the beginning if a new name is given | ||
919 | lastSearchedCategory = NULL; | ||
920 | lastSearchedItem = NULL; | ||
921 | } | ||
922 | lastSearchedComment = comment; | ||
923 | |||
924 | ListView->clearSelection(); | ||
925 | |||
926 | bool found=FALSE; | ||
927 | // step through all categories | ||
928 | QListViewItem *i; | ||
929 | if (lastSearchedCategory) | ||
930 | i = lastSearchedCategory; | ||
931 | else | ||
932 | i = ListView->firstChild(); | ||
933 | for (; | ||
934 | i != NULL; | ||
935 | i = i->nextSibling()) | ||
936 | { | ||
937 | qWarning (i->text(0)); | ||
938 | i->setSelected(FALSE); | ||
939 | |||
940 | // step through all subitems | ||
941 | QListViewItem *si; | ||
942 | if (lastSearchedItem) | ||
943 | si = lastSearchedItem; | ||
944 | else | ||
945 | si = i->firstChild(); | ||
946 | // for (si = i->firstChild(); | ||
947 | for (; | ||
948 | si != NULL; | ||
949 | si = si->nextSibling()) | ||
950 | { | ||
951 | qWarning (si->text(0)); | ||
952 | if (si->isSelected()) | ||
953 | si->setSelected(FALSE); | ||
954 | // ListView->repaintItem(si); | ||
955 | |||
956 | bool n=TRUE; | ||
957 | bool u=TRUE; | ||
958 | bool c=TRUE; | ||
959 | if (!name.isEmpty()) | ||
960 | n = (si->text(0)).contains (name, FALSE); | ||
961 | if (!username.isEmpty()) | ||
962 | u = (si->text(1)).contains (username, FALSE); | ||
963 | if (!comment.isEmpty()) | ||
964 | c = (si->text(3)).contains (comment, FALSE); | ||
965 | |||
966 | if ((n && u && c ) && !found) | ||
967 | { | ||
968 | qWarning ("Found"); | ||
969 | selectedItem = si; | ||
970 | si->setSelected(TRUE); | ||
971 | ListView->setCurrentItem(si); | ||
972 | ListView->ensureItemVisible(si); | ||
973 | ListView->triggerUpdate(); | ||
974 | |||
975 | lastSearchedCategory = i; | ||
976 | // set to the next item | ||
977 | lastSearchedItem = si->nextSibling(); | ||
978 | if (!lastSearchedItem) | ||
979 | { | ||
980 | // no next item within category -> set next category | ||
981 | lastSearchedCategory = i->nextSibling(); | ||
982 | if (!lastSearchedCategory) | ||
983 | lastSearchedItem = NULL; // END | ||
984 | } | ||
985 | |||
986 | found = TRUE; | ||
987 | delete dialog; | ||
988 | update(); | ||
989 | return; | ||
990 | } | ||
991 | } | ||
992 | lastSearchedCategory = i->nextSibling(); | ||
993 | lastSearchedItem = NULL; | ||
994 | } | ||
995 | lastSearchedCategory = NULL; | ||
996 | lastSearchedItem = NULL; | ||
997 | delete dialog; | ||
998 | update(); | ||
999 | QMessageBox::information( this, tr("ZSafe"), | ||
1000 | tr("Entry not found"), tr("&OK"), 0); | ||
1001 | |||
1002 | } | ||
1003 | |||
1004 | QString ZSafe::getFieldLabel (QListViewItem *_item, QString field, QString def) | ||
1005 | { | ||
1006 | QString category; | ||
1007 | if (_item) | ||
1008 | { | ||
1009 | if (isCategory(_item)) | ||
1010 | { | ||
1011 | category = _item->text(0); | ||
1012 | } | ||
1013 | else | ||
1014 | { | ||
1015 | QListViewItem *cat = _item->parent(); | ||
1016 | category = cat->text(0); | ||
1017 | } | ||
1018 | } | ||
1019 | else | ||
1020 | { | ||
1021 | return def; | ||
1022 | } | ||
1023 | |||
1024 | QString app_key = APP_KEY; | ||
1025 | #ifndef DESKTOP | ||
1026 | #ifndef WIN32 | ||
1027 | conf->setGroup ("fieldDefs"); | ||
1028 | #endif | ||
1029 | #else | ||
1030 | #ifndef WIN32 | ||
1031 | app_key += "/fieldDefs/"; | ||
1032 | #endif | ||
1033 | #endif | ||
1034 | // #ifndef WIN32 | ||
1035 | QString label = conf->readEntry(app_key+category+"-field"+field,def); | ||
1036 | // #else | ||
1037 | // QString label(def); | ||
1038 | // #endif | ||
1039 | |||
1040 | #ifndef DESKTOP | ||
1041 | conf->setGroup ("zsafe"); | ||
1042 | #endif | ||
1043 | return label; | ||
1044 | } | ||
1045 | |||
1046 | QString ZSafe::getFieldLabel (QString category, QString field, QString def) | ||
1047 | { | ||
1048 | QString app_key = APP_KEY; | ||
1049 | #ifndef DESKTOP | ||
1050 | conf->setGroup ("fieldDefs"); | ||
1051 | #else | ||
1052 | #ifndef WIN32 | ||
1053 | app_key += "/fieldDefs/"; | ||
1054 | #endif | ||
1055 | #endif | ||
1056 | // #ifndef WIN32 | ||
1057 | QString label = conf->readEntry(app_key+category+"-field"+field, | ||
1058 | def); | ||
1059 | // #else | ||
1060 | // QString label(def); | ||
1061 | // #endif | ||
1062 | #ifndef DESKTOP | ||
1063 | conf->setGroup ("zsafe"); | ||
1064 | #endif | ||
1065 | return label; | ||
1066 | } | ||
1067 | |||
1068 | void ZSafe::showInfo( QListViewItem *_item) | ||
1069 | { | ||
1070 | if (!_item) | ||
1071 | return; | ||
1072 | if (selectedItem != NULL) | ||
1073 | selectedItem->setSelected(FALSE); | ||
1074 | |||
1075 | selectedItem = _item; | ||
1076 | selectedItem->setSelected(TRUE); | ||
1077 | |||
1078 | if (!isCategory(_item)) | ||
1079 | { | ||
1080 | /* | ||
1081 | QString label=selectedItem->text(0); | ||
1082 | label+="\n"; | ||
1083 | label+=selectedItem->text(1); | ||
1084 | label+="\n"; | ||
1085 | label+=selectedItem->text(2); | ||
1086 | label+="\n"; | ||
1087 | label+=selectedItem->text(3); | ||
1088 | */ | ||
1089 | |||
1090 | QString text; | ||
1091 | QString entry; | ||
1092 | |||
1093 | text = "<html><body><div align=""center""><u><b>"; | ||
1094 | text += selectedItem->text(0); | ||
1095 | text += "</b></u><br></div><br>"; | ||
1096 | |||
1097 | entry = selectedItem->text(1); | ||
1098 | if (!entry.isEmpty() && entry.compare(" ")) | ||
1099 | { | ||
1100 | text += "<u><b>"; | ||
1101 | text += getFieldLabel (selectedItem, "2", tr("Username")); | ||
1102 | text += ":<br></b></u><blockquote>"; | ||
1103 | text += entry; | ||
1104 | text += "</blockquote>"; | ||
1105 | // text += "<br>"; | ||
1106 | } | ||
1107 | |||
1108 | entry = selectedItem->text(2); | ||
1109 | if (!entry.isEmpty() && entry.compare(" ")) | ||
1110 | { | ||
1111 | text += "<u><b>"; | ||
1112 | text += getFieldLabel (selectedItem, "3", tr("Password")); | ||
1113 | text += ":<br> </b></u><blockquote>"; | ||
1114 | text += entry; | ||
1115 | text += "</blockquote>"; | ||
1116 | // text += "<br>"; | ||
1117 | } | ||
1118 | |||
1119 | entry = selectedItem->text(4); | ||
1120 | if (!entry.isEmpty() && entry.compare(" ")) | ||
1121 | { | ||
1122 | text += "<u><b>"; | ||
1123 | text += getFieldLabel (selectedItem, "5", tr("Field 4")); | ||
1124 | text += ":<br> </b></u><blockquote>"; | ||
1125 | text += entry; | ||
1126 | text += "</blockquote>"; | ||
1127 | // text += "<br>"; | ||
1128 | } | ||
1129 | |||
1130 | entry = selectedItem->text(5); | ||
1131 | if (!entry.isEmpty() && entry.compare(" ")) | ||
1132 | { | ||
1133 | text += "<u><b>"; | ||
1134 | text += getFieldLabel (selectedItem, "6", tr("Field 5")); | ||
1135 | text += ":<br> </b></u><blockquote>"; | ||
1136 | text += entry; | ||
1137 | text += "</blockquote>"; | ||
1138 | // text += "<br>"; | ||
1139 | } | ||
1140 | |||
1141 | entry = selectedItem->text(3); | ||
1142 | if (!entry.isEmpty() && entry.compare(" ")) | ||
1143 | { | ||
1144 | text += "<u><b>"; | ||
1145 | text += getFieldLabel (selectedItem, "4", tr("Comment")); | ||
1146 | text += ":<br> </b></u>"; | ||
1147 | QString comment = selectedItem->text(3); | ||
1148 | comment.replace (QRegExp("\n"), "<br>"); | ||
1149 | text += comment; | ||
1150 | // text += "<br>"; | ||
1151 | } | ||
1152 | |||
1153 | text += "</body></html>"; | ||
1154 | |||
1155 | infoForm->InfoText->setText(text); | ||
1156 | infoForm->hide(); | ||
1157 | #ifdef DESKTOP | ||
1158 | infoForm->show(); | ||
1159 | #else | ||
1160 | infoForm->showMaximized(); | ||
1161 | #endif | ||
1162 | |||
1163 | } | ||
1164 | } | ||
1165 | |||
1166 | void ZSafe::listViewSelected( QListViewItem *_item) | ||
1167 | { | ||
1168 | if (!_item) | ||
1169 | return; | ||
1170 | if (selectedItem != NULL) | ||
1171 | selectedItem->setSelected(FALSE); | ||
1172 | |||
1173 | selectedItem = _item; | ||
1174 | |||
1175 | #ifndef DESKTOP | ||
1176 | // set the column text dependent on the selected item | ||
1177 | ListView->setColumnText(0, getFieldLabel (selectedItem, "1", tr("Name"))); | ||
1178 | ListView->setColumnText(1, getFieldLabel (selectedItem, "2", tr("Field 2"))); | ||
1179 | ListView->setColumnText(2, getFieldLabel (selectedItem, "3", tr("Field 3"))); | ||
1180 | ListView->setColumnText(3, getFieldLabel (selectedItem, "4", tr("Comment"))); | ||
1181 | ListView->setColumnText(4, getFieldLabel (selectedItem, "5", tr("Field 4"))); | ||
1182 | ListView->setColumnText(5, getFieldLabel (selectedItem, "6", tr("Field 5"))); | ||
1183 | #endif | ||
1184 | #ifdef WIN32 | ||
1185 | // set the column text dependent on the selected item | ||
1186 | ListView->setColumnText(0, getFieldLabel (selectedItem, "1", tr("Name"))); | ||
1187 | ListView->setColumnText(1, getFieldLabel (selectedItem, "2", tr("Field 2"))); | ||
1188 | ListView->setColumnText(2, getFieldLabel (selectedItem, "3", tr("Field 3"))); | ||
1189 | ListView->setColumnText(3, getFieldLabel (selectedItem, "4", tr("Comment"))); | ||
1190 | ListView->setColumnText(4, getFieldLabel (selectedItem, "5", tr("Field 4"))); | ||
1191 | ListView->setColumnText(5, getFieldLabel (selectedItem, "6", tr("Field 5"))); | ||
1192 | #endif | ||
1193 | |||
1194 | } | ||
1195 | |||
1196 | bool ZSafe::isCategory(QListViewItem *_item) | ||
1197 | { | ||
1198 | QString categoryName = _item->text (0); | ||
1199 | if (categories.find ((const char *)categoryName)) | ||
1200 | return TRUE; | ||
1201 | else | ||
1202 | return FALSE; | ||
1203 | } | ||
1204 | |||
1205 | void ZSafe::removeAsciiFile() | ||
1206 | { | ||
1207 | // QString fn = filename + ".txt"; | ||
1208 | // open the file dialog | ||
1209 | #ifndef DESKTOP | ||
1210 | QString fn = ScQtFileEdit::getOpenFileName(this, | ||
1211 | tr ("Remove text file"), | ||
1212 | QDir::homeDirPath() + "/Documents/application/zsafe", | ||
1213 | "*.txt"); | ||
1214 | #else | ||
1215 | QString fn = QFileDialog::getOpenFileName( | ||
1216 | QDir::homeDirPath() + "/Documents/application/zsafe", | ||
1217 | "ZSafe (*.txt)", | ||
1218 | this, | ||
1219 | "ZSafe File Dialog" | ||
1220 | "Choose a text file" ); | ||
1221 | #endif | ||
1222 | |||
1223 | if (fn && fn.length() > 0 ) | ||
1224 | { | ||
1225 | QFile f( fn ); | ||
1226 | if ( !f.remove() ) | ||
1227 | { | ||
1228 | qWarning( QString("Could not remove file %1").arg(fn), | ||
1229 | 2000 ); | ||
1230 | QMessageBox::critical( 0, tr("ZSafe"), | ||
1231 | tr("Could not remove text file.") ); | ||
1232 | return; | ||
1233 | } | ||
1234 | } | ||
1235 | } | ||
1236 | |||
1237 | void ZSafe::writeAllEntries() | ||
1238 | { | ||
1239 | if (filename.isEmpty()) | ||
1240 | { | ||
1241 | QMessageBox::critical( 0, tr("ZSafe"), | ||
1242 | tr("No document defined.\nYou have to create a new document")); | ||
1243 | return; | ||
1244 | } | ||
1245 | |||
1246 | // open the file dialog | ||
1247 | #ifndef DESKTOP | ||
1248 | QString fn = ScQtFileEdit::getSaveAsFileName(this, | ||
1249 | tr ("Export text file"), | ||
1250 | QDir::homeDirPath() + "/Documents/application/zsafe", | ||
1251 | "*.txt"); | ||
1252 | #else | ||
1253 | QString fn = QFileDialog::getSaveFileName( | ||
1254 | QDir::homeDirPath() + "/Documents/application/zsafe", | ||
1255 | "ZSafe (*.txt)", | ||
1256 | this, | ||
1257 | "ZSafe File Dialog" | ||
1258 | "Choose a text file" ); | ||
1259 | #endif | ||
1260 | |||
1261 | // open the new document | ||
1262 | if (fn && fn.length() > 0 ) | ||
1263 | { | ||
1264 | QFile f( fn ); | ||
1265 | if ( !f.open( IO_WriteOnly ) ) { | ||
1266 | qWarning( QString("Could not write to file %1").arg(fn), | ||
1267 | 2000 ); | ||
1268 | QMessageBox::critical( 0, "ZSafe", | ||
1269 | QString("Could not export to text file.") ); | ||
1270 | return; | ||
1271 | } | ||
1272 | QTextStream t( &f ); | ||
1273 | |||
1274 | QListViewItem *i; | ||
1275 | // step through all categories | ||
1276 | for (i = ListView->firstChild(); | ||
1277 | i != NULL; | ||
1278 | i = i->nextSibling()) | ||
1279 | { | ||
1280 | // step through all subitems | ||
1281 | QListViewItem *si; | ||
1282 | for (si = i->firstChild(); | ||
1283 | si != NULL; | ||
1284 | si = si->nextSibling()) | ||
1285 | { | ||
1286 | QString oneEntry; | ||
1287 | oneEntry += "\""; | ||
1288 | oneEntry += i->text(0); | ||
1289 | oneEntry += "\";"; | ||
1290 | oneEntry += "\""; | ||
1291 | oneEntry += si->text(0); | ||
1292 | oneEntry += "\";"; | ||
1293 | oneEntry += "\""; | ||
1294 | oneEntry += si->text(1); | ||
1295 | oneEntry += "\";"; | ||
1296 | oneEntry += "\""; | ||
1297 | oneEntry += si->text(2); | ||
1298 | oneEntry += "\";"; | ||
1299 | oneEntry += "\""; | ||
1300 | QString comment = si->text(3); | ||
1301 | comment.replace (QRegExp("\n"), "<br>"); | ||
1302 | oneEntry += comment; | ||
1303 | oneEntry += "\";"; | ||
1304 | oneEntry += "\""; | ||
1305 | oneEntry += si->text(4); | ||
1306 | oneEntry += "\";"; | ||
1307 | oneEntry += "\""; | ||
1308 | oneEntry += si->text(5); | ||
1309 | oneEntry += "\""; | ||
1310 | // qWarning (oneEntry); | ||
1311 | t << oneEntry << endl; | ||
1312 | |||
1313 | // qWarning (si->text(0)); | ||
1314 | } | ||
1315 | } | ||
1316 | f.close(); | ||
1317 | } | ||
1318 | } | ||
1319 | |||
1320 | void ZSafe::readAllEntries() | ||
1321 | { | ||
1322 | if (filename.isEmpty()) | ||
1323 | { | ||
1324 | QMessageBox::critical( 0, tr("ZSafe"), | ||
1325 | tr("No document defined.\nYou have to create a new document")); | ||
1326 | return; | ||
1327 | } | ||
1328 | |||
1329 | // open the file dialog | ||
1330 | #ifndef DESKTOP | ||
1331 | QString fn = ScQtFileEdit::getOpenFileName(this, | ||
1332 | tr ("Import text file"), | ||
1333 | QDir::homeDirPath() + "/Documents/application/zsafe", | ||
1334 | "*.txt"); | ||
1335 | #else | ||
1336 | QString fn = QFileDialog::getOpenFileName( | ||
1337 | QDir::homeDirPath() + "/Documents/application/zsafe", | ||
1338 | "ZSafe (*.txt)", | ||
1339 | this, | ||
1340 | "ZSafe File Dialog" | ||
1341 | "Choose a text file" ); | ||
1342 | #endif | ||
1343 | |||
1344 | if (fn && fn.length() > 0 ) | ||
1345 | { | ||
1346 | QFile f( fn ); | ||
1347 | if ( !f.open( IO_ReadOnly ) ) | ||
1348 | { | ||
1349 | qWarning( QString("Could not read file %1").arg(fn), | ||
1350 | 2000 ); | ||
1351 | QMessageBox::critical( 0, "ZSafe", | ||
1352 | QString("Could not import text file.") ); | ||
1353 | return; | ||
1354 | } | ||
1355 | |||
1356 | modified = true; | ||
1357 | |||
1358 | // clear the password list | ||
1359 | selectedItem = NULL; | ||
1360 | QListViewItem *i; | ||
1361 | // step through all categories | ||
1362 | for (i = ListView->firstChild(); | ||
1363 | i != NULL; | ||
1364 | i = i->nextSibling()) | ||
1365 | { | ||
1366 | // step through all subitems | ||
1367 | QListViewItem *si; | ||
1368 | for (si = i->firstChild(); | ||
1369 | si != NULL; ) | ||
1370 | // si = si->nextSibling()) | ||
1371 | { | ||
1372 | QListViewItem *_si = si; | ||
1373 | si = si->nextSibling(); | ||
1374 | i->takeItem(_si); // remove from view list | ||
1375 | if (_si) delete _si; | ||
1376 | } | ||
1377 | } | ||
1378 | |||
1379 | qWarning ("ReadAllEntries(): "); | ||
1380 | |||
1381 | QTextStream t(&f); | ||
1382 | while ( !t.eof() ) | ||
1383 | { | ||
1384 | QString s = t.readLine(); | ||
1385 | s.replace (QRegExp("\";\""), "\"|\""); | ||
1386 | // char buffer[1024]; | ||
1387 | #ifndef WIN32 | ||
1388 | char buffer[s.length()+1]; | ||
1389 | #else | ||
1390 | char buffer[4048]; | ||
1391 | #endif | ||
1392 | strcpy (buffer, s); | ||
1393 | |||
1394 | QString name; | ||
1395 | QString user; | ||
1396 | QString password; | ||
1397 | QString comment; | ||
1398 | QString field5=""; | ||
1399 | QString field6=""; | ||
1400 | |||
1401 | // separete the entries | ||
1402 | char *i = strtok (buffer, "|"); | ||
1403 | QString category(&i[1]); | ||
1404 | category.truncate(category.length() -1); | ||
1405 | |||
1406 | int idx=0; | ||
1407 | while ((i = strtok (NULL, "|")) != NULL) | ||
1408 | { | ||
1409 | switch (idx) | ||
1410 | { | ||
1411 | case 0: | ||
1412 | name = &i[1]; | ||
1413 | name.truncate(name.length() -1); | ||
1414 | // name | ||
1415 | break; | ||
1416 | case 1: | ||
1417 | // user | ||
1418 | user = &i[1]; | ||
1419 | user.truncate(user.length() -1); | ||
1420 | break; | ||
1421 | case 2: | ||
1422 | // password | ||
1423 | password = &i[1]; | ||
1424 | password.truncate(password.length() -1); | ||
1425 | break; | ||
1426 | case 3: | ||
1427 | // comment | ||
1428 | comment = &i[1]; | ||
1429 | comment.truncate(comment.length() -1); | ||
1430 | break; | ||
1431 | case 4: | ||
1432 | // field5 | ||
1433 | field5 = &i[1]; | ||
1434 | field5.truncate(field5.length() -1); | ||
1435 | break; | ||
1436 | case 5: | ||
1437 | // field6 | ||
1438 | field6 = &i[1]; | ||
1439 | field6.truncate(field6.length() -1); | ||
1440 | break; | ||
1441 | } | ||
1442 | idx++; | ||
1443 | } | ||
1444 | |||
1445 | Category *cat= categories.find (category); | ||
1446 | if (cat) | ||
1447 | { | ||
1448 | // use the existend item | ||
1449 | QListViewItem *catItem = cat->getListItem(); | ||
1450 | if (catItem) | ||
1451 | { | ||
1452 | QListViewItem * item = new ShadedListItem( 0, catItem ); | ||
1453 | item->setText( 0, tr( name ) ); | ||
1454 | item->setText( 1, tr( user ) ); | ||
1455 | item->setText( 2, tr( password ) ); | ||
1456 | item->setText( 3, tr( comment ) ); | ||
1457 | item->setText( 4, tr( field5 ) ); | ||
1458 | item->setText( 5, tr( field6 ) ); | ||
1459 | catItem->setOpen( TRUE ); | ||
1460 | } | ||
1461 | } | ||
1462 | else | ||
1463 | { | ||
1464 | QListViewItem *catI = new ShadedListItem( 1, ListView ); | ||
1465 | // create and insert a new item | ||
1466 | QListViewItem * item = new ShadedListItem( 0, catI ); | ||
1467 | item->setText( 0, tr( name ) ); | ||
1468 | item->setText( 1, tr( user ) ); | ||
1469 | item->setText( 2, tr( password ) ); | ||
1470 | item->setText( 3, tr( comment ) ); | ||
1471 | item->setText( 4, tr( field5 ) ); | ||
1472 | item->setText( 5, tr( field6 ) ); | ||
1473 | catI->setOpen( TRUE ); | ||
1474 | |||
1475 | Category *c1 = new Category(); | ||
1476 | c1->setCategoryName(category); | ||
1477 | |||
1478 | QString icon; | ||
1479 | QString fullIconPath; | ||
1480 | QPixmap *pix; | ||
1481 | // #ifndef WIN32 | ||
1482 | icon = conf->readEntry(APP_KEY+category); | ||
1483 | // #endif | ||
1484 | bool isIconAv = false; | ||
1485 | if (!icon.isEmpty() && !icon.isNull()) | ||
1486 | { | ||
1487 | // build the full path | ||
1488 | fullIconPath = iconPath + icon; | ||
1489 | pix = new QPixmap (fullIconPath); | ||
1490 | if (pix) | ||
1491 | { | ||
1492 | QImage img = pix->convertToImage(); | ||
1493 | pix->convertFromImage(img.smoothScale(14,14)); | ||
1494 | c1->setIconName (icon); | ||
1495 | c1->setIcon (*pix); | ||
1496 | isIconAv = true; | ||
1497 | } | ||
1498 | } | ||
1499 | if (!isIconAv) | ||
1500 | { | ||
1501 | c1->setIcon (*getPredefinedIcon(category)); | ||
1502 | } | ||
1503 | c1->setListItem (catI); | ||
1504 | c1->initListItem(); | ||
1505 | categories.insert (c1->getCategoryName(), c1); | ||
1506 | } | ||
1507 | |||
1508 | } | ||
1509 | f.close(); | ||
1510 | |||
1511 | } | ||
1512 | else | ||
1513 | { | ||
1514 | } | ||
1515 | |||
1516 | } | ||
1517 | |||
1518 | #ifdef UNUSED | ||
1519 | void ZSafe::writeAllEntries() | ||
1520 | { | ||
1521 | // open the file for writing | ||
1522 | QString fn = filename + ".txt"; | ||
1523 | QFile f( fn ); | ||
1524 | if ( !f.open( IO_WriteOnly ) ) { | ||
1525 | qWarning( QString("Could not write to file %1").arg(fn), | ||
1526 | 2000 ); | ||
1527 | QMessageBox::critical( 0, tr("ZSafe"), | ||
1528 | tr("Could not export to text file.") ); | ||
1529 | return; | ||
1530 | } | ||
1531 | QTextStream t( &f ); | ||
1532 | |||
1533 | QListViewItem *i; | ||
1534 | // step through all categories | ||
1535 | for (i = ListView->firstChild(); | ||
1536 | i != NULL; | ||
1537 | i = i->nextSibling()) | ||
1538 | { | ||
1539 | // step through all subitems | ||
1540 | QListViewItem *si; | ||
1541 | for (si = i->firstChild(); | ||
1542 | si != NULL; | ||
1543 | si = si->nextSibling()) | ||
1544 | { | ||
1545 | QString oneEntry; | ||
1546 | oneEntry += "\""; | ||
1547 | oneEntry += i->text(0); | ||
1548 | oneEntry += "\";"; | ||
1549 | oneEntry += "\""; | ||
1550 | oneEntry += si->text(0); | ||
1551 | oneEntry += "\";"; | ||
1552 | oneEntry += "\""; | ||
1553 | oneEntry += si->text(1); | ||
1554 | oneEntry += "\";"; | ||
1555 | oneEntry += "\""; | ||
1556 | oneEntry += si->text(2); | ||
1557 | oneEntry += "\";"; | ||
1558 | oneEntry += "\""; | ||
1559 | // oneEntry += si->text(3); | ||
1560 | QString comment = si->text(3); | ||
1561 | comment.replace (QRegExp("\n"), "<br>"); | ||
1562 | oneEntry += comment; | ||
1563 | oneEntry += "\""; | ||
1564 | // qWarning (oneEntry); | ||
1565 | t << oneEntry << endl; | ||
1566 | |||
1567 | // qWarning (si->text(0)); | ||
1568 | } | ||
1569 | } | ||
1570 | f.close(); | ||
1571 | } | ||
1572 | |||
1573 | void ZSafe::readAllEntries() | ||
1574 | { | ||
1575 | QString fn = filename + ".txt"; | ||
1576 | QFile f( fn ); | ||
1577 | if ( !f.open( IO_ReadOnly ) ) | ||
1578 | { | ||
1579 | qWarning( QString("Could not read file %1").arg(fn), | ||
1580 | 2000 ); | ||
1581 | QMessageBox::critical( 0, tr("ZSafe"), | ||
1582 | tr("Could not import text file.") ); | ||
1583 | return; | ||
1584 | } | ||
1585 | |||
1586 | modified = true; | ||
1587 | |||
1588 | // clear the password list | ||
1589 | selectedItem = NULL; | ||
1590 | QListViewItem *i; | ||
1591 | // step through all categories | ||
1592 | for (i = ListView->firstChild(); | ||
1593 | i != NULL; | ||
1594 | i = i->nextSibling()) | ||
1595 | { | ||
1596 | // step through all subitems | ||
1597 | QListViewItem *si; | ||
1598 | for (si = i->firstChild(); | ||
1599 | si != NULL; ) | ||
1600 | // si = si->nextSibling()) | ||
1601 | { | ||
1602 | QListViewItem *_si = si; | ||
1603 | si = si->nextSibling(); | ||
1604 | i->takeItem(_si); // remove from view list | ||
1605 | if (_si) delete _si; | ||
1606 | } | ||
1607 | } | ||
1608 | |||
1609 | qWarning ("ReadAllEntries(): "); | ||
1610 | |||
1611 | QTextStream t(&f); | ||
1612 | while ( !t.eof() ) | ||
1613 | { | ||
1614 | QString s = t.readLine(); | ||
1615 | s.replace (QRegExp("\";\""), "\"|\""); | ||
1616 | // char buffer[1024]; | ||
1617 | int len=s.length()+1; | ||
1618 | #ifdef WIN32 | ||
1619 | char buffer[512]; | ||
1620 | #else | ||
1621 | char buffer[len]; | ||
1622 | #endif | ||
1623 | strcpy (buffer, s); | ||
1624 | |||
1625 | QString name; | ||
1626 | QString user; | ||
1627 | QString password; | ||
1628 | QString comment; | ||
1629 | |||
1630 | // separete the entries | ||
1631 | char *i = strtok (buffer, "|"); | ||
1632 | QString category(&i[1]); | ||
1633 | category.truncate(category.length() -1); | ||
1634 | |||
1635 | int idx=0; | ||
1636 | while (i = strtok (NULL, "|")) | ||
1637 | { | ||
1638 | switch (idx) | ||
1639 | { | ||
1640 | case 0: | ||
1641 | name = &i[1]; | ||
1642 | name.truncate(name.length() -1); | ||
1643 | // name | ||
1644 | break; | ||
1645 | case 1: | ||
1646 | // user | ||
1647 | user = &i[1]; | ||
1648 | user.truncate(user.length() -1); | ||
1649 | break; | ||
1650 | case 2: | ||
1651 | // password | ||
1652 | password = &i[1]; | ||
1653 | password.truncate(password.length() -1); | ||
1654 | break; | ||
1655 | case 3: | ||
1656 | // comment | ||
1657 | comment = &i[1]; | ||
1658 | comment.truncate(comment.length() -1); | ||
1659 | break; | ||
1660 | } | ||
1661 | idx++; | ||
1662 | } | ||
1663 | |||
1664 | Category *cat= categories.find (category); | ||
1665 | if (cat) | ||
1666 | { | ||
1667 | // use the existend item | ||
1668 | QListViewItem *catItem = cat->getListItem(); | ||
1669 | if (catItem) | ||
1670 | { | ||
1671 | QListViewItem * item = new ShadedListItem( 0, catItem ); | ||
1672 | item->setText( 0, tr( name ) ); | ||
1673 | item->setText( 1, tr( user ) ); | ||
1674 | item->setText( 2, tr( password ) ); | ||
1675 | item->setText( 3, tr( comment ) ); | ||
1676 | catItem->setOpen( TRUE ); | ||
1677 | } | ||
1678 | } | ||
1679 | else | ||
1680 | { | ||
1681 | QListViewItem *catI = new ShadedListItem( 1, ListView ); | ||
1682 | // create and insert a new item | ||
1683 | QListViewItem * item = new ShadedListItem( 0, catI ); | ||
1684 | item->setText( 0, tr( name ) ); | ||
1685 | item->setText( 1, tr( user ) ); | ||
1686 | item->setText( 2, tr( password ) ); | ||
1687 | item->setText( 3, tr( comment ) ); | ||
1688 | catI->setOpen( TRUE ); | ||
1689 | |||
1690 | Category *c1 = new Category(); | ||
1691 | c1->setCategoryName(category); | ||
1692 | |||
1693 | QString icon; | ||
1694 | QString fullIconPath; | ||
1695 | QPixmap *pix; | ||
1696 | // #ifndef WIN32 | ||
1697 | icon = conf->readEntry(APP_KEY+category); | ||
1698 | // #endif | ||
1699 | bool isIconAv = false; | ||
1700 | if (!icon.isEmpty() && !icon.isNull()) | ||
1701 | { | ||
1702 | // build the full path | ||
1703 | fullIconPath = iconPath + icon; | ||
1704 | pix = new QPixmap (fullIconPath); | ||
1705 | if (pix) | ||
1706 | { | ||
1707 | QImage img = pix->convertToImage(); | ||
1708 | pix->convertFromImage(img.smoothScale(14,14)); | ||
1709 | c1->setIconName (icon); | ||
1710 | c1->setIcon (*pix); | ||
1711 | isIconAv = true; | ||
1712 | } | ||
1713 | } | ||
1714 | if (!isIconAv) | ||
1715 | { | ||
1716 | c1->setIcon (*getPredefinedIcon(category)); | ||
1717 | } | ||
1718 | c1->setListItem (catI); | ||
1719 | c1->initListItem(); | ||
1720 | categories.insert (c1->getCategoryName(), c1); | ||
1721 | } | ||
1722 | |||
1723 | } | ||
1724 | f.close(); | ||
1725 | |||
1726 | } | ||
1727 | #endif // UNUSED | ||
1728 | |||
1729 | void ZSafe::resume(int) | ||
1730 | { | ||
1731 | qWarning ("Resume"); | ||
1732 | // hide the main window | ||
1733 | |||
1734 | infoForm->hide(); | ||
1735 | // open zsafe again | ||
1736 | m_password = ""; | ||
1737 | selectedItem = NULL; | ||
1738 | |||
1739 | // clear the password list | ||
1740 | QListViewItem *i; | ||
1741 | // step through all categories | ||
1742 | for (i = ListView->firstChild(); | ||
1743 | i != NULL; | ||
1744 | i = i->nextSibling()) | ||
1745 | { | ||
1746 | // step through all subitems | ||
1747 | QListViewItem *si; | ||
1748 | for (si = i->firstChild(); | ||
1749 | si != NULL; ) | ||
1750 | { | ||
1751 | QListViewItem *_si = si; | ||
1752 | si = si->nextSibling(); | ||
1753 | i->takeItem(_si); // remove from view list | ||
1754 | if (_si) delete _si; | ||
1755 | } | ||
1756 | } | ||
1757 | |||
1758 | // ask for password and read again | ||
1759 | openDocument(filename); | ||
1760 | } | ||
1761 | |||
1762 | //--------------------------------------------- | ||
1763 | |||
1764 | |||
1765 | bool ZSafe::openDocument(const char* _filename, const char* ) | ||
1766 | { | ||
1767 | int retval; | ||
1768 | char* entry[FIELD_SIZE]; | ||
1769 | // #ifndef WIN32 | ||
1770 | int validationFlag = conf->readNumEntry(APP_KEY+"valzsafe", 1); | ||
1771 | // #else | ||
1772 | // int validationFlag = 1; | ||
1773 | // #endif | ||
1774 | |||
1775 | int pwdOk = 0; | ||
1776 | int numberOfTries = 3; | ||
1777 | for (int i=0; i < numberOfTries; i++) | ||
1778 | { | ||
1779 | QFile f(_filename); | ||
1780 | if (f.exists()) | ||
1781 | { | ||
1782 | // ask with a dialog for the password | ||
1783 | if (m_password.isEmpty()) | ||
1784 | getDocPassword(tr("Enter Password")); | ||
1785 | if (m_password.isEmpty() && validationFlag == 0) | ||
1786 | { | ||
1787 | qWarning ("Wrong password"); | ||
1788 | QMessageBox::critical( 0, tr("ZSafe"), | ||
1789 | tr("Wrong password.\n\nZSafe will now exit.") ); | ||
1790 | exitZs (1); | ||
1791 | } | ||
1792 | |||
1793 | retval = loadInit(_filename, m_password); | ||
1794 | if (retval != PWERR_GOOD) | ||
1795 | { | ||
1796 | qWarning ("Error loading Document"); | ||
1797 | return false; | ||
1798 | } | ||
1799 | } | ||
1800 | else | ||
1801 | { | ||
1802 | #ifdef WIN32 | ||
1803 | this->setCaption("Qt ZSafe"); | ||
1804 | #else | ||
1805 | this->setCaption("ZSafe"); | ||
1806 | #endif | ||
1807 | filename = ""; | ||
1808 | return false; | ||
1809 | } | ||
1810 | |||
1811 | |||
1812 | // load the validation entry | ||
1813 | if (validationFlag == 0) | ||
1814 | { | ||
1815 | pwdOk = 1; | ||
1816 | break; | ||
1817 | } | ||
1818 | |||
1819 | retval = loadEntry(entry); | ||
1820 | if (retval == 1 && | ||
1821 | !strcmp (entry[0], "ZSAFECATEGORY") && | ||
1822 | !strcmp (entry[1], "name") && | ||
1823 | !strcmp (entry[2], "username") && | ||
1824 | !strcmp (entry[3], "password") && | ||
1825 | !strcmp (entry[4], "comment") ) | ||
1826 | { | ||
1827 | for (int count = 0; count < FIELD_SIZE; count++) free(entry[count]); | ||
1828 | pwdOk = 1; | ||
1829 | break; | ||
1830 | } | ||
1831 | else | ||
1832 | // for (int count = 0; count < FIELD_SIZE; count++) free(entry[count]); | ||
1833 | fclose (fd); | ||
1834 | m_password = ""; | ||
1835 | |||
1836 | if (i < numberOfTries - 1) | ||
1837 | { | ||
1838 | switch( QMessageBox::warning( this, tr("ZSafe"), | ||
1839 | tr("Wrong password.\nEnter again?"), | ||
1840 | tr("&Yes"), tr("&No."), | ||
1841 | 0 | ||
1842 | ) ) | ||
1843 | { | ||
1844 | case 1: // No | ||
1845 | exitZs (1); | ||
1846 | break; | ||
1847 | case 0: // Yes | ||
1848 | continue; | ||
1849 | } | ||
1850 | } | ||
1851 | } | ||
1852 | if (pwdOk == 0) | ||
1853 | { | ||
1854 | // unset the document entry | ||
1855 | conf->writeEntry(APP_KEY+"document", "INVALIDPWD"); | ||
1856 | if (conf) | ||
1857 | delete conf; | ||
1858 | |||
1859 | exitZs (1); | ||
1860 | } | ||
1861 | |||
1862 | |||
1863 | retval = loadEntry(entry); | ||
1864 | |||
1865 | int numberOfEntries=0; | ||
1866 | while (retval == 1) { | ||
1867 | |||
1868 | QString category(entry[0]); | ||
1869 | QString name(entry[1]); | ||
1870 | QString user(entry[2]); | ||
1871 | QString password(entry[3]); | ||
1872 | QString comment(entry[4]); | ||
1873 | QString field5(entry[5]); | ||
1874 | QString field6(entry[6]); | ||
1875 | // add the subitems to the categories | ||
1876 | |||
1877 | Category *cat= categories.find (category); | ||
1878 | if (cat) | ||
1879 | { | ||
1880 | // use the existend item | ||
1881 | QListViewItem *catItem = cat->getListItem(); | ||
1882 | if (catItem) | ||
1883 | { | ||
1884 | QListViewItem * item = new ShadedListItem( 0, catItem ); | ||
1885 | item->setText( 0, tr( name ) ); | ||
1886 | item->setText( 1, tr( user ) ); | ||
1887 | item->setText( 2, tr( password ) ); | ||
1888 | item->setText( 3, tr( comment ) ); | ||
1889 | item->setText( 4, tr( field5 ) ); | ||
1890 | item->setText( 5, tr( field6 ) ); | ||
1891 | if (expandTree) | ||
1892 | catItem->setOpen( TRUE ); | ||
1893 | numberOfEntries++; | ||
1894 | } | ||
1895 | } | ||
1896 | else | ||
1897 | { | ||
1898 | QListViewItem *catI = new ShadedListItem( 1, ListView ); | ||
1899 | // create and insert a new item | ||
1900 | QListViewItem * item = new ShadedListItem( 0, catI ); | ||
1901 | item->setText( 0, tr( name ) ); | ||
1902 | item->setText( 1, tr( user ) ); | ||
1903 | item->setText( 2, tr( password ) ); | ||
1904 | item->setText( 3, tr( comment ) ); | ||
1905 | item->setText( 4, tr( field5 ) ); | ||
1906 | item->setText( 5, tr( field6 ) ); | ||
1907 | if (expandTree) | ||
1908 | catI->setOpen( TRUE ); | ||
1909 | |||
1910 | Category *c1 = new Category(); | ||
1911 | c1->setCategoryName(category); | ||
1912 | |||
1913 | QString icon; | ||
1914 | QString fullIconPath; | ||
1915 | QPixmap *pix; | ||
1916 | // #ifndef WIN32 | ||
1917 | icon = conf->readEntry(APP_KEY+category); | ||
1918 | // #endif | ||
1919 | bool isIconAv = false; | ||
1920 | if (!icon.isEmpty() && !icon.isNull()) | ||
1921 | { | ||
1922 | // build the full path | ||
1923 | fullIconPath = iconPath + icon; | ||
1924 | pix = new QPixmap (fullIconPath); | ||
1925 | if (pix) | ||
1926 | { | ||
1927 | QImage img = pix->convertToImage(); | ||
1928 | pix->convertFromImage(img.smoothScale(14,14)); | ||
1929 | c1->setIconName (icon); | ||
1930 | c1->setIcon (*pix); | ||
1931 | isIconAv = true; | ||
1932 | } | ||
1933 | } | ||
1934 | if (!isIconAv) | ||
1935 | { | ||
1936 | c1->setIcon (*getPredefinedIcon(category)); | ||
1937 | } | ||
1938 | |||
1939 | c1->setListItem (catI); | ||
1940 | c1->initListItem(); | ||
1941 | categories.insert (c1->getCategoryName(), c1); | ||
1942 | numberOfEntries++; | ||
1943 | } | ||
1944 | |||
1945 | for (int count = 0; count < FIELD_SIZE; count++) { | ||
1946 | free(entry[count]); | ||
1947 | } | ||
1948 | retval = loadEntry(entry); | ||
1949 | if (retval == 2) { | ||
1950 | // m_parent->slotStatusHelpMsg("Last entry loaded"); | ||
1951 | } | ||
1952 | } // end while | ||
1953 | |||
1954 | if (numberOfEntries == 0) | ||
1955 | { | ||
1956 | |||
1957 | switch( QMessageBox::warning( this, tr("ZSafe"), | ||
1958 | tr("Empty document or\nwrong password.\nContinue?"), | ||
1959 | tr("&No"), tr("&Yes."), | ||
1960 | 0 | ||
1961 | ) ) { | ||
1962 | case 0: // No | ||
1963 | retval = loadFinalize(); | ||
1964 | exitZs (1); | ||
1965 | break; | ||
1966 | case 1: // Yes | ||
1967 | break; | ||
1968 | } | ||
1969 | } | ||
1970 | |||
1971 | retval = loadFinalize(); | ||
1972 | |||
1973 | return true; | ||
1974 | } | ||
1975 | |||
1976 | int ZSafe::loadInit(const char* _filename, const char *password) | ||
1977 | { | ||
1978 | unsigned int j = 0; | ||
1979 | unsigned int keylength=0; | ||
1980 | int count=0, count2=0, count3=0; | ||
1981 | unsigned char charbuf[8]; | ||
1982 | unsigned short ciphertext[4]; | ||
1983 | char key[128]; | ||
1984 | Krc2* krc2 = new Krc2(); | ||
1985 | |||
1986 | fd = fopen (_filename, "rb"); | ||
1987 | |||
1988 | QFileInfo f (_filename); | ||
1989 | load_buffer_length = f.size(); | ||
1990 | load_buffer_length = ((load_buffer_length / 1024)+1) * 1024 * 2; | ||
1991 | |||
1992 | if (fd == NULL) | ||
1993 | return PWERR_OPEN; | ||
1994 | |||
1995 | buffer = (char *)malloc(load_buffer_length); | ||
1996 | for (j = 0; password[j] != '\0'; j++) { | ||
1997 | key[j] = password[j]; | ||
1998 | } | ||
1999 | keylength = j; | ||
2000 | krc2->rc2_expandkey (key, keylength, 128); | ||
2001 | |||
2002 | #ifndef WIN32 | ||
2003 | size = read(fileno (fd), (unsigned char *) (charbuf + count), 8); | ||
2004 | #else | ||
2005 | printf ("LoadInit() read1"); | ||
2006 | size = fread ((unsigned char *) (charbuf + count), sizeof(unsigned char), 8, fd); | ||
2007 | #endif | ||
2008 | |||
2009 | if (size < 8) | ||
2010 | return PWERR_DATA; | ||
2011 | |||
2012 | for (count = 0; count < 4; count++) { | ||
2013 | count2 = count << 1; | ||
2014 | iv[count] = charbuf[count2] << 8; | ||
2015 | iv[count] += charbuf[count2 + 1]; | ||
2016 | } | ||
2017 | |||
2018 | size = 0; | ||
2019 | bufferIndex = 0; | ||
2020 | #ifndef WIN32 | ||
2021 | while ((count = read (fileno (fd), (unsigned char *) charbuf, 8)) > 0) { | ||
2022 | while (count < 8) { | ||
2023 | count2 = read (fileno (fd), (unsigned char *) (charbuf + count), 8); | ||
2024 | #else | ||
2025 | printf ("LoadInit() read2"); | ||
2026 | while ((count = fread ((unsigned char *) (charbuf), sizeof(unsigned char), 8, fd)) > 0) { | ||
2027 | while (count < 8) { | ||
2028 | count2 = fread ((unsigned char *) (charbuf + count), sizeof(unsigned char), 8, fd); | ||
2029 | #endif | ||
2030 | if (count2 == 0) { | ||
2031 | return PWERR_DATA; | ||
2032 | } | ||
2033 | count += count2; | ||
2034 | } /* while (count < 8) */ | ||
2035 | |||
2036 | size += 8; | ||
2037 | for (count2 = 0; count2 < 8; count2 += 2) { | ||
2038 | count3 = count2 >> 1; | ||
2039 | ciphertext[count3] = charbuf[count2] << 8; | ||
2040 | ciphertext[count3] += charbuf[count2 + 1]; | ||
2041 | |||
2042 | plaintext[count3] = ciphertext[count3] ^ iv[count3]; | ||
2043 | iv[count3] = plaintext[count3]; | ||
2044 | } /* for (count2) */ | ||
2045 | |||
2046 | krc2->rc2_decrypt (plaintext); | ||
2047 | memcpy ((unsigned char *) (buffer + bufferIndex), plaintext, 8); | ||
2048 | bufferIndex += 8; | ||
2049 | buffer[bufferIndex + 1] = '\0'; | ||
2050 | } /* while ((count = read (fileno (fd), (unsigned char *) charbuf, 8)) > 0) */ | ||
2051 | size -= buffer[size - 1]; | ||
2052 | lastcount = 0; | ||
2053 | |||
2054 | /* This will point to the starting index */ | ||
2055 | bufferIndex = 0; | ||
2056 | return PWERR_GOOD; | ||
2057 | } | ||
2058 | |||
2059 | int ZSafe::loadEntry(char *entry[FIELD_SIZE]) | ||
2060 | { | ||
2061 | /* Strip off PKCS 5 padding | ||
2062 | * Should check to make sure it's good here | ||
2063 | */ | ||
2064 | int count, count1=0; | ||
2065 | |||
2066 | for (count = lastcount; count < size; count++) { | ||
2067 | if ((unsigned char) (buffer[count]) == 255) { | ||
2068 | if (buffer[bufferIndex] == '\0') { | ||
2069 | bufferIndex++; | ||
2070 | } | ||
2071 | entry[count1] = (char *) malloc (count - bufferIndex + 1); | ||
2072 | memcpy (entry[count1], (unsigned char *) (buffer + bufferIndex), count - bufferIndex); | ||
2073 | entry[count1][count - bufferIndex] = '\0'; | ||
2074 | count++; | ||
2075 | bufferIndex = count; | ||
2076 | count1++; | ||
2077 | if (count1 == FIELD_SIZE) { | ||
2078 | lastcount = count; | ||
2079 | return 1; | ||
2080 | } | ||
2081 | } /* if ((unsigned char) (buffer[count]) == 255) */ | ||
2082 | } /* for (count = 0; count < size; count++) */ | ||
2083 | |||
2084 | return 2; | ||
2085 | } | ||
2086 | |||
2087 | int ZSafe::loadFinalize(void) | ||
2088 | { | ||
2089 | fclose (fd); | ||
2090 | if (buffer) free(buffer); | ||
2091 | return PWERR_GOOD; | ||
2092 | } | ||
2093 | |||
2094 | bool ZSafe::saveDocument(const char* _filename, | ||
2095 | bool withPwd, | ||
2096 | const char* ) | ||
2097 | { | ||
2098 | if (filename.isEmpty()) | ||
2099 | { | ||
2100 | QMessageBox::critical( 0, tr("ZSafe"), | ||
2101 | tr("No document defined.\nYou have to create a new document")); | ||
2102 | return false; | ||
2103 | } | ||
2104 | |||
2105 | // if (m_password.isEmpty()) | ||
2106 | // withPwd = true; // the document must be saved with a valid password | ||
2107 | if (withPwd) | ||
2108 | { | ||
2109 | bool pwdOk = FALSE; | ||
2110 | while (!pwdOk) | ||
2111 | { | ||
2112 | getDocPassword(tr("Enter Password")); | ||
2113 | if (m_password.isEmpty()) | ||
2114 | { | ||
2115 | |||
2116 | QMessageBox::critical( 0, tr("ZSafe"), | ||
2117 | tr("Password is empty.\nPlease enter again.")); | ||
2118 | continue; | ||
2119 | } | ||
2120 | |||
2121 | QString firstPasswd = m_password; | ||
2122 | |||
2123 | getDocPassword(tr("Reenter Password")); | ||
2124 | if (m_password.isEmpty()) | ||
2125 | { | ||
2126 | QMessageBox::critical( 0, tr("ZSafe"), | ||
2127 | tr("Password is empty.\nPlease enter again.")); | ||
2128 | continue; | ||
2129 | } | ||
2130 | if (firstPasswd != m_password) | ||
2131 | { | ||
2132 | |||
2133 | QMessageBox::critical( 0, tr("ZSafe"), | ||
2134 | tr("Passwords must be identical.\nPlease enter again.")); | ||
2135 | continue; | ||
2136 | } | ||
2137 | pwdOk = TRUE; | ||
2138 | modified = false; | ||
2139 | } | ||
2140 | } | ||
2141 | else if (modified) | ||
2142 | { | ||
2143 | QString fns(_filename); | ||
2144 | fns = fns.right (fns.length() - fns.findRev ('/') - 1); | ||
2145 | switch( QMessageBox::information( this, tr("ZSafe"), | ||
2146 | tr("Do you want to save ") + fns + tr("\nbefore continuing?"), | ||
2147 | tr("&Save"), | ||
2148 | tr("&Don't Save"), | ||
2149 | 0 // Enter == button 0 | ||
2150 | ) ) | ||
2151 | { // Escape == button 2 | ||
2152 | case 0: // Save clicked, Alt-S or Enter pressed. | ||
2153 | modified = false; | ||
2154 | break; | ||
2155 | case 1: // Don't Save clicked or Alt-D pressed | ||
2156 | modified = false; | ||
2157 | return true; | ||
2158 | } | ||
2159 | } | ||
2160 | modified = false; | ||
2161 | |||
2162 | if (m_password.isEmpty()) | ||
2163 | return false; | ||
2164 | |||
2165 | int retval = saveInit(_filename, m_password); | ||
2166 | // int retval = saveInit(_filename, "test"); | ||
2167 | if (retval != PWERR_GOOD) { | ||
2168 | return false; | ||
2169 | } | ||
2170 | |||
2171 | char* entry[FIELD_SIZE]; | ||
2172 | |||
2173 | // save the validation entry | ||
2174 | { | ||
2175 | int i=0; | ||
2176 | entry[i] = (char*)malloc(strlen("ZSAFECATEGORY")+1); | ||
2177 | strcpy(entry[i++], "ZSAFECATEGORY"); | ||
2178 | entry[i] = (char*)malloc(strlen("name")+1); | ||
2179 | strcpy(entry[i++], "name"); | ||
2180 | entry[i] = (char*)malloc(strlen("username")+1); | ||
2181 | strcpy(entry[i++], "username"); | ||
2182 | entry[i] = (char*)malloc(strlen("password")+1); | ||
2183 | strcpy(entry[i++], "password"); | ||
2184 | entry[i] = (char*)malloc(strlen("comment")+1); | ||
2185 | strcpy(entry[i++], "comment"); | ||
2186 | |||
2187 | entry[i] = (char*)malloc(strlen("field5")+1); | ||
2188 | strcpy(entry[i++], "field5"); | ||
2189 | entry[i] = (char*)malloc(strlen("field6")+1); | ||
2190 | strcpy(entry[i++], "field6"); | ||
2191 | |||
2192 | retval = saveEntry(entry); | ||
2193 | for (int z=0; z<i; z++) free(entry[z]); | ||
2194 | if (retval == PWERR_DATA) { | ||
2195 | qWarning("1: Error writing file, contents not saved"); | ||
2196 | saveFinalize(); | ||
2197 | return false; | ||
2198 | } | ||
2199 | // #ifndef WIN32 | ||
2200 | conf->writeEntry(APP_KEY+"valzsafe", 1); | ||
2201 | // #endif | ||
2202 | saveConf(); | ||
2203 | } | ||
2204 | |||
2205 | QListViewItem *i; | ||
2206 | // step through all categories | ||
2207 | for (i = ListView->firstChild(); | ||
2208 | i != NULL; | ||
2209 | i = i->nextSibling()) | ||
2210 | { | ||
2211 | // step through all subitems | ||
2212 | QListViewItem *si; | ||
2213 | for (si = i->firstChild(); | ||
2214 | si != NULL; | ||
2215 | si = si->nextSibling()) | ||
2216 | { | ||
2217 | int j=0; | ||
2218 | entry[j] = (char*)malloc(strlen(i->text(0))+1); | ||
2219 | strcpy(entry[j++], i->text(0)); | ||
2220 | entry[j] = (char*)malloc(strlen(si->text(0))+1); | ||
2221 | strcpy(entry[j++], si->text(0)); | ||
2222 | entry[j] = (char*)malloc(strlen(si->text(1))+1); | ||
2223 | strcpy(entry[j++], si->text(1)); | ||
2224 | entry[j] = (char*)malloc(strlen(si->text(2))+1); | ||
2225 | strcpy(entry[j++], si->text(2)); | ||
2226 | entry[j] = (char*)malloc(strlen(si->text(3))+1); | ||
2227 | strcpy(entry[j++], si->text(3)); | ||
2228 | |||
2229 | entry[j] = (char*)malloc(strlen(si->text(4))+1); | ||
2230 | strcpy(entry[j++], si->text(4)); | ||
2231 | entry[j] = (char*)malloc(strlen(si->text(5))+1); | ||
2232 | strcpy(entry[j++], si->text(5)); | ||
2233 | |||
2234 | retval = saveEntry(entry); | ||
2235 | for (int z=0; z<j; z++) | ||
2236 | { | ||
2237 | free(entry[z]); | ||
2238 | } | ||
2239 | if (retval == PWERR_DATA) { | ||
2240 | qWarning("1: Error writing file, contents not saved"); | ||
2241 | saveFinalize(); | ||
2242 | return false; | ||
2243 | } | ||
2244 | |||
2245 | } | ||
2246 | } | ||
2247 | |||
2248 | if (saveFinalize() == PWERR_DATA) { | ||
2249 | qWarning("2: Error writing file, contents not saved"); | ||
2250 | return false; | ||
2251 | } else { | ||
2252 | #ifndef DESKTOP | ||
2253 | Global::statusMessage (tr("Password file saved.")); | ||
2254 | #endif | ||
2255 | modified = false; | ||
2256 | return true; | ||
2257 | } | ||
2258 | } | ||
2259 | |||
2260 | PasswordForm *newPwdDialog; | ||
2261 | bool newPwdDialogResult = false; | ||
2262 | void ZSafe::setPasswordDialogDone() | ||
2263 | { | ||
2264 | newPwdDialogResult = true; | ||
2265 | newPwdDialog->close(); | ||
2266 | } | ||
2267 | |||
2268 | void ZSafe::getDocPassword(QString title) | ||
2269 | { | ||
2270 | qWarning ("getDocPassword"); | ||
2271 | // open the 'Password' dialog | ||
2272 | PasswordForm *dialog = new PasswordForm(this, title, TRUE); | ||
2273 | newPwdDialog = dialog; | ||
2274 | newPwdDialogResult = false; | ||
2275 | |||
2276 | connect( dialog->PasswordField, SIGNAL( returnPressed() ), | ||
2277 | this, SLOT( setPasswordDialogDone() ) ); | ||
2278 | |||
2279 | // CS: !!! | ||
2280 | // int pos = filename.findRev ('/'); | ||
2281 | QString ti = filename.right (filename.length() - filename.findRev ('/') - 1); | ||
2282 | #ifdef WIN32 | ||
2283 | dialog->setCaption("Qt " + ti); | ||
2284 | #else | ||
2285 | dialog->setCaption(ti); | ||
2286 | #endif | ||
2287 | // dialog->setCaption(title); | ||
2288 | |||
2289 | dialog->PasswordField->setFocus(); | ||
2290 | DialogCode result = (DialogCode) dialog->exec(); | ||
2291 | #ifdef DESKTOP | ||
2292 | result = Accepted; | ||
2293 | #endif | ||
2294 | |||
2295 | QString password; | ||
2296 | if (result == Accepted || newPwdDialogResult) | ||
2297 | { | ||
2298 | m_password = dialog->PasswordField->text(); | ||
2299 | } | ||
2300 | else | ||
2301 | { | ||
2302 | exitZs (1); | ||
2303 | } | ||
2304 | } | ||
2305 | |||
2306 | int ZSafe::saveInit(const char *_filename, const char *password) | ||
2307 | { | ||
2308 | char key[128]; | ||
2309 | unsigned int j = 0; | ||
2310 | unsigned int keylength; | ||
2311 | // int val; | ||
2312 | int count2; | ||
2313 | Krc2* krc2 = new Krc2(); | ||
2314 | |||
2315 | /* first we should check the permissions of the filename */ | ||
2316 | /* | ||
2317 | if (QFile::exists(_filename)) { | ||
2318 | val = checkFile(_filename); | ||
2319 | if (val != PWERR_GOOD) | ||
2320 | return val; | ||
2321 | } else | ||
2322 | { | ||
2323 | val = creat (_filename, (S_IRUSR | S_IWUSR)); | ||
2324 | if (val == -1) | ||
2325 | return PWERR_OPEN; | ||
2326 | else | ||
2327 | close(val); | ||
2328 | } | ||
2329 | */ | ||
2330 | QFileInfo f (_filename); | ||
2331 | save_buffer_length = f.size(); | ||
2332 | save_buffer_length = ((save_buffer_length / 1024)+1) * 1024; | ||
2333 | |||
2334 | fd = fopen (_filename, "wb"); | ||
2335 | if (fd == NULL) | ||
2336 | return PWERR_OPEN; | ||
2337 | |||
2338 | buffer = (char*)malloc(save_buffer_length); | ||
2339 | |||
2340 | /* make the key ready */ | ||
2341 | for (j = 0; password[j] != '\0'; j++) { | ||
2342 | key[j] = password[j]; | ||
2343 | } | ||
2344 | keylength = j; | ||
2345 | krc2->rc2_expandkey (key, keylength, 128); | ||
2346 | |||
2347 | /* First, we make the IV */ | ||
2348 | for (count2 = 0; count2 < 4; count2++) { | ||
2349 | iv[count2] = rand (); | ||
2350 | putc ((unsigned char) (iv[count2] >> 8), fd); | ||
2351 | putc ((unsigned char) (iv[count2] & 0xff), fd); | ||
2352 | } | ||
2353 | |||
2354 | bufferIndex = 0; | ||
2355 | return PWERR_GOOD; | ||
2356 | } | ||
2357 | |||
2358 | |||
2359 | int ZSafe::saveEntry(char *entry[FIELD_SIZE]) | ||
2360 | { | ||
2361 | char *text1; | ||
2362 | int count2, count3; | ||
2363 | unsigned short ciphertext[4]; | ||
2364 | Krc2* krc2 = new Krc2(); | ||
2365 | |||
2366 | buffer = (char*)memset(buffer, '\0', save_buffer_length); | ||
2367 | |||
2368 | for (count2 = 0; count2 < FIELD_SIZE; count2++) { | ||
2369 | text1 = entry[count2]; | ||
2370 | if (strlen (text1) == 0) { | ||
2371 | strncat(buffer, " ", strlen(" ")); | ||
2372 | } else { | ||
2373 | strncat(buffer, text1, strlen(text1)); | ||
2374 | } | ||
2375 | /* Use 255 as the marker. \n is too tough to test for */ | ||
2376 | buffer[strlen (buffer)] = 255; | ||
2377 | } /*for (count2 = 0; count2 < 5; count2++)*/ | ||
2378 | count2 = 0; | ||
2379 | /* I'm using CBC mode and encrypting the data straight from top down. | ||
2380 | * At the bottom, encrypted, I will append an MD5 hash of the file, eventually. | ||
2381 | * PKCS 5 padding (explained at the code section | ||
2382 | */ | ||
2383 | while (count2 < (int)strlen (buffer)) { | ||
2384 | #ifndef WORDS_BIGENDIAN | ||
2385 | plaintext[bufferIndex] = buffer[count2 + 1] << 8; | ||
2386 | plaintext[bufferIndex] += buffer[count2] & 0xff; | ||
2387 | #endif | ||
2388 | #ifdef WORDS_BIGENDIAN | ||
2389 | plaintext[bufferIndex] = buffer[count2] << 8; | ||
2390 | plaintext[bufferIndex] += buffer[count2 + 1] & 0xff; | ||
2391 | #endif | ||
2392 | bufferIndex++; | ||
2393 | if (bufferIndex == 4) { | ||
2394 | krc2->rc2_encrypt (plaintext); | ||
2395 | |||
2396 | for (count3 = 0; count3 < 4; count3++) { | ||
2397 | ciphertext[count3] = iv[count3] ^ plaintext[count3]; | ||
2398 | |||
2399 | /* Now store the ciphertext as the iv */ | ||
2400 | iv[count3] = plaintext[count3]; | ||
2401 | |||
2402 | /* reset the buffer index */ | ||
2403 | bufferIndex = 0; | ||
2404 | if (putc ((unsigned char) (ciphertext[count3] >> 8), fd) == EOF) return PWERR_DATA; | ||
2405 | if (putc ((unsigned char) (ciphertext[count3] & 0xff), fd) == EOF) return PWERR_DATA; | ||
2406 | } /*for (count3 = 0; count3 < 5; count3++)*/ | ||
2407 | } /*if (bufferIndex == 5)*/ | ||
2408 | /* increment a short, not a byte */ | ||
2409 | count2 += 2; | ||
2410 | } /*while (count2 < strlen (buffer))*/ | ||
2411 | int ret = PWERR_GOOD; | ||
2412 | return ret; | ||
2413 | } | ||
2414 | |||
2415 | int ZSafe::saveFinalize(void) | ||
2416 | { | ||
2417 | int count1, retval = PWERR_GOOD; | ||
2418 | unsigned short ciphertext[4]; | ||
2419 | Krc2* krc2 = new Krc2(); | ||
2420 | |||
2421 | /* Tack on the PKCS 5 padding | ||
2422 | * How it works is we fill up the last n bytes with the value n | ||
2423 | * | ||
2424 | * So, if we have, say, 13 bytes, 8 of which are used, we have 5 left | ||
2425 | * over, leaving us 3 short, so we fill it in with 3's. | ||
2426 | * | ||
2427 | * If we come out even, we fill it with 8 8s | ||
2428 | * | ||
2429 | * um, except that in this instance we are using 4 shorts instead of 8 bytes. | ||
2430 | * so, half everything | ||
2431 | */ | ||
2432 | for (count1 = bufferIndex; count1 < 4; count1++) { | ||
2433 | plaintext[count1] = (4 - bufferIndex); | ||
2434 | } | ||
2435 | krc2->rc2_encrypt (plaintext); | ||
2436 | for (count1 = 0; count1 < 4; count1++) { | ||
2437 | ciphertext[count1] = iv[count1] ^ plaintext[count1]; | ||
2438 | if (putc ((unsigned char) (ciphertext[count1] >> 8), fd) == EOF) retval = PWERR_DATA; | ||
2439 | if (putc ((unsigned char) (ciphertext[count1] & 0xff), fd) == EOF) retval = PWERR_DATA; | ||
2440 | } | ||
2441 | |||
2442 | fclose (fd); | ||
2443 | free(buffer); | ||
2444 | return retval; | ||
2445 | } | ||
2446 | |||
2447 | void ZSafe::quitMe () | ||
2448 | { | ||
2449 | qWarning ("QUIT..."); | ||
2450 | |||
2451 | if (modified) | ||
2452 | { | ||
2453 | switch( QMessageBox::information( this, tr("ZSafe"), | ||
2454 | tr("Do you want to save\nbefore exiting?"), | ||
2455 | tr("&Save"), | ||
2456 | tr("S&ave with\nnew\npassword"), | ||
2457 | tr("&Don't Save"), | ||
2458 | 0 // Enter == button 0 | ||
2459 | ) ) | ||
2460 | { // Escape == button 2 | ||
2461 | case 0: // Save clicked, Alt-S or Enter pressed. | ||
2462 | // save | ||
2463 | modified = false; | ||
2464 | saveDocument(filename, FALSE); | ||
2465 | exitZs (1); | ||
2466 | break; | ||
2467 | case 1: // | ||
2468 | // Save with new password | ||
2469 | modified = false; | ||
2470 | saveDocument(filename, TRUE); | ||
2471 | exitZs (1); | ||
2472 | break; | ||
2473 | case 2: // Don't Save clicked or Alt-D pressed | ||
2474 | // don't save but exitZs | ||
2475 | exitZs (1); | ||
2476 | break; | ||
2477 | } | ||
2478 | } | ||
2479 | exitZs (1); | ||
2480 | |||
2481 | } | ||
2482 | |||
2483 | void ZSafe::categoryFieldActivated( const QString& category) | ||
2484 | { | ||
2485 | if (categoryDialog) | ||
2486 | setCategoryDialogFields(categoryDialog, category); | ||
2487 | } | ||
2488 | |||
2489 | void ZSafe::addCategory() | ||
2490 | { | ||
2491 | if (filename.isEmpty()) | ||
2492 | { | ||
2493 | QMessageBox::critical( 0, tr("ZSafe"), | ||
2494 | tr("No document defined.\nYou have to create a new document")); | ||
2495 | return; | ||
2496 | } | ||
2497 | else | ||
2498 | { | ||
2499 | // open the 'Category' dialog | ||
2500 | bool initIcons = false; | ||
2501 | // open the 'Category' dialog | ||
2502 | CategoryDialog *dialog; | ||
2503 | if (categoryDialog) | ||
2504 | { | ||
2505 | dialog = categoryDialog; | ||
2506 | } | ||
2507 | else | ||
2508 | { | ||
2509 | categoryDialog = new CategoryDialog(this, tr("Category"), TRUE); | ||
2510 | #ifdef WIN32 | ||
2511 | categoryDialog->setCaption ("Qt " + tr("Category")); | ||
2512 | #endif | ||
2513 | dialog = categoryDialog; | ||
2514 | connect( dialog->CategoryField, | ||
2515 | SIGNAL( activated ( const QString &)), | ||
2516 | this, SLOT( categoryFieldActivated( const QString & ) ) ); | ||
2517 | initIcons = true; | ||
2518 | } | ||
2519 | |||
2520 | #ifdef DESKTOP | ||
2521 | #ifndef WIN32 | ||
2522 | QStringList list = conf->entryList( APP_KEY+"/fieldDefs" ); | ||
2523 | #else | ||
2524 | // read all categories from the config file and store | ||
2525 | // into a list | ||
2526 | QFile f (cfgFile); | ||
2527 | QStringList list; | ||
2528 | if ( f.open(IO_ReadOnly) ) { // file opened successfully | ||
2529 | QTextStream t( &f ); // use a text stream | ||
2530 | QString s; | ||
2531 | int n = 1; | ||
2532 | while ( !t.eof() ) { // until end of file... | ||
2533 | s = t.readLine(); // line of text excluding '\n' | ||
2534 | list.append(s); | ||
2535 | } | ||
2536 | f.close(); | ||
2537 | } | ||
2538 | #endif | ||
2539 | #else | ||
2540 | // read all categories from the config file and store | ||
2541 | // into a list | ||
2542 | QFile f (cfgFile); | ||
2543 | QStringList list; | ||
2544 | if ( f.open(IO_ReadOnly) ) { // file opened successfully | ||
2545 | QTextStream t( &f ); // use a text stream | ||
2546 | QString s; | ||
2547 | while ( !t.eof() ) { // until end of file... | ||
2548 | s = t.readLine(); // line of text excluding '\n' | ||
2549 | list.append(s); | ||
2550 | } | ||
2551 | f.close(); | ||
2552 | } | ||
2553 | #endif | ||
2554 | QStringList::Iterator it = list.begin(); | ||
2555 | QString categ; | ||
2556 | dialog->CategoryField->clear(); // remove all items | ||
2557 | while( it != list.end() ) | ||
2558 | { | ||
2559 | QString *cat = new QString (*it); | ||
2560 | if (cat->contains("-field1", FALSE)) | ||
2561 | { | ||
2562 | #ifdef DESKTOP | ||
2563 | #ifndef WIN32 | ||
2564 | categ = cat->section ("-field1", 0, 0); | ||
2565 | #else | ||
2566 | int pos = cat->find ("-field1"); | ||
2567 | categ = cat->left (pos); | ||
2568 | #endif | ||
2569 | #else | ||
2570 | int pos = cat->find ("-field1"); | ||
2571 | cat->truncate(pos); | ||
2572 | categ = *cat; | ||
2573 | #endif | ||
2574 | if (!categ.isEmpty()) | ||
2575 | { | ||
2576 | dialog->CategoryField->insertItem (categ, -1); | ||
2577 | } | ||
2578 | } | ||
2579 | ++it; | ||
2580 | } | ||
2581 | |||
2582 | |||
2583 | setCategoryDialogFields(dialog); | ||
2584 | |||
2585 | // CategoryDialog *dialog = new CategoryDialog(this, "Category", TRUE); | ||
2586 | |||
2587 | if (initIcons) | ||
2588 | { | ||
2589 | Wait waitDialog(this, tr("Wait dialog")); | ||
2590 | waitDialog.waitLabel->setText(tr("Gathering icons...")); | ||
2591 | waitDialog.show(); | ||
2592 | qApp->processEvents(); | ||
2593 | |||
2594 | #ifdef DESKTOP | ||
2595 | QDir d(iconPath); | ||
2596 | #else | ||
2597 | QDir d(QPEApplication::qpeDir() + "/pics/"); | ||
2598 | #endif | ||
2599 | d.setFilter( QDir::Files); | ||
2600 | |||
2601 | const QFileInfoList *list = d.entryInfoList(); | ||
2602 | QFileInfoListIterator it( *list ); // create list iterator | ||
2603 | QFileInfo *fi; // pointer for traversing | ||
2604 | |||
2605 | dialog->IconField->insertItem("predefined"); | ||
2606 | while ( (fi=it.current()) ) { // for each file... | ||
2607 | QString fileName = fi->fileName(); | ||
2608 | if(fileName.right(4) == ".png"){ | ||
2609 | fileName = fileName.mid(0,fileName.length()-4); | ||
2610 | #ifdef DESKTOP | ||
2611 | QPixmap imageOfFile; | ||
2612 | imageOfFile.load(iconPath + fi->fileName()); | ||
2613 | #else | ||
2614 | QPixmap imageOfFile(Resource::loadPixmap(fileName)); | ||
2615 | #endif | ||
2616 | QImage foo = imageOfFile.convertToImage(); | ||
2617 | foo = foo.smoothScale(16,16); | ||
2618 | imageOfFile.convertFromImage(foo); | ||
2619 | dialog->IconField->insertItem(imageOfFile,fileName); | ||
2620 | } | ||
2621 | ++it; | ||
2622 | } | ||
2623 | waitDialog.hide(); | ||
2624 | } | ||
2625 | |||
2626 | #ifndef WIN32 | ||
2627 | dialog->show(); | ||
2628 | #endif | ||
2629 | #ifndef DESKTOP | ||
2630 | // dialog->move (20, 100); | ||
2631 | #endif | ||
2632 | DialogCode result = (DialogCode) dialog->exec(); | ||
2633 | #ifdef DESKTOP | ||
2634 | result = Accepted; | ||
2635 | #endif | ||
2636 | |||
2637 | QString category; | ||
2638 | QString icon; | ||
2639 | QString fullIconPath; | ||
2640 | QPixmap *pix; | ||
2641 | if (result == Accepted) | ||
2642 | { | ||
2643 | modified = true; | ||
2644 | category = dialog->CategoryField->currentText(); | ||
2645 | icon = dialog->IconField->currentText()+".png"; | ||
2646 | |||
2647 | qWarning (category); | ||
2648 | |||
2649 | QListViewItem *li = new ShadedListItem( 1, ListView ); | ||
2650 | Category *c1 = new Category(); | ||
2651 | c1->setCategoryName(category); | ||
2652 | |||
2653 | // if (!icon.isEmpty() && !icon.isNull()) | ||
2654 | if (icon != "predefined.png") | ||
2655 | { | ||
2656 | // build the full path | ||
2657 | fullIconPath = iconPath + icon; | ||
2658 | pix = new QPixmap (fullIconPath); | ||
2659 | // pix->resize(14, 14); | ||
2660 | if (pix) | ||
2661 | { | ||
2662 | // save the full pixmap name into the config file | ||
2663 | // #ifndef WIN32 | ||
2664 | conf->writeEntry(APP_KEY+category, icon); | ||
2665 | // #endif | ||
2666 | saveConf(); | ||
2667 | QImage img = pix->convertToImage(); | ||
2668 | pix->convertFromImage(img.smoothScale(14,14)); | ||
2669 | c1->setIcon (*pix); | ||
2670 | c1->setIconName(icon); | ||
2671 | } | ||
2672 | else | ||
2673 | { | ||
2674 | QPixmap folder( ( const char** ) general_data ); | ||
2675 | c1->setIcon (folder); | ||
2676 | } | ||
2677 | } | ||
2678 | else | ||
2679 | { | ||
2680 | c1->setIcon (*getPredefinedIcon(category)); | ||
2681 | } | ||
2682 | |||
2683 | c1->setListItem (li); | ||
2684 | c1->initListItem(); | ||
2685 | categories.insert (c1->getCategoryName(), c1); | ||
2686 | |||
2687 | saveCategoryDialogFields(dialog); | ||
2688 | } | ||
2689 | else | ||
2690 | { | ||
2691 | // delete dialog; | ||
2692 | dialog->hide(); | ||
2693 | return; | ||
2694 | } | ||
2695 | |||
2696 | } | ||
2697 | |||
2698 | } | ||
2699 | |||
2700 | void ZSafe::delCategory() | ||
2701 | { | ||
2702 | if (!selectedItem) | ||
2703 | return; | ||
2704 | if (isCategory(selectedItem)) | ||
2705 | { | ||
2706 | switch( QMessageBox::information( this, tr("ZSafe"), | ||
2707 | tr("Do you want to delete?"), | ||
2708 | tr("&Delete"), tr("D&on't Delete"), | ||
2709 | 0 // Enter == button 0 | ||
2710 | ) ) { // Escape == button 2 | ||
2711 | case 0: // Delete clicked, Alt-S or Enter pressed. | ||
2712 | // Delete from the category list | ||
2713 | modified = true; | ||
2714 | categories.remove (selectedItem->text(0)); | ||
2715 | // #ifndef WIN32 | ||
2716 | conf->removeEntry (selectedItem->text(0)); | ||
2717 | // #endif | ||
2718 | saveConf(); | ||
2719 | |||
2720 | // Delete the selected item and all subitems | ||
2721 | // step through all subitems | ||
2722 | QListViewItem *si; | ||
2723 | for (si = selectedItem->firstChild(); | ||
2724 | si != NULL; ) | ||
2725 | { | ||
2726 | QListViewItem *_si = si; | ||
2727 | si = si->nextSibling(); | ||
2728 | selectedItem->takeItem(_si); // remove from view list | ||
2729 | if (_si) delete _si; | ||
2730 | } | ||
2731 | ListView->takeItem(selectedItem); | ||
2732 | delete selectedItem; | ||
2733 | |||
2734 | selectedItem = NULL; | ||
2735 | break; | ||
2736 | case 1: // Don't delete | ||
2737 | break; | ||
2738 | } | ||
2739 | |||
2740 | } | ||
2741 | } | ||
2742 | |||
2743 | void ZSafe::setCategoryDialogFields(CategoryDialog *dialog) | ||
2744 | { | ||
2745 | dialog->Field1->setText(getFieldLabel (selectedItem, "1", tr("Name"))); | ||
2746 | dialog->Field2->setText(getFieldLabel (selectedItem, "2", tr("Username"))); | ||
2747 | dialog->Field3->setText(getFieldLabel (selectedItem, "3", tr("Password"))); | ||
2748 | dialog->Field4->setText(getFieldLabel (selectedItem, "4", tr("Comment"))); | ||
2749 | dialog->Field5->setText(getFieldLabel (selectedItem, "5", tr("Field 4"))); | ||
2750 | dialog->Field6->setText(getFieldLabel (selectedItem, "6", tr("Field 5"))); | ||
2751 | } | ||
2752 | |||
2753 | void ZSafe::setCategoryDialogFields(CategoryDialog *dialog, QString category) | ||
2754 | { | ||
2755 | dialog->Field1->setText(getFieldLabel (category, "1", tr("Name"))); | ||
2756 | dialog->Field2->setText(getFieldLabel (category, "2", tr("Username"))); | ||
2757 | dialog->Field3->setText(getFieldLabel (category, "3", tr("Password"))); | ||
2758 | dialog->Field4->setText(getFieldLabel (category, "4", tr("Comment"))); | ||
2759 | dialog->Field5->setText(getFieldLabel (category, "5", tr("Field 4"))); | ||
2760 | dialog->Field6->setText(getFieldLabel (category, "6", tr("Field 5"))); | ||
2761 | } | ||
2762 | |||
2763 | void ZSafe::saveCategoryDialogFields(CategoryDialog *dialog) | ||
2764 | { | ||
2765 | QString app_key = APP_KEY; | ||
2766 | #ifndef DESKTOP | ||
2767 | conf->setGroup ("fieldDefs"); | ||
2768 | #else | ||
2769 | #ifndef WIN32 | ||
2770 | app_key += "/fieldDefs/"; | ||
2771 | #endif | ||
2772 | #endif | ||
2773 | QString category = dialog->CategoryField->currentText(); | ||
2774 | // #ifndef WIN32 | ||
2775 | conf->writeEntry(app_key+category+"-field1", dialog->Field1->text()); | ||
2776 | conf->writeEntry(app_key+category+"-field2", dialog->Field2->text()); | ||
2777 | conf->writeEntry(app_key+category+"-field3", dialog->Field3->text()); | ||
2778 | conf->writeEntry(app_key+category+"-field4", dialog->Field4->text()); | ||
2779 | conf->writeEntry(app_key+category+"-field5", dialog->Field5->text()); | ||
2780 | conf->writeEntry(app_key+category+"-field6", dialog->Field6->text()); | ||
2781 | // #endif | ||
2782 | saveConf(); | ||
2783 | #ifndef DESKTOP | ||
2784 | conf->setGroup ("zsafe"); | ||
2785 | #endif | ||
2786 | } | ||
2787 | |||
2788 | void ZSafe::editCategory() | ||
2789 | { | ||
2790 | if (!selectedItem) | ||
2791 | return; | ||
2792 | if (isCategory(selectedItem)) | ||
2793 | { | ||
2794 | QString category = selectedItem->text(0); | ||
2795 | bool initIcons = false; | ||
2796 | // open the 'Category' dialog | ||
2797 | CategoryDialog *dialog; | ||
2798 | if (categoryDialog) | ||
2799 | { | ||
2800 | dialog = categoryDialog; | ||
2801 | } | ||
2802 | else | ||
2803 | { | ||
2804 | categoryDialog = new CategoryDialog(this, tr("Category"), TRUE); | ||
2805 | #ifdef WIN32 | ||
2806 | categoryDialog->setCaption ("Qt " + tr("Category")); | ||
2807 | #endif | ||
2808 | dialog = categoryDialog; | ||
2809 | connect( dialog->CategoryField, | ||
2810 | SIGNAL( activated ( const QString &)), | ||
2811 | this, SLOT( categoryFieldActivated( const QString & ) ) ); | ||
2812 | initIcons = true; | ||
2813 | } | ||
2814 | setCategoryDialogFields(dialog); | ||
2815 | |||
2816 | #ifdef DESKTOP | ||
2817 | #ifndef WIN32 | ||
2818 | QStringList list = conf->entryList( APP_KEY+"/fieldDefs" ); | ||
2819 | #else | ||
2820 | // read all categories from the config file and store | ||
2821 | // into a list | ||
2822 | QFile f (cfgFile); | ||
2823 | QStringList list; | ||
2824 | if ( f.open(IO_ReadOnly) ) { // file opened successfully | ||
2825 | QTextStream t( &f ); // use a text stream | ||
2826 | QString s; | ||
2827 | int n = 1; | ||
2828 | while ( !t.eof() ) { // until end of file... | ||
2829 | s = t.readLine(); // line of text excluding '\n' | ||
2830 | list.append(s); | ||
2831 | } | ||
2832 | f.close(); | ||
2833 | } | ||
2834 | #endif | ||
2835 | #else | ||
2836 | // read all categories from the config file and store | ||
2837 | // into a list | ||
2838 | QFile f (cfgFile); | ||
2839 | QStringList list; | ||
2840 | if ( f.open(IO_ReadOnly) ) { // file opened successfully | ||
2841 | QTextStream t( &f ); // use a text stream | ||
2842 | QString s; | ||
2843 | while ( !t.eof() ) { // until end of file... | ||
2844 | s = t.readLine(); // line of text excluding '\n' | ||
2845 | list.append(s); | ||
2846 | } | ||
2847 | f.close(); | ||
2848 | } | ||
2849 | #endif | ||
2850 | QStringList::Iterator it = list.begin(); | ||
2851 | QString categ; | ||
2852 | dialog->CategoryField->clear(); // remove all items | ||
2853 | int i=0; | ||
2854 | bool foundCategory = false; | ||
2855 | while( it != list.end() ) | ||
2856 | { | ||
2857 | QString *cat = new QString (*it); | ||
2858 | if (cat->contains("-field1", FALSE)) | ||
2859 | { | ||
2860 | #ifdef DESKTOP | ||
2861 | #ifndef WIN32 | ||
2862 | categ = cat->section ("-field1", 0, 0); | ||
2863 | #else | ||
2864 | int pos = cat->find ("-field1"); | ||
2865 | categ = cat->left (pos); | ||
2866 | #endif | ||
2867 | #else | ||
2868 | int pos = cat->find ("-field1"); | ||
2869 | cat->truncate(pos); | ||
2870 | categ = *cat; | ||
2871 | #endif | ||
2872 | if (!categ.isEmpty()) | ||
2873 | { | ||
2874 | dialog->CategoryField->insertItem (categ, i); | ||
2875 | if (category.compare(categ) == 0) | ||
2876 | { | ||
2877 | dialog->CategoryField->setCurrentItem(i); | ||
2878 | foundCategory = true; | ||
2879 | } | ||
2880 | i++; | ||
2881 | } | ||
2882 | } | ||
2883 | ++it; | ||
2884 | } | ||
2885 | if (!foundCategory) | ||
2886 | { | ||
2887 | dialog->CategoryField->insertItem (category, i); | ||
2888 | dialog->CategoryField->setCurrentItem(i); | ||
2889 | } | ||
2890 | |||
2891 | QString icon; | ||
2892 | Category *cat= categories.find (selectedItem->text(0)); | ||
2893 | if (cat) | ||
2894 | { | ||
2895 | icon = cat->getIconName(); | ||
2896 | } | ||
2897 | |||
2898 | if (initIcons) | ||
2899 | { | ||
2900 | |||
2901 | Wait waitDialog(this, tr("Wait dialog")); | ||
2902 | waitDialog.waitLabel->setText(tr("Gathering icons...")); | ||
2903 | waitDialog.show(); | ||
2904 | qApp->processEvents(); | ||
2905 | |||
2906 | #ifdef DESKTOP | ||
2907 | QDir d(iconPath); | ||
2908 | #else | ||
2909 | QDir d(QPEApplication::qpeDir() + "/pics/"); | ||
2910 | #endif | ||
2911 | d.setFilter( QDir::Files); | ||
2912 | |||
2913 | const QFileInfoList *list = d.entryInfoList(); | ||
2914 | int i=0; | ||
2915 | QFileInfoListIterator it( *list ); // create list iterator | ||
2916 | QFileInfo *fi; // pointer for traversing | ||
2917 | if (icon.isEmpty() || icon.isNull()) | ||
2918 | { | ||
2919 | dialog->IconField->setCurrentItem(0); | ||
2920 | } | ||
2921 | |||
2922 | dialog->IconField->insertItem("predefined"); | ||
2923 | while ( (fi=it.current()) ) { // for each file... | ||
2924 | QString fileName = fi->fileName(); | ||
2925 | if(fileName.right(4) == ".png") | ||
2926 | { | ||
2927 | fileName = fileName.mid(0,fileName.length()-4); | ||
2928 | #ifdef DESKTOP | ||
2929 | QPixmap imageOfFile; | ||
2930 | imageOfFile.load(iconPath + fi->fileName()); | ||
2931 | #else | ||
2932 | QPixmap imageOfFile(Resource::loadPixmap(fileName)); | ||
2933 | #endif | ||
2934 | QImage foo = imageOfFile.convertToImage(); | ||
2935 | foo = foo.smoothScale(16,16); | ||
2936 | imageOfFile.convertFromImage(foo); | ||
2937 | dialog->IconField->insertItem(imageOfFile,fileName); | ||
2938 | if(fileName+".png"==icon) | ||
2939 | dialog->IconField->setCurrentItem(i+1); | ||
2940 | ++i; | ||
2941 | } | ||
2942 | ++it; | ||
2943 | } | ||
2944 | waitDialog.hide(); | ||
2945 | } | ||
2946 | else | ||
2947 | { | ||
2948 | #ifdef DESKTOP | ||
2949 | // QDir d(QDir::homeDirPath() + "/pics/"); | ||
2950 | QDir d(iconPath); | ||
2951 | #else | ||
2952 | QDir d(QPEApplication::qpeDir() + "/pics/"); | ||
2953 | #endif | ||
2954 | d.setFilter( QDir::Files); | ||
2955 | |||
2956 | const QFileInfoList *list = d.entryInfoList(); | ||
2957 | int i=0; | ||
2958 | QFileInfoListIterator it( *list ); // create list iterator | ||
2959 | QFileInfo *fi; // pointer for traversing | ||
2960 | if (icon.isEmpty() || icon.isNull()) | ||
2961 | { | ||
2962 | dialog->IconField->setCurrentItem(0); | ||
2963 | } | ||
2964 | else | ||
2965 | { | ||
2966 | |||
2967 | while ( (fi=it.current()) ) | ||
2968 | { // for each file... | ||
2969 | QString fileName = fi->fileName(); | ||
2970 | if(fileName.right(4) == ".png") | ||
2971 | { | ||
2972 | fileName = fileName.mid(0,fileName.length()-4); | ||
2973 | |||
2974 | |||
2975 | if(fileName+".png"==icon) | ||
2976 | { | ||
2977 | dialog->IconField->setCurrentItem(i+1); | ||
2978 | break; | ||
2979 | } | ||
2980 | ++i; | ||
2981 | } | ||
2982 | ++it; | ||
2983 | } | ||
2984 | } | ||
2985 | } | ||
2986 | |||
2987 | // dialog->show(); | ||
2988 | #ifndef DESKTOP | ||
2989 | // dialog->move (20, 100); | ||
2990 | #endif | ||
2991 | DialogCode result = (DialogCode) dialog->exec(); | ||
2992 | #ifdef DESKTOP | ||
2993 | result = Accepted; | ||
2994 | #endif | ||
2995 | |||
2996 | QString fullIconPath; | ||
2997 | QPixmap *pix; | ||
2998 | if (result == Accepted) | ||
2999 | { | ||
3000 | modified = true; | ||
3001 | if (category != dialog->CategoryField->currentText()) | ||
3002 | { | ||
3003 | categories.remove (category); | ||
3004 | // #ifndef WIN32 | ||
3005 | conf->removeEntry(category); | ||
3006 | // #endif | ||
3007 | saveConf(); | ||
3008 | } | ||
3009 | |||
3010 | category = dialog->CategoryField->currentText(); | ||
3011 | icon = dialog->IconField->currentText()+".png"; | ||
3012 | |||
3013 | if (cat) | ||
3014 | { | ||
3015 | qWarning("Category found"); | ||
3016 | |||
3017 | // if (!icon.isEmpty() && !icon.isNull()) | ||
3018 | if (icon != "predefined.png") | ||
3019 | { | ||
3020 | // build the full path | ||
3021 | fullIconPath = iconPath + icon; | ||
3022 | pix = new QPixmap (fullIconPath); | ||
3023 | if (pix) | ||
3024 | { | ||
3025 | // save the full pixmap name into the config file | ||
3026 | // #ifndef WIN32 | ||
3027 | conf->writeEntry(APP_KEY+category, icon); | ||
3028 | // #endif | ||
3029 | saveConf(); | ||
3030 | QImage img = pix->convertToImage(); | ||
3031 | pix->convertFromImage(img.smoothScale(14,14)); | ||
3032 | cat->setIconName (icon); | ||
3033 | cat->setIcon (*pix); | ||
3034 | } | ||
3035 | } | ||
3036 | else | ||
3037 | { | ||
3038 | // #ifndef WIN32 | ||
3039 | conf->removeEntry (category); | ||
3040 | // #endif | ||
3041 | saveConf(); | ||
3042 | cat->setIcon (*getPredefinedIcon(category)); | ||
3043 | } | ||
3044 | |||
3045 | // change the category name of the selected category | ||
3046 | QListViewItem *catItem = cat->getListItem(); | ||
3047 | if (catItem) | ||
3048 | { | ||
3049 | qWarning (category); | ||
3050 | catItem->setText( 0, tr( category ) ); | ||
3051 | cat->setCategoryName (tr(category)); | ||
3052 | cat->initListItem(); | ||
3053 | categories.insert (category, cat); | ||
3054 | } | ||
3055 | } | ||
3056 | saveCategoryDialogFields(dialog); | ||
3057 | } | ||
3058 | else | ||
3059 | { | ||
3060 | // delete dialog; | ||
3061 | dialog->hide(); | ||
3062 | return; | ||
3063 | } | ||
3064 | |||
3065 | } | ||
3066 | } | ||
3067 | |||
3068 | void ZSafe::cutItem() | ||
3069 | { | ||
3070 | if (!selectedItem) | ||
3071 | return; | ||
3072 | if (!isCategory(selectedItem)) | ||
3073 | { | ||
3074 | IsCut = true; | ||
3075 | copiedItem = selectedItem; | ||
3076 | } | ||
3077 | } | ||
3078 | |||
3079 | void ZSafe::copyItem() | ||
3080 | { | ||
3081 | if (!selectedItem) | ||
3082 | return; | ||
3083 | if (!isCategory(selectedItem)) | ||
3084 | { | ||
3085 | IsCopy = true; | ||
3086 | copiedItem = selectedItem; | ||
3087 | } | ||
3088 | } | ||
3089 | |||
3090 | // paste item into category | ||
3091 | void ZSafe::pasteItem() | ||
3092 | { | ||
3093 | if (!selectedItem) | ||
3094 | return; | ||
3095 | if (isCategory(selectedItem)) | ||
3096 | { | ||
3097 | modified = true; | ||
3098 | if (IsCut) | ||
3099 | { | ||
3100 | if (copiedItem) | ||
3101 | { | ||
3102 | // add the new item | ||
3103 | QListViewItem *i = new ShadedListItem (0, selectedItem); | ||
3104 | // i->setOpen (TRUE); | ||
3105 | i->setText (0, copiedItem->text(0)); | ||
3106 | i->setText (1, copiedItem->text(1)); | ||
3107 | i->setText (2, copiedItem->text(2)); | ||
3108 | i->setText (3, copiedItem->text(3)); | ||
3109 | i->setText (4, copiedItem->text(4)); | ||
3110 | i->setText (5, copiedItem->text(5)); | ||
3111 | selectedItem->setOpen( TRUE ); | ||
3112 | |||
3113 | // remove the cutted item | ||
3114 | copiedItem->parent()->takeItem(copiedItem); | ||
3115 | selectedItem = NULL; | ||
3116 | } | ||
3117 | } | ||
3118 | else if (IsCopy) | ||
3119 | { | ||
3120 | if (copiedItem) | ||
3121 | { | ||
3122 | // add the new item | ||
3123 | QListViewItem *i = new ShadedListItem (0, selectedItem); | ||
3124 | // i->setOpen (TRUE); | ||
3125 | i->setText (0, copiedItem->text(0)); | ||
3126 | i->setText (1, copiedItem->text(1)); | ||
3127 | i->setText (2, copiedItem->text(2)); | ||
3128 | i->setText (3, copiedItem->text(3)); | ||
3129 | i->setText (4, copiedItem->text(4)); | ||
3130 | i->setText (5, copiedItem->text(5)); | ||
3131 | selectedItem->setOpen( TRUE ); | ||
3132 | } | ||
3133 | } | ||
3134 | } | ||
3135 | IsCut = false; | ||
3136 | IsCopy = false; | ||
3137 | } | ||
3138 | |||
3139 | void ZSafe::newDocument() | ||
3140 | { | ||
3141 | |||
3142 | // open the file dialog | ||
3143 | #ifndef DESKTOP | ||
3144 | QString newFile = ScQtFileEdit::getSaveAsFileName(this, | ||
3145 | tr ("Create new ZSafe document"), | ||
3146 | QDir::homeDirPath() + "/Documents/application/zsafe", | ||
3147 | "*.zsf"); | ||
3148 | #else | ||
3149 | QString newFile = QFileDialog::getSaveFileName( | ||
3150 | QDir::homeDirPath() + "/Documents/application/zsafe", | ||
3151 | "ZSafe (*.zsf)", | ||
3152 | this, | ||
3153 | "ZSafe File Dialog" | ||
3154 | "Choose a ZSafe file" ); | ||
3155 | #endif | ||
3156 | |||
3157 | // open the new document | ||
3158 | if (newFile && newFile.length() > 0 ) | ||
3159 | { | ||
3160 | // save the previous opened document | ||
3161 | if (!filename.isEmpty()) | ||
3162 | saveDocument(filename, FALSE); | ||
3163 | |||
3164 | modified = true; | ||
3165 | |||
3166 | // clear the password list | ||
3167 | QListViewItem *i; | ||
3168 | QListViewItem *c = NULL; | ||
3169 | // step through all categories | ||
3170 | for (i = ListView->firstChild(); | ||
3171 | i != NULL; | ||
3172 | i = i->nextSibling()) | ||
3173 | { | ||
3174 | if (c) delete c; // delete the previous category | ||
3175 | |||
3176 | c = i; | ||
3177 | // step through all subitems | ||
3178 | QListViewItem *si; | ||
3179 | for (si = i->firstChild(); | ||
3180 | si != NULL; ) | ||
3181 | { | ||
3182 | QListViewItem *_si = si; | ||
3183 | si = si->nextSibling(); | ||
3184 | i->takeItem(_si); // remove from view list | ||
3185 | if (_si) delete _si; | ||
3186 | } | ||
3187 | } | ||
3188 | if (c) delete c; // delete the previous category | ||
3189 | categories.clear(); | ||
3190 | |||
3191 | // m_password = ""; | ||
3192 | // selectedItem = NULL; | ||
3193 | |||
3194 | filename = newFile; | ||
3195 | |||
3196 | // save the current filename to the config file | ||
3197 | conf->writeEntry(APP_KEY+"document", filename); | ||
3198 | saveConf(); | ||
3199 | QString ti = filename.right (filename.length() - filename.findRev ('/') - 1); | ||
3200 | #ifdef WIN32 | ||
3201 | this->setCaption("Qt ZSafe: " + ti); | ||
3202 | #else | ||
3203 | this->setCaption("ZSafe: " + ti); | ||
3204 | #endif | ||
3205 | |||
3206 | // openDocument(filename); | ||
3207 | |||
3208 | QMessageBox::information( this, tr("ZSafe"), | ||
3209 | tr("Now you have to enter\na password twice for your\nnewly created document."), tr("&OK"), 0); | ||
3210 | |||
3211 | saveDocumentWithPwd(); | ||
3212 | } | ||
3213 | } | ||
3214 | |||
3215 | void ZSafe::loadDocument() | ||
3216 | { | ||
3217 | |||
3218 | // open the file dialog | ||
3219 | #ifndef DESKTOP | ||
3220 | QString newFile = ScQtFileEdit::getOpenFileName(this, | ||
3221 | tr ("Open ZSafe document"), | ||
3222 | QDir::homeDirPath() + "/Documents/application/zsafe", | ||
3223 | "*.zsf"); | ||
3224 | #else | ||
3225 | QString newFile = QFileDialog::getOpenFileName( | ||
3226 | QDir::homeDirPath() + "/Documents/application/zsafe", | ||
3227 | "ZSafe (*.zsf)", | ||
3228 | this, | ||
3229 | "ZSafe File Dialog" | ||
3230 | "Choose a ZSafe file" ); | ||
3231 | #endif | ||
3232 | |||
3233 | // open the new document | ||
3234 | if (newFile && newFile.length() > 0 ) | ||
3235 | { | ||
3236 | // save the previous opened document | ||
3237 | if (!filename.isEmpty()) | ||
3238 | saveDocument(filename, FALSE); | ||
3239 | |||
3240 | // clear the password list | ||
3241 | QListViewItem *i; | ||
3242 | QListViewItem *c = NULL; | ||
3243 | // step through all categories | ||
3244 | for (i = ListView->firstChild(); | ||
3245 | i != NULL; | ||
3246 | i = i->nextSibling()) | ||
3247 | { | ||
3248 | if (c) delete c; // delete the previous category | ||
3249 | |||
3250 | c = i; | ||
3251 | // step through all subitems | ||
3252 | QListViewItem *si; | ||
3253 | for (si = i->firstChild(); | ||
3254 | si != NULL; ) | ||
3255 | { | ||
3256 | QListViewItem *_si = si; | ||
3257 | si = si->nextSibling(); | ||
3258 | i->takeItem(_si); // remove from view list | ||
3259 | if (_si) delete _si; | ||
3260 | } | ||
3261 | } | ||
3262 | if (c) delete c; // delete the previous category | ||
3263 | categories.clear(); | ||
3264 | m_password = ""; | ||
3265 | selectedItem = NULL; | ||
3266 | filename = newFile; | ||
3267 | |||
3268 | // save the current filename to the config file | ||
3269 | conf->writeEntry(APP_KEY+"document", filename); | ||
3270 | saveConf(); | ||
3271 | QString ti = filename.right (filename.length() - filename.findRev ('/') - 1); | ||
3272 | #ifdef WIN32 | ||
3273 | this->setCaption("Qt ZSafe: " + ti); | ||
3274 | #else | ||
3275 | this->setCaption("ZSafe: " + ti); | ||
3276 | #endif | ||
3277 | |||
3278 | openDocument(filename); | ||
3279 | } | ||
3280 | } | ||
3281 | |||
3282 | void ZSafe::saveDocumentAs() | ||
3283 | { | ||
3284 | |||
3285 | #ifndef DESKTOP | ||
3286 | QString newFile = ScQtFileEdit::getSaveAsFileName(this, | ||
3287 | tr ("Save ZSafe document as.."), | ||
3288 | QDir::homeDirPath() + "/Documents/application/zsafe", | ||
3289 | "*.zsf"); | ||
3290 | #else | ||
3291 | // open the file dialog | ||
3292 | QString newFile = QFileDialog::getSaveFileName( | ||
3293 | QDir::homeDirPath() + "/Documents/application/zsafe", | ||
3294 | "ZSafe (*.zsf)", | ||
3295 | this, | ||
3296 | "ZSafe File Dialog" | ||
3297 | "Choose a ZSafe file" ); | ||
3298 | #endif | ||
3299 | |||
3300 | // open the new document | ||
3301 | if (newFile && newFile.length() > 0 ) | ||
3302 | { | ||
3303 | // save the previous opened document | ||
3304 | if (!filename.isEmpty()) | ||
3305 | saveDocument(filename, FALSE); | ||
3306 | |||
3307 | filename = newFile; | ||
3308 | |||
3309 | // save the current filename to the config file | ||
3310 | conf->writeEntry(APP_KEY+"document", filename); | ||
3311 | saveConf(); | ||
3312 | QString ti = filename.right (filename.length() - filename.findRev ('/') - 1); | ||
3313 | #ifdef WIN32 | ||
3314 | this->setCaption("Qt ZSafe: " + ti); | ||
3315 | #else | ||
3316 | this->setCaption("ZSafe: " + ti); | ||
3317 | #endif | ||
3318 | |||
3319 | QMessageBox::information( this, tr("ZSafe"), | ||
3320 | tr("Now you have to enter\na password twice for your\nnewly created document."), tr("&OK"), 0); | ||
3321 | |||
3322 | saveDocumentWithPwd(); | ||
3323 | } | ||
3324 | } | ||
3325 | |||
3326 | void ZSafe::saveDocumentWithoutPwd() | ||
3327 | { | ||
3328 | saveDocument(filename, FALSE); | ||
3329 | } | ||
3330 | |||
3331 | void ZSafe::saveDocumentWithPwd() | ||
3332 | { | ||
3333 | saveDocument(filename, TRUE); | ||
3334 | } | ||
3335 | |||
3336 | void ZSafe::about() | ||
3337 | { | ||
3338 | QString info; | ||
3339 | info = "<html><body><div align=""center"">"; | ||
3340 | info += "<b>"; | ||
3341 | info += tr("Zaurus Password Manager<br>"); | ||
3342 | info += tr("ZSafe version 2.1.2<br>"); | ||
3343 | info += "</b>"; | ||
3344 | info += tr("by Carsten Schneider<br>"); | ||
3345 | info += "zcarsten@gmx.net<br>"; | ||
3346 | info += "http://z-soft.z-portal.info/zsafe"; | ||
3347 | info += "<br>"; | ||
3348 | info += tr("Translations by Robert Ernst<br>"); | ||
3349 | info += "robert.ernst@linux-solutions.at<br>"; | ||
3350 | info += "<br></div>"; | ||
3351 | info += "</body></html>"; | ||
3352 | |||
3353 | // QMessageBox::information( this, tr("ZSafe"), info, tr("&OK"), 0); | ||
3354 | |||
3355 | QMessageBox mb( this, tr("ZSafe")); | ||
3356 | mb.setText (info); | ||
3357 | mb.setButtonText (QMessageBox::Ok, tr ("&OK")); | ||
3358 | QPixmap zsafe_img((const char**) zsafe_xpm); | ||
3359 | mb.setIconPixmap (zsafe_img); | ||
3360 | mb.exec(); | ||
3361 | } | ||
3362 | |||
3363 | void ZSafe::setExpandFlag() | ||
3364 | { | ||
3365 | expandTree = !expandTree; | ||
3366 | file->setItemChecked('o', expandTree); | ||
3367 | #ifndef DESKTOP | ||
3368 | conf->setGroup ("zsafePrefs"); | ||
3369 | #endif | ||
3370 | // #ifndef WIN32 | ||
3371 | conf->writeEntry (APP_KEY+"expandTree", expandTree); | ||
3372 | // #endif | ||
3373 | saveConf(); | ||
3374 | |||
3375 | } | ||
3376 | |||
3377 | void ZSafe::paintEvent( QPaintEvent * ) | ||
3378 | { | ||
3379 | if (raiseFlag) | ||
3380 | { | ||
3381 | raiseFlag = false; | ||
3382 | raiseTimer.start (1, true); | ||
3383 | if (infoForm->isVisible()) | ||
3384 | infoForm->raise(); | ||
3385 | } | ||
3386 | } | ||
3387 | |||
3388 | void ZSafe::resizeEvent ( QResizeEvent * ) | ||
3389 | { | ||
3390 | // qWarning ("resizeEvent"); | ||
3391 | #ifndef DESKTOP | ||
3392 | DeskW = appl->desktop()->width(); | ||
3393 | DeskH = appl->desktop()->height(); | ||
3394 | #else | ||
3395 | DeskW = this->width(); | ||
3396 | DeskH = this->height(); | ||
3397 | #endif | ||
3398 | qWarning( QString("Width : %1").arg(DeskW), 2000 ); | ||
3399 | qWarning( QString("Height: %1").arg(DeskH), 2000 ); | ||
3400 | |||
3401 | New->setGeometry ( QRect( DeskW-84, 2, 20, 20 ) ); | ||
3402 | Edit->setGeometry ( QRect( DeskW-64, 2, 20, 20 ) ); | ||
3403 | Delete->setGeometry( QRect( DeskW-44, 2, 20, 20 ) ); | ||
3404 | Find->setGeometry ( QRect( DeskW-24, 2, 20, 20 ) ); | ||
3405 | } | ||
3406 | |||
3407 | void ZSafe::slotRaiseTimer() | ||
3408 | { | ||
3409 | if (infoForm->isVisible()) | ||
3410 | infoForm->raise(); | ||
3411 | raiseFlag = true; | ||
3412 | } | ||
3413 | |||
3414 | QPixmap * ZSafe::getPredefinedIcon(QString category) | ||
3415 | { | ||
3416 | QPixmap *pm; | ||
3417 | if (category == "Bank cards") | ||
3418 | pm = new QPixmap((const char**)bank_cards_data); | ||
3419 | else if (category == "Passwords") | ||
3420 | pm = new QPixmap((const char**)passwords_data); | ||
3421 | else if (category == "Software") | ||
3422 | pm = new QPixmap((const char**)software_data); | ||
3423 | else if (category == "General") | ||
3424 | pm = new QPixmap((const char**)general_data); | ||
3425 | else | ||
3426 | pm = new QPixmap((const char**)general_data); | ||
3427 | return pm; | ||
3428 | } | ||
3429 | |||
3430 | void ZSafe::setDocument(const QString& fileref) | ||
3431 | { | ||
3432 | #ifndef DESKTOP | ||
3433 | // stop the timer to prevent loading of the default document | ||
3434 | docuTimer.stop(); | ||
3435 | |||
3436 | DocLnk link(fileref); | ||
3437 | if ( link.isValid() ) | ||
3438 | { | ||
3439 | // if (filename != link.file()) | ||
3440 | // saveDocument(filename, FALSE); | ||
3441 | filename = link.file(); | ||
3442 | } | ||
3443 | else | ||
3444 | { | ||
3445 | // if (filename != fileref) | ||
3446 | // saveDocument(filename, FALSE); | ||
3447 | filename = fileref; | ||
3448 | } | ||
3449 | // save the current filename to the config file | ||
3450 | conf->writeEntry(APP_KEY+"document", filename); | ||
3451 | saveConf(); | ||
3452 | QString ti = filename.right (filename.length() - filename.findRev ('/') - 1); | ||
3453 | #ifdef WIN32 | ||
3454 | this->setCaption("Qt ZSafe: " + ti); | ||
3455 | #else | ||
3456 | this->setCaption("ZSafe: " + ti); | ||
3457 | #endif | ||
3458 | |||
3459 | // clear the password list | ||
3460 | QListViewItem *i; | ||
3461 | QListViewItem *c = NULL; | ||
3462 | // step through all categories | ||
3463 | for (i = ListView->firstChild(); | ||
3464 | i != NULL; | ||
3465 | i = i->nextSibling()) | ||
3466 | { | ||
3467 | if (c) delete c; // delete the previous category | ||
3468 | |||
3469 | c = i; | ||
3470 | // step through all subitems | ||
3471 | QListViewItem *si; | ||
3472 | for (si = i->firstChild(); | ||
3473 | si != NULL; ) | ||
3474 | { | ||
3475 | QListViewItem *_si = si; | ||
3476 | si = si->nextSibling(); | ||
3477 | i->takeItem(_si); // remove from view list | ||
3478 | if (_si) delete _si; | ||
3479 | } | ||
3480 | } | ||
3481 | if (c) delete c; // delete the previous category | ||
3482 | categories.clear(); | ||
3483 | |||
3484 | m_password = ""; | ||
3485 | selectedItem = NULL; | ||
3486 | |||
3487 | openDocument(filename); | ||
3488 | #endif | ||
3489 | } | ||
3490 | |||
3491 | |||
3492 | |||
diff --git a/noncore/apps/zsafe/zsafe.desktop b/noncore/apps/zsafe/zsafe.desktop new file mode 100644 index 0000000..ea54cea --- a/dev/null +++ b/noncore/apps/zsafe/zsafe.desktop | |||
@@ -0,0 +1,11 @@ | |||
1 | [Desktop Entry] | ||
2 | Comment=A Password Manager Program | ||
3 | Comment[de]=Ein Programm zum Verwalten von Passworten | ||
4 | Exec=zsafe | ||
5 | Icon=zsafe | ||
6 | Type=Application | ||
7 | Type[de]=Anwendung | ||
8 | Name=ZSafe | ||
9 | Name[de]=ZSafe | ||
10 | CanFastLoad=0 | ||
11 | MimeType=application/zsafe | ||
diff --git a/noncore/apps/zsafe/zsafe.h b/noncore/apps/zsafe/zsafe.h new file mode 100644 index 0000000..b5019a9 --- a/dev/null +++ b/noncore/apps/zsafe/zsafe.h | |||
@@ -0,0 +1,196 @@ | |||
1 | /**************************************************************************** | ||
2 | ** Form interface generated from reading ui file 'zsafe.ui' | ||
3 | ** | ||
4 | ** Created: Sat Apr 6 17:57:42 2002 | ||
5 | ** | ||
6 | ** Author: Carsten Schneider <CarstenSchneider@t-online.de> | ||
7 | ** | ||
8 | ** $Id$ | ||
9 | ** | ||
10 | ** Homepage: http://home.t-online.de/home/CarstenSchneider/zsafe/index.html | ||
11 | ** | ||
12 | ** WARNING! All changes made in this file will be lost! | ||
13 | ****************************************************************************/ | ||
14 | #ifndef ZSAFE_H | ||
15 | #define ZSAFE_H | ||
16 | |||
17 | #ifndef WIN32 | ||
18 | #include <stream.h> | ||
19 | #endif | ||
20 | #include <stdio.h> | ||
21 | |||
22 | #include "infoform.h" | ||
23 | #include "categorylist.h" | ||
24 | #include "shadedlistitem.h" | ||
25 | |||
26 | #include <qvariant.h> | ||
27 | #include <qdialog.h> | ||
28 | #include <qwidgetstack.h> | ||
29 | #include <qtimer.h> | ||
30 | |||
31 | class QVBoxLayout; | ||
32 | class QHBoxLayout; | ||
33 | class QGridLayout; | ||
34 | class ZListView; | ||
35 | class QListViewItem; | ||
36 | class QToolButton; | ||
37 | class QTextBrowser; | ||
38 | class QPopupMenu; | ||
39 | #ifdef DESKTOP | ||
40 | // #ifndef WIN32 | ||
41 | class QSettings; | ||
42 | // #endif | ||
43 | #else | ||
44 | class Config; | ||
45 | #endif | ||
46 | class CategoryDialog; | ||
47 | class QPixmap; | ||
48 | |||
49 | // number of fields for one entry | ||
50 | #define FIELD_SIZE 7 | ||
51 | |||
52 | class ZSafe : public QDialog | ||
53 | { | ||
54 | Q_OBJECT | ||
55 | |||
56 | protected: | ||
57 | void paintEvent( QPaintEvent * e ); | ||
58 | void resizeEvent ( QResizeEvent * ); | ||
59 | |||
60 | bool raiseFlag; | ||
61 | QTimer raiseTimer; | ||
62 | |||
63 | public: | ||
64 | ZSafe( QWidget* parent = 0, const char* name = 0, bool modal = FALSE, WFlags fl = WDestructiveClose ); | ||
65 | ~ZSafe(); | ||
66 | |||
67 | static const QColor *evenRowColor; | ||
68 | static const QColor *oddRowColor; | ||
69 | |||
70 | QToolButton* Edit; | ||
71 | QToolButton* Delete; | ||
72 | QToolButton* Find; | ||
73 | QToolButton* New; | ||
74 | ZListView* ListView; | ||
75 | |||
76 | QString cfgFile; | ||
77 | QString iconPath; | ||
78 | |||
79 | InfoForm *infoForm; | ||
80 | CategoryDialog *categoryDialog; | ||
81 | |||
82 | QListViewItem *selectedItem; // current selected item | ||
83 | QListViewItem *copiedItem; // copied item | ||
84 | bool IsCopy; | ||
85 | bool IsCut; | ||
86 | bool modified; // true if database is modified | ||
87 | |||
88 | QListViewItem *lastSearchedCategory; | ||
89 | QListViewItem *lastSearchedItem; | ||
90 | QString lastSearchedName; | ||
91 | QString lastSearchedUsername; | ||
92 | QString lastSearchedComment; | ||
93 | |||
94 | |||
95 | CategoryList categories; // list of categories | ||
96 | |||
97 | bool isCategory(QListViewItem *_item); | ||
98 | void getDocPassword(QString title); | ||
99 | QString filename; | ||
100 | |||
101 | enum { | ||
102 | PWERR_GOOD, // success | ||
103 | PWERR_OPEN, // can't open filedescriptor / can't create file | ||
104 | PWERR_PERM, // permissions are bad | ||
105 | PWERR_SYML, // is a symlink | ||
106 | PWERR_STAT, // can't get file status | ||
107 | PWERR_DATA // can't read correct data | ||
108 | }; | ||
109 | |||
110 | long load_buffer_length; | ||
111 | long save_buffer_length; | ||
112 | |||
113 | /** password for the file */ | ||
114 | QString m_password; | ||
115 | /** globals needed for file loading */ | ||
116 | int lastcount, size; | ||
117 | /** these three are needed in all save functions and initialized in save _init() */ | ||
118 | FILE *fd; | ||
119 | unsigned short iv[4]; | ||
120 | char *buffer; | ||
121 | /** these two are global because save_entry() and save_finalize() both n eed them */ | ||
122 | int bufferIndex; | ||
123 | unsigned short plaintext[4]; | ||
124 | |||
125 | #ifdef DESKTOP | ||
126 | // #ifndef WIN32 | ||
127 | QSettings *conf; | ||
128 | // #endif | ||
129 | #else | ||
130 | Config *conf; | ||
131 | #endif | ||
132 | bool expandTree; | ||
133 | QPopupMenu *file; | ||
134 | |||
135 | QTimer docuTimer; | ||
136 | |||
137 | |||
138 | bool openDocument(const char* filename, const char* format=0); | ||
139 | int loadInit(const char* filename, const char *password); | ||
140 | int loadEntry(char *entry[4]); | ||
141 | int loadFinalize(void); | ||
142 | bool saveDocument(const char* filename, bool withPwd, const char* format=0); | ||
143 | int saveInit(const char *filename, const char *password); | ||
144 | int saveEntry(char *entry[4]); | ||
145 | int saveFinalize(void); | ||
146 | void saveConf(); | ||
147 | QPixmap * getPredefinedIcon(QString category); | ||
148 | QString getFieldLabel (QListViewItem *_item, QString field, QString def); | ||
149 | QString getFieldLabel (QString category, QString field, QString def); | ||
150 | void setCategoryDialogFields(CategoryDialog *dialog); | ||
151 | void setCategoryDialogFields(CategoryDialog *dialog, QString category); | ||
152 | void saveCategoryDialogFields(CategoryDialog *dialog); | ||
153 | |||
154 | |||
155 | void resume(int signum); | ||
156 | void exitZs (int ec); | ||
157 | |||
158 | |||
159 | public slots: | ||
160 | virtual void deletePwd(); | ||
161 | virtual void editPwd(); | ||
162 | virtual void newPwd(); | ||
163 | virtual void findPwd(); | ||
164 | virtual void quitMe(); | ||
165 | virtual void listViewSelected( QListViewItem *_item); | ||
166 | virtual void showInfo( QListViewItem *_item); | ||
167 | virtual void writeAllEntries(); | ||
168 | virtual void readAllEntries(); | ||
169 | virtual void removeAsciiFile(); | ||
170 | virtual void setPasswordDialogDone(); | ||
171 | |||
172 | virtual void addCategory(); | ||
173 | virtual void delCategory(); | ||
174 | virtual void editCategory(); | ||
175 | virtual void cutItem(); | ||
176 | virtual void copyItem(); | ||
177 | virtual void pasteItem(); | ||
178 | |||
179 | virtual void newDocument(); | ||
180 | virtual void loadDocument(); | ||
181 | virtual void saveDocumentAs(); | ||
182 | virtual void saveDocumentWithoutPwd(); | ||
183 | virtual void saveDocumentWithPwd(); | ||
184 | virtual void about(); | ||
185 | virtual void setExpandFlag(); | ||
186 | |||
187 | virtual void categoryFieldActivated( const QString& str); | ||
188 | |||
189 | private slots: | ||
190 | void setDocument(const QString& fileref); | ||
191 | void slotLoadDocu(); | ||
192 | void slotRaiseTimer(); | ||
193 | |||
194 | }; | ||
195 | |||
196 | #endif // ZSAFE_H | ||
diff --git a/noncore/apps/zsafe/zsafe.png b/noncore/apps/zsafe/zsafe.png new file mode 100644 index 0000000..34f5170 --- a/dev/null +++ b/noncore/apps/zsafe/zsafe.png | |||
Binary files differ | |||
diff --git a/noncore/apps/zsafe/zsafe.pro b/noncore/apps/zsafe/zsafe.pro new file mode 100644 index 0000000..dd5360b --- a/dev/null +++ b/noncore/apps/zsafe/zsafe.pro | |||
@@ -0,0 +1,19 @@ | |||
1 | TEMPLATE= app | ||
2 | #CONFIG = qt warn_on debug | ||
3 | CONFIG = qt warn_on release | ||
4 | HEADERS = zsafe.h krc2.h category.h categorylist.h zlistview.h \ | ||
5 | scqtfiledlg.h | ||
6 | SOURCES = main.cpp zsafe.cpp krc2.cpp category.cpp \ | ||
7 | categorylist.cpp zlistview.cpp shadedlistitem.cpp\ | ||
8 | scqtfileedit.cpp scqtfileedit.moc.cpp \ | ||
9 | scqtfiledlg.cpp | ||
10 | INCLUDEPATH+= $(QPEDIR)/include | ||
11 | INCLUDEPATH+= . | ||
12 | DEPENDPATH+= $(QPEDIR)/include | ||
13 | LIBS += -lqpe | ||
14 | #INTERFACES= newdialog.ui searchdialog.ui passworddialog.ui categorydialog.ui scqtfiledlg.ui | ||
15 | INTERFACES= newdialog.ui searchdialog.ui passworddialog.ui categorydialog.ui | ||
16 | INTERFACES += infoform.ui wait.ui | ||
17 | TARGET = zsafe | ||
18 | #DESTDIR = ../bin | ||
19 | TRANSLATIONS = i18n/de/zsafe.ts | ||