]>
Commit | Line | Data |
---|---|---|
2193517f | 1 | // rc2wxr.cpp: implementation of the rc2wxr class. |
92a19c2e | 2 | |
88d42654 | 3 | // |
92a19c2e | 4 | |
88d42654 | 5 | ////////////////////////////////////////////////////////////////////// |
92a19c2e | 6 | |
2193517f | 7 | //Author: Brian Gavin 9/24/00 |
92a19c2e | 8 | |
2193517f | 9 | //License: wxWindows License |
92a19c2e | 10 | |
2193517f | 11 | /* |
92a19c2e | 12 | |
2193517f | 13 | WARNING- I know this code has some bugs to work out but |
92a19c2e | 14 | |
2193517f | 15 | I don't plan to fix them since I feel that wxr files will |
92a19c2e | 16 | |
2193517f | 17 | not be used much longer. |
92a19c2e | 18 | |
2193517f | 19 | This code was used as a starting point for my rc2xml converter |
92a19c2e | 20 | |
2193517f | 21 | */ |
92a19c2e | 22 | |
2193517f | 23 | #ifdef __GNUG__ |
92a19c2e | 24 | |
2193517f | 25 | #pragma implementation "rc2wxr.cpp" |
92a19c2e | 26 | |
2193517f | 27 | #pragma interface "rc2wxr.cpp" |
92a19c2e | 28 | |
2193517f VS |
29 | #endif |
30 | ||
92a19c2e GT |
31 | |
32 | ||
88d42654 | 33 | // For compilers that support precompilation, includes "wx/wx.h". |
92a19c2e GT |
34 | |
35 | #include "wx/wxprec.h" | |
36 | ||
37 | ||
2193517f VS |
38 | |
39 | #ifdef __BORLANDC__ | |
92a19c2e | 40 | |
2193517f | 41 | #pragma hdrstop |
92a19c2e | 42 | |
2193517f VS |
43 | #endif |
44 | ||
92a19c2e GT |
45 | |
46 | ||
2193517f | 47 | // for all others, include the necessary headers (this file is usually all you |
92a19c2e | 48 | |
2193517f | 49 | // need because it includes almost all "standard" wxWindows headers |
92a19c2e | 50 | |
2193517f | 51 | #ifndef WX_PRECOMP |
92a19c2e | 52 | |
2193517f | 53 | #include <wx/wx.h> |
92a19c2e | 54 | |
2193517f VS |
55 | #endif |
56 | ||
88d42654 | 57 | |
92a19c2e GT |
58 | |
59 | ||
60 | ||
88d42654 | 61 | #include "rc2wxr.h" |
92a19c2e | 62 | |
88d42654 | 63 | #include "wx/image.h" |
92a19c2e | 64 | |
7c9955d1 JS |
65 | #include "wx/deprecated/setup.h" |
66 | #include "wx/deprecated/resource.h" | |
92a19c2e | 67 | |
88d42654 | 68 | ////////////////////////////////////////////////////////////////////// |
92a19c2e | 69 | |
88d42654 | 70 | // Construction/Destruction |
92a19c2e | 71 | |
88d42654 VS |
72 | ////////////////////////////////////////////////////////////////////// |
73 | ||
92a19c2e GT |
74 | |
75 | ||
2193517f | 76 | rc2wxr::rc2wxr() |
92a19c2e | 77 | |
88d42654 | 78 | { |
92a19c2e | 79 | |
88d42654 | 80 | m_done=FALSE; |
92a19c2e | 81 | |
88d42654 | 82 | m_controlid=6000; |
92a19c2e | 83 | |
88d42654 VS |
84 | } |
85 | ||
92a19c2e GT |
86 | |
87 | ||
2193517f | 88 | rc2wxr::~rc2wxr() |
92a19c2e | 89 | |
88d42654 VS |
90 | { |
91 | ||
92a19c2e GT |
92 | |
93 | ||
88d42654 VS |
94 | } |
95 | ||
92a19c2e GT |
96 | |
97 | ||
2193517f | 98 | void rc2wxr::Convert(wxString wxrfile, wxString rcfile) |
92a19c2e | 99 | |
88d42654 | 100 | { |
92a19c2e | 101 | |
2193517f | 102 | m_rc.Open(rcfile); |
92a19c2e | 103 | |
2193517f | 104 | m_filesize=m_rc.Length(); |
92a19c2e | 105 | |
19d0f58d | 106 | if( (m_wxr = wxFopen( wxrfile, _T("wt") )) == NULL ) |
92a19c2e | 107 | |
88d42654 | 108 | { |
92a19c2e | 109 | |
2193517f | 110 | return; |
92a19c2e | 111 | |
88d42654 VS |
112 | } |
113 | ||
88d42654 | 114 | |
92a19c2e GT |
115 | |
116 | ||
117 | ||
88d42654 VS |
118 | wxString tok,prevtok; |
119 | ||
120 | ||
92a19c2e GT |
121 | |
122 | ||
123 | ||
88d42654 | 124 | while (!m_done) |
92a19c2e | 125 | |
88d42654 VS |
126 | { |
127 | ||
92a19c2e GT |
128 | |
129 | ||
88d42654 VS |
130 | tok=GetToken(); |
131 | ||
92a19c2e GT |
132 | |
133 | ||
19d0f58d | 134 | if (tok==_T("DIALOG")) |
92a19c2e | 135 | |
88d42654 | 136 | { |
92a19c2e | 137 | |
2193517f | 138 | ParseDialog(prevtok); |
92a19c2e | 139 | |
88d42654 | 140 | } |
92a19c2e | 141 | |
7c9955d1 | 142 | |
88d42654 | 143 | |
92a19c2e GT |
144 | |
145 | ||
19d0f58d | 146 | if (tok==_T("MENU")) |
92a19c2e | 147 | |
88d42654 | 148 | { |
92a19c2e | 149 | |
2193517f | 150 | ParseMenu(prevtok); |
92a19c2e | 151 | |
7c9955d1 | 152 | } |
88d42654 | 153 | |
92a19c2e GT |
154 | |
155 | ||
88d42654 | 156 | prevtok=tok; |
92a19c2e | 157 | |
88d42654 | 158 | } |
2193517f | 159 | |
92a19c2e GT |
160 | |
161 | ||
88d42654 | 162 | fclose(m_wxr); |
92a19c2e | 163 | |
7c9955d1 | 164 | //fclose(m_rc); |
92a19c2e | 165 | |
88d42654 VS |
166 | m_rc.Close(); |
167 | ||
92a19c2e GT |
168 | |
169 | ||
88d42654 VS |
170 | } |
171 | ||
172 | ||
92a19c2e GT |
173 | |
174 | ||
175 | ||
88d42654 | 176 | /* |
92a19c2e | 177 | |
7c9955d1 | 178 | Example .rc |
92a19c2e | 179 | |
88d42654 | 180 | Microsoft style as of v5.0 |
92a19c2e | 181 | |
88d42654 | 182 | IDD_ABOUTBOX DIALOG DISCARDABLE 0, 0, 217, 55 |
92a19c2e | 183 | |
88d42654 | 184 | STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU |
92a19c2e | 185 | |
88d42654 | 186 | CAPTION "About Funimator" |
92a19c2e | 187 | |
88d42654 VS |
188 | FONT 8, "MS Sans Serif" |
189 | ||
92a19c2e GT |
190 | |
191 | ||
88d42654 | 192 | Borland 4.5 style rc |
92a19c2e | 193 | |
88d42654 | 194 | IDD_DIBATTR DIALOG 7, 16, 172, 119 |
92a19c2e | 195 | |
88d42654 | 196 | STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU |
92a19c2e | 197 | |
88d42654 | 198 | CAPTION "DIB Attributes" |
92a19c2e | 199 | |
88d42654 | 200 | FONT 8, "MS Sans Serif" |
92a19c2e | 201 | |
88d42654 | 202 | { |
92a19c2e | 203 | |
88d42654 | 204 | DEFPUSHBUTTON "Ok", IDOK, 114, 8, 50, 14 |
92a19c2e | 205 | |
88d42654 VS |
206 | PUSHBUTTON "Cancel", IDCANCEL, 114, 28, 50, 14 |
207 | ||
208 | ||
209 | ||
92a19c2e GT |
210 | |
211 | ||
212 | ||
213 | ||
88d42654 | 214 | */ |
92a19c2e | 215 | |
2193517f | 216 | void rc2wxr::ParseDialog(wxString dlgname) |
92a19c2e | 217 | |
2193517f | 218 | { |
92a19c2e | 219 | |
2193517f | 220 | wxString tok; |
92a19c2e | 221 | |
2193517f | 222 | static int dlgid=999; |
92a19c2e | 223 | |
2193517f | 224 | dlgid++; |
92a19c2e | 225 | |
7c9955d1 | 226 | /* Make sure that this really is a dialog |
92a19c2e | 227 | |
2193517f | 228 | microsoft reuses the keyword DIALOG for other things |
92a19c2e | 229 | |
2193517f | 230 | */ |
92a19c2e | 231 | |
2193517f | 232 | tok=PeekToken(); |
92a19c2e | 233 | |
2193517f | 234 | //Microsoft notation? |
92a19c2e | 235 | |
19d0f58d | 236 | if (tok==_T("DISCARDABLE")) |
92a19c2e | 237 | |
2193517f | 238 | { |
92a19c2e | 239 | |
2193517f | 240 | tok=GetToken(); |
92a19c2e | 241 | |
2193517f | 242 | tok=PeekToken(); |
92a19c2e | 243 | |
2193517f | 244 | } |
92a19c2e | 245 | |
2193517f | 246 | //This isn't a Dialog resource eject eject |
92a19c2e | 247 | |
2193517f | 248 | if (!tok.IsNumber()) |
92a19c2e | 249 | |
2193517f | 250 | return; |
92a19c2e | 251 | |
88d42654 | 252 | //Generate Dialog text |
92a19c2e | 253 | |
19d0f58d | 254 | wxFprintf(m_wxr,_T("static char *dialog%i = \"dialog(name = '%s',\\\n"),dlgid,dlgname.c_str()); |
92a19c2e | 255 | |
88d42654 | 256 | //be lazy about style for now. add it later |
92a19c2e | 257 | |
19d0f58d | 258 | wxFprintf(m_wxr,_T("style = 'wxRAISED_BORDER | wxCAPTION | wxTHICK_FRAME | wxSYSTEM_MENU',\\\n")); |
88d42654 | 259 | |
92a19c2e GT |
260 | |
261 | ||
19d0f58d | 262 | wxFprintf(m_wxr,_T("id = %i,\\\n"),dlgid); |
88d42654 | 263 | |
92a19c2e GT |
264 | |
265 | ||
88d42654 | 266 | //Record x,y,width,height |
92a19c2e | 267 | |
88d42654 | 268 | int x,y,width,height; |
92a19c2e | 269 | |
88d42654 | 270 | ReadRect(x,y,width,height); |
92a19c2e | 271 | |
19d0f58d | 272 | wxFprintf(m_wxr,_T("x = %i, y = %i, width = %i, height = %i,\\\n"),x,y,width,height); |
88d42654 VS |
273 | |
274 | ||
92a19c2e GT |
275 | |
276 | ||
277 | ||
88d42654 | 278 | //CAPTION "About Funimator" |
92a19c2e | 279 | |
88d42654 | 280 | //Get Title |
92a19c2e | 281 | |
88d42654 | 282 | tok=GetToken(); |
92a19c2e | 283 | |
88d42654 VS |
284 | wxString title; |
285 | ||
92a19c2e GT |
286 | |
287 | ||
19d0f58d | 288 | while ((tok!=_T("BEGIN"))&(tok!=_T("{"))) |
92a19c2e | 289 | |
88d42654 | 290 | { |
92a19c2e | 291 | |
19d0f58d | 292 | if (tok==_T("CAPTION")) |
92a19c2e | 293 | |
2193517f | 294 | { |
92a19c2e | 295 | |
2193517f | 296 | title=GetQuoteField(); |
92a19c2e | 297 | |
19d0f58d | 298 | wxFprintf(m_wxr,_T("title = '%s',\\\n"),title.c_str()); |
92a19c2e | 299 | |
2193517f | 300 | } |
92a19c2e | 301 | |
88d42654 | 302 | tok=GetToken(); |
92a19c2e | 303 | |
88d42654 | 304 | } |
92a19c2e | 305 | |
19d0f58d | 306 | wxFprintf(m_wxr,_T("use_dialog_units = 1,\\\n")); |
92a19c2e | 307 | |
19d0f58d | 308 | wxFprintf(m_wxr,_T("use_system_defaults = 0,\\\n")); |
88d42654 | 309 | |
92a19c2e GT |
310 | |
311 | ||
19d0f58d | 312 | wxFprintf(m_wxr,_T("font = [8, 'wxSWISS', 'wxNORMAL', 'wxNORMAL', 0, 'MS Sans Serif'],\\\n")); |
92a19c2e | 313 | |
88d42654 | 314 | ParseControls(); |
92a19c2e | 315 | |
19d0f58d | 316 | wxFprintf(m_wxr,_T(").\";\n\n")); |
92a19c2e | 317 | |
88d42654 VS |
318 | } |
319 | ||
92a19c2e GT |
320 | |
321 | ||
88d42654 | 322 | /* |
92a19c2e | 323 | |
88d42654 VS |
324 | BEGIN |
325 | ||
326 | ||
327 | ||
92a19c2e GT |
328 | |
329 | ||
330 | ||
331 | ||
7c9955d1 | 332 | EDITTEXT IDC_BANDS,36,83,22,14,ES_AUTOHSCROLL | ES_NUMBER | NOT |
92a19c2e | 333 | |
88d42654 | 334 | WS_TABSTOP |
92a19c2e | 335 | |
88d42654 | 336 | LTEXT "Bands",IDC_STATIC,11,86,21,8 |
92a19c2e | 337 | |
88d42654 | 338 | EDITTEXT IDC_NAME,10,3,75,14,ES_AUTOHSCROLL |
92a19c2e | 339 | |
88d42654 | 340 | END |
92a19c2e | 341 | |
88d42654 | 342 | */ |
92a19c2e | 343 | |
2193517f | 344 | void rc2wxr::ParseControls() |
92a19c2e | 345 | |
88d42654 | 346 | { |
92a19c2e | 347 | |
88d42654 VS |
348 | wxString tok; |
349 | ||
92a19c2e GT |
350 | |
351 | ||
88d42654 | 352 | tok=GetToken(); |
92a19c2e | 353 | |
19d0f58d | 354 | while ((tok!=_T("END"))&(tok!=_T("}"))) |
92a19c2e | 355 | |
88d42654 | 356 | { |
92a19c2e | 357 | |
19d0f58d | 358 | if (tok==_T("LTEXT")) |
92a19c2e | 359 | |
88d42654 | 360 | ParseStaticText(); |
92a19c2e | 361 | |
19d0f58d | 362 | if (tok==_T("EDITTEXT")) |
92a19c2e | 363 | |
88d42654 | 364 | ParseTextCtrl(); |
92a19c2e | 365 | |
19d0f58d | 366 | if (tok==_T("PUSHBUTTON")) |
92a19c2e | 367 | |
88d42654 | 368 | ParsePushButton(); |
92a19c2e | 369 | |
19d0f58d | 370 | if (tok==_T("DEFPUSHBUTTON")) |
92a19c2e | 371 | |
88d42654 | 372 | ParsePushButton(); |
92a19c2e | 373 | |
19d0f58d | 374 | if (tok==_T("GROUPBOX")) |
92a19c2e | 375 | |
88d42654 | 376 | ParseGroupBox(); |
92a19c2e | 377 | |
19d0f58d | 378 | if (tok==_T("COMBOBOX")) |
92a19c2e | 379 | |
88d42654 | 380 | ParseComboBox(); |
92a19c2e | 381 | |
19d0f58d | 382 | if (tok==_T("CONTROL")) |
92a19c2e | 383 | |
88d42654 VS |
384 | ParseControlMS(); |
385 | ||
92a19c2e GT |
386 | |
387 | ||
88d42654 | 388 | tok=GetToken(); |
92a19c2e | 389 | |
88d42654 VS |
390 | } |
391 | ||
92a19c2e GT |
392 | |
393 | ||
88d42654 | 394 | } |
92a19c2e | 395 | |
88d42654 | 396 | //LTEXT "Radius",IDC_STATIC,9,67,23,8 |
92a19c2e | 397 | |
2193517f | 398 | void rc2wxr::ParseStaticText() |
92a19c2e | 399 | |
88d42654 | 400 | { |
92a19c2e | 401 | |
88d42654 | 402 | wxString tok; |
92a19c2e | 403 | |
88d42654 | 404 | wxString phrase,varname; |
92a19c2e | 405 | |
88d42654 | 406 | phrase=GetQuoteField(); |
92a19c2e | 407 | |
88d42654 | 408 | varname=GetToken(); |
92a19c2e | 409 | |
88d42654 | 410 | m_controlid++; |
92a19c2e | 411 | |
88d42654 | 412 | int x,y,width,height; |
92a19c2e | 413 | |
88d42654 | 414 | ReadRect(x,y,width,height); |
92a19c2e | 415 | |
19d0f58d | 416 | wxFprintf(m_wxr,_T(" control = [%i,wxStaticText,'%s','0','%s',"),m_controlid,phrase.c_str(),varname.c_str()); |
92a19c2e | 417 | |
19d0f58d | 418 | wxFprintf(m_wxr,_T("%i,%i,%i,%i,'',\\\n"),x,y,width,height); |
92a19c2e | 419 | |
19d0f58d | 420 | wxFprintf(m_wxr,_T("[8, 'wxSWISS', 'wxNORMAL', 'wxNORMAL', 0, 'MS Sans Serif']],\\\n")); |
92a19c2e | 421 | |
88d42654 | 422 | } |
92a19c2e | 423 | |
88d42654 | 424 | //EDITTEXT IDC_RADIUS,36,65,40,14,ES_AUTOHSCROLL |
92a19c2e | 425 | |
2193517f | 426 | void rc2wxr::ParseTextCtrl() |
92a19c2e | 427 | |
88d42654 | 428 | { |
92a19c2e | 429 | |
88d42654 | 430 | wxString tok; |
92a19c2e | 431 | |
88d42654 | 432 | wxString varname; |
92a19c2e | 433 | |
88d42654 | 434 | varname=GetToken(); |
92a19c2e | 435 | |
88d42654 | 436 | m_controlid++; |
92a19c2e | 437 | |
88d42654 | 438 | int x,y,width,height; |
92a19c2e | 439 | |
88d42654 | 440 | ReadRect(x,y,width,height); |
92a19c2e | 441 | |
19d0f58d | 442 | wxFprintf(m_wxr,_T(" control = [%i,wxTextCtrl,'','0','%s',"),m_controlid,varname.c_str()); |
92a19c2e | 443 | |
19d0f58d | 444 | wxFprintf(m_wxr,_T("%i,%i,%i,%i,'',\\\n"),x,y,width,height); |
92a19c2e | 445 | |
19d0f58d | 446 | wxFprintf(m_wxr,_T("[8, 'wxSWISS', 'wxNORMAL', 'wxNORMAL', 0, 'MS Sans Serif']],\\\n")); |
88d42654 | 447 | |
92a19c2e GT |
448 | |
449 | ||
88d42654 | 450 | } |
92a19c2e | 451 | |
88d42654 | 452 | //PUSHBUTTON "Create/Update",IDC_CREATE,15,25,53,13,NOT WS_TABSTOP |
92a19c2e | 453 | |
2193517f | 454 | void rc2wxr::ParsePushButton() |
92a19c2e | 455 | |
88d42654 | 456 | { |
92a19c2e | 457 | |
88d42654 | 458 | wxString tok; |
92a19c2e | 459 | |
88d42654 | 460 | wxString phrase,varname; |
92a19c2e | 461 | |
88d42654 | 462 | phrase=GetQuoteField(); |
92a19c2e | 463 | |
88d42654 | 464 | varname=GetToken(); |
92a19c2e | 465 | |
88d42654 | 466 | int c; |
92a19c2e | 467 | |
88d42654 | 468 | m_controlid++; |
92a19c2e | 469 | |
88d42654 | 470 | c=m_controlid; |
92a19c2e | 471 | |
19d0f58d | 472 | if (varname==_T("IDOK")) |
92a19c2e | 473 | |
88d42654 VS |
474 | c=wxID_OK; |
475 | ||
92a19c2e GT |
476 | |
477 | ||
19d0f58d | 478 | if (varname==_T("IDCANCEL")) |
92a19c2e | 479 | |
88d42654 VS |
480 | c=wxID_CANCEL; |
481 | ||
92a19c2e GT |
482 | |
483 | ||
19d0f58d | 484 | if (varname==_T("IDAPPLY")) |
92a19c2e | 485 | |
88d42654 VS |
486 | c=wxID_APPLY; |
487 | ||
92a19c2e GT |
488 | |
489 | ||
88d42654 | 490 | int x,y,width,height; |
92a19c2e | 491 | |
88d42654 | 492 | ReadRect(x,y,width,height); |
92a19c2e | 493 | |
19d0f58d | 494 | wxFprintf(m_wxr,_T(" control = [%i,wxButton,'%s','0','%s',"),c,phrase.c_str(),varname.c_str()); |
92a19c2e | 495 | |
19d0f58d | 496 | wxFprintf(m_wxr,_T("%i,%i,%i,%i,'',\\\n"),x,y,width,height); |
92a19c2e | 497 | |
19d0f58d | 498 | wxFprintf(m_wxr,_T("[8, 'wxSWISS', 'wxNORMAL', 'wxNORMAL', 0, 'MS Sans Serif']],\\\n")); |
88d42654 | 499 | |
92a19c2e GT |
500 | |
501 | ||
88d42654 VS |
502 | } |
503 | ||
504 | ||
92a19c2e GT |
505 | |
506 | ||
507 | ||
2193517f | 508 | bool rc2wxr::Seperator(int ch) |
92a19c2e | 509 | |
88d42654 | 510 | { |
92a19c2e | 511 | |
88d42654 | 512 | if ((ch==' ')|(ch==',')|(ch==13)|(ch==10)|(ch=='|')) |
92a19c2e | 513 | |
88d42654 VS |
514 | return TRUE; |
515 | ||
92a19c2e GT |
516 | |
517 | ||
88d42654 | 518 | if (ch==EOF) |
92a19c2e | 519 | |
88d42654 | 520 | { |
92a19c2e | 521 | |
2193517f | 522 | m_done=TRUE; |
92a19c2e | 523 | |
2193517f | 524 | return TRUE; |
92a19c2e | 525 | |
88d42654 | 526 | } |
92a19c2e | 527 | |
88d42654 | 528 | return FALSE; |
92a19c2e | 529 | |
88d42654 VS |
530 | } |
531 | ||
92a19c2e GT |
532 | |
533 | ||
2193517f | 534 | void rc2wxr::ParseGroupBox() |
92a19c2e | 535 | |
88d42654 | 536 | { |
92a19c2e | 537 | |
88d42654 | 538 | // GROUPBOX "Rotate",IDC_STATIC,1,1,71,79 |
92a19c2e | 539 | |
88d42654 | 540 | wxString tok; |
92a19c2e | 541 | |
88d42654 | 542 | wxString phrase,varname; |
92a19c2e | 543 | |
88d42654 | 544 | phrase=GetQuoteField(); |
92a19c2e | 545 | |
88d42654 | 546 | varname=GetToken(); |
92a19c2e | 547 | |
88d42654 | 548 | m_controlid++; |
92a19c2e | 549 | |
88d42654 | 550 | int x,y,width,height; |
92a19c2e | 551 | |
88d42654 | 552 | ReadRect(x,y,width,height); |
92a19c2e | 553 | |
19d0f58d | 554 | wxFprintf(m_wxr,_T(" control = [%i,wxStaticBox,'%s','0','%s',"),m_controlid,phrase.c_str(),varname.c_str()); |
92a19c2e | 555 | |
19d0f58d | 556 | wxFprintf(m_wxr,_T("%i,%i,%i,%i,'',\\\n"),x,y,width,height); |
92a19c2e | 557 | |
19d0f58d | 558 | wxFprintf(m_wxr,_T("[8, 'wxSWISS', 'wxNORMAL', 'wxNORMAL', 0, 'MS Sans Serif']],\\\n")); |
88d42654 VS |
559 | |
560 | ||
92a19c2e GT |
561 | |
562 | ||
563 | ||
88d42654 VS |
564 | } |
565 | ||
92a19c2e GT |
566 | |
567 | ||
2193517f | 568 | void rc2wxr::ReadRect(int & x, int & y, int & width, int & height) |
92a19c2e | 569 | |
88d42654 | 570 | { |
92a19c2e | 571 | |
19d0f58d | 572 | x=wxAtoi(GetToken()); |
92a19c2e | 573 | |
19d0f58d | 574 | y=wxAtoi(GetToken()); |
92a19c2e | 575 | |
19d0f58d | 576 | width=wxAtoi(GetToken()); |
92a19c2e | 577 | |
19d0f58d | 578 | height=wxAtoi(GetToken()); |
88d42654 | 579 | |
92a19c2e GT |
580 | |
581 | ||
88d42654 VS |
582 | } |
583 | ||
92a19c2e GT |
584 | |
585 | ||
2193517f | 586 | wxString rc2wxr::GetToken() |
92a19c2e | 587 | |
88d42654 | 588 | { |
92a19c2e | 589 | |
19d0f58d | 590 | wxString tok=wxEmptyString; |
88d42654 | 591 | |
92a19c2e GT |
592 | |
593 | ||
88d42654 | 594 | if (m_rc.Eof()) |
92a19c2e | 595 | |
88d42654 | 596 | { |
92a19c2e | 597 | |
88d42654 | 598 | m_done=TRUE; |
92a19c2e | 599 | |
88d42654 | 600 | return tok; |
92a19c2e | 601 | |
88d42654 VS |
602 | } |
603 | ||
92a19c2e GT |
604 | |
605 | ||
88d42654 | 606 | int ch=0; |
92a19c2e | 607 | |
88d42654 | 608 | ReadChar(ch); |
92a19c2e | 609 | |
88d42654 | 610 | if (ch==EOF) |
92a19c2e | 611 | |
88d42654 | 612 | { |
92a19c2e | 613 | |
88d42654 | 614 | m_done=TRUE; |
92a19c2e | 615 | |
88d42654 | 616 | return tok; |
92a19c2e | 617 | |
88d42654 VS |
618 | } |
619 | ||
92a19c2e GT |
620 | |
621 | ||
88d42654 | 622 | while (Seperator(ch)) |
92a19c2e | 623 | |
88d42654 | 624 | { |
92a19c2e | 625 | |
88d42654 | 626 | ReadChar(ch); |
92a19c2e | 627 | |
88d42654 | 628 | if (m_done) |
92a19c2e | 629 | |
2193517f | 630 | return tok; |
92a19c2e | 631 | |
88d42654 VS |
632 | } |
633 | ||
92a19c2e GT |
634 | |
635 | ||
88d42654 | 636 | if (ch==EOF) |
92a19c2e | 637 | |
88d42654 | 638 | { |
92a19c2e | 639 | |
2193517f | 640 | m_done=TRUE; |
88d42654 | 641 | |
92a19c2e GT |
642 | |
643 | ||
88d42654 | 644 | } |
92a19c2e | 645 | |
7c9955d1 | 646 | |
88d42654 | 647 | |
92a19c2e GT |
648 | |
649 | ||
88d42654 | 650 | while (!Seperator(ch)) |
92a19c2e | 651 | |
88d42654 | 652 | { |
92a19c2e | 653 | |
2193517f | 654 | tok+=(char)ch; |
92a19c2e | 655 | |
2193517f | 656 | ReadChar(ch); |
88d42654 | 657 | |
92a19c2e GT |
658 | |
659 | ||
88d42654 VS |
660 | } |
661 | ||
92a19c2e GT |
662 | |
663 | ||
88d42654 | 664 | if (ch==EOF) |
92a19c2e | 665 | |
88d42654 VS |
666 | m_done=TRUE; |
667 | ||
668 | ||
92a19c2e GT |
669 | |
670 | ||
671 | ||
88d42654 | 672 | return tok; |
92a19c2e | 673 | |
88d42654 VS |
674 | } |
675 | ||
92a19c2e GT |
676 | |
677 | ||
2193517f | 678 | wxString rc2wxr::GetQuoteField() |
92a19c2e | 679 | |
88d42654 | 680 | { |
92a19c2e | 681 | |
88d42654 | 682 | wxString phrase; |
92a19c2e | 683 | |
88d42654 | 684 | //ASCII code 34 " |
92a19c2e | 685 | |
88d42654 | 686 | int ch=0; |
92a19c2e | 687 | |
88d42654 VS |
688 | ReadChar(ch); |
689 | ||
92a19c2e GT |
690 | |
691 | ||
88d42654 | 692 | while (ch!=34) |
92a19c2e | 693 | |
88d42654 | 694 | ReadChar(ch); |
92a19c2e | 695 | |
7c9955d1 | 696 | |
92a19c2e | 697 | |
88d42654 VS |
698 | ReadChar(ch); |
699 | ||
92a19c2e GT |
700 | |
701 | ||
88d42654 | 702 | while (ch!=34) |
92a19c2e | 703 | |
88d42654 | 704 | { |
92a19c2e | 705 | |
88d42654 | 706 | phrase+=(char)ch; |
92a19c2e | 707 | |
88d42654 | 708 | ReadChar(ch); |
92a19c2e | 709 | |
88d42654 | 710 | } |
92a19c2e | 711 | |
88d42654 | 712 | return phrase; |
92a19c2e | 713 | |
88d42654 VS |
714 | } |
715 | ||
92a19c2e GT |
716 | |
717 | ||
2193517f | 718 | void rc2wxr::ReadChar(int &ch) |
92a19c2e | 719 | |
88d42654 | 720 | { |
92a19c2e | 721 | |
88d42654 | 722 | int result; |
92a19c2e | 723 | |
88d42654 VS |
724 | result=m_rc.Tell(); |
725 | ||
92a19c2e GT |
726 | |
727 | ||
88d42654 | 728 | if((result>=m_filesize)) |
92a19c2e | 729 | |
88d42654 VS |
730 | m_done=TRUE; |
731 | ||
92a19c2e GT |
732 | |
733 | ||
88d42654 VS |
734 | result=m_rc.Read(&ch,1); |
735 | ||
92a19c2e GT |
736 | |
737 | ||
88d42654 | 738 | if((result==-1)) |
92a19c2e | 739 | |
88d42654 VS |
740 | m_done=TRUE; |
741 | ||
92a19c2e GT |
742 | |
743 | ||
88d42654 | 744 | if(ch==EOF) |
92a19c2e | 745 | |
88d42654 | 746 | m_done=TRUE; |
92a19c2e | 747 | |
88d42654 VS |
748 | } |
749 | ||
92a19c2e GT |
750 | |
751 | ||
2193517f | 752 | void rc2wxr::ParseComboBox() |
92a19c2e | 753 | |
88d42654 | 754 | { |
92a19c2e | 755 | |
7c9955d1 | 756 | /* COMBOBOX IDC_SCALECOMBO,10,110,48,52,CBS_DROPDOWNLIST | CBS_SORT | |
92a19c2e | 757 | |
88d42654 | 758 | WS_VSCROLL | WS_TABSTOP */ |
92a19c2e | 759 | |
88d42654 | 760 | wxString tok; |
92a19c2e | 761 | |
88d42654 | 762 | wxString varname; |
92a19c2e | 763 | |
88d42654 | 764 | varname=GetToken(); |
92a19c2e | 765 | |
88d42654 | 766 | m_controlid++; |
92a19c2e | 767 | |
88d42654 | 768 | int x,y,width,height; |
92a19c2e | 769 | |
88d42654 VS |
770 | ReadRect(x,y,width,height); |
771 | ||
92a19c2e GT |
772 | |
773 | ||
19d0f58d | 774 | wxFprintf(m_wxr,_T(" control = [%i,wxChoice,'','0','%s',"),m_controlid,varname.c_str()); |
92a19c2e | 775 | |
19d0f58d | 776 | wxFprintf(m_wxr,_T("%i,%i,%i,%i,[],\\\n"),x,y,width,height); |
92a19c2e | 777 | |
19d0f58d | 778 | wxFprintf(m_wxr,_T("[8, 'wxSWISS', 'wxNORMAL', 'wxNORMAL', 0, 'MS Sans Serif']],\\\n")); |
88d42654 VS |
779 | |
780 | ||
92a19c2e GT |
781 | |
782 | ||
783 | ||
88d42654 VS |
784 | } |
785 | ||
92a19c2e GT |
786 | |
787 | ||
2193517f | 788 | void rc2wxr::ParseMenu(wxString name) |
92a19c2e | 789 | |
88d42654 | 790 | { |
92a19c2e | 791 | |
19d0f58d | 792 | wxString tok=wxEmptyString; |
92a19c2e | 793 | |
88d42654 | 794 | static int menuid=0; |
92a19c2e | 795 | |
88d42654 | 796 | menuid++; |
92a19c2e | 797 | |
19d0f58d | 798 | wxFprintf(m_wxr,_T("static char *MenuBar%i = \"menu(name = '%s',\\\n"),menuid,name.c_str()); |
92a19c2e | 799 | |
19d0f58d | 800 | wxFprintf(m_wxr,_T("menu = \\\n")); |
92a19c2e | 801 | |
19d0f58d | 802 | wxFprintf(m_wxr,_T("[\\\n")); |
88d42654 | 803 | |
92a19c2e GT |
804 | |
805 | ||
19d0f58d | 806 | while ((tok!=_T("BEGIN"))&(tok!=_T("{"))) |
92a19c2e | 807 | |
88d42654 VS |
808 | tok=GetToken(); |
809 | ||
92a19c2e GT |
810 | |
811 | ||
19d0f58d | 812 | while ((tok!=_T("END"))&(tok!=_T("}"))) |
92a19c2e | 813 | |
88d42654 | 814 | { |
92a19c2e | 815 | |
88d42654 | 816 | tok=GetToken(); |
92a19c2e | 817 | |
19d0f58d | 818 | if (tok==_T("POPUP")) |
92a19c2e | 819 | |
88d42654 | 820 | { |
92a19c2e | 821 | |
88d42654 | 822 | ParsePopupMenu(); |
92a19c2e | 823 | |
19d0f58d | 824 | wxFprintf(m_wxr,_T(" ],\\\n")); |
92a19c2e | 825 | |
88d42654 | 826 | } |
92a19c2e | 827 | |
88d42654 VS |
828 | } |
829 | ||
92a19c2e GT |
830 | |
831 | ||
19d0f58d | 832 | wxFprintf(m_wxr,_T("]).\";\n\n")); |
92a19c2e | 833 | |
88d42654 VS |
834 | } |
835 | ||
92a19c2e GT |
836 | |
837 | ||
2193517f | 838 | void rc2wxr::ParsePopupMenu() |
92a19c2e | 839 | |
88d42654 | 840 | { |
92a19c2e | 841 | |
88d42654 | 842 | static int menuitem=99; |
92a19c2e | 843 | |
88d42654 VS |
844 | menuitem++; |
845 | ||
92a19c2e GT |
846 | |
847 | ||
88d42654 | 848 | wxString tok; |
92a19c2e | 849 | |
88d42654 | 850 | tok=GetQuoteField(); |
92a19c2e | 851 | |
88d42654 | 852 | int spot; |
92a19c2e | 853 | |
88d42654 | 854 | //Remove /t because it causes problems |
92a19c2e | 855 | |
19d0f58d | 856 | spot=tok.First(_T("\\t")); |
92a19c2e | 857 | |
88d42654 | 858 | tok=tok.Left(spot); |
92a19c2e | 859 | |
19d0f58d | 860 | wxFprintf(m_wxr,_T(" ['%s',%i,'',\\\n"),tok.c_str(),menuitem); |
92a19c2e | 861 | |
19d0f58d | 862 | while ((tok!=_T("BEGIN"))&(tok!=_T("{"))) |
92a19c2e | 863 | |
88d42654 VS |
864 | tok=GetToken(); |
865 | ||
92a19c2e GT |
866 | |
867 | ||
19d0f58d | 868 | while ((tok!=_T("END"))&(tok!=_T("}"))) |
92a19c2e | 869 | |
88d42654 | 870 | { |
92a19c2e | 871 | |
88d42654 | 872 | tok=GetToken(); |
92a19c2e | 873 | |
19d0f58d | 874 | if (tok==_T("MENUITEM")) |
92a19c2e | 875 | |
2193517f | 876 | { |
92a19c2e | 877 | |
19d0f58d | 878 | if (PeekToken()==_T("SEPARATOR")) |
92a19c2e | 879 | |
19d0f58d | 880 | wxFprintf(m_wxr,_T(" [],\\\n")); |
92a19c2e | 881 | |
2193517f | 882 | else |
92a19c2e | 883 | |
2193517f | 884 | { |
92a19c2e | 885 | |
2193517f | 886 | tok=GetQuoteField(); |
92a19c2e | 887 | |
2193517f | 888 | //Remove /t because it causes problems |
92a19c2e | 889 | |
19d0f58d | 890 | spot=tok.First(_T("\\t")); |
92a19c2e | 891 | |
2193517f | 892 | tok=tok.Left(spot); |
92a19c2e | 893 | |
2193517f | 894 | menuitem++; |
92a19c2e | 895 | |
19d0f58d | 896 | wxFprintf(m_wxr,_T(" ['%s',%i,''],\\\n"),tok.c_str(),menuitem); |
92a19c2e | 897 | |
2193517f | 898 | } |
92a19c2e | 899 | |
2193517f | 900 | } |
88d42654 | 901 | |
92a19c2e GT |
902 | |
903 | ||
88d42654 VS |
904 | } |
905 | ||
92a19c2e GT |
906 | |
907 | ||
7c9955d1 | 908 | |
92a19c2e | 909 | |
88d42654 VS |
910 | } |
911 | ||
92a19c2e GT |
912 | |
913 | ||
2193517f | 914 | wxString rc2wxr::PeekToken() |
92a19c2e | 915 | |
88d42654 | 916 | { |
92a19c2e | 917 | |
88d42654 | 918 | wxString tok; |
92a19c2e | 919 | |
88d42654 | 920 | int p; |
92a19c2e | 921 | |
88d42654 | 922 | p=m_rc.Tell(); |
92a19c2e | 923 | |
88d42654 VS |
924 | tok=GetToken(); |
925 | ||
92a19c2e GT |
926 | |
927 | ||
88d42654 | 928 | m_rc.Seek(p); |
92a19c2e | 929 | |
88d42654 | 930 | return tok; |
92a19c2e | 931 | |
88d42654 | 932 | } |
92a19c2e | 933 | |
88d42654 | 934 | //Windows pain in the butt CONTROL |
92a19c2e | 935 | |
2193517f | 936 | void rc2wxr::ParseControlMS() |
92a19c2e | 937 | |
88d42654 | 938 | { |
92a19c2e | 939 | |
88d42654 | 940 | wxString label,varname,kindctrl,tok; |
92a19c2e | 941 | |
88d42654 | 942 | label=GetQuoteField(); |
92a19c2e | 943 | |
88d42654 | 944 | varname=GetToken(); |
92a19c2e | 945 | |
88d42654 | 946 | kindctrl=GetQuoteField(); |
92a19c2e | 947 | |
88d42654 VS |
948 | kindctrl.MakeUpper(); |
949 | ||
950 | ||
92a19c2e GT |
951 | |
952 | ||
953 | ||
19d0f58d | 954 | if (kindctrl==_T("MSCTLS_TRACKBAR32")) |
92a19c2e | 955 | |
88d42654 | 956 | ParseSlider(label,varname); |
92a19c2e | 957 | |
19d0f58d | 958 | if (kindctrl==_T("MSCTLS_PROGRESS32")) |
92a19c2e | 959 | |
88d42654 | 960 | ParseProgressBar(label,varname); |
92a19c2e | 961 | |
19d0f58d | 962 | if (kindctrl==_T("BUTTON")) |
92a19c2e | 963 | |
88d42654 | 964 | ParseCtrlButton(label,varname); |
92a19c2e | 965 | |
88d42654 | 966 | } |
92a19c2e | 967 | |
7c9955d1 | 968 | /* CONTROL "Slider1",IDC_SLIDER1,"msctls_trackbar32",TBS_BOTH | |
92a19c2e | 969 | |
88d42654 | 970 | TBS_NOTICKS | WS_TABSTOP,52,73,100,15 |
92a19c2e | 971 | |
88d42654 VS |
972 | */ |
973 | ||
92a19c2e GT |
974 | |
975 | ||
19d0f58d | 976 | void rc2wxr::ParseSlider(wxString WXUNUSED(label), wxString varname) |
92a19c2e | 977 | |
88d42654 | 978 | { |
92a19c2e | 979 | |
2193517f | 980 | wxString tok; |
92a19c2e | 981 | |
b2247ee9 CE |
982 | while (ReadOrs(tok)) |
983 | ; | |
92a19c2e | 984 | |
19d0f58d | 985 | wxFprintf(m_wxr,_T(" control = [%i,wxSlider,'','wxSL_HORIZONTAL','%s',"),m_controlid,varname.c_str()); |
92a19c2e | 986 | |
88d42654 | 987 | int x,y,width,height; |
92a19c2e | 988 | |
88d42654 | 989 | ReadRect(x,y,width,height); |
92a19c2e | 990 | |
19d0f58d | 991 | wxFprintf(m_wxr,_T("%i,%i,%i,%i,"),x,y,width,height); |
92a19c2e | 992 | |
19d0f58d | 993 | wxFprintf(m_wxr,_T(" 1, 1, 10,\\\n")); |
92a19c2e | 994 | |
19d0f58d | 995 | wxFprintf(m_wxr,_T("[8, 'wxSWISS', 'wxNORMAL', 'wxNORMAL', 0, 'MS Sans Serif']],\\\n")); |
92a19c2e | 996 | |
88d42654 | 997 | } |
92a19c2e | 998 | |
7c9955d1 | 999 | /* |
92a19c2e | 1000 | |
88d42654 | 1001 | CONTROL "Progress1",CG_IDC_PROGDLG_PROGRESS,"msctls_progress32", |
92a19c2e | 1002 | |
88d42654 | 1003 | WS_BORDER,15,52,154,13 |
92a19c2e | 1004 | |
88d42654 | 1005 | */ |
92a19c2e | 1006 | |
19d0f58d | 1007 | void rc2wxr::ParseProgressBar(wxString WXUNUSED(label), wxString varname) |
92a19c2e | 1008 | |
88d42654 | 1009 | { |
92a19c2e | 1010 | |
88d42654 | 1011 | wxString tok; |
92a19c2e | 1012 | |
b2247ee9 CE |
1013 | while (ReadOrs(tok)) |
1014 | ; | |
92a19c2e | 1015 | |
19d0f58d | 1016 | wxFprintf(m_wxr,_T(" control = [%i,wxGauge,'','wxGA_HORIZONTAL','%s',"),m_controlid,varname.c_str()); |
92a19c2e | 1017 | |
88d42654 | 1018 | int x,y,width,height; |
92a19c2e | 1019 | |
88d42654 | 1020 | ReadRect(x,y,width,height); |
92a19c2e | 1021 | |
19d0f58d | 1022 | wxFprintf(m_wxr,_T("%i,%i,%i,%i,"),x,y,width,height); |
92a19c2e | 1023 | |
19d0f58d | 1024 | wxFprintf(m_wxr,_T(" 0, 10,\\\n")); |
92a19c2e | 1025 | |
19d0f58d | 1026 | wxFprintf(m_wxr,_T("[8, 'wxSWISS', 'wxNORMAL', 'wxNORMAL', 0, 'MS Sans Serif']],\\\n")); |
92a19c2e | 1027 | |
88d42654 VS |
1028 | } |
1029 | ||
92a19c2e GT |
1030 | |
1031 | ||
2193517f | 1032 | bool rc2wxr::ReadOrs(wxString & w) |
92a19c2e | 1033 | |
88d42654 | 1034 | { |
92a19c2e | 1035 | |
88d42654 | 1036 | wxString tok; |
92a19c2e | 1037 | |
88d42654 | 1038 | tok=PeekToken(); |
92a19c2e | 1039 | |
88d42654 | 1040 | if (tok.IsNumber()) |
92a19c2e | 1041 | |
88d42654 | 1042 | return false; |
92a19c2e | 1043 | |
88d42654 | 1044 | w=GetToken(); |
92a19c2e | 1045 | |
88d42654 | 1046 | return TRUE; |
92a19c2e | 1047 | |
88d42654 VS |
1048 | } |
1049 | ||
92a19c2e GT |
1050 | |
1051 | ||
88d42654 | 1052 | //Is it a check button or a radio button |
92a19c2e | 1053 | |
2193517f | 1054 | void rc2wxr::ParseCtrlButton(wxString label, wxString varname) |
92a19c2e | 1055 | |
88d42654 | 1056 | { |
92a19c2e | 1057 | |
88d42654 | 1058 | wxString tok; |
92a19c2e | 1059 | |
2193517f | 1060 | tok=GetToken(); |
88d42654 | 1061 | |
92a19c2e GT |
1062 | |
1063 | ||
88d42654 | 1064 | m_controlid++; |
92a19c2e | 1065 | |
2193517f | 1066 | int x,y,width,height; |
88d42654 | 1067 | |
92a19c2e GT |
1068 | |
1069 | ||
19d0f58d | 1070 | if (tok==_T("BS_AUTOCHECKBOX")) |
92a19c2e | 1071 | |
88d42654 | 1072 | { |
92a19c2e | 1073 | |
19d0f58d | 1074 | wxFprintf(m_wxr,_T(" control = [%i,wxCheckBox,'%s','0','%s',"),m_controlid,label.c_str(),varname.c_str()); |
92a19c2e | 1075 | |
b2247ee9 CE |
1076 | while (ReadOrs(tok)) |
1077 | ; | |
92a19c2e | 1078 | |
2193517f | 1079 | ReadRect(x,y,width,height); |
92a19c2e | 1080 | |
19d0f58d | 1081 | wxFprintf(m_wxr,_T("%i,%i,%i,%i,0,\\\n"),x,y,width,height); |
92a19c2e | 1082 | |
19d0f58d | 1083 | wxFprintf(m_wxr,_T("[8, 'wxSWISS', 'wxNORMAL', 'wxNORMAL', 0, 'MS Sans Serif']],\\\n")); |
92a19c2e | 1084 | |
88d42654 VS |
1085 | } |
1086 | ||
92a19c2e GT |
1087 | |
1088 | ||
19d0f58d | 1089 | if (tok==_T("BS_AUTORADIOBUTTON")) |
92a19c2e | 1090 | |
88d42654 | 1091 | { |
92a19c2e | 1092 | |
19d0f58d | 1093 | wxFprintf(m_wxr,_T(" control = [%i,wxRadioButton,'%s','0','%s',"),m_controlid,label.c_str(),varname.c_str()); |
92a19c2e | 1094 | |
b2247ee9 CE |
1095 | while(ReadOrs(tok)) |
1096 | ; | |
92a19c2e | 1097 | |
2193517f | 1098 | ReadRect(x,y,width,height); |
92a19c2e | 1099 | |
19d0f58d | 1100 | wxFprintf(m_wxr,_T("%i,%i,%i,%i,0,\\\n"),x,y,width,height); |
92a19c2e | 1101 | |
19d0f58d | 1102 | wxFprintf(m_wxr,_T("[8, 'wxSWISS', 'wxNORMAL', 'wxNORMAL', 0, 'MS Sans Serif']],\\\n")); |
92a19c2e | 1103 | |
88d42654 VS |
1104 | } |
1105 | ||
1106 | ||
1107 | ||
92a19c2e GT |
1108 | |
1109 | ||
1110 | ||
1111 | ||
88d42654 VS |
1112 | } |
1113 | ||
92a19c2e GT |
1114 | |
1115 |