From: <mie...@us...> - 2008-06-28 15:36:02
|
Revision: 2599 http://oorexx.svn.sourceforge.net/oorexx/?rev=2599&view=rev Author: miesfeld Date: 2008-06-28 08:35:55 -0700 (Sat, 28 Jun 2008) Log Message: ----------- Fix the Windows build when creating rexx.img Modified Paths: -------------- interpreter-3.x/trunk/platform/windows/buildorx.bat interpreter-3.x/trunk/platform/windows/oodialog/RcDialog.cls interpreter-3.x/trunk/platform/windows/oodialog/advctrl.cls interpreter-3.x/trunk/platform/windows/oodialog/basedlg.cls interpreter-3.x/trunk/platform/windows/oodialog/dlgext.cls interpreter-3.x/trunk/platform/windows/oodialog/dyndlg.cls interpreter-3.x/trunk/platform/windows/oodialog/msgext.cls interpreter-3.x/trunk/platform/windows/oodialog/plbdlg.cls interpreter-3.x/trunk/platform/windows/oodialog/resdlg.cls interpreter-3.x/trunk/platform/windows/oodialog/userdlg.cls Property Changed: ---------------- interpreter-3.x/trunk/platform/windows/ Property changes on: interpreter-3.x/trunk/platform/windows ___________________________________________________________________ Name: svn:ignore + *.log Modified: interpreter-3.x/trunk/platform/windows/buildorx.bat =================================================================== --- interpreter-3.x/trunk/platform/windows/buildorx.bat 2008-06-28 00:15:25 UTC (rev 2598) +++ interpreter-3.x/trunk/platform/windows/buildorx.bat 2008-06-28 15:35:55 UTC (rev 2599) @@ -80,6 +80,15 @@ REM +REM *** Rexxutil. Note that RexxUtil needs to be built before rexx.img is created. +REM +@ECHO Building Rexxutil.. +CD %OR_ORYXRSRC% +IF %USELOGFILE% equ 1 ( NMAKE /F REXXUTIL.MAK >>%OR_ERRLOG% 2>&1 ) else ( NMAKE /F REXXUTIL.MAK ) +if ERRORLEVEL 1 goto error + + +REM REM *** These are the commmand lanuchers, need the kernel and rexxapi REM @ECHO Building Command launchers @@ -101,15 +110,8 @@ if ERRORLEVEL 1 goto error -REM -REM *** Rexxutil -REM -@ECHO Building Rexxutil.. +@ECHO Building rxwinsys.dll CD %OR_ORYXRSRC% -IF %USELOGFILE% equ 1 ( NMAKE /F REXXUTIL.MAK >>%OR_ERRLOG% 2>&1 ) else ( NMAKE /F REXXUTIL.MAK ) -if ERRORLEVEL 1 goto error - -@ECHO Building rxwinsys.dll IF %USELOGFILE% equ 1 ( NMAKE /F RXWINSYS.MAK >>%OR_ERRLOG% 2>&1 ) else ( NMAKE /F RXWINSYS.MAK ) if ERRORLEVEL 1 goto error Modified: interpreter-3.x/trunk/platform/windows/oodialog/RcDialog.cls =================================================================== --- interpreter-3.x/trunk/platform/windows/oodialog/RcDialog.cls 2008-06-28 00:15:25 UTC (rev 2598) +++ interpreter-3.x/trunk/platform/windows/oodialog/RcDialog.cls 2008-06-28 15:35:55 UTC (rev 2599) @@ -1,6 +1,6 @@ /*----------------------------------------------------------------------------*/ /* */ -/* Copyright (c) 2007 Rexx Language Association. All rights reserved. */ +/* Copyright (c) 2007-2008 Rexx Language Association. All rights reserved. */ /* */ /* This program and the accompanying materials are made available under */ /* the terms of the Common Public License v1.0 which accompanies this */ Modified: interpreter-3.x/trunk/platform/windows/oodialog/advctrl.cls =================================================================== --- interpreter-3.x/trunk/platform/windows/oodialog/advctrl.cls 2008-06-28 00:15:25 UTC (rev 2598) +++ interpreter-3.x/trunk/platform/windows/oodialog/advctrl.cls 2008-06-28 15:35:55 UTC (rev 2599) @@ -63,6 +63,8 @@ when type = "PB" then class = .ProgressBar when type = "SC" then class = .SliderControl when type = "TAB" then class = .TabControl + when type = "DT" then class = .DateTimePicker + when type = "MC" then class = .MonthCalendar otherwise return .Nil end ctrlobj = .Nil @@ -143,32 +145,54 @@ arr[3] = "TAB" forward message "GetControl" Arguments (arr) +::method GetMonthCalendar unguarded + arr = Arg(1,"A") + arr[3] = "MC" + forward message "GetControl" Arguments (arr) +::method GetDateTimePicker unguarded + arr = Arg(1,"A") + arr[3] = "DT" + forward message "GetControl" Arguments (arr) + + ::method ConnectTreeControl unguarded use arg id, attributeName forward message "AddAttribute" continue if result = -1 then return -1 - return DataTable(self~Adm,"ADD",result,6); /* new id in result 6 == Tree Type */ + return DataTable(self~Adm,"ADD",result,6); /* new id in result 6 == Tree Type */ ::method ConnectListControl unguarded use arg id, attributeName forward message "AddAttribute" continue if result = -1 then return -1 - return DataTable(self~Adm,"ADD",result,7); /* new id in result 7 == List Type */ + return DataTable(self~Adm,"ADD",result,7); /* new id in result 7 == List Type */ ::method ConnectSliderControl unguarded use arg id, attributeName forward message "AddAttribute" continue if result = -1 then return -1 - return DataTable(self~Adm,"ADD",result,8); /* new id in result 8 == Track Bar Type */ + return DataTable(self~Adm,"ADD",result,8); /* new id in result 8 == Track Bar Type */ ::method ConnectTabControl unguarded use arg id, attributeName forward message "AddAttribute" continue if result = -1 then return -1 - return DataTable(self~Adm,"ADD",result,9); /* new id in result 9 == Tab Type */ + return DataTable(self~Adm,"ADD",result,9); /* new id in result 9 == Tab Type */ +::method ConnectDateTimePicker unguarded + use arg id, attributeName + forward message "AddAttribute" continue + if result = -1 then return -1 + return DataTable(self~Adm,"ADD",result,10); /* new id in result 10 == Date and Time Picker */ +::method ConnectMonthCalendar unguarded + use arg id, attributeName + forward message "AddAttribute" continue + if result = -1 then return -1 + return DataTable(self~Adm,"ADD",result,11); /* new id in result 11 == Month Calendar */ + + ::method InternGetNewCtrlStyle use arg style, kind ret = "" @@ -232,9 +256,29 @@ else if kind = "PROGRESS" then do if style~wordpos("PBS_VERTICAL") > 0 then ret = ret || " VERTICAL" if style~wordpos("PBS_SMOOTH") > 0 then ret = ret || " SMOOTH" + if style~wordpos("PBS_MARQUEE") > 0 then ret = ret || " MARQUEE" if style~wordpos("WS_BORDER") > 0 then ret = ret || " BORDER" if style~wordpos("WS_TABSTOP") > 0 then ret = ret || " TAB" end + else if kind = "DTP" then do + if style~wordpos("DTS_APPCANPARSE") > 0 then ret = ret || " PARSE" + if style~wordpos("DTS_RIGHTALIGN;") > 0 then ret = ret || " RIGHT" + if style~wordpos("DTS_SHOWNONE; ") > 0 then ret = ret || " NONE" + if style~wordpos("DTS_UPDOWN; ") > 0 then ret = ret || " UPDOWN" + if style~wordpos("DTS_LONGDATEFORMAT") > 0 then ret = ret || " LONG" + if style~wordpos("DTS_SHORTDATEFORMAT") > 0 then ret = ret || " SHORT" + if style~wordpos("DTS_SHORTDATECENTURYFORMAT") > 0 then ret = ret || " CENTURY" + if style~wordpos("DTS_TIMEFORMAT") > 0 then ret = ret || " TIME" + if style~wordpos("WS_BORDER") > 0 then ret = ret || " BORDER" + end + else if kind = "MONTH" then do + if style~wordpos("MCS_DAYSTATE") > 0 then ret = ret || " DAYSTATE" + if style~wordpos("MCS_MULTISELECT") > 0 then ret = ret || " MULTI" + if style~wordpos("MCS_NOTODAY") > 0 then ret = ret || " NOTODAY" + if style~wordpos("MCS_NOTODAYCIRCLE") > 0 then ret = ret || " NOCIRCLE" + if style~wordpos("MCS_WEEKNUMBERS") > 0 then ret = ret || " WEEKNUMBERS" + if style~wordpos("WS_BORDER") > 0 then ret = ret || " BORDER" + end if style~wordpos("WS_VSCROLL") > 0 then ret = ret || " VSCROLL" if style~wordpos("WS_HSCROLL") > 0 then ret = ret || " HSCROLL" if style~wordpos("WS_TABSTOP") = 0 then ret = ret || " NOTAB" @@ -302,7 +346,33 @@ end +::method AddDateTimePicker + use arg id, attname, x, y, cx, cy, opts + symbid = id + id = self~ItemAdd(id) + if id < 0 then return id + if Arg(2, 'O') then attname = "DATA"id + opts = self~GetDefaultOpts(opts) + self~AktPtr = UsrAddNewCtrl("DTP", self~AktPtr, id, x, y, cx, cy, opts) + if self~AutoDetect = 1 then do + self~ConnectDateTimePicker(symbid, attname) + end + +::method AddMonthCalendar + use arg id, attname, x, y, cx, cy, opts + symbid = id + id = self~ItemAdd(id) + if id < 0 then return id + if Arg(2, 'O') then attname = "DATA"id + opts = self~GetDefaultOpts(opts) + self~AktPtr = UsrAddNewCtrl("MONTH", self~AktPtr, id, x, y, cx, cy, opts) + if self~AutoDetect = 1 then do + self~ConnectMonthCalendar(symbid, attname) + end + + + /***************************************************************************************************************/ /* Control Classes */ /***************************************************************************************************************/ @@ -415,6 +485,9 @@ ::method GetStyleRaw -- Get the control's current GWL_STYLE style return HandleControlEx(self~hDlg, self~id, "X", "GET") +::method GetFont + return HandleControlEx(self~hDlg, self~id, "F", "GET") + ::method Clear parse value WindowRect("GET", self~Hwnd) with r.1 r.2 r.3 r.4 return WindowRect("CLR", self~oDlg~Adm, self~Hwnd,r.1,r.2,r.3,r.4) @@ -724,6 +797,21 @@ ::method LastItem attribute +/* FIXME TODO implement storing lastitem index in the window words!! +::method new class + use arg pdialog, id, category + Forward Class(Super) continue /* this also calls Init */ + obj = result + + data = HandleListCtrlEx(obj~hWnd, "M", "USER", "G") + say "Got back" data "for USERDATA" + data = HandleListCtrlEx(obj~hWnd, "M", "USER", "S", 99) + say "Set 99, got back again:" data + data = HandleListCtrlEx(obj~hWnd, "M", "USER", "G") + say "Now got back" data "for USERDATA" + return obj +*/ + ::method Init forward class (super) continue self~LastItem = -1 @@ -841,7 +929,37 @@ if width~datatype("N") = 1 then width = width * self~FactorX return HandleListCtrl("C","SETWIDTH", self~Hwnd, nr, width~translate) +::method GetColumnCount + return HandleListCtrlEx(self~hwnd, "G", "COLCOUNT") +::method GetColumnOrder + + retStr = HandleListCtrlEx(self~hwnd, "M", "ORDER") + if retStr~datatype('W') then return retStr + + retArray = .array~new + do i = 1 to retStr~words + retArray~append(retStr~word(i)) + end + return retArray + +::method SetColumnOrder + use strict arg order + if \ order~isInstanceOf(.array) then return -3 + + count = order~items + if count < 2 then return 0 + + argStr = " " + do i = 1 to count + nr = order[i] + if \ nr~datatype('W') then return -3 + if \ (nr >= 0 & nr < count) then return -3 + argStr = argStr || nr || ' ' + end + + return HandleListCtrlEx(self~hwnd, "M", 'ORDER', argStr) + ::method StringWidth use arg text if Arg(1,'o') = 1 then return -1 @@ -1204,11 +1322,35 @@ end else return 0 +::method SetMarquee + use strict arg on, interval = 500 + return HandleOtherNewCtrls("PROGRESS", "MARQUEE", self~hwnd, on, interval) +::method BarColor + use strict arg r, g, b + return HandleOtherNewCtrls("PROGRESS", "BAR", self~hwnd, r, g, b) +::method BackgroundColor + use strict arg r, g, b + return HandleOtherNewCtrls("PROGRESS", "BACK", self~hwnd, r, g, b) +::method MakeRGB + use strict arg red, green, blue + if \ self~checkRGBNumber(red) then raise syntax 88.907 array("red", 0, 255, red) + if \ self~checkRGBNumber(green) then raise syntax 88.907 array("green", 0, 255, green) + if \ self~checkRGBNumber(blue) then raise syntax 88.907 array("blue", 0, 255, blue) +::method checkRGBNumber private + use arg n + if \ n~isA(.string) then return .false + if \ n~datatype('W') then return .false + if n < 0 | n > 255 then return .false + return .true + + + + /****************************************************** Track Bar Class *********************************************************/ @@ -1459,6 +1601,18 @@ ::class 'StaticControl' subclass DialogControl public +-- STM_SETICON == 0x0170 +::method SetIcon + use strict arg hIcon + return SendWinMsg("ANY", self~hwnd, "0x0170", hIcon, 0) + +::method SetText + use strict arg text + return HandleControlEx(self~hDlg, self~id, "E", "TXT", text) + +::method GetText + return HandleControlEx(self~hDlg, self~id, "E", "TXT") + /****************************************************** Edit Control Class *********************************************************/ ::class 'EditControl' subclass DialogControl public @@ -2073,3 +2227,66 @@ end self~SetPos(pos) return pos + + +::class 'DateTimePicker' subclass DialogControl public + + +::method getDateTime -- Get the currently selected date and time + return HandleDateTimePicker(self~hwnd, 'G', 'SYS') + +::method setDateTime + use strict arg hr = (time('N')~left(2)), min = (time('N')~substr(4, 5)), - + sec = (time('N')~substr(7,8)), ms = 0, dy = (date('S')~right(2)), - + mn = (date('S')~substr(5, 6)), yr = (date('S')~left(4)) + + return HandleDateTimePicker(self~hwnd, 'S', 'SYS', hr':'min':'sec'.'ms dy mn yr) + +::method clear + return HandleDateTimePicker(self~hwnd, 'S', 'SYS') + +::class 'MonthCalendar' subclass DialogControl public + +::method init + expose n2Day n2Month + + forward class (super) continue + + n2Day = .array~of('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', - + 'Friday', 'Saturday') + + n2Month = .array~of('January', 'February', 'March', 'April', 'May', 'June', - + 'July', 'August', 'September', 'October', 'November', - + 'December') + +::method getDate -- Get the currently selected date + expose n2Day n2Month + use arg format = 'COMPLETE' + + ans = HandleMonthCalendar(self~hwnd, 'G', 'CUR') + + select + when ans == 1 then ans = -1 + when format~caselessCompare('RAW') == 0 then nop + + when format~caselessCompare('NORMAL') == 0 then do + ans = ans~word(1) n2Month[ans~word(2)]~left(3) ans~word(3) + end + + when format~caselessCompare('COMPLETE') == 0 then do + ans = n2Day[ans~word(4) + 1] || ',' n2Month[ans~word(2)] ans~word(1) || ',' ans~word(3) + end + + otherwise ans = -1 + end + -- End select + + return ans + +::method usesUnicode + return HandleMonthCalendar(self~hwnd, 'G', "UNI") + + +::method setDate + use strict arg day, month, year = (date('S')~left(4)) + return HandleMonthCalendar(self~hwnd, 'S', 'CUR', day month year) Modified: interpreter-3.x/trunk/platform/windows/oodialog/basedlg.cls =================================================================== --- interpreter-3.x/trunk/platform/windows/oodialog/basedlg.cls 2008-06-28 00:15:25 UTC (rev 2598) +++ interpreter-3.x/trunk/platform/windows/oodialog/basedlg.cls 2008-06-28 15:35:55 UTC (rev 2599) @@ -219,6 +219,23 @@ use arg hBitmap return LoadRemoveBitmap(0 /* NULL Adm */, hBitmap, "REMOVE") +::method LoadSysIcon unguarded + use strict arg iconName + return WinAPI32Func('I', 'S', iconName~translate) + +::method LoadIconDirect unguarded + use strict arg iconID, cx = 0, cy = 0, src = 'U' + if \ iconID~isA(.string) then return -1 + if \ iconID~datatype("W") then iconID = self~ResolveSymbolicId(iconID) + if iconID = -1 then return iconID + if src~left(1)~translate == 'D' then src = 'D' + else src = 'U' + return WinAPI32Func('I', 'N', self~adm, iconID, cx, cy, src) + +::method LoadIcon unguarded + use strict arg fileName, cx = 0, cy = 0 + return WinAPI32Func('I', 'F', fileName, cx, cy) + ::method CreateBrush unguarded use arg color, brushSpecifier if Arg() = 0 then return HandleDC_Obj("B") @@ -421,4 +438,5 @@ self~BkgBitmap = 0 /* no background bitmap */ self~BkgBrushBmp = 0 /* no background bitmap */ + self~menuBar = .nil return 0 Modified: interpreter-3.x/trunk/platform/windows/oodialog/dlgext.cls =================================================================== --- interpreter-3.x/trunk/platform/windows/oodialog/dlgext.cls 2008-06-28 00:15:25 UTC (rev 2598) +++ interpreter-3.x/trunk/platform/windows/oodialog/dlgext.cls 2008-06-28 15:35:55 UTC (rev 2599) @@ -889,78 +889,74 @@ -/******************************************************************************/ -/* Menu/Action bar extensions */ +/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*\ + These menu bar methods are needed to provide backward compatibility for the + deprecated menu methods. The ooDialog programmer is *strongly* discouraged + from using them. If the deprecated methods are removed, these will be removed + with them. +\* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/ +::attribute menuBar get +::attribute menuBar set private + +::method linkMenu + use strict arg menu + + if \ menu~isA(.MenuBar) then return -1 + + oldMenu = self~menuBar + self~menuBar = menu + return oldMenu + +::method unlinkMenu + menu = self~menuBar + self~menuBar = .nil + return menu + +/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*\ + The following menu bar methods are deprecated, instead, use the Menu classes + directly. +\* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/ + ::method EnableMenuItem unguarded - use arg id - if id~DataType("N") = 0 then id = self~ResolveSymbolicId(id) - if id = -1 then return -1 - return DialogMenu("SETMI", self~Adm, id, "ENABLE") + use strict arg id + if self~menuBar == .nil then return -2 + return self~menuBar~enable(id) - ::method DisableMenuItem unguarded - use arg id - if id~DataType("N") = 0 then id = self~ResolveSymbolicId(id) - if id = -1 then return -1 - return DialogMenu("SETMI", self~Adm, id, "DISABLE") + use strict arg id + if self~menuBar == .nil then return -2 + return self~menuBar~disable(id) - ::method CheckMenuItem unguarded - use arg id - if id~DataType("N") = 0 then id = self~ResolveSymbolicId(id) - if id = -1 then return -1 - return DialogMenu("SETMI", self~Adm, id, "CHECK") + use strict arg id + if self~menuBar == .nil then return -2 + return self~menuBar~check(id) - ::method UncheckMenuItem unguarded - use arg id - if id~DataType("N") = 0 then id = self~ResolveSymbolicId(id) - if id = -1 then return -1 - return DialogMenu("SETMI", self~Adm, id, "UNCHECK") + use strict arg id + if self~menuBar == .nil then return -2 + return self~menuBar~uncheck(id) - ::method GrayMenuItem unguarded - use arg id - if id~DataType("N") = 0 then id = self~ResolveSymbolicId(id) - if id = -1 then return -1 - return DialogMenu("SETMI", self~Adm, id, "GRAY") + use strict arg id + if self~menuBar == .nil then return -2 + return self~menuBar~gray(id) - ::method SetMenuItemRadio unguarded - use arg idstart, idend, idset - if idStart~DataType("N") = 0 - then idStart = self~ResolveSymbolicId(idStart) - if idEnd~DataType("N") = 0 - then idEnd = self~ResolveSymbolicId(idEnd) - if idSet~DataType("N") = 0 - then idSet = self~ResolveSymbolicId(idSet) - if (idStart = -1) | (idEnd = -1) | (idSet = -1) - then return -1 - return DialogMenu("SETMI", self~Adm, idstart, idend, idset) + use strict arg idstart, idend, idset + if self~menuBar == .nil then return -2 + return self~menuBar~checkRadio(idstart, idend, idset) - ::method GetMenuItemState unguarded - use arg id - if id~DataType("N") = 0 then id = self~ResolveSymbolicId(id) - if id = -1 then return -1 - return DialogMenu("GETMI", self~Adm, id) + use strict arg id + if self~menuBar == .nil then return -2 + return self~menuBar~getState(id) +/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*\ + End deprecated menu bar methods. +\* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/ -::method ConnectMenuItem - use arg id, msgToRise - if id~DataType("N") = 0 then do - if self~ProcessingLoad = 1 then msgToRise = id - id = self~ResolveSymbolicId(id) - if id = -1 then return -1 - end - else do - if id < 3 | id = 9 then return 0 - if Arg(2, 'o') = 1 then msgToRise = "" - end - return self~AddUserMsg(msgToRise, 0x00000111, 0xFFFFFFFF, id, 0x0000FFFF, 0, 0) - - /******************************************************************************/ /* New extensions */ @@ -980,6 +976,22 @@ use arg msgToRise self~AddUserMsg(msgToRise, 0x00000215, 0xFFFFFFFF, 0, 0, 0, 0) +::method ConnectMenuItem + use strict arg id, msgToRaise + + id = self~ResolveResourceId(id) + if id = -1 then return -1 + + if id < 3 | id = 9 then return 0 + + return self~AddUserMsg(msgToRaise, 0x00000111, 0xFFFFFFFF, id, 0x0000FFFF, 0, 0) + +-- Connect WM_CONTEXTMENU messages to a method. +::method connectContextMenu + use strict arg msgToRaise, hwnd = .nil + if hwnd \== .nil then return self~addUserMsg(msgToRaise, 0x0000007B, 0xFFFFFFFF, hwnd, 0xFFFFFFFF, 0, 0, 0x00000201) + return self~addUserMsg(msgToRaise, 0x0000007B, 0xFFFFFFFF, 0, 0, 0, 0, 0x00000201) + ::method PeekDialogMessage unguarded return GetDlgMsg(self~Adm, "Peek") Modified: interpreter-3.x/trunk/platform/windows/oodialog/dyndlg.cls =================================================================== --- interpreter-3.x/trunk/platform/windows/oodialog/dyndlg.cls 2008-06-28 00:15:25 UTC (rev 2598) +++ interpreter-3.x/trunk/platform/windows/oodialog/dyndlg.cls 2008-06-28 15:35:55 UTC (rev 2599) @@ -50,12 +50,7 @@ ::method AktPtr attribute protected ::method DialogItemCount attribute protected - /* attributes for internal use (menu) */ -::method MenuBasePtr attribute protected -::method MenuAktPtr attribute protected -::method MenuMemHandle attribute protected - ::method DynamicInit private if RxFuncQuery("InstUserMMFuncs") \= 0 then do ret = Rxfuncadd("InstUserMMFuncs", "oodialog", "InstUserMMFuncs") @@ -69,9 +64,6 @@ end end self~AktPtr = 0 - self~MenuAktPtr = 0 - self~MenuBasePtr = 0 - self~MenuMemHandle = 0 self~DialogItemCount = 0 if Arg(1,'o') = 1 then self~UseStem = 0; else self~UseStem = 1 return 0 @@ -126,24 +118,6 @@ forward message "Create" Arguments (newarg) -::method Checkfile private - use arg f - if (f~lines = 0) then do - f~close - self~ProcessingLoad = 0 - ret = ErrorMessage("Error reading resource file!" f) - return 1 - end - return 0 - - -::method Errorfile private - use arg f, s - f~close - self~ProcessingLoad = 0 - ret = ErrorMessage("Error reading resource file:" f "("s")") - - /* This method is provided to be used in any subclass of 'UserDialog' */ ::method DefineDialog protected @@ -241,6 +215,19 @@ if style~wordpos("WS_TABSTOP") = 0 then ret = ret || " NOTAB" end else if kind = "ST" then do + if style~wordpos("SS_CENTERIMAGE") > 0 then ret = ret || " CENTERIMAGE" + if style~wordpos("SS_EDITCONTROL") > 0 then ret = ret || " EDITCONTROL" + if style~wordpos("SS_ENDELLIPSIS") > 0 then ret = ret || " ENDELLIPSIS" + if style~wordpos("SS_NOPREFIX") > 0 then ret = ret || " NOPREFIX" + if style~wordpos("SS_NOTIFY") > 0 then ret = ret || " NOTIFY" + if style~wordpos("SS_PATHELLIPSIS") > 0 then ret = ret || " PATHELLIPSIS" + if style~wordpos("SS_RIGHTJUST") > 0 then ret = ret || " RIGHTJUST" + if style~wordpos("SS_REALSIZECONTROL") > 0 then ret = ret || " SIZECONTROL" + if style~wordpos("SS_REALSIZEIMAGE") > 0 then ret = ret || " SIZEIMAGE" + if style~wordpos("SS_SIMPLE") > 0 then ret = ret || " SIMPLE" + if style~wordpos("SS_SUNKEN") > 0 then ret = ret || " SUNKEN" + if style~wordpos("SS_WORDELLIPSIS") > 0 then ret = ret || " WORDELLIPSIS" + if style~wordpos("WS_BORDER") > 0 then ret = ret || " BORDER" if style~wordpos("WS_TABSTOP") > 0 then ret = ret || " TAB" end @@ -482,8 +469,21 @@ self~AddGrayFRAME(x, y, w, h, opts, id) when style~wordpos("SS_BLACKFRAME") > 0 then self~AddBlackFRAME(x, y, w, h, opts, id) + when style~wordpos("SS_ETCHEDFRAME") > 0 then + self~AddStatic(id, x, y, w, h, "ETCHED " || opts) + when style~wordpos("SS_ETCHEDHORZ") > 0 then + self~AddStatic(id, x, y, w, h, "HORZ " || opts) + when style~wordpos("SS_ETCHEDVERT") > 0 then + self~AddStatic(id, x, y, w, h, "VERT " || opts) + when style~wordpos("SS_BITMAP") > 0 then + self~AddImage(id, x, y, w, h, "BITMAP " || opts) + when style~wordpos("SS_ENHMETAFILE") > 0 then + self~AddImage(id, x, y, w, h, "METAFILE " || opts) + when style~wordpos("SS_ICON") > 0 then + self~AddImage(id, x, y, w, h, "ICON " || opts) otherwise - ret = ErrorMessage("Item ignored due to unknown option in:" f "("s")") + ret = ErrorMessage("Static item ignored due to unknown static style option in:" || - + '0d0a'x || f "("s")") end end when class = '"EDIT"' then @@ -513,6 +513,12 @@ when class = 'WC_TABCONTROL' | class = '"SYSTABCONTROL32"' then self~AddTabControl(id, name, x, y, w, h, self~InternGetNewCtrlStyle(style, "TAB")) + when class = 'DATETIMEPICK_CLASS' then + self~AddDateTimePicker(id, name, x, y, w, h, self~InternGetNewCtrlStyle(style, "DTP")) + + when class = 'MONTHCAL_CLASS' then + self~AddMonthCalendar(id, name, x, y, w, h, self~InternGetNewCtrlStyle(style, "MONTH")) + otherwise do self~errorFile(f, s) return 1 @@ -544,6 +550,11 @@ self~AddText(x, y, w, h, name, opts, id) end + when type = "ICON" then do + opts = self~InternGetRCStyle(style, "ST") + self~AddImage(id, x, y, w, h, "ICON " || opts) + end + when type = "GROUPBOX" then self~AddGroupBox(x, y, w, h, name, self~InternGetRCStyle(style, "ST"), id) @@ -579,25 +590,6 @@ self~ProcessingLoad = 0 return 0 - - -::method CheckId - use arg id - - if id~datatype("N") = 0 then do - if self~ConstDir = .Nil then do - ret = ErrorMessage("Adding dialog item:" id "undefined non-numeric identification number!") - return -1 - end - else if self~ConstDir[id~space(0)~translate] = .Nil then do - ret = ErrorMessage("Adding dialog item:" id "undefined non-numeric identification number!") - return -1 - end - id = self~ResolveSymbolicId(id) - end - return id - - ::method ItemAdd use arg id, staticId if self~AktPtr = 0 then return -2 @@ -679,7 +671,38 @@ ::method AddBlackFrame return self~InternAddStatic(Arg(1,"A"), 5) +::method AddStatic + use arg id, x, y, cx, cy, options + arga = .array~new + options = self~GetDefaultOpts(options) + arga[1] = x + arga[2] = y + arga[3] = cx + arga[4] = cy + arga[5] = options + if arg(1, 'E') then arga[6] = id + select + when options~wordpos("WHITERECT") > 0 then return self~InternAddStatic(arga, 0) + when options~wordpos("GRAYRECT") > 0 then return self~InternAddStatic(arga, 1) + when options~wordpos("BLACKRECT") > 0 then return self~InternAddStatic(arga, 2) + when options~wordpos("WHITEFRAME") > 0 then return self~InternAddStatic(arga, 3) + when options~wordpos("GRAYFRAME") > 0 then return self~InternAddStatic(arga, 4) + when options~wordpos("BLACKFRAME") > 0 then return self~InternAddStatic(arga, 5) + when options~wordpos("ETCHED") > 0 then return self~InternAddStatic(arga, 6) + when options~wordpos("HORZ") > 0 then return self~InternAddStatic(arga, 7) + when options~wordpos("VERT") > 0 then return self~InternAddStatic(arga, 8) + otherwise return -1 + end + -- End select + +::method AddImage + use arg id, x, y, cx, cy, options + id = self~ItemAdd(id) + if id < 0 then return id + options = self~GetDefaultOpts(options) + self~AktPtr = UsrAddControl("IMG", self~AktPtr, id, x, y, cx, cy, options) + ::method AddEntryLine use arg id, fname, x, y, cx, cy, opts symbid = id Modified: interpreter-3.x/trunk/platform/windows/oodialog/msgext.cls =================================================================== --- interpreter-3.x/trunk/platform/windows/oodialog/msgext.cls 2008-06-28 00:15:25 UTC (rev 2598) +++ interpreter-3.x/trunk/platform/windows/oodialog/msgext.cls 2008-06-28 15:35:55 UTC (rev 2599) @@ -151,7 +151,7 @@ lp = -101 tag = 0x00000907 end - when type = "SELECTFOCUS" then do + when type~abbrev("SELECTFOCUS") then do lp = -101 tag = 0x00000D07 end Modified: interpreter-3.x/trunk/platform/windows/oodialog/plbdlg.cls =================================================================== --- interpreter-3.x/trunk/platform/windows/oodialog/plbdlg.cls 2008-06-28 00:15:25 UTC (rev 2598) +++ interpreter-3.x/trunk/platform/windows/oodialog/plbdlg.cls 2008-06-28 15:35:55 UTC (rev 2599) @@ -43,7 +43,6 @@ /* */ /******************************************************************************/ - ::requires "oodutils.cls" /* load public routines (not static) */ @@ -188,13 +187,140 @@ return GetSysMetrics(index) + +::class 'ResourceUtils' public mixinclass object + +::method ProcessingLoad attribute protected /* in LoadItems ? */ +::method ConstDir attribute protected /* directory containing constants */ + +::method ParseIncludeFile + use strict arg hFile + + -- Revisit. Should an error msg box be put up if the file is not found? + hFile = SysSearchPath("PATH", hFile) + if hFile == "" then return 1 + + f = .stream~new(hFile) + f~open(read) + + do while f~state == "READY" + line = f~linein~strip('L') + + if line~abbrev("#ifdef") then do + self~skipThroughIfDefs(f, line) + iterate + end + + if line~abbrev("#define") & line~words == 3 then do + parse var line def symbol numericID . + if numericID~datatype('W') then self~ConstDir[symbol~translate] = numericID + end + end + f~close + return 0 + +::method skipThroughIfDefs private + use arg fObj, line + + if \ line~abbrev("#ifdef") & \ line~abbrev("#ifndef") then return + ifDefStack = .queue~new + ifDefStack~push(line) + do while fObj~state == "READY" + l = fObj~linein~strip("L") + select + when l~abbrev("#endif") then ifDefStack~pull + when l~abbrev("#ifdef") then ifDefStack~push(l) + when l~abbrev("#ifndef") then ifDefStack~push(l) + otherwise nop + end + if ifDefStack~items == 0 then leave + end + +::method Checkfile private + use arg f + if (f~lines = 0) then do + f~close + self~ProcessingLoad = 0 + ret = ErrorMessage("Error reading resource file!" f) + return 1 + end + return 0 + +::method Errorfile private + use arg f, s + f~close + self~ProcessingLoad = 0 + ret = ErrorMessage("Error reading resource file:" f "("s")") + +::method CheckId + use strict arg id + + if id~datatype("W") then return id + + if \ self~ConstDir~isA(.directory) then return self~idError(id) + + if self~ConstDir[id~space(0)~translate] = .nil then return self~idError(id) + + return self~ResolveSymbolicId(id) + +::method idError private + use strict arg id + j = ErrorMessage("Adding dialog resource:" id "undefined" || '0d0a'x || - + "non-numeric identification number.") + return -1 + +::method ResolveSymbolicId unguarded + use strict arg id + id = self~ConstDir[id~space(0)~translate] + if id == .nil then return -1 + return id + +/** + * Return a symbolic ID from the ConstDir that matches the numeric ID. + * The docs will advise users of ooDialog to use unique numbers for all + * resources. + */ +::method ResolveNumericID unguarded + use arg numericID + if \ numericID~datatype('W') then return -1 + do symbolicID over self~ConstDir~allIndexes + if self~ConstDir[symbolicID] == numericID then return symbolicID + end + return -1 + +::method resolveResourceID unguarded + use strict arg id + if id~datatype("W"), id > -1 then return id + return self~ResolveSymbolicId(id) + +::method mergeSymbols + use strict arg otherSymbolSrc + + select + when otherSymbolSrc~isA(.directory) then do + if self~constDir == otherSymbolSrc then return 0 + self~constDir~putAll(otherSymbolSrc) + otherSymbolSrc~putAll(self~constDir) + end + + when otherSymbolSrc~isA(.ResourceUtils) then do + if self~constDir == otherSymbolSrc~constDir then return 0 + self~constDir~putAll(otherSymbolSrc~constDir) + otherSymbolSrc~constDir~putAll(self~constDir) + end + + otherwise return -1 + end + -- End select + return 0 + /******************************************************************************/ /* The class PlainBaseDialog implements methods that are common to a dialog */ /* by Resource Workshop (ResDialog) and to a dialog created by using Add... */ -/* methods (UserDialog). */ +/* methods (UserDialog). */ /******************************************************************************/ -::class 'PlainBaseDialog' public inherit WindowBase +::class 'PlainBaseDialog' public inherit WindowBase ResourceUtils ::method Adm attribute protected /* external adminstration buffer */ ::method AutoDetect attribute /* Automatic data field detection on/off */ @@ -212,8 +338,6 @@ /* execution of the dialog */ ::method AutomaticMethods attribute protected -::method ConstDir attribute protected /* directory containing constants */ -::method ProcessingLoad attribute protected /* in LoadItems ? */ ::method ChildDialogs attribute /* the constructor of the class will install the necessary C-functions to */ @@ -292,51 +416,6 @@ return 0 -::method ParseIncludeFile - use strict arg hFile - - if hFile == "" then return 1 - - -- Revisit. Should an error msg box be put up if the file is not found? - hFile = SysSearchPath("PATH", hFile) - if hFile == "" then return 1 - - f = .stream~new(hFile) - f~open(read) - - do while f~state == "READY" - line = f~linein~strip('L') - - if line~abbrev("#ifdef") then do - self~skipThroughIfDefs(f, line) - iterate - end - - if line~abbrev("#define") & line~words == 3 then do - parse var line def symbol numericID . - if numericID~datatype('W') then self~ConstDir[symbol~translate] = numericID - end - end - f~close - return 0 - -::method skipThroughIfDefs private - use arg fObj, line - - if \ line~abbrev("#ifdef") & \ line~abbrev("#ifndef") then return - ifDefStack = .queue~new - ifDefStack~push(line) - do while fObj~state == "READY" - l = fObj~linein~strip("L") - select - when l~abbrev("#endif") then ifDefStack~pull - when l~abbrev("#ifdef") then ifDefStack~push(l) - when l~abbrev("#ifndef") then ifDefStack~push(l) - otherwise nop - end - if ifDefStack~items == 0 then leave - end - ::method DlgHandle unguarded return self~hwnd @@ -356,10 +435,16 @@ ::method Run unguarded protected use arg sleeptime if Arg(1,'o') = 1 then sleeptime = 0 + + msgObj = self~start("workAround") /* TODO FIXME what to do here? */ + drop msgObj + do while self~finished = 0 self~HandleMessages(sleeptime) end +::method workAround + /* this method will create the dialog, show it (see method show), start */ /* automatic methods and destroy the dialog. Data will be set and */ /* received */ @@ -448,24 +533,28 @@ ::method GetSelf unguarded return HandleDlg("HNDL", self~Adm) -::method ResolveSymbolicId unguarded - use arg id - id = self~ConstDir[id~space(0)~translate] - if id \= .Nil then return id; else return -1 - /** - * Return a symbolic ID from the ConstDir that matches the numeric ID. - * The docs will advise users of ooDialog to use unique numbers for all - * resources. + * Convenience methods to return the high or low word in 32-bit value. */ -::method ResolveNumericID unguarded - use arg numericID - if \ numericID~datatype('W') then return -1 - do symbolicID over self~ConstDir~allIndexes - if self~ConstDir[symbolicID] == numericID then return symbolicID - end - return -1 +::method loWord + use strict arg dword + numeric digits 10 + if dword~isA(.string), dword~datatype('W') then + return BinaryAnd(dword, "0x0000FFFF") + else + return .nil + +::method hiWord + use strict arg dword + + numeric digits 10 + if dword~isA(.string), dword~datatype('W') then + return BinaryAnd(dword, "0xFFFF0000") % "10000"~x2d + else + return .nil + + /* This method returns the handle of a dialog item */ ::method GetItem unguarded Modified: interpreter-3.x/trunk/platform/windows/oodialog/resdlg.cls =================================================================== --- interpreter-3.x/trunk/platform/windows/oodialog/resdlg.cls 2008-06-28 00:15:25 UTC (rev 2598) +++ interpreter-3.x/trunk/platform/windows/oodialog/resdlg.cls 2008-06-28 15:35:55 UTC (rev 2599) @@ -102,11 +102,11 @@ return ret +-- This method is deprecated, instead use the Menu classes directly. ::method SetMenu - use strict arg id - if \ id~DataType("W") then id = self~ResolveSymbolicId(id) - if id < 1 then return -1 + use strict arg id + menuBar = .BinaryMenuBar~new(self, id, self, 0, .true) + if menuBar~initCode == 0 then self~menuBar = menuBar + return menuBar~initCode - return DialogMenu("ASSOC", self~DlgHandle, id) - Modified: interpreter-3.x/trunk/platform/windows/oodialog/userdlg.cls =================================================================== --- interpreter-3.x/trunk/platform/windows/oodialog/userdlg.cls 2008-06-28 00:15:25 UTC (rev 2598) +++ interpreter-3.x/trunk/platform/windows/oodialog/userdlg.cls 2008-06-28 15:35:55 UTC (rev 2599) @@ -69,174 +69,52 @@ return ret /******************************************************************************/ -/* Menu/Action bar */ +/* Menu/Action bar. These methods are deprecated, instead, use the Menu */ +/* classes directly. */ ::method SetMenu - if self~MenuMemHandle <> 0 then - return UsrMenu("SET", self~DlgHandle, self~MenuMemHandle, self~MenuBasePtr) - else return 1 + menuBar = self~menuBar + if menuBar == .nil then return -2 + + if menuBar~isA(.UserMenuBar) then do + ret = menuBar~complete + if ret < 0 then return ret + end + + return menuBar~attachTo(self) + ::method CreateMenu - use arg count - if arg(1,'o') = 1 then count = 100 - parse value UsrMenu("INIT", count) with hmem base curptr + use strict arg count = 100 - self~MenuBasePtr = base - self~MenuAktPtr = curptr - self~MenuMemHandle = hmem + menuBar = .UserMenuBar~new(self, count) + if menuBar~initCode <> 0 then return menuBar~initCode + + self~menuBar = menuBar return 0; - ::method AddPopupMenu - use arg name, opt - if arg(2,'o') = 1 then opt = "" - self~MenuAktPtr = UsrMenu("ADD", self~MenuAktPtr, 0, name, "POPUP" || opt) + use strict arg name, opt = "" + if self~menuBar == .nil then return -2 + return self~menuBar~addPopup(name, , opt) ::method AddMenuItem - use arg name, id, opt, msgToRaise - id = self~CheckId(id) - if id = -1 then return - if arg(3,'o') = 1 then opt = "" - self~MenuAktPtr = UsrMenu("ADD", self~MenuAktPtr, id, name, opt) - if arg(4,'o') = 0 then self~ConnectMenuItem(id, msgToRaise) + use strict arg name, id, opt = "", msgToRaise = .nil + if self~menuBar == .nil then return -2 + return self~menuBar~addItem(name, id, opt, msgToRaise) - ::method AddMenuSeparator - self~MenuAktPtr = UsrMenu("ADD", self~MenuAktPtr, 0, "", "SEPARATOR") + if self~menuBar == .nil then return -2 + return self~menuBar~addSeparator - ::method LoadMenu protected - use arg resfile, menuid, loadopts, count - if arg(4,'o') = 1 then count = 50 - if arg(3,'o') = 1 then loadopts = ""; else loadopts = loadopts~Translate + use strict arg resfile, menuid = .nil, loadopts = "", count = 50 - file = SysSearchPath("PATH",resfile) - f = .stream~new(file) - op = f~open(read) - if op \= "READY:" then do - say "Resource file not found --> " op - return 1 - end + connect = .false + if loadopts~caselessWordPos("CONNECTITEMS") <> 0 then connect = .true - found = 0; n = 0 - fl = f~lines - do while found = 0 & fl > 0 - do while n = 0 & fl > 0 - s = f~linein; fl = fl - 1 - /* premission: #define only at the top of the RC and separated by a tab or a blank */ - /* need this here as well because menu resource could be in separate file */ - if s~wordpos("#define") > 0 then do - s = s~translate(" ", "9"x) - parse var s "#define " symb iid - self~ConstDir[symb~space(0)~translate] = iid - end - n = s~wordpos("MENU") - end + menuBar = .ScriptMenuBar~new(resFile, menuid, self, 0, count, connect) + if menuBar~initCode <> 0 then return menuBar~initCode - if (self~checkfile(f) = 1) then return 1 - - if Arg(2,'o') = 1 | menuid = "MENUID" then found = 1 - else do - if s~word(n-1)~translate = menuid~translate then found = 1 - else if self~CheckId(s~word(n-1)) = menuid then found = 1 - else n = 0 - end - end - - s = f~linein; fl = fl - 1 - do while s~wordpos("BEGIN") = 0 & s~pos("{") = 0 & fl > 0 - s = f~linein; fl = fl - 1 - end - - if (self~checkfile(f) = 1) then return 1 - - rcarray = .array~new(50) - bracket = 1 - cur = 0 - endcount = 0 - - prevs = "" - s = f~linein; fl = fl - 1 - do while bracket > 0 & fl >= 0 - if s~wordpos("END") > 0 | s~pos("}") > 0 then - do - bracket = bracket - 1; - endcount = endcount + 1 - cur = cur + 1 - rcarray[cur] = s - end - else if s~wordpos("BEGIN") > 0 | s~pos("{") > 0 then do - bracket = bracket + 1; - cur = cur + 1 - rcarray[cur] = s - end - else if s~strip \= "" then do - cur = cur + 1 - rcarray[cur] = s - end - s = f~linein; fl = fl - 1 - end - - f~close - arrcount = cur; - - if (count < cur - endcount) then count = cur - endcount +5; - - if self~CreateMenu(count) <> 0 then return 1 - - self~ProcessingLoad = 1 - - do i = 1 to arrcount - s = rcarray[i] - - select - when s~wordpos("POPUP") > 0 then - do - parse var s type '"'name'"' "," opt - - j = i + 1; - bracket = 0 - do until bracket = 0 - if rcarray[j]~wordpos("BEGIN") > 0 | rcarray[j]~pos("{") > 0 then - bracket = bracket + 1 - else if rcarray[j]~wordpos("END") > 0 | rcarray[j]~pos("}") > 0 then - bracket = bracket - 1 - j = j +1 - end - - if rcarray[j]~wordpos("END") > 0 | rcarray[j]~pos("}") > 0 then opt = opt || "END" - - self~AddPopupMenu(name, opt) - end - - when s~wordpos("SEPARATOR") > 0 then - do - parse var s type sep opt - if rcarray[i+1]~wordpos("END") > 0 | rcarray[i+1]~pos("}") > 0 then opt = opt || " END" - self~AddMenuSeparator(opt) - end - - when s~wordpos("MENUITEM") > 0 then - do - parse var s type '"'name'"' "," id "," opt - if rcarray[i+1]~wordpos("END") > 0 | rcarray[i+1]~pos("}") > 0 then opt = opt || " END" - if (loadopts~wordpos("CONNECTITEMS") > 0) then - do - amper = name~pos('&') - if amper > 0 then name = name~delstr(amper, 1) - self~AddMenuItem(name, id, opt, name~space(0)) - end - else - self~AddMenuItem(name, id, opt) - end - when s~wordpos("END") > 0 | s~pos("}") > 0 | s~wordpos("BEGIN") > 0 | s~pos("{") > 0 then nop; - - otherwise do - self~errorFile(f, s) - return 1 - end - end /*select 1*/ - end /* do while */ - self~ProcessingLoad = 0 - + self~menuBar = menuBar return 0 This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |