Subversion Repositories filter_foundry

Rev

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: