Rev 536 | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 536 | Rev 550 | ||
---|---|---|---|
Line 1... | Line 1... | ||
1 | /* |
1 | /* |
2 | This file is part of "Filter Foundry", a filter plugin for Adobe Photoshop |
2 | This file is part of "Filter Foundry", a filter plugin for Adobe Photoshop |
3 | Copyright (C) 2003-2009 Toby Thain, toby@telegraphics.net |
3 | Copyright (C) 2003-2009 Toby Thain, toby@telegraphics.net |
4 | Copyright (C) 2018-2022 Daniel Marschall, ViaThinkSoft |
4 | Copyright (C) 2018-2023 Daniel Marschall, ViaThinkSoft |
5 | 5 | ||
6 | This program is free software; you can redistribute it and/or modify |
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 |
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 |
8 | the Free Software Foundation; either version 2 of the License, or |
9 | (at your option) any later version. |
9 | (at your option) any later version. |
Line 21... | Line 21... | ||
21 | /* This is PLATFORM INDEPENDENT user interface code - mainly dialog logic */ |
21 | /* This is PLATFORM INDEPENDENT user interface code - mainly dialog logic */ |
22 | 22 | ||
23 | #include "ff.h" |
23 | #include "ff.h" |
24 | #include "compat_string.h" |
24 | #include "compat_string.h" |
25 | 25 | ||
26 | int ctls[8],maps[4]; |
- | |
27 | int checksliders_result; |
26 | int checksliders_result; |
28 | 27 | ||
29 | /* one-time initialisation of dialog box */ |
28 | /* one-time initialisation of dialog box */ |
30 | 29 | ||
31 | void builddlginit(DIALOGREF dp){ |
30 | void builddlginit(DIALOGREF dp){ |
32 | int i; |
31 | int i; |
33 | char s[0x100]; |
- | |
34 | 32 | ||
35 | if(gdata->parmloaded){ |
- | |
36 | SETCTLTEXT(dp,CATEGORYITEM, gdata->parm.szCategory); |
33 | SETCTLTEXT(dp,CATEGORYITEM, gdata->parm.szCategory); |
37 | SETCTLTEXT(dp,TITLEITEM, gdata->parm.szTitle); |
34 | SETCTLTEXT(dp,TITLEITEM, gdata->parm.szTitle); |
38 | SETCTLTEXT(dp,COPYRIGHTITEM,gdata->parm.szCopyright); |
35 | SETCTLTEXT(dp,COPYRIGHTITEM,gdata->parm.szCopyright); |
39 | SETCTLTEXT(dp,AUTHORITEM, gdata->parm.szAuthor); |
36 | SETCTLTEXT(dp,AUTHORITEM, gdata->parm.szAuthor); |
40 | for(i=0;i<4;++i){ |
37 | for(i=0;i<4;++i){ |
41 | SETCTLTEXT(dp,FIRSTMAPNAMEITEM+i,gdata->parm.szMap[i]); |
38 | SETCTLTEXT(dp,FIRSTMAPNAMEITEM+i,gdata->parm.szMap[i]); |
42 | } |
39 | } |
43 | for(i=0;i<8;++i){ |
40 | for(i=0;i<8;++i){ |
44 | SETCTLTEXT(dp,FIRSTCTLNAMEITEM+i,gdata->parm.szCtl[i]); |
41 | SETCTLTEXT(dp,FIRSTCTLNAMEITEM+i,gdata->parm.szCtl[i]); |
45 | } |
42 | } |
46 | }else{ |
- | |
47 | /* strictly speaking this is not needed on the Mac, |
- | |
48 | we can set initial values statically in the rez description */ |
- | |
49 | SETCTLTEXT(dp,CATEGORYITEM, "Filter Foundry"); |
- | |
50 | SETCTLTEXT(dp,TITLEITEM, "Untitled"); |
- | |
51 | SETCTLTEXT(dp,COPYRIGHTITEM,""); //"Filter Foundry Copyright (C) 2003-2009 Toby Thain, 2018-" RELEASE_YEAR " Daniel Marschall" |
- | |
52 | SETCTLTEXT(dp,AUTHORITEM, "Anonymous"); |
- | |
53 | strcpy(s,"Map X"); |
- | |
54 | for(i = 0; i < 4; ++i){ |
- | |
55 | s[4] = (char)('0' + i); |
- | |
56 | SETCTLTEXT(dp,FIRSTMAPNAMEITEM+i,s); |
- | |
57 | } |
- | |
58 | strcpy(s,"ctl(X)"); |
- | |
59 | for(i = 0; i < 8; ++i){ |
- | |
60 | s[4] = (char)('0' + i); |
- | |
61 | SETCTLTEXT(dp,FIRSTCTLNAMEITEM+i,s); |
- | |
62 | } |
- | |
63 | } |
- | |
64 | 43 | ||
65 | checksliders_result = checksliders(4,ctls,maps); |
44 | checksliders_result = checksliders(4); |
66 | for(i = 4; i--;){ |
45 | for(i = 4; i--;){ |
67 | DISABLEDLGITEM(dp,FIRSTMAPCHECKITEM+i); |
46 | DISABLEDLGITEM(dp,FIRSTMAPCHECKITEM+i); |
68 | if(maps[i] || (checksliders_result & CHECKSLIDERS_MAP_AMBIGUOUS)) |
47 | if(gdata->parm.map_used[i] || (checksliders_result & CHECKSLIDERS_MAP_AMBIGUOUS)) |
69 | CHECKDLGBUTTON(dp,FIRSTMAPCHECKITEM+i,true); |
48 | CHECKDLGBUTTON(dp,FIRSTMAPCHECKITEM+i,true); |
70 | else |
49 | else |
71 | HideDialogItem(dp,FIRSTMAPNAMEITEM+i); |
50 | HideDialogItem(dp,FIRSTMAPNAMEITEM+i); |
72 | } |
51 | } |
73 | for(i = 8; i--;){ |
52 | for(i = 8; i--;){ |
74 | DISABLEDLGITEM(dp,FIRSTCTLCHECKITEM+i); |
53 | DISABLEDLGITEM(dp,FIRSTCTLCHECKITEM+i); |
75 | if((ctls[i] || (checksliders_result & CHECKSLIDERS_CTL_AMBIGUOUS)) && |
54 | if((gdata->parm.ctl_used[i] || (checksliders_result & CHECKSLIDERS_CTL_AMBIGUOUS)) && |
76 | // When map() is activated, we don't need ctl labels, |
55 | // When map() is activated, we don't need ctl labels, |
77 | // since the standalone filter will only show map labels |
56 | // since the standalone filter will only show map labels |
78 | !maps[i/2] && |
57 | !gdata->parm.map_used[i/2] && |
79 | (!(checksliders_result & CHECKSLIDERS_MAP_AMBIGUOUS)) |
58 | (!(checksliders_result & CHECKSLIDERS_MAP_AMBIGUOUS)) |
80 | ) |
59 | ) |
81 | CHECKDLGBUTTON(dp,FIRSTCTLCHECKITEM+i,true); |
60 | CHECKDLGBUTTON(dp,FIRSTCTLCHECKITEM+i,true); |
82 | else |
61 | else |
83 | HideDialogItem(dp,FIRSTCTLNAMEITEM+i); |
62 | HideDialogItem(dp,FIRSTCTLNAMEITEM+i); |
Line 130... | Line 109... | ||
130 | NavReplyRecord reply; |
109 | NavReplyRecord reply; |
131 | #ifdef UNICODE |
110 | #ifdef UNICODE |
132 | Boolean unicode; |
111 | Boolean unicode; |
133 | #endif |
112 | #endif |
134 | Boolean extCharset; |
113 | Boolean extCharset; |
- | 114 | InternalState tmpState; |
|
135 | 115 | ||
136 | switch(item){ |
116 | switch(item){ |
137 | #ifdef MAC_ENV |
117 | #ifdef MAC_ENV |
138 | case ok: |
118 | case ok: |
139 | #else |
119 | #else |
Line 165... | Line 145... | ||
165 | containsExtCharset(dp, COPYRIGHTITEM) || |
145 | containsExtCharset(dp, COPYRIGHTITEM) || |
166 | containsExtCharset(dp, AUTHORITEM); |
146 | containsExtCharset(dp, AUTHORITEM); |
167 | 147 | ||
168 | // The AETE structure does only define single byte charsets |
148 | // The AETE structure does only define single byte charsets |
169 | for (i = 0; i < 8; ++i) { |
149 | for (i = 0; i < 8; ++i) { |
170 | if (ctls[i] || (checksliders_result & CHECKSLIDERS_CTL_AMBIGUOUS)) { |
150 | if (gdata->parm.ctl_used[i] || (checksliders_result & CHECKSLIDERS_CTL_AMBIGUOUS)) { |
171 | #ifdef UNICODE |
151 | #ifdef UNICODE |
172 | unicode |= containsUnicodeInput(dp, FIRSTCTLNAMEITEM + i); |
152 | unicode |= containsUnicodeInput(dp, FIRSTCTLNAMEITEM + i); |
173 | #endif |
153 | #endif |
174 | extCharset |= containsExtCharset(dp, FIRSTCTLNAMEITEM + i); |
154 | extCharset |= containsExtCharset(dp, FIRSTCTLNAMEITEM + i); |
175 | } |
155 | } |
176 | } |
156 | } |
177 | for (i = 0; i < 4; ++i) { |
157 | for (i = 0; i < 4; ++i) { |
178 | if (maps[i] || (checksliders_result & CHECKSLIDERS_MAP_AMBIGUOUS)) { |
158 | if (gdata->parm.map_used[i] || (checksliders_result & CHECKSLIDERS_MAP_AMBIGUOUS)) { |
179 | #ifdef UNICODE |
159 | #ifdef UNICODE |
180 | unicode |= containsUnicodeInput(dp, FIRSTMAPNAMEITEM + i); |
160 | unicode |= containsUnicodeInput(dp, FIRSTMAPNAMEITEM + i); |
181 | #endif |
161 | #endif |
182 | extCharset |= containsExtCharset(dp, FIRSTMAPNAMEITEM + i); |
162 | extCharset |= containsExtCharset(dp, FIRSTMAPNAMEITEM + i); |
183 | } |
163 | } |
Line 194... | Line 174... | ||
194 | if (extCharset) { |
174 | if (extCharset) { |
195 | simplewarning_id(MSG_EXTCHARSET_DATA_WARNING_ID); |
175 | simplewarning_id(MSG_EXTCHARSET_DATA_WARNING_ID); |
196 | } |
176 | } |
197 | 177 | ||
198 | // Now begin |
178 | // Now begin |
199 | memset(&gdata->parm,0,sizeof(PARM_T)); |
- | |
200 | GetDlgItemTextA(dp,CATEGORYITEM,gdata->parm.szCategory,MAXFIELD-4/*ProtectFlag*/); |
179 | GetDlgItemTextA(dp,CATEGORYITEM,gdata->parm.szCategory,MAXFIELD-4/*ProtectFlag*/); |
201 | GetDlgItemTextA(dp,TITLEITEM,gdata->parm.szTitle,MAXFIELD); |
180 | GetDlgItemTextA(dp,TITLEITEM,gdata->parm.szTitle,MAXFIELD); |
202 | GetDlgItemTextA(dp,COPYRIGHTITEM,gdata->parm.szCopyright,MAXFIELD); |
181 | GetDlgItemTextA(dp,COPYRIGHTITEM,gdata->parm.szCopyright,MAXFIELD); |
203 | GetDlgItemTextA(dp,AUTHORITEM,gdata->parm.szAuthor,MAXFIELD); |
182 | GetDlgItemTextA(dp,AUTHORITEM,gdata->parm.szAuthor,MAXFIELD); |
204 | gdata->parm.cbSize = PARM_SIZE; |
- | |
205 | gdata->parm.standalone = 1; //0=original FF, 1=standalone filter |
- | |
206 | needui = 0; |
183 | needui = 0; |
207 | // Sliders |
184 | // Sliders |
208 | for(i = 0; i < 8; ++i){ |
185 | for(i = 0; i < 8; ++i){ |
209 | gdata->parm.val[i] = slider[i]; |
- | |
210 | gdata->parm.ctl_used[i] = ctls[i] || (checksliders_result & CHECKSLIDERS_CTL_AMBIGUOUS); |
186 | gdata->parm.ctl_used[i] = gdata->parm.ctl_used[i] || (checksliders_result & CHECKSLIDERS_CTL_AMBIGUOUS); |
211 | needui |= gdata->parm.ctl_used[i]; |
187 | needui |= gdata->parm.ctl_used[i]; |
212 | GetDlgItemTextA(dp,FIRSTCTLNAMEITEM+i, gdata->parm.szCtl[i],MAXFIELD); |
188 | GetDlgItemTextA(dp, FIRSTCTLNAMEITEM + i, gdata->parm.szCtl[i], MAXFIELD); |
213 | } |
189 | } |
214 | // Maps |
190 | // Maps |
215 | for (i = 0; i < 4; ++i) { |
191 | for (i = 0; i < 4; ++i) { |
216 | gdata->parm.map_used[i] = maps[i] || (checksliders_result & CHECKSLIDERS_MAP_AMBIGUOUS); |
192 | gdata->parm.map_used[i] = gdata->parm.map_used[i] || (checksliders_result & CHECKSLIDERS_MAP_AMBIGUOUS); |
217 | needui |= gdata->parm.map_used[i]; |
193 | needui |= gdata->parm.map_used[i]; |
218 | GetDlgItemTextA(dp, FIRSTMAPNAMEITEM + i, gdata->parm.szMap[i], MAXFIELD); |
194 | GetDlgItemTextA(dp, FIRSTMAPNAMEITEM + i, gdata->parm.szMap[i], MAXFIELD); |
219 | } |
195 | } |
220 | // Expressions |
- | |
221 | for (i = 0; i < 4; ++i) { |
- | |
222 | if (strlen(expr[i]) >= sizeof(gdata->parm.szFormula[i])) { |
- | |
223 | if (i == 0) { |
- | |
224 | simplealert_id(MSG_FORMULA_R_1023_TRUNCATED_ID); |
- | |
225 | } |
196 | |
226 | else if (i == 1) { |
- | |
227 | simplealert_id(MSG_FORMULA_G_1023_TRUNCATED_ID); |
- | |
228 | } |
- | |
229 | else if (i == 2) { |
- | |
230 | simplealert_id(MSG_FORMULA_B_1023_TRUNCATED_ID); |
- | |
231 | } |
- | |
232 | else if (i == 3) { |
- | |
233 | simplealert_id(MSG_FORMULA_A_1023_TRUNCATED_ID); |
- | |
234 | } |
- | |
235 | expr[i][sizeof(gdata->parm.szFormula[i]) - 1] = '\0'; |
197 | tmpState = saveInternalState(); // the standalone flag and obfuscation must not be preserved, otherwise we cannot continue editing the filter |
236 | } |
198 | |
237 | strcpy(gdata->parm.szFormula[i], expr[i]); |
199 | gdata->parm.standalone = 1; |
238 | } |
- | |
239 | gdata->parm.popDialog = needui; //true if need to pop a parameter dialog |
200 | gdata->parm.popDialog = needui; //true if need to pop a parameter dialog |
240 | gdata->parm.unknown1 = gdata->parm.unknown2 = gdata->parm.unknown3 = 0; |
201 | gdata->parm.unknown1 = gdata->parm.unknown2 = gdata->parm.unknown3 = 0; |
241 | gdata->parm.iProtected = ISDLGBUTTONCHECKED(dp,PROTECTITEM); // == 1 means protected |
202 | gdata->parm.iProtected = ISDLGBUTTONCHECKED(dp,PROTECTITEM); // == 1 means protected |
242 | gdata->obfusc = (Boolean)ISDLGBUTTONCHECKED(dp,PROTECTITEM); |
203 | gdata->obfusc = (Boolean)ISDLGBUTTONCHECKED(dp,PROTECTITEM); |
243 | 204 | ||
Line 288... | Line 249... | ||
288 | 249 | ||
289 | free(filters); |
250 | free(filters); |
290 | free(title); |
251 | free(title); |
291 | 252 | ||
292 | if (makeDlgRet) { |
253 | if (makeDlgRet) { |
- | 254 | parm_cleanup(); |
|
293 | make_standalone(&sfr); |
255 | make_standalone(&sfr); |
294 | } |
256 | } |
295 | else { |
- | |
296 | return true; // keep going. Let the user correct their input |
- | |
297 | } |
- | |
298 | } |
257 | } |
299 | 258 | ||
- | 259 | restoreInternalState(tmpState); |
|
- | 260 | ||
300 | return false; // end dialog |
261 | return false; // end dialog |
301 | #ifdef MAC_ENV |
262 | #ifdef MAC_ENV |
302 | case cancel: |
263 | case cancel: |
303 | #else |
264 | #else |
304 | case IDCANCEL: |
265 | case IDCANCEL: |